{"version":3,"file":"utils.cjs","sources":["../../../../src/components/datepicker/utils.ts"],"sourcesContent":["import type { FocusEvent } from \"react\";\n\nconst dayMonthYearRegex = /^(\\d\\d?)[\\W](\\d\\d?)[\\W](\\d{4}|\\d{2})$/;\nconst yearMonthDayRegex = /^(\\d{4}|\\d{2})[\\W](\\d\\d?)[\\W](\\d\\d?)$/;\n\n/**\n * Format a Date object as a string in the format DatePicker expects.\n *\n * @param date the Date object to format\n * @return returns a date string with \"dd.mm.yyyy\"-format\n */\nexport function formatInput(date: Date): string {\n    const day = `${date.getDate()}`.padStart(2, \"0\");\n    const month = `${date.getMonth() + 1}`.padStart(2, \"0\");\n    return `${day}.${month}.${date.getFullYear()}`;\n}\n\n/**\n * Get the date segments from a string of unknown format\n *\n * @param input date as a string with unknown format\n * @returns an array of string elements [day, month, year]\n */\nconst getDateSegmentsFromString = (input: string): string[] | undefined => {\n    const dayMonthYear = dayMonthYearRegex.exec(input);\n\n    if (dayMonthYear) {\n        return dayMonthYear.slice(1, 4);\n    }\n\n    const yearMonthDay = yearMonthDayRegex.exec(input);\n\n    if (!yearMonthDay) {\n        return undefined;\n    }\n\n    // reverse to get the correct ordering\n    const slicedDateSegments = yearMonthDay.slice(1, 4);\n    slicedDateSegments.reverse();\n\n    return slicedDateSegments;\n};\n\n/**\n * Convert a date string to a Date object\n *\n * @param dateString date as string with format dd.mm.yyyy\n * @return a Date object representing the given date\n */\nexport function parseDateString(dateString?: string): Date | undefined {\n    if (!dateString) {\n        return undefined;\n    }\n\n    const inputDateSegments = getDateSegmentsFromString(dateString);\n\n    if (!inputDateSegments) {\n        return undefined;\n    }\n\n    const currentTwoDigitYear = Number.parseInt(\n        new Date().toLocaleString(\"no-NB\", { year: \"2-digit\" }),\n    );\n    const parseTwoDigitYear = (year: number) =>\n        year > currentTwoDigitYear ? year + 1900 : year + 2000;\n\n    const day = Number.parseInt(inputDateSegments[0], 10);\n    const month = Number.parseInt(inputDateSegments[1], 10) - 1;\n    const yearIn = Number.parseInt(inputDateSegments[2], 10);\n    const year = yearIn > 99 ? yearIn : parseTwoDigitYear(yearIn);\n\n    const generatedDate = new Date(year, month, day, 0, 0, 0);\n    // Days can \"overflow\" to next month/year in Date(). Return undefined if it does:\n    return generatedDate.getMonth() === month &&\n        generatedDate.getFullYear() === year\n        ? generatedDate\n        : undefined;\n}\n\n/**\n * Hjelpefunksjon for å se om en onBlur går utenfor DatePicker,\n * eller om den går til et interaktivt element inni DatePickeren.\n * @param {FocusEvent<HTMLButtonElement | HTMLInputElement>} e - Eventet fra onBlur og action.onBlur\n * @returns {boolean} true hvis e.relatedTarget er utenfor DatePicker\n */\nexport function isBlurTargetOutside(\n    e: FocusEvent<HTMLButtonElement | HTMLInputElement>,\n): boolean {\n    if (!e.relatedTarget) {\n        return true;\n    }\n\n    const targetRoot = e.target.closest(\".jkl-datepicker__input-wrapper\");\n    const relatedTargetRoot = e.relatedTarget.closest(\n        \".jkl-datepicker__input-wrapper\",\n    );\n\n    return relatedTargetRoot !== targetRoot;\n}\n"],"names":["dayMonthYearRegex","yearMonthDayRegex","date","getDate","padStart","getMonth","getFullYear","e","relatedTarget","targetRoot","target","closest","dateString","inputDateSegments","input","dayMonthYear","exec","slice","yearMonthDay","slicedDateSegments","reverse","getDateSegmentsFromString","currentTwoDigitYear","Number","parseInt","Date","toLocaleString","year","day","month","yearIn","generatedDate"],"mappings":"gFAEA,MAAMA,EAAoB,wCACpBC,EAAoB,4DAQnB,SAAqBC,GAGxB,MAAO,GAFK,GAAGA,EAAKC,YAAYC,SAAS,EAAG,QAC9B,GAAGF,EAAKG,WAAa,IAAID,SAAS,EAAG,QACzBF,EAAKI,eACnC,8BAsEO,SACHC,GAEA,IAAKA,EAAEC,cACH,OAAO,EAGX,MAAMC,EAAaF,EAAEG,OAAOC,QAAQ,kCAKpC,OAJ0BJ,EAAEC,cAAcG,QACtC,oCAGyBF,CACjC,0BAjDO,SAAyBG,GAC5B,IAAKA,EACD,OAGJ,MAAMC,EA/ByBC,KAC/B,MAAMC,EAAef,EAAkBgB,KAAKF,GAE5C,GAAIC,EACA,OAAOA,EAAaE,MAAM,EAAG,GAGjC,MAAMC,EAAejB,EAAkBe,KAAKF,GAE5C,IAAKI,EACD,OAIJ,MAAMC,EAAqBD,EAAaD,MAAM,EAAG,GACjD,OAAAE,EAAmBC,UAEZD,GAcmBE,CAA0BT,GAEpD,IAAKC,EACD,OAGJ,MAAMS,EAAsBC,OAAOC,UAC/B,IAAIC,MAAOC,eAAe,QAAS,CAAEC,KAAM,aAKzCC,EAAML,OAAOC,SAASX,EAAkB,GAAI,IAC5CgB,EAAQN,OAAOC,SAASX,EAAkB,GAAI,IAAM,EACpDiB,EAASP,OAAOC,SAASX,EAAkB,GAAI,IAC/Cc,EAAOG,EAAS,GAAKA,GANAH,EAM2BG,GAL3CR,EAAsBK,EAAO,KAAOA,EAAO,IAOhDI,EAAgB,IAAIN,KAAKE,EAAME,EAAOD,EAAK,EAAG,EAAG,GAR5BD,MAU3B,OAAOI,EAAc1B,aAAewB,GAChCE,EAAczB,gBAAkBqB,EAC9BI,OACA,CACV"}