{"version":3,"file":"js/body_part_article-262f3ead0cf5eba92135.js","mappings":"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","sources":["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/./node_modules/remount/dist/remount.js","webpack://uk-b2c/./app/javascript/src/ArticleTableOfContents.tsx","webpack://uk-b2c/./app/javascript/src/throttle.ts","webpack://uk-b2c/./app/javascript/packs/body_part_article.tsx","webpack://uk-b2c/./app/javascript/src/utils.ts"],"sourcesContent":["/**\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}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom/client';\n\n/* global HTMLElement */\n\n/*\n * Adapted from https://cdn.jsdelivr.net/npm/@webcomponents/webcomponentsjs@2.0.4/custom-elements-es5-adapter.js\n * Rolling this in so we don't need another polyfill.\n */\n\nfunction inject() {\n if (window.HTMLElement && window.HTMLElement._babelES5Adapter || void 0 === window.Reflect || void 0 === window.customElements || window.customElements.hasOwnProperty('polyfillWrapFlushCallback')) {\n return;\n }\n const a = HTMLElement;\n window.HTMLElement = function () {\n return Reflect.construct(a, [], this.constructor);\n };\n HTMLElement.prototype = a.prototype;\n HTMLElement.prototype.constructor = HTMLElement;\n Object.setPrototypeOf(HTMLElement, a);\n HTMLElement._babelES5Adapter = true;\n}\n\n// @ts-check\n\n/**\n * The name of this strategy.\n * @type string\n */\n\nconst name$1 = 'CustomElements';\n\n/**\n * Registers a custom element.\n *\n * This creates a custom element (ie, a subclass of `window.HTMLElement`) and\n * registers it (ie, `window.customElements.define`).\n *\n * Events will be triggered when something interesting happens.\n *\n * @example\n * defineElement(\n * { component: Tooltip },\n * 'x-tooltip',\n * { onUpdate, onUnmount }\n * )\n *\n * @private\n * @param {ElementSpec} elSpec\n * @param {string} elName\n * @param {ElementEvents} events\n */\n\nfunction defineElement$1(elSpec, elName, events) {\n const onUpdate = events.onUpdate,\n onUnmount = events.onUnmount,\n onMount = events.onMount;\n inject();\n const attributes = elSpec.attributes || [];\n class ComponentElement extends HTMLElement {\n static get observedAttributes() {\n return ['props-json', ...attributes];\n }\n connectedCallback() {\n this._mountPoint = createMountPoint(this, elSpec);\n onMount(this, this._mountPoint);\n }\n disconnectedCallback() {\n if (!this._mountPoint) {\n return;\n }\n onUnmount(this, this._mountPoint);\n }\n attributeChangedCallback() {\n if (!this._mountPoint) {\n return;\n }\n onUpdate(this, this._mountPoint);\n }\n }\n\n // Supress warning when quiet mode is on\n if (elSpec.quiet && window.customElements.get(elName)) {\n return;\n }\n window.customElements.define(elName, ComponentElement);\n}\nfunction isSupported$1() {\n return !!(window.customElements && window.customElements.define);\n}\n\n/**\n * Creates a `` element that serves as the mounting point for React\n * components. If `shadow: true` is requested, it'll attach a shadow node.\n *\n * @private\n * @param {HTMLElement} element\n * @param {ElementSpec} elSpec\n */\n\nfunction createMountPoint(element, elSpec) {\n const shadow = elSpec.shadow;\n if (shadow && element.attachShadow) {\n const mountPoint = document.createElement('span');\n element.attachShadow({\n mode: 'open'\n }).appendChild(mountPoint);\n return mountPoint;\n } else {\n return element;\n }\n}\n\n/**\n * Check if Shadow DOM is supported.\n */\n\nfunction supportsShadow$1() {\n return !!(document && document.body && document.body.attachShadow);\n}\nvar CustomElementsStrategy = /*#__PURE__*/Object.freeze({\n __proto__: null,\n name: name$1,\n defineElement: defineElement$1,\n isSupported: isSupported$1,\n supportsShadow: supportsShadow$1\n});\n\n// @ts-check\n\n/**\n * Some implementations of MutationObserver don't have .forEach,\n * so we need our own `forEach` shim. This is usually the case with\n * polyfilled environments.\n *\n * @type { import('./types').Each }\n */\n\nfunction each( /** @type any */list, /** @type any */fn) {\n for (let i = 0, len = list.length; i < len; i++) {\n fn(list[i]);\n }\n}\n\n// @ts-check\n\n/**\n * The name of this strategy.\n * @type string\n */\n\nconst name = 'MutationObserver';\n\n/**\n * List of observers tags.\n * @type ObserverList\n */\n\nconst observers = {};\nfunction isSupported() {\n return 'MutationObserver' in window;\n}\n\n/**\n * Defines a custom element.\n *\n * @example\n * defineElement(\n * { component: MyComponent },\n * 'my-div',\n * {\n * onMount: () => {},\n * onUpdate: () => {},\n * onUnmount: () => {},\n * }\n * )\n *\n * @private\n * @param {ElementSpec} elSpec\n * @param {string} elName\n * @param {ElementEvents} events\n */\n\nfunction defineElement(elSpec, elName, events) {\n elName = elName.toLowerCase();\n\n // Maintain parity with what would happen in Custom Elements mode\n if (!isValidName(elName)) {\n if (elSpec.quiet) {\n return;\n }\n throw new Error(`Remount: \"${elName}\" is not a valid custom element elName`);\n }\n if (observers[elName]) {\n if (elSpec.quiet) {\n return;\n }\n throw new Error(`Remount: \"${elName}\" is already registered`);\n }\n const observer = new MutationObserver( /** @type MutationCallback */mutations => {\n each(mutations, ( /** @type MutationRecord */mutation) => {\n each(mutation.addedNodes, ( /** @type Node */node) => {\n if (isElement(node)) {\n checkForMount(node, elName, events);\n }\n });\n });\n });\n observer.observe(document.body, {\n childList: true,\n subtree: true\n });\n observers[elName] = /* true */observer;\n function mountElementsInDOM() {\n const nodes = document.getElementsByTagName(elName);\n each(nodes, ( /** @type HTMLElement */node) => checkForMount(node, elName, events));\n }\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n mountElementsInDOM();\n } else {\n window.addEventListener('DOMContentLoaded', mountElementsInDOM);\n }\n}\n\n/**\n * Checks if this new element should fire an `onUpdate` hook.\n * Recurses down to its descendant nodes.\n *\n * @param {HTMLElement} node\n * @param {string} elName\n * @param {ElementEvents} events\n */\n\nfunction checkForMount(node, elName, events) {\n if (node.nodeName.toLowerCase() === elName) {\n // It's a match!\n events.onMount(node, node);\n observeForUpdates(node, events);\n observeForRemoval(node, events);\n } else if (node.children && node.children.length) {\n // Recurse down into the other additions\n each(node.children, ( /** @type HTMLElement */subnode) => {\n if (isElement(subnode)) {\n checkForMount(subnode, elName, events);\n }\n });\n }\n}\n\n/**\n * Observes for any changes in attributes.\n *\n * @param {Element} node\n * @param {ElementEvents} events\n */\n\nfunction observeForUpdates(node, events) {\n const onUpdate = events.onUpdate;\n const observer = new MutationObserver( /** @type MutationCallback */mutations => {\n each(mutations, ( /** @type MutationRecord */mutation) => {\n const targetNode = mutation.target;\n if (isElement(targetNode)) {\n onUpdate(targetNode, targetNode);\n }\n });\n });\n observer.observe(node, {\n attributes: true\n });\n}\n\n/**\n * Observes a node's parent to wait until the node is removed\n * @param {HTMLElement} node\n * @param {ElementEvents} events\n */\n\nfunction observeForRemoval(node, events) {\n const onUnmount = events.onUnmount;\n const parent = node.parentNode;\n\n // Not sure when this can happen, but let's add this for type safety\n if (!parent) {\n return;\n }\n const observer = new MutationObserver( /** @type MutationCallback */mutations => {\n each(mutations, ( /** @type MutationRecord */mutation) => {\n each(mutation.removedNodes, ( /** @type Node */subnode) => {\n if (node !== subnode) {\n return;\n }\n if (isElement(node)) {\n // @ts-ignore TypeScript expects 0 arguments...?\n observer.disconnect(parent);\n onUnmount(node, node);\n }\n });\n });\n });\n observer.observe(parent, {\n childList: true,\n subtree: true\n });\n}\n\n/**\n * Validate a custom tag.\n *\n * Since Remount can work with either Custom Elements or MutationObserver API's,\n * it'd be wise if we rejected element names that won't work in Custom Elements\n * mode (even if we're using MutationObserver mode).\n *\n * @param {string} elName\n * @returns {boolean}\n *\n * @example\n * isValidName('div') // => false\n * isValidName('my-div') // => true\n * isValidName('123-456') // => false\n * isValidName('my-123') // => true\n *\n * @private\n */\n\nfunction isValidName(elName) {\n return !!(elName.indexOf('-') !== -1 && elName.match(/^[a-z][a-z0-9-]*$/));\n}\n\n/**\n * Shadow DOM is not supported with the Mutation Observer strategy.\n */\n\nfunction supportsShadow() {\n return false;\n}\n\n/**\n * Checks if a given Node is an HTMLElement.\n *\n * It's possible that a mutation's `addedNodes` return something that isn't an\n * HTMLElement.\n *\n * @param {any} node\n * @returns {node is HTMLElement}\n */\n\nfunction isElement(node) {\n if (node) {\n return true;\n }\n return false;\n}\nvar MutationObserverStrategy = /*#__PURE__*/Object.freeze({\n __proto__: null,\n name: name,\n observers: observers,\n isSupported: isSupported,\n defineElement: defineElement,\n supportsShadow: supportsShadow\n});\n\n// @ts-check\n\n/**\n * Cache of the strategy determined by `getStrategy()`.\n * @type {Strategy | null | undefined}\n */\n\nlet cachedStrategy;\n\n/**\n * Detect what API can be used.\n *\n * @example\n * Remount.getStrategy().name\n */\n\nfunction getStrategy() {\n if (cachedStrategy) {\n return cachedStrategy;\n }\n const StrategyUsed = [CustomElementsStrategy, MutationObserverStrategy].find(strategy => !!strategy.isSupported());\n if (!StrategyUsed) {\n console.warn(\"Remount: This browser doesn't support the \" + 'MutationObserver API or the Custom Elements API. Including ' + 'polyfills might fix this. Remount elements will not work. ' + 'https://github.com/rstacruz/remount');\n }\n cachedStrategy = StrategyUsed;\n return StrategyUsed;\n}\n\n/**\n * Registers custom elements and links them to React components.\n * @param {ElementMap} components\n * @param {Defaults=} defaults\n *\n * @example\n * define({ 'x-tooltip': Tooltip })\n *\n * @example\n * define(\n * { 'x-tooltip': Tooltip },\n * { attributes: ['title', 'body'] }\n * )\n */\n\nfunction define(components, defaults) {\n const Strategy = getStrategy();\n if (!Strategy) {\n return;\n }\n Object.keys(components).forEach(( /** @type string */name) => {\n // Construct the specs for the element.\n // (eg, { component: Tooltip, attributes: ['title'] })\n /** @type ElementSpec */\n const elSpec = Object.assign({}, defaults, toElementSpec(components[name]));\n\n /** @type Adapter | null | undefined */\n const adapter = elSpec.adapter;\n if (!adapter) throw new Error('No suitable adapter found');\n\n // Define a custom element.\n Strategy.defineElement(elSpec, name, {\n onMount(element, mountPoint) {\n const props = getProps(element, elSpec.attributes);\n if (elSpec.shadow && elSpec.retarget) {\n adapter.mount(elSpec, mountPoint, props, element);\n } else {\n adapter.mount(elSpec, mountPoint, props, null);\n }\n },\n onUpdate(element, mountPoint) {\n const props = getProps(element, elSpec.attributes);\n adapter.update(elSpec, mountPoint, props, null);\n },\n onUnmount(element, mountPoint) {\n adapter.unmount(elSpec, mountPoint);\n }\n });\n });\n}\n\n/**\n * Coerces something into an `ElementSpec` type.\n *\n * @param {ElementSpec | Component} thing\n * @returns {ElementSpec}\n * @private\n *\n * @example\n * toElementSpec(Tooltip)\n * // => { component: Tooltip }\n *\n * toElementSpec({ component: Tooltip })\n * // => { component: Tooltip }\n */\n\nfunction toElementSpec(thing) {\n if (isElementSpec(thing)) {\n return thing;\n }\n return {\n component: thing\n };\n}\n\n/**\n * Checks if a given `spec` is an ElementSpec.\n *\n * @param {any} spec\n * @returns {spec is ElementSpec}\n */\n\nfunction isElementSpec(spec) {\n return typeof spec === 'object' && spec.component;\n}\n\n/**\n * Returns properties for a given HTML element.\n *\n * @private\n * @param {HTMLElement} element\n * @param {string[] | null | undefined} attributes\n *\n * @example\n * getProps(div, ['name'])\n * // => { name: 'Romeo' }\n */\n\nfunction getProps(element, attributes) {\n const rawJson = element.getAttribute('props-json');\n if (rawJson) {\n return JSON.parse(rawJson);\n }\n const names = attributes || [];\n return names.reduce(( /** @type PropertyMap */result, /** @type string */attribute) => {\n result[attribute] = element.getAttribute(attribute);\n return result;\n }, {});\n}\n\n// @ts-check\n\n/** @type {Map} */\nconst roots = new Map();\n\n/**\n * @param {ElementSpec} elSpec\n * @param {HTMLElement} mountPoint\n * @param {object} props\n * @param {HTMLElement | null} element\n */\n\nfunction mount(elSpec, mountPoint, props, element) {\n const reactElement = /*#__PURE__*/React.createElement(elSpec.component, props);\n const root = ReactDOM.createRoot(mountPoint);\n roots.set(mountPoint, root);\n root.render(reactElement);\n}\n\n/**\n * Updates a custom element by calling `ReactDOM.render()`.\n * @private\n *\n * @param {ElementSpec} elSpec\n * @param {HTMLElement} mountPoint\n * @param {object} props\n * @param {HTMLElement | null} element\n */\n\nfunction update(elSpec, mountPoint, props, element) {\n const reactElement = /*#__PURE__*/React.createElement(elSpec.component, props);\n const root = roots.get(mountPoint);\n if (root) root.render(reactElement);\n}\n\n/**\n * Unmounts a component.\n * @private\n *\n * @param {ElementSpec} elSpec\n * @param {HTMLElement} mountPoint\n */\n\nfunction unmount(elSpec, mountPoint) {\n const root = roots.get(mountPoint);\n if (!root) return;\n root.unmount();\n roots.delete(mountPoint);\n}\nvar ReactAdapter = /*#__PURE__*/Object.freeze({\n __proto__: null,\n mount: mount,\n update: update,\n unmount: unmount\n});\n\n/** @typedef { import('./types').ElementMap } ElementMap */\n\n/**\n * @param {ElementMap} components\n * @param {Defaults=} defaults\n */\n\nfunction defineReact() {\n let components = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return define(components, _objectSpread({\n adapter: ReactAdapter\n }, options));\n}\nexport { defineReact as define, getStrategy };","import { pipe } from \"fp-ts/lib/function\";\nimport * as A from \"fp-ts/Array\";\nimport * as O from \"fp-ts/Option\";\nimport * as Eq from \"fp-ts/Eq\";\nimport * as React from \"react\";\nimport { slugify } from \"./utils\";\nimport { throttle } from \"./throttle\";\nimport * as classNames from \"classnames\";\n\ninterface Props {\n articleContainerId: string;\n}\n\n/**\n * Iterates through all the elements in an article, assigning each\n * one a section ID. Allows keeping track of which section a user\n * is viewing based on the elements that are visible in the viewport.\n *\n * If the element encountered is an H2 update the current section ID.\n * For all other elements assign the ID to it using the `data-section`\n * attribute.\n *\n * @param article\n */\nconst assignChildSectionIds = (article: HTMLElement) => {\n Array.from(article.children).reduce((sectionId: string | null, element) => {\n if (element.tagName === \"H2\") {\n // the current H2 determines the current section we're in.\n return element.id;\n }\n if (sectionId) {\n // continue to assign the current section ID to all non-H2 elements\n element.setAttribute(\"data-section\", sectionId);\n }\n return sectionId;\n }, null);\n};\n\nconst isElementInViewport = (el: HTMLElement) => {\n var rect = el.getBoundingClientRect();\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <=\n (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n};\n\nconst getSectionId = (el: HTMLElement) => {\n return O.fromNullable(\n el.tagName === \"H2\" ? el.id : el.getAttribute(\"data-section\")\n );\n};\n\n/**\n * Dynamically generates a table of contents for an article by querying all\n * the `h2`s in the target element, generating a slug to assign to as an ID\n * and using the IDs to render a list of links to each heading.\n */\nexport const ArticleTableOfContents: React.FC = ({\n articleContainerId,\n}) => {\n const [headings, setHeadings] = React.useState<\n Array\n >([]);\n\n const [currentSection, setCurrentSection] = React.useState(\"\");\n\n React.useEffect(() => {\n // scrollspy behaviour\n const articleContainer = document.getElementById(articleContainerId);\n if (!articleContainer) {\n return;\n }\n\n const updateActiveSection = throttle(() => {\n pipe(\n Array.from(articleContainer.children),\n // find the first element that corresponds to a section that's visible\n A.findFirst(\n (el: HTMLElement) =>\n O.isSome(getSectionId(el)) && isElementInViewport(el)\n ),\n O.chain(getSectionId),\n O.map(setCurrentSection)\n );\n }, 10);\n\n updateActiveSection();\n\n window.addEventListener(\"scroll\", updateActiveSection);\n\n return () => window.removeEventListener(\"scroll\", updateActiveSection);\n }, [articleContainerId]);\n\n React.useEffect(() => {\n const articleContainer = document.getElementById(articleContainerId);\n\n if (!articleContainer) {\n return;\n }\n\n const headingElements = articleContainer.querySelectorAll(\"h2\");\n\n // Extract the headings from the article by iterating over the\n // H2s and generating an ID for each headings\n const headings = pipe(\n Array.from(headingElements.entries()),\n A.filterMap(([, heading]) => {\n const headingTitle = heading.textContent;\n if (!headingTitle) {\n return O.none;\n }\n const slug = slugify(headingTitle);\n // set the ID of the h2 element to the slug of its content\n // so we can link to it\n heading.id = slug;\n return O.some([slug, headingTitle] as const);\n }),\n A.uniq(Eq.fromEquals(([slug1], [slug2]) => slug1 === slug2))\n );\n\n assignChildSectionIds(articleContainer);\n setHeadings(headings);\n }, [articleContainerId]);\n\n if (A.isEmpty(headings)) {\n return null;\n }\n\n return (\n \n );\n};\n","export interface ThrottleOptions {\n /**\n * Fire immediately on the first call.\n */\n start?: boolean;\n /**\n * Fire as soon as `wait` has passed.\n */\n middle?: boolean;\n /**\n * Cancel after the first successful call.\n */\n once?: boolean;\n}\n\ninterface Throttler {\n (...args: T): void;\n cancel(): void;\n}\n\nexport function throttle(\n callback: (...args: T) => unknown,\n wait = 0,\n { start = true, middle = true, once = false }: ThrottleOptions = {}\n): Throttler {\n let innerStart = start;\n let last = 0;\n let timer: ReturnType;\n let cancelled = false;\n function fn(this: unknown, ...args: T) {\n if (cancelled) return;\n const delta = Date.now() - last;\n last = Date.now();\n\n if (start && middle && delta >= wait) {\n innerStart = true;\n }\n\n if (innerStart) {\n innerStart = false;\n callback.apply(this, args);\n if (once) fn.cancel();\n } else if ((middle && delta < wait) || !middle) {\n clearTimeout(timer);\n timer = setTimeout(\n () => {\n last = Date.now();\n callback.apply(this, args);\n if (once) fn.cancel();\n },\n !middle ? wait : wait - delta\n );\n }\n }\n fn.cancel = () => {\n clearTimeout(timer);\n cancelled = true;\n };\n return fn;\n}\n","import { define } from \"remount\";\nimport { ArticleTableOfContents } from \"../src/ArticleTableOfContents\";\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n define({\n \"article-table-of-contents\": ArticleTableOfContents,\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":["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","arguments","additionalDigits","RangeError","Object","prototype","toString","call","Date","NaN","dateStrings","dateString","timeString","array","split","patterns","dateTimeDelimiter","length","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","exports","createRoot","hydrateRoot","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_defineProperty","obj","key","arg","input","hint","prim","Symbol","toPrimitive","undefined","res","TypeError","String","Number","_toPrimitive","_toPropertyKey","defineProperty","configurable","writable","CustomElementsStrategy","freeze","__proto__","name","defineElement","elSpec","elName","events","onUpdate","onUnmount","onMount","window","HTMLElement","_babelES5Adapter","Reflect","customElements","hasOwnProperty","a","construct","this","constructor","setPrototypeOf","inject","attributes","ComponentElement","observedAttributes","connectedCallback","_mountPoint","element","shadow","attachShadow","mountPoint","document","createElement","mode","appendChild","createMountPoint","disconnectedCallback","attributeChangedCallback","quiet","get","define","isSupported","supportsShadow","body","each","list","fn","i","len","observers","checkForMount","node","nodeName","toLowerCase","MutationObserver","mutations","mutation","targetNode","target","isElement","observe","observeForUpdates","parent","parentNode","observer","removedNodes","subnode","disconnect","childList","subtree","observeForRemoval","children","MutationObserverStrategy","indexOf","isValidName","Error","addedNodes","mountElementsInDOM","getElementsByTagName","readyState","addEventListener","cachedStrategy","components","defaults","Strategy","StrategyUsed","find","strategy","console","warn","getStrategy","forEach","assign","thing","spec","component","toElementSpec","adapter","props","getProps","retarget","mount","update","unmount","rawJson","getAttribute","JSON","parse","reduce","attribute","roots","Map","ReactAdapter","reactElement","root","set","render","delete","defineReact","source","getOwnPropertyDescriptors","defineProperties","_objectSpread","getSectionId","el","O","tagName","id","ArticleTableOfContents","_ref","articleContainerId","_React$useState2","_slicedToArray","React","headings","setHeadings","_React$useState4","currentSection","setCurrentSection","articleContainer","getElementById","updateActiveSection","callback","timer","wait","_ref$start","start","_ref$middle","middle","_ref$once","once","innerStart","last","cancelled","_this","_len","args","Array","_key","delta","now","cancel","clearTimeout","setTimeout","throttle","pipe","from","A","rect","getBoundingClientRect","top","left","bottom","innerHeight","documentElement","clientHeight","right","innerWidth","clientWidth","isElementInViewport","removeEventListener","article","headingElements","querySelectorAll","entries","_ref2","heading","headingTitle","textContent","slug","slugify","Eq","_ref4","_ref5","sectionId","setAttribute","className","map","_ref8","_ref9","href","concat","classNames","isNil","item","isNotNil","roundUpToNearest5","number","ceil","clamp","num","min","str","trim","ms","Promise","formatISOString","structure","parsedDate","format","locale","enGB"],"sourceRoot":""}