{"version":3,"file":"ng-stalk-core-util.mjs","sources":["../../components/core/util/mag-util.ts","../../components/core/util/mag-constants.ts","../../components/core/util/mag-lang-utils.ts","../../components/core/util/mag-validators.ts","../../components/core/util/public-api.ts","../../components/core/util/ng-stalk-core-util.ts"],"sourcesContent":["/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { Data } from '@angular/router';\nimport { MediaBreakName } from 'ng-stalk/core/types';\nimport { Observable } from 'rxjs';\n\nconst mediaBreakNameAndIndex = {\n  xs: 1,\n  sm: 2,\n  md: 3,\n  lg: 4,\n  xl: 5,\n  xxl: 6\n};\n\nexport function magDotNotate(obj: object, target?: object, prefix?: string) {\n  (target = target || {}), (prefix = prefix || '');\n\n  if (!obj) {\n    return target;\n  }\n  if (!Object.keys(obj)) {\n    return target;\n  }\n  // @ts-ignore\n  Object.keys(obj).forEach(function (key) {\n    // @ts-ignore\n    if (typeof obj[key] === 'object') {\n      // @ts-ignore\n      magDotNotate(obj[key], target, prefix + key + '.');\n    } else {\n      // @ts-ignore\n      return (target[prefix + key] = obj[key]);\n    }\n  });\n\n  return target;\n}\n\nexport class MagUtil {\n  public static compareStrings(str1: string = '', str2: string = ''): number {\n    return str1.localeCompare(str2);\n  }\n\n  /**\n   * Generate a unique GUID\n   */\n  public static generateGUID(): string {\n    function S4(): string {\n      return Math.floor((Math.random() + 1) * 0x10000)\n        .toString(16)\n        .substring(1);\n    }\n\n    return S4() + S4();\n  }\n\n  public static walk(root: any, path: string): any | undefined {\n    const parts: string[] = path.split('.');\n    let parent = root;\n    for (let i = 0; i < parts.length; i += 1) {\n      if (typeof parent[parts[i]] === 'undefined') {\n        return undefined;\n      }\n      parent = parent[parts[i]];\n    }\n    return parent;\n  }\n\n  public static ns(parent: any, nsString: string): any {\n    const parts = nsString.split('.');\n    for (let i = 0; i < parts.length; i += 1) {\n      if (typeof parent[parts[i]] === 'undefined') {\n        parent[parts[i]] = {};\n      }\n      parent = parent[parts[i]];\n    }\n    return parent;\n  }\n\n  public static dotNotate(obj: object, target?: object, prefix?: string): object {\n    return magDotNotate(obj, target, prefix);\n  }\n\n  public static parseRouteParams(data: Observable<Data>): any {\n    const inst = {};\n    if (data) {\n      if (data.forEach) {\n        data.forEach((data: object) => {\n          for (const propName in data) {\n            // @ts-ignore\n            inst[propName] = data[propName];\n          }\n        });\n      } else {\n        return data;\n      }\n    }\n\n    return inst;\n  }\n\n  public static isGteMedia(currentMediaBreakName: MediaBreakName, than: MediaBreakName): boolean {\n    const currentIndex = mediaBreakNameAndIndex[currentMediaBreakName];\n    const thanIndex = mediaBreakNameAndIndex[than];\n    return currentIndex >= thanIndex;\n  }\n\n  public static isGtMedia(currentMediaBreakName: MediaBreakName, than: MediaBreakName): boolean {\n    const currentIndex = mediaBreakNameAndIndex[currentMediaBreakName];\n    const thanIndex = mediaBreakNameAndIndex[than];\n    return currentIndex > thanIndex;\n  }\n\n  public static isLteMedia(currentMediaBreakName: MediaBreakName, than: MediaBreakName): boolean {\n    const currentIndex = mediaBreakNameAndIndex[currentMediaBreakName];\n    const thanIndex = mediaBreakNameAndIndex[than];\n    return currentIndex <= thanIndex;\n  }\n\n  public static isLtMedia(currentMediaBreakName: MediaBreakName, than: MediaBreakName): boolean {\n    const currentIndex = mediaBreakNameAndIndex[currentMediaBreakName];\n    const thanIndex = mediaBreakNameAndIndex[than];\n    return currentIndex < thanIndex;\n  }\n\n  public static isEqMedia(currentMediaBreakName: MediaBreakName, than: MediaBreakName): boolean {\n    const currentIndex = mediaBreakNameAndIndex[currentMediaBreakName];\n    const thanIndex = mediaBreakNameAndIndex[than];\n    return currentIndex === thanIndex;\n  }\n\n  public static disableFields(formGroup: FormGroup, fieldNames: string[]): void {\n    if (!formGroup || !fieldNames) {\n      return;\n    }\n    for (const fieldName of fieldNames) {\n      if (formGroup.controls[fieldName]) {\n        formGroup.controls[fieldName].disable({\n          onlySelf: true,\n          emitEvent: false\n        });\n      }\n    }\n  }\n\n  public static enableFields(formGroup: FormGroup, fieldNames: string[]): void {\n    if (!formGroup || !fieldNames) {\n      return;\n    }\n\n    for (const fieldName of fieldNames) {\n      if (formGroup.controls[fieldName]) {\n        formGroup.controls[fieldName].enable({\n          onlySelf: true,\n          emitEvent: false\n        });\n      }\n    }\n  }\n\n  public static hasRequiredField(abstractControl: AbstractControl): boolean {\n    if (abstractControl === undefined) {\n      throw new Error('control is undefined');\n    }\n    if (abstractControl.validator) {\n      const validator = abstractControl.validator({} as AbstractControl);\n\n      if (validator) {\n        // Angular 공통 required validator\n        if (validator.required) {\n          return true;\n        }\n        // MagI18nEditField2Validators 용 required validator\n        if (validator.singleRequired || validator.allRequired) {\n          return true;\n        }\n      }\n    }\n    // @ts-ignore\n    if (abstractControl.controls) {\n      // @ts-ignore\n      for (const controlName in abstractControl.controls) {\n        // @ts-ignore\n        if (abstractControl.controls[controlName]) {\n          // @ts-ignore\n          if (hasRequiredField(abstractControl.controls[controlName])) {\n            return true;\n          }\n        }\n      }\n    }\n    return false;\n  }\n\n  public static hashFnv32a(str: string, asString: boolean = true, seed: number = 0x811c9dc5): string | number {\n    /*jshint bitwise:false */\n    let i, l;\n    let hval: number = seed === undefined ? 0x811c9dc5 : seed;\n\n    for (i = 0, l = str.length; i < l; i++) {\n      // tslint:disable-next-line:no-bitwise\n      hval ^= str.charCodeAt(i);\n      // tslint:disable-next-line:no-bitwise\n      hval += (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + (hval << 24);\n    }\n    if (asString) {\n      // Convert to 8 digit hex string\n      // tslint:disable-next-line:no-bitwise\n      return ('0000000' + (hval >>> 0).toString(16)).substr(-8);\n    }\n    // tslint:disable-next-line:no-bitwise\n    return hval >>> 0;\n  }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nimport { MediaBreakName } from 'ng-stalk/core/types';\nimport { MagUtil } from './mag-util';\n\nexport class MagConstants {\n  /*\n   미디어 쿼리 Rules: https://getbootstrap.com/docs/4.0/layout/overview/#responsive-breakpoints\n\n   // Extra small devices (portrait phones, less than 576px)\n   @media (max-width: 575.98px) { ... }\n\n   // Small devices (landscape phones, 576px and up)\n   @media (min-width: 576px) and (max-width: 767.98px) { ... }\n\n   // Medium devices (tablets, 768px and up)\n   @media (min-width: 768px) and (max-width: 991.98px) { ... }\n\n   // Large devices (desktops, 992px and up)\n   @media (min-width: 992px) and (max-width: 1199.98px) { ... }\n\n   // Extra large devices (large desktops, 1200px and up)\n   @media (min-width: 1200px) { ... }\n   */\n\n  public static modalWidthXs(): string {\n    return '576px';\n  }\n\n  public static modalWidthSm(): string {\n    return '768px';\n  }\n\n  public static modalWidthMd(): string {\n    return '992px';\n  }\n\n  public static modalWidthLg(): string {\n    return '1200px';\n  }\n\n  public static modalWidthFullScreen(): string {\n    return '100vw';\n  }\n\n  public static modalWidthSmart(mediaBeakPointName: MediaBreakName, maxMediaBreakPointName?: MediaBreakName): string {\n    let selectedMediaBreakPointName = mediaBeakPointName;\n    if (maxMediaBreakPointName) {\n      if (MagUtil.isGteMedia(mediaBeakPointName, maxMediaBreakPointName)) {\n        selectedMediaBreakPointName = maxMediaBreakPointName;\n      }\n    }\n\n    if (selectedMediaBreakPointName === 'xs') {\n      // Extra small devices (portrait phones, less than 576px)\n      return this.modalWidthFullScreen();\n    } else if (selectedMediaBreakPointName === 'sm') {\n      // Small devices (landscape phones, 576px and up)\n      return this.modalWidthFullScreen();\n    } else if (selectedMediaBreakPointName === 'md') {\n      // Medium devices (tablets, 768px and up)\n      return this.modalWidthSm();\n    } else if (selectedMediaBreakPointName === 'lg') {\n      // Large devices (desktops, 992px and up)\n      return this.modalWidthSm();\n    } else if (selectedMediaBreakPointName === 'xl' || selectedMediaBreakPointName === 'xxl') {\n      // Extra large devices (large desktops, 1200px and up)\n      return this.modalWidthSm();\n    } else {\n      return '80%';\n    }\n  }\n\n  public static modalWidthSmartForBig(mediaBeakPointName: MediaBreakName, maxMediaBreakPointName?: MediaBreakName): string {\n    let selectedMediaBreakPointName = mediaBeakPointName;\n    if (maxMediaBreakPointName) {\n      if (MagUtil.isGteMedia(mediaBeakPointName, maxMediaBreakPointName)) {\n        selectedMediaBreakPointName = maxMediaBreakPointName;\n      }\n    }\n\n    if (selectedMediaBreakPointName === 'xs') {\n      // Extra small devices (portrait phones, less than 576px)\n      return this.modalWidthFullScreen();\n    } else if (selectedMediaBreakPointName === 'sm') {\n      // Small devices (landscape phones, 576px and up)\n      return this.modalWidthFullScreen();\n    } else if (selectedMediaBreakPointName === 'md') {\n      // Medium devices (tablets, 768px and up)\n      return this.modalWidthSm();\n    } else if (selectedMediaBreakPointName === 'lg') {\n      // Large devices (desktops, 992px and up)\n      return this.modalWidthMd();\n    } else if (selectedMediaBreakPointName === 'xl' || selectedMediaBreakPointName === 'xxl') {\n      // Extra large devices (large desktops, 1200px and up)\n      return this.modalWidthLg();\n    } else {\n      return '80%';\n    }\n  }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\n// tslint:disable-next-line:no-any\nexport type CollectionPredicate = (item?: any, index?: number, collection?: any[]) => boolean;\n\n/**\n * Determines if two objects or two values are equivalent.\n *\n * Two objects or values are considered equivalent if at least one of the following is true:\n *\n * * Both objects or values pass `===` comparison.\n * * Both objects or values are of the same type and all of their properties are equal by\n *   comparing them with `equals`.\n *\n * @param o1 Object or value to compare.\n * @param o2 Object or value to compare.\n * @returns true if arguments are equal.\n */\nexport function equals(o1: any, o2: any): boolean {\n  if (o1 === o2) {\n    return true;\n  }\n  if (o1 === null || o2 === null) {\n    return false;\n  }\n  if (o1 !== o1 && o2 !== o2) {\n    return true;\n  } // NaN === NaN\n  let t1 = typeof o1, t2 = typeof o2, length: number, key: any, keySet: any;\n  if (t1 == t2 && t1 == 'object') {\n    if (Array.isArray(o1)) {\n      if (!Array.isArray(o2)) return false;\n      if ((length = o1.length) == o2.length) {\n        for (key = 0; key < length; key++) {\n          if (!equals(o1[key], o2[key])) return false;\n        }\n        return true;\n      }\n    } else {\n      if (Array.isArray(o2)) {\n        return false;\n      }\n      keySet = Object.create(null);\n      for (key in o1) {\n        if (!equals(o1[key], o2[key])) {\n          return false;\n        }\n        keySet[key] = true;\n      }\n      for (key in o2) {\n        if (!(key in keySet) && typeof o2[key] !== 'undefined') {\n          return false;\n        }\n      }\n      return true;\n    }\n  }\n  return false;\n}\n/* tslint:enable */\n\n// tslint:disable-next-line:no-any\nexport function isDefined(value: any): boolean {\n  return typeof value !== 'undefined' && value !== null;\n}\n\n// tslint:disable-next-line:no-any\nexport function isUndefined(value: any): value is undefined {\n  return typeof value === 'undefined';\n}\n\n// tslint:disable-next-line:no-any\nexport function isNull(value: any): value is null {\n  return value === null;\n}\n\n// tslint:disable-next-line:no-any\nexport function isNumber(value: any): value is number {\n  return typeof value === 'number';\n}\n\n// tslint:disable-next-line:no-any\nexport function isNumberFinite(value: any): value is number {\n  return isNumber(value) && isFinite(value);\n}\n\n// Not strict positive\nexport function isPositive(value: number): boolean {\n  return value >= 0;\n}\n\nexport function isInteger(value: number): boolean {\n  // No rest, is an integer\n  return value % 1 === 0;\n}\n\n// tslint:disable-next-line:no-any\nexport function isNil(value: any): value is null | undefined {\n  return value === null || typeof value === 'undefined';\n}\n\n// tslint:disable-next-line:no-any\nexport function isString(value: any): value is string {\n  return typeof value === 'string';\n}\n\n// tslint:disable-next-line:no-any\nexport function isObject(value: any): boolean {\n  return value !== null && typeof value === 'object';\n}\n\n// tslint:disable-next-line:no-any\nexport function isArray(value: any): boolean {\n  return Array.isArray(value);\n}\n\n// tslint:disable-next-line:no-any\nexport function isFunction(value: any): boolean {\n  return typeof value === 'function';\n}\n\nexport function toDecimal(value: number, decimal: number): number {\n  return Math.round(value * Math.pow(10, decimal)) / Math.pow(10, decimal);\n}\n\nexport function upperFirst(value: string): string {\n  return value.slice(0, 1).toUpperCase() + value.slice(1);\n}\n\nexport function createRound(method: string): Function {\n  // <any>Math to suppress error\n  const func: any = (<any>Math)[method];\n  return function(value: number, precision: number = 0) {\n    if (typeof value === 'string') {\n      throw new TypeError('Rounding method needs a number');\n    }\n\n    if (typeof precision !== 'number' || isNaN(precision)) {\n      precision = 0;\n    }\n\n    if (precision) {\n      let pair = `${value}e`.split('e');\n      const val = func(`${pair[0]}e` + (+pair[1] + precision));\n\n      pair = `${val}e`.split('e');\n      return +(pair[0] + 'e' + (+pair[1] - precision));\n    }\n\n    return func(value);\n  };\n}\n\nexport function leftPad(str: string, len: number = 0, ch: any = ' ') {\n  str = String(str);\n  ch = toString(ch);\n  let i = -1;\n  const length = len - str.length;\n\n  while (++i < length && str.length + ch.length <= len) {\n    str = ch + str;\n  }\n\n  return str;\n}\n\nexport function rightPad(str: string, len: number = 0, ch: any = ' ') {\n  str = String(str);\n  ch = toString(ch);\n\n  let i = -1;\n  const length = len - str.length;\n\n  while (++i < length && str.length + ch.length <= len) {\n    str += ch;\n  }\n\n  return str;\n}\n\nexport function toString(value: number | string) {\n  return `${value}`;\n}\n\nexport function pad(str: string, len: number = 0, ch: any = ' '): string {\n  str = String(str);\n  ch = toString(ch);\n  let i = -1;\n  const length = len - str.length;\n\n  let left = true;\n  while (++i < length) {\n    const l = str.length + ch.length <= len ? str.length + ch.length : str.length + 1;\n\n    if (left) {\n      str = leftPad(str, l, ch);\n    } else {\n      str = rightPad(str, l, ch);\n    }\n\n    left = !left;\n  }\n\n  return str;\n}\n\nexport function flatten(input: any[], index: number = 0): any[] {\n  if (index >= input.length) {\n    return input;\n  }\n\n  if (isArray(input[index])) {\n    return flatten(input.slice(0, index).concat(input[index], input.slice(index + 1)), index);\n  }\n\n  return flatten(input, index + 1);\n}\n\nexport function getProperty(value: { [key: string]: any }, key: string): any {\n  if (isNil(value) || !isObject(value)) {\n    return undefined;\n  }\n\n  const keys: string[] = key.split('.');\n  let result: any = value[keys.shift()!];\n\n  // tslint:disable-next-line:no-shadowed-variable\n  for (const key of keys) {\n    if (isNil(result) || !isObject(result)) {\n      return undefined;\n    }\n\n    result = result[key];\n  }\n\n  return result;\n}\n\nexport function sum(input: Array<number>, initial = 0): number {\n  return input.reduce((previous: number, current: number) => previous + current, initial);\n}\n\n// http://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array-in-javascript\nexport function shuffle(input: any): any {\n  if (!isArray(input)) {\n    return input;\n  }\n\n  const copy = [...input];\n\n  for (let i = copy.length; i; --i) {\n    const j = Math.floor(Math.random() * i);\n    const x = copy[i - 1];\n    copy[i - 1] = copy[j];\n    copy[j] = x;\n  }\n\n  return copy;\n}\n\nexport function deepIndexOf(collection: any[], value: any) {\n  let index = -1;\n  const length = collection.length;\n\n  while (++index < length) {\n    if (deepEqual(value, collection[index])) {\n      return index;\n    }\n  }\n\n  return -1;\n}\n\nexport function deepEqual(a: any, b: any) {\n  if (a === b) {\n    return true;\n  }\n\n  if (!(typeof a === 'object' && typeof b === 'object')) {\n    return a === b;\n  }\n\n  const keysA = Object.keys(a);\n  const keysB = Object.keys(b);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  // Test for A's keys different from B.\n  var hasOwn = Object.prototype.hasOwnProperty;\n  for (let i = 0; i < keysA.length; i++) {\n    const key = keysA[i];\n    if (!hasOwn.call(b, keysA[i]) || !deepEqual(a[key], b[key])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nexport function isDeepObject(object: any) {\n  return object.__isDeepObject__;\n}\n\nexport function wrapDeep(object: any) {\n  return new DeepWrapper(object);\n}\n\nexport function unwrapDeep(object: any) {\n  if (isDeepObject(object)) {\n    return object.data;\n  }\n\n  return object;\n}\n\nexport class DeepWrapper {\n  public __isDeepObject__: boolean = true;\n\n  constructor(public data: any) {}\n}\n\nexport function count(input: any): any {\n  if (!isArray(input) && !isObject(input) && !isString(input)) {\n    return input;\n  }\n\n  if (isObject(input)) {\n    return Object.keys(input).map(value => input[value]).length;\n  }\n\n  return input.length;\n}\n\nexport function empty(input: any): any {\n  if (!isArray(input)) {\n    return input;\n  }\n\n  return input.length === 0;\n}\n\nexport function every(input: any, predicate: CollectionPredicate) {\n  if (!isArray(input) || !predicate) {\n    return input;\n  }\n\n  let result = true;\n  let i = -1;\n\n  while (++i < input.length && result) {\n    result = predicate(input[i], i, input);\n  }\n\n  return result;\n}\n\n// tslint:disable-next-line:no-any\nexport function takeUntil(input: any[], predicate: CollectionPredicate): any {\n  let i = -1;\n  const result: any = [];\n  while (++i < input.length && !predicate(input[i], i, input)) {\n    result[i] = input[i];\n  }\n\n  return result;\n}\n\n// tslint:disable-next-line:no-any\nexport function takeWhile(input: any[], predicate: CollectionPredicate): any {\n  // @ts-ignore\n  return takeUntil(input, (item: any, index: number, collection: any[]) => !predicate(item, index, collection));\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\n// import {FormControl, FormGroup, ValidatorFn} from '@angular/forms';\n\n// TODO ng-stalk 살려야함\n// import {MagI18nEditField2Validators} from '../components2/mag-i18n-edit-field2/mag-i18n-edit-field2-validators';\n\nexport class MagValidators {\n  // static valid(): ValidatorFn {\n  //   return this.validChildrenControlsForFormGroup;\n  // }\n  // TODO ng-stalk 살려야함\n  // public static i18nAllRequired(): ValidatorFn {\n  // return MagI18nEditField2Validators.allRequired;\n  // }\n  // TODO ng-stalk 살려야함\n  // public static i18nSingleRequired(): ValidatorFn {\n  //   return MagI18nEditField2Validators.singleRequired;\n  // }\n  // public static validChildrenControlsForFormGroup(formGroup: FormGroup): any {\n  //   const error = {};\n  //\n  //   for (const key in formGroup.controls) {\n  //     if (formGroup.controls.hasOwnProperty(key)) {\n  //       const control: FormControl = <FormControl>formGroup.controls[key];\n  //       if (!control.valid) {\n  //         if (!control.disabled) {\n  //           error[key] = control.errors;\n  //         }\n  //       }\n  //     }\n  //   }\n  //\n  //   return error;\n  // }\n}\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\nexport * from './mag-constants';\nexport * from './mag-lang-utils';\nexport * from './mag-util';\nexport * from './mag-validators';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}