{"version":3,"file":"obliczeniowo-elementary-utils.mjs","sources":["../../../../projects/components/utils/string.ts","../../../../projects/components/utils/validators.ts","../../../../projects/components/utils/data/chemical-elements.ts","../../../../projects/components/utils/obliczeniowo-elementary-utils.ts"],"sourcesContent":["export const firstToUpper = (text: string) => {\n  if (!text.length) {\n    return text;\n  }\n  return text.charAt(0).toUpperCase() + text.slice(1)\n}\n\nexport const allWordsFirstToUpper = (text: string) => {\n  return text.split(' ').map(text => firstToUpper(text)).join(' ');\n}\n\nexport const toCamelCase = (text: string) => {\n  return allWordsFirstToUpper(text.replace(/\\s/g, ' ').trim()).replace(/\\s/g, '');\n}","import { AbstractControl, UntypedFormGroup, ValidationErrors } from '@angular/forms';\n\nexport class OblValidators {\n  /**\n   * Expressions used to validate, you can override them on very start of your application to apply your own specific\n   * validation for e-mail or what so ever\n   */\n  static regs: { [name: string]: RegExp } = {\n    email: /^(([^<>()\\[\\]\\.,;:\\s@\\\"]+(\\.[^<>()\\[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i,\n    noWhiteSpaces: /^[^\\s]*$/,\n    login: /^[a-zA-Z0-9]*$/,\n    uLogin: /^[\\p{Alphabetic}0-9]*$/u\n  }\n\n  /**\n   * Test if email is valid\n   *\n   * In case you want to override it you can just change OblValidators.regs.email to what you want\n   *\n   * @example\n   *\n   * \"test@test.pl\" => null\n   * \"test@test\" => { 'invalid-email': true }\n   * \"test\" => { 'invalid-email': true }\n   * \"test@\" => { 'invalid-email': true }\n   */\n  static email(control: AbstractControl): ValidationErrors | null {\n    const email = control.value;\n    const ok = null;\n\n    if (!email) {\n      return ok;\n    }\n\n    if (email !== '' && !OblValidators.regs.email.test(email)) {\n      return { 'invalid-email': true };\n    }\n\n    return ok;\n  }\n\n  /**\n   * Test Polish NIP (number of task identify)\n   */\n  static nip(control: AbstractControl): ValidationErrors | null {\n    let nip: string = control.value?.toString() || '';\n\n    nip = nip.replace(/[\\ \\-]/gi, '');\n\n    if (nip.length !== 10) {\n      return { 'nip-length': true }\n    }\n\n    const weights = [6, 5, 7, 2, 3, 4, 5, 6, 7];\n    let sum = 0;\n    const controlNumber = parseInt(nip.substring(9, 10));\n    const weightCount = weights.length;\n\n    for (let i = 0; i < weightCount; i++) {\n      sum += (parseInt(nip.substr(i, 1)) * weights[i]);\n    }\n\n    return sum % 11 === controlNumber ? null : { 'nip-sum': true };\n  }\n\n  /**\n   * Test Polish PESEL number\n   */\n  static pesel(control: AbstractControl): ValidationErrors | null {\n    let pesel = control.value?.toString() || '';\n\n    pesel = pesel.replace(/[\\ \\-]/gi, '');\n\n    if (pesel.length !== 10) {\n      return { 'pesel-length': true }\n    }\n\n    const weight = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3];\n    let sum = 0;\n    const controlNumber = parseInt(pesel.substring(10, 11));\n\n    for (let i = 0; i < weight.length; i++) {\n      sum += (parseInt(pesel.substring(i, i + 1)) * weight[i]);\n    }\n\n    sum = sum % 10;\n\n    return (10 - sum) % 10 === controlNumber ? null : { 'pesel-sum': true };\n  }\n\n  /**\n   * Validate Polish REGON number\n   */\n  static regon(control: AbstractControl): ValidationErrors | null {\n    let rawRegon = control.value?.toString();\n\n    rawRegon = rawRegon.replace(/[\\ \\-]/gi, '');\n\n    const weights9 = [8, 9, 2, 3, 4, 5, 6, 7];\n    const weights14 = [2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8];\n\n    if (!rawRegon) {\n      return null;\n    }\n\n    const regon = rawRegon.toString().replace(/[^a-z\\d]/gi, '');\n\n    if (regon.length !== 9 && regon.length !== 14) {\n      return { 'regon-length': true };\n    }\n\n    // calculate checksum\n    let sum = 0;\n    weights9.forEach((weight, position) => {\n      const digit = Number(regon[position]);\n      sum += weight * digit;\n    });\n\n    const checksum = (sum % 11) % 10;\n\n    if (checksum !== Number(regon[8])) {\n      return { 'regon-checksum': true };\n    }\n\n    if (regon.length === 14) {\n      // calculate second checksum\n      let sum2 = 0;\n      weights14.forEach((weight, position) => {\n        const digit = Number(regon[position]);\n        sum2 += weight * digit;\n      });\n\n      const checksum2 = (sum2 % 11) % 10;\n\n      if (checksum2 !== Number(regon[13])) {\n        return { 'regon-checksum': true };\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Test if contains white spaces (space, tabulator, new line)\n   *\n   * @example\n   *\n   * \"test@#$%_01234\" => null\n   * \"test@#$% 01234\" => { 'white-spaces': true }\n   */\n  static noWhiteSpaces(control: AbstractControl): ValidationErrors | null {\n    return OblValidators.regs.noWhiteSpaces.test(control.value) ? null : { 'white-spaces': true };\n  }\n\n  /**\n   * Test if value from AbstractControl contain only any alphabetical unicode sign or number 0-9 excluding _\n   * this unicode version can have some problem on different types of browsers\n   *\n   * In case you want to override it you can just change OblValidators.regs.login to what you want\n   *\n   * @example\n   *\n   * \"zazolcGesiaJazn\" => null\n   * \"zażółćGęsiąJaźń\" => { 'non-digit-or-alphabetical': true }\n   * \"zazolcGesiaJazn0123456789\" => null\n   * \"zazolcGesiaJaznń0123456789_\" => { 'non-digit-or-alphabetical': true }\n   * \"zazolcGesiaJazn0123456789$%^\" => { 'non-digit-or-alphabetical': true }\n   * \"zazolc gesia jazn\" => { 'white-spaces': true }\n   */\n  static login(control: AbstractControl): ValidationErrors | null {\n    const err = OblValidators.noWhiteSpaces(control);\n\n    if (err) {\n      return err;\n    }\n\n    return OblValidators.regs.login.test(control.value) ? null : { 'non-digit-or-alphabetical': true };\n  }\n\n  /**\n   * Test if value from AbstractControl contain only any alphabetical unicode sign or number 0-9 excluding _\n   * this unicode version can have some problem on different types of browsers, if it's ok for you to have\n   * ASCII only version then please use login version\n   *\n   * In case you want to override it you can just change OblValidators.regs.uLogin to what you want\n   *\n   * @example\n   *\n   * \"zażółćGęsiąJaźń\" => null\n   * \"zażółćGęsiąJaźń0123456789\" => null\n   * \"zażółćGęsiąJaźń0123456789_\" => { 'non-digit-or-alphabetical': true }\n   * \"zażółćGęsiąJaźń0123456789$%^\" => { 'non-digit-or-alphabetical': true }\n   * \"zażółć gęsią jaźń\" => { 'white-spaces': true }\n   */\n  static uLogin(control: AbstractControl): ValidationErrors | null {\n    const err = OblValidators.noWhiteSpaces(control);\n\n    if (err) {\n      return err;\n    }\n\n    return OblValidators.regs.uLogin.test(control.value) ? null : { 'non-digit-or-alphabetical': true };\n  }\n\n  /**\n   * validate if values matching\n   */\n  static equalValidator(value: string) {\n    return (control: AbstractControl): { [key: string]: any } | null => {\n      if (control.value !== value) {\n        return { 'not-equal': true };\n      }\n      return null;\n    }\n  }\n\n  /**\n   * validate if value from form group with name is equal to value to validated field\n   */\n  static equalFormFieldValidator(form: UntypedFormGroup, name: string) {\n    return (control: AbstractControl): { [key: string]: any } | null => {\n      if (control.value !== form.get(name)?.getRawValue()) {\n        return { 'not-equal': true };\n      }\n      return null;\n    }\n  }\n}\n","export const symbols = [\n  'H',\n  'He',\n  'Li',\n  'Be',\n  'B',\n  'C',\n  'N',\n  'O',\n  'F',\n  'Ne',\n  'Na',\n  'Mg',\n  'Al',\n  'Si',\n  'P',\n  'S',\n  'Cl',\n  'Ar',\n  'K',\n  'Ca',\n  'Sc',\n  'Ti',\n  'V',\n  'Cr',\n  'Mn',\n  'Fe',\n  'Co',\n  'Ni',\n  'Cu',\n  'Zn',\n  'Ga',\n  'Ge',\n  'As',\n  'Se',\n  'Br',\n  'Kr',\n  'Rb',\n  'Sr',\n  'Y',\n  'Zr',\n  'Nb',\n  'Mo',\n  'Tc',\n  'Ru',\n  'Rh',\n  'Pd',\n  'Ag',\n  'Cd',\n  'In',\n  'Sn',\n  'Sb',\n  'Te',\n  'I',\n  'Xe',\n  'Cs',\n  'Ba',\n  'La',\n  'Ce',\n  'Pr',\n  'Nd',\n  'Pm',\n  'Sm',\n  'Eu',\n  'Gd',\n  'Tb',\n  'Dy',\n  'Ho',\n  'Er',\n  'Tm',\n  'Yb',\n  'Lu',\n  'Hf',\n  'Ta',\n  'W',\n  'Re',\n  'Os',\n  'Ir',\n  'Pt',\n  'Au',\n  'Hg',\n  'Tl',\n  'Pb',\n  'Bi',\n  'Po',\n  'At',\n  'Rn',\n  'Fr',\n  'Ra',\n  'Ac',\n  'Th',\n  'Pa',\n  'U',\n  'Np',\n  'Pu',\n  'Am',\n  'Cm',\n  'Bk',\n  'Cf',\n  'Es',\n  'Fm',\n  'Md',\n  'No',\n  'Lr',\n  'Rf',\n  'Db',\n  'Sg',\n  'Bh',\n  'Hs',\n  'Mt',\n  'Ds',\n  'Rg',\n  'Cn',\n  'Nh',\n  'Fl',\n  'Mc',\n  'Lv',\n  'Ts',\n  'Og',\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}