@skyux/core 5.5.0-alpha.0 → 5.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/documentation.json +93 -93
  2. package/esm2015/lib/modules/adapter-service/adapter.service.js +1 -1
  3. package/esm2015/lib/modules/adapter-service/adapter.service.js.map +1 -1
  4. package/esm2015/lib/modules/affix/affix-config.js.map +1 -1
  5. package/esm2015/lib/modules/affix/affix.directive.js.map +1 -1
  6. package/esm2015/lib/modules/affix/affix.module.js.map +1 -1
  7. package/esm2015/lib/modules/affix/affixer.js +1 -1
  8. package/esm2015/lib/modules/affix/affixer.js.map +1 -1
  9. package/esm2015/lib/modules/dock/dock-dom-adapter.service.js +1 -1
  10. package/esm2015/lib/modules/dock/dock-dom-adapter.service.js.map +1 -1
  11. package/esm2015/lib/modules/dock/dock.component.js.map +1 -1
  12. package/esm2015/lib/modules/dock/dock.module.js.map +1 -1
  13. package/esm2015/lib/modules/dock/dock.service.js +3 -3
  14. package/esm2015/lib/modules/dock/dock.service.js.map +1 -1
  15. package/esm2015/lib/modules/dynamic-component/dynamic-component.service.js.map +1 -1
  16. package/esm2015/lib/modules/media-query/media-query.service.js.map +1 -1
  17. package/esm2015/lib/modules/numeric/numeric.module.js.map +1 -1
  18. package/esm2015/lib/modules/numeric/numeric.pipe.js +4 -4
  19. package/esm2015/lib/modules/numeric/numeric.pipe.js.map +1 -1
  20. package/esm2015/lib/modules/numeric/numeric.service.js +1 -1
  21. package/esm2015/lib/modules/numeric/numeric.service.js.map +1 -1
  22. package/esm2015/lib/modules/overlay/overlay-instance.js.map +1 -1
  23. package/esm2015/lib/modules/overlay/overlay.component.js +1 -1
  24. package/esm2015/lib/modules/overlay/overlay.component.js.map +1 -1
  25. package/esm2015/lib/modules/overlay/overlay.module.js.map +1 -1
  26. package/esm2015/lib/modules/overlay/overlay.service.js.map +1 -1
  27. package/esm2015/lib/modules/percent-pipe/percent-pipe.module.js.map +1 -1
  28. package/esm2015/lib/modules/percent-pipe/percent.pipe.js.map +1 -1
  29. package/esm2015/lib/modules/scrollable-host/scrollable-host.service.js +4 -4
  30. package/esm2015/lib/modules/scrollable-host/scrollable-host.service.js.map +1 -1
  31. package/esm2015/lib/modules/shared/number-format/number-format-utility.js.map +1 -1
  32. package/esm2015/lib/modules/shared/sky-core-resources.module.js +1 -1
  33. package/esm2015/lib/modules/shared/sky-core-resources.module.js.map +1 -1
  34. package/esm2015/lib/modules/title/title.service.js.map +1 -1
  35. package/esm2015/lib/modules/viewkeeper/viewkeeper.directive.js +2 -2
  36. package/esm2015/lib/modules/viewkeeper/viewkeeper.directive.js.map +1 -1
  37. package/esm2015/lib/modules/viewkeeper/viewkeeper.js +1 -1
  38. package/esm2015/lib/modules/viewkeeper/viewkeeper.js.map +1 -1
  39. package/esm2015/lib/modules/viewkeeper/viewkeeper.service.js.map +1 -1
  40. package/esm2015/testing/mock-media-query.service.js.map +1 -1
  41. package/esm2015/testing/mock-ui-config.service.js.map +1 -1
  42. package/fesm2015/skyux-core-testing.js.map +1 -1
  43. package/fesm2015/skyux-core.js +50 -50
  44. package/fesm2015/skyux-core.js.map +1 -1
  45. package/lib/modules/affix/affix.directive.d.ts +2 -2
  46. package/lib/modules/affix/affixer.d.ts +1 -1
  47. package/lib/modules/dock/dock.service.d.ts +2 -2
  48. package/lib/modules/numeric/numeric.pipe.d.ts +2 -2
  49. package/lib/modules/overlay/overlay-instance.d.ts +1 -1
  50. package/package.json +16 -2
