{"version":3,"file":"js/testimonials-2535a66605f0198ca71e.js","mappings":"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","sources":["webpack://uk-b2c/./node_modules/classnames/index.js","webpack://uk-b2c/./node_modules/date-fns/esm/constants/index.js","webpack://uk-b2c/./node_modules/date-fns/esm/locale/en-GB/_lib/formatLong/index.js","webpack://uk-b2c/./node_modules/date-fns/esm/locale/en-GB/index.js","webpack://uk-b2c/./node_modules/date-fns/esm/parseISO/index.js","webpack://uk-b2c/./node_modules/react-dom/client.js","webpack://uk-b2c/./app/javascript/src/UI/Testimonials.tsx","webpack://uk-b2c/./app/javascript/packs/testimonials.tsx","webpack://uk-b2c/./app/javascript/src/Icons/IconStar.tsx","webpack://uk-b2c/./app/javascript/src/shared/StarRating.tsx","webpack://uk-b2c/./app/javascript/src/utils.ts"],"sourcesContent":["/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n 'use strict';\n\n var hasOwn = {}.hasOwnProperty;\n var nativeCodeString = '[native code]';\n function classNames() {\n var classes = [];\n for (var i = 0; i < arguments.length; i++) {\n var arg = arguments[i];\n if (!arg) continue;\n var argType = typeof arg;\n if (argType === 'string' || argType === 'number') {\n classes.push(arg);\n } else if (Array.isArray(arg)) {\n if (arg.length) {\n var inner = classNames.apply(null, arg);\n if (inner) {\n classes.push(inner);\n }\n }\n } else if (argType === 'object') {\n if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n classes.push(arg.toString());\n continue;\n }\n for (var key in arg) {\n if (hasOwn.call(arg, key) && arg[key]) {\n classes.push(key);\n }\n }\n }\n }\n return classes.join(' ');\n }\n if (typeof module !== 'undefined' && module.exports) {\n classNames.default = classNames;\n module.exports = classNames;\n } else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n // register as 'classnames', consistent with npm package name\n define('classnames', [], function () {\n return classNames;\n });\n } else {\n window.classNames = classNames;\n }\n})();","/**\n * Days in 1 week.\n *\n * @name daysInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInWeek = 7;\n\n/**\n * Days in 1 year\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n *\n * @name daysInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInYear = 365.2425;\n\n/**\n * Maximum allowed time.\n *\n * @name maxTime\n * @constant\n * @type {number}\n * @default\n */\nexport var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * Milliseconds in 1 minute\n *\n * @name millisecondsInMinute\n * @constant\n * @type {number}\n * @default\n */\nexport var millisecondsInMinute = 60000;\n\n/**\n * Milliseconds in 1 hour\n *\n * @name millisecondsInHour\n * @constant\n * @type {number}\n * @default\n */\nexport var millisecondsInHour = 3600000;\n\n/**\n * Milliseconds in 1 second\n *\n * @name millisecondsInSecond\n * @constant\n * @type {number}\n * @default\n */\nexport var millisecondsInSecond = 1000;\n\n/**\n * Minimum allowed time.\n *\n * @name minTime\n * @constant\n * @type {number}\n * @default\n */\nexport var minTime = -maxTime;\n\n/**\n * Minutes in 1 hour\n *\n * @name minutesInHour\n * @constant\n * @type {number}\n * @default\n */\nexport var minutesInHour = 60;\n\n/**\n * Months in 1 quarter\n *\n * @name monthsInQuarter\n * @constant\n * @type {number}\n * @default\n */\nexport var monthsInQuarter = 3;\n\n/**\n * Months in 1 year\n *\n * @name monthsInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var monthsInYear = 12;\n\n/**\n * Quarters in 1 year\n *\n * @name quartersInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var quartersInYear = 4;\n\n/**\n * Seconds in 1 hour\n *\n * @name secondsInHour\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInHour = 3600;\n\n/**\n * Seconds in 1 minute\n *\n * @name secondsInMinute\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInMinute = 60;\n\n/**\n * Seconds in 1 day\n *\n * @name secondsInDay\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInDay = secondsInHour * 24;\n\n/**\n * Seconds in 1 week\n *\n * @name secondsInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInWeek = secondsInDay * 7;\n\n/**\n * Seconds in 1 year\n *\n * @name secondsInYear\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInYear = secondsInDay * daysInYear;\n\n/**\n * Seconds in 1 month\n *\n * @name secondsInMonth\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInMonth = secondsInYear / 12;\n\n/**\n * Seconds in 1 quarter\n *\n * @name secondsInQuarter\n * @constant\n * @type {number}\n * @default\n */\nexport var secondsInQuarter = secondsInMonth * 3;","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, d MMMM yyyy',\n long: 'd MMMM yyyy',\n medium: 'd MMM yyyy',\n short: 'dd/MM/yyyy'\n};\nvar timeFormats = {\n full: 'HH:mm:ss zzzz',\n long: 'HH:mm:ss z',\n medium: 'HH:mm:ss',\n short: 'HH:mm'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;","import formatDistance from \"../en-US/_lib/formatDistance/index.js\";\nimport formatRelative from \"../en-US/_lib/formatRelative/index.js\";\nimport localize from \"../en-US/_lib/localize/index.js\";\nimport match from \"../en-US/_lib/match/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United Kingdom).\n * @language English\n * @iso-639-2 eng\n * @author Alex [@glintik]{@link https://github.com/glintik}\n */\nvar locale = {\n code: 'en-GB',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1 /* Monday */,\n firstWeekContainsDate: 4\n }\n};\nexport default locale;","import { millisecondsInHour, millisecondsInMinute } from \"../constants/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function parseISO(argument, options) {\n var _options$additionalDi;\n requiredArgs(1, arguments);\n var additionalDigits = toInteger((_options$additionalDi = options === null || options === void 0 ? void 0 : options.additionalDigits) !== null && _options$additionalDi !== void 0 ? _options$additionalDi : 2);\n if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n throw new RangeError('additionalDigits must be 0, 1 or 2');\n }\n if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {\n return new Date(NaN);\n }\n var dateStrings = splitDateString(argument);\n var date;\n if (dateStrings.date) {\n var parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n if (!date || isNaN(date.getTime())) {\n return new Date(NaN);\n }\n var timestamp = date.getTime();\n var time = 0;\n var offset;\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n if (isNaN(time)) {\n return new Date(NaN);\n }\n }\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n if (isNaN(offset)) {\n return new Date(NaN);\n }\n } else {\n var dirtyDate = new Date(timestamp + time);\n // js parsed string assuming it's in UTC timezone\n // but we need it to be parsed in our timezone\n // so we use utc values to build date in our timezone.\n // Year values from 0 to 99 map to the years 1900 to 1999\n // so set year explicitly with setFullYear.\n var result = new Date(0);\n result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate());\n result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds());\n return result;\n }\n return new Date(timestamp + time + offset);\n}\nvar patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/\n};\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\nfunction splitDateString(dateString) {\n var dateStrings = {};\n var array = dateString.split(patterns.dateTimeDelimiter);\n var timeString;\n\n // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n if (array.length > 2) {\n return dateStrings;\n }\n if (/:/.test(array[0])) {\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(dateStrings.date.length, dateString.length);\n }\n }\n if (timeString) {\n var token = patterns.timezone.exec(timeString);\n if (token) {\n dateStrings.time = timeString.replace(token[1], '');\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n return dateStrings;\n}\nfunction parseYear(dateString, additionalDigits) {\n var regex = new RegExp('^(?:(\\\\d{4}|[+-]\\\\d{' + (4 + additionalDigits) + '})|(\\\\d{2}|[+-]\\\\d{' + (2 + additionalDigits) + '})$)');\n var captures = dateString.match(regex);\n // Invalid ISO-formatted year\n if (!captures) return {\n year: NaN,\n restDateString: ''\n };\n var year = captures[1] ? parseInt(captures[1]) : null;\n var century = captures[2] ? parseInt(captures[2]) : null;\n\n // either year or century is null, not both\n return {\n year: century === null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length)\n };\n}\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return new Date(NaN);\n var captures = dateString.match(dateRegex);\n // Invalid ISO-formatted string\n if (!captures) return new Date(NaN);\n var isWeekDate = !!captures[4];\n var dayOfYear = parseDateUnit(captures[1]);\n var month = parseDateUnit(captures[2]) - 1;\n var day = parseDateUnit(captures[3]);\n var week = parseDateUnit(captures[4]);\n var dayOfWeek = parseDateUnit(captures[5]) - 1;\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n var date = new Date(0);\n if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {\n return new Date(NaN);\n }\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\nfunction parseTime(timeString) {\n var captures = timeString.match(timeRegex);\n if (!captures) return NaN; // Invalid ISO-formatted time\n\n var hours = parseTimeUnit(captures[1]);\n var minutes = parseTimeUnit(captures[2]);\n var seconds = parseTimeUnit(captures[3]);\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000;\n}\nfunction parseTimeUnit(value) {\n return value && parseFloat(value.replace(',', '.')) || 0;\n}\nfunction parseTimezone(timezoneString) {\n if (timezoneString === 'Z') return 0;\n var captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n var sign = captures[1] === '+' ? -1 : 1;\n var hours = parseInt(captures[2]);\n var minutes = captures[3] && parseInt(captures[3]) || 0;\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n var date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n var fourthOfJanuaryDay = date.getUTCDay() || 7;\n var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\n}\nfunction validateDate(year, month, date) {\n return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));\n}\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;\n}\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function (c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function (c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}","import classNames from \"classnames\";\nimport React from \"react\";\n\nimport { StarRating } from \"../shared/StarRating\";\n\ninterface TestimonialCardProps {\n name: string;\n quote: string;\n rating?: number;\n image?: string;\n}\n\nexport interface TestimonialProps {\n testimonials: TestimonialCardProps[];\n className?: string;\n}\nexport const Testimonials = ({\n testimonials = [],\n className,\n}: TestimonialProps) => {\n return (\n \n {testimonials.map(({ name, quote, rating, image }) => (\n \n ))}\n \n );\n};\n\nfunction TestimonialCard({ name, quote, rating, image }: TestimonialCardProps) {\n return (\n
\n {image && (\n \n )}\n\n
\n
\n
\n {name}\n
\n \n
\n

\n “{quote}”\n

\n
\n
\n );\n}\n","import { createRoot } from \"react-dom/client\";\nimport * as React from \"react\";\nimport { TestimonialProps, Testimonials } from \"../src/UI/Testimonials\";\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const node = document.getElementById(\"testimonials\");\n if (!node) {\n return;\n }\n\n const root = createRoot(node);\n\n const data = JSON.parse(node.getAttribute(\"data\") || \"{}\");\n\n const className: string = data.classes || \"\";\n\n const testimonials: TestimonialProps[\"testimonials\"] = data?.testimonials\n ? data.testimonials.map(mapTestimonial)\n : getDefaultTestimonials();\n\n root.render(\n \n );\n});\n\ninterface RawTestimonial {\n name: string;\n image?: string;\n quote: string;\n rating?: string;\n location?: string;\n}\nfunction mapTestimonial(testimonial: RawTestimonial) {\n return {\n name: (testimonial.name || \"\") as string,\n quote: (testimonial.quote || \"\") as string,\n image: (testimonial?.image || \"\") as string,\n location: (testimonial?.location || \"\") as string,\n rating: Number(testimonial?.rating || \"5\"),\n };\n}\n\nfunction getDefaultTestimonials() {\n return [\n {\n name: \"Rhianne\",\n location: \"Birmingham\",\n quote:\n \"Can't recommend them highly enough. Half the cost of the big private names and scan booked, completed and results back in very quickly. Clinician giving the results gave sound practical follow on advice.\",\n rating: 5,\n image: \"/images/testimonials/rhianne.jpg\",\n },\n {\n name: \"Maureen\",\n location: \"Chelmsford\",\n quote:\n \"I booked a private scan over concern about headaches. The head & spine scan turned out to be fine. Treatment from booking to contact was efficient, courteous & friendly in all departments.\",\n rating: 5,\n image: \"/images/testimonials/maureen.jpg\",\n },\n {\n name: \"Torill\",\n location: \"Colchester\",\n quote:\n \"Quite EXCELLENT The whole process from booking to having the MRI images and the radiologists report in the right hands could not have been faster. The price was hugely competitive too!\",\n rating: 5,\n image: \"/images/testimonials/toril.jpg\",\n },\n ];\n}\n","import React, { ComponentProps } from \"react\";\n\ntype IconProps = Omit, \"src\">;\n\nexport function IconStar({ loading = \"lazy\", ...props }: IconProps) {\n return ;\n}\n","import classNames from \"classnames\";\nimport React from \"react\";\nimport { IconStar } from \"../Icons/IconStar\";\nimport { clamp } from \"../utils\";\n\ninterface StarRatingProps {\n rating?: number;\n max?: number;\n min?: number;\n className?: string;\n}\n\nexport function StarRating({\n min = 1,\n max = 5,\n rating = 0,\n className,\n}: StarRatingProps) {\n const clampedRating = clamp(Math.round(rating), min, max);\n\n const label = `Rating: ${rating} out of ${max} stars`;\n const wrapperStyles = classNames(\"flex\", className);\n\n return (\n
\n {[...Array(clampedRating)].map((_, i) => (\n \n ))}\n
\n );\n}\n","import { format, parseISO } from \"date-fns\";\nimport { enGB } from \"date-fns/locale\";\n\nexport const scrollToRef = (ref) =>\n ref.current.scrollIntoView({ behavior: \"smooth\" });\n\nexport const isNil = (\n item: T | null | undefined\n): item is null | undefined => item == null;\n\nexport const isNotNil = (item: T | null | undefined): item is T =>\n !isNil(item);\n\nexport const roundUpToNearest5 = (number) => {\n return Math.ceil(number / 5) * 5;\n};\n\n/**\n * Function to clamp a number between 2 values (min and max).\n *\n * @param num The number you want to clamp.\n * @param min The minimum value the number can be.\n * @param max The max value the number could be.\n *\n * @returns The clamped number value.\n */\nexport const clamp = (num: number, min = 0, max = 5) => {\n return Math.min(Math.max(num, min), max);\n};\n\nexport const slugify = (str: string) => {\n return str\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n};\n\nexport const wait = (ms: number) => new Promise((res) => setTimeout(res, ms));\n/**\n * Function to format an ISO date string.\n *\n * @param date The ISO date string to be formatted.\n * @param structure The structure used when formatting the date [see here](https://date-fns.org/v2.30.0/docs/format)\n * @param options\n * @returns The formatted ISO string.\n */\nexport function formatISOString(\n date: string,\n structure: string,\n options?: Parameters[\"2\"]\n) {\n const parsedDate = parseISO(date);\n\n return format(parsedDate, structure, { locale: enGB, ...options });\n}\n"],"names":["hasOwn","hasOwnProperty","classNames","classes","i","arguments","length","arg","argType","push","Array","isArray","inner","apply","toString","Object","prototype","includes","key","call","join","module","exports","default","Math","pow","millisecondsInMinute","millisecondsInHour","millisecondsInSecond","date","buildFormatLongFn","formats","full","long","medium","short","defaultWidth","time","dateTime","code","formatDistance","formatLong","formatRelative","localize","match","options","weekStartsOn","firstWeekContainsDate","parseISO","argument","_options$additionalDi","additionalDigits","RangeError","Date","NaN","dateStrings","dateString","timeString","array","split","patterns","dateTimeDelimiter","test","timeZoneDelimiter","substr","token","timezone","exec","replace","splitDateString","parseYearResult","regex","RegExp","captures","year","restDateString","parseInt","century","slice","parseYear","dateRegex","isWeekDate","dayOfYear","parseDateUnit","month","day","week","dayOfWeek","_year","validateWeekDate","isoWeekYear","setUTCFullYear","fourthOfJanuaryDay","getUTCDay","diff","setUTCDate","getUTCDate","dayOfISOWeekYear","daysInMonths","isLeapYearIndex","validateDate","validateDayOfYearDate","max","parseDate","isNaN","getTime","offset","timestamp","timeRegex","hours","parseTimeUnit","minutes","seconds","validateTime","parseTime","dirtyDate","result","setFullYear","getUTCFullYear","getUTCMonth","setHours","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","timezoneString","timezoneRegex","sign","_hours","validateTimezone","parseTimezone","value","parseFloat","m","createRoot","hydrateRoot","Testimonials","_ref","_ref$testimonials","testimonials","className","React","map","_ref2","name","quote","rating","image","TestimonialCard","_ref3","alt","concat","loading","src","StarRating","mapTestimonial","testimonial","location","Number","document","addEventListener","node","getElementById","root","data","JSON","parse","getAttribute","render","IconStar","_ref$loading","props","_objectWithoutProperties","_excluded","assign","_ref$min","min","_ref$max","_ref$rating","clampedRating","clamp","round","label","wrapperStyles","role","_toConsumableArray","_","isNil","item","isNotNil","roundUpToNearest5","number","ceil","num","undefined","slugify","str","toLowerCase","trim","wait","ms","Promise","res","setTimeout","formatISOString","structure","parsedDate","format","_objectSpread","locale","enGB"],"sourceRoot":""}