{"version":3,"file":"ngcore-core.mjs","sources":["../../../projects/core/src/lib/common/logging/dev-logger.ts","../../../projects/core/src/lib/common/core/week-day.ts","../../../projects/core/src/lib/common/core/calendar-month.ts","../../../projects/core/src/lib/common/core/color-hash.ts","../../../projects/core/src/lib/common/core/rgb-color.ts","../../../projects/core/src/lib/common/core/grayscale-color.ts","../../../projects/core/src/lib/common/core/color-palette.ts","../../../projects/core/src/lib/common/core/color-tag.ts","../../../projects/core/src/lib/common/core/date-range.ts","../../../projects/core/src/lib/common/core/hour-range.ts","../../../projects/core/src/lib/common/core/url-util.ts","../../../projects/core/src/lib/common/util/rgb-color-util.ts","../../../projects/core/src/lib/common/util/color-hash-util.ts","../../../projects/core/src/lib/common/util/color-tag-util.ts","../../../projects/core/src/lib/common/util/date-time-util.ts","../../../projects/core/src/lib/common/util/date-id-util.ts","../../../projects/core/src/lib/common/util/random-id-util.ts","../../../projects/core/src/lib/common/util/random-number-util.ts","../../../projects/core/src/lib/common/util/unique-id-util.ts","../../../projects/core/src/lib/common/config/app-config.ts","../../../projects/core/src/lib/common/config/custom-config.ts","../../../projects/core/src/lib/common/config/config-factory.ts","../../../projects/core/src/lib/services/browser-window.service.ts","../../../projects/core/src/lib/services/local-storage.service.ts","../../../projects/core/src/lib/components/common-date-year.ts","../../../projects/core/src/lib/core.module.ts","../../../projects/core/src/ngcore-core.ts"],"sourcesContent":["import { isDevMode } from '@angular/core';\n\n\n/**\n * console.log() wrapper.\n * Logging is enabled in dev mode only.\n */\nexport namespace DevLogger {\n\n  /**\n   * Returns true if logging is enabled.\n   *   (For now, DevLogger logging is enabled if the app is running in dev mode.)\n   */\n  export function isLoggable(): boolean {\n    return isDevMode();\n  }\n\n  /**\n   * Logs the message if the app is running in dev mode.\n   * Uses console.log().\n   * \n   * @param message log message string or object.\n   */\n  export function log(message: string);\n  export function log(message: string, sub1: (any | null));\n  export function log(message: string, sub1: (any | null), sub2: (any | null));\n  export function log(obj0: any);\n  export function log(obj0: any, obj1: (any | null));\n  export function log(obj0: any, obj1: (any | null), obj2: (any | null));\n  export function log(arg0: (any | string), arg1: (any | null) = null, arg2: (any | null) = null) {\n    if (isDevMode()) {\n      if (typeof arg0 === 'string') {\n        let msg = arg0 as string;\n        if (arg2 != null) {\n          console.log(msg, arg1, arg2);\n        } else if (arg1 != null) {\n          console.log(msg, arg1);\n        } else {\n          console.log(msg);\n        }\n      } else {\n        if (typeof arg0 === 'object') {\n          let message = '';\n          try {\n            if (arg0) {\n              message = JSON.parse(JSON.stringify(arg0));\n              if (arg1) {\n                message += ' ' + JSON.parse(JSON.stringify(arg1));\n                if (arg2) {\n                  message += ' ' + JSON.parse(JSON.stringify(arg2));\n                }\n              }\n            }\n          } catch (ex) { /* ignore */ }\n          console.log(message);\n        } else {\n          console.log(arg0, arg1, arg2);\n        }\n      }\n    }\n  }\n\n  /**\n   * Logs the message if the app is running in dev mode.\n   * Uses console.info().\n   * \n   * @param message info message string or object.\n   */\n  export function info(message: string);\n  export function info(message: string, sub1: (any | null));\n  export function info(message: string, sub1: (any | null), sub2: (any | null));\n  export function info(obj0: any);\n  export function info(obj0: any, obj1: (any | null));\n  export function info(obj0: any, obj1: (any | null), obj2: (any | null));\n  export function info(arg0: (any | string), arg1: (any | null) = null, arg2: (any | null) = null) {\n    if (isDevMode()) {\n      if (typeof arg0 === 'string') {\n        let msg = arg0 as string;\n        if (arg2 != null) {\n          console.info(msg, arg1, arg2);\n        } else if (arg1 != null) {\n          console.info(msg, arg1);\n        } else {\n          console.info(msg);\n        }\n      } else {\n        if (typeof arg0 === 'object') {\n          let message = '';\n          try {\n            if (arg0) {\n              message = JSON.parse(JSON.stringify(arg0));\n              if (arg1) {\n                message += ' ' + JSON.parse(JSON.stringify(arg1));\n                if (arg2) {\n                  message += ' ' + JSON.parse(JSON.stringify(arg2));\n                }\n              }\n            }\n          } catch (ex) { /* ignore */ }\n          console.info(message);\n        } else {\n          console.info(arg0, arg1, arg2);\n        }\n      }\n    }\n  }\n\n  /**\n   * Logs the warning message using console.warn().\n   * \n   * @param message warn message string or object.\n   */\n  export function warn(message: string);\n  export function warn(message: string, sub1: (any | null));\n  export function warn(message: string, sub1: (any | null), sub2: (any | null));\n  export function warn(obj0: any);\n  export function warn(obj0: any, obj1: (any | null));\n  export function warn(obj0: any, obj1: (any | null), obj2: (any | null));\n  export function warn(arg0: (any | string), arg1: (any | null) = null, arg2: (any | null) = null) {\n    // if (isDevMode()) {\n      if (typeof arg0 === 'string') {\n        let msg = arg0 as string;\n        if (arg2 != null) {\n          console.warn(msg, arg1, arg2);\n        } else if (arg1 != null) {\n          console.warn(msg, arg1);\n        } else {\n          console.warn(msg);\n        }\n      } else {\n        if (typeof arg0 === 'object') {\n          let message = '';\n          try {\n            if (arg0) {\n              message = JSON.parse(JSON.stringify(arg0));\n              if (arg1) {\n                message += ' ' + JSON.parse(JSON.stringify(arg1));\n                if (arg2) {\n                  message += ' ' + JSON.parse(JSON.stringify(arg2));\n                }\n              }\n            }\n          } catch (ex) { /* ignore */ }\n          console.warn(message);\n        } else {\n          console.warn(arg0, arg1, arg2);\n        }\n      }\n    // }\n  }\n\n  /**\n   * Logs the error message using console.error().\n   * \n   * @param message error message string or object.\n   */\n  export function error(message: string);\n  export function error(message: string, sub1: (any | null));\n  export function error(message: string, sub1: (any | null), sub2: (any | null));\n  export function error(obj0: any);\n  export function error(obj0: any, obj1: (any | null));\n  export function error(obj0: any, obj1: (any | null), obj2: (any | null));\n  export function error(arg0: (any | string), arg1: (any | null) = null, arg2: (any | null) = null) {\n    // if (isDevMode()) {\n      if (typeof arg0 === 'string') {\n        let msg = arg0 as string;\n        if (arg2 != null) {\n          console.error(msg, arg1, arg2);\n        } else if (arg1 != null) {\n          console.error(msg, arg1);\n        } else {\n          console.error(msg);\n        }\n      } else {\n        if (typeof arg0 === 'object') {\n          let message = '';\n          try {\n            if (arg0) {\n              message = JSON.parse(JSON.stringify(arg0));\n              if (arg1) {\n                message += ' ' + JSON.parse(JSON.stringify(arg1));\n                if (arg2) {\n                  message += ' ' + JSON.parse(JSON.stringify(arg2));\n                }\n              }\n            }\n          } catch (ex) { /* ignore */ }\n          console.error(message);\n        } else {\n          console.error(arg0, arg1, arg2);\n        }\n      }\n    // }\n  }\n\n}\n","/**\n * Weekdays, 1 (monday) through 7 (sunday).\n */\nexport enum WeekDay {\n  unknown = 0,\n  monday = 1,\n  tuesday = 2,\n  wednesday = 3,\n  thursday = 4,\n  friday = 5,\n  saturday = 6,\n  sunday = 7\n}\n","/**\n * Months: January (1) through December (12).\n * (This is useful in EN locale only.)\n */\nexport enum CalendarMonth {\n  unknown = 0,\n  january = 1,\n  february = 2,\n  march = 3,\n  april = 4,\n  may = 5,\n  june = 6,\n  july = 7,\n  august = 8,\n  september = 9,\n  october = 10,\n  november = 11,\n  december = 12\n}\n","import { DevLogger as dl } from '../logging/dev-logger'; import isDL = dl.isLoggable;\nimport { RGBColor } from './rgb-color';\n\n\n/**\n * Color hash is a list of 9 colors (arranged in a square).\n */\nexport class ColorHash {\n\n  // TBD:\n  // Color management should be really done in Lab Delta E, not in RGB....\n\n  // 9 RGB numbers [0, 255]\n  constructor(public colors: (RGBColor[] | null) = null) {\n    // if (this.colors) {\n    //   if(isDL()) dl.log('>>> ColorHash.colors = ' + this.colors.toString());\n    // } else {\n    //   if(isDL()) dl.log('>>> ColorHash.colors = null.');\n    // }\n  }\n\n\n  // TBD.\n  // equals(obj: ColorHash): boolean {\n  //   return true;\n  // }\n\n  // clone?\n  \n\n  // temporary\n  toString(): string {\n    let str = '%';\n    if (this.colors) {\n      // in vs of.\n      for (let c of this.colors) {\n        str += c.toString();\n      }\n      // let len = this.colors.length;\n      // for (let i = 0; i < len; i++) {\n      //   let c = this.colors[i];\n      //   if(c) {\n      //      str += c.toString();\n      //   }\n      // }\n    }\n    str += '%';\n    return str;\n  }\n\n}\n","/**\n * Array of 3 numbers (color components).\n */\nexport class RGBColor {\n\n  public static readonly WHITE : RGBColor = new RGBColor(255, 255, 255);\n  public static readonly BLACK : RGBColor = new RGBColor(0, 0, 0);\n\n  // 3 numbers [0, 255]: R, G, B.\n  // constructor(public R: number = 0, public G: number = 0, public B: number = 0) {\n  constructor(public R: number, public G: number, public B: number) {\n  }\n\n\n  equals(obj: RGBColor): boolean {\n    if(!obj)  {\n      return false;\n    }\n    if(this.R === obj.R && this.G === obj.G && this.B === obj.B) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  // Format: \"#ffggbb\".\n  toString(): string {\n    // return '(' + this.R + ',' + this.G + ',' + this.B + ')';\n\n    let r = this.R.toString(16);\n    let g = this.G.toString(16);\n    let b = this.B.toString(16);\n\n    let str = '#';\n    str += (r.length < 2) ? '0' + r : r;\n    str += (g.length < 2) ? '0' + g : g;\n    str += (b.length < 2) ? '0' + b : b;\n    // str += 'ff';  // alpha.\n\n    return str;\n  }\n\n}\n","import { DevLogger as dl } from '../logging/dev-logger'; import isDL = dl.isLoggable;\nimport { RGBColor } from './rgb-color';\n\n\n/**\n * GrayscaleColor is grayscale-converted color, not a grayscale RGBColor.\n * (e.g., RGBColor(0,0,0) is grayscale, but not GrayscaleColor in our definition.)\n */\n// \n// \nexport class GrayscaleColor extends RGBColor {\n  \n  // Note that the ctor takes the color RGB components not the grayscale-converted RGB.\n  // 3 numbers [0, 255]: R, G, B in color space.\n  constructor(private colorR: number, private colorG: number, private colorB: number, doNotConvert = false) {\n    // super();\n    super(colorR, colorG, colorB);\n    if(doNotConvert === false) {\n      let Y = this.getLuminaceComponent();\n      this.R = Y;\n      this.G = Y;\n      this.B = Y;\n    }\n    // if(isDL()) dl.log(\"GrayscaleColor() R,G,B = \" + this.R + \",\" + this.G + \",\" + this.B);\n  }\n  private getLuminaceComponent(): number {\n    return GrayscaleColor.convertToLuminanceComponent(this.colorR, this.colorG, this.colorB);\n  }\n\n  static createGrayscaleColor(R: number, G: number, B: number): GrayscaleColor {\n    // return new GrayscaleColor(R, G, B);\n    let Y = GrayscaleColor.convertToLuminanceComponent(R, G, B);\n    return new GrayscaleColor(Y, Y, Y, true);\n  }\n  static convertToGrayscale(color: RGBColor): GrayscaleColor {\n    return GrayscaleColor.createGrayscaleColor(color.R, color.G, color.B);\n  }\n\n  // https://en.wikipedia.org/wiki/Grayscale\n  static convertToLuminanceComponent(R: number, G: number, B: number): number {\n\n    let R_lin = GrayscaleColor.computeGammaExpandedColor(R/255);\n    let G_lin = GrayscaleColor.computeGammaExpandedColor(G/255);\n    let B_lin = GrayscaleColor.computeGammaExpandedColor(B/255);\n\n    let Y_lin = 0.2126 * R_lin + 0.7152 * G_lin + 0.0722 * B_lin;\n    let Y_rgb = GrayscaleColor.computeGammaCompressedLuminance(Y_lin);\n    let Y = (Y_rgb < 0) ? 0 : ((Y_rgb > 1) ? 255 : Math.floor(Y_rgb * 255));\n\n    return Y;\n  }\n\n  private static computeGammaExpandedColor(C_rgb: number) {\n    let C_lin: number;\n    if(C_rgb <= 0.04045) {\n      C_lin = C_rgb / 12.92;\n    } else {\n      C_lin = Math.pow(((C_rgb + 0.055) / 1.055), 2.4);\n    }\n    return C_lin;\n  }\n\n  private static computeGammaCompressedLuminance(Y_lin: number) {\n    let Y_rgb: number;\n    if(Y_lin <= 0.0031308) {\n      Y_rgb = 12.92 * Y_lin;\n    } else {\n      Y_rgb = 1.055 * Math.pow(Y_lin, 1/2.4) - 0.055;\n    }\n    return Y_rgb;\n  }\n\n}\n","import { DevLogger as dl } from '../logging/dev-logger'; import isDL = dl.isLoggable;\nimport { RGBColor } from './rgb-color';\nimport { GrayscaleColor } from './grayscale-color';\n\n\n/**\n * Defines a set of colors.\n */\nexport namespace ColorPalette {\n  export const Color00 = new RGBColor(0xff, 0xff, 0xff);\n  export const GrayscaleColor00 = GrayscaleColor.convertToGrayscale(Color00);\n\n  // export const Color01 = new RGBColor(0xd9, 0, 0);\n  // export const Color02 = new RGBColor(0, 0xd9, 0);\n  // export const Color03 = new RGBColor(0, 0, 0xd9);\n  // export const Color04 = new RGBColor(0xf5, 0xf5, 0);\n  // export const Color05 = new RGBColor(0xf5, 0, 0xf5);\n  // export const Color06 = new RGBColor(0, 0xf5, 0xf5);\n  // export const Color07 = new RGBColor(0xd0, 0xd0, 0xd0);    // silver\n  // export const Color08 = new RGBColor(0x77, 0x77, 0x77);    // gray\n\n  export const Color01 = new RGBColor(0xff, 0, 0);\n  export const GrayscaleColor01 = GrayscaleColor.convertToGrayscale(Color01);\n\n  export const Color02 = new RGBColor(0, 0xff, 0);\n  export const GrayscaleColor02 = GrayscaleColor.convertToGrayscale(Color02);\n\n  export const Color03 = new RGBColor(0, 0, 0xff);\n  export const GrayscaleColor03 = GrayscaleColor.convertToGrayscale(Color03);\n\n  export const Color04 = new RGBColor(0x90, 0, 0);\n  export const GrayscaleColor04 = GrayscaleColor.convertToGrayscale(Color04);\n\n  export const Color05 = new RGBColor(0, 0x90, 0);\n  export const GrayscaleColor05 = GrayscaleColor.convertToGrayscale(Color05);\n\n  export const Color06 = new RGBColor(0, 0, 0x90);\n  export const GrayscaleColor06 = GrayscaleColor.convertToGrayscale(Color06);\n\n\n  export const Color07 = new RGBColor(0xff, 0xff, 0);\n  export const GrayscaleColor07 = GrayscaleColor.convertToGrayscale(Color07);\n\n  export const Color08 = new RGBColor(0xff, 0, 0xff);\n  export const GrayscaleColor08 = GrayscaleColor.convertToGrayscale(Color08);\n\n  export const Color09 = new RGBColor(0, 0xff, 0xff);\n  export const GrayscaleColor09 = GrayscaleColor.convertToGrayscale(Color09);\n\n  export const Color10 = new RGBColor(0xa0, 0xa0, 0);\n  export const GrayscaleColor10 = GrayscaleColor.convertToGrayscale(Color10);\n\n  export const Color11 = new RGBColor(0xa0, 0, 0xa0);\n  export const GrayscaleColor11 = GrayscaleColor.convertToGrayscale(Color11);\n\n  export const Color12 = new RGBColor(0, 0xa0, 0xa0);\n  export const GrayscaleColor12 = GrayscaleColor.convertToGrayscale(Color12);\n\n\n  export const Color13 = new RGBColor(0xf0, 0x50, 0);\n  export const GrayscaleColor13 = GrayscaleColor.convertToGrayscale(Color13);\n\n  export const Color14 = new RGBColor(0x50, 0, 0xf0);\n  export const GrayscaleColor14 = GrayscaleColor.convertToGrayscale(Color14);\n\n  export const Color15 = new RGBColor(0, 0xf0, 0x50);\n  export const GrayscaleColor15 = GrayscaleColor.convertToGrayscale(Color15);\n\n  export const Color16 = new RGBColor(0x50, 0xf0, 0);\n  export const GrayscaleColor16 = GrayscaleColor.convertToGrayscale(Color16);\n\n  export const Color17 = new RGBColor(0xf0, 0, 0x50);\n  export const GrayscaleColor17 = GrayscaleColor.convertToGrayscale(Color17);\n\n  export const Color18 = new RGBColor(0, 0x50, 0xf0);\n  export const GrayscaleColor18 = GrayscaleColor.convertToGrayscale(Color18);\n\n\n  export const Color90 = new RGBColor(0xf0, 0xf0, 0xf0);    // almost white\n  export const GrayscaleColor90 = GrayscaleColor.convertToGrayscale(Color90);\n\n  export const Color91 = new RGBColor(0xd0, 0xd0, 0xd0);    // silver\n  export const GrayscaleColor91 = GrayscaleColor.convertToGrayscale(Color91);\n\n  export const Color92 = new RGBColor(0xa0, 0xa0, 0xa0);    // gray\n  export const GrayscaleColor92 = GrayscaleColor.convertToGrayscale(Color92);\n\n  export const Color93 = new RGBColor(0x60, 0x60, 0x60);    // dark gray\n  export const GrayscaleColor93 = GrayscaleColor.convertToGrayscale(Color93);\n\n\n  export const Color99 = new RGBColor(0, 0, 0);\n  export const GrayscaleColor99 = GrayscaleColor.convertToGrayscale(Color99);\n\n\n  // White/Black excluded.\n  export const Colors = [\n    // Put BW colrs in front. This will not change when add/subtract colors.\n    // A number of color tag constants uses the indicex, 0 through 3.\n    // So, don't change this...\n    Color90, Color91, Color92, Color93,\n    // Color01, Color02, Color03, Color04, Color05, Color06, \n    // Color07, Color08, Color09, Color10, Color11, Color12,\n    // Color13, Color14, Color15, Color16, Color17, Color18\n    Color01, Color04,    // R\n    Color13, Color17,    // R/bg\n    Color02, Color05,    // G\n    Color15, Color16,    // G/br\n    Color03, Color06,    // B\n    Color14, Color18,    // B/rg\n    Color07, Color10,    // RG\n    Color08, Color11,    // BR\n    Color09, Color12     // GB\n  ];\n  export const Size = Colors.length;\n\n  // Same indices as Colors.\n  export const GrayscaleColors = [\n    GrayscaleColor90, GrayscaleColor91, GrayscaleColor92, GrayscaleColor93,\n    // GrayscaleColor01, GrayscaleColor02, GrayscaleColor03, GrayscaleColor04, GrayscaleColor05, GrayscaleColor06, \n    // GrayscaleColor07, GrayscaleColor08, GrayscaleColor09, GrayscaleColor10, GrayscaleColor11, GrayscaleColor12,\n    // GrayscaleColor13, GrayscaleColor14, GrayscaleColor15, GrayscaleColor16, GrayscaleColor17, GrayscaleColor18\n    GrayscaleColor01, GrayscaleColor04,    // R\n    GrayscaleColor13, GrayscaleColor17,    // R/bg\n    GrayscaleColor02, GrayscaleColor05,    // G\n    GrayscaleColor15, GrayscaleColor16,    // G/br\n    GrayscaleColor03, GrayscaleColor06,    // B\n    GrayscaleColor14, GrayscaleColor18,    // B/rg\n    GrayscaleColor07, GrayscaleColor10,    // RG\n    GrayscaleColor08, GrayscaleColor11,    // BR\n    GrayscaleColor09, GrayscaleColor12     // GB\n  ];\n\n  // export const GrayscaleMap = {\n  //   Color00: GrayscaleColor00,\n  //   // ...\n  // };\n\n\n  // TBD:Validate indexes?\n  export function convertToColors(indexes: number[]): RGBColor[] {\n    let colours: RGBColor[] = [];\n    if (indexes) {\n      // in vs of?\n      for (let idx of indexes) {\n        colours.push(Colors[idx]);\n      }\n      // let len = indexes.length;\n      // for (let i=0; i<len; i++) {\n      //   let idx = indexes[i];\n      //   colours.push(Colors[idx]);\n      // }\n      // if(isDL()) dl.log('>>>>>>>>>>>>>> len = ' + len + '; colours.length = ' + colours.length);\n    }\n    return colours;\n  }\n\n  export function convertToGrayscaleColors(indexes: number[]): GrayscaleColor[] {\n    let colours: GrayscaleColor[] = [];\n    if (indexes) {\n      for (let idx of indexes) {\n        colours.push(GrayscaleColors[idx]);\n      }\n    }\n    return colours;\n  }\n  \n\n  // Returns an array of two arrays:\n  // First array: Closely related colors.\n  // Scoend array: Somewhat related colors.\n  // The rest is considred neutral or different.\n  // This is dependent on Colors array.\n  // If it changes, then this function needs to be updated as well.\n  // TBD: Need to make this more robust... \n  export function similarColorIndexes(colorIndex: number): [number[], number[]] {\n    let c1: number[] = [];\n    let c2: number[] = [];\n\n    // Note: we are exluding self from c1/c2.\n    // tbd: Is using hash map more effiicent than using switch() ?????\n    switch (colorIndex) {\n      case 0: case 1: case 2: case 3:\n        c1.push(0, 1, 2, 3);\n        c2.push(4, 5, 8, 9, 12, 13);  // Pure colors only.\n        break;\n\n      case 4:\n        c1.push(5, 6, 7);\n        c2.push(16, 17, 18, 19);\n        break;\n      case 5:\n        c1.push(4, 6, 7);\n        c2.push(16, 17, 18, 19);\n        break;\n      case 6:\n        c1.push(4, 5, 7);\n        c2.push(16, 17, 18, 19);\n        break;\n      case 7:\n        c1.push(4, 5, 6);\n        c2.push(16, 17, 18, 19);\n        break;\n\n      case 8:\n        c1.push(9, 10, 11);\n        c2.push(16, 17, 20, 21);\n        break;\n      case 9:\n        c1.push(8, 10, 11);\n        c2.push(16, 17, 20, 21);\n        break;\n      case 10:\n        c1.push(8, 9, 11);\n        c2.push(16, 17, 20, 21);\n        break;\n      case 11:\n        c1.push(8, 9, 10);\n        c2.push(16, 17, 20, 21);\n        break;\n\n      case 12:\n        c1.push(13, 14, 15);\n        c2.push(18, 19, 20, 21);\n        break;\n      case 13:\n        c1.push(12, 14, 15);\n        c2.push(18, 19, 20, 21);\n        break;\n      case 14:\n        c1.push(12, 13, 15);\n        c2.push(18, 19, 20, 21);\n        break;\n      case 15:\n        c1.push(12, 13, 14);\n        c2.push(18, 19, 20, 21);\n        break;\n\n      case 16:\n        c1.push(17, 6, 7, 10, 11);\n        c2.push(4, 5, 8, 9);\n        break;\n      case 17:\n        c1.push(16, 6, 7, 10, 11);\n        c2.push(4, 5, 8, 9);\n        break;\n\n      case 18:\n        c1.push(19, 6, 7, 14, 15);\n        c2.push(4, 5, 12, 13);\n        break;\n      case 19:\n        c1.push(18, 6, 7, 14, 15);\n        c2.push(4, 5, 12, 13);\n        break;\n\n      case 20:\n        c1.push(21, 10, 11, 14, 15);\n        c2.push(8, 9, 12, 13);\n        break;\n      case 21:\n        c1.push(20, 10, 11, 14, 15);\n        c2.push(8, 9, 12, 13);\n        break;\n    }\n\n    return [c1, c2];\n  }\n\n  export function randomWeightedIndex(pivotColorIndex: number, excluded: (number[] | null) = null): number {\n    // Compute similar colors\n    let [c1, c2] = similarColorIndexes(pivotColorIndex);\n\n    // Divide it into three bins.\n    // Note that the \"rest\" (bin3) contains all colors,\n    // hence the c1, c2 weights are extra above the equal weight.\n    // let bin1 = Math.floor(c1.length * 1.5);\n    // let bin2 = Math.floor(c2.length * 1);\n    let bin1 = c1.length * 3;\n    let bin2 = c2.length * 2;\n    // let bin3 = Size - c1.length - c2.length;\n    let bin3 = Size;\n    let W = bin1 + bin2 + bin3;\n\n    let idx = pickWeightedIndex(c1, c2, W, bin1, bin2, bin3);\n    if (excluded && excluded.length > 0) {\n      let cnt = 0;\n      while ((cnt++ < 10) && (excluded.indexOf(idx) > -1)) {   // max 10 tries.\n        idx = pickWeightedIndex(c1, c2, W, bin1, bin2, bin3);\n      }\n    }\n    return idx;\n  }\n  function pickWeightedIndex(c1: number[], c2: number[],  W: number, bin1: number, bin2: number, bin3: number): number {\n    // assert W = bin1 + bin2 + bin3.\n    let idx: number = 0;\n    let b = Math.floor(Math.random() * W);\n    if (b < bin1) {\n      idx = c1[Math.floor(Math.random() * c1.length)];\n    } else if (b < bin2) {\n      idx = c2[Math.floor(Math.random() * c2.length)];\n    } else {\n      idx = Math.floor(Math.random() * Size);\n    }\n    return idx;\n  }\n\n\n  // Note:\n  // Used on to seed the center color.\n  // The rest 8 colors are picked by randomWeightedIndex()\n  export function randomIndex(excluded: (number[] | null) = null): number {\n    // let idx = Size - 1;\n\n    let idx = Math.floor(Math.random() * Size);\n    if (excluded && excluded.length > 0) {\n      let cnt = 0;\n      while ((cnt++ < 10) && (excluded.indexOf(idx) > -1)) {   // max 10 tries.\n        idx = Math.floor(Math.random() * Size);\n      }\n    }\n    return idx;\n  }\n\n  export function randomColor(): RGBColor {\n    let idx = Math.floor(Math.random() * Size);\n    return Colors[idx];\n  }\n\n}\n","import { RGBColor } from './rgb-color';\nimport { GrayscaleColor } from './grayscale-color';\nimport { ColorPalette } from './color-palette';\nimport { ColorHash } from './color-hash';\n\n\n/**\n * Color tag is a list of 9 colors from ColorPalette.\n */\nexport class ColorTag extends ColorHash {\n\n  // temporary\n  // (The index list will change if color-palette changes.)\n  static BW_CHECKER_BOARD_A: ColorTag = new ColorTag([0, 1, 0, 1, 0, 1, 0, 1, 0]);\n  static BW_CHECKER_BOARD_B: ColorTag = new ColorTag([1, 0, 1, 0, 1, 0, 1, 0, 1]);\n  static BW_CHECKER_BOARD_C: ColorTag = new ColorTag([1, 2, 1, 2, 1, 2, 1, 2, 1]);\n  static BW_CHECKER_BOARD_D: ColorTag = new ColorTag([2, 1, 2, 1, 2, 1, 2, 1, 2]);\n  static BW_CHECKER_BOARD_E: ColorTag = new ColorTag([2, 3, 2, 3, 2, 3, 2, 3, 2]);\n  static BW_CHECKER_BOARD_F: ColorTag = new ColorTag([3, 2, 3, 2, 3, 2, 3, 2, 3]);\n\n  static BW_ALLWHITE_BOARD: ColorTag = new ColorTag([0, 0, 0, 0, 0, 0, 0, 0, 0]);\n  static BW_ALLSILVER_BOARD: ColorTag = new ColorTag([1, 1, 1, 1, 1, 1, 1, 1, 1]);\n  static BW_ALLGRAY_BOARD: ColorTag = new ColorTag([2, 2, 2, 2, 2, 2, 2, 2, 2]);\n\n  static BW_SILVER_SQUARE: ColorTag = new ColorTag([1, 1, 1, 1, 0, 1, 1, 1, 1]);\n  static BW_GRAY_SQUARE: ColorTag = new ColorTag([2, 2, 2, 2, 1, 2, 2, 2, 2]);\n  static BW_DARKGRAY_SQUARE: ColorTag = new ColorTag([3, 3, 3, 3, 2, 3, 3, 3, 3]);\n\n  static BW_SILVER_DOT: ColorTag = new ColorTag([0, 0, 0, 0, 1, 0, 0, 0, 0]);\n  static BW_GRAY_DOT: ColorTag = new ColorTag([1, 1, 1, 1, 2, 1, 1, 1, 1]);\n  static BW_DARKGRAY_DOT: ColorTag = new ColorTag([2, 2, 2, 2, 3, 2, 2, 2, 2]);\n\n\n  // tbd:\n  static fromString(str: string): ColorTag {\n    let indexes: (number[] | null) = null;\n    if (str) {\n      indexes = str.split('-').map((item) => {\n        return parseInt(item, 10);\n      });\n    }\n    let tag = new ColorTag(indexes);\n    return tag;\n  }\n\n  // tbd\n  // grayscaleColors: GrayscaleColor[];\n  private _grayscaleColors: (GrayscaleColor[] | null) = null;\n  get grayscaleColors(): GrayscaleColor[] {\n    if(this._grayscaleColors == null) {\n      if (this.indexes != null) {  // ????\n        this._grayscaleColors = ColorPalette.convertToGrayscaleColors(this.indexes);\n      } else {\n        // this._grayscaleColors = null;   // ??\n        this._grayscaleColors = [];   // ??\n      }\n    }\n    return this._grayscaleColors;\n  }\n\n\n  // TBD: Default constructor???\n\n  // 9 color indexes from ColorPalette.\n  // tbd: validate?\n  // tbd: indexes should not be assignable... How to remove setter?\n  constructor(public indexes: (number[] | null)) {\n    super((indexes != null && indexes.length >= 5)   // ???\n      ? ColorPalette.convertToColors(indexes) : null);\n    // if (indexes != null && indexes.length >= 5) {  // ????\n    //   this.grayscaleColors = ColorPalette.convertToGrayscaleColors(indexes);\n    // } else {\n    //   this.grayscaleColors = null;   // ??\n    // }\n  }\n\n\n  equals(obj: ColorTag): boolean {\n    if (!obj) return false;\n    if (this.indexes == null && obj.indexes == null) return true;   // ????\n    if (this.indexes == null || obj.indexes == null) return false;\n    if (this.indexes.length !== obj.indexes.length) return false;\n    for (let i in this.indexes) {\n      if (this.indexes[i] !== obj.indexes[i]) return false;\n    }\n    return true;\n  }\n\n\n  // temporary\n  toString(): string {\n    // return super.toString();\n\n    // let str = '';\n    // for(let idx of this.indexes) {\n    //   str += (idx < 10) ? '0' + idx : idx;\n    // }\n\n    let str = (this.indexes != null) ? this.indexes.join('-') : '';\n    return str;\n  }\n\n  clone(): ColorTag {\n    let cloned = Object.assign(new ColorTag(this.indexes), this) as ColorTag;\n    // grayscaleColors ??\n    return cloned;\n  }\n  static clone(obj: any): ColorTag {\n    let cloned = Object.assign(new ColorTag(obj.indexes), obj) as ColorTag;   // ????\n    // grayscaleColors ??\n    return cloned;\n  }\n\n}\n","// import { DualValue } from './dual-value';\n\n/**\n * Represents a date range, from startDate to endDate.\n * Note that a date range can be open-ended on either side.\n */\nexport class DateRange // implements DualValue\n{\n  // // [ : )\n  // // date: yyyymmdd\n  // // Note that date range can be open-ended on either side.\n  // constructor(public startDate: string = null, public endDate: string = null) {\n  // }\n\n  public startDate: (string | null) = null;\n  public endDate: (string | null) = null;\n\n  public get dayCount(): number {\n    if ((!this.startDate) || (!this.endDate)) {\n      return -1;\n    } else {\n      // let d = parseInt(this.endDate) - parseInt(this.startDate);\n      // return d;\n\n      let y1 = Number(this.startDate.substr(0, 4));\n      let m1 = Number(this.startDate.substr(4, 2)) - 1;  // Note: -1\n      let d1 = Number(this.startDate.substr(6, 2));\n      let date1 = new Date(y1, m1, d1);\n\n      let y2 = Number(this.endDate.substr(0, 4));\n      let m2 = Number(this.endDate.substr(4, 2)) - 1;  // Note: -1\n      let d2 = Number(this.endDate.substr(6, 2));\n      let date2 = new Date(y2, m2, d2);\n\n      let millis = date2.getTime() - date1.getTime();\n      var diffDays = Math.ceil(millis / (24 * 3600 * 1000));\n\n      return diffDays;\n    }\n  }\n\n  constructor();\n  constructor(_startDate: string);\n  constructor(_startDate: string, _endDate: string);\n  constructor(_startDate: string, _dayCount: number);\n  constructor(arg1?: string, arg2?: string | number) {\n    if (!arg1 && !arg2) {\n      this.startDate = null;\n      this.endDate = null;\n    } else {\n      if ((typeof arg1) == 'string') {\n        // tbd: Validate? yyyymmdd.\n        this.startDate = arg1 as string;\n        if ((typeof arg2) == 'string') {\n          // tbd: Validate? \n          //      yyyymmdd\n          //      startDate < endDate\n          this.endDate = arg2 as string;\n        } else if ((typeof arg2) == 'number') {\n          // tbd: Validate? dayCount > 0\n          let dayCount = arg2 as number;\n\n          // TBD:\n          // Copy of DateIdUtil.getNthDayId() implementation.\n          // Need to refactor....\n\n          let y1 = Number(this.startDate.substr(0, 4));\n          let m1 = Number(this.startDate.substr(4, 2)) - 1;  // Note: -1\n          let d1 = Number(this.startDate.substr(6, 2));\n          let date = new Date(y1, m1, d1);\n\n          let nthDay = new Date(date.getTime() + dayCount * 24 * 3600 * 1000);\n          let id: string = nthDay.getFullYear().toString();\n          let m2 = nthDay.getMonth() + 1;  // january == 0.\n          id += (m2 < 10) ? '0' + m2 : m2.toString();\n          let d2 = nthDay.getDate();\n          id += (d2 < 10) ? '0' + d2 : d2.toString();\n\n          this.endDate = id;\n        } else {\n          // ????\n        }\n      } else {\n        // ????\n      }\n    }\n  }\n\n\n  // Moved to DateIdUtil.\n  // // TBD: Single-day date range???\n  // static convertToRange(date: string): DateRange {\n  //   let range = new DateRange(date, date + 1);    // TBD: What about the end of month????\n  //   return range;\n  // }\n\n  // TBD:\n  // Get a list/array of date ids from date range???\n  // ...\n\n\n  // Note that in order for these to work,\n  // the dates all should be in the same formate.\n  // In particular, we only support \"Date ID\" formats.\n  isInside(dateId: string): boolean {\n    return (((!this.startDate) || dateId >= this.startDate) && ((!this.endDate) || dateId < this.endDate));\n  }\n  isOutside(dateId: string): boolean {\n    return (((this.startDate != null) && dateId < this.startDate) || ((this.endDate != null) && dateId >= this.endDate));\n  }\n\n  toString(): string {\n    return '(' + this.startDate + '-' + this.endDate + ')';\n  }\n\n  clone(): DateRange {\n    let cloned = Object.assign(new DateRange(), this) as DateRange;\n    return cloned;\n  }\n  static clone(obj: any): DateRange {\n    let cloned = Object.assign(new DateRange(), obj) as DateRange;\n    return cloned;\n  }\n\n}\n","import { DualValue } from './dual-value';\n\n// tbd: range vs {start time, duration} ????\n\n\n/**\n * Represents a time in a day. (E.g, 15.5 -> 2:30PM, 26 -> 2AM next day, etc.)\n * \"Hour\" really represents a (one hour) time slot, rather than a point in time.\n */\n// TBD: hour + interval ?\nexport class HourRange implements DualValue \n{\n  // // DualValue interface.\n  // get lower(): number {\n  //   return this.startHour;\n  // }\n  // set lower(_lower: number) {\n  //   this.startHour = _lower;\n  // }\n  // get upper(): number {\n  //   return this.endHour;\n  // }\n  // set upper(_upper: number) {\n  //   this.endHour = _upper;\n  // }\n\n  // // [ : )\n  // // Uess 24 hour format with number > 24 indicating the next day.\n  // // endHour == -1 means it has only start time not end time.\n  // constructor(public startHour: number = 0, public endHour: number = 0) {\n  //   // TBD:\n  //   // valid range? e.g., startHour <= endHour.\n  // }\n\n  // DualValue interface.\n  get startHour(): number {\n    return this.lower;\n  }\n  set startHour(_startHour: number) {\n    this.lower = _startHour;\n  }\n  get endHour(): number {\n    return this.upper;\n  }\n  set endHour(_endHour: number) {\n    this.upper = _endHour;\n  }\n\n  // [ : )\n  // Uess 24 hour format with number > 24 indicating the next day.\n  // endHour == -1 means it has only start time not end time.\n  constructor(public lower: number = 0, public upper: number = 0) {\n    // TBD:\n    // validate range? e.g., startHour <= endHour.\n  }\n\n  // isInside(hour: number): boolean {\n  //   return (hour >= this.startHour && hour < this.endHour);\n  // }\n  // isOutside(hour: number): boolean {\n  //   return (hour < this.startHour || hour >= this.endHour);\n  // }\n\n  isInside(hour: number): boolean {\n    return (hour >= this.lower && (this.upper === -1 || hour < this.upper));\n  }\n  isOutside(hour: number): boolean {\n    return (hour < this.lower || (this.upper !== -1 && hour >= this.upper));\n  }\n\n\n  toString(): string {\n    return '(' + this.startHour + ':' + this.endHour + ')';\n  }\n\n  clone(): HourRange {\n    let cloned = Object.assign(new HourRange(), this) as HourRange;\n    return cloned;\n  }\n  static clone(obj: any): HourRange {\n    let cloned = Object.assign(new HourRange(), obj) as HourRange;\n    return cloned;\n  }\n\n}\n","import { DevLogger as dl } from '../logging/dev-logger'; import isDL = dl.isLoggable;\n\nexport namespace UrlUtil {\n\n  /**\n   * Returns true if the given arg is an absolute url.\n   * @param url URL string to test\n   */\n  export function isAbsolute(url: string): boolean {\n    if(!url) {\n      return false;\n    }\n    return UrlUtil.isAbsoluteUrl(url);\n  }\n\n  /**\n   * Returns true if the given arg is not an absolute url.\n   * @param url URL string to test\n   */\n  export function isRelative(url: string): boolean {\n    if(url == null) {\n      return false;\n    }\n    return ! UrlUtil.isAbsoluteUrl(url);\n  }\n\n  // We only check http, https, and protocol relative URLs.\n  export function isAbsoluteUrl(url: string): boolean {\n    let trimmed = url.trim();\n    let pat = /^https?:\\/\\/|\\/\\//i;\n    return pat.test(trimmed);\n  }\n\n}\n","import { RGBColor } from '../core/rgb-color';\n\n\n/**\n * Util functions for RGBColor.\n */\nexport namespace RGBColorUtil {\n\n  export function randomColor() : RGBColor {\n    let r = Math.floor(Math.random() * 256);\n    let g = Math.floor(Math.random() * 256);\n    let b = Math.floor(Math.random() * 256);\n    let rgb = new RGBColor(r, g, b);\n    return rgb;\n  }\n\n}\n","import { RGBColor } from '../core/rgb-color';\nimport { ColorHash } from '../core/color-hash';\nimport { RGBColorUtil } from './rgb-color-util';\n\n// Color hash is a list of 9 colors (arranged in a square).\nexport namespace ColorHashUtil {\n\n  export function randomColorHash() : ColorHash {\n    let colors: RGBColor[] = [\n      RGBColorUtil.randomColor(), RGBColorUtil.randomColor(), RGBColorUtil.randomColor(),\n      RGBColorUtil.randomColor(), RGBColorUtil.randomColor(), RGBColorUtil.randomColor(),\n      RGBColorUtil.randomColor(), RGBColorUtil.randomColor(), RGBColorUtil.randomColor()\n    ];\n    let hash = new ColorHash(colors);\n    return hash;\n  }\n\n}\n","import { DevLogger as dl } from '../logging/dev-logger'; import isDL = dl.isLoggable;\nimport { RGBColor } from '../core/rgb-color';\nimport { ColorPalette } from '../core/color-palette';\nimport { ColorTag } from '../core/color-tag';\n\n\n/**\n * Color tag is a list of 9 colors (arranged in a square).\n */\nexport namespace ColorTagUtil {\n\n  export function randomColorTag() : ColorTag {\n\n    // [1] Starting from the first cell and go through rows....\n    // // Avoid the same colors for adjacent cells.\n    // let idx0 = ColorPalette.randomIndex();\n    // let idx1 = ColorPalette.randomIndex([idx0]);\n    // let idx2 = ColorPalette.randomIndex([idx1]);\n    // let idx3 = ColorPalette.randomIndex([idx0]);\n    // let idx4 = ColorPalette.randomIndex([idx1,idx3]);\n    // let idx5 = ColorPalette.randomIndex([idx2,idx4]);\n    // let idx6 = ColorPalette.randomIndex([idx3]);\n    // let idx7 = ColorPalette.randomIndex([idx4,idx6]);\n    // let idx8 = ColorPalette.randomIndex([idx5,idx7]);\n\n    // let indexes: number[] = [\n    //   idx0, idx1, idx2,\n    //   idx3, idx4, idx5,\n    //   idx6, idx7, idx8\n    //   // ColorPalette.randomIndex(), ColorPalette.randomIndex(), ColorPalette.randomIndex(),\n    //   // ColorPalette.randomIndex(), ColorPalette.randomIndex(), ColorPalette.randomIndex(),\n    //   // ColorPalette.randomIndex(), ColorPalette.randomIndex(), ColorPalette.randomIndex()\n    // ];\n    // // if(isDL()) dl.log('>>> randomColorTag(): indexes = ' + indexes.toString());\n\n\n    // [2] Starting from the center.\n    // Avoid the same colors for adjacent cells.\n    // let idx4 = ColorPalette.randomIndex();\n    let idx4 = ColorPalette.randomIndex([0, 1, 2, 3]);   // Exclude gray colors from the center\n    let idx0 = ColorPalette.randomWeightedIndex(idx4);\n    let idx1 = ColorPalette.randomWeightedIndex(idx4, [idx0, idx4]);\n    let idx2 = ColorPalette.randomWeightedIndex(idx4, [idx1]);\n    let idx3 = ColorPalette.randomWeightedIndex(idx4, [idx0, idx4]);\n    let idx5 = ColorPalette.randomWeightedIndex(idx4, [idx2, idx4]);\n    let idx6 = ColorPalette.randomWeightedIndex(idx4, [idx3]);\n    let idx7 = ColorPalette.randomWeightedIndex(idx4, [idx4, idx6]);\n    let idx8 = ColorPalette.randomWeightedIndex(idx4, [idx5, idx7]);\n\n    let indexes: number[] = [\n      idx0, idx1, idx2,\n      idx3, idx4, idx5,\n      idx6, idx7, idx8\n    ];\n    // if(isDL()) dl.log('>>> randomColorTag(): indexes = ' + indexes.toString());\n\n\n\n    let tag = new ColorTag(indexes);\n    // if(isDL()) dl.log('>>> randomColorTag(): tag = ' + tag.toString());\n\n    return tag;\n  }\n\n}\n","import { DevLogger as dl } from '../logging/dev-logger'; import isDL = dl.isLoggable;\n\n\n/**\n * Time-related utility functions.\n */\nexport namespace DateTimeUtil {\n\n  export function getUnixEpochMillis(date: Date = new Date()): number {\n    return date.getTime();\n  }\n\n  // ISO 8601 foramt\n  export function getISODateTimeString(now: number = getUnixEpochMillis(), excludeTimePart: boolean = false): string {\n    let dt = new Date(now);\n    return getISODateString(dt, excludeTimePart);\n  }\n  export function getISODateString(date: Date, excludeTimePart: boolean = false): string {\n    let str: string = \"\";\n    // temporary\n    // let locale = \"en-us\";\n    let locale = undefined;\n    str = date.toISOString();\n    if(excludeTimePart) {\n      str = str.substring(0, 10);\n    }\n  // if(isDL()) dl.log(\">>>>>>> date = \" + date + \"; str = \" + str);\n    return str;\n  }\n\n  // TBD:\n  // Returns the \"hour\" (in our usage) of a given time.\n  export function getHourOfTheDay(date: Date = new Date()): number {\n    // tbd:\n    let h = date.getHours();\n    let m = date.getMinutes();\n    let s = date.getSeconds();\n    let n = date.getMilliseconds();\n\n    let hour = h + m * (1 / 60) + s * (1 / 3600) + n * (1 / 3600000);\n    // tbd: format it (e.g., down to 2 decimals below zero) ????\n    return hour;\n  }\n\n  export function getYear(date: Date = new Date()): number {\n    let y = date.getFullYear();\n    return y;\n  }\n\n\n  export function getMidnightDate(date: Date = new Date()): Date {\n    let dt = new Date(date);\n    dt.setHours(0, 0, 0, 0);\n    // dt.setUTCHours(0,0,0,0);\n    return dt;\n  }\n  export function getMidnight(now: number = getUnixEpochMillis()): number {\n    let dt = new Date(now);\n    dt.setHours(0, 0, 0, 0);\n    // dt.setUTCHours(0,0,0,0);\n    let midnight = getUnixEpochMillis(dt);\n    return midnight;\n  }\n\n  // Sunday is considered the first day of a week.\n  export function getSundayMidnightDate(date: Date = new Date()): Date {\n    let dt = new Date(date);\n    dt.setHours(0, 0, 0, 0);\n    let delta = dt.getDay();\n    dt.setDate(dt.getDate() - delta);\n    return dt;\n  }\n  export function getSundayMidnight(now: number = getUnixEpochMillis()): number {\n    let dt = new Date(now);\n    dt.setHours(0, 0, 0, 0);\n    let delta = dt.getDay();\n    dt.setDate(dt.getDate() - delta);\n    let sundayMidnight = getUnixEpochMillis(dt);\n    return sundayMidnight;\n  }\n\n  // The first day of a month.\n  export function getFirstDayMidnightDate(date: Date = new Date()): Date {\n    let dt = new Date(date);\n    dt.setHours(0, 0, 0, 0);\n    dt.setDate(1);\n    return dt;\n  }\n  export function getFirstDayMidnight(now: number = getUnixEpochMillis()): number {\n    let dt = new Date(now);\n    dt.setHours(0, 0, 0, 0);\n    dt.setDate(1);\n    let firstMidnight = getUnixEpochMillis(dt);\n    return firstMidnight;\n  }\n\n  /**\n   * Returns the number of the day in the given month.\n   * \n   * @param today {Date} A date in the given month. \n   */\n  export function getNumberOfDaysInMonth(today: Date = new Date()): number {\n    let mo = today.getMonth() + 1;\n\n    let numDays = 0;\n    switch (mo) {\n      case 1:\n      case 3:\n      case 5:\n      case 7:\n      case 8:\n      case 10:\n      case 12:\n        numDays = 31;\n        break;\n      case 4:\n      case 6:\n      case 9:\n      case 11:\n      default:   // ???\n        numDays = 30;\n        break;\n      case 2:\n        numDays = 28;\n        let year = today.getFullYear();\n        if (((year % 4) === 0) && ((year % 100) !== 0)) {\n          numDays = 29;\n        }\n        break;\n    }\n    return numDays;\n  }\n\n  export function getNumberOfDaysForMonth(now: number = getUnixEpochMillis()): number {\n    let dt = new Date(now);\n    dt.setDate(1);\n    return getNumberOfDaysInMonth(dt);\n  }\n  export function getNumberOfDaysForPreviousMonth(now: number = getUnixEpochMillis()): number {\n    let dt = new Date(now);\n    dt.setDate(1);\n    dt.setMonth(dt.getMonth() - 1);\n    return getNumberOfDaysInMonth(dt);\n  }\n  export function getNumberOfDaysForNextMonth(now: number = getUnixEpochMillis()): number {\n    let dt = new Date(now);\n    dt.setDate(1);\n    dt.setMonth(dt.getMonth() + 1);\n    return getNumberOfDaysInMonth(dt);\n  }\n\n}\n","import { DevLogger as dl } from '../logging/dev-logger'; import isDL = dl.isLoggable;\nimport { DateRange } from '../core/date-range';\nimport { DateTimeUtil } from './date-time-util';\n\n\n/**\n * DateId: yyyymmdd\n *    (Month: 01 ~ 12.)\n * tbd: support other formats like \"yyyy/mm/dd\" or \"yyyy-mm-dd\"  as well?\n * (\"yyyymmdd\" format is good because it can be directly cast to number, e.g., for comparison, etc.)\n */\nexport namespace DateIdUtil {\n\n  // Note:\n  // Due to the daylight saving time,\n  // A day can be 25 hours or 23 hours (each ocurring once per year).\n  // Because of this we add (3600 * 1000 + 10) (1 hour + epsilon) when we do data arithmetic...\n\n  // tbd.\n  export function isDateIdValid(dateId: string): boolean {\n    return false;\n  }\n\n  // tbd:\n  export function convertToDate(dateId: string): Date {\n    // tbd:\n    // assert dateId.length == 8\n    let y = Number(dateId.substr(0, 4));\n    let m = Number(dateId.substr(4, 2)) - 1;  // Note: -1\n    let d = Number(dateId.substr(6, 2));\n    let date = new Date(y, m, d);\n    return date;\n  }\n\n  // Note that hours/minutes/seconds are ignored.\n  export function convertToId(date: Date): string {\n    let id: string = '';\n    if (date) {\n      id += date.getFullYear().toString();\n      let m = date.getMonth() + 1;  // january == 0.\n      id += (m < 10) ? '0' + m : m.toString();\n      let d = date.getDate();\n      id += (d < 10) ? '0' + d : d.toString();\n    }\n    return id;\n  }\n\n  /**\n   * Returns today's 'dateId' (yyyymmdd).\n   */\n  export function getTodayId(): string {\n    let today = new Date();\n    let id = convertToId(today);\n    return id;\n  }\n\n  export function getTomorrowId(): string {\n    // let tomorrow = new Date(DateTimeUtil.getMidnight(new Date().getTime()) + 24 * 3600 * 1000 + (3600 * 1000 + 10));\n    // // if(isDL()) dl.log(\"------------ tomorrow = \" + tomorrow);\n    // let id = convertToId(tomorrow);\n    // // if(isDL()) dl.log(\"------------ tomorrow.id = \" + id);\n    // return id;\n    let tomorrow = new Date();\n    tomorrow.setDate(tomorrow.getDate() + 1);\n    return convertToId(tomorrow);\n  }\n\n  export function getYesterdayId(): string {\n    // let yesterday = new Date(DateTimeUtil.getMidnight(new Date().getTime()) - 24 * 3600 * 1000 + (3600 * 1000 + 10));\n    // // if(isDL()) dl.log(\"------------ yesterday = \" + yesterday);\n    // let id = convertToId(yesterday);\n    // // if(isDL()) dl.log(\"------------ yesterday.id = \" + id);\n    // return id;\n    let yesterday = new Date();\n    yesterday.setDate(yesterday.getDate() - 1);\n    return convertToId(yesterday);\n  }\n\n  export function getNextDayId(dateId: string): string {\n    // let date = convertToDate(dateId);\n    // let nextDay = new Date(date.getTime() + 24 * 3600 * 1000);\n    // let id = convertToId(nextDay);\n    // return id;\n    return getNthDayId(dateId, 1);\n  }\n\n  // Supports both positive and negative dayN.\n  export function getNthDayId(dateId: string, dayN: number = 1): string {\n    let date = convertToDate(dateId);\n    // Note: 1 hour added to accomodate daylight saving time changes.\n    // TBD: Can this be an issue in certain use cases????\n    let nthDay = new Date(date.getTime() + dayN * 24 * 3600 * 1000 + (3600 * 1000 + 1010));\n    let id = convertToId(nthDay);\n\n    // testing\n    // if(isDL()) dl.log(`### dateId = ${dateId}; dayN = ${dayN}; date = ${date}; nthDay = ${nthDay}; id = ${id}. `)\n    // testing\n\n    return id;\n  }\n\n  export function convertToDateRange(dateId: string): DateRange {\n    let nextDateId = convertToId(convertToDate(dateId));\n    let range = new DateRange(dateId, nextDateId);\n    return range;\n  }\n\n\n  // ISO 8601 foramt\n  export function getISODateString(dateId: (string | null), excludeTimePart: boolean = false): string {\n    let str: string = \"\";\n    if (dateId) {\n      let date = convertToDate(dateId);\n      // let str = date.toDateString();\n\n      // temporary\n      // let locale = \"en-us\";\n      let locale = undefined;\n      str = date.toISOString();\n      if(excludeTimePart) {\n        str = str.substring(0, 10);\n      }\n      // if(isDL()) dl.log(\">>>>>>> dateId = \" + dateId + \"; date = \" + date + \"; str = \" + str);\n    }\n    return str;\n  }\n  export function fromISODateString(str: string): string {\n    let isoDate = new Date(str);\n    let id = convertToId(isoDate);\n    return id;\n  }\n\n  // Locale-dependent string ???\n  export function getLocaleDateString(dateId: (string | null)): string {\n    let str: string = \"\";\n    if (dateId) {\n      let date = convertToDate(dateId);\n      // let str = date.toDateString();\n\n      // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString\n      // temporary\n      // let locale = \"en-us\";\n      let locale = undefined;\n      // str = date.toLocaleString(locale, { year: 'numeric', month: 'long', day: 'numeric' });\n      str = date.toLocaleString(locale, { month: 'long', day: 'numeric', weekday: 'short' });\n      // if(isDL()) dl.log(\">>>>>>> dateId = \" + dateId + \"; date = \" + date + \"; str = \" + str);\n    }\n    return str;\n  }\n  export function getDateString(dateId: (string | null), sep: (string | null) = null): string {\n    // tbd:\n    // assert dateId.length == 8\n    if (!dateId || dateId.length < 8) {  // ??\n      return \"\";\n    }\n\n    if(sep == null) {  // '' is valid separator.\n      sep = '/';\n    }\n\n    // let date = convertToDate(dateId);\n    // let str = date.toDateString();\n\n    // TBD: order ???\n    // Note that by using number, we are removing leading 0's, if any.\n    let y = Number(dateId.substr(0, 4));\n    let m = Number(dateId.substr(4, 2));   // No -1.\n    let d = Number(dateId.substr(6, 2));\n    let str = y + sep + m + sep + d;\n    return str;\n  }\n\n  // tbd:\n  export function convertToEpochMillis(dateId: string): number {\n    // tbd: Use DateTimeUtil ???\n    return convertToDate(dateId).getTime();\n  }\n  export function convertFromEpochMillis(millis: number): string {\n    let date = new Date(millis);\n    return convertToId(date);  // It effectively takes \"floors\";\n  }\n\n\n  /**\n   * Returns Sunday id of the given week.\n   *\n   * @param dateId Reference dateId. Today is used by default.\n   */\n  export function getSundayOfWeek(dateId: string = DateIdUtil.getTodayId()): string {\n    return convertToId(DateTimeUtil.getSundayMidnightDate(convertToDate(dateId)));\n  }\n\n  /**\n   * Returns the id of the first day of the given month.\n   *\n   * @param dateId Reference dateId. Today is used by default.\n   */\n  export function getFirstDayOfMonth(dateId: string = DateIdUtil.getTodayId()): string {\n    // return convertToId(DateTimeUtil.getFirstDayMidnightDate(convertToDate(dateId)));\n    return dateId.substr(0, 6) + '01';\n  }\n\n  /**\n   * Returns the number of days until the same day next month.\n   *\n   * @param dateId Reference dateId. Today is used by default.\n   */\n  export function getNumberOfDaysForMonth(dateId: string = DateIdUtil.getTodayId()): number {\n    return DateTimeUtil.getNumberOfDaysForMonth(convertToEpochMillis(dateId));\n  }\n\n  /**\n   * Returns the number of days from the same day in the previous month.\n   *\n   * @param dateId Reference dateId. Today is used by default.\n   */\n  export function getNumberOfDaysForPreviousMonth(dateId: string = DateIdUtil.getTodayId()): number {\n    return DateTimeUtil.getNumberOfDaysForPreviousMonth(convertToEpochMillis(dateId));\n  }\n\n  /**\n   * Returns the number of days between the same day next month and the same day the following month.\n   *\n   * @param dateId Reference dateId. Today is used by default.\n   */\n  export function getNumberOfDaysForNextMonth(dateId: string = DateIdUtil.getTodayId()): number {\n    return DateTimeUtil.getNumberOfDaysForNextMonth(convertToEpochMillis(dateId));\n  }\n\n\n}\n","/**\n * Util functions for random ID generation.\n */\n// TBD: Need a better way to generate unique IDs.\n// (Cf. UniqueIdUtil.)\nexport namespace RandomIdUtil {\n\n  // For now, we just use a random number.\n  // --> It can be converted to long on the server side.\n  export function id(): string {\n    return numberId().toString();\n    // return stringId();\n  }\n\n  // [MIN, MAX).\n  //  --> 12 digits\n  const MIN_NUMBER_ID = 100000000000;\n  const MAX_NUMBER_ID = 1000000000000;\n  export function numberId(): number {\n    let r = MIN_NUMBER_ID + Math.floor(Math.random() * (MAX_NUMBER_ID - MIN_NUMBER_ID));\n    return r;\n  }\n\n  // tbd: Use uuid or just number, or even alphanumeric string?\n  export function stringId(): string {\n    // let id = uuid();\n    // let id = numberId().toString();\n    let id = randomString();\n    return id;\n  }\n\n  export function uuid(): string {\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n      var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);\n      return v.toString(16);\n    });\n  }\n\n  const RANDOM_STRING_LENGTH: number = 12;\n  const _ALPHA_NUMERICS: string[] = [\n    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',\n    'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'\n    ];\n  const _ALPHANUM_ARRAY_SIZE: number = _ALPHA_NUMERICS.length;\n  function randomString(len: number = RANDOM_STRING_LENGTH): string {\n    var str = '';\n    for (let i = 0; i < len; i++) {\n      let r = Math.floor(Math.random() * _ALPHANUM_ARRAY_SIZE);\n      str += _ALPHA_NUMERICS[r];\n    }\n    return str;\n  }\n\n}\n","/**\n * Util functions for random number generation.\n */\nexport namespace RandomNumberUtil {\n\n  export function randomIndex(list: any[]) : number {\n    if(! list) {\n      return -1;\n    }\n    let len = list.length;\n    let idx = Math.floor(Math.random() * len);\n    return idx;\n  }\n\n  export function randomElement(list: any[]) : any {\n    if(! list) {\n      return null;\n    }\n    let len = list.length;\n    let idx = Math.floor(Math.random() * len);\n    return list[idx];\n  }\n\n\n}\n","import { DateTimeUtil } from './date-time-util';\nimport { DateIdUtil } from './date-id-util';\n\n\n/**\n * Util functions for generating unique IDs.\n */\nexport namespace UniqueIdUtil {\n\n  // temporary implementation.\n  // The current implementation guarantees neither uniqueness nor monotonicity.\n  // --> TBD: need a better implementation.\n\n  // the primary purpose of this method is to provide a client-side id \n  //   for entities to be stored in DBs like CouchDB, for instance. \n  // The advantage of this implementation (say, over a random/uuid-based id)\n  //   is the ids are (more or less) ordered (in time).\n  //   (It is also a disadvantage at the same time \n  //    since this is not good as PK/Hash for most NoSQL databases.\n  //    --> In such a case, use \"random id\" instead.)\n  // (TBD: Add a runtime counter, to differentiate events within the same millisecond?\n  //    It has to monotonically increase, not just cyclic, over time.)\n  export function id(): string {\n    // // Use decimal\n    // let millis = (DateTimeUtil.getUnixEpochMillis() % 1000000000000);  // Remove the leading 1. \n    // let rand = Math.floor(Math.random() * 1000);\n    // // We'll end up with 15 digit numbers.  e.g.,   100 000 000 000 000\n    // let uid = millis * 1000 + rand; \n    // // return uid.toString();\n    // // Or, We'll end up with 16 digit string.  e.g.,   100 000 000 000 - 000\n    // // let strid = millis + '-' + rand; \n    // let str = uid.toString();\n    // let strid = str.substring(0, str.length - 3) + '-' + str.substr(str.length - 3);\n    // return strid;\n\n    // Use hexadecimal\n    let millis = (DateTimeUtil.getUnixEpochMillis() % 1000000000000);  // Remove the leading 1. \n    let rand = Math.floor(Math.random() * 100);\n    let uid = millis * 100 + rand;  // We'll end up with 14 digit numbers.  e.g.,   500 000 000 000 rr\n    // Convert to hex.\n    let strid = uid.toString(16);   // We will end up with 12-digit hex number.\n    return strid;\n  }\n\n}\n","import { throwError as observableThrowError, Observable } from 'rxjs';\n\nimport { catchError, map } from 'rxjs/operators';\nimport { Injectable, isDevMode, Inject, Optional } from '@angular/core';\nimport { APP_BASE_HREF } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\n\nimport { DevLogger as dl } from '../logging/dev-logger'; import isDL = dl.isLoggable;\nimport { UrlUtil } from '../core/url-util';\n\n\n/**\n * Global application config.\n * AppConfig needs to be initialized via APP_INITIALIZER.\n * For example,\n * providers: [\n *   { provide: APP_INITIALIZER, useFactory: (config: AppConfig) => () => config.load(), deps: [AppConfig], multi: true },\n * ]\n */\n@Injectable({\n  providedIn : 'root'\n})\nexport class AppConfig {\n\n  // hard-coded, for now.\n  private static CONFIG_FOLDER = 'configs/';\n  private static CONFIG_FILE_PROD = AppConfig.CONFIG_FOLDER + 'app-config.json';\n  private static CONFIG_FILE_DEV = AppConfig.CONFIG_FOLDER + 'app-config.dev.json';\n\n  private fileName: (string | null) = null;\n  private _config: { [key: string]: any } = {};\n\n  private _isLoaded: boolean = false;\n\n  // constructor(private http: HttpClient) {  // ???\n  constructor(\n    @Optional() @Inject(APP_BASE_HREF) private origin: string,  // Needed for SSR\n    private http: HttpClient,\n  ) {\n    if (!this.origin) {\n      this.origin = ''; // ???\n    }\n  }\n\n  public getConfigFile(): string {\n    if (!this.fileName) {\n      if (isDevMode()) {\n        this.fileName = this.origin + AppConfig.CONFIG_FILE_DEV;\n      } else {\n        this.fileName = this.origin + AppConfig.CONFIG_FILE_PROD;\n      }\n    }\n    // TBD: Use 'fallback' file? in case the config file does not exist?\n    return this.fileName;\n  }\n  // Note: Config file can be absolute or relative URLs...\n  public setConfigFile(_fileName: string): boolean {\n    // if(this._isLoaded) {\n    //   console.warn('Config already loaded.');\n    //   return false;\n    // }\n    // this.fileName = _fileName;\n    // return true;\n\n    // For SSR (Angular Universal):\n    // If the config file is given as a relative URL,\n    // add the leading host url if the platform is 'server'.\n    this.fileName = UrlUtil.isAbsolute(_fileName) ? _fileName : this.origin + _fileName;\n    this._isLoaded = false;\n    this._config = {};\n    return true;\n  }\n\n  /**\n   * Returns all config key-value pairs as a hash/object.\n   */\n  public get all(): { [key: string]: any } {\n    return this._config;\n  }\n\n  // tbd:\n  // For second level config values.\n  public sub(key: string): Object {\n    let s = this.all[key] as Object;\n    return s;\n  }\n\n  /**\n   * Returns the config value for the given key.\n   */\n  public get(key: string): (any | null) {\n    // if(this._config) {\n    return this._config[key];\n    // } else {\n    //   return null;\n    // }\n  }\n\n  public getString(key: string, defaultVal: string = null): (string | null) {\n    // return this.get(key) as string;\n    if (key in this._config) {\n      return this.get(key) as string;\n    } else {\n      return defaultVal;\n    }\n  }\n\n  public getNumber(key: string, defaultVal: number = 0): number {\n    // return this.get(key) as number;\n    if (key in this._config) {\n      return this.get(key) as number;\n    } else {\n      return defaultVal;\n    }\n  }\n  // public getNumber(key: string, defaultVal: number = 0): number {\n  //   let v = this.getString(key);\n  //   if(v) {\n  //     try {\n  //       return parseInt(v);\n  //     } catch(ex) {}\n  //   }\n  //   return defaultVal;\n  // }\n\n  // We use pretty strange logic.\n  // if it's a string and if it's 'true', return true.\n  // if it's a number and if it's not zero, return true.\n  // otherwise, return false.\n  public getBoolean(key: string, defaultVal: boolean = false): boolean {\n    // return this.get(key) as boolean;\n    if (key in this._config) {\n      return this.get(key) as boolean;\n    } else {\n      return defaultVal;\n    }\n  }\n  // public getBoolean(key: string): boolean {\n  //   let v = this.getString(key);\n  //   if(v) {\n  //     let b = v.toLowerCase();\n  //     if(b == 'true') {\n  //       return true;\n  //     } else {\n  //       try {\n  //         let n = parseInt(b);\n  //         if(n != 0) {\n  //           return true;\n  //         }\n  //       } catch(ex) {}\n  //     }\n  //   }\n  //   return false;\n  // }\n\n\n  /**\n   * Loads the config asynchronously.\n   */\n  public load() {\n    // tbd\n    const configFile = this.getConfigFile();\n    // const configFile = 'https://xxx/configs/app-config.json';\n    // tbd\n\n    return new Promise((resolve, reject) => {\n      let request = this.http.get(configFile);\n\n      isDL() && dl.log('request = ', request);\n\n      request.pipe(\n        map(data => {\n          isDL() && dl.log('data = ' + data);\n          // let json = (data as any).json();\n          // isDL() && dl.log('json = ' + json);\n          // return json;\n          return data || {};\n        }),\n        catchError((error: any) => {\n          isDL() && dl.log('Error reading ' + configFile);\n          isDL() && dl.log('error = ' + error);\n          // resolve(error);\n          reject(error);\n          return observableThrowError(error.json().error || 'Server error');\n        }))\n        .subscribe((responseData) => {\n          isDL() && dl.log('>>>>> responseData = ' + responseData);\n\n          // tbd:\n          // this.config = responseData;\n\n          // ???\n          this._config = {};\n          for (let k in responseData) {\n            this._config[k] = responseData[k];\n          }\n\n          // // temporary\n          // for(let k in this._config) {\n          //   if(isDL()) dl.log(`:::config::: key = ${k}; value = ${this._config[k]}`);\n          // }\n\n          this._isLoaded = true;\n          resolve(true);\n        });\n\n      // request\n      //   .subscribe(response => {\n      //     isDL() && dl.log('response = ', response);\n      //     let json = (response as any).json();\n      //     isDL() && dl.log('json = ' + json);\n\n      //     // this._config = json;\n      //     // ???\n      //     this._config = {};\n      //     for (let k in json) {\n      //       this._config[k] = json[k];\n      //     }\n\n      //     this._isLoaded = true;  // ???\n      //     resolve(true);\n      //   });\n    });\n  }\n}\n","\nimport { throwError as observableThrowError, Observable } from 'rxjs';\n\nimport { catchError, map } from 'rxjs/operators';\nimport { Injectable, isDevMode, Inject, Optional } from '@angular/core';\nimport { APP_BASE_HREF } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\n\nimport { DevLogger as dl } from '../logging/dev-logger'; import isDL = dl.isLoggable;\n\n\n/**\n * Config object (read from JSON).\n */\n// @Injectable()\nexport class CustomConfig {\n\n  // hard-coded, for now.\n  private static CONFIG_FOLDER = \"configs/\";\n  private static CONFIG_FILE_SUFFIX = \".json\";\n  private static CONFIG_FILE_PROD = CustomConfig.CONFIG_FOLDER + \"config\" + CustomConfig.CONFIG_FILE_SUFFIX;\n  private static CONFIG_FILE_DEV = CustomConfig.CONFIG_FOLDER + \"config.dev\" + CustomConfig.CONFIG_FILE_SUFFIX;\n\n  private _isLoaded: boolean = false;\n  private _config: { [key: string]: (Object | null) } = {};\n  private _fileName: (string | null) = null;\n\n  // constructor(private http: HttpClient) {  // ???\n  constructor(\n    @Optional() @Inject(APP_BASE_HREF) private origin: string,  // Needed for SSR\n    private http: HttpClient   // TBD: Use HttpClient...\n  ) {\n  }\n\n  private getConfigFile(): string {\n    if (!this._fileName) {\n      if (isDevMode()) {\n        this._fileName = this.origin + CustomConfig.CONFIG_FILE_DEV;\n      } else {\n        this._fileName = this.origin + CustomConfig.CONFIG_FILE_PROD;\n      }\n    }\n    return this._fileName;\n  }\n\n  // configFile: file name without \".json\" suffix.\n  // TBD: Support absolute URLs for custom config files.\n  public loadConfig(configFile: (string | null)): Promise<boolean> {\n    if (this._isLoaded) {\n      throw new Error(\"Already loaded\");\n    } else {\n      if (configFile) {\n        if (isDevMode()) {\n          this._fileName = this.origin + CustomConfig.CONFIG_FOLDER + configFile + \".dev\" + CustomConfig.CONFIG_FILE_SUFFIX;\n        } else {\n          this._fileName = this.origin + CustomConfig.CONFIG_FOLDER + configFile + CustomConfig.CONFIG_FILE_SUFFIX;\n        }\n      }\n      return this.load();\n    }\n  }\n\n  /**\n   * Use to get the data found in the second file (config file)\n   */\n  public get(key: string): (Object | null) {\n    if (this._isLoaded) {\n      return this._config[key];\n    } else {\n      return null;\n    }\n  }\n\n  public getString(key: string): (string | null) {\n    return this.get(key) as string;\n  }\n\n  public getNumber(key: string, defaultVal: number = 0): number {\n    let v = this.getString(key);\n    if (v) {\n      try {\n        return parseInt(v);\n      } catch (ex) { }\n    }\n    return defaultVal;\n  }\n\n  // We use pretty strange logic.\n  // if it's a string and if it's 'true', return true.\n  // if it's a number and if it's not zero, return true.\n  // otherwise, return false.\n  public getBoolean(key: string): boolean {\n    let v = this.getString(key);\n    if (v) {\n      let b = v.toLowerCase();\n      if (b === 'true') {\n        return true;\n      } else {\n        try {\n          let n = parseInt(b);\n          if (n !== 0) {\n            return true;\n          }\n        } catch (ex) { }\n      }\n    }\n    return false;\n  }\n\n\n  // TBD:\n  // Need a better implementation to load configs.\n  public load(): Promise<boolean> {\n    return new Promise((resolve, reject) => {\n      let request = this.http.get(this.getConfigFile());\n      if (request) {  // can request be null???\n        if (isDL()) dl.log(\"request = \", request);\n        request\n          .subscribe(response => {\n            if (isDL()) dl.log(\"response = \", response);\n            let json = (response as any).json();\n            if (isDL()) dl.log(\"json = \" + json);\n\n            this._config = json;\n            this._isLoaded = true;  // ???\n            resolve(true);\n          });\n      } else {\n        console.error('Config file is not valid: ' + this.getConfigFile());\n        resolve(true);\n      }\n    });\n  }\n}\n","import { Injectable, Injector, Inject, Optional } from '@angular/core';\nimport { APP_BASE_HREF } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nimport { DevLogger as dl } from '../logging/dev-logger'; import isDL = dl.isLoggable;\nimport { CustomConfig } from './custom-config';\n// import { isObservable } from '@angular/core/src/util/lang';\n\n\n/**\n * Factory for building a custom-config object.\n */\n@Injectable({\n  providedIn : 'root'\n})\nexport class ConfigFactory {\n\n  constructor(\n    @Optional() @Inject(APP_BASE_HREF) private origin: string,  // Needed for SSR\n    // private injector: Injector,\n    private http: HttpClient   // TBD: Use HttpClient...\n  ) {\n  }\n\n  // configFile: file name without \".json\" suffix.\n  // public buildConfig(configFile: string): Observable<CustomConfig> {\n\n  //   // ????\n  //   return Observable.create((obs) => {\n  //     // tbd: First implementation. Don't know if it even works....\n  //     // Need a better/correct way to do this....\n  //     let customConfig = new CustomConfig(this.http);\n  //     let promise = customConfig.loadConfig(configFile);\n  //     if(promise) {\n  //       promise.then((suc: boolean) => {\n  //         if(isDL()) dl.log(\"Build config suceeded.\");\n  //         return customConfig;\n  //       }).catch((err) => {\n  //         if(isDL()) dl.log(\"err = \" + err);\n  //       });\n  //     }\n  //   });\n\n  // }\n\n  // configFile: file name without \".json\" suffix.\n  public buildConfig(configFile: string): Observable<CustomConfig> {\n    // tbd: First implementation. Don't know if it even works....\n    // Need a better/correct way to do this....\n    let customConfig = new CustomConfig(this.origin, this.http);\n    let promise = customConfig.loadConfig(configFile);\n    return Observable.create((observer: any) => {\n      promise.then((suc) => {\n        if(isDL()) dl.log(\"Build config suceeded.\");\n        observer.next(customConfig);\n      }, (reason) => {\n        observer.error(reason);\n      })\n    })\n  }\n\n}\n","import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser, DOCUMENT } from '@angular/common';\n\n\n/**\n * Utility functions related to Web browser window/document objects.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class BrowserWindowService {\n\n  constructor(\n    @Inject(PLATFORM_ID) protected platformId: Object,\n    @Inject(DOCUMENT) private windowDocument\n  ) {\n  }\n\n  /**\n   * Returns browser window object if the app is running in the browser.\n   * Returns null otherwise.\n   */\n  public get window(): (Window | null) {\n    if (isPlatformBrowser(this.platformId)) {\n      return window;\n    } else {\n      return null;  // ???\n    }\n  }\n\n  /**\n   * Returns browser document object if the app is running in the browser.\n   * Returns null otherwise.\n   */\n  public get document(): (any | null) {\n    if (isPlatformBrowser(this.platformId)) {\n      // return this.window.document;\n      return this.windowDocument;\n    } else {\n      return null;  // ???\n    }\n  }\n\n}\n","import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport { DevLogger as dl } from '../common/logging/dev-logger'; import isDL = dl.isLoggable;\n\n\n/**\n * Utility functions related to browser localStorage object.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class LocalStorageService {\n\n  constructor( @Inject(PLATFORM_ID) protected platformId: Object) {\n  }\n\n  get hasStorage(): boolean {\n    return !!this.localStorage;\n  }\n\n  /**\n   * Returns browser localStorage object.\n   * Returns null if the localStorage object is not available or not accessible.\n   */\n  get localStorage(): (Storage | null) {\n    if (isPlatformBrowser(this.platformId)) {\n      return localStorage;\n    } else {\n      // if(isDL()) dl.log(\"localStorage not available.\");\n      return null;  // ??\n    }\n  }\n\n  get length(): number {\n    if (this.localStorage) {\n      return this.localStorage.length;\n    } else {\n      // if(isDL()) dl.log(\"get length ignored.\");\n      return 0;\n    }\n  }\n\n  key(index: number): (string | null) {\n    if (this.localStorage) {\n      return this.localStorage.key(index);\n    } else {\n      // if(isDL()) dl.log(`key() ignored. index = ${index}`);\n      return null;\n    }\n  }\n\n  getItem(key: string): (string | null) {\n    if (this.localStorage) {\n      try {\n        return this.localStorage.getItem(key);\n      } catch (ex) {\n        if(isDL()) dl.log(`getItem() failed. key = ${key}; ex = ${ex}`);\n        return null;\n      }\n    } else {\n      // if(isDL()) dl.log(`getItem() ignored. key = ${key}`);\n      return null;\n    }\n  }\n\n  get(key: string): (any | null) {\n    let value = this.getItem(key);\n    return value && JSON.parse(value);\n  }\n\n  setItem(key: string, value: string): void {\n    if (this.localStorage) {\n      try {\n        this.localStorage.setItem(key, value);\n      } catch (ex) {\n        if(isDL()) dl.log(`setItem() failed. key = ${key}; value = ${value}; ex = ${ex}`);\n      }\n    } else {\n      // if(isDL()) dl.log(`setItem() ignored. key = ${key}; value = ${value}`);\n    }\n  }\n\n  set(key: string, value: any): void {\n    try {\n      this.setItem(key, JSON.stringify(value));\n    } catch (ex) {\n      if(isDL()) dl.log(`set() failed. key = ${key}; value = ${value}; ex = ${ex}`);\n    }\n  }\n\n  removeItem(key: string): void {\n    if (this.localStorage) {\n      try {\n        this.localStorage.removeItem(key);\n      } catch (ex) {\n        if(isDL()) dl.log(`removeItem() failed. key = ${key}; ex = ${ex}`);\n      }\n    } else {\n      // if(isDL()) dl.log(`removeItem() ignored. key = ${key}`);\n    }\n  }\n\n  remove(key: string): void {\n    this.removeItem(key);\n  }\n\n  clear(): void {\n    if (this.localStorage) {\n      try {\n        this.localStorage.clear();\n      } catch (ex) {\n        if(isDL()) dl.log(`clear() failed. ex = ${ex}`);\n      }\n    } else {\n      // if(isDL()) dl.log(`clear() ignored.`);\n    }\n  }\n\n}\n","import { Component, ViewChild, Input, Output, EventEmitter } from '@angular/core';\n\nimport { DevLogger as dl } from '../common/logging/dev-logger'; import isDL = dl.isLoggable;\nimport { DateTimeUtil } from '../common/util/date-time-util';\n\n\n/**\n * Component for displaying the current year only.\n */\n@Component({\n  selector: 'common-date-year',\n  template: `\n    <span>{{year}}</span>\n`\n})\nexport class CommonDateYearComponent {\n\n  @Input(\"date\") date: Date;\n  year: number = 0;\n\n  constructor(\n  ) {\n    this.date = new Date();\n  }\n\n  ngOnInit() {\n    // if(isDL()) dl.log(\">>>>>> date = \" + this.date.toLocaleDateString());\n    this.year = DateTimeUtil.getYear(this.date);\n    // if(isDL()) dl.log(\">>>>>> year = \" + this.year);\n  }\n\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\n\nimport { AppConfig } from './common/config/app-config';\nimport { CustomConfig } from './common/config/custom-config';\nimport { ConfigFactory } from './common/config/config-factory';\nimport { BrowserWindowService } from './services/browser-window.service';\nimport { LocalStorageService } from './services/local-storage.service';\nimport { CommonDateYearComponent } from './components/common-date-year';\n\n\n@NgModule({\n  imports: [\n    CommonModule,\n    HttpClientModule,\n  ],\n  declarations: [\n    CommonDateYearComponent,\n  ],\n  exports: [\n    CommonDateYearComponent,\n  ]\n})\nexport class NgCoreCoreModule {\n  static forRoot(): ModuleWithProviders<NgCoreCoreModule> {\n    return {\n      ngModule: NgCoreCoreModule,\n      providers: [\n        AppConfig,\n        // CustomConfig,\n        ConfigFactory,\n        BrowserWindowService,\n        LocalStorageService\n      ]\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["isDL","dl","observableThrowError"],"mappings":"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"}