@@ -1 +1 @@
1
- {"version":3,"file":"numeric.service.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/numeric/numeric.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;;;AASvF,MAAM,OAAO,iBAAiB;IA2B5B,YAAoB,gBAAwC;QAAxC,qBAAgB,GAAhB,gBAAgB,CAAwB;QATpD,gBAAW,GAAuB;YACxC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,gCAAgC,CAAC,EAAE;YACxE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,+BAA+B,CAAC,EAAE;YACtE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,+BAA+B,CAAC,EAAE;YACtE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,gCAAgC,CAAC,EAAE;SACxE,CAAC;IAI6D,CAAC;IA1BhE;;;OAGG;IACH,IAAW,aAAa,CAAC,KAAa;QACpC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC;IACjC,CAAC;IAkBD;;;;OAIG;IACI,YAAY,CAAC,KAAa,EAAE,OAAuB;;QACxD,8CAA8C;QAC9C,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE;YAClC,OAAO,EAAE,CAAC;SACX;QAED,MAAM,kBAAkB,GAAG,0BAA0B,CAAC;QAEtD,qFAAqF;QACrF,iCAAiC;QACjC,IAAI,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAE/C,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAChD,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAEjC,IACE,OAAO,CAAC,QAAQ;gBAChB,gBAAgB,IAAI,OAAO,CAAC,aAAa;gBACzC,gBAAgB,IAAI,MAAM,CAAC,KAAK,EAChC;gBACA,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBAEvE,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;oBAC7C,yEAAyE;oBACzE,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACjC,aAAa,IAAI,IAAI,CAAC;iBACvB;gBAED,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;gBAEtB,MAAM;aACP;SACF;QAED,IAAI,MAAM,GACR,aAAa,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC;QAEtE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAEhC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC;QAEpD,IAAI,MAAc,CAAC;QACnB,0EAA0E;QAC1E,QAAQ,MAAA,OAAO,CAAC,MAAM,0CAAE,WAAW,EAAE,EAAE;YACrC,wDAAwD;YACxD,sDAAsD;YACtD,2EAA2E;YAC3E,oEAAoE;YACpE,wBAAwB;YACxB,KAAK,UAAU;gBACb,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;gBAElC,IAAI,OAAO,CAAC,SAAS,EAAE;oBACrB,MAAM,GAAG,KAAK,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;iBACrD;qBAAM,IAAI,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;oBAC3C,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;iBAClC;qBAAM;oBACL,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;iBAClC;gBAED,+EAA+E;gBAC/E,2FAA2F;gBAC3F,mDAAmD;gBACnD,6DAA6D;gBAC7D,MAAM,aAAa,GAAQ,QAAQ,CAAC;gBAEpC,MAAM,GAAG,sBAAsB,CAAC,YAAY,CAC1C,MAAM,EACN,UAAU,CAAC,MAAM,CAAC,EAClB,wBAAwB,CAAC,QAAQ,EACjC,MAAM,EACN,OAAO,CAAC,GAAG,EACX,aAAa,EACb,OAAO,CAAC,YAAY,CACrB,CAAC;gBACF,MAAM;YAER,iDAAiD;YACjD,0DAA0D;YAC1D,oCAAoC;YACpC;gBACE,yDAAyD;gBACzD,oBAAoB;gBACpB,IAAI,OAAO,CAAC,SAAS,EAAE;oBACrB,MAAM,GAAG,KAAK,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;iBACrD;qBAAM,IAAI,OAAO,CAAC,QAAQ,EAAE;oBAC3B,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;iBAClC;qBAAM;oBACL,MAAM,GAAG,KAAK,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;iBAClD;gBAED,MAAM,GAAG,sBAAsB,CAAC,YAAY,CAC1C,MAAM,EACN,UAAU,CAAC,MAAM,CAAC,EAClB,wBAAwB,CAAC,OAAO,EAChC,MAAM,CACP,CAAC;gBACF,MAAM;SACT;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE;YACpB,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;SAC5C;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACK,WAAW,CAAC,KAAa,EAAE,YAAoB,CAAC;QACtD,IAAI,SAAS,GAAG,CAAC,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;SAC/D;QAED,8CAA8C;QAC9C,0FAA0F;QAC1F,0BAA0B;QAC1B,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE;YAClC,OAAO,CAAC,CAAC;SACV;QAED,MAAM,WAAW,GAAW,IAAI,CAAC,uBAAuB,CACtD,KAAK,EACL,SAAS,EACT,IAAI,CACL,CAAC;QACF,MAAM,kBAAkB,GAAW,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,oBAAoB,GAAW,IAAI,CAAC,uBAAuB,CAC/D,kBAAkB,EAClB,SAAS,EACT,KAAK,CACN,CAAC;QAEF,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACK,uBAAuB,CAC7B,KAAa,EACb,MAAc,EACd,OAAgB;QAEhB,MAAM,QAAQ,GAAW,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC;QACxD,MAAM,gBAAgB,GAAY,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEzD,IAAI,gBAAgB,EAAE;YACpB,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YACrE,OAAO,MAAM,CAAC,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;SACpC;aAAM;YACL,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/B,OAAO,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;SACxC;IACH,CAAC;IAED;;;OAGG;IACK,kBAAkB,CAAC,KAAa;QACtC,MAAM,OAAO,GAAa,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,CAAC;IAED;;;;;;OAMG;IACK,oBAAoB,CAAC,KAAa;QACxC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QACzC,MAAM,MAAM,GACV,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAEpE,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,SAAS,CAAC,GAAW;QAC3B,6EAA6E;QAC7E,OAAO,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5E,CAAC;;+GAzOU,iBAAiB;mHAAjB,iBAAiB,cAFhB,KAAK;4FAEN,iBAAiB;kBAH7B,UAAU;mBAAC;oBACV,UAAU,EAAE,KAAK;iBAClB","sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { SkyIntlNumberFormatStyle, SkyLibResourcesService } from '@skyux/i18n';\n\nimport { SkyNumberFormatUtility } from '../shared/number-format/number-format-utility';\n\nimport { NumericOptions } from './numeric.options';\n\nimport { SkyNumericSymbol } from './numeric-symbol';\n\n@Injectable({\n providedIn: 'any',\n})\nexport class SkyNumericService {\n /**\n * The browser's current locale.\n * @internal\n */\n public set currentLocale(value: string) {\n this._locale = value;\n }\n\n public get currentLocale(): string {\n return this._locale || 'en-US';\n }\n\n /**\n * @internal\n */\n public shortSymbol: string;\n\n private symbolIndex: SkyNumericSymbol[] = [\n { value: 1e12, label: this.getSymbol('skyux_numeric_trillions_symbol') },\n { value: 1e9, label: this.getSymbol('skyux_numeric_billions_symbol') },\n { value: 1e6, label: this.getSymbol('skyux_numeric_millions_symbol') },\n { value: 1e3, label: this.getSymbol('skyux_numeric_thousands_symbol') },\n ];\n\n private _locale: string;\n\n constructor(private resourcesService: SkyLibResourcesService) {}\n\n /**\n * Shortens with or without symbol (K/M/B/T) depending on value of number.\n * @param value The number to format.\n * @param options Format options.\n */\n public formatNumber(value: number, options: NumericOptions): string {\n /* tslint:disable-next-line:no-null-keyword */\n if (isNaN(value) || value === null) {\n return '';\n }\n\n const decimalPlaceRegExp = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\n\n // Get the symbol for the number after rounding, since rounding could push the number\n // into a different symbol range.\n let roundedNumber = this.roundNumber(value, options.digits);\n let roundedNumberAbs = Math.abs(roundedNumber);\n\n let suffix = '';\n\n for (let i = 0; i < this.symbolIndex.length; i++) {\n let symbol = this.symbolIndex[i];\n\n if (\n options.truncate &&\n roundedNumberAbs >= options.truncateAfter &&\n roundedNumberAbs >= symbol.value\n ) {\n roundedNumber = this.roundNumber(value / symbol.value, options.digits);\n\n if (Math.abs(roundedNumber) === 1000 && i > 0) {\n // Rounding caused the number to cross into the range of the next symbol.\n symbol = this.symbolIndex[i - 1];\n roundedNumber /= 1000;\n }\n\n suffix = symbol.label;\n\n break;\n }\n }\n\n let output =\n roundedNumber.toString().replace(decimalPlaceRegExp, '$1') + suffix;\n\n this.storeShortenSymbol(output);\n\n const locale = options.locale || this.currentLocale;\n\n let digits: string;\n // Checks the string entered for format. Using toLowerCase to ignore case.\n switch (options.format?.toLowerCase()) {\n // In a case where a decimal value was not shortened and\n // the digit input is 2 or higher, it forces 2 digits.\n // For example, this prevents a value like $15.50 from displaying as $15.5.\n // Note: This will need to be reviewed if we support currencies with\n // three decimal digits.\n case 'currency':\n const isDecimal = value % 1 !== 0;\n\n if (options.minDigits) {\n digits = `1.${options.minDigits}-${options.digits}`;\n } else if (isDecimal && options.digits >= 2) {\n digits = `1.2-${options.digits}`;\n } else {\n digits = `1.0-${options.digits}`;\n }\n\n // Angular 5+ needs a string for this parameter, but Angular 4 needs a boolean.\n // To support both versions we can supply 'symbol' which will evaluate truthy for Angular 4\n // and the appropriate string value for Angular 5+.\n // See: https://angular.io/api/common/CurrencyPipe#parameters\n const symbolDisplay: any = 'symbol';\n\n output = SkyNumberFormatUtility.formatNumber(\n locale,\n parseFloat(output),\n SkyIntlNumberFormatStyle.Currency,\n digits,\n options.iso,\n symbolDisplay,\n options.currencySign\n );\n break;\n\n // The following is a catch-all to ensure that if\n // anything but currency (or a future option) are entered,\n // it will be treated like a number.\n default:\n // Ensures localization of the number to ensure comma and\n // decimal separator\n if (options.minDigits) {\n digits = `1.${options.minDigits}-${options.digits}`;\n } else if (options.truncate) {\n digits = `1.0-${options.digits}`;\n } else {\n digits = `1.${options.digits}-${options.digits}`;\n }\n\n output = SkyNumberFormatUtility.formatNumber(\n locale,\n parseFloat(output),\n SkyIntlNumberFormatStyle.Decimal,\n digits\n );\n break;\n }\n\n if (options.truncate) {\n output = this.replaceShortenSymbol(output);\n }\n\n return output;\n }\n\n /**\n * Rounds a given number\n *\n * JS's limitation - numbers bigger than Number.MIN_SAFE_INTEGER or Number.MAX_SAFE_INTEGER\n * are not guaranteed to be represented or rounded correctly\n * @param value - value to round\n * @param precision - what precision to round with, defaults to 0 decimal places\n */\n private roundNumber(value: number, precision: number = 0): number {\n if (precision < 0) {\n throw new Error('SkyInvalidArgument: precision must be >= 0');\n }\n\n /* tslint:disable-next-line:no-null-keyword */\n /* Sanity check - ignoring coverage but should not ignore if we make this method public */\n /* istanbul ignore next */\n if (isNaN(value) || value === null) {\n return 0;\n }\n\n const scaledValue: number = this.scaleNumberByPowerOfTen(\n value,\n precision,\n true\n );\n const scaledRoundedValue: number = Math.round(scaledValue);\n const unscaledRoundedValue: number = this.scaleNumberByPowerOfTen(\n scaledRoundedValue,\n precision,\n false\n );\n\n return unscaledRoundedValue;\n }\n\n /**\n * Scales a given number by a power of 10\n * @param value - value to scale\n * @param scalar - 10^scalar\n * @param scaleUp - whether to increase or decrease the value\n */\n private scaleNumberByPowerOfTen(\n value: number,\n scalar: number,\n scaleUp: boolean\n ): number {\n const valueStr: string = value.toString().toLowerCase();\n const isExponentFormat: boolean = valueStr.includes('e');\n\n if (isExponentFormat) {\n const [base, exp] = valueStr.split('e');\n const newExp = scaleUp ? Number(exp) + scalar : Number(exp) - scalar;\n return Number(`${base}e${newExp}`);\n } else {\n const e = scaleUp ? 'e' : 'e-';\n return Number(`${value}${e}${scalar}`);\n }\n }\n\n /**\n * Stores the symbol added from shortening to reapply later.\n * @param value The string to derive the shorten symbol from.\n */\n private storeShortenSymbol(value: string): void {\n const symbols: string[] = this.symbolIndex.map((s) => s.label);\n const regexp = new RegExp(symbols.join('|'), 'ig');\n const match = value.match(regexp);\n this.shortSymbol = match ? match.toString() : '';\n }\n\n /**\n * Must have previously called storeShortenSymbol to have something to replace.\n * Finds the last number in the formatted number, gets the index of the position\n * after that character and re-inserts the symbol.\n * Works regardless of currency symbol position.\n * @param value The string to modify.\n */\n private replaceShortenSymbol(value: string): string {\n const result = /(\\d)(?!.*\\d)/g.exec(value);\n const pos = result.index + result.length;\n const output =\n value.substring(0, pos) + this.shortSymbol + value.substring(pos);\n\n return output;\n }\n\n private getSymbol(key: string): string {\n // TODO: Need to implement the async `getString` method in a breaking change.\n return this.resourcesService.getStringForLocale({ locale: 'en_US' }, key);\n }\n}\n"]}
1
+ {"version":3,"file":"numeric.service.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/numeric/numeric.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable } from '@angular/core';\nimport { SkyIntlNumberFormatStyle, SkyLibResourcesService } from '@skyux/i18n';\n\nimport { SkyNumberFormatUtility } from '../shared/number-format/number-format-utility';\n\nimport { SkyNumericSymbol } from './numeric-symbol';\nimport { NumericOptions } from './numeric.options';\n\n@Injectable({\n providedIn: 'any',\n})\nexport class SkyNumericService {\n /**\n * The browser's current locale.\n * @internal\n */\n public set currentLocale(value: string) {\n this._locale = value;\n }\n\n public get currentLocale(): string {\n return this._locale || 'en-US';\n }\n\n /**\n * @internal\n */\n public shortSymbol: string;\n\n private symbolIndex: SkyNumericSymbol[] = [\n { value: 1e12, label: this.getSymbol('skyux_numeric_trillions_symbol') },\n { value: 1e9, label: this.getSymbol('skyux_numeric_billions_symbol') },\n { value: 1e6, label: this.getSymbol('skyux_numeric_millions_symbol') },\n { value: 1e3, label: this.getSymbol('skyux_numeric_thousands_symbol') },\n ];\n\n private _locale: string;\n\n constructor(private resourcesService: SkyLibResourcesService) {}\n\n /**\n * Shortens with or without symbol (K/M/B/T) depending on value of number.\n * @param value The number to format.\n * @param options Format options.\n */\n public formatNumber(value: number, options: NumericOptions): string {\n /* tslint:disable-next-line:no-null-keyword */\n if (isNaN(value) || value === null) {\n return '';\n }\n\n const decimalPlaceRegExp = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\n\n // Get the symbol for the number after rounding, since rounding could push the number\n // into a different symbol range.\n let roundedNumber = this.roundNumber(value, options.digits);\n const roundedNumberAbs = Math.abs(roundedNumber);\n\n let suffix = '';\n\n for (let i = 0; i < this.symbolIndex.length; i++) {\n let symbol = this.symbolIndex[i];\n\n if (\n options.truncate &&\n roundedNumberAbs >= options.truncateAfter &&\n roundedNumberAbs >= symbol.value\n ) {\n roundedNumber = this.roundNumber(value / symbol.value, options.digits);\n\n if (Math.abs(roundedNumber) === 1000 && i > 0) {\n // Rounding caused the number to cross into the range of the next symbol.\n symbol = this.symbolIndex[i - 1];\n roundedNumber /= 1000;\n }\n\n suffix = symbol.label;\n\n break;\n }\n }\n\n let output =\n roundedNumber.toString().replace(decimalPlaceRegExp, '$1') + suffix;\n\n this.storeShortenSymbol(output);\n\n const locale = options.locale || this.currentLocale;\n\n let digits: string;\n // Checks the string entered for format. Using toLowerCase to ignore case.\n switch (options.format?.toLowerCase()) {\n // In a case where a decimal value was not shortened and\n // the digit input is 2 or higher, it forces 2 digits.\n // For example, this prevents a value like $15.50 from displaying as $15.5.\n // Note: This will need to be reviewed if we support currencies with\n // three decimal digits.\n case 'currency':\n const isDecimal = value % 1 !== 0;\n\n if (options.minDigits) {\n digits = `1.${options.minDigits}-${options.digits}`;\n } else if (isDecimal && options.digits >= 2) {\n digits = `1.2-${options.digits}`;\n } else {\n digits = `1.0-${options.digits}`;\n }\n\n // Angular 5+ needs a string for this parameter, but Angular 4 needs a boolean.\n // To support both versions we can supply 'symbol' which will evaluate truthy for Angular 4\n // and the appropriate string value for Angular 5+.\n // See: https://angular.io/api/common/CurrencyPipe#parameters\n const symbolDisplay: any = 'symbol';\n\n output = SkyNumberFormatUtility.formatNumber(\n locale,\n parseFloat(output),\n SkyIntlNumberFormatStyle.Currency,\n digits,\n options.iso,\n symbolDisplay,\n options.currencySign\n );\n break;\n\n // The following is a catch-all to ensure that if\n // anything but currency (or a future option) are entered,\n // it will be treated like a number.\n default:\n // Ensures localization of the number to ensure comma and\n // decimal separator\n if (options.minDigits) {\n digits = `1.${options.minDigits}-${options.digits}`;\n } else if (options.truncate) {\n digits = `1.0-${options.digits}`;\n } else {\n digits = `1.${options.digits}-${options.digits}`;\n }\n\n output = SkyNumberFormatUtility.formatNumber(\n locale,\n parseFloat(output),\n SkyIntlNumberFormatStyle.Decimal,\n digits\n );\n break;\n }\n\n if (options.truncate) {\n output = this.replaceShortenSymbol(output);\n }\n\n return output;\n }\n\n /**\n * Rounds a given number\n *\n * JS's limitation - numbers bigger than Number.MIN_SAFE_INTEGER or Number.MAX_SAFE_INTEGER\n * are not guaranteed to be represented or rounded correctly\n * @param value - value to round\n * @param precision - what precision to round with, defaults to 0 decimal places\n */\n private roundNumber(value: number, precision: number = 0): number {\n if (precision < 0) {\n throw new Error('SkyInvalidArgument: precision must be >= 0');\n }\n\n /* tslint:disable-next-line:no-null-keyword */\n /* Sanity check - ignoring coverage but should not ignore if we make this method public */\n /* istanbul ignore next */\n if (isNaN(value) || value === null) {\n return 0;\n }\n\n const scaledValue: number = this.scaleNumberByPowerOfTen(\n value,\n precision,\n true\n );\n const scaledRoundedValue: number = Math.round(scaledValue);\n const unscaledRoundedValue: number = this.scaleNumberByPowerOfTen(\n scaledRoundedValue,\n precision,\n false\n );\n\n return unscaledRoundedValue;\n }\n\n /**\n * Scales a given number by a power of 10\n * @param value - value to scale\n * @param scalar - 10^scalar\n * @param scaleUp - whether to increase or decrease the value\n */\n private scaleNumberByPowerOfTen(\n value: number,\n scalar: number,\n scaleUp: boolean\n ): number {\n const valueStr: string = value.toString().toLowerCase();\n const isExponentFormat: boolean = valueStr.includes('e');\n\n if (isExponentFormat) {\n const [base, exp] = valueStr.split('e');\n const newExp = scaleUp ? Number(exp) + scalar : Number(exp) - scalar;\n return Number(`${base}e${newExp}`);\n } else {\n const e = scaleUp ? 'e' : 'e-';\n return Number(`${value}${e}${scalar}`);\n }\n }\n\n /**\n * Stores the symbol added from shortening to reapply later.\n * @param value The string to derive the shorten symbol from.\n */\n private storeShortenSymbol(value: string): void {\n const symbols: string[] = this.symbolIndex.map((s) => s.label);\n const regexp = new RegExp(symbols.join('|'), 'ig');\n const match = value.match(regexp);\n this.shortSymbol = match ? match.toString() : '';\n }\n\n /**\n * Must have previously called storeShortenSymbol to have something to replace.\n * Finds the last number in the formatted number, gets the index of the position\n * after that character and re-inserts the symbol.\n * Works regardless of currency symbol position.\n * @param value The string to modify.\n */\n private replaceShortenSymbol(value: string): string {\n const result = /(\\d)(?!.*\\d)/g.exec(value);\n const pos = result.index + result.length;\n const output =\n value.substring(0, pos) + this.shortSymbol + value.substring(pos);\n\n return output;\n }\n\n private getSymbol(key: string): string {\n // TODO: Need to implement the async `getString` method in a breaking change.\n return this.resourcesService.getStringForLocale({ locale: 'en_US' }, key);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"overlay-instance.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/overlay/overlay-instance.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,OAAO,EAAE,MAAM,MAAM,CAAC;AAM3C;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAmB7B;IACE;;OAEG;IACa,MAAwB,EACxB,YAA+C;QAD/C,WAAM,GAAN,MAAM,CAAkB;QACxB,iBAAY,GAAZ,YAAY,CAAmC;QATzD,mBAAc,GAAG,IAAI,OAAO,EAAQ,CAAC;QAErC,YAAO,GAAG,IAAI,OAAO,EAAQ,CAAC;QASpC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;YAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE;YACtD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAlCD;;OAEG;IACH,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAwBD;;;;OAIG;IACI,eAAe,CACpB,SAAkB,EAClB,SAA4B;QAE5B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAC7D,SAAS,EACT,SAAS,CACV,CAAC;QACF,OAAO,YAAY,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAI,WAA2B,EAAE,OAAW;QAC/D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;CACF","sourcesContent":["import { ComponentRef, StaticProvider, TemplateRef, Type } from '@angular/core';\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { SkyOverlayComponent } from './overlay.component';\n\nimport { SkyOverlayConfig } from './overlay-config';\n\n/**\n * Represents a new overlay instance. It is used to manage the \"closed\" state of the overlay,\n * and access any public members on the appended content component instance.\n */\nexport class SkyOverlayInstance {\n /**\n * Emits when the overlay is clicked (but not its content).\n */\n public get backdropClick(): Observable<void> {\n return this._backdropClick.asObservable();\n }\n\n /**\n * Emits after the overlay is closed.\n */\n public get closed(): Observable<void> {\n return this._closed.asObservable();\n }\n\n private _backdropClick = new Subject<void>();\n\n private _closed = new Subject<void>();\n\n constructor(\n /**\n * The configuration for the overlay.\n */\n public readonly config: SkyOverlayConfig,\n public readonly componentRef: ComponentRef<SkyOverlayComponent>\n ) {\n this.componentRef.instance.closed.subscribe(() => {\n this._closed.next();\n this._closed.complete();\n this._backdropClick.complete();\n });\n\n this.componentRef.instance.backdropClick.subscribe(() => {\n this._backdropClick.next();\n });\n }\n\n /**\n * Creates and attaches a component to the overlay.\n * @param component The component to attach.\n * @param providers Custom providers to apply to the component.\n */\n public attachComponent<C>(\n component: Type<C>,\n providers?: StaticProvider[]\n ): C {\n const componentRef = this.componentRef.instance.attachComponent(\n component,\n providers\n );\n return componentRef.instance;\n }\n\n /**\n * Attaches a `TemplateRef` to the overlay.\n * @param templateRef The `TemplateRef` to attach.\n * @param context The context to provide to the template.\n */\n public attachTemplate<T>(templateRef: TemplateRef<T>, context?: T): void {\n this.componentRef.instance.attachTemplate(templateRef, context);\n }\n}\n"]}
1
+ {"version":3,"file":"overlay-instance.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/overlay/overlay-instance.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,OAAO,EAAE,MAAM,MAAM,CAAC;AAK3C;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAmB7B;IACE;;OAEG;IACa,MAAwB,EACxB,YAA+C;QAD/C,WAAM,GAAN,MAAM,CAAkB;QACxB,iBAAY,GAAZ,YAAY,CAAmC;QATzD,mBAAc,GAAG,IAAI,OAAO,EAAQ,CAAC;QAErC,YAAO,GAAG,IAAI,OAAO,EAAQ,CAAC;QASpC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;YAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE;YACtD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAlCD;;OAEG;IACH,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAwBD;;;;OAIG;IACI,eAAe,CACpB,SAAkB,EAClB,SAA4B;QAE5B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAC7D,SAAS,EACT,SAAS,CACV,CAAC;QACF,OAAO,YAAY,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAI,WAA2B,EAAE,OAAW;QAC/D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;CACF","sourcesContent":["import { ComponentRef, StaticProvider, TemplateRef, Type } from '@angular/core';\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { SkyOverlayConfig } from './overlay-config';\nimport { SkyOverlayComponent } from './overlay.component';\n\n/**\n * Represents a new overlay instance. It is used to manage the \"closed\" state of the overlay,\n * and access any public members on the appended content component instance.\n */\nexport class SkyOverlayInstance {\n /**\n * Emits when the overlay is clicked (but not its content).\n */\n public get backdropClick(): Observable<void> {\n return this._backdropClick.asObservable();\n }\n\n /**\n * Emits after the overlay is closed.\n */\n public get closed(): Observable<void> {\n return this._closed.asObservable();\n }\n\n private _backdropClick = new Subject<void>();\n\n private _closed = new Subject<void>();\n\n constructor(\n /**\n * The configuration for the overlay.\n */\n public readonly config: SkyOverlayConfig,\n public readonly componentRef: ComponentRef<SkyOverlayComponent>\n ) {\n this.componentRef.instance.closed.subscribe(() => {\n this._closed.next();\n this._closed.complete();\n this._backdropClick.complete();\n });\n\n this.componentRef.instance.backdropClick.subscribe(() => {\n this._backdropClick.next();\n });\n }\n\n /**\n * Creates and attaches a component to the overlay.\n * @param component The component to attach.\n * @param providers Custom providers to apply to the component.\n */\n public attachComponent<C>(\n component: Type<C>,\n providers?: StaticProvider[]\n ): C {\n const componentRef = this.componentRef.instance.attachComponent(\n component,\n providers\n );\n return componentRef.instance;\n }\n\n /**\n * Attaches a `TemplateRef` to the overlay.\n * @param templateRef The `TemplateRef` to attach.\n * @param context The context to provide to the template.\n */\n public attachTemplate<T>(templateRef: TemplateRef<T>, context?: T): void {\n this.componentRef.instance.attachTemplate(templateRef, context);\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, Injector, Optional, ViewChild, ViewContainerRef, } from '@angular/core';
2
2
  import { NavigationStart, Router } from '@angular/router';
3
- import { fromEvent, Subject } from 'rxjs';
3
+ import { Subject, fromEvent } from 'rxjs';
4
4
  import { takeUntil } from 'rxjs/operators';
5
5
  import { SkyCoreAdapterService } from '../adapter-service/adapter.service';
6
6
  import { SkyOverlayContext } from './overlay-context';
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.component.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/overlay/overlay.component.ts","../../../../../../../../libs/components/core/src/lib/modules/overlay/overlay.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n Injector,\n OnDestroy,\n OnInit,\n Optional,\n StaticProvider,\n TemplateRef,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { NavigationStart, Router } from '@angular/router';\n\nimport { fromEvent, Observable, Subject, Subscription } from 'rxjs';\n\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyCoreAdapterService } from '../adapter-service/adapter.service';\n\nimport { SkyOverlayConfig } from './overlay-config';\n\nimport { SkyOverlayContext } from './overlay-context';\n\n/**\n * Omnibar is 1000.\n * See: https://github.com/blackbaud/auth-client/blob/master/src/omnibar/omnibar.ts#L139\n * ---\n * Modals start their z-indexes at 1040. However, each modal's z-index is a multiple of 10, so it\n * will be difficult to reliably predict a z-index that will always appear above all other\n * layers. Starting the z-index for overlays at a number much greater than modals will accommodate\n * the most reasonable of scenarios.\n * See: https://github.com/blackbaud/skyux-modals/blob/master/src/app/public/modules/modal/modal-host.service.ts#L22\n * (NOTE: It should be noted that modals do not use the overlay service, which is something we\n * should do in the near future to make sure z-indexes are predictable across all component\n * libraries.)\n */\nlet uniqueZIndex = 5000;\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-overlay',\n templateUrl: './overlay.component.html',\n styleUrls: ['./overlay.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyOverlayComponent implements OnInit, OnDestroy {\n public wrapperClass = '';\n\n public get backdropClick(): Observable<void> {\n return this._backdropClick.asObservable();\n }\n\n public get closed(): Observable<void> {\n return this._closed.asObservable();\n }\n\n public enablePointerEvents = false;\n\n public showBackdrop = false;\n\n public zIndex: string = `${++uniqueZIndex}`;\n\n @ViewChild('overlayContentRef', {\n read: ElementRef,\n static: true,\n })\n private overlayContentRef: ElementRef;\n\n @ViewChild('overlayRef', {\n read: ElementRef,\n static: true,\n })\n private overlayRef: ElementRef;\n\n @ViewChild('target', {\n read: ViewContainerRef,\n static: true,\n })\n private targetRef: ViewContainerRef;\n\n private ngUnsubscribe = new Subject<void>();\n\n private routerSubscription: Subscription;\n\n private _backdropClick = new Subject<void>();\n\n private _closed = new Subject<void>();\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n private resolver: ComponentFactoryResolver,\n private injector: Injector,\n private coreAdapter: SkyCoreAdapterService,\n private context: SkyOverlayContext,\n @Optional() private router?: Router\n ) {}\n\n public ngOnInit(): void {\n this.applyConfig(this.context.config);\n\n setTimeout(() => {\n this.addBackdropClickListener();\n });\n\n if (this.context.config.closeOnNavigation) {\n this.addRouteListener();\n }\n }\n\n public ngOnDestroy(): void {\n this.removeRouteListener();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n\n this._backdropClick.complete();\n\n this._closed.next();\n this._closed.complete();\n }\n\n public attachComponent<C>(\n component: Type<C>,\n providers: StaticProvider[] = []\n ): ComponentRef<C> {\n this.targetRef.clear();\n\n const factory = this.resolver.resolveComponentFactory(component);\n const injector = Injector.create({\n providers,\n parent: this.injector,\n });\n\n const componentRef = this.targetRef.createComponent<C>(\n factory,\n undefined,\n injector\n );\n\n // Run an initial change detection cycle after the component has been created.\n componentRef.changeDetectorRef.detectChanges();\n\n return componentRef;\n }\n\n public attachTemplate<T>(\n templateRef: TemplateRef<T>,\n context: T\n ): EmbeddedViewRef<T> {\n this.targetRef.clear();\n\n return this.targetRef.createEmbeddedView(templateRef, context);\n }\n\n private applyConfig(config: SkyOverlayConfig): void {\n this.wrapperClass = config.wrapperClass || '';\n this.showBackdrop = config.showBackdrop;\n this.enablePointerEvents = config.enablePointerEvents;\n this.changeDetector.markForCheck();\n }\n\n private addBackdropClickListener(): void {\n fromEvent(window.document, 'click')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((event: MouseEvent) => {\n const isChild = this.overlayContentRef.nativeElement.contains(\n event.target\n );\n const isAbove = this.coreAdapter.isTargetAboveElement(\n event.target,\n this.overlayRef.nativeElement\n );\n\n /* istanbul ignore else */\n if (!isChild && !isAbove) {\n this._backdropClick.next();\n if (this.context.config.enableClose) {\n this._closed.next();\n }\n }\n });\n }\n\n private addRouteListener(): void {\n /*istanbul ignore else*/\n if (this.router) {\n this.routerSubscription = this.router.events.subscribe((event) => {\n /* istanbul ignore else */\n if (event instanceof NavigationStart) {\n this._closed.next();\n }\n });\n }\n }\n\n private removeRouteListener(): void {\n if (this.routerSubscription) {\n this.routerSubscription.unsubscribe();\n this.routerSubscription = undefined;\n }\n }\n}\n","<div\n [class]=\"wrapperClass\"\n [style.zIndex]=\"zIndex\"\n [ngClass]=\"{\n 'enable-pointer-events-pass-through': enablePointerEvents,\n 'sky-overlay': true\n }\"\n #overlayRef\n>\n <div class=\"sky-overlay-content\" #overlayContentRef>\n <ng-template #target> </ng-template>\n </div>\n <div *ngIf=\"showBackdrop\" class=\"sky-overlay-backdrop\"></div>\n</div>\n"]}
1
+ {"version":3,"file":"overlay.component.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/overlay/overlay.component.ts","../../../../../../../../libs/components/core/src/lib/modules/overlay/overlay.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n Injector,\n OnDestroy,\n OnInit,\n Optional,\n StaticProvider,\n TemplateRef,\n Type,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\n\nimport { Observable, Subject, Subscription, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyCoreAdapterService } from '../adapter-service/adapter.service';\n\nimport { SkyOverlayConfig } from './overlay-config';\nimport { SkyOverlayContext } from './overlay-context';\n\n/**\n * Omnibar is 1000.\n * See: https://github.com/blackbaud/auth-client/blob/master/src/omnibar/omnibar.ts#L139\n * ---\n * Modals start their z-indexes at 1040. However, each modal's z-index is a multiple of 10, so it\n * will be difficult to reliably predict a z-index that will always appear above all other\n * layers. Starting the z-index for overlays at a number much greater than modals will accommodate\n * the most reasonable of scenarios.\n * See: https://github.com/blackbaud/skyux-modals/blob/master/src/app/public/modules/modal/modal-host.service.ts#L22\n * (NOTE: It should be noted that modals do not use the overlay service, which is something we\n * should do in the near future to make sure z-indexes are predictable across all component\n * libraries.)\n */\nlet uniqueZIndex = 5000;\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-overlay',\n templateUrl: './overlay.component.html',\n styleUrls: ['./overlay.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyOverlayComponent implements OnInit, OnDestroy {\n public wrapperClass = '';\n\n public get backdropClick(): Observable<void> {\n return this._backdropClick.asObservable();\n }\n\n public get closed(): Observable<void> {\n return this._closed.asObservable();\n }\n\n public enablePointerEvents = false;\n\n public showBackdrop = false;\n\n public zIndex = `${++uniqueZIndex}`;\n\n @ViewChild('overlayContentRef', {\n read: ElementRef,\n static: true,\n })\n private overlayContentRef: ElementRef;\n\n @ViewChild('overlayRef', {\n read: ElementRef,\n static: true,\n })\n private overlayRef: ElementRef;\n\n @ViewChild('target', {\n read: ViewContainerRef,\n static: true,\n })\n private targetRef: ViewContainerRef;\n\n private ngUnsubscribe = new Subject<void>();\n\n private routerSubscription: Subscription;\n\n private _backdropClick = new Subject<void>();\n\n private _closed = new Subject<void>();\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n private resolver: ComponentFactoryResolver,\n private injector: Injector,\n private coreAdapter: SkyCoreAdapterService,\n private context: SkyOverlayContext,\n @Optional() private router?: Router\n ) {}\n\n public ngOnInit(): void {\n this.applyConfig(this.context.config);\n\n setTimeout(() => {\n this.addBackdropClickListener();\n });\n\n if (this.context.config.closeOnNavigation) {\n this.addRouteListener();\n }\n }\n\n public ngOnDestroy(): void {\n this.removeRouteListener();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n\n this._backdropClick.complete();\n\n this._closed.next();\n this._closed.complete();\n }\n\n public attachComponent<C>(\n component: Type<C>,\n providers: StaticProvider[] = []\n ): ComponentRef<C> {\n this.targetRef.clear();\n\n const factory = this.resolver.resolveComponentFactory(component);\n const injector = Injector.create({\n providers,\n parent: this.injector,\n });\n\n const componentRef = this.targetRef.createComponent<C>(\n factory,\n undefined,\n injector\n );\n\n // Run an initial change detection cycle after the component has been created.\n componentRef.changeDetectorRef.detectChanges();\n\n return componentRef;\n }\n\n public attachTemplate<T>(\n templateRef: TemplateRef<T>,\n context: T\n ): EmbeddedViewRef<T> {\n this.targetRef.clear();\n\n return this.targetRef.createEmbeddedView(templateRef, context);\n }\n\n private applyConfig(config: SkyOverlayConfig): void {\n this.wrapperClass = config.wrapperClass || '';\n this.showBackdrop = config.showBackdrop;\n this.enablePointerEvents = config.enablePointerEvents;\n this.changeDetector.markForCheck();\n }\n\n private addBackdropClickListener(): void {\n fromEvent(window.document, 'click')\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((event: MouseEvent) => {\n const isChild = this.overlayContentRef.nativeElement.contains(\n event.target\n );\n const isAbove = this.coreAdapter.isTargetAboveElement(\n event.target,\n this.overlayRef.nativeElement\n );\n\n /* istanbul ignore else */\n if (!isChild && !isAbove) {\n this._backdropClick.next();\n if (this.context.config.enableClose) {\n this._closed.next();\n }\n }\n });\n }\n\n private addRouteListener(): void {\n /*istanbul ignore else*/\n if (this.router) {\n this.routerSubscription = this.router.events.subscribe((event) => {\n /* istanbul ignore else */\n if (event instanceof NavigationStart) {\n this._closed.next();\n }\n });\n }\n }\n\n private removeRouteListener(): void {\n if (this.routerSubscription) {\n this.routerSubscription.unsubscribe();\n this.routerSubscription = undefined;\n }\n }\n}\n","<div\n [class]=\"wrapperClass\"\n [style.zIndex]=\"zIndex\"\n [ngClass]=\"{\n 'enable-pointer-events-pass-through': enablePointerEvents,\n 'sky-overlay': true\n }\"\n #overlayRef\n>\n <div class=\"sky-overlay-content\" #overlayContentRef>\n <ng-template #target> </ng-template>\n </div>\n <div *ngIf=\"showBackdrop\" class=\"sky-overlay-backdrop\"></div>\n</div>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.module.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/overlay/overlay.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;;AAO1D,MAAM,OAAO,gBAAgB;;8GAAhB,gBAAgB;+GAAhB,gBAAgB,iBAHZ,mBAAmB,aADxB,YAAY;+GAIX,gBAAgB,YAJlB,CAAC,YAAY,CAAC;4FAIZ,gBAAgB;kBAL5B,QAAQ;mBAAC;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,YAAY,EAAE,CAAC,mBAAmB,CAAC;oBACnC,eAAe,EAAE,CAAC,mBAAmB,CAAC;iBACvC","sourcesContent":["import { CommonModule } from '@angular/common';\n\nimport { NgModule } from '@angular/core';\n\nimport { SkyOverlayComponent } from './overlay.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [SkyOverlayComponent],\n entryComponents: [SkyOverlayComponent],\n})\nexport class SkyOverlayModule {}\n"]}
1
+ {"version":3,"file":"overlay.module.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/overlay/overlay.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;;AAO1D,MAAM,OAAO,gBAAgB;;8GAAhB,gBAAgB;+GAAhB,gBAAgB,iBAHZ,mBAAmB,aADxB,YAAY;+GAIX,gBAAgB,YAJlB,CAAC,YAAY,CAAC;4FAIZ,gBAAgB;kBAL5B,QAAQ;mBAAC;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,YAAY,EAAE,CAAC,mBAAmB,CAAC;oBACnC,eAAe,EAAE,CAAC,mBAAmB,CAAC;iBACvC","sourcesContent":["import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { SkyOverlayComponent } from './overlay.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [SkyOverlayComponent],\n entryComponents: [SkyOverlayComponent],\n})\nexport class SkyOverlayModule {}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.service.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/overlay/overlay.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,wBAAwB,EAGxB,UAAU,EACV,QAAQ,GACT,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAIrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;;;AAE1D;;;GAGG;AAIH,MAAM,OAAO,iBAAiB;IAG5B,YACU,cAA8B,EAC9B,wBAAkD,EAClD,QAAkB,EAClB,OAAiC;QAHjC,mBAAc,GAAd,cAAc,CAAgB;QAC9B,6BAAwB,GAAxB,wBAAwB,CAA0B;QAClD,aAAQ,GAAR,QAAQ,CAAU;QAClB,YAAO,GAAP,OAAO,CAA0B;IACxC,CAAC;IAEJ;;;OAGG;IACI,MAAM,CAAC,MAAyB;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,QAAQ,CAAC,YAAY,KAAK,KAAK,EAAE;YACnC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;SACnC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAEhE,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;YAC7B,wEAAwE;YACxE,sGAAsG;YACtG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;gBACrD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;aACtB;QACH,CAAC,CAAC,CAAC;QAEH,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE1C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,QAA4B;QACvC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC/D,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAEhC,yFAAyF;QACzF,2FAA2F;QAC3F,gCAAgC;QAChC,2DAA2D;QAC3D,kGAAkG;QAClG,iFAAiF;QACjF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC;QACtE,wBAAwB;QACxB,IAAI,gBAAgB,CAAC,UAAU,KAAK,IAAI,EAAE;YACxC,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;SAC3D;IACH,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,wFAAwF;QACxF,4CAA4C;QAC5C,OAAO,iBAAiB,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5C,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3C;IACH,CAAC;IAEO,aAAa,CACnB,MAAyB;QAEzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC/B,MAAM,EAAE,IAAI,CAAC,QAAQ;YACrB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,iBAAiB;oBAC1B,QAAQ,EAAE,IAAI,iBAAiB,CAAC,MAAM,CAAC;iBACxC;aACF;SACF,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB;aAC/C,uBAAuB,CAAC,mBAAmB,CAAC;aAC5C,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEpB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAEtD,MAAM,OAAO,GAAI,YAAY,CAAC,QAAiC;aAC5D,SAAS,CAAC,CAAC,CAAgB,CAAC;QAE/B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEnC,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,aAAa,CAAC,MAAwB;QAC5C,MAAM,QAAQ,GAAqB;YACjC,iBAAiB,EAAE,IAAI;YACvB,WAAW,EAAE,KAAK;YAClB,mBAAmB,EAAE,KAAK;YAC1B,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,KAAK;YACnB,YAAY,EAAE,EAAE;SACjB,CAAC;QAEF,uCAAY,QAAQ,GAAK,MAAM,EAAG;IACpC,CAAC;IAEO,cAAc,CAAC,QAA4B;QACjD,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAC/B,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAC5C,CAAC,CACF,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,CAAC,YAAY,KAAK,KAAK,EAAE;YAC1C,6EAA6E;YAC7E,MAAM,4BAA4B,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAClE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAC9B,CAAC;YACF,IAAI,CAAC,4BAA4B,EAAE;gBACjC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;aAClC;SACF;IACH,CAAC;;AA5Hc,0BAAQ,GAAyB,EAAE,CAAC;+GADxC,iBAAiB;mHAAjB,iBAAiB,cAFhB,MAAM;4FAEP,iBAAiB;kBAH7B,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB","sourcesContent":["import {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n EmbeddedViewRef,\n Injectable,\n Injector,\n} from '@angular/core';\n\nimport { SkyOverlayAdapterService } from './overlay-adapter.service';\n\nimport { SkyOverlayConfig } from './overlay-config';\n\nimport { SkyOverlayContext } from './overlay-context';\n\nimport { SkyOverlayInstance } from './overlay-instance';\n\nimport { SkyOverlayComponent } from './overlay.component';\n\n/**\n * This service is used to create new overlays.\n * @dynamic\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyOverlayService {\n private static overlays: SkyOverlayInstance[] = [];\n\n constructor(\n private applicationRef: ApplicationRef,\n private componentFactoryResolver: ComponentFactoryResolver,\n private injector: Injector,\n private adapter: SkyOverlayAdapterService\n ) {}\n\n /**\n * Creates an empty overlay. Use the returned `SkyOverlayInstance` to append content.\n * @param config Configuration for the overlay.\n */\n public create(config?: SkyOverlayConfig): SkyOverlayInstance {\n const settings = this.prepareConfig(config);\n\n if (settings.enableScroll === false) {\n this.adapter.restrictBodyScroll();\n }\n\n const componentRef = this.createOverlay(settings);\n const instance = new SkyOverlayInstance(settings, componentRef);\n\n instance.closed.subscribe(() => {\n // Only execute the service's close method if the instance still exists.\n // This is needed to address a race condition if the deprecated instance.close method is used instead.\n if (SkyOverlayService.overlays.indexOf(instance) > -1) {\n this.close(instance);\n }\n });\n\n SkyOverlayService.overlays.push(instance);\n\n return instance;\n }\n\n /**\n * Closes (and destroys) an overlay instance.\n * @param instance The instance to close.\n */\n public close(instance: SkyOverlayInstance): void {\n this.destroyOverlay(instance);\n this.applicationRef.detachView(instance.componentRef.hostView);\n instance.componentRef.destroy();\n\n // In some cases, Angular keeps dynamically-generated component's nodes in the DOM during\n // unit tests. This can make querying difficult because the older DOM nodes still exist and\n // produce inconsistent results.\n // Angular Material's overlay appears to do the same thing:\n // https://github.com/angular/components/blob/master/src/cdk/portal/dom-portal-outlet.ts#L143-L145\n // (Ignoring coverage since this branch will only be hit by consumer unit tests.)\n const componentElement = instance.componentRef.location.nativeElement;\n /* istanbul ignore if */\n if (componentElement.parentNode !== null) {\n componentElement.parentNode.removeChild(componentElement);\n }\n }\n\n /**\n * Closes all overlay instances.\n */\n public closeAll(): void {\n // The `close` event handler for each instance alters the array's length asynchronously,\n // so the only \"safe\" index to call is zero.\n while (SkyOverlayService.overlays.length > 0) {\n this.close(SkyOverlayService.overlays[0]);\n }\n }\n\n private createOverlay(\n config?: SkyOverlayConfig\n ): ComponentRef<SkyOverlayComponent> {\n const injector = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: SkyOverlayContext,\n useValue: new SkyOverlayContext(config),\n },\n ],\n });\n\n const componentRef = this.componentFactoryResolver\n .resolveComponentFactory(SkyOverlayComponent)\n .create(injector);\n\n this.applicationRef.attachView(componentRef.hostView);\n\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>)\n .rootNodes[0] as HTMLElement;\n\n document.body.appendChild(domElem);\n\n return componentRef;\n }\n\n private prepareConfig(config: SkyOverlayConfig): SkyOverlayConfig {\n const defaults: SkyOverlayConfig = {\n closeOnNavigation: true,\n enableClose: false,\n enablePointerEvents: false,\n enableScroll: true,\n showBackdrop: false,\n wrapperClass: '',\n };\n\n return { ...defaults, ...config };\n }\n\n private destroyOverlay(instance: SkyOverlayInstance): void {\n SkyOverlayService.overlays.splice(\n SkyOverlayService.overlays.indexOf(instance),\n 1\n );\n\n if (instance.config.enableScroll === false) {\n // Only release the body scroll if no other overlay wishes it to be disabled.\n const anotherOverlayDisablesScroll = SkyOverlayService.overlays.some(\n (o) => !o.config.enableScroll\n );\n if (!anotherOverlayDisablesScroll) {\n this.adapter.releaseBodyScroll();\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"overlay.service.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/overlay/overlay.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ApplicationRef,\n ComponentFactoryResolver,\n ComponentRef,\n EmbeddedViewRef,\n Injectable,\n Injector,\n} from '@angular/core';\n\nimport { SkyOverlayAdapterService } from './overlay-adapter.service';\nimport { SkyOverlayConfig } from './overlay-config';\nimport { SkyOverlayContext } from './overlay-context';\nimport { SkyOverlayInstance } from './overlay-instance';\nimport { SkyOverlayComponent } from './overlay.component';\n\n/**\n * This service is used to create new overlays.\n * @dynamic\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyOverlayService {\n private static overlays: SkyOverlayInstance[] = [];\n\n constructor(\n private applicationRef: ApplicationRef,\n private componentFactoryResolver: ComponentFactoryResolver,\n private injector: Injector,\n private adapter: SkyOverlayAdapterService\n ) {}\n\n /**\n * Creates an empty overlay. Use the returned `SkyOverlayInstance` to append content.\n * @param config Configuration for the overlay.\n */\n public create(config?: SkyOverlayConfig): SkyOverlayInstance {\n const settings = this.prepareConfig(config);\n\n if (settings.enableScroll === false) {\n this.adapter.restrictBodyScroll();\n }\n\n const componentRef = this.createOverlay(settings);\n const instance = new SkyOverlayInstance(settings, componentRef);\n\n instance.closed.subscribe(() => {\n // Only execute the service's close method if the instance still exists.\n // This is needed to address a race condition if the deprecated instance.close method is used instead.\n if (SkyOverlayService.overlays.indexOf(instance) > -1) {\n this.close(instance);\n }\n });\n\n SkyOverlayService.overlays.push(instance);\n\n return instance;\n }\n\n /**\n * Closes (and destroys) an overlay instance.\n * @param instance The instance to close.\n */\n public close(instance: SkyOverlayInstance): void {\n this.destroyOverlay(instance);\n this.applicationRef.detachView(instance.componentRef.hostView);\n instance.componentRef.destroy();\n\n // In some cases, Angular keeps dynamically-generated component's nodes in the DOM during\n // unit tests. This can make querying difficult because the older DOM nodes still exist and\n // produce inconsistent results.\n // Angular Material's overlay appears to do the same thing:\n // https://github.com/angular/components/blob/master/src/cdk/portal/dom-portal-outlet.ts#L143-L145\n // (Ignoring coverage since this branch will only be hit by consumer unit tests.)\n const componentElement = instance.componentRef.location.nativeElement;\n /* istanbul ignore if */\n if (componentElement.parentNode !== null) {\n componentElement.parentNode.removeChild(componentElement);\n }\n }\n\n /**\n * Closes all overlay instances.\n */\n public closeAll(): void {\n // The `close` event handler for each instance alters the array's length asynchronously,\n // so the only \"safe\" index to call is zero.\n while (SkyOverlayService.overlays.length > 0) {\n this.close(SkyOverlayService.overlays[0]);\n }\n }\n\n private createOverlay(\n config?: SkyOverlayConfig\n ): ComponentRef<SkyOverlayComponent> {\n const injector = Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: SkyOverlayContext,\n useValue: new SkyOverlayContext(config),\n },\n ],\n });\n\n const componentRef = this.componentFactoryResolver\n .resolveComponentFactory(SkyOverlayComponent)\n .create(injector);\n\n this.applicationRef.attachView(componentRef.hostView);\n\n const domElem = (componentRef.hostView as EmbeddedViewRef<any>)\n .rootNodes[0] as HTMLElement;\n\n document.body.appendChild(domElem);\n\n return componentRef;\n }\n\n private prepareConfig(config: SkyOverlayConfig): SkyOverlayConfig {\n const defaults: SkyOverlayConfig = {\n closeOnNavigation: true,\n enableClose: false,\n enablePointerEvents: false,\n enableScroll: true,\n showBackdrop: false,\n wrapperClass: '',\n };\n\n return { ...defaults, ...config };\n }\n\n private destroyOverlay(instance: SkyOverlayInstance): void {\n SkyOverlayService.overlays.splice(\n SkyOverlayService.overlays.indexOf(instance),\n 1\n );\n\n if (instance.config.enableScroll === false) {\n // Only release the body scroll if no other overlay wishes it to be disabled.\n const anotherOverlayDisablesScroll = SkyOverlayService.overlays.some(\n (o) => !o.config.enableScroll\n );\n if (!anotherOverlayDisablesScroll) {\n this.adapter.releaseBodyScroll();\n }\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"percent-pipe.module.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/percent-pipe/percent-pipe.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;;AAQhD,MAAM,OAAO,oBAAoB;;kHAApB,oBAAoB;mHAApB,oBAAoB,iBALhB,cAAc,aAEnB,YAAY,EAAE,sBAAsB,aACpC,cAAc;mHAEb,oBAAoB,aAJpB,CAAC,cAAc,CAAC,YAClB,CAAC,YAAY,EAAE,sBAAsB,CAAC;4FAGpC,oBAAoB;kBANhC,QAAQ;mBAAC;oBACR,YAAY,EAAE,CAAC,cAAc,CAAC;oBAC9B,SAAS,EAAE,CAAC,cAAc,CAAC;oBAC3B,OAAO,EAAE,CAAC,YAAY,EAAE,sBAAsB,CAAC;oBAC/C,OAAO,EAAE,CAAC,cAAc,CAAC;iBAC1B","sourcesContent":["import { CommonModule } from '@angular/common';\n\nimport { NgModule } from '@angular/core';\n\nimport { SkyCoreResourcesModule } from '../shared/sky-core-resources.module';\n\nimport { SkyPercentPipe } from './percent.pipe';\n\n@NgModule({\n declarations: [SkyPercentPipe],\n providers: [SkyPercentPipe],\n imports: [CommonModule, SkyCoreResourcesModule],\n exports: [SkyPercentPipe],\n})\nexport class SkyPercentPipeModule {}\n"]}
1
+ {"version":3,"file":"percent-pipe.module.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/percent-pipe/percent-pipe.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;;AAQhD,MAAM,OAAO,oBAAoB;;kHAApB,oBAAoB;mHAApB,oBAAoB,iBALhB,cAAc,aAEnB,YAAY,EAAE,sBAAsB,aACpC,cAAc;mHAEb,oBAAoB,aAJpB,CAAC,cAAc,CAAC,YAClB,CAAC,YAAY,EAAE,sBAAsB,CAAC;4FAGpC,oBAAoB;kBANhC,QAAQ;mBAAC;oBACR,YAAY,EAAE,CAAC,cAAc,CAAC;oBAC9B,SAAS,EAAE,CAAC,cAAc,CAAC;oBAC3B,OAAO,EAAE,CAAC,YAAY,EAAE,sBAAsB,CAAC;oBAC/C,OAAO,EAAE,CAAC,cAAc,CAAC;iBAC1B","sourcesContent":["import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { SkyCoreResourcesModule } from '../shared/sky-core-resources.module';\n\nimport { SkyPercentPipe } from './percent.pipe';\n\n@NgModule({\n declarations: [SkyPercentPipe],\n providers: [SkyPercentPipe],\n imports: [CommonModule, SkyCoreResourcesModule],\n exports: [SkyPercentPipe],\n})\nexport class SkyPercentPipeModule {}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"percent.pipe.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/percent-pipe/percent.pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,IAAI,EAAiB,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE7E,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;;;AAMvF,MAAM,OAAO,cAAc;IAezB,YAAoB,cAAoC;QAApC,mBAAc,GAAd,cAAc,CAAsB;QAdhD,kBAAa,GAAG,OAAO,CAAC;QAIxB,kBAAa,GAAG,OAAO,CAAC;QAQxB,kBAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;QAG1C,IAAI,CAAC,cAAc;aAChB,aAAa,EAAE;aACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aACnC,SAAS,CAAC,CAAC,UAAU,EAAE,EAAE;YACxB,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC;YACvC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,WAAW;QAChB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAEM,SAAS,CAAC,KAAa,EAAE,MAAe,EAAE,MAAe;QAC9D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEO,oBAAoB;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC;QAEjD,IAAI,CAAC,cAAc,GAAG,sBAAsB,CAAC,YAAY,CACvD,MAAM,EACN,IAAI,CAAC,KAAK,EACV,wBAAwB,CAAC,OAAO,EAChC,MAAM,CACP,CAAC;IACJ,CAAC;;4GAlDU,cAAc;0GAAd,cAAc;4FAAd,cAAc;kBAJ1B,IAAI;mBAAC;oBACJ,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,KAAK;iBACZ","sourcesContent":["import { OnDestroy, Pipe, PipeTransform } from '@angular/core';\n\nimport { SkyAppLocaleProvider, SkyIntlNumberFormatStyle } from '@skyux/i18n';\n\nimport { Subject } from 'rxjs';\n\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyNumberFormatUtility } from '../shared/number-format/number-format-utility';\n\n@Pipe({\n name: 'skyPercent',\n pure: false,\n})\nexport class SkyPercentPipe implements OnDestroy, PipeTransform {\n private defaultFormat = '1.0-2';\n\n private format: string;\n\n private defaultLocale = 'en-US';\n\n private locale: string;\n\n private value: string;\n\n private formattedValue: string;\n\n private ngUnsubscribe = new Subject<void>();\n\n constructor(private localeProvider: SkyAppLocaleProvider) {\n this.localeProvider\n .getLocaleInfo()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((localeInfo) => {\n this.defaultLocale = localeInfo.locale;\n this.updateFormattedValue();\n });\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public transform(value: string, format?: string, locale?: string): string {\n this.value = value;\n this.format = format;\n this.locale = locale;\n\n this.updateFormattedValue();\n\n return this.formattedValue;\n }\n\n private updateFormattedValue(): void {\n const locale = this.locale || this.defaultLocale;\n const format = this.format || this.defaultFormat;\n\n this.formattedValue = SkyNumberFormatUtility.formatNumber(\n locale,\n this.value,\n SkyIntlNumberFormatStyle.Percent,\n format\n );\n }\n}\n"]}
1
+ {"version":3,"file":"percent.pipe.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/percent-pipe/percent.pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,IAAI,EAAiB,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE7E,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;;;AAMvF,MAAM,OAAO,cAAc;IAezB,YAAoB,cAAoC;QAApC,mBAAc,GAAd,cAAc,CAAsB;QAdhD,kBAAa,GAAG,OAAO,CAAC;QAIxB,kBAAa,GAAG,OAAO,CAAC;QAQxB,kBAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;QAG1C,IAAI,CAAC,cAAc;aAChB,aAAa,EAAE;aACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aACnC,SAAS,CAAC,CAAC,UAAU,EAAE,EAAE;YACxB,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC;YACvC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,WAAW;QAChB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAEM,SAAS,CAAC,KAAa,EAAE,MAAe,EAAE,MAAe;QAC9D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAEO,oBAAoB;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC;QAEjD,IAAI,CAAC,cAAc,GAAG,sBAAsB,CAAC,YAAY,CACvD,MAAM,EACN,IAAI,CAAC,KAAK,EACV,wBAAwB,CAAC,OAAO,EAChC,MAAM,CACP,CAAC;IACJ,CAAC;;4GAlDU,cAAc;0GAAd,cAAc;4FAAd,cAAc;kBAJ1B,IAAI;mBAAC;oBACJ,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,KAAK;iBACZ","sourcesContent":["import { OnDestroy, Pipe, PipeTransform } from '@angular/core';\nimport { SkyAppLocaleProvider, SkyIntlNumberFormatStyle } from '@skyux/i18n';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyNumberFormatUtility } from '../shared/number-format/number-format-utility';\n\n@Pipe({\n name: 'skyPercent',\n pure: false,\n})\nexport class SkyPercentPipe implements OnDestroy, PipeTransform {\n private defaultFormat = '1.0-2';\n\n private format: string;\n\n private defaultLocale = 'en-US';\n\n private locale: string;\n\n private value: string;\n\n private formattedValue: string;\n\n private ngUnsubscribe = new Subject<void>();\n\n constructor(private localeProvider: SkyAppLocaleProvider) {\n this.localeProvider\n .getLocaleInfo()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((localeInfo) => {\n this.defaultLocale = localeInfo.locale;\n this.updateFormattedValue();\n });\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public transform(value: string, format?: string, locale?: string): string {\n this.value = value;\n this.format = format;\n this.locale = locale;\n\n this.updateFormattedValue();\n\n return this.formattedValue;\n }\n\n private updateFormattedValue(): void {\n const locale = this.locale || this.defaultLocale;\n const format = this.format || this.defaultFormat;\n\n this.formattedValue = SkyNumberFormatUtility.formatNumber(\n locale,\n this.value,\n SkyIntlNumberFormatStyle.Percent,\n format\n );\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { fromEvent, Observable, Subject } from 'rxjs';
2
+ import { Observable, Subject, fromEvent } from 'rxjs';
3
3
  import { takeUntil } from 'rxjs/operators';
4
4
  import { MutationObserverService } from '../mutation/mutation-observer-service';
5
5
  import { SkyAppWindowRef } from '../window/window-ref';
@@ -32,14 +32,14 @@ export class SkyScrollableHostService {
32
32
  * @internal
33
33
  */
34
34
  watchScrollableHost(elementRef) {
35
- let subscribers = [];
35
+ const subscribers = [];
36
36
  let mutationObserver;
37
37
  return new Observable((subscriber) => {
38
38
  subscribers.push(subscriber);
39
39
  let scrollableHost = this.findScrollableHost(elementRef.nativeElement);
40
40
  if (subscribers.length === 1) {
41
41
  mutationObserver = this.mutationObserverSvc.create(() => {
42
- let newScrollableHost = this.findScrollableHost(elementRef.nativeElement);
42
+ const newScrollableHost = this.findScrollableHost(elementRef.nativeElement);
43
43
  if (newScrollableHost !== scrollableHost) {
44
44
  scrollableHost = newScrollableHost;
45
45
  this.observeForScrollableHostChanges(scrollableHost, mutationObserver);
@@ -69,7 +69,7 @@ export class SkyScrollableHostService {
69
69
  * @returns An observable which emits the scroll events from the given element's scrollable host
70
70
  */
71
71
  watchScrollableHostScrollEvents(elementRef) {
72
- let subscribers = [];
72
+ const subscribers = [];
73
73
  let scrollableHost;
74
74
  let newScrollableHostObservable = new Subject();
75
75
  let scrollableHostSubscription;
@@ -1 +1 @@
1
- {"version":3,"file":"scrollable-host.service.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/scrollable-host/scrollable-host.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { ElementRef, Injectable } from '@angular/core';\nimport { fromEvent, Observable, Subject, Subscriber, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { MutationObserverService } from '../mutation/mutation-observer-service';\nimport { SkyAppWindowRef } from '../window/window-ref';\n\nfunction notifySubscribers(subscribers: Subscriber<unknown>[], item?: unknown) {\n for (const subscriber of subscribers) {\n subscriber.next(item);\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyScrollableHostService {\n constructor(\n private mutationObserverSvc: MutationObserverService,\n private windowRef: SkyAppWindowRef\n ) {}\n\n /**\n * Returns the given element's current scrollable host\n * @param elementRef The element whose scrollable host is being requested\n * @returns The current scrollable host\n */\n public getScrollableHost(elementRef: ElementRef): HTMLElement | Window {\n return this.findScrollableHost(elementRef.nativeElement);\n }\n\n /**\n * Returns an observable which emits the given element's current scrollable host\n * @param elementRef The element whose scrollable host is being requested\n * @param completionObservable An observable which alerts the internal observers that they should complete\n * @returns An observable which emits the current scrollable host\n * @internal\n */\n public watchScrollableHost(\n elementRef: ElementRef\n ): Observable<HTMLElement | Window> {\n let subscribers: Subscriber<HTMLElement | Window>[] = [];\n let mutationObserver: MutationObserver;\n\n return new Observable((subscriber) => {\n subscribers.push(subscriber);\n\n let scrollableHost = this.findScrollableHost(elementRef.nativeElement);\n if (subscribers.length === 1) {\n mutationObserver = this.mutationObserverSvc.create(() => {\n let newScrollableHost = this.findScrollableHost(\n elementRef.nativeElement\n );\n\n if (newScrollableHost !== scrollableHost) {\n scrollableHost = newScrollableHost;\n this.observeForScrollableHostChanges(\n scrollableHost,\n mutationObserver\n );\n\n notifySubscribers(subscribers, scrollableHost);\n }\n });\n this.observeForScrollableHostChanges(scrollableHost, mutationObserver);\n }\n subscriber.next(scrollableHost);\n\n subscriber.add(() => {\n const subIndex = subscribers.indexOf(subscriber);\n\n /* sanity check */\n /* istanbul ignore else */\n if (subIndex >= 0) {\n subscribers.splice(subIndex, 1);\n }\n\n if (subscribers.length === 0) {\n mutationObserver.disconnect();\n }\n });\n });\n }\n\n /**\n * Returns an observable which emits whenever the element's scrollable host emits a scroll event. The observable will always emit the scroll events from the elements current scrollable host and will update based on any scrollable host changes. The observable will also emit once whenever the scrollable host changes.\n * @param elementRef The element whose scrollable host scroll events are being requested\n * @param completionObservable An observable which alerts the internal observers that they should complete\n * @returns An observable which emits the scroll events from the given element's scrollable host\n */\n public watchScrollableHostScrollEvents(\n elementRef: ElementRef\n ): Observable<void> {\n let subscribers: Subscriber<void>[] = [];\n let scrollableHost: HTMLElement | Window;\n\n let newScrollableHostObservable = new Subject();\n let scrollableHostSubscription: Subscription;\n let scrollEventSubscription: Subscription;\n return new Observable((subscriber) => {\n subscribers.push(subscriber);\n\n if (subscribers.length === 1) {\n scrollableHostSubscription = this.watchScrollableHost(\n elementRef\n ).subscribe((newScrollableHost) => {\n newScrollableHostObservable.next();\n newScrollableHostObservable.complete();\n if (scrollableHost && scrollableHost !== newScrollableHost) {\n notifySubscribers(subscribers);\n }\n scrollableHost = newScrollableHost;\n newScrollableHostObservable = new Subject();\n scrollEventSubscription = fromEvent(newScrollableHost, 'scroll')\n .pipe(takeUntil(newScrollableHostObservable))\n .subscribe(() => {\n notifySubscribers(subscribers);\n });\n });\n }\n\n subscriber.add(() => {\n const subIndex = subscribers.indexOf(subscriber);\n\n /* sanity check */\n /* istanbul ignore else */\n if (subIndex >= 0) {\n subscribers.splice(subIndex, 1);\n }\n\n if (subscribers.length === 0) {\n scrollableHostSubscription.unsubscribe();\n scrollEventSubscription.unsubscribe();\n newScrollableHostObservable.complete();\n }\n });\n });\n }\n\n private findScrollableHost(element: HTMLElement): HTMLElement | Window {\n const regex = /(auto|scroll)/;\n const windowObj = this.windowRef.nativeWindow;\n const bodyObj = windowObj.document.body;\n\n /* Sanity check */\n if (!element) {\n return windowObj;\n }\n\n let style = windowObj.getComputedStyle(element);\n let parent: HTMLElement = element;\n\n do {\n parent = <HTMLElement>parent.parentNode;\n\n /* Sanity check for if this function is called for an element which has been removed from the DOM */\n if (!(parent instanceof HTMLElement)) {\n return windowObj;\n }\n\n style = windowObj.getComputedStyle(parent);\n } while (\n !regex.test(style.overflow) &&\n !regex.test(style.overflowY) &&\n parent !== bodyObj\n );\n\n if (parent === bodyObj) {\n return windowObj;\n }\n\n return parent;\n }\n\n private observeForScrollableHostChanges(\n element: HTMLElement | Window,\n mutationObserver: MutationObserver\n ) {\n mutationObserver.disconnect();\n if (element instanceof HTMLElement) {\n mutationObserver.observe(element, {\n attributes: true,\n attributeFilter: ['class', 'style.overflow', 'style.overflow-y'],\n childList: true,\n subtree: true,\n });\n } else {\n mutationObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'style.overflow', 'style.overflow-y'],\n childList: true,\n subtree: true,\n });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"scrollable-host.service.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/scrollable-host/scrollable-host.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { ElementRef, Injectable } from '@angular/core';\n\nimport { Observable, Subject, Subscriber, Subscription, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { MutationObserverService } from '../mutation/mutation-observer-service';\nimport { SkyAppWindowRef } from '../window/window-ref';\n\nfunction notifySubscribers(subscribers: Subscriber<unknown>[], item?: unknown) {\n for (const subscriber of subscribers) {\n subscriber.next(item);\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyScrollableHostService {\n constructor(\n private mutationObserverSvc: MutationObserverService,\n private windowRef: SkyAppWindowRef\n ) {}\n\n /**\n * Returns the given element's current scrollable host\n * @param elementRef The element whose scrollable host is being requested\n * @returns The current scrollable host\n */\n public getScrollableHost(elementRef: ElementRef): HTMLElement | Window {\n return this.findScrollableHost(elementRef.nativeElement);\n }\n\n /**\n * Returns an observable which emits the given element's current scrollable host\n * @param elementRef The element whose scrollable host is being requested\n * @param completionObservable An observable which alerts the internal observers that they should complete\n * @returns An observable which emits the current scrollable host\n * @internal\n */\n public watchScrollableHost(\n elementRef: ElementRef\n ): Observable<HTMLElement | Window> {\n const subscribers: Subscriber<HTMLElement | Window>[] = [];\n let mutationObserver: MutationObserver;\n\n return new Observable((subscriber) => {\n subscribers.push(subscriber);\n\n let scrollableHost = this.findScrollableHost(elementRef.nativeElement);\n if (subscribers.length === 1) {\n mutationObserver = this.mutationObserverSvc.create(() => {\n const newScrollableHost = this.findScrollableHost(\n elementRef.nativeElement\n );\n\n if (newScrollableHost !== scrollableHost) {\n scrollableHost = newScrollableHost;\n this.observeForScrollableHostChanges(\n scrollableHost,\n mutationObserver\n );\n\n notifySubscribers(subscribers, scrollableHost);\n }\n });\n this.observeForScrollableHostChanges(scrollableHost, mutationObserver);\n }\n subscriber.next(scrollableHost);\n\n subscriber.add(() => {\n const subIndex = subscribers.indexOf(subscriber);\n\n /* sanity check */\n /* istanbul ignore else */\n if (subIndex >= 0) {\n subscribers.splice(subIndex, 1);\n }\n\n if (subscribers.length === 0) {\n mutationObserver.disconnect();\n }\n });\n });\n }\n\n /**\n * Returns an observable which emits whenever the element's scrollable host emits a scroll event. The observable will always emit the scroll events from the elements current scrollable host and will update based on any scrollable host changes. The observable will also emit once whenever the scrollable host changes.\n * @param elementRef The element whose scrollable host scroll events are being requested\n * @param completionObservable An observable which alerts the internal observers that they should complete\n * @returns An observable which emits the scroll events from the given element's scrollable host\n */\n public watchScrollableHostScrollEvents(\n elementRef: ElementRef\n ): Observable<void> {\n const subscribers: Subscriber<void>[] = [];\n let scrollableHost: HTMLElement | Window;\n\n let newScrollableHostObservable = new Subject();\n let scrollableHostSubscription: Subscription;\n let scrollEventSubscription: Subscription;\n return new Observable((subscriber) => {\n subscribers.push(subscriber);\n\n if (subscribers.length === 1) {\n scrollableHostSubscription = this.watchScrollableHost(\n elementRef\n ).subscribe((newScrollableHost) => {\n newScrollableHostObservable.next();\n newScrollableHostObservable.complete();\n if (scrollableHost && scrollableHost !== newScrollableHost) {\n notifySubscribers(subscribers);\n }\n scrollableHost = newScrollableHost;\n newScrollableHostObservable = new Subject();\n scrollEventSubscription = fromEvent(newScrollableHost, 'scroll')\n .pipe(takeUntil(newScrollableHostObservable))\n .subscribe(() => {\n notifySubscribers(subscribers);\n });\n });\n }\n\n subscriber.add(() => {\n const subIndex = subscribers.indexOf(subscriber);\n\n /* sanity check */\n /* istanbul ignore else */\n if (subIndex >= 0) {\n subscribers.splice(subIndex, 1);\n }\n\n if (subscribers.length === 0) {\n scrollableHostSubscription.unsubscribe();\n scrollEventSubscription.unsubscribe();\n newScrollableHostObservable.complete();\n }\n });\n });\n }\n\n private findScrollableHost(element: HTMLElement): HTMLElement | Window {\n const regex = /(auto|scroll)/;\n const windowObj = this.windowRef.nativeWindow;\n const bodyObj = windowObj.document.body;\n\n /* Sanity check */\n if (!element) {\n return windowObj;\n }\n\n let style = windowObj.getComputedStyle(element);\n let parent: HTMLElement = element;\n\n do {\n parent = parent.parentNode as HTMLElement;\n\n /* Sanity check for if this function is called for an element which has been removed from the DOM */\n if (!(parent instanceof HTMLElement)) {\n return windowObj;\n }\n\n style = windowObj.getComputedStyle(parent);\n } while (\n !regex.test(style.overflow) &&\n !regex.test(style.overflowY) &&\n parent !== bodyObj\n );\n\n if (parent === bodyObj) {\n return windowObj;\n }\n\n return parent;\n }\n\n private observeForScrollableHostChanges(\n element: HTMLElement | Window,\n mutationObserver: MutationObserver\n ) {\n mutationObserver.disconnect();\n if (element instanceof HTMLElement) {\n mutationObserver.observe(element, {\n attributes: true,\n attributeFilter: ['class', 'style.overflow', 'style.overflow-y'],\n childList: true,\n subtree: true,\n });\n } else {\n mutationObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'style.overflow', 'style.overflow-y'],\n childList: true,\n subtree: true,\n });\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"number-format-utility.js","sourceRoot":"","sources":["../../../../../../../../../libs/components/core/src/lib/modules/shared/number-format/number-format-utility.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,0FAA0F;AAC1F,+FAA+F;AAC/F,oBAAoB;AACpB,yFAAyF;AAEzF,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE/E,SAAS,SAAS,CAAC,KAAU;IAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,MAAM,GAAW,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAE1C,0BAA0B;IAC1B,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,IAAI,CAAC,CAAC;KACjE;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qEAAqE;AACrE,2DAA2D;AAC3D,WAAW;AACX,MAAM,OAAO,sBAAsB;IAGjC,0BAA0B;IAC1B,gBAAe,CAAC;IAET,MAAM,CAAC,YAAY,CACxB,MAAc,EACd,KAAsB,EACtB,KAA+B,EAC/B,MAAsB,EACtB,WAA0B,IAAI,EAC9B,mBAA4B,KAAK,EACjC,YAAwC;QAExC,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,OAAO,IAAI,CAAC;SACb;QAED,6BAA6B;QAC7B,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACvE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,MAAM,KAAK,CAAC,4BAA4B,KAAK,GAAG,CAAC,CAAC;SACnD;QAED,IAAI,MAAM,GAAuB,SAAS,CAAC;QAC3C,IAAI,WAAW,GAAuB,SAAS,CAAC;QAChD,IAAI,WAAW,GAAuB,SAAS,CAAC;QAChD,IAAI,KAAK,KAAK,wBAAwB,CAAC,QAAQ,EAAE;YAC/C,oCAAoC;YACpC,MAAM,GAAG,CAAC,CAAC;YACX,WAAW,GAAG,CAAC,CAAC;YAChB,WAAW,GAAG,CAAC,CAAC;SACjB;QAED,IAAI,MAAM,EAAE;YACV,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAEvD,IAAI,KAAK,KAAK,IAAI,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,6CAA6C,CAAC,CAAC;aACzE;YAED,0BAA0B;YAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;gBACpB,qBAAqB;gBACrB,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC;YAED,0BAA0B;YAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;gBACpB,sBAAsB;gBACtB,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3C;YAED,0BAA0B;YAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;gBACpB,sBAAsB;gBACtB,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3C;SACF;QAED,OAAO,sBAAsB,CAAC,MAAM,CAAC,KAAe,EAAE,MAAM,EAAE,KAAK,EAAE;YACnE,oBAAoB,EAAE,MAAM;YAC5B,qBAAqB,EAAE,WAAW;YAClC,qBAAqB,EAAE,WAAW;YAClC,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EAAE,gBAAgB;YAClC,YAAY,EAAE,YAAY;SAC3B,CAAC,CAAC;IACL,CAAC;;AApEc,4CAAqB,GAAW,6BAA6B,CAAC","sourcesContent":["/* tslint:disable:no-null-keyword */\n\n// This file is mostly ported from the Angular 4.x NumberPipe in order to maintain the old\n// behavior of using the `Intl` API for formatting numbers rather than having to register every\n// supported locale.\n// https://github.com/angular/angular/blob/4.4.x/packages/common/src/pipes/number_pipe.ts\n\nimport { SkyIntlNumberFormatStyle, SkyIntlNumberFormatter } from '@skyux/i18n';\n\nfunction isNumeric(value: any): boolean {\n return !isNaN(value - parseFloat(value));\n}\n\nfunction parseIntAutoRadix(text: string): number {\n const result: number = parseInt(text, 10);\n\n /* istanbul ignore next */\n if (isNaN(result)) {\n throw new Error('Invalid integer literal when parsing ' + text);\n }\n\n return result;\n}\n\n// Need to add the following to classes which contain static methods.\n// See: https://github.com/ng-packagr/ng-packagr/issues/641\n// @dynamic\nexport class SkyNumberFormatUtility {\n private static _NUMBER_FORMAT_REGEXP: RegExp = /^(\\d+)?\\.((\\d+)(-(\\d+))?)?$/;\n\n /* istanbul ignore next */\n constructor() {}\n\n public static formatNumber(\n locale: string,\n value: number | string,\n style: SkyIntlNumberFormatStyle,\n digits?: string | null,\n currency: string | null = null,\n currencyAsSymbol: boolean = false,\n currencySign?: 'accounting' | 'standard'\n ): string | null {\n if (value == null) {\n return null;\n }\n\n // Convert strings to numbers\n value = typeof value === 'string' && isNumeric(value) ? +value : value;\n if (typeof value !== 'number') {\n throw Error(`SkyInvalidPipeArgument: '${value}'`);\n }\n\n let minInt: number | undefined = undefined;\n let minFraction: number | undefined = undefined;\n let maxFraction: number | undefined = undefined;\n if (style !== SkyIntlNumberFormatStyle.Currency) {\n // rely on Intl default for currency\n minInt = 1;\n minFraction = 0;\n maxFraction = 3;\n }\n\n if (digits) {\n const parts = digits.match(this._NUMBER_FORMAT_REGEXP);\n\n if (parts === null) {\n throw new Error(`${digits} is not a valid digit info for number pipes`);\n }\n\n /* istanbul ignore else */\n if (parts[1] != null) {\n // min integer digits\n minInt = parseIntAutoRadix(parts[1]);\n }\n\n /* istanbul ignore else */\n if (parts[3] != null) {\n // min fraction digits\n minFraction = parseIntAutoRadix(parts[3]);\n }\n\n /* istanbul ignore else */\n if (parts[5] != null) {\n // max fraction digits\n maxFraction = parseIntAutoRadix(parts[5]);\n }\n }\n\n return SkyIntlNumberFormatter.format(value as number, locale, style, {\n minimumIntegerDigits: minInt,\n minimumFractionDigits: minFraction,\n maximumFractionDigits: maxFraction,\n currency: currency,\n currencyAsSymbol: currencyAsSymbol,\n currencySign: currencySign,\n });\n }\n}\n"]}
1
+ {"version":3,"file":"number-format-utility.js","sourceRoot":"","sources":["../../../../../../../../../libs/components/core/src/lib/modules/shared/number-format/number-format-utility.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,0FAA0F;AAC1F,+FAA+F;AAC/F,oBAAoB;AACpB,yFAAyF;AACzF,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE/E,SAAS,SAAS,CAAC,KAAU;IAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,MAAM,GAAW,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAE1C,0BAA0B;IAC1B,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,IAAI,CAAC,CAAC;KACjE;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qEAAqE;AACrE,2DAA2D;AAC3D,WAAW;AACX,MAAM,OAAO,sBAAsB;IAGjC,0BAA0B;IAC1B,gBAAe,CAAC;IAET,MAAM,CAAC,YAAY,CACxB,MAAc,EACd,KAAsB,EACtB,KAA+B,EAC/B,MAAsB,EACtB,WAA0B,IAAI,EAC9B,mBAA4B,KAAK,EACjC,YAAwC;QAExC,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,OAAO,IAAI,CAAC;SACb;QAED,6BAA6B;QAC7B,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QACvE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,MAAM,KAAK,CAAC,4BAA4B,KAAK,GAAG,CAAC,CAAC;SACnD;QAED,IAAI,MAAM,GAAuB,SAAS,CAAC;QAC3C,IAAI,WAAW,GAAuB,SAAS,CAAC;QAChD,IAAI,WAAW,GAAuB,SAAS,CAAC;QAChD,IAAI,KAAK,KAAK,wBAAwB,CAAC,QAAQ,EAAE;YAC/C,oCAAoC;YACpC,MAAM,GAAG,CAAC,CAAC;YACX,WAAW,GAAG,CAAC,CAAC;YAChB,WAAW,GAAG,CAAC,CAAC;SACjB;QAED,IAAI,MAAM,EAAE;YACV,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAEvD,IAAI,KAAK,KAAK,IAAI,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,6CAA6C,CAAC,CAAC;aACzE;YAED,0BAA0B;YAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;gBACpB,qBAAqB;gBACrB,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC;YAED,0BAA0B;YAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;gBACpB,sBAAsB;gBACtB,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3C;YAED,0BAA0B;YAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;gBACpB,sBAAsB;gBACtB,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3C;SACF;QAED,OAAO,sBAAsB,CAAC,MAAM,CAAC,KAAe,EAAE,MAAM,EAAE,KAAK,EAAE;YACnE,oBAAoB,EAAE,MAAM;YAC5B,qBAAqB,EAAE,WAAW;YAClC,qBAAqB,EAAE,WAAW;YAClC,QAAQ,EAAE,QAAQ;YAClB,gBAAgB,EAAE,gBAAgB;YAClC,YAAY,EAAE,YAAY;SAC3B,CAAC,CAAC;IACL,CAAC;;AApEc,4CAAqB,GAAG,6BAA6B,CAAC","sourcesContent":["/* tslint:disable:no-null-keyword */\n// This file is mostly ported from the Angular 4.x NumberPipe in order to maintain the old\n// behavior of using the `Intl` API for formatting numbers rather than having to register every\n// supported locale.\n// https://github.com/angular/angular/blob/4.4.x/packages/common/src/pipes/number_pipe.ts\nimport { SkyIntlNumberFormatStyle, SkyIntlNumberFormatter } from '@skyux/i18n';\n\nfunction isNumeric(value: any): boolean {\n return !isNaN(value - parseFloat(value));\n}\n\nfunction parseIntAutoRadix(text: string): number {\n const result: number = parseInt(text, 10);\n\n /* istanbul ignore next */\n if (isNaN(result)) {\n throw new Error('Invalid integer literal when parsing ' + text);\n }\n\n return result;\n}\n\n// Need to add the following to classes which contain static methods.\n// See: https://github.com/ng-packagr/ng-packagr/issues/641\n// @dynamic\nexport class SkyNumberFormatUtility {\n private static _NUMBER_FORMAT_REGEXP = /^(\\d+)?\\.((\\d+)(-(\\d+))?)?$/;\n\n /* istanbul ignore next */\n constructor() {}\n\n public static formatNumber(\n locale: string,\n value: number | string,\n style: SkyIntlNumberFormatStyle,\n digits?: string | null,\n currency: string | null = null,\n currencyAsSymbol: boolean = false,\n currencySign?: 'accounting' | 'standard'\n ): string | null {\n if (value == null) {\n return null;\n }\n\n // Convert strings to numbers\n value = typeof value === 'string' && isNumeric(value) ? +value : value;\n if (typeof value !== 'number') {\n throw Error(`SkyInvalidPipeArgument: '${value}'`);\n }\n\n let minInt: number | undefined = undefined;\n let minFraction: number | undefined = undefined;\n let maxFraction: number | undefined = undefined;\n if (style !== SkyIntlNumberFormatStyle.Currency) {\n // rely on Intl default for currency\n minInt = 1;\n minFraction = 0;\n maxFraction = 3;\n }\n\n if (digits) {\n const parts = digits.match(this._NUMBER_FORMAT_REGEXP);\n\n if (parts === null) {\n throw new Error(`${digits} is not a valid digit info for number pipes`);\n }\n\n /* istanbul ignore else */\n if (parts[1] != null) {\n // min integer digits\n minInt = parseIntAutoRadix(parts[1]);\n }\n\n /* istanbul ignore else */\n if (parts[3] != null) {\n // min fraction digits\n minFraction = parseIntAutoRadix(parts[3]);\n }\n\n /* istanbul ignore else */\n if (parts[5] != null) {\n // max fraction digits\n maxFraction = parseIntAutoRadix(parts[5]);\n }\n }\n\n return SkyIntlNumberFormatter.format(value as number, locale, style, {\n minimumIntegerDigits: minInt,\n minimumFractionDigits: minFraction,\n maximumFractionDigits: maxFraction,\n currency: currency,\n currencyAsSymbol: currencyAsSymbol,\n currencySign: currencySign,\n });\n }\n}\n"]}
@@ -5,7 +5,7 @@
5
5
  * To update this file, simply rerun the command.
6
6
  */
7
7
  import { NgModule } from '@angular/core';
8
- import { getLibStringForLocale, SkyI18nModule, SKY_LIB_RESOURCES_PROVIDERS, } from '@skyux/i18n';
8
+ import { SKY_LIB_RESOURCES_PROVIDERS, SkyI18nModule, getLibStringForLocale, } from '@skyux/i18n';
9
9
  import * as i0 from "@angular/core";
10
10
  const RESOURCES = {
11
11
  'EN-US': {
@@ -1 +1 @@
1
- {"version":3,"file":"sky-core-resources.module.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/shared/sky-core-resources.module.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,qBAAqB,EAErB,aAAa,EAGb,2BAA2B,GAC5B,MAAM,aAAa,CAAC;;AAErB,MAAM,SAAS,GAA0C;IACvD,OAAO,EAAE;QACP,6BAA6B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;QAC/C,6BAA6B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;QAC/C,8BAA8B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;QAChD,8BAA8B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;KACjD;CACF,CAAC;AAEF,MAAM,OAAO,wBAAwB;IAC5B,SAAS,CAAC,UAA4B,EAAE,IAAY;QACzD,OAAO,qBAAqB,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;CACF;AAED;;GAEG;AAWH,MAAM,OAAO,sBAAsB;;oHAAtB,sBAAsB;qHAAtB,sBAAsB,YATvB,aAAa;qHASZ,sBAAsB,aARtB;QACT;YACE,OAAO,EAAE,2BAA2B;YACpC,QAAQ,EAAE,wBAAwB;YAClC,KAAK,EAAE,IAAI;SACZ;KACF,YAPS,aAAa;4FASZ,sBAAsB;kBAVlC,QAAQ;mBAAC;oBACR,OAAO,EAAE,CAAC,aAAa,CAAC;oBACxB,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,2BAA2B;4BACpC,QAAQ,EAAE,wBAAwB;4BAClC,KAAK,EAAE,IAAI;yBACZ;qBACF;iBACF","sourcesContent":["/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module modules/shared/sky-core' schematic.\n * To update this file, simply rerun the command.\n */\n\nimport { NgModule } from '@angular/core';\nimport {\n getLibStringForLocale,\n SkyAppLocaleInfo,\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesProvider,\n SKY_LIB_RESOURCES_PROVIDERS,\n} from '@skyux/i18n';\n\nconst RESOURCES: { [locale: string]: SkyLibResources } = {\n 'EN-US': {\n skyux_numeric_billions_symbol: { message: 'B' },\n skyux_numeric_millions_symbol: { message: 'M' },\n skyux_numeric_thousands_symbol: { message: 'K' },\n skyux_numeric_trillions_symbol: { message: 'T' },\n },\n};\n\nexport class SkyCoreResourcesProvider implements SkyLibResourcesProvider {\n public getString(localeInfo: SkyAppLocaleInfo, name: string): string {\n return getLibStringForLocale(RESOURCES, localeInfo.locale, name);\n }\n}\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n providers: [\n {\n provide: SKY_LIB_RESOURCES_PROVIDERS,\n useClass: SkyCoreResourcesProvider,\n multi: true,\n },\n ],\n})\nexport class SkyCoreResourcesModule {}\n"]}
1
+ {"version":3,"file":"sky-core-resources.module.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/shared/sky-core-resources.module.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,2BAA2B,EAE3B,aAAa,EAGb,qBAAqB,GACtB,MAAM,aAAa,CAAC;;AAErB,MAAM,SAAS,GAA0C;IACvD,OAAO,EAAE;QACP,6BAA6B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;QAC/C,6BAA6B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;QAC/C,8BAA8B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;QAChD,8BAA8B,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;KACjD;CACF,CAAC;AAEF,MAAM,OAAO,wBAAwB;IAC5B,SAAS,CAAC,UAA4B,EAAE,IAAY;QACzD,OAAO,qBAAqB,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;CACF;AAED;;GAEG;AAWH,MAAM,OAAO,sBAAsB;;oHAAtB,sBAAsB;qHAAtB,sBAAsB,YATvB,aAAa;qHASZ,sBAAsB,aARtB;QACT;YACE,OAAO,EAAE,2BAA2B;YACpC,QAAQ,EAAE,wBAAwB;YAClC,KAAK,EAAE,IAAI;SACZ;KACF,YAPS,aAAa;4FASZ,sBAAsB;kBAVlC,QAAQ;mBAAC;oBACR,OAAO,EAAE,CAAC,aAAa,CAAC;oBACxB,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,2BAA2B;4BACpC,QAAQ,EAAE,wBAAwB;4BAClC,KAAK,EAAE,IAAI;yBACZ;qBACF;iBACF","sourcesContent":["/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module modules/shared/sky-core' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport {\n SKY_LIB_RESOURCES_PROVIDERS,\n SkyAppLocaleInfo,\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesProvider,\n getLibStringForLocale,\n} from '@skyux/i18n';\n\nconst RESOURCES: { [locale: string]: SkyLibResources } = {\n 'EN-US': {\n skyux_numeric_billions_symbol: { message: 'B' },\n skyux_numeric_millions_symbol: { message: 'M' },\n skyux_numeric_thousands_symbol: { message: 'K' },\n skyux_numeric_trillions_symbol: { message: 'T' },\n },\n};\n\nexport class SkyCoreResourcesProvider implements SkyLibResourcesProvider {\n public getString(localeInfo: SkyAppLocaleInfo, name: string): string {\n return getLibStringForLocale(RESOURCES, localeInfo.locale, name);\n }\n}\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n providers: [\n {\n provide: SKY_LIB_RESOURCES_PROVIDERS,\n useClass: SkyCoreResourcesProvider,\n multi: true,\n },\n ],\n})\nexport class SkyCoreResourcesModule {}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"title.service.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/title/title.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;;;AAIlD;;GAEG;AAIH,MAAM,OAAO,kBAAkB;IAC7B,YAAoB,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IAEpC;;;;OAIG;IACI,QAAQ,CAAC,IAAwB;QACtC,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAC3B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SAClD;IACH,CAAC;;gHAZU,kBAAkB;oHAAlB,kBAAkB,cAFjB,MAAM;4FAEP,kBAAkB;kBAH9B,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB","sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { Title } from '@angular/platform-browser';\n\nimport { SkyAppSetTitleArgs } from './set-title-args';\n\n/**\n * Provides a method for setting a formatted title on the current window.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyAppTitleService {\n constructor(private title: Title) {}\n\n /**\n * Sets the title on the current window.\n * @param args An array of title parts. The parts will be concatenated with a hyphen between\n * each part.\n */\n public setTitle(args: SkyAppSetTitleArgs): void {\n if (args && args.titleParts) {\n this.title.setTitle(args.titleParts.join(' - '));\n }\n }\n}\n"]}
1
+ {"version":3,"file":"title.service.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/title/title.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;;;AAIlD;;GAEG;AAIH,MAAM,OAAO,kBAAkB;IAC7B,YAAoB,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IAEpC;;;;OAIG;IACI,QAAQ,CAAC,IAAwB;QACtC,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAC3B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SAClD;IACH,CAAC;;gHAZU,kBAAkB;oHAAlB,kBAAkB,cAFjB,MAAM;4FAEP,kBAAkB;kBAH9B,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB","sourcesContent":["import { Injectable } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\n\nimport { SkyAppSetTitleArgs } from './set-title-args';\n\n/**\n * Provides a method for setting a formatted title on the current window.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyAppTitleService {\n constructor(private title: Title) {}\n\n /**\n * Sets the title on the current window.\n * @param args An array of title parts. The parts will be concatenated with a hyphen between\n * each part.\n */\n public setTitle(args: SkyAppSetTitleArgs): void {\n if (args && args.titleParts) {\n this.title.setTitle(args.titleParts.join(' - '));\n }\n }\n}\n"]}
@@ -46,7 +46,7 @@ export class SkyViewkeeperDirective {
46
46
  if (this.skyViewkeeper) {
47
47
  viewkeeperEls = [];
48
48
  for (const item of this.skyViewkeeper) {
49
- let matchingEls = Array.from(this.el.nativeElement.querySelectorAll(item));
49
+ const matchingEls = Array.from(this.el.nativeElement.querySelectorAll(item));
50
50
  viewkeeperEls = [...viewkeeperEls, ...matchingEls];
51
51
  }
52
52
  }
@@ -69,7 +69,7 @@ export class SkyViewkeeperDirective {
69
69
  return false;
70
70
  }
71
71
  detectElements() {
72
- let viewkeeperEls = this.getViewkeeperEls();
72
+ const viewkeeperEls = this.getViewkeeperEls();
73
73
  if (this.viewkeeperElsChanged(viewkeeperEls)) {
74
74
  if (this.scrollableHostWatchUnsubscribe) {
75
75
  this.scrollableHostWatchUnsubscribe.next();
@@ -1 +1 @@
1
- {"version":3,"file":"viewkeeper.directive.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/viewkeeper/viewkeeper.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { MutationObserverService } from '../mutation/mutation-observer-service';\nimport { SkyScrollableHostService } from '../scrollable-host/scrollable-host.service';\n\nimport { SkyViewkeeper } from './viewkeeper';\n\nimport { SkyViewkeeperService } from './viewkeeper.service';\n\n@Directive({\n selector: '[skyViewkeeper]',\n})\nexport class SkyViewkeeperDirective implements OnInit, OnDestroy {\n @Input()\n public set skyViewkeeper(value: string[]) {\n this._skyViewkeeper = value;\n\n this.detectElements();\n }\n\n public get skyViewkeeper(): string[] {\n return this._skyViewkeeper;\n }\n\n private _skyViewkeeper: string[];\n\n private viewkeepers: SkyViewkeeper[] = [];\n\n private observer: MutationObserver;\n\n private currentViewkeeperEls: HTMLElement[];\n\n private scrollableHostWatchUnsubscribe: Subject<void> | undefined = undefined;\n\n constructor(\n private el: ElementRef,\n private mutationObserverSvc: MutationObserverService,\n private viewkeeperSvc: SkyViewkeeperService,\n @Optional() private scrollableHostService: SkyScrollableHostService\n ) {}\n\n public ngOnInit(): void {\n this.observer = this.mutationObserverSvc.create(() =>\n this.detectElements()\n );\n\n this.observer.observe(this.el.nativeElement, {\n childList: true,\n subtree: true,\n });\n }\n\n public ngOnDestroy(): void {\n this.observer.disconnect();\n\n this.destroyViewkeepers();\n }\n\n private destroyViewkeepers(): void {\n for (const viewkeeper of this.viewkeepers) {\n this.viewkeeperSvc.destroy(viewkeeper);\n }\n\n this.viewkeepers = [];\n }\n\n private getViewkeeperEls(): HTMLElement[] {\n let viewkeeperEls: HTMLElement[];\n\n if (this.skyViewkeeper) {\n viewkeeperEls = [];\n\n for (const item of this.skyViewkeeper) {\n let matchingEls = Array.from(\n (this.el.nativeElement as HTMLElement).querySelectorAll(item)\n ) as HTMLElement[];\n\n viewkeeperEls = [...viewkeeperEls, ...matchingEls];\n }\n }\n\n return viewkeeperEls;\n }\n\n private viewkeeperElsChanged(viewkeeperEls: HTMLElement[]): boolean {\n if (!viewkeeperEls !== !this.currentViewkeeperEls) {\n return true;\n }\n\n if (viewkeeperEls && this.currentViewkeeperEls) {\n if (viewkeeperEls.length !== this.currentViewkeeperEls.length) {\n return true;\n }\n\n for (let i = 0, n = viewkeeperEls.length; i < n; i++) {\n if (viewkeeperEls[i] !== this.currentViewkeeperEls[i]) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n private detectElements(): void {\n let viewkeeperEls = this.getViewkeeperEls();\n\n if (this.viewkeeperElsChanged(viewkeeperEls)) {\n if (this.scrollableHostWatchUnsubscribe) {\n this.scrollableHostWatchUnsubscribe.next();\n this.scrollableHostWatchUnsubscribe = new Subject();\n } else {\n this.scrollableHostWatchUnsubscribe = new Subject();\n }\n\n this.scrollableHostService\n .watchScrollableHost(this.el)\n .pipe(takeUntil(this.scrollableHostWatchUnsubscribe))\n .subscribe((scrollableHost) => {\n this.destroyViewkeepers();\n\n let previousViewkeeperEl: HTMLElement;\n\n for (const viewkeeperEl of viewkeeperEls) {\n this.viewkeepers.push(\n this.viewkeeperSvc.create({\n boundaryEl: this.el.nativeElement,\n scrollableHost:\n scrollableHost instanceof HTMLElement\n ? scrollableHost\n : undefined,\n el: viewkeeperEl,\n setWidth: true,\n verticalOffsetEl: previousViewkeeperEl,\n })\n );\n\n previousViewkeeperEl = viewkeeperEl;\n }\n });\n\n this.currentViewkeeperEls = viewkeeperEls;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"viewkeeper.directive.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/viewkeeper/viewkeeper.directive.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { MutationObserverService } from '../mutation/mutation-observer-service';\nimport { SkyScrollableHostService } from '../scrollable-host/scrollable-host.service';\n\nimport { SkyViewkeeper } from './viewkeeper';\nimport { SkyViewkeeperService } from './viewkeeper.service';\n\n@Directive({\n selector: '[skyViewkeeper]',\n})\nexport class SkyViewkeeperDirective implements OnInit, OnDestroy {\n @Input()\n public set skyViewkeeper(value: string[]) {\n this._skyViewkeeper = value;\n\n this.detectElements();\n }\n\n public get skyViewkeeper(): string[] {\n return this._skyViewkeeper;\n }\n\n private _skyViewkeeper: string[];\n\n private viewkeepers: SkyViewkeeper[] = [];\n\n private observer: MutationObserver;\n\n private currentViewkeeperEls: HTMLElement[];\n\n private scrollableHostWatchUnsubscribe: Subject<void> | undefined = undefined;\n\n constructor(\n private el: ElementRef,\n private mutationObserverSvc: MutationObserverService,\n private viewkeeperSvc: SkyViewkeeperService,\n @Optional() private scrollableHostService: SkyScrollableHostService\n ) {}\n\n public ngOnInit(): void {\n this.observer = this.mutationObserverSvc.create(() =>\n this.detectElements()\n );\n\n this.observer.observe(this.el.nativeElement, {\n childList: true,\n subtree: true,\n });\n }\n\n public ngOnDestroy(): void {\n this.observer.disconnect();\n\n this.destroyViewkeepers();\n }\n\n private destroyViewkeepers(): void {\n for (const viewkeeper of this.viewkeepers) {\n this.viewkeeperSvc.destroy(viewkeeper);\n }\n\n this.viewkeepers = [];\n }\n\n private getViewkeeperEls(): HTMLElement[] {\n let viewkeeperEls: HTMLElement[];\n\n if (this.skyViewkeeper) {\n viewkeeperEls = [];\n\n for (const item of this.skyViewkeeper) {\n const matchingEls = Array.from(\n (this.el.nativeElement as HTMLElement).querySelectorAll(item)\n ) as HTMLElement[];\n\n viewkeeperEls = [...viewkeeperEls, ...matchingEls];\n }\n }\n\n return viewkeeperEls;\n }\n\n private viewkeeperElsChanged(viewkeeperEls: HTMLElement[]): boolean {\n if (!viewkeeperEls !== !this.currentViewkeeperEls) {\n return true;\n }\n\n if (viewkeeperEls && this.currentViewkeeperEls) {\n if (viewkeeperEls.length !== this.currentViewkeeperEls.length) {\n return true;\n }\n\n for (let i = 0, n = viewkeeperEls.length; i < n; i++) {\n if (viewkeeperEls[i] !== this.currentViewkeeperEls[i]) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n private detectElements(): void {\n const viewkeeperEls = this.getViewkeeperEls();\n\n if (this.viewkeeperElsChanged(viewkeeperEls)) {\n if (this.scrollableHostWatchUnsubscribe) {\n this.scrollableHostWatchUnsubscribe.next();\n this.scrollableHostWatchUnsubscribe = new Subject();\n } else {\n this.scrollableHostWatchUnsubscribe = new Subject();\n }\n\n this.scrollableHostService\n .watchScrollableHost(this.el)\n .pipe(takeUntil(this.scrollableHostWatchUnsubscribe))\n .subscribe((scrollableHost) => {\n this.destroyViewkeepers();\n\n let previousViewkeeperEl: HTMLElement;\n\n for (const viewkeeperEl of viewkeeperEls) {\n this.viewkeepers.push(\n this.viewkeeperSvc.create({\n boundaryEl: this.el.nativeElement,\n scrollableHost:\n scrollableHost instanceof HTMLElement\n ? scrollableHost\n : undefined,\n el: viewkeeperEl,\n setWidth: true,\n verticalOffsetEl: previousViewkeeperEl,\n })\n );\n\n previousViewkeeperEl = viewkeeperEl;\n }\n });\n\n this.currentViewkeeperEls = viewkeeperEls;\n }\n }\n}\n"]}
@@ -5,7 +5,7 @@ let nextIdIndex;
5
5
  function ensureStyleEl() {
6
6
  if (!styleEl) {
7
7
  styleEl = document.createElement('style');
8
- let css = document.createTextNode(`
8
+ const css = document.createTextNode(`
9
9
  .${CLS_VIEWKEEPER_FIXED} {
10
10
  position: fixed !important;
11
11
  z-index: 999;
@@ -1 +1 @@
1
- {"version":3,"file":"viewkeeper.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/viewkeeper/viewkeeper.ts"],"names":[],"mappings":"AAQA,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AACpD,MAAM,yBAAyB,GAAG,qBAAqB,CAAC;AAExD,IAAI,OAAyB,CAAC;AAC9B,IAAI,WAAmB,CAAC;AAExB,SAAS,aAAa;IACpB,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE1C,IAAI,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC;GACnC,oBAAoB;;;;;;;qBAOF,oBAAoB;;;;CAIxC,CAAC,CAAC;QAEC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAEzB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;KACpC;AACH,CAAC;AAED,SAAS,MAAM;IACb,WAAW,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAErC,OAAO,aAAa,GAAG,WAAW,CAAC;AACrC,CAAC;AAED,SAAS,SAAS,CAChB,EAAe,EACf,cAA4B;IAE5B,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;IAE1E,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS;QAChC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,EAAE,CAAC,KAAsB;IAChC,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;KACxB;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CACpB,EAAe,EACf,IAAqB,EACrB,GAAoB,EACpB,KAAsB,EACtB,SAA0B;IAE1B,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACzB,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAEnC,wBAAwB;IACxB,kBAAkB;IAClB,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;KAC5B;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,EAAe;IAC1C,MAAM,aAAa,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAE3C,OAAO,CACL,EAAE,CAAC,YAAY;QACf,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC;QACrC,QAAQ,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,CAAC,CACzC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAS;IAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAEhD,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAEnD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,OAAO,aAAa;IAuCxB,YAAY,OAA6B;QACvC,OAAO,GAAG,OAAO,IAAI,0BAA0B,CAAC,EAAE,CAAC;QAEnD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACjD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,CAAC,CAAC;QAExD,IAAI,CAAC,qBAAqB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAEzD,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CACpC,yBAAyB,EACzB,IAAI,CAAC,qBAAqB,CAC3B,CAAC;SACH;QAED,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;QACpE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC9D,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAEzE,aAAa,EAAE,CAAC;QAEhB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAtDD,IAAY,iBAAiB,CAAC,MAAc;QAC1C,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC;IACnC,CAAC;IAED,IAAY,iBAAiB;QAC3B,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,OAAO,CAAC,CAAC;SACV;aAAM;YACL,OAAO,IAAI,CAAC,kBAAkB,CAAC;SAChC;IACH,CAAC;IA8CM,cAAc;QACnB,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAEtD,gHAAgH;QAChH,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,YAAY,KAAK,CAAC,EAAE;YAC3D,OAAO;SACR;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAEtE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAE/D,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE;YAC5C,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;aACvC;iBAAM;gBACL,IAAI,CAAC,OAAO,EAAE,CAAC;aAChB;SACF;QAED,MAAM,GAAG,GAAG,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;QAEzD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;YACvE,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACjE,MAAM,CAAC,mBAAmB,CACxB,mBAAmB,EACnB,IAAI,CAAC,qBAAqB,CAC3B,CAAC;YAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YAEf,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACzB,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CACvC,yBAAyB,EACzB,IAAI,CAAC,qBAAqB,CAC3B,CAAC;aACH;YAED,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;YAE9D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SACzB;IACH,CAAC;IAEO,WAAW;QACjB,OAAO,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;IAC7B,CAAC;IAEO,OAAO;QACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAE7D,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SAC9C;QAED,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAE/C,IAAI,CAAC,kBAAkB;YACrB,IAAI,CAAC,iBAAiB;gBACtB,IAAI,CAAC,mBAAmB;oBACtB,SAAS,CAAC;QAEd,IAAI,KAAa,CAAC;QAElB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,KAAK,GAAG,MAAM,CAAC;SAChB;QAED,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IAEO,uBAAuB;QAC7B,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;QAEjC,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,MAAM,wBAAwB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC;YACjE,MAAM,mBAAmB,GAAG,QAAQ,CAAC,wBAAwB,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAExE,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAAG,mBAAmB,CAAC;SACpE;aAAM,IAAI,IAAI,CAAC,cAAc,EAAE;YAC9B,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC;SAC3D;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,WAAW,CACjB,YAAuC,EACvC,cAAsB;QAEtB,IAAI,SAAiB,CAAC;QACtB,IAAI,OAAgB,CAAC;QAErB,IAAI,YAAY,CAAC,QAAQ,EAAE;YACzB,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC;SACvE;aAAM;YACL,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC;SACzD;QAED,OAAO;YACL,YAAY,CAAC,SAAS,GAAG,cAAc,GAAG,IAAI,CAAC,iBAAiB;gBAChE,SAAS,CAAC;QAEZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,cAAc,CACpB,YAAuC,EACvC,cAAsB;QAEtB,IAAI,UAAkB,CAAC;QAEvB,oFAAoF;QACpF,mFAAmF;QACnF,wEAAwE;QACxE,wEAAwE;QACxE,UAAU,GAAG,IAAI,CAAC,GAAG,CACnB,YAAY,CAAC,cAAc;YACzB,YAAY,CAAC,QAAQ;YACrB,YAAY,CAAC,SAAS,EACxB,cAAc,CACf,CAAC;QAEF,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;QAC3E,MAAM,WAAW,GACf,YAAY,CAAC,cAAc,CAAC,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC;QAE7D,OAAO;YACL,WAAW;YACX,UAAU;YACV,YAAY;SACb,CAAC;IACJ,CAAC;IAEO,aAAa,CACnB,OAAgB,EAChB,WAAqC;QAErC,IACE,CAAC,OAAO;YACN,IAAI,CAAC,kBAAkB,KAAK,WAAW,CAAC,WAAW;YACnD,IAAI,CAAC,iBAAiB,KAAK,WAAW,CAAC,UAAU;YACjD,IAAI,CAAC,mBAAmB,KAAK,WAAW,CAAC,YAAY,CAAC;YACxD,CAAC,CAAC,OAAO;gBACP,CAAC,CACC,IAAI,CAAC,kBAAkB,KAAK,SAAS;oBACrC,IAAI,CAAC,kBAAkB,KAAK,IAAI,CACjC,CAAC,EACJ;YACA,+EAA+E;YAC/E,kFAAkF;YAClF,yBAAyB;YACzB,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CACX,YAAuC,EACvC,WAAqC;QAErC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAEnB,0BAA0B;QAC1B,kBAAkB;QAClB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YAC1B,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC;YAE3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC/C,QAAQ,CAAC,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC;YACpC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;YAEzC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;SACtD;QAED,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAEvC,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,UAAU,CAAC;QAChD,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC,WAAW,CAAC;QAClD,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,YAAY,CAAC;QAEpD,IAAI,KAAa,CAAC;QAElB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC;SAClC;QAED,aAAa,CACX,EAAE,EACF,WAAW,CAAC,WAAW,EACvB,WAAW,CAAC,UAAU,EACtB,KAAK,EACL,IAAI,CAAC,iBAAiB,CACvB,CAAC;IACJ,CAAC;IAEO,eAAe;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEnD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAEnC,MAAM,cAAc,GAAG,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC;QACvC,MAAM,cAAc,GAClB,WAAW,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC;QAE1D,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc;YACpC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU;YAChC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc;YACnC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS;YAC/B,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC;QAEvC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE9C,OAAO;YACL,cAAc;YACd,cAAc;YACd,UAAU;YACV,QAAQ;YACR,UAAU;YACV,SAAS;YACT,QAAQ;YACR,QAAQ;SACT,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { SkyViewkeeperBoundaryInfo } from './viewkeeper-boundary-info';\n\nimport { SkyViewkeeperFixedStyles } from './viewkeeper-fixed-styles';\n\nimport { SkyViewkeeperOffset } from './viewkeeper-offset';\n\nimport { SkyViewkeeperOptions } from './viewkeeper-options';\n\nconst CLS_VIEWKEEPER_FIXED = 'sky-viewkeeper-fixed';\nconst EVT_AFTER_VIEWKEEPER_SYNC = 'afterViewkeeperSync';\n\nlet styleEl: HTMLStyleElement;\nlet nextIdIndex: number;\n\nfunction ensureStyleEl(): void {\n if (!styleEl) {\n styleEl = document.createElement('style');\n\n let css = document.createTextNode(`\n.${CLS_VIEWKEEPER_FIXED} {\n position: fixed !important;\n z-index: 999;\n opacity: 0.95;\n overflow: hidden;\n}\n\n.sky-theme-modern .${CLS_VIEWKEEPER_FIXED} {\n box-shadow: 0px 1px 8px -1px rgba(0, 0, 0, 0.3);\n opacity: initial;\n}\n`);\n\n styleEl.appendChild(css);\n\n document.head.appendChild(styleEl);\n }\n}\n\nfunction nextId(): string {\n nextIdIndex = (nextIdIndex || 0) + 1;\n\n return 'viewkeeper-' + nextIdIndex;\n}\n\nfunction getOffset(\n el: HTMLElement,\n scrollableHost?: HTMLElement\n): SkyViewkeeperOffset {\n const rect = el.getBoundingClientRect();\n const parent = scrollableHost ? scrollableHost : document.documentElement;\n\n return {\n top: rect.top + parent.scrollTop,\n left: rect.left + parent.scrollLeft,\n };\n}\n\nfunction px(value: number | string): string {\n let pxValue = value ? value.toString() : '';\n\n if (typeof value === 'number') {\n pxValue = value + 'px';\n }\n\n return pxValue;\n}\n\nfunction setElPosition(\n el: HTMLElement,\n left: number | string,\n top: number | string,\n width: number | string,\n marginTop: number | string\n): void {\n el.style.top = px(top);\n el.style.left = px(left);\n el.style.marginTop = px(marginTop);\n\n /*istanbul ignore else*/\n /* sanity check */\n if (width !== null) {\n el.style.width = px(width);\n }\n}\n\nfunction getHeightWithMargin(el: HTMLElement): number {\n const computedStyle = getComputedStyle(el);\n\n return (\n el.offsetHeight +\n parseInt(computedStyle.marginTop, 10) +\n parseInt(computedStyle.marginBottom, 10)\n );\n}\n\nfunction createCustomEvent(name: any): CustomEvent<any> {\n const evt = document.createEvent('CustomEvent');\n\n evt.initCustomEvent(name, false, false, undefined);\n\n return evt;\n}\n\nexport class SkyViewkeeper {\n private setWidth: boolean;\n\n private id: string;\n\n private el: HTMLElement;\n\n private boundaryEl: HTMLElement;\n\n private verticalOffset: number;\n\n private verticalOffsetEl: HTMLElement;\n\n private set viewportMarginTop(margin: number) {\n this._viewportMarginTop = margin;\n }\n\n private get viewportMarginTop(): number {\n if (this.scrollableHost) {\n return 0;\n } else {\n return this._viewportMarginTop;\n }\n }\n\n private isDestroyed: boolean;\n\n private currentElFixedTop: number;\n\n private currentElFixedLeft: number;\n\n private currentElFixedWidth: number;\n\n private scrollableHost: HTMLElement;\n\n private syncElPositionHandler: () => void;\n\n private _viewportMarginTop: number;\n\n constructor(options: SkyViewkeeperOptions) {\n options = options || /* istanbul ignore next */ {};\n\n this.setWidth = options.setWidth;\n this.id = nextId();\n this.el = options.el;\n this.boundaryEl = options.boundaryEl;\n this.scrollableHost = options.scrollableHost;\n this.verticalOffset = options.verticalOffset || 0;\n this.verticalOffsetEl = options.verticalOffsetEl;\n this.viewportMarginTop = options.viewportMarginTop || 0;\n\n this.syncElPositionHandler = () => this.syncElPosition();\n\n if (this.verticalOffsetEl) {\n this.verticalOffsetEl.addEventListener(\n EVT_AFTER_VIEWKEEPER_SYNC,\n this.syncElPositionHandler\n );\n }\n\n window.addEventListener('scroll', this.syncElPositionHandler, true);\n window.addEventListener('resize', this.syncElPositionHandler);\n window.addEventListener('orientationchange', this.syncElPositionHandler);\n\n ensureStyleEl();\n\n this.syncElPosition();\n }\n\n public syncElPosition(): void {\n const verticalOffset = this.calculateVerticalOffset();\n\n // When the element isn't visible, its size can't be calculated, so don't attempt syncing position in this case.\n if (this.el.offsetWidth === 0 && this.el.offsetHeight === 0) {\n return;\n }\n\n const boundaryInfo = this.getBoundaryInfo();\n const fixedStyles = this.getFixedStyles(boundaryInfo, verticalOffset);\n\n const doFixEl = this.shouldFixEl(boundaryInfo, verticalOffset);\n\n if (this.needsUpdating(doFixEl, fixedStyles)) {\n if (doFixEl) {\n this.fixEl(boundaryInfo, fixedStyles);\n } else {\n this.unfixEl();\n }\n }\n\n const evt = createCustomEvent(EVT_AFTER_VIEWKEEPER_SYNC);\n\n this.el.dispatchEvent(evt);\n }\n\n public destroy(): void {\n if (!this.isDestroyed) {\n window.removeEventListener('scroll', this.syncElPositionHandler, true);\n window.removeEventListener('resize', this.syncElPositionHandler);\n window.removeEventListener(\n 'orientationchange',\n this.syncElPositionHandler\n );\n\n this.unfixEl();\n\n if (this.verticalOffsetEl) {\n this.verticalOffsetEl.removeEventListener(\n EVT_AFTER_VIEWKEEPER_SYNC,\n this.syncElPositionHandler\n );\n }\n\n this.el = this.boundaryEl = this.verticalOffsetEl = undefined;\n\n this.isDestroyed = true;\n }\n }\n\n private getSpacerId(): string {\n return this.id + '-spacer';\n }\n\n private unfixEl(): void {\n const spacerEl = document.getElementById(this.getSpacerId());\n\n if (spacerEl) {\n spacerEl.parentElement.removeChild(spacerEl);\n }\n\n this.el.classList.remove(CLS_VIEWKEEPER_FIXED);\n\n this.currentElFixedLeft =\n this.currentElFixedTop =\n this.currentElFixedWidth =\n undefined;\n\n let width: string;\n\n if (this.setWidth) {\n width = 'auto';\n }\n\n setElPosition(this.el, '', '', width, '');\n }\n\n private calculateVerticalOffset(): number {\n let offset = this.verticalOffset;\n\n if (this.verticalOffsetEl) {\n const verticalOffsetElTopStyle = this.verticalOffsetEl.style.top;\n const verticalOffsetElTop = parseInt(verticalOffsetElTopStyle, 10) || 0;\n\n offset += this.verticalOffsetEl.offsetHeight + verticalOffsetElTop;\n } else if (this.scrollableHost) {\n offset += this.scrollableHost.getBoundingClientRect().top;\n }\n\n return offset;\n }\n\n private shouldFixEl(\n boundaryInfo: SkyViewkeeperBoundaryInfo,\n verticalOffset: number\n ): boolean {\n let anchorTop: number;\n let doFixEl: boolean;\n\n if (boundaryInfo.spacerEl) {\n anchorTop = getOffset(boundaryInfo.spacerEl, this.scrollableHost).top;\n } else {\n anchorTop = getOffset(this.el, this.scrollableHost).top;\n }\n\n doFixEl =\n boundaryInfo.scrollTop + verticalOffset + this.viewportMarginTop >\n anchorTop;\n\n return doFixEl;\n }\n\n private getFixedStyles(\n boundaryInfo: SkyViewkeeperBoundaryInfo,\n verticalOffset: number\n ): SkyViewkeeperFixedStyles {\n let elFixedTop: number;\n\n // If the element needs to be fixed, this will calculate its position. The position\n // will be 0 (fully visible) unless the user is scrolling the boundary out of view.\n // In that case, the element should begin to scroll out of view with the\n // rest of the boundary by setting its top position to a negative value.\n elFixedTop = Math.min(\n boundaryInfo.boundaryBottom -\n boundaryInfo.elHeight -\n boundaryInfo.scrollTop,\n verticalOffset\n );\n\n const elFixedWidth = boundaryInfo.boundaryEl.getBoundingClientRect().width;\n const elFixedLeft =\n boundaryInfo.boundaryOffset.left - boundaryInfo.scrollLeft;\n\n return {\n elFixedLeft,\n elFixedTop,\n elFixedWidth,\n };\n }\n\n private needsUpdating(\n doFixEl: boolean,\n fixedStyles: SkyViewkeeperFixedStyles\n ): boolean {\n if (\n (doFixEl &&\n this.currentElFixedLeft === fixedStyles.elFixedLeft &&\n this.currentElFixedTop === fixedStyles.elFixedTop &&\n this.currentElFixedWidth === fixedStyles.elFixedWidth) ||\n (!doFixEl &&\n !(\n this.currentElFixedLeft !== undefined &&\n this.currentElFixedLeft !== null\n ))\n ) {\n // The element is either currently fixed and its position and width do not need\n // to change, or the element is not currently fixed and does not need to be fixed.\n // No changes are needed.\n return false;\n }\n\n return true;\n }\n\n private fixEl(\n boundaryInfo: SkyViewkeeperBoundaryInfo,\n fixedStyles: SkyViewkeeperFixedStyles\n ): void {\n const el = this.el;\n\n /* istanbul ignore else */\n /* sanity check */\n if (!boundaryInfo.spacerEl) {\n const spacerHeight = boundaryInfo.elHeight;\n\n const spacerEl = document.createElement('div');\n spacerEl.id = boundaryInfo.spacerId;\n spacerEl.style.height = px(spacerHeight);\n\n el.parentNode.insertBefore(spacerEl, el.nextSibling);\n }\n\n el.classList.add(CLS_VIEWKEEPER_FIXED);\n\n this.currentElFixedTop = fixedStyles.elFixedTop;\n this.currentElFixedLeft = fixedStyles.elFixedLeft;\n this.currentElFixedWidth = fixedStyles.elFixedWidth;\n\n let width: number;\n\n if (this.setWidth) {\n width = fixedStyles.elFixedWidth;\n }\n\n setElPosition(\n el,\n fixedStyles.elFixedLeft,\n fixedStyles.elFixedTop,\n width,\n this.viewportMarginTop\n );\n }\n\n private getBoundaryInfo(): SkyViewkeeperBoundaryInfo {\n const spacerId = this.getSpacerId();\n\n const spacerEl = document.getElementById(spacerId);\n\n const boundaryEl = this.boundaryEl;\n\n const boundaryOffset = getOffset(boundaryEl, this.scrollableHost);\n const boundaryTop = boundaryOffset.top;\n const boundaryBottom =\n boundaryTop + boundaryEl.getBoundingClientRect().height;\n\n const scrollLeft = this.scrollableHost\n ? this.scrollableHost.scrollLeft\n : document.documentElement.scrollLeft;\n const scrollTop = this.scrollableHost\n ? this.scrollableHost.scrollTop\n : document.documentElement.scrollTop;\n\n const elHeight = getHeightWithMargin(this.el);\n\n return {\n boundaryBottom,\n boundaryOffset,\n boundaryEl,\n elHeight,\n scrollLeft,\n scrollTop,\n spacerId,\n spacerEl,\n };\n }\n}\n"]}
1
+ {"version":3,"file":"viewkeeper.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/viewkeeper/viewkeeper.ts"],"names":[],"mappings":"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","sourcesContent":["import { SkyViewkeeperBoundaryInfo } from './viewkeeper-boundary-info';\nimport { SkyViewkeeperFixedStyles } from './viewkeeper-fixed-styles';\nimport { SkyViewkeeperOffset } from './viewkeeper-offset';\nimport { SkyViewkeeperOptions } from './viewkeeper-options';\n\nconst CLS_VIEWKEEPER_FIXED = 'sky-viewkeeper-fixed';\nconst EVT_AFTER_VIEWKEEPER_SYNC = 'afterViewkeeperSync';\n\nlet styleEl: HTMLStyleElement;\nlet nextIdIndex: number;\n\nfunction ensureStyleEl(): void {\n if (!styleEl) {\n styleEl = document.createElement('style');\n\n const css = document.createTextNode(`\n.${CLS_VIEWKEEPER_FIXED} {\n position: fixed !important;\n z-index: 999;\n opacity: 0.95;\n overflow: hidden;\n}\n\n.sky-theme-modern .${CLS_VIEWKEEPER_FIXED} {\n box-shadow: 0px 1px 8px -1px rgba(0, 0, 0, 0.3);\n opacity: initial;\n}\n`);\n\n styleEl.appendChild(css);\n\n document.head.appendChild(styleEl);\n }\n}\n\nfunction nextId(): string {\n nextIdIndex = (nextIdIndex || 0) + 1;\n\n return 'viewkeeper-' + nextIdIndex;\n}\n\nfunction getOffset(\n el: HTMLElement,\n scrollableHost?: HTMLElement\n): SkyViewkeeperOffset {\n const rect = el.getBoundingClientRect();\n const parent = scrollableHost ? scrollableHost : document.documentElement;\n\n return {\n top: rect.top + parent.scrollTop,\n left: rect.left + parent.scrollLeft,\n };\n}\n\nfunction px(value: number | string): string {\n let pxValue = value ? value.toString() : '';\n\n if (typeof value === 'number') {\n pxValue = value + 'px';\n }\n\n return pxValue;\n}\n\nfunction setElPosition(\n el: HTMLElement,\n left: number | string,\n top: number | string,\n width: number | string,\n marginTop: number | string\n): void {\n el.style.top = px(top);\n el.style.left = px(left);\n el.style.marginTop = px(marginTop);\n\n /*istanbul ignore else*/\n /* sanity check */\n if (width !== null) {\n el.style.width = px(width);\n }\n}\n\nfunction getHeightWithMargin(el: HTMLElement): number {\n const computedStyle = getComputedStyle(el);\n\n return (\n el.offsetHeight +\n parseInt(computedStyle.marginTop, 10) +\n parseInt(computedStyle.marginBottom, 10)\n );\n}\n\nfunction createCustomEvent(name: any): CustomEvent<any> {\n const evt = document.createEvent('CustomEvent');\n\n evt.initCustomEvent(name, false, false, undefined);\n\n return evt;\n}\n\nexport class SkyViewkeeper {\n private setWidth: boolean;\n\n private id: string;\n\n private el: HTMLElement;\n\n private boundaryEl: HTMLElement;\n\n private verticalOffset: number;\n\n private verticalOffsetEl: HTMLElement;\n\n private set viewportMarginTop(margin: number) {\n this._viewportMarginTop = margin;\n }\n\n private get viewportMarginTop(): number {\n if (this.scrollableHost) {\n return 0;\n } else {\n return this._viewportMarginTop;\n }\n }\n\n private isDestroyed: boolean;\n\n private currentElFixedTop: number;\n\n private currentElFixedLeft: number;\n\n private currentElFixedWidth: number;\n\n private scrollableHost: HTMLElement;\n\n private syncElPositionHandler: () => void;\n\n private _viewportMarginTop: number;\n\n constructor(options: SkyViewkeeperOptions) {\n options = options || /* istanbul ignore next */ {};\n\n this.setWidth = options.setWidth;\n this.id = nextId();\n this.el = options.el;\n this.boundaryEl = options.boundaryEl;\n this.scrollableHost = options.scrollableHost;\n this.verticalOffset = options.verticalOffset || 0;\n this.verticalOffsetEl = options.verticalOffsetEl;\n this.viewportMarginTop = options.viewportMarginTop || 0;\n\n this.syncElPositionHandler = () => this.syncElPosition();\n\n if (this.verticalOffsetEl) {\n this.verticalOffsetEl.addEventListener(\n EVT_AFTER_VIEWKEEPER_SYNC,\n this.syncElPositionHandler\n );\n }\n\n window.addEventListener('scroll', this.syncElPositionHandler, true);\n window.addEventListener('resize', this.syncElPositionHandler);\n window.addEventListener('orientationchange', this.syncElPositionHandler);\n\n ensureStyleEl();\n\n this.syncElPosition();\n }\n\n public syncElPosition(): void {\n const verticalOffset = this.calculateVerticalOffset();\n\n // When the element isn't visible, its size can't be calculated, so don't attempt syncing position in this case.\n if (this.el.offsetWidth === 0 && this.el.offsetHeight === 0) {\n return;\n }\n\n const boundaryInfo = this.getBoundaryInfo();\n const fixedStyles = this.getFixedStyles(boundaryInfo, verticalOffset);\n\n const doFixEl = this.shouldFixEl(boundaryInfo, verticalOffset);\n\n if (this.needsUpdating(doFixEl, fixedStyles)) {\n if (doFixEl) {\n this.fixEl(boundaryInfo, fixedStyles);\n } else {\n this.unfixEl();\n }\n }\n\n const evt = createCustomEvent(EVT_AFTER_VIEWKEEPER_SYNC);\n\n this.el.dispatchEvent(evt);\n }\n\n public destroy(): void {\n if (!this.isDestroyed) {\n window.removeEventListener('scroll', this.syncElPositionHandler, true);\n window.removeEventListener('resize', this.syncElPositionHandler);\n window.removeEventListener(\n 'orientationchange',\n this.syncElPositionHandler\n );\n\n this.unfixEl();\n\n if (this.verticalOffsetEl) {\n this.verticalOffsetEl.removeEventListener(\n EVT_AFTER_VIEWKEEPER_SYNC,\n this.syncElPositionHandler\n );\n }\n\n this.el = this.boundaryEl = this.verticalOffsetEl = undefined;\n\n this.isDestroyed = true;\n }\n }\n\n private getSpacerId(): string {\n return this.id + '-spacer';\n }\n\n private unfixEl(): void {\n const spacerEl = document.getElementById(this.getSpacerId());\n\n if (spacerEl) {\n spacerEl.parentElement.removeChild(spacerEl);\n }\n\n this.el.classList.remove(CLS_VIEWKEEPER_FIXED);\n\n this.currentElFixedLeft =\n this.currentElFixedTop =\n this.currentElFixedWidth =\n undefined;\n\n let width: string;\n\n if (this.setWidth) {\n width = 'auto';\n }\n\n setElPosition(this.el, '', '', width, '');\n }\n\n private calculateVerticalOffset(): number {\n let offset = this.verticalOffset;\n\n if (this.verticalOffsetEl) {\n const verticalOffsetElTopStyle = this.verticalOffsetEl.style.top;\n const verticalOffsetElTop = parseInt(verticalOffsetElTopStyle, 10) || 0;\n\n offset += this.verticalOffsetEl.offsetHeight + verticalOffsetElTop;\n } else if (this.scrollableHost) {\n offset += this.scrollableHost.getBoundingClientRect().top;\n }\n\n return offset;\n }\n\n private shouldFixEl(\n boundaryInfo: SkyViewkeeperBoundaryInfo,\n verticalOffset: number\n ): boolean {\n let anchorTop: number;\n let doFixEl: boolean;\n\n if (boundaryInfo.spacerEl) {\n anchorTop = getOffset(boundaryInfo.spacerEl, this.scrollableHost).top;\n } else {\n anchorTop = getOffset(this.el, this.scrollableHost).top;\n }\n\n doFixEl =\n boundaryInfo.scrollTop + verticalOffset + this.viewportMarginTop >\n anchorTop;\n\n return doFixEl;\n }\n\n private getFixedStyles(\n boundaryInfo: SkyViewkeeperBoundaryInfo,\n verticalOffset: number\n ): SkyViewkeeperFixedStyles {\n let elFixedTop: number;\n\n // If the element needs to be fixed, this will calculate its position. The position\n // will be 0 (fully visible) unless the user is scrolling the boundary out of view.\n // In that case, the element should begin to scroll out of view with the\n // rest of the boundary by setting its top position to a negative value.\n elFixedTop = Math.min(\n boundaryInfo.boundaryBottom -\n boundaryInfo.elHeight -\n boundaryInfo.scrollTop,\n verticalOffset\n );\n\n const elFixedWidth = boundaryInfo.boundaryEl.getBoundingClientRect().width;\n const elFixedLeft =\n boundaryInfo.boundaryOffset.left - boundaryInfo.scrollLeft;\n\n return {\n elFixedLeft,\n elFixedTop,\n elFixedWidth,\n };\n }\n\n private needsUpdating(\n doFixEl: boolean,\n fixedStyles: SkyViewkeeperFixedStyles\n ): boolean {\n if (\n (doFixEl &&\n this.currentElFixedLeft === fixedStyles.elFixedLeft &&\n this.currentElFixedTop === fixedStyles.elFixedTop &&\n this.currentElFixedWidth === fixedStyles.elFixedWidth) ||\n (!doFixEl &&\n !(\n this.currentElFixedLeft !== undefined &&\n this.currentElFixedLeft !== null\n ))\n ) {\n // The element is either currently fixed and its position and width do not need\n // to change, or the element is not currently fixed and does not need to be fixed.\n // No changes are needed.\n return false;\n }\n\n return true;\n }\n\n private fixEl(\n boundaryInfo: SkyViewkeeperBoundaryInfo,\n fixedStyles: SkyViewkeeperFixedStyles\n ): void {\n const el = this.el;\n\n /* istanbul ignore else */\n /* sanity check */\n if (!boundaryInfo.spacerEl) {\n const spacerHeight = boundaryInfo.elHeight;\n\n const spacerEl = document.createElement('div');\n spacerEl.id = boundaryInfo.spacerId;\n spacerEl.style.height = px(spacerHeight);\n\n el.parentNode.insertBefore(spacerEl, el.nextSibling);\n }\n\n el.classList.add(CLS_VIEWKEEPER_FIXED);\n\n this.currentElFixedTop = fixedStyles.elFixedTop;\n this.currentElFixedLeft = fixedStyles.elFixedLeft;\n this.currentElFixedWidth = fixedStyles.elFixedWidth;\n\n let width: number;\n\n if (this.setWidth) {\n width = fixedStyles.elFixedWidth;\n }\n\n setElPosition(\n el,\n fixedStyles.elFixedLeft,\n fixedStyles.elFixedTop,\n width,\n this.viewportMarginTop\n );\n }\n\n private getBoundaryInfo(): SkyViewkeeperBoundaryInfo {\n const spacerId = this.getSpacerId();\n\n const spacerEl = document.getElementById(spacerId);\n\n const boundaryEl = this.boundaryEl;\n\n const boundaryOffset = getOffset(boundaryEl, this.scrollableHost);\n const boundaryTop = boundaryOffset.top;\n const boundaryBottom =\n boundaryTop + boundaryEl.getBoundingClientRect().height;\n\n const scrollLeft = this.scrollableHost\n ? this.scrollableHost.scrollLeft\n : document.documentElement.scrollLeft;\n const scrollTop = this.scrollableHost\n ? this.scrollableHost.scrollTop\n : document.documentElement.scrollTop;\n\n const elHeight = getHeightWithMargin(this.el);\n\n return {\n boundaryBottom,\n boundaryOffset,\n boundaryEl,\n elHeight,\n scrollLeft,\n scrollTop,\n spacerId,\n spacerEl,\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"viewkeeper.service.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/viewkeeper/viewkeeper.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;;;AAIrE;;GAEG;AAIH,MAAM,OAAO,oBAAoB;IAC/B,YAAgC,WAAsC;QAAtC,gBAAW,GAAX,WAAW,CAA2B;IAAG,CAAC;IAE1E;;;OAGG;IACI,MAAM,CAAC,OAA6B;QACzC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAE7D,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,EAAiB;QAC9B,EAAE,CAAC,OAAO,EAAE,CAAC;IACf,CAAC;;kHAnBU,oBAAoB;sHAApB,oBAAoB,cAFnB,MAAM;4FAEP,oBAAoB;kBAHhC,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;0BAEc,QAAQ","sourcesContent":["import { Injectable, Optional } from '@angular/core';\n\nimport { SkyViewkeeper } from './viewkeeper';\n\nimport { SkyViewkeeperHostOptions } from './viewkeeper-host-options';\n\nimport { SkyViewkeeperOptions } from './viewkeeper-options';\n\n/**\n * Provides methods for creating and destroying viewkeeper instances.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyViewkeeperService {\n constructor(@Optional() private hostOptions?: SkyViewkeeperHostOptions) {}\n\n /**\n *\n * @param options Creates a viewkeeper instance, applying host options where applicable.\n */\n public create(options: SkyViewkeeperOptions): SkyViewkeeper {\n options = Object.assign({}, this.hostOptions || {}, options);\n\n return new SkyViewkeeper(options);\n }\n\n /**\n * Destroys a viewkeeper instance.\n * @param vk Viewkeeper instance to destroy.\n */\n public destroy(vk: SkyViewkeeper): void {\n vk.destroy();\n }\n}\n"]}
1
+ {"version":3,"file":"viewkeeper.service.js","sourceRoot":"","sources":["../../../../../../../../libs/components/core/src/lib/modules/viewkeeper/viewkeeper.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;;;AAGrE;;GAEG;AAIH,MAAM,OAAO,oBAAoB;IAC/B,YAAgC,WAAsC;QAAtC,gBAAW,GAAX,WAAW,CAA2B;IAAG,CAAC;IAE1E;;;OAGG;IACI,MAAM,CAAC,OAA6B;QACzC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAE7D,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,EAAiB;QAC9B,EAAE,CAAC,OAAO,EAAE,CAAC;IACf,CAAC;;kHAnBU,oBAAoB;sHAApB,oBAAoB,cAFnB,MAAM;4FAEP,oBAAoB;kBAHhC,UAAU;mBAAC;oBACV,UAAU,EAAE,MAAM;iBACnB;;0BAEc,QAAQ","sourcesContent":["import { Injectable, Optional } from '@angular/core';\n\nimport { SkyViewkeeper } from './viewkeeper';\nimport { SkyViewkeeperHostOptions } from './viewkeeper-host-options';\nimport { SkyViewkeeperOptions } from './viewkeeper-options';\n\n/**\n * Provides methods for creating and destroying viewkeeper instances.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyViewkeeperService {\n constructor(@Optional() private hostOptions?: SkyViewkeeperHostOptions) {}\n\n /**\n *\n * @param options Creates a viewkeeper instance, applying host options where applicable.\n */\n public create(options: SkyViewkeeperOptions): SkyViewkeeper {\n options = Object.assign({}, this.hostOptions || {}, options);\n\n return new SkyViewkeeper(options);\n }\n\n /**\n * Destroys a viewkeeper instance.\n * @param vk Viewkeeper instance to destroy.\n */\n public destroy(vk: SkyViewkeeper): void {\n vk.destroy();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-media-query.service.js","sourceRoot":"","sources":["../../../../../../libs/components/core/testing/src/mock-media-query.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EACL,mBAAmB,EAEnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAgB,MAAM,MAAM,CAAC;;AAGrD,MAAM,OAAO,wBAAyB,SAAQ,oBAAoB;IAoBhE;QACE,KAAK,CACH,IAAI,MAAM,CAAC;YACT,oBAAoB,EAAE,IAAI;SAC3B,CAAC,CACH,CAAC;QAXG,uBAAkB,GAAG,IAAI,eAAe,CAC7C,IAAI,CAAC,OAAO,CACb,CAAC;QAEM,wBAAmB,GAAG,mBAAmB,CAAC,EAAE,CAAC;IAQrD,CAAC;IApBD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,IAAW,OAAO,CAAC,WAAgC;QACjD,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC;IACzC,CAAC;IAgBM,SAAS,CAAC,QAA+B;QAC9C,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;YACvC,IAAI,EAAE,CAAC,WAAgC,EAAE,EAAE;gBACzC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACxB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEM,IAAI,CAAC,IAAyB;QACnC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACzD,CAAC;IAEM,OAAO,KAAU,CAAC;;AAxCX,2BAAE,GAAG,oBAAoB,CAAC;AAC1B,2BAAE,GAAG,2CAA2C,CAAC;AACjD,2BAAE,GAAG,4CAA4C,CAAC;AAClD,2BAAE,GAAG,qBAAqB,CAAC;sHAJ9B,wBAAwB;0HAAxB,wBAAwB;4FAAxB,wBAAwB;kBADpC,UAAU","sourcesContent":["import { Injectable, NgZone } from '@angular/core';\n\nimport {\n SkyMediaBreakpoints,\n SkyMediaQueryListener,\n SkyMediaQueryService,\n} from '@skyux/core';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\n@Injectable()\nexport class MockSkyMediaQueryService extends SkyMediaQueryService {\n public static xs = '(max-width: 767px)';\n public static sm = '(min-width: 768px) and (max-width: 991px)';\n public static md = '(min-width: 992px) and (max-width: 1199px)';\n public static lg = '(min-width: 1200px)';\n\n public get current(): SkyMediaBreakpoints {\n return this._currentBreakpoints;\n }\n\n public set current(breakpoints: SkyMediaBreakpoints) {\n this._currentBreakpoints = breakpoints;\n }\n\n public currentMockSubject = new BehaviorSubject<SkyMediaBreakpoints>(\n this.current\n );\n\n private _currentBreakpoints = SkyMediaBreakpoints.md;\n\n constructor() {\n super(\n new NgZone({\n enableLongStackTrace: true,\n })\n );\n }\n\n public subscribe(listener: SkyMediaQueryListener): Subscription {\n return this.currentMockSubject.subscribe({\n next: (breakpoints: SkyMediaBreakpoints) => {\n listener(breakpoints);\n },\n });\n }\n\n public fire(args: SkyMediaBreakpoints): void {\n this._currentBreakpoints = args;\n this.currentMockSubject.next(this._currentBreakpoints);\n }\n\n public destroy(): void {}\n}\n"]}
1
+ {"version":3,"file":"mock-media-query.service.js","sourceRoot":"","sources":["../../../../../../libs/components/core/testing/src/mock-media-query.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,mBAAmB,EAEnB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAgB,MAAM,MAAM,CAAC;;AAGrD,MAAM,OAAO,wBAAyB,SAAQ,oBAAoB;IAoBhE;QACE,KAAK,CACH,IAAI,MAAM,CAAC;YACT,oBAAoB,EAAE,IAAI;SAC3B,CAAC,CACH,CAAC;QAXG,uBAAkB,GAAG,IAAI,eAAe,CAC7C,IAAI,CAAC,OAAO,CACb,CAAC;QAEM,wBAAmB,GAAG,mBAAmB,CAAC,EAAE,CAAC;IAQrD,CAAC;IApBD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,IAAW,OAAO,CAAC,WAAgC;QACjD,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC;IACzC,CAAC;IAgBM,SAAS,CAAC,QAA+B;QAC9C,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;YACvC,IAAI,EAAE,CAAC,WAAgC,EAAE,EAAE;gBACzC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACxB,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEM,IAAI,CAAC,IAAyB;QACnC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACzD,CAAC;IAEM,OAAO,KAAU,CAAC;;AAxCX,2BAAE,GAAG,oBAAoB,CAAC;AAC1B,2BAAE,GAAG,2CAA2C,CAAC;AACjD,2BAAE,GAAG,4CAA4C,CAAC;AAClD,2BAAE,GAAG,qBAAqB,CAAC;sHAJ9B,wBAAwB;0HAAxB,wBAAwB;4FAAxB,wBAAwB;kBADpC,UAAU","sourcesContent":["import { Injectable, NgZone } from '@angular/core';\nimport {\n SkyMediaBreakpoints,\n SkyMediaQueryListener,\n SkyMediaQueryService,\n} from '@skyux/core';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\n@Injectable()\nexport class MockSkyMediaQueryService extends SkyMediaQueryService {\n public static xs = '(max-width: 767px)';\n public static sm = '(min-width: 768px) and (max-width: 991px)';\n public static md = '(min-width: 992px) and (max-width: 1199px)';\n public static lg = '(min-width: 1200px)';\n\n public get current(): SkyMediaBreakpoints {\n return this._currentBreakpoints;\n }\n\n public set current(breakpoints: SkyMediaBreakpoints) {\n this._currentBreakpoints = breakpoints;\n }\n\n public currentMockSubject = new BehaviorSubject<SkyMediaBreakpoints>(\n this.current\n );\n\n private _currentBreakpoints = SkyMediaBreakpoints.md;\n\n constructor() {\n super(\n new NgZone({\n enableLongStackTrace: true,\n })\n );\n }\n\n public subscribe(listener: SkyMediaQueryListener): Subscription {\n return this.currentMockSubject.subscribe({\n next: (breakpoints: SkyMediaBreakpoints) => {\n listener(breakpoints);\n },\n });\n }\n\n public fire(args: SkyMediaBreakpoints): void {\n this._currentBreakpoints = args;\n this.currentMockSubject.next(this._currentBreakpoints);\n }\n\n public destroy(): void {}\n}\n"]}