@oaknational/oak-components 0.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../node_modules/tslib/tslib.es6.js","../../src/styles/theme/color.ts","../../src/styles/helpers/parseColor.ts","../../src/styles/helpers/truthy.ts","../../src/styles/utils/responsiveStyle.ts","../../src/styles/utils/colorStyle.ts","../../src/styles/helpers/pxToRem.ts","../../src/styles/theme/spacing.ts","../../src/styles/helpers/parseSpacing.ts","../../src/styles/utils/positionStyle.ts","../../src/styles/utils/sizeStyle.ts","../../src/styles/utils/spacingStyle.ts","../../src/styles/theme/borders.ts","../../src/styles/helpers/parseBorder.ts","../../src/styles/helpers/parseBorderRadius.ts","../../src/styles/utils/borderStyle.ts","../../src/styles/utils/displayStyle.ts","../../src/styles/theme/dropShadow.ts","../../src/styles/helpers/parseDropShadow.ts","../../src/styles/utils/dropShadowStyle.ts","../../src/styles/theme/opacity.ts","../../src/styles/utils/opacityStyle.ts","../../src/styles/helpers/parseOpacity.ts","../../src/styles/utils/transformStyle.ts","../../src/styles/theme/transitions.ts","../../src/styles/utils/transitionStyle.ts","../../src/styles/helpers/parseTransitions.ts","../../src/styles/theme/typography.ts","../../src/styles/utils/typographyStyle.ts","../../src/styles/helpers/parseTypography.ts","../../src/styles/theme/zIndex.ts","../../src/styles/utils/zIndexStyle.ts","../../src/styles/helpers/parseZIndex.ts","../../src/components/base/OakBox/OakBox.tsx","../../src/styles/utils/flexStyle.ts","../../src/components/base/OakFlex/OakFlex.tsx","../../src/components/base/OakSpan/OakSpan.tsx","../../src/components/base/OakForm/OakForm.tsx","../../src/styles/helpers/parseColorFilter.ts","../../src/styles/utils/colorFilterStyle.tsx","../../src/components/base/OakImage/OakImage.tsx","../../src/components/base/OakTypography/OakTypography.tsx","../../src/components/base/OakHeading/OakHeading.tsx","../../src/components/base/OakP/OakP.tsx","../../src/components/base/OakUL/OakUL.tsx","../../src/components/base/OakOL/OakOL.tsx","../../src/styles/utils/listStyle.ts","../../src/components/base/OakLI/OakLI.tsx","../../src/components/base/OakLabel/OakLabel.tsx","../../src/components/base/OakIcon/OakIcon.tsx","../../src/components/base/OakGrid/OakGrid.tsx","../../src/components/base/OakGridArea/OakGridArea.tsx","../../src/components/base/OakMaxWidth/OakMaxWidth.tsx","../../src/components/base/OakCloudinaryImage/cloudinary.ts","../../src/components/base/OakCloudinaryImage/OakCloudinaryImage.tsx","../../src/components/base/OakScreenReader/OakScreenReader.tsx","../../src/components/ui/OakLoadingSpinner/OakLoadingSpinner.tsx","../../src/components/base/InternalButton/InternalButton.tsx","../../src/components/ui/InternalRectButton/InternalRectButton.tsx","../../src/components/ui/InternalRoundButton/InternalRoundButton.tsx","../../src/components/ui/OakRadioGroup/OakRadioGroup.tsx","../../src/components/ui/OakRadioButton/OakRadioButton.tsx","../../src/components/base/InternalCheckBox/InternalCheckBox.tsx","../../src/components/base/InternalCheckBoxLabel/InternalCheckBoxLabel.tsx","../../src/components/base/InternalCheckBoxWrapper/InternalCheckBoxWrapper.tsx","../../src/components/base/InternalTextInput/InternalTextInput.tsx","../../src/components/ui/OakTextInput/OakTextInput.tsx","../../src/components/ui/OakRoundIcon/OakRoundIcon.tsx","../../src/components/base/InternalTooltip/InternalTooltip.tsx","../../src/components/ui/OakTooltip/OakTooltip.tsx","../../src/components/ui/OakBackLink/OakBackLink.tsx","../../src/components/integrated/OakQuizCheckBox/OakQuizCheckBox.tsx","../../src/components/integrated/OakQuizRadioButton/OakQuizRadioButton.tsx","../../src/components/integrated/OakHintButton/OakHintButton.tsx","../../src/components/integrated/OakQuizHint/OakQuizHint.tsx","../../src/components/integrated/OakQuizFeedback/OakQuizFeedback.tsx","../../src/components/integrated/OakLessonBottomNav/OakLessonBottomNav.tsx","../../src/components/integrated/OakLessonTopNav/OakLessonTopNav.tsx","../../src/components/integrated/OakQuizCounter/OakQuizCounter.tsx","../../src/components/integrated/OakLessonLayout/OakLessonLayout.tsx","../../src/components/integrated/OakLessonNavItem/OakLessonNavItem.tsx","../../src/components/ui/OakBulletList/OakBulletList.tsx","../../src/components/ui/OakCheckBox/OakCheckBox.tsx","../../src/components/ui/OakFieldError/OakFieldError.tsx","../../src/components/ui/OakPrimaryButton/OakPrimaryButton.tsx","../../src/components/integrated/OakQuizTextInput/OakQuizTextInput.tsx","../../src/components/ui/OakSecondaryButton/OakSecondaryButton.tsx","../../src/components/ui/OakTertiaryButton/OakTertiaryButton.tsx","../../src/components/base/OakThemeProvider/OakThemeProvider.tsx","../../src/styles/theme/default.theme.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","export const oakColorTokens = {\n white: \"#ffffff\",\n grey10: \"#f9f9f9\",\n grey20: \"#f2f2f2\",\n grey30: \"#e4e4e4\",\n grey40: \"#cacaca\",\n grey50: \"#808080\",\n grey60: \"#575757\",\n grey70: \"#2d2d2d\",\n black: \"#222222\",\n oakGreen: \"#287c34\",\n mint: \"#bef2bd\",\n mint30: \"#ebfbeb\",\n mint50: \"#dff9de\",\n mint110: \"#93e892\",\n aqua: \"#b0e2de\",\n aqua30: \"#e7f6f5\",\n aqua50: \"#cee7e5\",\n aqua110: \"#7cd8d0\",\n lavender: \"#a0b6f2\",\n lavender30: \"#e3e9fb\",\n lavender50: \"#c6d1ef\",\n lavender110: \"#7c9aec\",\n pink: \"#deb7d5\",\n pink30: \"#f5e9f2\",\n pink50: \"#e5d1e0\",\n pink110: \"#cf9cc3\",\n lemon: \"#ffe555\",\n lemon30: \"#fff7cc\",\n lemon50: \"#f6e8a0\",\n lemon110: \"#fbd60e\",\n amber: \"#ff934e\",\n amber30: \"#ffece0\",\n amber50: \"#ffc8a6\",\n red: \"#dd0035\",\n red30: \"#f8d8e0\",\n red50: \"#ee809a\",\n navy: \"#0d24c4\",\n navy110: \"#0a1d9d\",\n navy120: \"#081676\",\n blue: \"#374cf1\",\n magenta: \"#d02aa7\",\n purple: \"#845ad9\",\n teal: \"#037b7d\",\n transparent: \"transparent\",\n};\n\nexport type OakColorToken = keyof typeof oakColorTokens;\n\n/**\n *\n * Use this tool to convert Hex to color filter values https://codepen.io/sosuke/pen/Pjoqqp\n *\n */\n\nexport const oakColorFilterTokens = {\n black:\n \"invert(10%) sepia(1%) saturate(236%) hue-rotate(314deg) brightness(95%) contrast(91%)\",\n red: \"invert(13%) sepia(78%) saturate(5255%) hue-rotate(337deg) brightness(88%) contrast(111%)\",\n oakGreen:\n \"invert(37%) sepia(16%) saturate(1947%) hue-rotate(77deg) brightness(100%) contrast(88%)\",\n white:\n \"invert(98%) sepia(98%) saturate(0%) hue-rotate(328deg) brightness(102%) contrast(102%)\",\n grey40:\n \"invert(92%) sepia(0%) saturate(581%) hue-rotate(147deg) brightness(94%) contrast(80%)\",\n grey50:\n \"invert(54%) sepia(0%) saturate(38%) hue-rotate(176deg) brightness(92%) contrast(91%)\",\n};\n\nexport type OakColorFilterToken = keyof typeof oakColorFilterTokens;\n\nexport const oakUiRoleTokens = [\n \"text-primary\",\n \"text-subdued\",\n \"text-error\",\n \"text-disabled\",\n \"text-link-active\",\n \"text-link-hover\",\n \"text-link-visited\",\n \"text-link-pressed\",\n \"text-inverted\",\n \"text-success\",\n \"text-warning\",\n \"bg-primary\",\n \"bg-neutral\",\n \"bg-neutral-stronger\",\n \"bg-btn-primary\",\n \"bg-btn-primary-hover\",\n \"bg-btn-primary-disabled\",\n \"bg-btn-secondary\",\n \"bg-btn-secondary-hover\",\n \"bg-btn-secondary-disabled\",\n \"bg-icon\",\n \"bg-icon-hover\",\n \"bg-decorative1-main\",\n \"bg-decorative1-subdued\",\n \"bg-decorative1-very-subdued\",\n \"bg-decorative2-main\",\n \"bg-decorative2-subdued\",\n \"bg-decorative2-very-subdued\",\n \"bg-decorative3-main\",\n \"bg-decorative3-subdued\",\n \"bg-decorative3-very-subdued\",\n \"bg-decorative4-main\",\n \"bg-decorative4-subdued\",\n \"bg-decorative4-very-subdued\",\n \"bg-decorative5-main\",\n \"bg-decorative5-subdued\",\n \"bg-decorative5-very-subdued\",\n \"bg-correct\",\n \"bg-incorrect\",\n \"icon-main\",\n \"icon-inverted\",\n \"icon-disabled\",\n \"icon-brand\",\n \"icon-success\",\n \"icon-error\",\n \"icon-warning\",\n \"border-primary\",\n \"border-inverted\",\n \"border-neutral\",\n \"border-brand\",\n \"border-success\",\n \"border-error\",\n \"border-warning\",\n \"border-decorative1\",\n \"border-decorative1-stronger\",\n \"border-decorative2\",\n \"border-decorative2-stronger\",\n \"border-decorative3\",\n \"border-decorative3-stronger\",\n \"border-decorative4\",\n \"border-decorative4-stronger\",\n \"border-decorative5\",\n \"border-decorative5-stronger\",\n \"border-decorative6\",\n \"border-decorative6-stronger\",\n \"transparent\",\n] as const;\n\nexport type OakUiRoleToken = (typeof oakUiRoleTokens)[number];\n\nexport type UiRoleMap = Record<\n OakUiRoleToken,\n OakColorToken | null | undefined\n>;\n\nexport type OakCombinedColorToken = OakColorToken | OakUiRoleToken;\n","import {\n OakColorToken,\n OakCombinedColorToken,\n OakUiRoleToken,\n oakColorTokens,\n oakUiRoleTokens,\n} from \"@/styles/theme/color\";\nimport { PropsWithTheme } from \"@/styles/theme/theme\";\n\n/**\n * - takes any of color token\n * - if an OakColor derives and returns the corresponding css value\n * - if an OakUiRole derives returns a function that takes the current theme and returns the corresponding css value\n */\nfunction parseColor(): undefined;\nfunction parseColor(\n value?: OakCombinedColorToken | null,\n): (props: PropsWithTheme) => string;\nfunction parseColor(\n value?: OakCombinedColorToken | null,\n): ((props: PropsWithTheme) => string) | undefined;\nfunction parseColor(value?: OakCombinedColorToken | null) {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (value in oakColorTokens) {\n return oakColorTokens[value as OakColorToken];\n }\n\n if (oakUiRoleTokens.includes(value as OakUiRoleToken)) {\n return ({ theme }: PropsWithTheme) => {\n const c = theme.uiColors[value as OakUiRoleToken];\n return oakColorTokens[c as OakColorToken];\n };\n }\n}\n\nexport { parseColor };\n","// @see https://stackoverflow.com/questions/47632622/typescript-and-filter-boolean\n\nexport type Truthy<T> = T extends false | \"\" | 0 | null | undefined ? never : T; // from lodash\n\n/**\n *\n * @description truthy takes a value and returns true|false with the correct type\n * It's useful, for example, when filtering out null values from an array.\n * Typescript compiler needs a hint to realise there aren't any more null values.\n * [{ foo: \"bar\" }, null]<Record | null>[].filter(truthy) // [{ foo: \"bar\"}]<Record>[]\n */\nexport function truthy<T>(value: T): value is Truthy<T> {\n return !!value;\n}\n","import {\n css,\n DefaultTheme,\n Interpolation,\n ThemedStyledProps,\n} from \"styled-components\";\n\nimport { truthy } from \"@/styles/helpers/truthy\";\nimport { PropsWithTheme } from \"@/styles/theme/theme\";\n\nconst breakpointsByName = {\n small: 750,\n large: 1280,\n};\n\nexport const breakpoints = Object.values(breakpointsByName).sort((a, b) =>\n a > b ? 1 : -1,\n);\n\nexport type BreakpointName = keyof typeof breakpointsByName;\n\nexport const getBreakpoint = (\n breakpointName: keyof typeof breakpointsByName,\n) => {\n return breakpointsByName[breakpointName];\n};\n\nexport type Device = \"mobile\" | \"tablet\" | \"desktop\";\n\nconst mediaQueries: Record<Device, string> = {\n mobile: `(max-width: ${getBreakpoint(\"small\") - 1}px)`,\n tablet: `(min-width: ${getBreakpoint(\"small\")}px and max-width: ${\n getBreakpoint(\"large\") - 1\n }px)`,\n desktop: `(min-width: ${getBreakpoint(\"large\")}px)`,\n};\n\nexport const getMediaQuery = (device: Device) => {\n return mediaQueries[device];\n};\n\nexport type ResponsiveValues<Value> = (Value | null) | (Value | null)[];\n\ntype Generic = string | number | undefined | null;\n\nexport const responsiveStyle =\n <Props, T extends Generic>(\n attr: string,\n getValues: (props: Props) => ResponsiveValues<T | undefined | null>,\n parse:\n | ((unparsed: T | undefined | null) => Generic)\n | ((\n unparsed: T | undefined | null,\n ) => (props: PropsWithTheme) => Generic) = (x) => x,\n ) =>\n (props: Props): Interpolation<ThemedStyledProps<Props, DefaultTheme>> => {\n const attrCss = (value: T | undefined | null) =>\n typeof value === \"undefined\"\n ? undefined\n : css`\n ${attr}: ${parse(value)};\n `;\n const values = getValues(props);\n if (typeof values === \"undefined\") {\n return undefined;\n }\n if (!Array.isArray(values)) {\n return css`\n ${attrCss(values)}\n `;\n }\n if (values.length === 0) {\n return [];\n }\n\n return [\n css`\n ${attrCss(values[0])}\n `,\n ...breakpoints\n .slice(0, values.length)\n .map((breakpoint, i) => {\n const value = values[i + 1]; // Values are shifted relative to breakpoints\n\n if (value === undefined) {\n return undefined;\n }\n\n return css`\n @media (min-width: ${breakpoint}px) {\n ${css`\n ${attrCss(value)}\n `}\n }\n `;\n })\n .filter(truthy),\n ];\n };\n","import { css } from \"styled-components\";\n\nimport { parseColor } from \"@/styles/helpers/parseColor\";\nimport {\n responsiveStyle,\n ResponsiveValues,\n} from \"@/styles/utils/responsiveStyle\";\nimport { OakCombinedColorToken } from \"@/styles/theme/color\";\n\ntype ColorToken = ResponsiveValues<OakCombinedColorToken | null>;\n\nexport type ColorStyleProps = {\n $color?: ColorToken;\n $background?: ColorToken;\n};\nexport const colorStyle = css<ColorStyleProps>`\n ${responsiveStyle<ColorStyleProps, OakCombinedColorToken>(\n \"color\",\n (props) => props.$color,\n parseColor,\n )}\n ${responsiveStyle<ColorStyleProps, OakCombinedColorToken>(\n \"background\",\n (props) => props.$background,\n parseColor,\n )}\n`;\n","const BASE_FONT_SIZE_PX = 16;\nexport const REM_DP = 3;\n\nexport default function pxToRem(px: number): number {\n return Number((px / BASE_FONT_SIZE_PX).toFixed(REM_DP));\n}\n","export const oakAllSpacingTokens = {\n \"all-spacing-0\": 0,\n \"all-spacing-1\": 4,\n \"all-spacing-2\": 8,\n \"all-spacing-3\": 12,\n \"all-spacing-4\": 16,\n \"all-spacing-5\": 20,\n \"all-spacing-6\": 24,\n \"all-spacing-7\": 32,\n \"all-spacing-8\": 40,\n \"all-spacing-9\": 48,\n \"all-spacing-10\": 56,\n \"all-spacing-11\": 64,\n \"all-spacing-12\": 72,\n \"all-spacing-13\": 80,\n \"all-spacing-14\": 92,\n \"all-spacing-15\": 100,\n \"all-spacing-16\": 120,\n \"all-spacing-17\": 160,\n \"all-spacing-18\": 180,\n \"all-spacing-19\": 240,\n \"all-spacing-20\": 360,\n \"all-spacing-21\": 480,\n \"all-spacing-22\": 640,\n \"all-spacing-23\": 960,\n \"all-spacing-24\": 1280,\n};\n\nexport type OakAllSpacingToken = keyof typeof oakAllSpacingTokens;\n\nexport const oakInnerPaddingTokens = {\n \"inner-padding-none\": \"all-spacing-0\",\n \"inner-padding-ssx\": \"all-spacing-1\",\n \"inner-padding-xs\": \"all-spacing-2\",\n \"inner-padding-s\": \"all-spacing-3\",\n \"inner-padding-m\": \"all-spacing-4\",\n \"inner-padding-l\": \"all-spacing-5\",\n \"inner-padding-xl\": \"all-spacing-6\",\n};\n\nexport type OakInnerPaddingToken = keyof typeof oakInnerPaddingTokens;\n\nexport const oakSpaceBetweenTokens = {\n \"space-between-none\": \"all-spacing-0\",\n \"space-between-sssx\": \"all-spacing-1\",\n \"space-between-ssx\": \"all-spacing-2\",\n \"space-between-xs\": \"all-spacing-3\",\n \"space-between-s\": \"all-spacing-4\",\n \"space-between-m\": \"all-spacing-6\",\n \"space-between-m2\": \"all-spacing-7\",\n \"space-between-l\": \"all-spacing-9\",\n \"space-between-xl\": \"all-spacing-10\",\n \"space-between-xxl\": \"all-spacing-12\",\n \"space-between-xxxl\": \"all-spacing-13\",\n};\n\nexport type OakSpaceBetweenToken = keyof typeof oakSpaceBetweenTokens;\n\ntype AdditionalSpacingTypes =\n | \"100%\"\n | 0\n | \"100vh\"\n | \"100vw\"\n | \"auto\"\n | \"fit-content\"\n | \"inherit\"\n | \"initial\"\n | \"unset\";\n\nexport type OakCombinedSpacingToken =\n | OakAllSpacingToken\n | OakInnerPaddingToken\n | OakSpaceBetweenToken\n | AdditionalSpacingTypes;\n","import pxToRem from \"@/styles/helpers/pxToRem\";\nimport {\n OakAllSpacingToken,\n OakInnerPaddingToken,\n OakSpaceBetweenToken,\n OakCombinedSpacingToken,\n oakAllSpacingTokens,\n oakInnerPaddingTokens,\n oakSpaceBetweenTokens,\n} from \"@/styles/theme/spacing\";\n\n/**\n * - takes any of OakInnerPadding, OakSpaceBetween, OakAllSpacing, and other accepted values,\n * - derives and returns the corresponding css value\n * - converting to rem where necessary\n */\nexport function parseSpacing(value?: OakCombinedSpacingToken | null) {\n // if value is null or undefined, return undefined\n if (value === undefined || value === null) {\n return undefined;\n }\n\n // mapped values\n if (value in oakAllSpacingTokens) {\n return `${pxToRem(oakAllSpacingTokens[value as OakAllSpacingToken])}rem`; // NB. type assertion is necessary because the OakAllSpacing type is dervied from oakAllSpacingPx\n }\n\n if (value in oakInnerPaddingTokens) {\n const v = oakInnerPaddingTokens[value as OakInnerPaddingToken];\n return `${pxToRem(oakAllSpacingTokens[v as OakAllSpacingToken])}rem`;\n }\n\n if (value in oakSpaceBetweenTokens) {\n const v = oakSpaceBetweenTokens[value as OakSpaceBetweenToken];\n return `${pxToRem(oakAllSpacingTokens[v as OakAllSpacingToken])}rem`;\n }\n\n // value is a number, percentage or css value\n return value;\n}\n","import { CSSProperties } from \"react\";\nimport { css } from \"styled-components\";\n\nimport {\n responsiveStyle,\n ResponsiveValues,\n} from \"@/styles/utils/responsiveStyle\";\nimport {\n OakAllSpacingToken,\n OakSpaceBetweenToken,\n} from \"@/styles/theme/spacing\";\nimport { parseSpacing } from \"@/styles/helpers/parseSpacing\";\n\ntype PositionSpacing =\n | OakAllSpacingToken\n | OakSpaceBetweenToken\n | null\n | undefined;\n\nexport type PositionStyleProps = {\n $position?: ResponsiveValues<CSSProperties[\"position\"]>;\n $top?: ResponsiveValues<PositionSpacing>;\n $right?: ResponsiveValues<PositionSpacing>;\n $bottom?: ResponsiveValues<PositionSpacing>;\n $left?: ResponsiveValues<PositionSpacing>;\n $overflow?: ResponsiveValues<CSSProperties[\"overflow\"]>;\n $overflowX?: ResponsiveValues<CSSProperties[\"overflowX\"]>;\n $overflowY?: ResponsiveValues<CSSProperties[\"overflowY\"]>;\n $objectFit?: ResponsiveValues<CSSProperties[\"objectFit\"]>;\n $pointerEvents?: ResponsiveValues<CSSProperties[\"pointerEvents\"]>;\n $visibility?: ResponsiveValues<CSSProperties[\"visibility\"]>;\n};\n\nexport const positionStyle = css<PositionStyleProps>`\n ${responsiveStyle(\"position\", (props) => props.$position)}\n ${responsiveStyle(\"top\", (props) => props.$top, parseSpacing)} \n ${responsiveStyle(\"right\", (props) => props.$right, parseSpacing)} \n ${responsiveStyle(\"bottom\", (props) => props.$bottom, parseSpacing)} \n ${responsiveStyle(\"left\", (props) => props.$left, parseSpacing)} \n ${responsiveStyle(\"overflow\", (props) => props.$overflow)}\n ${responsiveStyle(\"overflow-x\", (props) => props.$overflowX)}\n ${responsiveStyle(\"overflow-y\", (props) => props.$overflowY)}\n ${responsiveStyle(\"object-fit\", (props) => props.$objectFit)}\n ${responsiveStyle(\"pointer-events\", (props) => props.$pointerEvents)}\n ${responsiveStyle(\"visibility\", (props) => props.$visibility)}\n`;\n","import { css } from \"styled-components\";\n\nimport {\n responsiveStyle,\n ResponsiveValues,\n} from \"@/styles/utils/responsiveStyle\";\nimport { OakCombinedSpacingToken } from \"@/styles/theme/spacing\";\nimport { parseSpacing } from \"@/styles/helpers/parseSpacing\";\n\ntype SizeValues = ResponsiveValues<OakCombinedSpacingToken | null | undefined>;\n\nexport type SizeStyleProps = {\n $width?: SizeValues;\n $minWidth?: SizeValues;\n $maxWidth?: SizeValues;\n $height?: SizeValues;\n $minHeight?: SizeValues;\n $maxHeight?: SizeValues;\n};\n\nexport const sizeStyle = css<SizeStyleProps>`\n ${responsiveStyle(\"width\", (props) => props.$width, parseSpacing)}\n ${responsiveStyle(\"min-width\", (props) => props.$minWidth, parseSpacing)}\n ${responsiveStyle(\"max-width\", (props) => props.$maxWidth, parseSpacing)}\n ${responsiveStyle(\"height\", (props) => props.$height, parseSpacing)}\n ${responsiveStyle(\"min-height\", (props) => props.$minHeight, parseSpacing)}\n ${responsiveStyle(\"max-height\", (props) => props.$maxHeight, parseSpacing)}\n`;\n","import { css } from \"styled-components\";\n\nimport {\n responsiveStyle,\n ResponsiveValues,\n} from \"@/styles/utils/responsiveStyle\";\nimport { parseSpacing } from \"@/styles/helpers/parseSpacing\";\nimport {\n OakInnerPaddingToken,\n OakSpaceBetweenToken,\n} from \"@/styles/theme/spacing\";\n\ntype PaddingValues = ResponsiveValues<OakInnerPaddingToken | null | undefined>;\n\nexport type PaddingStyleProps = {\n $pa?: PaddingValues;\n $ph?: PaddingValues;\n $pv?: PaddingValues;\n $pl?: PaddingValues;\n $pr?: PaddingValues;\n $pt?: PaddingValues;\n $pb?: PaddingValues;\n};\n\ntype MarginValue = \"auto\" | OakSpaceBetweenToken | null | undefined;\ntype MarginValues = ResponsiveValues<MarginValue>;\n\nexport type MarginStyleProps = {\n $ma?: MarginValues;\n $mh?: MarginValues;\n $mv?: MarginValues;\n $ml?: MarginValues;\n $mr?: MarginValues;\n $mt?: MarginValues;\n $mb?: MarginValues;\n};\n\nconst paddingAll = css<{ $pa?: PaddingValues }>`\n ${responsiveStyle(\"padding\", (props) => props.$pa, parseSpacing)}\n`;\nconst paddingHorizontal = css<{ $ph?: PaddingValues }>`\n ${responsiveStyle(\"padding-left\", (props) => props.$ph, parseSpacing)}\n ${responsiveStyle(\"padding-right\", (props) => props.$ph, parseSpacing)}\n`;\nconst paddingVertical = css<{ $pv?: PaddingValues }>`\n ${responsiveStyle(\"padding-top\", (props) => props.$pv, parseSpacing)}\n ${responsiveStyle(\"padding-bottom\", (props) => props.$pv, parseSpacing)}\n`;\nconst paddingLeft = css<{ $pl?: PaddingValues }>`\n ${responsiveStyle(\"padding-left\", (props) => props.$pl, parseSpacing)}\n`;\nconst paddingRight = css<{ $pr?: PaddingValues }>`\n ${responsiveStyle(\"padding-right\", (props) => props.$pr, parseSpacing)}\n`;\nconst paddingTop = css<{ $pt?: PaddingValues }>`\n ${responsiveStyle(\"padding-top\", (props) => props.$pt, parseSpacing)}\n`;\nconst paddingBottom = css<{ $pb?: PaddingValues }>`\n ${responsiveStyle(\"padding-bottom\", (props) => props.$pb, parseSpacing)}\n`;\nconst marginAll = css<{ $ma?: MarginValues }>`\n ${responsiveStyle(\"margin\", (props) => props.$ma, parseSpacing)}\n`;\nconst marginHorizontal = css<{ $mh?: MarginValues }>`\n ${responsiveStyle(\"margin-left\", (props) => props.$mh, parseSpacing)}\n ${responsiveStyle(\"margin-right\", (props) => props.$mh, parseSpacing)}\n`;\nconst marginVertical = css<{ $mv?: MarginValues }>`\n ${responsiveStyle(\"margin-top\", (props) => props.$mv, parseSpacing)}\n ${responsiveStyle(\"margin-bottom\", (props) => props.$mv, parseSpacing)}\n`;\nconst marginLeft = css<{ $ml?: MarginValues }>`\n ${responsiveStyle(\"margin-left\", (props) => props.$ml, parseSpacing)}\n`;\nconst marginRight = css<{ $mr?: MarginValues }>`\n ${responsiveStyle(\"margin-right\", (props) => props.$mr, parseSpacing)}\n`;\nconst marginTop = css<{ $mt?: MarginValues }>`\n ${responsiveStyle(\"margin-top\", (props) => props.$mt, parseSpacing)}\n`;\nconst marginBottom = css<{ $mb?: MarginValues }>`\n ${responsiveStyle(\"margin-bottom\", (props) => props.$mb, parseSpacing)}\n`;\n\nexport const marginStyle = css<MarginStyleProps>`\n ${marginAll}\n ${marginHorizontal}\n ${marginVertical}\n ${marginLeft}\n ${marginRight}\n ${marginTop}\n ${marginBottom}\n`;\n\nexport const paddingStyle = css<PaddingStyleProps>`\n ${paddingAll}\n ${paddingHorizontal}\n ${paddingVertical}\n ${paddingLeft}\n ${paddingRight}\n ${paddingTop}\n ${paddingBottom}\n`;\n\nexport type SpacingStyleProps = PaddingStyleProps & MarginStyleProps;\nexport const spacingStyle = css<SpacingStyleProps>`\n ${paddingStyle}\n ${marginStyle}\n`;\n","export const oakBorderWidthTokens = {\n \"border-solid-none\": 0,\n \"border-solid-s\": 1,\n \"border-solid-m\": 2,\n \"border-solid-l\": 3,\n \"border-solid-xl\": 4,\n};\n\nexport const oakBorderRadiusTokens = {\n \"border-radius-square\": 0,\n \"border-radius-xs\": 2,\n \"border-radius-s\": 4,\n \"border-radius-m\": 6,\n \"border-radius-m2\": 8,\n \"border-radius-l\": 16,\n \"border-radius-xl\": 24,\n \"border-radius-circle\": 100,\n};\n\nexport type OakBorderRadiusToken = keyof typeof oakBorderRadiusTokens;\nexport type OakBorderWidthToken = keyof typeof oakBorderWidthTokens;\n","import {\n OakBorderWidthToken,\n oakBorderWidthTokens,\n} from \"@/styles/theme/borders\";\nimport pxToRem from \"@/styles/helpers/pxToRem\";\n\nexport const parseBorder = (value?: OakBorderWidthToken | null) => {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (value in oakBorderWidthTokens) {\n return `${pxToRem(\n oakBorderWidthTokens[value as OakBorderWidthToken],\n )}rem solid`;\n }\n};\n","import pxToRem from \"./pxToRem\";\n\nimport {\n OakBorderRadiusToken,\n oakBorderRadiusTokens,\n} from \"@/styles/theme/borders\";\n\nexport const parseBorderRadius = (value?: OakBorderRadiusToken | null) => {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (value in oakBorderRadiusTokens) {\n return `${pxToRem(\n oakBorderRadiusTokens[value as OakBorderRadiusToken],\n )}rem`;\n }\n};\n","import { CSSProperties, css } from \"styled-components\";\n\nimport {\n OakBorderRadiusToken,\n OakBorderWidthToken,\n} from \"@/styles/theme/borders\";\nimport { OakColorToken, OakUiRoleToken } from \"@/styles/theme/color\";\nimport { parseColor } from \"@/styles/helpers/parseColor\";\nimport { parseBorder } from \"@/styles/helpers/parseBorder\";\nimport { parseBorderRadius } from \"@/styles/helpers/parseBorderRadius\";\nimport {\n ResponsiveValues,\n responsiveStyle,\n} from \"@/styles/utils/responsiveStyle\";\n\ntype BorderWidth = ResponsiveValues<OakBorderWidthToken>;\ntype _BorderStyleProps = ResponsiveValues<CSSProperties[\"borderStyle\"]>;\ntype BorderColorProps = ResponsiveValues<OakUiRoleToken | OakColorToken>;\ntype BorderRadiusProps = ResponsiveValues<OakBorderRadiusToken>;\n\nexport type BorderStyleProps = {\n $ba?: BorderWidth;\n $bt?: BorderWidth;\n $br?: BorderWidth;\n $bb?: BorderWidth;\n $bl?: BorderWidth;\n $bh?: BorderWidth;\n $bv?: BorderWidth;\n $borderStyle?: _BorderStyleProps;\n $borderColor?: BorderColorProps;\n $borderRadius?: BorderRadiusProps;\n $btlr?: BorderRadiusProps;\n $btrr?: BorderRadiusProps;\n $bblr?: BorderRadiusProps;\n $bbrr?: BorderRadiusProps;\n $btr?: BorderRadiusProps;\n $bbr?: BorderRadiusProps;\n};\n\nconst borderAll = css<{ $ba?: BorderWidth }>`\n ${responsiveStyle(\"border\", (props) => props.$ba, parseBorder)}\n`;\nconst borderTop = css<{ $bt?: BorderWidth }>`\n ${responsiveStyle(\"border-top\", (props) => props.$bt, parseBorder)}\n`;\nconst borderRight = css<{ $br?: BorderWidth }>`\n ${responsiveStyle(\"border-right\", (props) => props.$br, parseBorder)}\n`;\nconst borderBottom = css<{ $bb?: BorderWidth }>`\n ${responsiveStyle(\"border-bottom\", (props) => props.$bb, parseBorder)}\n`;\nconst borderLeft = css<{ $bl?: BorderWidth }>`\n ${responsiveStyle(\"border-left\", (props) => props.$bl, parseBorder)}\n`;\nconst borderHorizontal = css<{ $bh?: BorderWidth }>`\n ${responsiveStyle(\"border-left\", (props) => props.$bh, parseBorder)}\n ${responsiveStyle(\"border-right\", (props) => props.$bh, parseBorder)}\n`;\nconst borderVertical = css<{ $bv?: BorderWidth }>`\n ${responsiveStyle(\"border-top\", (props) => props.$bv, parseBorder)}\n ${responsiveStyle(\"border-bottom\", (props) => props.$bv, parseBorder)}\n`;\nconst borderColor = css<{ $borderColor?: BorderColorProps }>`\n ${responsiveStyle(\"border-color\", (props) => props.$borderColor, parseColor)}\n`;\nconst borderRadius = css<{ $borderRadius?: BorderRadiusProps }>`\n ${responsiveStyle(\n \"border-radius\",\n (props) => props.$borderRadius,\n parseBorderRadius,\n )}\n`;\nconst borderRadiusTopLeft = css<BorderStyleProps>`\n ${responsiveStyle(\n \"border-top-left-radius\",\n (props) => props.$btlr,\n parseBorderRadius,\n )}\n`;\nconst borderRadiusTopRight = css<BorderStyleProps>`\n ${responsiveStyle(\n \"border-top-right-radius\",\n (props) => props.$btrr,\n parseBorderRadius,\n )}\n`;\nconst borderRadiusBottomLeft = css<BorderStyleProps>`\n ${responsiveStyle(\n \"border-bottom-left-radius\",\n (props) => props.$bblr,\n parseBorderRadius,\n )}\n`;\nconst borderRadiusBottomRight = css<BorderStyleProps>`\n ${responsiveStyle(\n \"border-bottom-right-radius\",\n (props) => props.$bbrr,\n parseBorderRadius,\n )}\n`;\nconst borderRadiusTop = css<BorderStyleProps>`\n ${responsiveStyle(\n \"border-top-left-radius\",\n (props) => props.$btr,\n parseBorderRadius,\n )}\n ${responsiveStyle(\n \"border-top-right-radius\",\n (props) => props.$btr,\n parseBorderRadius,\n )}\n`;\nconst borderRadiusBottom = css<BorderStyleProps>`\n ${responsiveStyle(\n \"border-bottom-left-radius\",\n (props) => props.$bbr,\n parseBorderRadius,\n )}\n ${responsiveStyle(\n \"border-bottom-right-radius\",\n (props) => props.$bbr,\n parseBorderRadius,\n )}\n`;\n\nexport const borderStyle = css<BorderStyleProps>`\n ${borderAll}\n ${borderTop}\n ${borderRight}\n ${borderBottom}\n ${borderLeft}\n ${borderHorizontal}\n ${borderVertical}\n ${borderColor}\n ${borderRadius}\n ${borderRadiusTopLeft}\n ${borderRadiusTopRight}\n ${borderRadiusBottomLeft}\n ${borderRadiusBottomRight}\n ${borderRadiusTop}\n ${borderRadiusBottom}\n`;\n","import { CSSProperties } from \"react\";\nimport { css } from \"styled-components\";\n\nimport {\n ResponsiveValues,\n responsiveStyle,\n} from \"@/styles/utils/responsiveStyle\";\n\nexport type DisplayStyleProps = {\n $display?: ResponsiveValues<CSSProperties[\"display\"]>;\n};\n\nexport const displayStyle = css<DisplayStyleProps>`\n ${responsiveStyle(\"display\", (props) => props.$display)}\n`;\n","export const oakDropShadowTokens = {\n \"drop-shadow-standard\": \"0 0.5rem 0.5rem rgba(92, 92, 92, 20%)\",\n \"drop-shadow-lemon\": `0.125rem 0.125rem 0 rgba(255, 229, 85, 100%)`,\n \"drop-shadow-wide-lemon\": `0.25rem 0.25rem 0 rgba(255, 229, 85, 100%)`,\n \"drop-shadow-centered-lemon\": `0 0 0 0.125rem rgba(255, 229, 85, 100%)`,\n \"drop-shadow-grey\": \"0.25rem 0.25rem 0 rgba(87, 87, 87, 100%)\",\n \"drop-shadow-centered-grey\": \"0 0 0 0.3rem rgba(87, 87, 87, 100%)\",\n};\n\nexport type OakDropShadowToken = keyof typeof oakDropShadowTokens;\n","import {\n OakDropShadowToken,\n oakDropShadowTokens,\n} from \"@/styles/theme/dropShadow\";\n\nexport const parseDropShadow = (variant?: OakDropShadowToken | null) => {\n if (!variant) {\n return;\n }\n\n if (variant in oakDropShadowTokens) {\n return oakDropShadowTokens[variant as OakDropShadowToken];\n }\n};\n","import { css } from \"styled-components\";\n\nimport { OakDropShadowToken } from \"@/styles/theme/dropShadow\";\nimport { parseDropShadow } from \"@/styles/helpers/parseDropShadow\";\nimport {\n ResponsiveValues,\n responsiveStyle,\n} from \"@/styles/utils/responsiveStyle\";\n\nexport type DropShadowStyleProps = {\n $dropShadow?: ResponsiveValues<OakDropShadowToken>;\n};\n\nexport const dropShadowStyle = css<DropShadowStyleProps>`\n ${responsiveStyle(\n \"box-shadow\",\n (props) => props.$dropShadow,\n parseDropShadow,\n )}\n`;\n","export const oakOpacityTokens = {\n transparent: 0,\n \"semi-transparent\": 0.25,\n \"semi-opaque\": 0.5,\n opaque: 1,\n};\n\nexport type OakOpacityToken = keyof typeof oakOpacityTokens;\n","import { css } from \"styled-components\";\n\nimport { OakOpacityToken } from \"@/styles/theme/opacity\";\nimport { parseOpacity } from \"@/styles/helpers/parseOpacity\";\nimport {\n ResponsiveValues,\n responsiveStyle,\n} from \"@/styles/utils/responsiveStyle\";\n\nexport type OpacityStyleProps = {\n $opacity?: ResponsiveValues<OakOpacityToken>;\n};\n\nexport const opacityStyle = css<OpacityStyleProps>`\n ${responsiveStyle(\"opacity\", (props) => props.$opacity, parseOpacity)}\n`;\n","import { OakOpacityToken, oakOpacityTokens } from \"@/styles/theme/opacity\";\n\nexport const parseOpacity = (variant?: OakOpacityToken | null) => {\n if (!variant) {\n return;\n }\n\n if (variant in oakOpacityTokens) {\n return oakOpacityTokens[variant as OakOpacityToken];\n }\n};\n","import { CSSProperties, css } from \"styled-components\";\n\nimport {\n ResponsiveValues,\n responsiveStyle,\n} from \"@/styles/utils/responsiveStyle\";\n\nexport type TransformStyleProps = {\n $transform?: ResponsiveValues<CSSProperties[\"transform\"] | null>;\n $transformOrigin?: ResponsiveValues<CSSProperties[\"transformOrigin\"] | null>;\n};\n\nexport const transformStyle = css<TransformStyleProps>`\n ${responsiveStyle(\"transform\", (props) => props.$transform)}\n ${responsiveStyle(\"transform-origin\", (props) => props.$transformOrigin)}\n`;\n","export const oakTransitionTokens = {\n \"standard-ease\": \"all 0.3s ease\",\n \"standard-transform\": \"rotate(-2deg) translateY(-16px) translateX(8px)\",\n};\n\nexport type OakTransitionToken = keyof typeof oakTransitionTokens;\n","import { css } from \"styled-components\";\n\nimport { OakTransitionToken } from \"@/styles/theme/transitions\";\nimport { parseTransitions } from \"@/styles/helpers/parseTransitions\";\nimport {\n ResponsiveValues,\n responsiveStyle,\n} from \"@/styles/utils/responsiveStyle\";\n\ntype Transition = OakTransitionToken;\n\nexport type TransitionStyleProps = {\n $transition?: ResponsiveValues<Transition>;\n};\n\nexport const transitionStyle = css<TransitionStyleProps>`\n ${responsiveStyle(\n \"transition\",\n (props) => props.$transition,\n parseTransitions,\n )}\n`;\n","import {\n OakTransitionToken,\n oakTransitionTokens,\n} from \"@/styles/theme/transitions\";\n\nexport const parseTransitions = (variant?: OakTransitionToken | null) => {\n if (!variant) {\n return;\n }\n\n if (variant in oakTransitionTokens) {\n return oakTransitionTokens[variant as OakTransitionToken];\n }\n};\n","export const oakFontSizeTokens = {\n \"font-size-1\": 12,\n \"font-size-2\": 14,\n \"font-size-3\": 16,\n \"font-size-4\": 18,\n \"font-size-5\": 20,\n \"font-size-6\": 24,\n \"font-size-7\": 32,\n \"font-size-8\": 40,\n \"font-size-9\": 48,\n \"font-size-10\": 56,\n};\nexport type OakFontSizeToken = keyof typeof oakFontSizeTokens;\n\nconst fontWeights = [300, 400, 600, 700] as const;\ntype FontWeight = (typeof fontWeights)[number];\nconst lineHeights = [16, 20, 24, 28, 32, 40, 48, 56, 64] as const;\ntype LineHeight = (typeof lineHeights)[number];\nconst letterSpacings = [\"0.0115rem\", \"-0.005rem\"] as const;\ntype LetterSpacing = (typeof letterSpacings)[number];\n\ntype FontParameters = readonly [\n OakFontSizeToken,\n LineHeight,\n FontWeight,\n LetterSpacing,\n];\n\nexport const oakFontTokens: Record<string, FontParameters> = {\n \"heading-1\": [\"font-size-10\", 64, 600, \"0.0115rem\"],\n \"heading-2\": [\"font-size-9\", 56, 600, \"0.0115rem\"],\n \"heading-3\": [\"font-size-8\", 48, 600, \"0.0115rem\"],\n \"heading-4\": [\"font-size-7\", 40, 600, \"0.0115rem\"],\n \"heading-5\": [\"font-size-6\", 32, 600, \"0.0115rem\"],\n \"heading-6\": [\"font-size-5\", 24, 600, \"0.0115rem\"],\n \"heading-7\": [\"font-size-3\", 20, 600, \"0.0115rem\"],\n \"heading-light-1\": [\"font-size-10\", 64, 400, \"0.0115rem\"],\n \"heading-light-2\": [\"font-size-9\", 56, 400, \"0.0115rem\"],\n \"heading-light-3\": [\"font-size-8\", 48, 400, \"0.0115rem\"],\n \"heading-light-4\": [\"font-size-7\", 40, 400, \"0.0115rem\"],\n \"heading-light-5\": [\"font-size-6\", 32, 400, \"0.0115rem\"],\n \"heading-light-6\": [\"font-size-5\", 24, 400, \"0.0115rem\"],\n \"heading-light-7\": [\"font-size-3\", 20, 400, \"0.0115rem\"],\n \"body-1\": [\"font-size-4\", 28, 300, \"-0.005rem\"],\n \"body-2\": [\"font-size-3\", 24, 300, \"-0.005rem\"],\n \"body-3\": [\"font-size-2\", 20, 300, \"-0.005rem\"],\n \"body-4\": [\"font-size-1\", 16, 300, \"-0.005rem\"],\n \"body-1-bold\": [\"font-size-4\", 28, 700, \"-0.005rem\"],\n \"body-2-bold\": [\"font-size-3\", 24, 700, \"-0.005rem\"],\n \"body-3-bold\": [\"font-size-2\", 20, 700, \"-0.005rem\"],\n \"list-item-1\": [\"font-size-4\", 32, 300, \"-0.005rem\"],\n \"list-item-2\": [\"font-size-3\", 24, 300, \"-0.005rem\"],\n} as const;\n\nexport type OakFontToken = keyof typeof oakFontTokens;\n\nexport const oakTextDecorations = [\n \"underline\",\n \"overline\",\n \"line-through\",\n \"none\",\n] as const;\n\nexport const oakWhiteSpaces = [\n \"normal\",\n \"nowrap\",\n \"pre\",\n \"pre-wrap\",\n \"pre-line\",\n \"break-spaces\",\n] as const;\n\nexport const oakWordWraps = [\n \"normal\",\n \"break-word\",\n \"initial\",\n \"inherit\",\n] as const;\n\nexport const oakTextOverflows = [\"clip\", \"ellipsis\"] as const;\n\nexport type OakTextDecoration = (typeof oakTextDecorations)[number];\nexport type OakWhiteSpace = (typeof oakWhiteSpaces)[number];\nexport type OakWordWrap = (typeof oakWordWraps)[number];\nexport type OakTextOverflow = (typeof oakTextOverflows)[number];\n","import { CSSProperties, css } from \"styled-components\";\n\nimport {\n OakFontToken,\n OakTextDecoration,\n OakTextOverflow,\n OakWhiteSpace,\n OakWordWrap,\n} from \"@/styles/theme/typography\";\nimport {\n parseFontSize,\n parseFontWeight,\n parseLetterSpacing,\n parseLineHeight,\n} from \"@/styles/helpers/parseTypography\";\nimport {\n ResponsiveValues,\n responsiveStyle,\n} from \"@/styles/utils/responsiveStyle\";\n\nexport type TypographyStyleProps = {\n $font?: ResponsiveValues<OakFontToken>;\n $textDecoration?: ResponsiveValues<OakTextDecoration>;\n $textAlign?: ResponsiveValues<CSSProperties[\"textAlign\"]>;\n $whiteSpace?: ResponsiveValues<OakWhiteSpace>;\n $wordWrap?: ResponsiveValues<OakWordWrap>;\n $textOverflow?: ResponsiveValues<OakTextOverflow>;\n};\n\nexport const typographyStyle = css<TypographyStyleProps>`\n font-family: Lexend, sans-serif;\n ${responsiveStyle(\"font-weight\", (props) => props.$font, parseFontWeight)}\n ${responsiveStyle(\"font-size\", (props) => props.$font, parseFontSize)}\n ${responsiveStyle(\"line-height\", (props) => props.$font, parseLineHeight)}\n ${responsiveStyle(\n \"letter-spacing\",\n (props) => props.$font,\n parseLetterSpacing,\n )}\n ${responsiveStyle(\"text-align\", (props) => props.$textAlign)}\n ${responsiveStyle(\"text-decoration\", (props) => props.$textDecoration)}\n ${responsiveStyle(\"white-space\", (props) => props.$whiteSpace)}\n ${responsiveStyle(\"word-wrap\", (props) => props.$wordWrap)}\n ${responsiveStyle(\"text-overflow\", (props) => props.$textOverflow)}\n`;\n","import {\n OakFontToken,\n oakFontSizeTokens,\n oakFontTokens,\n} from \"@/styles/theme/typography\";\nimport pxToRem from \"@/styles/helpers/pxToRem\";\n\nexport const parseFontWeight = (font?: OakFontToken | null) => {\n if (!font) return;\n return oakFontTokens[font]?.[2];\n};\n\nexport const parseFontSize = (\n font?: OakFontToken | null,\n): string | null | undefined => {\n if (!font) return;\n const fontSize = oakFontTokens[font]?.[0];\n if (!fontSize) return;\n const fontSizePx = oakFontSizeTokens[fontSize];\n return `${pxToRem(fontSizePx)}rem`;\n};\nexport const parseLineHeight = (\n font?: OakFontToken | null,\n): string | null | undefined => {\n if (!font) return;\n const lineHeight = oakFontTokens[font]?.[1];\n if (!lineHeight) return;\n return `${pxToRem(lineHeight)}rem`;\n};\nexport const parseLetterSpacing = (font?: OakFontToken | null) => {\n if (!font) return;\n return oakFontTokens[font]?.[3];\n};\n","export const oakZIndexTokens = {\n behind: -1,\n neutral: 0,\n \"in-front\": 1,\n \"mobile-filters\": 2,\n \"fixed-header\": 100,\n \"modal-close-button\": 150,\n \"modal-dialog\": 300,\n} as const;\n\nexport type OakZIndexToken = keyof typeof oakZIndexTokens | null;\n","import { css } from \"styled-components\";\n\nimport {\n ResponsiveValues,\n responsiveStyle,\n} from \"@/styles/utils/responsiveStyle\";\nimport { OakZIndexToken } from \"@/styles/theme/zIndex\";\nimport { parseZIndex } from \"@/styles/helpers/parseZIndex\";\n\nexport type ZIndexStyleProps = {\n $zIndex?: ResponsiveValues<OakZIndexToken>;\n};\n\nexport const zIndexStyle = css<ZIndexStyleProps>`\n ${responsiveStyle(\"z-index\", (props) => props.$zIndex, parseZIndex)}\n`;\n","import { OakZIndexToken, oakZIndexTokens } from \"@/styles/theme/zIndex\";\n\nexport const parseZIndex = (value?: OakZIndexToken) => {\n if (value === undefined || value === null) {\n return undefined;\n }\n return oakZIndexTokens[value];\n};\n","import { MouseEventHandler } from \"react\";\nimport styled, { css } from \"styled-components\";\n\n/**\n * OakBox exposes all the styles that are available styles on a div element.\n */\n\nimport { colorStyle, ColorStyleProps } from \"@/styles/utils/colorStyle\";\nimport {\n positionStyle,\n PositionStyleProps,\n} from \"@/styles/utils/positionStyle\";\nimport { sizeStyle, SizeStyleProps } from \"@/styles/utils/sizeStyle\";\nimport { spacingStyle, SpacingStyleProps } from \"@/styles/utils/spacingStyle\";\nimport { borderStyle, BorderStyleProps } from \"@/styles/utils/borderStyle\";\nimport { displayStyle, DisplayStyleProps } from \"@/styles/utils/displayStyle\";\nimport {\n dropShadowStyle,\n DropShadowStyleProps,\n} from \"@/styles/utils/dropShadowStyle\";\nimport { opacityStyle, OpacityStyleProps } from \"@/styles/utils/opacityStyle\";\nimport {\n transformStyle,\n TransformStyleProps,\n} from \"@/styles/utils/transformStyle\";\nimport {\n transitionStyle,\n TransitionStyleProps,\n} from \"@/styles/utils/transitionStyle\";\nimport {\n typographyStyle,\n TypographyStyleProps,\n} from \"@/styles/utils/typographyStyle\";\nimport { zIndexStyle, ZIndexStyleProps } from \"@/styles/utils/zIndexStyle\";\n\n// TODO: these are not yet implemented\n// import cover, { CoverProps } from \"@/styles/utils/coverStyle\";\n// import customScrollbar from \"@/styles/utils/customScrollbarStyle\";\n\ntype HTMLProps = {\n onClick?: MouseEventHandler;\n};\n\nexport type OakBoxProps = {\n children?: React.ReactNode;\n} & PositionStyleProps &\n SizeStyleProps &\n SpacingStyleProps &\n ColorStyleProps &\n BorderStyleProps &\n DisplayStyleProps &\n DropShadowStyleProps &\n OpacityStyleProps &\n TransformStyleProps &\n TransitionStyleProps &\n TypographyStyleProps &\n ZIndexStyleProps &\n HTMLProps;\n\nexport const oakBoxCss = css<OakBoxProps>`\n ${positionStyle}\n ${sizeStyle}\n ${spacingStyle}\n ${colorStyle}\n ${borderStyle}\n ${displayStyle}\n ${dropShadowStyle}\n ${opacityStyle}\n ${transformStyle}\n ${transitionStyle}\n ${typographyStyle}\n ${zIndexStyle}\n ${(props) =>\n /* onClick might be passed in the useClickableCard pattern */\n props.onClick &&\n css`\n :hover {\n cursor: pointer;\n }\n `}\n`;\n\nexport const OakBox = styled.div<OakBoxProps>`\n ${oakBoxCss}\n`;\n","import { CSSProperties } from \"react\";\nimport { css } from \"styled-components\";\n\nimport {\n responsiveStyle,\n ResponsiveValues,\n} from \"@/styles/utils/responsiveStyle\";\nimport {\n OakAllSpacingToken,\n OakSpaceBetweenToken,\n} from \"@/styles/theme/spacing\";\nimport { parseSpacing } from \"@/styles/helpers/parseSpacing\";\n\nexport type FlexStyleProps = {\n $flexDirection?: ResponsiveValues<CSSProperties[\"flexDirection\"]>;\n $flexWrap?: ResponsiveValues<CSSProperties[\"flexWrap\"]>;\n $alignItems?: ResponsiveValues<CSSProperties[\"alignItems\"]>;\n $alignContent?: ResponsiveValues<CSSProperties[\"alignContent\"]>;\n $justifyContent?: ResponsiveValues<CSSProperties[\"justifyContent\"]>;\n $alignSelf?: ResponsiveValues<CSSProperties[\"alignSelf\"]>;\n $flexGrow?: ResponsiveValues<CSSProperties[\"flexGrow\"]>;\n $flexShrink?: ResponsiveValues<CSSProperties[\"flexShrink\"]>;\n $order?: ResponsiveValues<CSSProperties[\"order\"]>;\n $flexBasis?: ResponsiveValues<\n OakAllSpacingToken | OakSpaceBetweenToken | null | undefined\n >;\n $gap?: ResponsiveValues<\n OakAllSpacingToken | OakSpaceBetweenToken | null | undefined\n >;\n $columnGap?: ResponsiveValues<\n OakAllSpacingToken | OakSpaceBetweenToken | null | undefined\n >;\n $rowGap?: ResponsiveValues<\n OakAllSpacingToken | OakSpaceBetweenToken | null | undefined\n >;\n};\n\nexport const flexStyle = css<FlexStyleProps>`\n display: flex;\n ${responsiveStyle(\"flex-direction\", (props) => props.$flexDirection)}\n ${responsiveStyle(\"flex-wrap\", (props) => props.$flexWrap)}\n ${responsiveStyle(\"align-items\", (props) => props.$alignItems)}\n ${responsiveStyle(\"align-content\", (props) => props.$alignContent)}\n ${responsiveStyle(\"justify-content\", (props) => props.$justifyContent)}\n ${responsiveStyle(\"align-self\", (props) => props.$alignSelf)}\n ${responsiveStyle(\"order\", (props) => props.$order)}\n ${responsiveStyle(\"flex-grow\", (props) => props.$flexGrow)}\n ${responsiveStyle(\"flex-shrink\", (props) => props.$flexShrink)}\n ${responsiveStyle(\"flex-basis\", (props) => props.$flexBasis, parseSpacing)}\n ${responsiveStyle(\"gap\", (props) => props.$gap, parseSpacing)}\n ${responsiveStyle(\"column-gap\", (props) => props.$columnGap, parseSpacing)}\n ${responsiveStyle(\"row-gap\", (props) => props.$rowGap, parseSpacing)}\n`;\n","import styled from \"styled-components\";\n\nimport { OakBox, OakBoxProps } from \"@/components/base/OakBox\";\nimport { flexStyle, FlexStyleProps } from \"@/styles/utils/flexStyle\";\n\nexport type OakFlexProps = FlexStyleProps & OakBoxProps;\n/**\n * Flex sets `display: flex;` and exposes various flex props, along with Box\n * props.\n *\n * ## Usage\n * Before adding props to this component, think about whether it makes sense\n * to add it to Box instead, as this component extends that.\n */\nconst OakFlex = styled(OakBox)<OakFlexProps>`\n ${flexStyle}\n`;\n\nexport { OakFlex };\n","import styled from \"styled-components\";\n\nimport { colorStyle, ColorStyleProps } from \"@/styles/utils/colorStyle\";\nimport { opacityStyle, OpacityStyleProps } from \"@/styles/utils/opacityStyle\";\nimport {\n marginStyle,\n MarginStyleProps,\n paddingStyle,\n PaddingStyleProps,\n} from \"@/styles/utils/spacingStyle\";\nimport {\n typographyStyle,\n TypographyStyleProps,\n} from \"@/styles/utils/typographyStyle\";\nimport { borderStyle, BorderStyleProps } from \"@/styles/utils/borderStyle\";\n\nexport type OakSpanProps = ColorStyleProps &\n OpacityStyleProps &\n MarginStyleProps &\n PaddingStyleProps &\n BorderStyleProps &\n TypographyStyleProps;\n/**\n * Span renders a `span` (inline text) component, exposing all the typography props.\n * ## Usage\n * Use this component when you want to apply styles to a piece of inline text.\n */\nexport const OakSpan = styled.span<OakSpanProps>`\n ${colorStyle}\n ${opacityStyle}\n ${marginStyle}\n ${paddingStyle}\n ${borderStyle}\n ${typographyStyle}\n`;\n","import styled from \"styled-components\";\n\nimport { OakBoxProps, oakBoxCss } from \"../OakBox\";\n\n/**\n *\n * Inherit everything from OakBox, but change the element to a form.\n *\n */\n\nexport const OakForm = styled.form<OakBoxProps>`\n ${oakBoxCss}\n`;\n\nexport type OakFormProps = OakBoxProps;\n","import {\n OakColorFilterToken,\n OakUiRoleToken,\n oakColorFilterTokens,\n oakUiRoleTokens,\n} from \"@/styles/theme/color\";\nimport { OakCombinedColorToken } from \"@/styles/theme\";\nimport { PropsWithTheme } from \"@/styles/theme/theme\";\n\nfunction parseColorFilter(\n value?: OakCombinedColorToken | null,\n): (props: PropsWithTheme) => string;\nfunction parseColorFilter(\n value?: OakCombinedColorToken | null,\n): ((props: PropsWithTheme) => string) | undefined;\nfunction parseColorFilter(value?: OakCombinedColorToken | null) {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (value in oakColorFilterTokens) {\n return oakColorFilterTokens[value as OakColorFilterToken];\n }\n\n if (oakUiRoleTokens.includes(value as OakUiRoleToken)) {\n return ({ theme }: PropsWithTheme) => {\n const c = theme.uiColors[value as OakUiRoleToken];\n if (c && c in oakColorFilterTokens) {\n return oakColorFilterTokens[c as OakColorFilterToken];\n }\n return undefined;\n };\n }\n}\n\nexport { parseColorFilter };\n","import { css } from \"styled-components\";\n\nimport { parseColorFilter } from \"@/styles/helpers/parseColorFilter\";\nimport {\n responsiveStyle,\n ResponsiveValues,\n} from \"@/styles/utils/responsiveStyle\";\nimport { OakCombinedColorToken } from \"@/styles/theme/color\";\n\ntype ColorFilterToken = ResponsiveValues<OakCombinedColorToken | null>;\n\nexport type ColorFilterStyleProps = {\n $colorFilter?: ColorFilterToken;\n};\nexport const colorFilterStyle = css<ColorFilterStyleProps>`\n ${responsiveStyle<ColorFilterStyleProps, OakCombinedColorToken>(\n \"filter\",\n (props) => props.$colorFilter,\n parseColorFilter,\n )}\n`;\n","import React, {\n ComponentPropsWithoutRef,\n ElementType,\n MouseEventHandler,\n} from \"react\";\nimport Image, { ImageProps } from \"next/image\";\nimport styled, { css } from \"styled-components\";\n\nimport {\n ColorFilterStyleProps,\n colorFilterStyle,\n} from \"@/styles/utils/colorFilterStyle\";\nimport { OakBox, OakBoxProps } from \"@/components/base/OakBox\";\n\ntype HTMLProps = {\n onClick?: MouseEventHandler;\n};\n\nexport type OakImageProps<C extends ElementType = typeof Image> = Omit<\n ImageProps,\n \"placeholder\"\n> &\n OakBoxProps &\n ColorFilterStyleProps &\n HTMLProps & {\n as?: C;\n /**\n * The placeholder to use while the image is loading\n *\n * Defaults to `oak` which is a placeholder containing the Oak logo\n * also accepts the same options as next/image */\n placeholder?: ImageProps[\"placeholder\"] | \"oak\";\n /**\n * Additional props forwarded to the underlying `Image` component `as`\n */\n imageProps?: Partial<ComponentPropsWithoutRef<C>>;\n };\n\nconst oakPlaceholder =\n \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNjEiIGhlaWdodD0iMTUxIiBmaWxsPSJub25lIj48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxnIGNsaXAtcGF0aD0idXJsKCNiKSI+PGcgY2xpcC1wYXRoPSJ1cmwoI2MpIj48cGF0aCBmaWxsPSIjRTdGNkY1IiBkPSJNLTIwLTloMzAydjE3MC4wMTFILTIweiIvPjxwYXRoIGZpbGw9IiMyMjIiIGQ9Ik0xMjcuNzc5IDYzLjE4MWEyNy4xNDYgMjcuMTQ2IDAgMCAwLTMuOCAxLjYgMTYuNjk1IDE2LjY5NSAwIDAgMC03LjEgOC40YzAgLjEtLjEuMi0uMS4zLS43IDIuNC0uNiAyIDEuMyAyLjMgMS45LjMgMSAuNSAxIDEuMy0uMSA4LjggNC4xIDE1LjEgMTEuNCAxOS42YTEuNDk4IDEuNDk4IDAgMCAwIDEuNy4yYzUuNy0yLjYgOS4zLTcgMTAuMy0xMy4yYTEuMDAxIDEuMDAxIDAgMCAxIDEtMWwzLS4yYy44IDAgMS4zLjIgMS4yIDEuMmExNy45MDggMTcuOTA4IDAgMCAxLTMuMiA5LjIgMjMuNyAyMy43IDAgMCAxLTEwLjkgOS4xIDUuNDA2IDUuNDA2IDAgMCAxLTQuNS0uMiAyNi4yOSAyNi4yOSAwIDAgMS04LjUtNi42IDI1Ljg4OSAyNS44ODkgMCAwIDEtNi40LTE0LjRjMC0uNi0uMi0uNy0uOC0uOC0yLjUtLjQtMi41LS4xLTIuMy0yLjlhMTkuMjkgMTkuMjkgMCAwIDEgMTAuOC0xNi42IDM4Ljk1MyAzOC45NTMgMCAwIDEgNS43LTIuMWMuNDU3LS4zLjc4LS43NjYuOS0xLjNhMTQuMDk1IDE0LjA5NSAwIDAgMSAzLjUtNi4zbC4zLS4zYzEuOS0yIDIuNi0yIDQuMy4ybC40LjVjMS4xIDEuMSAxIDEuNS0uMSAyLjZhMTEuODgzIDExLjg4MyAwIDAgMC0zLjIgNC40YzIuNjQ1LjE2OCA1LjIxNS45NTYgNy41IDIuMyA1LjcgMy41IDkuMiA4LjMgOS45IDE1IC4wMTYuOTAxLS4wMTcgMS44MDMtLjEgMi43IDAgLjgtLjYgMS0xLjIgMS4yYTE2LjEgMTYuMSAwIDAgMS0xMS0uNyAxNy45IDE3LjkgMCAwIDEtMTAuOS0xMy42IDkuNzQyIDkuNzQyIDAgMCAxLS4xLTEuOVptMTguMSAxMi4yYy40LTUuNS02LjktMTIuNi0xMy0xMi4xLjUgNi41IDcuNiAxMi44IDEzIDEyLjFaIiBvcGFjaXR5PSIuMSIvPjwvZz48L2c+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyNjF2MTUxSDB6Ii8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9ImIiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0tMjAtOWgzMDJ2MTcwLjAxMUgtMjB6Ii8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9ImMiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0tMjAtOWgzMDJ2MTcwLjAxMUgtMjB6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+\";\n\nconst StyledFillImage = styled(Image)<Omit<OakImageProps, \"as\">>`\n ${colorFilterStyle}\n ${(props) =>\n /* onClick might be passed in the useClickableCard pattern */\n props.onClick &&\n css`\n :hover {\n cursor: pointer;\n }\n `}\n object-fit: contain;\n`;\n\nconst StyledResponsiveImage = styled(Image)<Omit<OakImageProps, \"as\">>`\n ${colorFilterStyle}\n ${(props) =>\n /* onClick might be passed in the useClickableCard pattern */\n props.onClick &&\n css`\n :hover {\n cursor: pointer;\n }\n `}\n width: 100%;\n height: auto;\n`;\n\n/**\n * OakImage is a wrapper round next/image which adds convenience style\n * props to the api\n */\nexport const OakImage = <C extends ElementType = typeof Image>({\n ...props\n}: OakImageProps<C>) => {\n const {\n as,\n src,\n alt,\n width,\n height,\n sizes,\n $width = \"100%\",\n $position = \"relative\",\n $colorFilter,\n placeholder = \"oak\",\n unoptimized,\n imageProps,\n ...rest\n } = props;\n const finalPlaceholder = placeholder === \"oak\" ? oakPlaceholder : placeholder;\n // We don't know the aspect ratio of the image, so we must use fill and letterbox it to avoid stretching\n // Use $width and $height to set the width and height of the image container\n\n if (!width || !height) {\n return (\n <OakBox $position={$position} $width={$width} {...rest}>\n <StyledFillImage\n as={as ?? Image}\n src={src}\n alt={alt}\n sizes={sizes}\n fill\n $colorFilter={$colorFilter}\n placeholder={finalPlaceholder}\n unoptimized={unoptimized}\n {...imageProps}\n />\n </OakBox>\n );\n }\n\n // When we know the aspect ratio, we can use Image's repsonsive layout\n // Use $minWidth to set the width with auto height\n\n return (\n <OakBox $maxWidth={\"all-spacing-0\"} $position={$position} {...rest}>\n <StyledResponsiveImage\n as={as ?? Image}\n src={src}\n alt={alt}\n width={width}\n height={height}\n sizes={sizes}\n unoptimized={unoptimized}\n $colorFilter={$colorFilter}\n placeholder={finalPlaceholder}\n {...imageProps}\n />\n </OakBox>\n );\n};\n","import styled from \"styled-components\";\n\nimport {\n typographyStyle,\n TypographyStyleProps,\n} from \"@/styles/utils/typographyStyle\";\nimport { OakBox, OakBoxProps } from \"@/components/base/OakBox\";\n\nexport type OakTypographyProps = OakBoxProps & TypographyStyleProps;\n\n/**\n * The Typography component sets a typography style context from which children\n * inherit style properties through the cascade.\n * ## Usage\n * This should be the primary component to set a typography context.\n * Use this component whenever you want to style blocks of 'body' text.\n */\n\nexport const OakTypography = styled(OakBox)<OakTypographyProps>`\n ${typographyStyle}\n`;\n","import React, { FC } from \"react\";\nimport styled from \"styled-components\";\n\nimport { ColorStyleProps, colorStyle } from \"@/styles/utils/colorStyle\";\nimport { MarginStyleProps, marginStyle } from \"@/styles/utils/spacingStyle\";\nimport { OpacityStyleProps, opacityStyle } from \"@/styles/utils/opacityStyle\";\nimport {\n TypographyStyleProps,\n typographyStyle,\n} from \"@/styles/utils/typographyStyle\";\n\nexport const oakHeadingTags = [\n \"div\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\",\n] as const;\n\nexport type OakHeadingTag = (typeof oakHeadingTags)[number];\n\ntype OakHeadingTagProps = {\n children?: React.ReactNode;\n id?: string;\n tag: OakHeadingTag;\n ariaLabel?: string;\n ariaHidden?: boolean;\n};\n\nexport const HeadingTagComponent: FC<OakHeadingTagProps> = (props) => {\n const { tag, ariaLabel, ariaHidden, ...otherProps } = props;\n const Tag = tag;\n return (\n <Tag {...otherProps} aria-label={ariaLabel} aria-hidden={ariaHidden} />\n );\n};\n\nexport type OakHeadingProps = TypographyStyleProps &\n OakHeadingTagProps &\n ColorStyleProps &\n OpacityStyleProps &\n MarginStyleProps;\n\nexport const OakHeading = styled(HeadingTagComponent)<OakHeadingProps>`\n ${typographyStyle}\n ${marginStyle}\n ${colorStyle}\n ${opacityStyle}\n`;\n","import styled from \"styled-components\";\n\nimport { colorStyle, ColorStyleProps } from \"@/styles/utils/colorStyle\";\nimport { marginStyle, MarginStyleProps } from \"@/styles/utils/spacingStyle\";\nimport {\n typographyStyle,\n TypographyStyleProps,\n} from \"@/styles/utils/typographyStyle\";\n\nexport type OakPProps = MarginStyleProps &\n TypographyStyleProps &\n ColorStyleProps;\n\n/**\n * Styled `p` (paragraph) component.\n * ## Usage\n * In general, using a `p` as a descendant of `<Body>` should suffice.\n * However, if you want different styles for a particular paragraph,\n * you can use this component to apply additional styles.\n */\nexport const OakP = styled.p<OakPProps>`\n ${typographyStyle}\n ${colorStyle}\n ${marginStyle}\n\n a {\n color: ${(props) =>\n props.theme &&\n props.theme.uiColors &&\n props.theme.uiColors[\"text-link-active\"]};\n }\n`;\n","import styled, { css } from \"styled-components\";\n\nimport { OakBoxProps, oakBoxCss } from \"../OakBox\";\n\nexport type OakULProps = OakBoxProps & {\n $reset?: boolean;\n};\n\n/**\n * Styled `ul` (unordered list) component.\n *\n * ## Usage\n *\n * Resets browser spacing and other styles, accepts BoxProps' style props.\n *\n * */\n\nexport const OakUL = styled.ul<OakULProps>`\n ${(props) =>\n props.$reset &&\n css`\n list-style: none;\n padding: 0;\n `}\n margin: 0;\n ${oakBoxCss}\n`;\n","import styled from \"styled-components\";\n\nimport { colorStyle, ColorStyleProps } from \"@/styles/utils/colorStyle\";\nimport { marginStyle, MarginStyleProps } from \"@/styles/utils/spacingStyle\";\nimport {\n typographyStyle,\n TypographyStyleProps,\n} from \"@/styles/utils/typographyStyle\";\n\nexport type OakOLProps = MarginStyleProps &\n ColorStyleProps &\n TypographyStyleProps;\n\n/**\n * Styled `ol` (ordered list) component.\n *\n * ## Usage\n *\n * Use where we have an ordered list to ensure numbers are styled\n *\n * */\nexport const OakOL = styled.ol<OakOLProps>`\n counter-reset: item;\n padding: 0;\n\n li {\n display: block;\n counter-increment: item;\n margin: 0;\n padding: 0 0 0 16px;\n text-indent: -16px;\n list-style-type: none;\n line-height: 32px;\n\n // Portable text generates linebreaks within list items\n\n br {\n content: \"\";\n display: block;\n margin-top: 8px;\n }\n }\n\n & li::before {\n padding-right: 4px;\n content: counter(item) \".\";\n }\n a {\n color: ${(props) =>\n props.theme &&\n props.theme.uiColors &&\n props.theme.uiColors[\"text-link-active\"]};\n }\n ${marginStyle}\n ${colorStyle}\n ${typographyStyle}\n`;\n","import { CSSProperties, css } from \"styled-components\";\n\nimport {\n ResponsiveValues,\n responsiveStyle,\n} from \"@/styles/utils/responsiveStyle\";\n\nexport type ListStyleProps = {\n $listStyle?: ResponsiveValues<CSSProperties[\"listStyle\"]>;\n};\n\nexport const listStyle = css<ListStyleProps>`\n ${responsiveStyle(\"list-style\", (props) => props.$listStyle)}\n`;\n","import styled from \"styled-components\";\n\nimport { oakBoxCss } from \"../OakBox\";\nimport { OakFlexProps } from \"../OakFlex\";\n\nimport { DisplayStyleProps, displayStyle } from \"@/styles/utils/displayStyle\";\nimport { ListStyleProps, listStyle } from \"@/styles/utils/listStyle\";\nimport {\n TypographyStyleProps,\n typographyStyle,\n} from \"@/styles/utils/typographyStyle\";\n\nexport type OakLIProps = OakFlexProps &\n TypographyStyleProps &\n ListStyleProps &\n DisplayStyleProps;\n\n/**\n * Styled `li` (list item) component.\n *\n * ## Usage\n *\n * Places where we directly want to style a list item\n *\n **/\n\nexport const OakLI = styled.li<OakLIProps>`\n ${oakBoxCss}\n ${typographyStyle}\n ${listStyle}\n ${displayStyle}\n`;\n\nOakLI.defaultProps = {\n $display: \"revert\",\n};\n","import styled from \"styled-components\";\n\nimport {\n TypographyStyleProps,\n typographyStyle,\n} from \"@/styles/utils/typographyStyle\";\nimport { ColorStyleProps, colorStyle } from \"@/styles/utils/colorStyle\";\n\nexport type OakLabelProps = TypographyStyleProps & ColorStyleProps;\n/**\n * Label renders a `label` element, exposing all the typography props.\n * ## Usage\n * Use this component when you want to apply styles to a label, likely within\n * a form.\n */\nexport const OakLabel = styled.label<OakLabelProps>`\n ${typographyStyle}\n ${colorStyle}\n`;\n","import React from \"react\";\n\nimport * as imageMap from \"../../../image-map.json\";\n\nimport { OakImage, OakImageProps } from \"@/components/base/OakImage\";\n\nexport const oakIconNames = [\n \"home\",\n \"send\",\n \"rocket\",\n \"video\",\n \"edit\",\n \"hamburger\",\n \"cross\",\n \"bell\",\n \"twitter\",\n \"worksheet\",\n \"facebook\",\n \"share\",\n \"arrow-right\",\n \"worksheet-3\",\n \"chevron-right\",\n \"save\",\n \"quiz-3\",\n \"chevron-down\",\n \"linkedin\",\n \"magic-carpet\",\n \"books\",\n \"supervision-level\",\n \"quiz-white\",\n \"arrow-left\",\n \"additional-material\",\n \"slide-deck-3\",\n \"sign-language\",\n \"external\",\n \"equipment-required\",\n \"chevron-left\",\n \"download\",\n \"search\",\n \"chevron-up\",\n \"go\",\n \"copyright\",\n \"arrow-down\",\n \"project\",\n \"quiz\",\n \"slide-deck\",\n \"content-guidance\",\n \"tick\",\n \"instagram\",\n \"dot\",\n \"dot-png\",\n \"warning\",\n \"lightbulb\",\n \"lightbulb-yellow\",\n \"intro\",\n] as const;\n\nexport type OakIconName = (typeof oakIconNames)[number];\n\nexport type OakIconProps = Omit<OakImageProps, \"alt\" | \"src\"> & {\n iconName: OakIconName;\n alt?: string;\n};\n\nconst typedImageMap = imageMap as Record<string, Record<OakIconName, string>>;\n\nexport const OakIcon = (props: OakIconProps) => {\n const {\n iconName,\n alt,\n $width = \"all-spacing-7\",\n $height = \"all-spacing-7\",\n imageProps,\n ...rest\n } = props;\n\n const _alt = alt ?? iconName;\n const imagePath = typedImageMap?.[\"icons\"]?.[iconName];\n\n return (\n <OakImage\n src={`https://${process.env.NEXT_PUBLIC_OAK_ASSETS_HOST}/${process.env.NEXT_PUBLIC_OAK_ASSETS_PATH}/${imagePath}`}\n alt={_alt}\n $width={$width}\n $height={$height}\n placeholder=\"empty\"\n // Icons should not be optimised since the SVG is already as small as it can be and should be served directly\n unoptimized\n {...rest}\n />\n );\n};\n","import styled, { css } from \"styled-components\";\n\nimport {\n responsiveStyle,\n ResponsiveValues,\n} from \"@/styles/utils/responsiveStyle\";\nimport { OakBox, OakBoxProps } from \"@/components/base/OakBox\";\nimport { parseSpacing } from \"@/styles/helpers/parseSpacing\";\nimport { OakCombinedSpacingToken } from \"@/styles\";\n\nconst gridStyle = css<OakGridProps>`\n ${responsiveStyle(\"row-gap\", (props) => props.$rg, parseSpacing)}\n ${responsiveStyle(\"column-gap\", (props) => props.$cg, parseSpacing)}\n ${responsiveStyle(\"grid-auto-rows\", (props) => props.$gridAutoRows)}\n ${responsiveStyle(\"grid-template-areas\", (props) => props.$gridTemplateAreas)}\n ${responsiveStyle(\n \"grid-template-columns\",\n (props) => props.$gridTemplateColumns,\n )}\n`;\n\nexport type OakGridProps = OakBoxProps & {\n $rg?: ResponsiveValues<OakCombinedSpacingToken>;\n $cg?: ResponsiveValues<OakCombinedSpacingToken>;\n // grid-auto-rows: 1fr; ensures all rows are the same height\n $gridAutoRows?: ResponsiveValues<\"1fr\">;\n $gridTemplateAreas?: ResponsiveValues<string>;\n $gridTemplateColumns?: ResponsiveValues<string>;\n};\n\nexport const OakGrid = styled(OakBox)<OakGridProps>`\n display: grid;\n grid-template-columns: repeat(12, 1fr);\n width: 100%;\n ${gridStyle}\n`;\n","import styled, { css } from \"styled-components\";\n\nimport {\n responsiveStyle,\n ResponsiveValues,\n} from \"@/styles/utils/responsiveStyle\";\nimport { SpacingStyleProps } from \"@/styles/utils/spacingStyle\";\nimport { OakFlex, OakFlexProps } from \"@/components/base/OakFlex\";\n\ntype ColRowSpan = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\nexport type OakGridAreaProps = {\n /**\n * Determines the number of columns the element should span.\n */\n $colSpan: ResponsiveValues<ColRowSpan>;\n /**\n * Determines the number of rows the element should span.\n */\n $rowSpan?: ResponsiveValues<ColRowSpan>;\n $order?: ResponsiveValues<number>;\n /**\n * The start column of the element.\n */\n $colStart?: ResponsiveValues<ColRowSpan>;\n $colEnd?: ResponsiveValues<ColRowSpan>;\n /**\n * The start row of the element.\n */\n $rowStart?: ResponsiveValues<ColRowSpan>;\n} & SpacingStyleProps;\n\nconst combineSpanStart = (\n start?: ColRowSpan | null,\n span?: ColRowSpan | null,\n) => {\n return start ? `${start}/${span}` : `${span}`;\n};\n\nconst parseSpanStart = (value?: string | null) => {\n if (value?.includes(\"/\")) {\n const [start, span] = value.split(\"/\");\n return `${start} / span ${span}`;\n }\n const span = value;\n return `span ${span}`;\n};\n\nconst gridArea = css<OakGridAreaProps>`\n flex-direction: column;\n ${responsiveStyle(\n \"grid-column\",\n (props) => {\n return Array.isArray(props.$colSpan)\n ? props.$colSpan.map((span, index) =>\n combineSpanStart(\n Array.isArray(props.$colStart)\n ? props.$colStart[index]\n : props.$colStart,\n span,\n ),\n )\n : combineSpanStart(\n Array.isArray(props.$colStart)\n ? props.$colStart[0]\n : props.$colStart,\n props.$colSpan,\n );\n },\n (value) => parseSpanStart(value),\n )};\n ${responsiveStyle(\n \"grid-row\",\n (props) => {\n return Array.isArray(props.$rowSpan)\n ? props.$rowSpan.map((span, index) =>\n combineSpanStart(\n Array.isArray(props.$rowStart)\n ? props.$rowStart[index]\n : props.$rowStart,\n span,\n ),\n )\n : combineSpanStart(\n Array.isArray(props.$rowStart)\n ? props.$rowStart[0]\n : props.$rowStart,\n props.$rowSpan,\n );\n },\n (value) => parseSpanStart(value),\n )};\n ${responsiveStyle(\n \"order\",\n (props) => props.$order,\n (value) => value && `${value}`,\n )};\n ${responsiveStyle(\"grid-row\", (props) =>\n props.$rowSpan ? `span ${props.$rowSpan}` : \"span 1\",\n )};\n ${responsiveStyle(\"grid-column-start\", (props) => props.$colStart)}\n ${responsiveStyle(\"grid-column-end\", (props) => props.$colEnd)}\n ${responsiveStyle(\"grid-row-start\", (props) => props.$rowStart)}\n`;\n\n/**\n *\n * OakGridArea is a flex container that should be used inside OakGrid.\n *\n * - There is no nesting of OakGridAreas\n * - Column and row arrangements are achieved through $colSpan, $rowSpan, $colStart, $colEnd, $rowStart, $rowEnd\n *\n */\n\nexport const OakGridArea = styled(OakFlex)<OakGridAreaProps & OakFlexProps>`\n ${gridArea}\n`;\n","import styled from \"styled-components\";\n\nimport { OakFlex, OakFlexProps } from \"../OakFlex\";\n\n/**\n * This component will provide a default maxWidth and ph value, it take Flex props.\n * ## Usage\n * Use this component on pages to limit the max-width to a specific container.\n * This will make it easier to create full browser width or custom width containers on the same page\n * with different background colors / image url.\n */\nexport type OakMaxWidthProps = OakFlexProps;\nexport const OakMaxWidth = styled(OakFlex)``;\n\nOakMaxWidth.defaultProps = {\n $maxWidth: [\"all-spacing-21\", \"all-spacing-24\"],\n $ph: [\"inner-padding-none\", \"inner-padding-s\"],\n $flexDirection: \"column\",\n $flexGrow: 1,\n $width: \"100%\",\n $mh: \"auto\",\n};\n","import { getCldImageUrl, type CldImageProps } from \"next-cloudinary\";\n\nexport function getCloudinaryIdFromUrl(\n src: string | URL,\n config?: CldImageProps[\"config\"],\n) {\n // When a private CDN is used, CldImage will only accept the image ID as the src\n // this appears to be a limitation of the library which appears to have been designed\n // with basic public CDN usage in mind.\n return src.toString().replace(getCloudinaryRootUrl(config), \"\");\n}\n\n// Attempts to build the stem of a cloudinary URL, this is used to extract the image id\nfunction getCloudinaryRootUrl(config?: CldImageProps[\"config\"]) {\n // `getCldImageUrl` handles all the logic to construct a cloudinary URL from the given config\n // (supporting private CDNs, custom CNAMES etc. so we don't have to)\n const canaryUrl = new URL(getCldImageUrl({ src: \"canary.jpg\" }, config));\n return canaryUrl.origin + \"/image/upload/\";\n}\n","import React, { createContext, useContext } from \"react\";\nimport { CldImage, CldImageProps } from \"next-cloudinary\";\n\nimport { OakImage, OakImageProps } from \"../OakImage\";\n\nimport { getCloudinaryIdFromUrl } from \"./cloudinary\";\n\nexport type OakCloudinaryImageProps = Omit<\n OakImageProps<typeof CldImage>,\n \"src\" | \"imageProps\"\n> & {\n /**\n * The cloudinary image id or the full cloudinary URL\n *\n * Usually in the format `v1234567890/image.jpg`\n */\n cloudinaryId: string;\n};\n\nconst cloudinaryConfigContext = createContext<\n CldImageProps[\"config\"] | undefined\n>(undefined);\n\n/**\n * Provides a Cloudinary config to all descendent `OakCloudinaryImage` elements.\n *\n * See https://cloudinary.com/documentation/cloudinary_sdks#configuration_parameters\n * for documentation of the config object.\n */\nexport const OakCloudinaryConfigProvider = cloudinaryConfigContext.Provider;\n\n/**\n * OakCloudinaryImage wraps OakImage providing responsive images from Cloudinary\n * based on the `sizes` prop.\n *\n * Cloudinary cloud name can be set globally with `NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME` or a config\n * can be passed with `OakCloudinaryConfigProvider`.\n */\nexport const OakCloudinaryImage = ({\n cloudinaryId,\n unoptimized = false || cloudinaryId.endsWith(\".svg\"),\n ...props\n}: OakCloudinaryImageProps) => {\n const config = useContext(cloudinaryConfigContext);\n const src = getCloudinaryIdFromUrl(cloudinaryId, config);\n\n return (\n <OakImage\n as={CldImage}\n src={src}\n imageProps={{\n config,\n }}\n unoptimized={unoptimized}\n {...props}\n />\n );\n};\n","import styled, { css } from \"styled-components\";\n\nconst screenReaderStyle = css`\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n`;\n\n/**\n * This component will visually hide its contents but will still be available\n * to screen readers, assitive technology, and scrapers.\n * ## Usage\n * Use this component in places where content shouldn't be visible, but should\n * be accessible to assistive technology.\n */\nexport const OakScreenReader = styled.span`\n ${screenReaderStyle}\n`;\n","import React from \"react\";\nimport styled, { css, keyframes } from \"styled-components\";\n\nimport { OakScreenReader } from \"@/components/base/OakScreenReader\";\nimport { SizeStyleProps } from \"@/styles/utils/sizeStyle\";\nimport { parseSpacing } from \"@/styles/helpers/parseSpacing\";\nimport { responsiveStyle } from \"@/styles/utils/responsiveStyle\";\nimport { ColorStyleProps, colorStyle } from \"@/styles/utils/colorStyle\";\nimport { OakCombinedColorToken } from \"@/styles\";\n\nconst SpinnerKeyframe = keyframes`\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n`;\n\nexport type OakLoadingSpinnerProps = Pick<SizeStyleProps, \"$width\"> &\n ColorStyleProps & { loaderColor?: OakCombinedColorToken };\n\nconst StyledLoadingSpinner = styled.span<OakLoadingSpinnerProps>`\n ${(props) =>\n props.$width\n ? responsiveStyle(\"--width\", (props) => props.$width, parseSpacing)\n : css`\n --width: 1.25rem;\n `}\n --inner-width: calc(var(--width) / 10 * 8);\n --thickness: calc(var(--width) / 12);\n\n position: absolute;\n display: inline-flex;\n width: var(--width);\n height: var(--width);\n\n ::after {\n content: \" \";\n display: block;\n width: var(--inner-width);\n height: var(--inner-width);\n margin: var(--thickness);\n border-radius: 50%;\n border: var(--thickness) solid currentcolor;\n ${(props) =>\n props.loaderColor\n ? css`\n border-color: ${props.loaderColor} ${props.loaderColor}\n ${props.loaderColor} transparent;\n `\n : css`\n border-color: currentcolor currentcolor currentcolor transparent;\n `}\n animation: ${SpinnerKeyframe} 1.2s linear infinite;\n }\n ${colorStyle}\n`;\n\nexport const OakLoadingSpinner = (props: OakLoadingSpinnerProps) => (\n <StyledLoadingSpinner {...props}>\n <OakScreenReader>Loading</OakScreenReader>\n </StyledLoadingSpinner>\n);\n","import React, { useRef } from \"react\";\nimport styled, { css } from \"styled-components\";\n\nimport { colorStyle, ColorStyleProps } from \"@/styles/utils/colorStyle\";\nimport { displayStyle, DisplayStyleProps } from \"@/styles/utils/displayStyle\";\nimport { spacingStyle, SpacingStyleProps } from \"@/styles/utils/spacingStyle\";\nimport {\n typographyStyle,\n TypographyStyleProps,\n} from \"@/styles/utils/typographyStyle\";\nimport {\n dropShadowStyle,\n DropShadowStyleProps,\n} from \"@/styles/utils/dropShadowStyle\";\nimport { borderStyle, BorderStyleProps } from \"@/styles/utils/borderStyle\";\n\ntype StyledButtonProps = TypographyStyleProps &\n SpacingStyleProps &\n ColorStyleProps &\n DisplayStyleProps &\n BorderStyleProps &\n DropShadowStyleProps & {\n isLoading?: boolean;\n };\n\nconst internalButtonCss = css<StyledButtonProps>`\n background: none;\n color: inherit;\n border: none;\n padding: 0;\n font: inherit;\n cursor: pointer;\n text-align: left;\n font-family: unset;\n outline: none;\n ${typographyStyle}\n ${colorStyle}\n ${spacingStyle}\n ${displayStyle}\n ${borderStyle}\n ${dropShadowStyle}\n &:disabled {\n pointer-events: none;\n cursor: default;\n }\n`;\n\nexport type InternalButtonProps = StyledButtonProps & {\n onClick?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n onHovered?: (\n event: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n duration: number,\n ) => void;\n children?: React.ReactNode;\n className?: string;\n disabled?: boolean;\n \"data-testid\"?: string;\n type?: \"button\" | \"submit\" | \"reset\";\n form?: string;\n};\n\nconst UnstyledInternalButton = (props: InternalButtonProps) => {\n const { onClick, onHovered } = props;\n\n const hoverStart = useRef(Date.now());\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (onClick) {\n onClick(event);\n }\n };\n\n const handleMouseEnter = () => {\n hoverStart.current = Date.now();\n };\n\n const handleMouseLeave = (event: React.MouseEvent<HTMLButtonElement>) => {\n const delta = Date.now() - hoverStart.current;\n if (onHovered) {\n onHovered(event, delta);\n }\n };\n\n return (\n <button\n className={props.className}\n data-testid={props[\"data-testid\"]}\n disabled={props.disabled}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n type={props.type ?? \"button\"}\n form={props.form}\n >\n {props.children}\n </button>\n );\n};\n\n// NB. We must export a styled component for it to be inheritable\nexport const InternalButton = styled(UnstyledInternalButton)`\n ${internalButtonCss}\n`;\n","import React from \"react\";\nimport styled, { css } from \"styled-components\";\n\nimport { OakBox, OakFlex, OakSpan } from \"@/components/base\";\nimport {\n InternalButton,\n InternalButtonProps,\n} from \"@/components/base/InternalButton\";\nimport { OakIcon, OakIconName } from \"@/components/base/OakIcon\";\nimport { OakLoadingSpinner } from \"@/components/ui/OakLoadingSpinner\";\nimport { parseDropShadow } from \"@/styles/helpers/parseDropShadow\";\nimport {\n PositionStyleProps,\n positionStyle,\n} from \"@/styles/utils/positionStyle\";\nimport { parseColor } from \"@/styles/helpers/parseColor\";\nimport { OakCombinedColorToken } from \"@/styles\";\nimport { SizeStyleProps, sizeStyle } from \"@/styles/utils/sizeStyle\";\n\nexport type InternalRectButtonProps = Omit<\n InternalButtonProps,\n | \"$pa\"\n | \"$ph\"\n | \"$pv\"\n | \"$ba\"\n | \"$borderRadius\"\n | \"$borderColor\"\n | \"$background\"\n | \"$color\"\n> & {\n iconName?: OakIconName;\n isTrailingIcon?: boolean;\n defaultTextColor: OakCombinedColorToken;\n defaultBackground: OakCombinedColorToken;\n defaultBorderColor: OakCombinedColorToken;\n hoverTextColor: OakCombinedColorToken;\n hoverBackground: OakCombinedColorToken;\n hoverBorderColor: OakCombinedColorToken;\n disabledBackground: OakCombinedColorToken;\n disabledBorderColor: OakCombinedColorToken;\n disabledTextColor: OakCombinedColorToken;\n width?: SizeStyleProps[\"$width\"];\n maxWidth?: SizeStyleProps[\"$maxWidth\"];\n} & PositionStyleProps;\n\nconst StyledInternalButton = styled(InternalButton)<\n InternalRectButtonProps & SizeStyleProps\n>`\n ${positionStyle}\n ${sizeStyle}\n ${(props) => css`\n &:hover {\n text-decoration: underline;\n color: ${parseColor(props.hoverTextColor)};\n background: ${parseColor(props.hoverBackground)};\n border-color: ${parseColor(props.hoverBorderColor)};\n }\n &:active {\n background: ${parseColor(props.defaultBackground)};\n border-color: ${parseColor(props.defaultBorderColor)};\n color: ${parseColor(props.defaultTextColor)};\n }\n &:disabled {\n background: ${parseColor(props.disabledBackground)};\n border-color: ${parseColor(props.disabledBorderColor)};\n color: ${parseColor(props.disabledTextColor)};\n }\n `}\n`;\n\nconst StyledButtonWrapper = styled(OakBox)`\n .grey-shadow:has(+ * + .internal-button:focus-visible) {\n box-shadow: ${parseDropShadow(\"drop-shadow-centered-grey\")};\n }\n .yellow-shadow:has(+ .internal-button:focus-visible) {\n box-shadow: ${parseDropShadow(\"drop-shadow-centered-lemon\")};\n }\n .yellow-shadow:has(+ .internal-button:hover) {\n box-shadow: ${parseDropShadow(\"drop-shadow-lemon\")};\n }\n .grey-shadow:has(+ * + .internal-button:hover) {\n box-shadow: none;\n }\n .grey-shadow:has(+ * + .internal-button:active) {\n box-shadow: ${parseDropShadow(\"drop-shadow-grey\")};\n }\n .yellow-shadow:has(+ .internal-button:active) {\n box-shadow: ${parseDropShadow(\"drop-shadow-lemon\")};\n }\n`;\n\nexport const InternalRectButton = (props: InternalRectButtonProps) => {\n const {\n children,\n iconName,\n isTrailingIcon,\n isLoading,\n disabled,\n width,\n maxWidth,\n ...rest\n } = props;\n\n const icon = (\n <>\n {iconName && (\n <OakIcon\n iconName={iconName}\n $width={\"all-spacing-6\"}\n $height={\"all-spacing-6\"}\n $colorFilter={\n props.disabled ? props.disabledTextColor : props.defaultTextColor\n }\n />\n )}\n </>\n );\n\n const loader = (\n <OakBox $width={\"all-spacing-6\"} $height={\"all-spacing-6\"}>\n <OakLoadingSpinner $width={\"all-spacing-6\"} />\n </OakBox>\n );\n\n const iconLogic = <>{isLoading && !disabled ? loader : icon}</>;\n\n return (\n <StyledButtonWrapper\n className=\"button-wrapper\"\n $position={\"relative\"}\n $width={width}\n $maxWidth={maxWidth}\n >\n <OakBox\n className=\"grey-shadow\"\n $position={\"absolute\"}\n $borderRadius={\"border-radius-s\"}\n $width={\"100%\"}\n $height={\"100%\"}\n />\n\n <OakBox\n className=\"yellow-shadow\"\n $position={\"absolute\"}\n $borderRadius={\"border-radius-s\"}\n $width={\"100%\"}\n $height={\"100%\"}\n />\n\n <StyledInternalButton\n className=\"internal-button\"\n {...rest}\n $ba={\"border-solid-m\"}\n $background={props.defaultBackground}\n $borderColor={props.defaultBorderColor}\n $color={props.defaultTextColor}\n $pv={\"inner-padding-xs\"}\n $ph={\"inner-padding-s\"}\n $borderRadius={\"border-radius-s\"}\n $position={\"relative\"}\n disabled={disabled || isLoading}\n $width={\"100%\"}\n $height={\"100%\"}\n >\n <OakFlex\n $flexDirection={\"row\"}\n $alignItems={\"center\"}\n $gap=\"space-between-ssx\"\n $justifyContent=\"center\"\n >\n {!isTrailingIcon && iconLogic}\n <OakSpan $font={\"body-1-bold\"}>{children}</OakSpan>\n {isTrailingIcon && iconLogic}\n </OakFlex>\n </StyledInternalButton>\n </StyledButtonWrapper>\n );\n};\n","import React from \"react\";\nimport styled, { css } from \"styled-components\";\n\nimport { OakRoundIconProps } from \"../OakRoundIcon\";\n\nimport { OakBox, OakFlex, OakSpan } from \"@/components/base\";\nimport {\n InternalButton,\n InternalButtonProps,\n} from \"@/components/base/InternalButton\";\nimport { OakIcon, OakIconName } from \"@/components/base/OakIcon\";\nimport { OakLoadingSpinner } from \"@/components/ui/OakLoadingSpinner\";\nimport { parseDropShadow } from \"@/styles/helpers/parseDropShadow\";\nimport {\n PositionStyleProps,\n positionStyle,\n} from \"@/styles/utils/positionStyle\";\nimport { parseColor } from \"@/styles/helpers/parseColor\";\nimport { OakCombinedColorToken } from \"@/styles\";\nimport { SizeStyleProps, sizeStyle } from \"@/styles/utils/sizeStyle\";\n\nexport type InternalRoundButtonProps = Omit<\n InternalButtonProps,\n | \"$pa\"\n | \"$ph\"\n | \"$pv\"\n | \"$ba\"\n | \"$borderRadius\"\n | \"$borderColor\"\n | \"$background\"\n | \"$color\"\n> & {\n iconName?: OakIconName;\n isTrailingIcon?: boolean;\n defaultTextColor: OakCombinedColorToken;\n hoverTextColor: OakCombinedColorToken;\n disabledTextColor: OakCombinedColorToken;\n defaultIconBackground: OakCombinedColorToken;\n hoverIconBackground: OakCombinedColorToken;\n disabledIconBackground: OakCombinedColorToken;\n defaultIconColor?: OakRoundIconProps[\"$colorFilter\"];\n disabledIconColor?: OakRoundIconProps[\"$colorFilter\"];\n width?: SizeStyleProps[\"$width\"];\n maxWidth?: SizeStyleProps[\"$maxWidth\"];\n iconBackgroundSize: SizeStyleProps[\"$width\"];\n iconSize: SizeStyleProps[\"$width\"];\n} & PositionStyleProps;\n\nconst StyledInternalButton = styled(InternalButton)<\n Omit<InternalRoundButtonProps, \"iconBackgroundSize\" | \"iconSize\"> &\n SizeStyleProps\n>`\n ${positionStyle}\n ${sizeStyle}\n ${(props) => css`\n &:hover {\n text-decoration: underline;\n color: ${parseColor(props.hoverTextColor)};\n }\n &:active {\n color: ${parseColor(props.defaultTextColor)};\n }\n &:disabled {\n color: ${parseColor(props.disabledTextColor)};\n }\n `}\n`;\n\nconst StyledButtonWrapper = styled(OakBox)<{\n disabledIconBackground: OakCombinedColorToken;\n hoverIconBackground: OakCombinedColorToken;\n defaultIconBackground: OakCombinedColorToken;\n}>`\n button:focus-visible .shadow {\n box-shadow: ${parseDropShadow(\"drop-shadow-centered-lemon\")},\n ${parseDropShadow(\"drop-shadow-centered-grey\")};\n }\n button:hover .shadow {\n box-shadow: ${parseDropShadow(\"drop-shadow-lemon\")};\n }\n button:active .shadow {\n box-shadow: ${parseDropShadow(\"drop-shadow-lemon\")},\n ${parseDropShadow(\"drop-shadow-grey\")};\n }\n ${(props) => css`\n button:disabled .icon-container {\n background: ${parseColor(props.disabledIconBackground)};\n }\n button:hover .icon-container {\n background: ${parseColor(props.hoverIconBackground)};\n }\n button:active .icon-container {\n background: ${parseColor(props.defaultIconBackground)};\n }\n `}\n`;\n\nconst _InternalRoundButton = (props: InternalRoundButtonProps) => {\n const {\n children,\n iconName,\n isTrailingIcon,\n isLoading,\n disabled,\n width,\n maxWidth,\n iconBackgroundSize,\n iconSize,\n ...rest\n } = props;\n\n const icon = (\n <>\n {iconName && (\n <OakIcon\n iconName={iconName}\n $width={iconSize}\n $height={iconSize}\n $colorFilter={\n props.disabled\n ? props.disabledIconColor\n : props.defaultIconColor\n ? props.defaultIconColor\n : null\n }\n />\n )}\n </>\n );\n const loader = (\n <OakBox $width={iconSize} $height={iconSize}>\n <OakLoadingSpinner $width={iconSize} loaderColor=\"white\" />\n </OakBox>\n );\n const iconLogic = (\n <OakFlex\n className={\"icon-container\"}\n $background={props.defaultIconBackground}\n $color={props.defaultTextColor}\n $borderRadius={\"border-radius-circle\"}\n $position={\"relative\"}\n $width={iconBackgroundSize}\n $height={iconBackgroundSize}\n $alignItems={\"center\"}\n $justifyContent={\"center\"}\n $minWidth={iconBackgroundSize}\n >\n <OakBox\n className=\"shadow\"\n $position={\"absolute\"}\n $borderRadius={\"border-radius-circle\"}\n $width={\"100%\"}\n $height={\"100%\"}\n />\n\n {isLoading && !disabled ? loader : icon}\n </OakFlex>\n );\n\n return (\n <StyledButtonWrapper\n className=\"button-wrapper\"\n $position={\"relative\"}\n $width={width}\n $maxWidth={maxWidth}\n disabledIconBackground={props.disabledIconBackground}\n hoverIconBackground={props.hoverIconBackground}\n defaultIconBackground={props.defaultIconBackground}\n >\n <StyledInternalButton\n {...rest}\n $color={props.defaultTextColor}\n $pv={\"inner-padding-xs\"}\n $ph={\"inner-padding-s\"}\n $position={\"relative\"}\n disabled={disabled || isLoading}\n >\n <OakFlex\n $flexDirection={\"row\"}\n $alignItems={\"center\"}\n $gap=\"space-between-xs\"\n $justifyContent=\"center\"\n >\n {!isTrailingIcon && iconLogic}\n <OakSpan $font={\"body-1-bold\"}>{children}</OakSpan>\n {isTrailingIcon && iconLogic}\n </OakFlex>\n </StyledInternalButton>\n </StyledButtonWrapper>\n );\n};\n\nexport const InternalRoundButton = styled(_InternalRoundButton)``;\n","import React, { createContext, useState } from \"react\";\n\nimport { TypographyStyleProps } from \"@/styles/utils/typographyStyle\";\nimport { ColorStyleProps } from \"@/styles/utils/colorStyle\";\nimport { OakFlex, OakLabel } from \"@/components/base\";\nimport { FlexStyleProps } from \"@/styles/utils/flexStyle\";\n\ntype RadioContextType = {\n currentValue: string;\n name: string;\n disabled?: boolean;\n onValueUpdated?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n};\n\nexport const RadioContext = createContext<RadioContextType>({\n currentValue: \"default\",\n name: \"default\",\n});\n\nexport type OakRadioGroupProps = {\n label?: string;\n name: string;\n disabled?: boolean;\n children: React.ReactNode;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n /**\n * Sets the value of the radio group\n * for use as a controlled component\n */\n value?: string;\n /**\n * Sets the initial value of the radio group\n * for use as an uncontrolled component\n */\n defaultValue?: string;\n} & Pick<TypographyStyleProps, \"$font\"> &\n ColorStyleProps &\n Pick<FlexStyleProps, \"$flexDirection\" | \"$alignItems\" | \"$gap\">;\n\nexport const OakRadioGroup = (props: OakRadioGroupProps) => {\n const {\n name,\n children,\n label,\n onChange,\n $font = \"body-1-bold\",\n $gap = \"space-between-s\",\n disabled,\n value,\n defaultValue = \"\",\n ...rest\n } = props;\n\n const [currentValue, setValue] = useState(defaultValue);\n\n const handleValueUpdated = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setValue(event.target.value);\n }\n if (onChange) {\n onChange(event);\n }\n };\n\n return (\n <OakFlex role=\"radiogroup\" $gap={$gap} {...rest}>\n <OakLabel $font={$font}>{label}</OakLabel>\n <RadioContext.Provider\n value={{\n currentValue: value ?? currentValue,\n name,\n disabled: disabled,\n onValueUpdated: handleValueUpdated,\n }}\n >\n {children}\n </RadioContext.Provider>\n </OakFlex>\n );\n};\n","import React, { ReactNode, forwardRef, useContext } from \"react\";\nimport styled, { css } from \"styled-components\";\n\nimport { RadioContext } from \"@/components/ui/OakRadioGroup/OakRadioGroup\";\nimport { parseColor } from \"@/styles/helpers/parseColor\";\nimport { parseSpacing } from \"@/styles/helpers/parseSpacing\";\nimport { parseBorder } from \"@/styles/helpers/parseBorder\";\nimport { FlexStyleProps } from \"@/styles/utils/flexStyle\";\nimport { responsiveStyle } from \"@/styles/utils/responsiveStyle\";\nimport {\n OakBox,\n OakBoxProps,\n OakFlex,\n OakFlexProps,\n OakLabel,\n OakLabelProps,\n} from \"@/components/base\";\nimport { OakAllSpacingToken, OakBorderWidthToken } from \"@/styles\";\n\ntype RadioButtonLabelProps = {\n $labelAlignItems?: FlexStyleProps[\"$alignItems\"];\n $labelGap?: FlexStyleProps[\"$gap\"];\n disabled?: boolean;\n} & OakLabelProps;\n\nconst RadioButtonLabel = styled(OakLabel)<RadioButtonLabelProps>`\n ${(props) =>\n !props.disabled &&\n css`\n cursor: pointer;\n `}\n\n display: flex;\n ${responsiveStyle(\"gap\", (props) => props.$labelGap, parseSpacing)}\n ${responsiveStyle(\"align-items\", (props) => props.$labelAlignItems)}\n`;\n\nconst HiddenRadioButtonInput = styled.input.attrs({\n type: \"radio\",\n})`\n position: absolute;\n opacity: 0;\n ${(props) =>\n !props.disabled &&\n css`\n cursor: pointer;\n `}\n`;\n\ntype VisibleRadioButtonInputProps = OakFlexProps & {\n $disableFocusRing: boolean;\n $radioInnerSize: OakAllSpacingToken;\n disabled?: boolean;\n};\n\nconst VisibleRadioButtonInput = styled(OakFlex)<VisibleRadioButtonInputProps>`\n border-radius: 50%;\n\n ${(props) =>\n !props.$disableFocusRing &&\n css`\n ${HiddenRadioButtonInput}:focus-visible ~ &::before {\n content: \"\";\n height: ${parseSpacing(\"all-spacing-7\")};\n width: ${parseSpacing(\"all-spacing-7\")};\n background: \"transparent\"\n display: block;\n position: absolute;\n border-radius: 50%;\n border: ${parseBorder(\"border-solid-m\")} ${parseColor(\"grey60\")};\n box-shadow: ${`inset 0 0 0 0.13rem ${parseColor(\"lemon\")}`};\n }`}\n\n ${HiddenRadioButtonInput}:checked ~ &::after {\n content: \"\";\n height: ${(props) => parseSpacing(props.$radioInnerSize)};\n width: ${(props) => parseSpacing(props.$radioInnerSize)};\n background: ${parseColor(\"black\")};\n position: absolute;\n border-radius: 50%;\n border: ${parseBorder(\"border-solid-m\")} ${parseColor(\"white\")};\n }\n`;\n\n// This is a hack to force React to rerender when the disabled prop is changed. Otherwise the pseudo element is not updated.\nconst DisabledVisibleRadioButtonInput = styled(VisibleRadioButtonInput)`\n ${HiddenRadioButtonInput}:checked ~ &::after {\n content: \"\";\n height: ${(props) => parseSpacing(props.$radioInnerSize)};\n width: ${(props) => parseSpacing(props.$radioInnerSize)};\n background: ${parseColor(\"bg-btn-primary-disabled\")};\n position: absolute;\n border-radius: 50%;\n border: ${parseBorder(\"border-solid-m\")} ${parseColor(\"white\")};\n }\n`;\n\nexport type OakRadioButtonProps = {\n id: string;\n label: ReactNode;\n value: string;\n tabIndex?: number;\n \"data-testid\"?: string;\n disabled?: boolean;\n /**\n * Allows the focus ring to be disabled. This is useful when focus is indicated\n * by other means, such as a border or background color change.\n */\n disableFocusRing?: boolean;\n /**\n * Allows the size of the radio button to be customized.\n */\n radioOuterSize?: OakAllSpacingToken;\n /**\n * Allows the size of the inner \"checked\" circle of the radio button to be customized.\n */\n radioInnerSize?: OakAllSpacingToken;\n /**\n * Allows the width of the radio button border to be customized.\n */\n radioBorderWidth?: OakBorderWidthToken;\n /**\n * Allows the width of the radio button border to be customized when the radio button is checked.\n */\n checkedRadioBorderWidth?: OakBorderWidthToken;\n} & OakBoxProps &\n RadioButtonLabelProps;\n\nexport const OakRadioButton = forwardRef<HTMLInputElement, OakRadioButtonProps>(\n (props, ref) => {\n const radioContext = useContext(RadioContext);\n const { currentValue, name, onValueUpdated } = radioContext;\n const {\n id,\n label,\n value,\n tabIndex,\n disabled,\n $labelGap = \"space-between-ssx\",\n $labelAlignItems = \"center\",\n $font = \"body-1\",\n \"data-testid\": dataTestId,\n disableFocusRing = false,\n radioInnerSize = \"all-spacing-4\",\n radioOuterSize = \"all-spacing-6\",\n radioBorderWidth = \"border-solid-m\",\n checkedRadioBorderWidth = \"border-solid-m\",\n ...rest\n } = props;\n const checked = value === currentValue;\n const anyDisabled = disabled || radioContext.disabled;\n const finalRadioBorderWidth = checked\n ? checkedRadioBorderWidth\n : radioBorderWidth;\n\n return (\n <OakBox {...rest}>\n <RadioButtonLabel\n htmlFor={id}\n $labelAlignItems={$labelAlignItems}\n $labelGap={$labelGap}\n $font={$font}\n data-testid={dataTestId}\n disabled={anyDisabled}\n >\n <HiddenRadioButtonInput\n name={name}\n id={id}\n value={value}\n onChange={onValueUpdated}\n checked={value === currentValue}\n tabIndex={tabIndex}\n disabled={anyDisabled}\n ref={ref}\n />\n {!anyDisabled ? (\n <VisibleRadioButtonInput\n $height={radioOuterSize}\n $width={radioOuterSize}\n $ba={finalRadioBorderWidth}\n $borderColor={\"black\"}\n $flexGrow={0}\n $flexShrink={0}\n $alignItems={\"center\"}\n $justifyContent={\"center\"}\n $background={\"white\"}\n $disableFocusRing={!!disableFocusRing}\n $radioInnerSize={radioInnerSize}\n />\n ) : (\n <DisabledVisibleRadioButtonInput\n $height={radioOuterSize}\n $width={radioOuterSize}\n $ba={finalRadioBorderWidth}\n $borderColor={\"bg-btn-primary-disabled\"}\n $flexGrow={0}\n $flexShrink={0}\n $alignItems={\"center\"}\n $justifyContent={\"center\"}\n $background={\"white\"}\n $disableFocusRing={!!disableFocusRing}\n $radioInnerSize={radioInnerSize}\n />\n )}\n {label}\n </RadioButtonLabel>\n </OakBox>\n );\n },\n);\n\nexport type OakRadioButtonType = typeof OakRadioButton;\n","import React, { forwardRef, useRef } from \"react\";\nimport styled, { css } from \"styled-components\";\n\nimport { OakBorderRadiusToken, OakCombinedColorToken } from \"@/styles\";\nimport { parseBorderRadius } from \"@/styles/helpers/parseBorderRadius\";\nimport { parseColor } from \"@/styles/helpers/parseColor\";\nimport { parseDropShadow } from \"@/styles/helpers/parseDropShadow\";\nimport { BorderStyleProps, borderStyle } from \"@/styles/utils/borderStyle\";\nimport { ColorStyleProps, colorStyle } from \"@/styles/utils/colorStyle\";\nimport { SizeStyleProps, sizeStyle } from \"@/styles/utils/sizeStyle\";\nimport { SpacingStyleProps, spacingStyle } from \"@/styles/utils/spacingStyle\";\n\n/**\n *\n * These components can be used with InternalCheckBoxWrapper which allows for customisable icons\n *\n * Several flavours of checkbox are created here:\n * - Default\n * - Hover decorations\n * - Focus decorations\n * - Hover + Focus decorations\n *\n * As they are styled components they can be further customised in implementation. Alternatively additional\n * components can be created here.\n *\n */\n\nexport type BaseCheckBoxProps = {\n id: string;\n disabled?: boolean;\n value: string;\n defaultChecked?: boolean;\n onHovered?: (value: string, id: string, duration: number) => void;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n \"data-testid\"?: string;\n};\n\nconst BaseCheckBox = forwardRef(\n (props: BaseCheckBoxProps, ref?: React.Ref<HTMLInputElement>) => {\n const { onHovered, ...rest } = props;\n\n const hoverStart = useRef(Date.now());\n\n const handleMouseEnter = () => {\n hoverStart.current = Date.now();\n };\n\n const handleMouseLeave = () => {\n const delta = Date.now() - hoverStart.current;\n if (onHovered) {\n onHovered(props.value, props.id, delta);\n }\n };\n\n return (\n <input\n ref={ref}\n type=\"checkbox\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...rest}\n name={props.id}\n />\n );\n },\n);\n\ntype StyledBaseCheckBoxProps = BaseCheckBoxProps &\n ColorStyleProps &\n SpacingStyleProps &\n BorderStyleProps &\n SizeStyleProps & {\n $checkedBackground?: OakCombinedColorToken | null;\n };\n\ntype HoverBaseCheckBoxProps = {\n $hoverBorderRadius: OakBorderRadiusToken;\n};\n\nexport const InternalCheckBox = styled(BaseCheckBox)<StyledBaseCheckBoxProps>`\n /* removing default appearance */\n -webkit-appearance: none;\n appearance: none;\n cursor: pointer;\n margin: 0;\n outline: none;\n ${borderStyle}\n ${colorStyle}\n ${spacingStyle}\n ${sizeStyle}\n\n &:checked {\n ${(props) => css`\n background: ${parseColor(props.$checkedBackground)};\n `};\n }\n\n &:disabled {\n pointer-events: none;\n }\n`;\n\nInternalCheckBox.defaultProps = {\n $borderRadius: \"border-radius-xs\",\n $ba: \"border-solid-m\",\n $borderColor: \"text-primary\",\n $checkedBackground: \"text-primary\",\n};\n\nexport const InternalCheckBoxHover = styled(InternalCheckBox)<\n StyledBaseCheckBoxProps & HoverBaseCheckBoxProps\n>`\n /* @media wrapper is required to prevent hover effect on iOS Safari */\n\n @media (hover: hover) {\n &:hover:not(&:checked):not(&:disabled)::after {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n width: 60%;\n height: 60%;\n transform: translate(-50%, -50%);\n border-radius: ${(props) => css`\n ${parseBorderRadius(props.$hoverBorderRadius)}\n `};\n background: ${(props) => css`\n ${parseColor(props.$checkedBackground)}\n `};\n }\n }\n`;\n\nInternalCheckBoxHover.defaultProps = {\n $hoverBorderRadius: \"border-radius-xs\",\n};\n\nconst focusStyle = css`\n &:focus-visible {\n box-shadow: ${parseDropShadow(\"drop-shadow-centered-lemon\")};\n }\n`;\n\nexport const InternalCheckBoxFocus = styled(\n InternalCheckBox,\n)<StyledBaseCheckBoxProps>`\n ${focusStyle}\n`;\n\nexport const InternalCheckBoxHoverFocus = styled(InternalCheckBoxHover)<\n StyledBaseCheckBoxProps & HoverBaseCheckBoxProps\n>`\n ${focusStyle}\n`;\n","import styled, { css } from \"styled-components\";\n\nimport { OakLabel, OakLabelProps } from \"@/components/base\";\nimport { responsiveStyle } from \"@/styles/utils/responsiveStyle\";\nimport { parseSpacing } from \"@/styles/helpers/parseSpacing\";\nimport { FlexStyleProps } from \"@/styles/utils/flexStyle\";\n\nexport type InternalCheckBoxLabelProps = {\n labelAlignItems?: FlexStyleProps[\"$alignItems\"];\n labelGap?: FlexStyleProps[\"$gap\"];\n disabled?: boolean;\n \"data-testid\"?: string;\n} & OakLabelProps;\n\nexport const InternalCheckBoxLabel = styled(\n OakLabel,\n)<InternalCheckBoxLabelProps>`\n display: flex;\n align-items: center;\n ${responsiveStyle(\"gap\", (props) => props.labelGap, parseSpacing)}\n ${responsiveStyle(\"align-items\", (props) => props.labelAlignItems)}\n`;\n\nexport const InternalCheckBoxLabelHoverDecor = styled(InternalCheckBoxLabel)`\n ${(props) =>\n props.disabled\n ? css`\n pointer-events: none;\n `\n : css`\n cursor: pointer;\n `}\n @media (hover: hover) {\n &:hover {\n text-decoration: ${(props) => (props.disabled ? \"none\" : \"underline\")};\n }\n }\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nimport { OakBox, OakBoxProps, OakIcon } from \"@/components/base\";\nimport { OakAllSpacingToken, OakInnerPaddingToken } from \"@/styles\";\nimport { ResponsiveValues } from \"@/styles/utils/responsiveStyle\";\n\nconst StyledIconContainer = styled(OakBox)<\n OakBoxProps & { disabled?: boolean }\n>`\n pointer-events: none;\n opacity: 0;\n\n input:checked + & {\n opacity: 1;\n }\n`;\n\nexport type InternalCheckBoxWrapperProps = {\n size?: ResponsiveValues<OakAllSpacingToken>;\n internalCheckbox: React.JSX.Element;\n iconPadding?: OakInnerPaddingToken;\n checkedIcon?: React.JSX.Element;\n};\n\nexport const InternalCheckBoxWrapper = (\n props: InternalCheckBoxWrapperProps,\n) => {\n const {\n size = \"all-spacing-6\",\n iconPadding = \"inner-padding-none\",\n internalCheckbox,\n checkedIcon = (\n <OakIcon\n iconName=\"tick\"\n $width={\"100%\"}\n $height={\"100%\"}\n $colorFilter={\"white\"}\n />\n ),\n } = props;\n\n return (\n <OakBox $position=\"relative\" $width={size} $height={size}>\n {internalCheckbox}\n <StyledIconContainer\n $position={\"absolute\"}\n $top={\"all-spacing-0\"}\n $left={\"all-spacing-0\"}\n $pa={iconPadding}\n $width={size}\n $height={size}\n >\n {checkedIcon}\n </StyledIconContainer>\n </OakBox>\n );\n};\n","import React, {\n DetailedHTMLProps,\n InputHTMLAttributes,\n FocusEvent,\n useRef,\n} from \"react\";\nimport styled from \"styled-components\";\n\nimport { parseColor } from \"@/styles/helpers/parseColor\";\nimport { getBreakpoint } from \"@/styles/utils/responsiveStyle\";\nimport { SpacingStyleProps, spacingStyle } from \"@/styles/utils/spacingStyle\";\nimport { SizeStyleProps, sizeStyle } from \"@/styles/utils/sizeStyle\";\n\ntype StyledInputProps = Omit<\n DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>,\n \"ref\"\n> &\n SpacingStyleProps &\n SizeStyleProps;\n\n/**\n * Using `appearance none !important;` here because many style resets will set this\n * value to textfield, causing some browsers to implement undesirable styles.\n * E.g. ios and rounded borders (which border-radius doesn't fix without\n * appearance: none)\n */\nconst StyledInput = styled.input`\n appearance: none !important;\n border: 0;\n border-radius: 0;\n border-color: transparent;\n box-shadow: none;\n font-family: inherit;\n background: transparent;\n outline: none;\n color: inherit;\n\n @media (max-width: ${getBreakpoint(\"small\")}px) {\n /* iOS zooms in on inputs with font sizes <16px on mobile */\n font-size: 16px;\n }\n\n ::placeholder {\n color: ${({ theme }) =>\n theme && theme.uiColors && parseColor(theme.uiColors[\"text-subdued\"])};\n }\n\n ::-webkit-search-decoration,\n ::-webkit-search-cancel-button,\n ::-webkit-search-results-button,\n ::-webkit-search-results-decoration {\n appearance: none;\n }\n\n :disabled {\n cursor: not-allowed;\n }\n\n ${spacingStyle}\n ${sizeStyle}\n`;\n\nexport type InternalTextInputProps = Omit<StyledInputProps, \"placeholder\"> & {\n /**\n * A textual hint or example to display before a value has been entered\n */\n placeholder?: string;\n /**\n * Fired only when the input is focused for the first time\n */\n onInitialFocus?: (e: FocusEvent<HTMLInputElement>) => void;\n};\n\n/**\n *\n * An unstyled input to be used as a basis for UI input components.\n * Supports all the props of a regular `HTMLInputElement`\n *\n * 🚨 The CSS `outline` is disabled so a focus ring must be applied by the consuming component.\n *\n * The following callbacks are available for tracking focus events:\n *\n * ### onFocus\n * `(e: FocusEvent<HTMLInputElement>) => void;`\n * ### onBlur\n * `(e: FocusEvent<HTMLInputElement>) => void;`\n * ### onInitialFocus\n * `(e: FocusEvent<HTMLInputElement>) => void;`<br>\n * occurs only when the input is focused for the first time\n *\n */\nexport const InternalTextInput = (props: InternalTextInputProps) => {\n const { onInitialFocus, onFocus, ...rest } = props;\n\n const hadInitialFocused = useRef(false);\n\n const handleOnFocus = (e: FocusEvent<HTMLInputElement>) => {\n if (!hadInitialFocused.current && props.onInitialFocus) {\n props.onInitialFocus(e);\n hadInitialFocused.current = true;\n }\n\n if (props.onFocus) {\n props.onFocus(e);\n }\n };\n\n return <StyledInput {...rest} onFocus={handleOnFocus} />;\n};\n","import React, { ChangeEventHandler } from \"react\";\nimport styled, { css } from \"styled-components\";\n\nimport { parseColor } from \"@/styles/helpers/parseColor\";\nimport {\n InternalTextInput,\n InternalTextInputProps,\n} from \"@/components/base/InternalTextInput\";\nimport { OakFlex, OakIcon, OakIconName } from \"@/components/base\";\nimport { OakCombinedColorToken, OakDropShadowToken } from \"@/styles\";\nimport { parseDropShadow } from \"@/styles/helpers/parseDropShadow\";\nimport { SizeStyleProps } from \"@/styles/utils/sizeStyle\";\n\ntype StyledTextInputWrapperProps = {\n $color: OakCombinedColorToken;\n $hoverBackground: OakCombinedColorToken;\n $background: OakCombinedColorToken;\n $borderColor: OakCombinedColorToken;\n $focusRingDropShadows: OakDropShadowToken[];\n $disabledBackgroundColor: OakCombinedColorToken;\n $readOnlyBorderColor: OakCombinedColorToken;\n $disabledColor: OakCombinedColorToken;\n $readOnlyColor: OakCombinedColorToken;\n $disabled: boolean;\n $readOnly: boolean;\n};\n\nexport type OakTextInputProps = {\n /**\n * Disables user input and updates the appearance accordingly.\n */\n disabled?: boolean;\n /**\n * Makes the input read-only. Preventing the user from changing the value.\n */\n readOnly?: boolean;\n /**\n * Sets the value. Use this in controlled components;\n */\n value?: string;\n /**\n * Sets the initial value. Use this for an uncontrolled component;\n */\n defaultValue?: string;\n /**\n * Used to target the input element in tests.\n */\n \"data-testid\"?: string;\n onChange?: ChangeEventHandler<HTMLInputElement>;\n /**\n * Alters the appearance of the input field to indicate whether the input is valid or invalid.\n */\n validity?: \"valid\" | \"invalid\";\n /**\n * Adds an icon to the input\n *\n * Defaults to the start of the input\n */\n iconName?: OakIconName;\n /**\n * Position the icon at the end of the input\n */\n isTrailingIcon?: boolean;\n iconColor?: OakCombinedColorToken;\n validBorderColor?: OakCombinedColorToken;\n invalidBorderColor?: OakCombinedColorToken;\n validIconColor?: OakCombinedColorToken;\n invalidIconColor?: OakCombinedColorToken;\n color?: OakCombinedColorToken;\n hoverBackground?: OakCombinedColorToken;\n background?: OakCombinedColorToken;\n borderColor?: OakCombinedColorToken;\n focusRingDropShadows?: OakDropShadowToken[];\n disabledBackgroundColor?: OakCombinedColorToken;\n readOnlyBorderColor?: OakCombinedColorToken;\n disabledColor?: OakCombinedColorToken;\n readOnlyColor?: OakCombinedColorToken;\n width?: SizeStyleProps[\"$width\"];\n maxWidth?: SizeStyleProps[\"$maxWidth\"];\n iconAlt?: string;\n} & InternalTextInputProps;\n\nconst StyledTextInputWrapper = styled(OakFlex)<StyledTextInputWrapperProps>`\n &:hover {\n cursor: text;\n }\n\n &:focus-within {\n box-shadow: ${(props) =>\n props.$focusRingDropShadows\n .map((dropShadow) => parseDropShadow(dropShadow))\n .join(\",\")};\n }\n\n background: ${(props) => parseColor(props.$background)};\n\n ${(props) =>\n !props.$readOnly &&\n css`\n @media (hover: hover) {\n &:hover:not(:focus-within) {\n background: ${parseColor(props.$hoverBackground)};\n }\n }\n `}\n\n ${(props) =>\n props.$readOnly &&\n css`\n border-color: ${parseColor(props.$readOnlyBorderColor)};\n color: ${parseColor(props.$readOnlyColor)};\n `}\n\n ${(props) =>\n props.$disabled &&\n css`\n background: ${parseColor(props.$disabledBackgroundColor)};\n color: ${parseColor(props.$disabledColor)};\n &:hover {\n cursor: not-allowed;\n }\n `}\n`;\n\n/**\n * Default input which can be extended to create specialised inputs.\n */\nexport const OakTextInput = ({\n type = \"text\",\n borderColor = \"border-primary\",\n readOnlyBorderColor = \"border-neutral\",\n focusRingDropShadows = [\n \"drop-shadow-centered-lemon\",\n \"drop-shadow-centered-grey\",\n ],\n background = \"bg-primary\",\n hoverBackground = \"bg-neutral\",\n disabledBackgroundColor = \"bg-neutral\",\n color = \"text-primary\",\n disabledColor = \"text-disabled\",\n readOnlyColor = \"text-subdued\",\n validity,\n iconColor = \"icon-inverted\",\n validBorderColor = \"border-success\",\n invalidBorderColor = \"border-error\",\n validIconColor = \"icon-success\",\n invalidIconColor = \"border-error\",\n iconName,\n iconAlt,\n isTrailingIcon = false,\n width,\n maxWidth,\n ...props\n}: OakTextInputProps) => {\n let finalBorderColor: OakCombinedColorToken;\n let finalIconColor: OakCombinedColorToken;\n let finalReadOnlyBorderColor: OakCombinedColorToken;\n\n switch (validity) {\n case \"valid\":\n finalBorderColor = validBorderColor;\n finalIconColor = validIconColor;\n finalReadOnlyBorderColor = validBorderColor;\n break;\n case \"invalid\":\n finalBorderColor = invalidBorderColor;\n finalIconColor = invalidIconColor;\n finalReadOnlyBorderColor = invalidBorderColor;\n break;\n default:\n finalBorderColor = borderColor;\n finalIconColor = iconColor;\n finalReadOnlyBorderColor = readOnlyBorderColor;\n break;\n }\n\n return (\n <StyledTextInputWrapper\n $width=\"fit-content\"\n $height=\"fit-content\"\n $borderStyle=\"solid\"\n $borderRadius=\"border-radius-s\"\n $ba=\"border-solid-m\"\n $borderColor={finalBorderColor}\n $focusRingDropShadows={focusRingDropShadows}\n $background={background}\n $hoverBackground={hoverBackground}\n $disabledBackgroundColor={disabledBackgroundColor}\n $readOnlyBorderColor={finalReadOnlyBorderColor}\n $disabledColor={disabledColor}\n $readOnlyColor={readOnlyColor}\n $color={color}\n $alignItems=\"center\"\n $position=\"relative\"\n $gap=\"space-between-s\"\n $ph=\"inner-padding-l\"\n $disabled={!!props.disabled}\n $readOnly={!!props.readOnly}\n onClick={(event) => {\n event.currentTarget.querySelector(\"input\")?.focus();\n }}\n >\n {!isTrailingIcon && iconName && (\n <OakIcon\n iconName={iconName}\n $colorFilter={finalIconColor}\n $pointerEvents=\"none\"\n alt={iconAlt}\n />\n )}\n <InternalTextInput\n type={type}\n {...props}\n $width={width}\n $maxWidth={maxWidth}\n $pv=\"inner-padding-l\"\n $height=\"all-spacing-12\"\n />\n {isTrailingIcon && iconName && (\n <OakIcon\n iconName={iconName}\n $colorFilter={finalIconColor}\n $pointerEvents=\"none\"\n alt={iconAlt}\n />\n )}\n </StyledTextInputWrapper>\n );\n};\n","import React from \"react\";\n\nimport {\n OakBox,\n OakIcon,\n OakIconProps,\n OakImage,\n OakImageProps,\n} from \"@/components/base\";\n\ntype ImageProps = OakImageProps & {\n iconName?: undefined;\n};\n\ntype IconProps = OakIconProps & {\n src?: undefined;\n};\n\nexport type OakRoundIconProps = IconProps | ImageProps;\n\n/**\n * A wrapper around `OakIcon` which applies a rounded background.\n * Supports either an icon name or an image src\n */\nexport const OakRoundIcon = ({\n $background = \"bg-decorative5-main\",\n $borderRadius = \"border-radius-circle\",\n $width = \"all-spacing-9\",\n $height = \"all-spacing-9\",\n $pa = \"inner-padding-ssx\",\n className,\n ...rest\n}: OakRoundIconProps) => {\n const icon = rest.iconName ? (\n <OakIcon {...rest} $height=\"100%\" $width=\"100%\" />\n ) : (\n <OakImage {...rest} $height=\"100%\" $width=\"100%\" />\n );\n\n return (\n <OakBox\n className={className}\n $background={$background}\n $borderRadius={$borderRadius}\n $width={$width}\n $height={$height}\n $pa={$pa}\n >\n {icon}\n </OakBox>\n );\n};\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\n\nimport { OakFlex, OakFlexProps } from \"../OakFlex\";\n\nimport { OakCombinedColorToken } from \"@/styles\";\nimport { parseColor } from \"@/styles/helpers/parseColor\";\nimport { ColorStyleProps } from \"@/styles/utils/colorStyle\";\nimport { responsiveStyle } from \"@/styles/utils/responsiveStyle\";\n\nexport type InternalTooltipProps = OakFlexProps & {\n isOpen: boolean;\n tooltip: ReactNode;\n children?: ReactNode;\n};\n\nconst StyledFlex = styled(OakFlex)`\n width: max-content;\n pointer-events: none;\n`;\n\ntype StyledSvgProps = {\n $fill: ColorStyleProps[\"$background\"];\n};\n\nconst StyledSvg = styled.svg<StyledSvgProps>`\n position: absolute;\n bottom: -16px;\n left: 0;\n ${responsiveStyle<StyledSvgProps, OakCombinedColorToken>(\n \"fill\",\n (props) => props.$fill,\n parseColor,\n )}\n`;\n\n/**\n * A primitive tooltip to be used as a basis for more opinionated UI components.\n */\nexport const InternalTooltip = ({\n isOpen,\n children,\n tooltip,\n $background = \"black\",\n $color = \"text-inverted\",\n $borderRadius,\n ...props\n}: InternalTooltipProps) => {\n return (\n <OakFlex $position=\"relative\" $width=\"fit-content\" $height=\"fit-content\">\n {isOpen && (\n <OakFlex\n role=\"tooltip\"\n $position=\"absolute\"\n $top=\"all-spacing-0\"\n $left=\"all-spacing-0\"\n $transform=\"translateY(calc(-100% - 16px))\"\n $zIndex=\"modal-dialog\"\n $flexDirection=\"column\"\n >\n <StyledFlex\n {...props}\n $position=\"relative\"\n $background={$background}\n $color={$color}\n $btr={$borderRadius}\n $bbrr={$borderRadius}\n $maxWidth={[\"all-spacing-20\", \"all-spacing-22\"]}\n >\n {tooltip}\n <StyledSvg width=\"16\" height=\"16\" $fill={$background}>\n <path d=\"M0 0H16L8 8L0 16V0Z\" />\n </StyledSvg>\n </StyledFlex>\n </OakFlex>\n )}\n {children}\n </OakFlex>\n );\n};\n","import React from \"react\";\n\nimport {\n InternalTooltip,\n InternalTooltipProps,\n} from \"@/components/base/InternalTooltip/InternalTooltip\";\n\n/**\n * A tooltip with oven-ready styling\n */\nexport const OakTooltip = ({\n ...props\n}: Pick<InternalTooltipProps, \"isOpen\" | \"tooltip\" | \"children\">) => {\n return (\n <InternalTooltip\n $background=\"bg-decorative5-main\"\n $color=\"text-primary\"\n $pv=\"inner-padding-m\"\n $ph=\"inner-padding-xl\"\n $font=\"heading-light-7\"\n $borderRadius=\"border-radius-m2\"\n {...props}\n />\n );\n};\n","import React, { ElementType, ComponentPropsWithoutRef } from \"react\";\nimport styled from \"styled-components\";\n\nimport { parseColor } from \"@/styles/helpers/parseColor\";\nimport { parseColorFilter } from \"@/styles/helpers/parseColorFilter\";\nimport { parseDropShadow } from \"@/styles/helpers/parseDropShadow\";\nimport { OakIcon } from \"@/components/base\";\n\nexport type OakBackLinkProps<C extends ElementType> = {\n as?: C;\n label?: string;\n} & ComponentPropsWithoutRef<C>;\n\nconst StyledBackLink = styled.a`\n border-radius: 50%;\n display: flex;\n width: fit-content;\n height: fit-content;\n border: none;\n padding: 0;\n outline: none;\n\n img {\n pointer-events: none;\n }\n\n &:not(:disabled) {\n cursor: pointer;\n }\n\n &:active {\n box-shadow: ${parseDropShadow(\"drop-shadow-lemon\")},\n ${parseDropShadow(\"drop-shadow-grey\")};\n }\n\n &:hover,\n &:focus-visible {\n background: ${parseColor(\"bg-btn-primary\")};\n\n img {\n filter: ${parseColorFilter(\"text-inverted\")};\n }\n }\n\n &:focus-visible {\n box-shadow: ${parseDropShadow(\"drop-shadow-centered-lemon\")},\n ${parseDropShadow(\"drop-shadow-centered-grey\")};\n }\n\n &:disabled {\n background: ${parseColor(\"bg-btn-primary-disabled\")};\n\n img {\n filter: ${parseColorFilter(\"text-inverted\")};\n }\n }\n`;\n\n/**\n * Used to navigate the user back to the previous page in the app.\n *\n * Polymorphic rendering as any HTML element or component using `as` — defaults to `a`.\n *\n * E.g.\n *\n * * Default (Anchor) `<OakBackLink href=\"https://www.thenational.academy/\" />`\n * * Button `<OakBackLink as=\"button\" onClick={() => goBack(-1)} />`\n */\nexport const OakBackLink = <C extends ElementType = \"a\">({\n as,\n label = \"Back\",\n ...props\n}: OakBackLinkProps<C>) => {\n return (\n <StyledBackLink as={as ?? \"a\"} aria-label={label} {...props}>\n <OakIcon\n alt=\"\"\n iconName=\"chevron-left\"\n $width=\"all-spacing-8\"\n $height=\"all-spacing-8\"\n />\n </StyledBackLink>\n );\n};\n","import React, { useRef } from \"react\";\nimport styled, { css } from \"styled-components\";\n\nimport { OakBox, OakFlex, OakFlexProps, OakIcon } from \"@/components/base\";\nimport { InternalCheckBoxWrapper } from \"@/components/base/InternalCheckBoxWrapper\";\nimport { InternalCheckBoxLabelHoverDecor } from \"@/components/base/InternalCheckBoxLabel\";\nimport {\n BaseCheckBoxProps,\n InternalCheckBox,\n} from \"@/components/base/InternalCheckBox/InternalCheckBox\";\nimport { parseColor } from \"@/styles/helpers/parseColor\";\nimport { parseBorder } from \"@/styles/helpers/parseBorder\";\nimport { parseBorderRadius } from \"@/styles/helpers/parseBorderRadius\";\nimport { parseDropShadow } from \"@/styles/helpers/parseDropShadow\";\nimport { OakCombinedColorToken } from \"@/styles\";\n\nconst StyledInternalCheckBox = styled(InternalCheckBox)`\n &:checked:not(:disabled) {\n border: ${parseBorder(\"border-solid-l\")};\n border-color: ${parseColor(\"border-primary\")};\n }\n\n &:checked:disabled {\n border: ${parseBorder(\"border-solid-l\")};\n border-color: ${parseColor(\"text-disabled\")};\n }\n\n @media (hover: hover) {\n &:hover:not(:disabled) {\n background: ${parseColor(\"bg-primary\")};\n }\n }\n`;\n\nconst StyledInternalCheckBoxLabelHoverDecor = styled(\n InternalCheckBoxLabelHoverDecor,\n)`\n pointer-events: none; // To prevent the label from stealing the click event from the input\n`;\n\ntype StyledFlexBoxProps = OakFlexProps & {\n overlayBorderColor?: OakCombinedColorToken;\n feedbackBgColor?: OakCombinedColorToken;\n};\n\nconst StyledFlexBox = styled(OakFlex)<StyledFlexBoxProps>`\n &:has(input:not(:disabled)) {\n cursor: pointer;\n }\n\n &:has(input:disabled) {\n pointer-events: none;\n cursor: none;\n }\n\n @media (hover: hover) {\n &:hover:has(input:not(:disabled)){\n background-color: ${parseColor(\"bg-decorative1-subdued\")};\n }\n\n &:hover input:not(:disabled) {\n background: ${parseColor(\"bg-primary\")};\n }\n\n &:hover:has(input:not(:disabled)) ${InternalCheckBoxLabelHoverDecor} {\n text-decoration: underline;\n }\n\n &:hover:has(\n ${InternalCheckBoxLabelHoverDecor} input:not(:focus-visible):not(:checked):not(:disabled)\n )::after {\n content: \"\";\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n position: absolute;\n border-bottom: ${parseBorder(\"border-solid-xl\")};\n border-radius: ${parseBorderRadius(\"border-radius-m2\")};\n }\n\n &\n .yellow-shadow:has(\n + ${InternalCheckBoxLabelHoverDecor} input:focus-visible\n ) {\n box-shadow: ${parseDropShadow(\"drop-shadow-centered-lemon\")};\n }\n\n &\n .grey-shadow:has(\n ~ ${InternalCheckBoxLabelHoverDecor} input:focus-visible\n ) {\n box-shadow: ${parseDropShadow(\"drop-shadow-centered-grey\")};\n }\n \n &:has(input:checked:not(:disabled))::after {\n content: \"\";\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n position: absolute;\n outline: ${parseBorder(\"border-solid-xl\")};\n border-radius: ${parseBorderRadius(\"border-radius-m2\")};\n }\n\n &:has(input:checked:disabled)::after {\n content: \"\";\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n position: absolute;\n outline: ${parseBorder(\"border-solid-xl\")};\n border-radius: ${parseBorderRadius(\"border-radius-m2\")};\n outline-color: ${(props) => css`\n ${parseColor(props.overlayBorderColor ?? \"text-disabled\")}\n `};\n }\n\n &:has(input:disabled:not(:checked)) {\n ${(props) =>\n props.feedbackBgColor\n ? css`\n background-color: ${props.feedbackBgColor};\n `\n : undefined}\n }\n\n &:has(input:disabled:checked) {\n ${(props) => css`\n background-color: ${parseColor(props.feedbackBgColor)};\n `};\n }\n`;\n\nexport type OakQuizCheckBoxProps = Omit<BaseCheckBoxProps, \"defaultChecked\"> & {\n feedback?: \"correct\" | \"incorrect\" | null;\n image?: React.JSX.Element;\n innerRef?: React.RefObject<HTMLInputElement>;\n displayValue?: string;\n};\n\nconst StyledOverlay = styled(OakBox)`\n pointer-events: none;\n`;\n\nexport const OakQuizCheckBox = (props: OakQuizCheckBoxProps) => {\n const {\n id,\n value,\n feedback,\n image,\n disabled,\n innerRef,\n displayValue,\n ...rest\n } = props;\n\n const isFeedback = !!feedback;\n\n const defaultRef = useRef<HTMLInputElement>(null);\n const inputRef = innerRef ?? defaultRef;\n const showTick =\n (feedback === \"correct\" && inputRef.current?.checked) ||\n (feedback === \"incorrect\" && !inputRef.current?.checked);\n const showCross = feedback === \"incorrect\" && inputRef.current?.checked;\n\n const handleContainerClick = (\n e:\n | React.MouseEvent<HTMLDivElement>\n | React.MouseEvent<HTMLInputElement>\n | React.MouseEvent<HTMLLabelElement>,\n ) => {\n const inputId = (e.target as HTMLInputElement).id;\n\n if (inputId !== id) {\n inputRef.current?.click();\n }\n };\n\n const imageContainer = (\n <OakFlex\n $flexDirection=\"column\"\n $minWidth={\"all-spacing-20\"}\n $gap={\"space-between-s\"}\n >\n <OakBox>{image}</OakBox>\n {displayValue}\n </OakFlex>\n );\n\n const backgroundColor: OakCombinedColorToken =\n disabled && !isFeedback ? \"bg-neutral-stronger\" : \"bg-primary\";\n\n const feedbackBgColor: OakCombinedColorToken = showTick\n ? \"bg-correct\"\n : \"bg-incorrect\";\n\n const feedbackBorderColor = showTick ? \"border-success\" : \"border-error\";\n\n const inputCheckbox = (\n <StyledFlexBox\n $pa=\"inner-padding-l\"\n $borderRadius={\"border-radius-m2\"}\n $borderColor={\"border-primary\"}\n $background={backgroundColor}\n $flexGrow={1}\n onClick={handleContainerClick}\n overlayBorderColor={isFeedback ? feedbackBorderColor : undefined}\n feedbackBgColor={isFeedback ? feedbackBgColor : undefined}\n >\n <StyledOverlay\n className=\"grey-shadow\"\n $position={\"absolute\"}\n $left={\"space-between-none\"}\n $top={\"space-between-none\"}\n $borderRadius={\"border-radius-m2\"}\n $width={\"100%\"}\n $height={\"100%\"}\n />\n\n <StyledOverlay\n className=\"yellow-shadow\"\n $position={\"absolute\"}\n $borderRadius={\"border-radius-m2\"}\n $left={\"space-between-none\"}\n $top={\"space-between-none\"}\n $width={\"100%\"}\n $height={\"100%\"}\n />\n\n <StyledInternalCheckBoxLabelHoverDecor\n htmlFor={id}\n labelGap={\"space-between-s\"}\n labelAlignItems={\"center\"}\n $color={disabled && !isFeedback ? \"text-disabled\" : \"text-primary\"}\n $font={\"body-1\"}\n disabled={disabled}\n >\n <InternalCheckBoxWrapper\n size={\"all-spacing-7\"}\n iconPadding=\"inner-padding-ssx\"\n checkedIcon={\n <OakBox\n $width=\"100%\"\n $height=\"100%\"\n $background={\n disabled || isFeedback ? \"text-disabled\" : \"text-primary\"\n }\n >\n <OakBox\n $ba={\"border-solid-m\"}\n $borderColor={\"white\"}\n $width={\"100%\"}\n $height={\"100%\"}\n />\n </OakBox>\n }\n internalCheckbox={\n <StyledInternalCheckBox\n id={id}\n value={value}\n disabled={disabled || isFeedback}\n {...rest}\n $width={\"all-spacing-7\"}\n $height={\"all-spacing-7\"}\n $ba={\"border-solid-m\"}\n $borderColor=\"border-neutral\"\n $borderRadius={\"border-radius-s\"}\n $checkedBackground={null}\n ref={inputRef}\n />\n }\n />\n {image ? imageContainer : displayValue}\n </StyledInternalCheckBoxLabelHoverDecor>\n {isFeedback && (showTick || showCross) && (\n <OakFlex\n className=\"feedbackIconWrapper\"\n $flexGrow={1}\n $justifyContent={\"flex-end\"}\n $alignItems={\"flex-end\"}\n $height={\"100%\"}\n >\n {showTick && (\n <OakIcon\n iconName={\"tick\"}\n $colorFilter={\"icon-success\"}\n alt={\n feedback === \"correct\" ? \"Correct\" : \"Unselected correct choice\"\n }\n />\n )}\n {showCross && (\n <OakIcon\n iconName={\"cross\"}\n $colorFilter={\"icon-error\"}\n alt={\"Incorrect\"}\n />\n )}\n </OakFlex>\n )}\n </StyledFlexBox>\n );\n\n return (\n <OakFlex $width={\"100%\"} $position={\"relative\"}>\n {inputCheckbox}\n </OakFlex>\n );\n};\n","import React, { MouseEventHandler, useContext } from \"react\";\nimport styled, { css } from \"styled-components\";\n\nimport { OakBox, OakFlex, OakIcon } from \"@/components/base\";\nimport {\n OakRadioButton,\n OakRadioButtonProps,\n} from \"@/components/ui/OakRadioButton/OakRadioButton\";\nimport { parseDropShadow } from \"@/styles/helpers/parseDropShadow\";\nimport { parseBorder } from \"@/styles/helpers/parseBorder\";\nimport { parseColor } from \"@/styles/helpers/parseColor\";\nimport { parseBorderRadius } from \"@/styles/helpers/parseBorderRadius\";\nimport { RadioContext } from \"@/components/ui/OakRadioGroup/OakRadioGroup\";\nimport { OakUiRoleToken } from \"@/styles\";\n\nexport type OakQuizRadioButtonProps = OakRadioButtonProps & {\n feedback?: \"correct\" | \"incorrect\" | null;\n image?: JSX.Element;\n};\n\ntype StyledOakFlexProps = {\n $disabled: boolean;\n $checked: boolean;\n $outlineColor?: OakUiRoleToken;\n};\n\nconst StyledOakFlex = styled(OakFlex)<StyledOakFlexProps>`\n ${(props) =>\n !!props.$outlineColor &&\n css`\n outline: ${parseBorder(\"border-solid-xl\")}\n ${parseColor(props.$outlineColor)};\n `}\n\n &:hover {\n cursor: ${(props) => (props.$disabled ? \"default\" : \"pointer\")};\n }\n\n &:focus-within {\n box-shadow: ${parseDropShadow(\"drop-shadow-centered-lemon\")},\n ${parseDropShadow(\"drop-shadow-centered-grey\")};\n }\n\n ${(props) =>\n !props.$disabled &&\n css`\n &:hover {\n background-color: ${parseColor(\"bg-decorative1-subdued\")};\n text-decoration: underline;\n }\n `}\n\n ${(props) =>\n !props.$disabled &&\n !props.$checked &&\n css`\n &:hover:not(:focus-within)::after {\n pointer-events: none;\n content: \"\";\n position: absolute;\n inset: 0;\n border-radius: ${parseBorderRadius(\"border-radius-m2\")};\n border-bottom: ${parseBorder(\"border-solid-l\")} ${parseColor(\"grey60\")};\n }\n `}\n`;\n\nexport const OakQuizRadioButton = (props: OakQuizRadioButtonProps) => {\n const { value, feedback, image, disabled, label, ...rest } = props;\n const showFeedback = !!feedback;\n // Give the input focus when the entire component is clicked\n const handleOnClick: MouseEventHandler<HTMLElement> = (event) => {\n event.currentTarget.querySelector(\"input\")?.click();\n };\n const checked = useContext(RadioContext).currentValue === value;\n let outlineColor: OakUiRoleToken | undefined;\n let backgroundColor: OakUiRoleToken = \"bg-primary\";\n let feedbackIcon: \"tick\" | \"cross\" | null = null;\n let feedbackAltText: string | undefined;\n\n switch (true) {\n case disabled && !showFeedback:\n backgroundColor = \"bg-neutral-stronger\";\n break;\n case feedback === \"correct\" && checked:\n outlineColor = \"border-success\";\n backgroundColor = \"bg-correct\";\n feedbackIcon = \"tick\";\n feedbackAltText = \"Correct\";\n break;\n case feedback === \"incorrect\" && checked:\n outlineColor = \"border-error\";\n backgroundColor = \"bg-incorrect\";\n feedbackIcon = \"cross\";\n feedbackAltText = \"Incorrect\";\n break;\n case feedback === \"incorrect\" && !checked:\n feedbackIcon = \"tick\";\n feedbackAltText = \"Unselected correct choice\";\n break;\n case checked && !disabled:\n outlineColor = \"border-primary\";\n break;\n }\n\n return (\n <StyledOakFlex\n $pa=\"inner-padding-l\"\n $borderRadius=\"border-radius-m2\"\n $justifyContent=\"space-between\"\n $position=\"relative\"\n $alignContent=\"center\"\n onClick={handleOnClick}\n $disabled={disabled || showFeedback}\n $checked={checked}\n $outlineColor={outlineColor}\n $background={backgroundColor}\n >\n <OakRadioButton\n value={value}\n disabled={disabled || showFeedback}\n $labelGap=\"space-between-s\"\n disableFocusRing\n radioInnerSize=\"all-spacing-6\"\n radioOuterSize=\"all-spacing-7\"\n checkedRadioBorderWidth=\"border-solid-l\"\n label={\n image ? (\n <OakFlex\n $flexDirection=\"column\"\n $minWidth=\"all-spacing-20\"\n $gap=\"space-between-s\"\n >\n <OakBox>{image}</OakBox>\n {label}\n </OakFlex>\n ) : (\n label\n )\n }\n {...rest}\n />\n {showFeedback && feedbackIcon && (\n <OakFlex $alignSelf=\"flex-end\">\n <OakIcon\n iconName={feedbackIcon}\n $colorFilter={\n feedbackIcon === \"tick\" ? \"icon-success\" : \"icon-error\"\n }\n alt={feedbackAltText}\n />\n </OakFlex>\n )}\n </StyledOakFlex>\n );\n};\n","import React, { MouseEventHandler } from \"react\";\nimport styled from \"styled-components\";\n\nimport { InternalRoundButton } from \"@/components/ui/InternalRoundButton\";\nimport { parseDropShadow } from \"@/styles/helpers/parseDropShadow\";\n\nexport type OakHintButtonProps = {\n isOpen: boolean;\n onClick?: MouseEventHandler;\n isLoading?: boolean;\n disabled?: boolean;\n};\n\nconst StyledInternalRoundButton = styled(InternalRoundButton)`\n &:hover .shadow {\n box-shadow: none !important;\n }\n &:active .shadow {\n box-shadow: ${parseDropShadow(\"drop-shadow-lemon\")},\n ${parseDropShadow(\"drop-shadow-grey\")} !important;\n }\n`;\n\nexport const OakHintButton = (props: OakHintButtonProps) => {\n const { isOpen, disabled } = props;\n return (\n <StyledInternalRoundButton\n iconName={isOpen && !disabled ? \"lightbulb-yellow\" : \"lightbulb\"}\n defaultIconBackground={isOpen ? \"black\" : \"bg-decorative5-main\"}\n hoverIconBackground={isOpen ? \"black\" : \"bg-decorative5-main\"}\n defaultTextColor={\"text-primary\"}\n hoverTextColor={\"text-primary\"}\n disabledIconBackground={\"bg-btn-primary-disabled\"}\n disabledTextColor={\"text-disabled\"}\n disabledIconColor={\"white\"}\n onClick={props.onClick}\n isLoading={props.isLoading}\n disabled={props.disabled}\n iconBackgroundSize={\"all-spacing-8\"}\n iconSize={\"all-spacing-6\"}\n >\n {!isOpen ? \"Need a hint?\" : \"Close hint\"}\n </StyledInternalRoundButton>\n );\n};\n","import React, { MouseEventHandler, ReactNode, useState } from \"react\";\n\nimport { OakTooltip } from \"@/components/ui\";\nimport { OakHintButton } from \"@/components/integrated/OakHintButton\";\n\nexport type OakQuizHintProps = {\n /**\n * Some content to give as a hint to answer a question\n */\n hint: ReactNode;\n};\n\n/**\n * Presents a button which will show a hint when clicked\n */\nexport const OakQuizHint = ({ hint }: OakQuizHintProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const handleClick: MouseEventHandler = () => {\n setIsOpen(!isOpen);\n };\n\n return (\n <OakTooltip tooltip={hint} isOpen={isOpen}>\n <OakHintButton isOpen={isOpen} onClick={handleClick} />\n </OakTooltip>\n );\n};\n","import React, { ReactNode } from \"react\";\n\nimport { OakBox, OakFlex, OakSpan } from \"@/components/base\";\nimport { OakRoundIcon } from \"@/components/ui\";\n\nexport type OakQuizFeedbackProps = {\n /**\n * Feedback for an answer\n * `partially-correct` can be used to feedback on a multi-answer MCQ where some\n * correct options were not selected and/or some incorrect answers were selected\n */\n feedback: \"correct\" | \"incorrect\" | \"partially-correct\";\n /**\n * Some additional content to present with the feedback.\n * This is likely the correct answer(s) to the question or some praise.\n *\n * Only displayed when `feedback` has been applied.\n */\n answerFeedback?: ReactNode;\n};\n\n/**\n * Gives feedback after a question has been answered\n */\nexport const OakQuizFeedback = ({\n feedback,\n answerFeedback,\n}: OakQuizFeedbackProps) => {\n let feedbackLabel: string;\n\n switch (feedback) {\n case \"correct\":\n feedbackLabel = \"Correct\";\n break;\n case \"incorrect\":\n feedbackLabel = \"Incorrect\";\n break;\n case \"partially-correct\":\n feedbackLabel = \"Almost correct\";\n break;\n }\n\n return (\n <OakBox>\n <OakFlex $gap=\"space-between-xs\">\n <OakRoundIcon\n iconName={feedback === \"correct\" ? \"tick\" : \"cross\"}\n $pa=\"inner-padding-none\"\n $background={feedback === \"correct\" ? \"icon-success\" : \"icon-error\"}\n $colorFilter=\"text-inverted\"\n $width=\"all-spacing-6\"\n $height=\"all-spacing-6\"\n />\n <OakSpan\n $font=\"heading-6\"\n $color={feedback === \"correct\" ? \"text-success\" : \"text-error\"}\n >\n {feedbackLabel}\n </OakSpan>\n </OakFlex>\n <OakSpan\n as=\"p\"\n $mt=\"space-between-xs\"\n $font={feedback === \"correct\" ? \"body-2-bold\" : \"body-2\"}\n >\n {answerFeedback}\n </OakSpan>\n </OakBox>\n );\n};\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\n\nimport { OakQuizHint, OakQuizHintProps } from \"../OakQuizHint\";\nimport {\n OakQuizFeedback,\n OakQuizFeedbackProps,\n} from \"../OakQuizFeedback/OakQuizFeedback\";\n\nimport { OakFlex } from \"@/components/base\";\n\n/**\n * `content-box` ensures that the border is not subtracted from the height of the element\n */\nconst StyledOakFlex = styled(OakFlex)`\n box-sizing: content-box;\n`;\n\nexport type OakLessonBottomNavProps = {\n children?: ReactNode;\n feedback?: OakQuizFeedbackProps[\"feedback\"] | null;\n answerFeedback?: OakQuizFeedbackProps[\"answerFeedback\"];\n hint?: OakQuizHintProps[\"hint\"];\n};\n\n/**\n * Renders feedback for an answer and onward navigation buttons to continue the lesson\n */\nexport const OakLessonBottomNav = ({\n hint,\n feedback,\n answerFeedback,\n children,\n}: OakLessonBottomNavProps) => {\n let content: ReactNode;\n\n switch (true) {\n case !!feedback:\n content = (\n <OakQuizFeedback feedback={feedback} answerFeedback={answerFeedback} />\n );\n break;\n case !!hint:\n content = <OakQuizHint hint={hint} />;\n break;\n default:\n content = null;\n }\n\n return (\n <StyledOakFlex\n $flexDirection={[\"column\", \"row\"]}\n $pa=\"inner-padding-m\"\n $minHeight=\"all-spacing-9\"\n $gap=\"space-between-m\"\n >\n {content}\n <OakFlex\n $flexGrow=\"1\"\n $height=\"fit-content\"\n $alignSelf=\"flex-end\"\n $justifyContent={[\"initial\", \"flex-end\"]}\n $width={[\"100%\", \"auto\"]}\n >\n {children}\n </OakFlex>\n </StyledOakFlex>\n );\n};\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\n\nimport {\n OakBox,\n OakFlex,\n OakHeading,\n OakIconProps,\n OakSpan,\n} from \"@/components/base\";\nimport { OakRoundIcon } from \"@/components/ui\";\nimport { getBreakpoint } from \"@/styles/utils/responsiveStyle\";\n\ntype LessonSectionName = \"intro\" | \"starter-quiz\" | \"video\" | \"exit-quiz\";\n\nconst StyledMobileSummary = styled(OakSpan)`\n @media (min-width: ${getBreakpoint(\"small\")}px) {\n display: none;\n }\n`;\n\nexport type OakLessonTopNavProps = {\n lessonSectionName: LessonSectionName;\n /**\n * Slot to render `OakBackLink` or similar\n */\n backLinkSlot: ReactNode;\n heading: ReactNode;\n /**\n * Displayed at the mobile breakpoint where the counter is not rendered.\n * Provides alternative content for the counter/progress in the lesson.\n */\n mobileSummary: ReactNode;\n /**\n * Slot to render `OakQuizCounter` or similar\n */\n counterSlot?: ReactNode;\n};\n\n/**\n * Controls for navigating back and displaying progress in a lesson\n */\nexport const OakLessonTopNav = ({\n lessonSectionName,\n backLinkSlot,\n counterSlot,\n heading,\n mobileSummary,\n}: OakLessonTopNavProps) => {\n return (\n <OakFlex $gap=\"space-between-m\" $alignItems=\"center\">\n <OakBox $pl={[\"inner-padding-none\", \"inner-padding-s\"]}>\n {backLinkSlot}\n </OakBox>\n <OakFlex $flexGrow=\"none\">\n <OakRoundIcon\n {...pickSectionIcon(lessonSectionName)}\n $width=\"all-spacing-8\"\n $height=\"all-spacing-8\"\n />\n </OakFlex>\n <OakBox>\n <OakHeading tag=\"h1\" $font={[\"heading-7\", \"heading-5\"]}>\n {heading}\n </OakHeading>\n <StyledMobileSummary $font=\"body-3\">\n {mobileSummary}\n </StyledMobileSummary>\n </OakBox>\n <OakFlex $flexGrow={1} $justifyContent=\"flex-end\">\n <OakBox $display={[\"none\", \"block\"]}>{counterSlot}</OakBox>\n </OakFlex>\n </OakFlex>\n );\n};\n\nfunction pickSectionIcon(\n sectionName: LessonSectionName,\n): Pick<OakIconProps, \"iconName\" | \"$background\"> {\n switch (sectionName) {\n case \"intro\":\n return {\n iconName: \"intro\",\n $background: \"aqua110\",\n };\n case \"starter-quiz\":\n return {\n iconName: \"quiz\",\n $background: \"mint110\",\n };\n case \"video\":\n return {\n iconName: \"video\",\n $background: \"pink110\",\n };\n case \"exit-quiz\":\n return {\n iconName: \"quiz\",\n $background: \"lemon110\",\n };\n }\n}\n","import React from \"react\";\n\nimport { OakSpan } from \"@/components/base\";\n\nexport type OakQuizCounterProps = {\n counter: number;\n total: number;\n};\nexport const OakQuizCounter = (props: OakQuizCounterProps) => {\n const { counter, total } = props;\n return (\n <OakSpan $font={\"heading-light-4\"} $color={\"text-disabled\"}>\n <OakSpan $font={\"heading-4\"} $color={\"text-primary\"}>\n {counter}{\" \"}\n </OakSpan>\n of {total}\n </OakSpan>\n );\n};\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\n\nimport { OakBox, OakFlex } from \"@/components/base\";\nimport { parseSpacing } from \"@/styles/helpers/parseSpacing\";\nimport { getBreakpoint } from \"@/styles/utils/responsiveStyle\";\nimport { OakCombinedColorToken } from \"@/styles\";\n\ntype LessonSectionName =\n | \"overview\"\n | \"intro\"\n | \"starter-quiz\"\n | \"video\"\n | \"exit-quiz\"\n | \"review\";\n\nexport type OakLessonLayoutProps = {\n lessonSectionName: LessonSectionName;\n topNavSlot: ReactNode;\n bottomNavSlot: ReactNode;\n children: ReactNode;\n};\n\n/**\n * `OakBox` does not support space-between tokens on `padding` only `margin`, so we need to\n * set it here to apply appropriate padding to the top of the content.\n */\nconst StyledLayoutBox = styled(OakBox)`\n @media (min-width: ${getBreakpoint(\"small\")}px) {\n padding-top: ${parseSpacing(\"space-between-xl\")};\n }\n`;\n\nconst StickyFooter = styled(OakBox)`\n position: sticky;\n bottom: 0;\n z-index: 10;\n`;\n\n/**\n * Provides overall page layout and colours for the sections of a lesson.\n */\nexport const OakLessonLayout = ({\n lessonSectionName,\n topNavSlot,\n bottomNavSlot,\n children,\n}: OakLessonLayoutProps) => {\n const [\n pageBackgroundColor,\n contentBackgroundColor,\n contentBorderColor,\n mobileContentBackgroundColor,\n ] = pickSectionColours(lessonSectionName);\n\n return (\n <StyledLayoutBox\n $display={\"flex\"}\n $width=\"100%\"\n $minHeight={\"100%\"}\n $ph={[\"inner-padding-none\", \"inner-padding-xl\"]}\n $background={pageBackgroundColor}\n >\n <OakFlex\n $flexDirection=\"column\"\n $flexGrow={1}\n $background={[mobileContentBackgroundColor, contentBackgroundColor]}\n $btr={[null, \"border-radius-xl\"]}\n $bt={[null, \"border-solid-xl\"]}\n $bh={[null, \"border-solid-xl\"]}\n $borderColor={[null, contentBorderColor]}\n $maxWidth=\"all-spacing-24\"\n $minHeight=\"100%\"\n $mh=\"auto\"\n $pt={[\"inner-padding-none\", \"inner-padding-m\"]}\n $gap={[\"space-between-l\", \"space-between-xl\"]}\n >\n {topNavSlot && (\n <OakBox\n $pv=\"inner-padding-l\"\n $pl={[\"inner-padding-m\", \"inner-padding-xs\"]}\n $pr={[\"inner-padding-m\", \"inner-padding-none\"]}\n $mr={[\"space-between-none\", \"space-between-l\"]}\n $background={[\"bg-primary\", \"transparent\"]}\n >\n {topNavSlot}\n </OakBox>\n )}\n <OakFlex\n $flexGrow={1}\n $flexDirection=\"column\"\n $mh={[\"space-between-s\", \"space-between-l\"]}\n >\n {children}\n </OakFlex>\n {bottomNavSlot && (\n <StickyFooter\n $mh={[\n \"space-between-none\",\n \"space-between-none\",\n \"space-between-sssx\",\n ]}\n $borderColor={contentBorderColor}\n $bt={\"border-solid-xl\"}\n $background={[\"bg-primary\", contentBackgroundColor]}\n >\n {bottomNavSlot}\n </StickyFooter>\n )}\n </OakFlex>\n </StyledLayoutBox>\n );\n};\n\nfunction pickSectionColours(\n sectionName: LessonSectionName,\n): [\n pageBackgroundColor: OakCombinedColorToken,\n contentBackgroundColor: OakCombinedColorToken,\n contentBorderColor: OakCombinedColorToken,\n mobileContentBackgroundColor: OakCombinedColorToken,\n] {\n switch (sectionName) {\n case \"overview\":\n return [\n \"bg-decorative4-subdued\",\n \"bg-primary\",\n \"border-decorative4\",\n \"bg-primary\",\n ];\n case \"intro\":\n return [\n \"bg-decorative2-subdued\",\n \"bg-decorative2-very-subdued\",\n \"border-inverted\",\n \"bg-decorative2-subdued\",\n ];\n case \"starter-quiz\":\n return [\n \"bg-decorative1-main\",\n \"bg-decorative1-very-subdued\",\n \"border-inverted\",\n \"bg-decorative1-subdued\",\n ];\n case \"video\":\n return [\n \"bg-decorative4-subdued\",\n \"bg-primary\",\n \"border-decorative4\",\n \"bg-primary\",\n ];\n case \"exit-quiz\":\n return [\n \"bg-decorative5-main\",\n \"bg-decorative5-very-subdued\",\n \"border-inverted\",\n \"bg-decorative5-subdued\",\n ];\n case \"review\":\n return [\n \"bg-decorative4-subdued\",\n \"bg-primary\",\n \"border-decorative4\",\n \"bg-primary\",\n ];\n }\n}\n","import React, { ComponentPropsWithoutRef, ElementType } from \"react\";\nimport styled, { css } from \"styled-components\";\n\nimport {\n OakBox,\n OakFlex,\n OakIcon,\n OakIconName,\n OakSpan,\n} from \"@/components/base\";\nimport { parseColor } from \"@/styles/helpers/parseColor\";\nimport { OakRoundIcon } from \"@/components/ui\";\nimport { parseColorFilter } from \"@/styles/helpers/parseColorFilter\";\nimport { parseSpacing } from \"@/styles/helpers/parseSpacing\";\nimport { parseDropShadow } from \"@/styles/helpers/parseDropShadow\";\nimport { OakCombinedColorToken } from \"@/styles\";\n\ntype LessonSectionName = \"intro\" | \"starter-quiz\" | \"video\" | \"exit-quiz\";\n\ntype BaseOakLessonNavItemProps<C extends ElementType> = {\n as?: C;\n /**\n * Disable the section preventing navigation to it.\n */\n disabled?: boolean;\n} & ComponentPropsWithoutRef<C>;\n\ntype QuizSectionProps = {\n lessonSectionName: \"starter-quiz\" | \"exit-quiz\";\n /**\n * The number of questions in the quiz\n */\n numQuestions: number;\n /**\n * The number of questions answered correctly\n */\n grade: number;\n};\n\ntype VideoSectionProps = {\n lessonSectionName: \"video\";\n /**\n * The length of the video in minutes\n */\n videoLength: number;\n};\n\ntype IntroSectionProps = {\n lessonSectionName: \"intro\";\n};\n\ntype SectionProps = {\n /**\n * Denotes the progress in the lesson section\n */\n progress: \"not-started\" | \"in-progress\" | \"complete\";\n} & (IntroSectionProps | QuizSectionProps | VideoSectionProps);\n\nexport type OakLessonNavItemProps<C extends ElementType> =\n BaseOakLessonNavItemProps<C> & SectionProps;\n\nconst StyledLabel = styled(OakBox)``;\n\nconst StyledRoundIcon = styled(OakRoundIcon)<{\n $disabled?: boolean;\n}>`\n width: ${parseSpacing(\"all-spacing-8\")};\n height: ${parseSpacing(\"all-spacing-8\")};\n padding: 0;\n\n background: transparent;\n\n img {\n filter: ${(props) =>\n parseColorFilter(props.$disabled ? \"icon-disabled\" : \"icon-inverted\")};\n }\n`;\n\nconst StyledLessonNavItem = styled(OakFlex)<{ $disabled?: boolean }>`\n outline: none;\n text-align: initial;\n\n &:focus-visible {\n box-shadow: ${parseDropShadow(\"drop-shadow-centered-lemon\")},\n ${parseDropShadow(\"drop-shadow-centered-grey\")};\n }\n\n ${(props) => props.$disabled && \"cursor: default\"}\n\n ${(props) =>\n !props.$disabled &&\n css`\n cursor: pointer;\n\n &:hover,\n &:active {\n ${StyledLabel} {\n text-decoration: underline;\n }\n\n ${StyledRoundIcon} {\n background: ${parseColor(\"bg-btn-primary\")};\n\n img {\n filter: ${parseColorFilter(\"icon-main\")};\n }\n }\n }\n\n &:active {\n box-shadow: ${parseDropShadow(\"drop-shadow-lemon\")},\n ${parseDropShadow(\"drop-shadow-grey\")};\n }\n `}\n`;\n\nconst FlexedOakBox = styled(OakBox)`\n flex: 1;\n`;\n\n/**\n * Enables navigation to the given section of a lesson as well as displaying current progress\n */\nexport const OakLessonNavItem = <C extends ElementType = \"a\">(\n props: OakLessonNavItemProps<C>,\n) => {\n const { as, lessonSectionName, progress, disabled, href, onClick, ...rest } =\n props;\n const [notStartedBackgroundColor, backgroundColor, borderColor] =\n pickColorsForSection(lessonSectionName);\n\n return (\n <StyledLessonNavItem\n as={disabled ? \"div\" : as ?? \"a\"}\n $gap=\"space-between-m\"\n $alignItems=\"center\"\n $background={\n progress === \"not-started\" ? notStartedBackgroundColor : backgroundColor\n }\n $ph={[\"inner-padding-m\", \"inner-padding-xl\"]}\n $pv=\"inner-padding-l\"\n $borderRadius=\"border-radius-l\"\n $borderColor={borderColor}\n $ba=\"border-solid-l\"\n $disabled={disabled}\n href={disabled ? undefined : href}\n onClick={disabled ? undefined : onClick}\n {...rest}\n >\n <OakFlex $width=\"all-spacing-13\" $justifyContent=\"center\">\n <OakIcon\n iconName={pickIconForSection(lessonSectionName)}\n $width=\"all-spacing-10\"\n $height=\"all-spacing-10\"\n />\n </OakFlex>\n <FlexedOakBox>\n <StyledLabel\n as=\"strong\"\n $font={[\"heading-6\", \"heading-5\"]}\n $color={disabled ? \"text-disabled\" : \"text-primary\"}\n >\n {pickLabelForSection(lessonSectionName)}\n </StyledLabel>\n <OakBox $font={[\"body-2\", \"body-1\"]}>\n {pickSummaryForProgress(props)}\n </OakBox>\n </FlexedOakBox>\n {renderQuestionCounter(props)}\n <StyledRoundIcon iconName=\"chevron-right\" $disabled={disabled} />\n </StyledLessonNavItem>\n );\n};\n\nfunction renderQuestionCounter(props: SectionProps) {\n if (props.progress !== \"complete\") {\n return null;\n }\n\n /**\n * The large answer counter is only rendered when on a non-mobile screen\n */\n switch (props.lessonSectionName) {\n case \"exit-quiz\":\n case \"starter-quiz\":\n return (\n <OakBox $display={[\"none\", \"block\"]} $mr=\"space-between-xxxl\">\n <OakSpan $font=\"heading-4\">{props.grade}</OakSpan>\n <OakSpan $font=\"heading-6\">&nbsp;/&nbsp;{props.numQuestions}</OakSpan>\n </OakBox>\n );\n default:\n return null;\n }\n}\n\nfunction pickIconForSection(sectionName: LessonSectionName): OakIconName {\n switch (sectionName) {\n case \"intro\":\n return \"intro\";\n case \"starter-quiz\":\n case \"exit-quiz\":\n return \"quiz\";\n case \"video\":\n return \"video\";\n }\n}\n\nfunction pickColorsForSection(\n sectionName: LessonSectionName,\n): [\n notStartedBackgroundColor: OakCombinedColorToken,\n backgroundColor: OakCombinedColorToken,\n borderColor: OakCombinedColorToken,\n] {\n switch (sectionName) {\n case \"intro\":\n return [\n \"bg-decorative2-very-subdued\",\n \"bg-decorative2-main\",\n \"border-decorative2-stronger\",\n ];\n case \"starter-quiz\":\n return [\n \"bg-decorative1-very-subdued\",\n \"bg-decorative1-main\",\n \"border-decorative1-stronger\",\n ];\n case \"video\":\n return [\n \"bg-decorative4-very-subdued\",\n \"bg-decorative4-main\",\n \"border-decorative4-stronger\",\n ];\n case \"exit-quiz\":\n return [\n \"bg-decorative5-very-subdued\",\n \"bg-decorative5-main\",\n \"border-decorative5-stronger\",\n ];\n }\n}\n\nfunction pickLabelForSection(sectionName: LessonSectionName): string {\n switch (sectionName) {\n case \"intro\":\n return \"Intro\";\n case \"starter-quiz\":\n return \"Starter quiz\";\n case \"video\":\n return \"Watch video\";\n case \"exit-quiz\":\n return \"Exit quiz\";\n }\n}\n\nfunction pickSummaryForProgress(props: SectionProps) {\n switch (props.progress) {\n case \"not-started\":\n return pickSummaryForNotStarted(props);\n case \"in-progress\":\n return \"In progress...\";\n case \"complete\":\n return (\n <OakFlex $gap=\"space-between-sssx\" $alignItems=\"center\">\n <OakIcon\n iconName=\"tick\"\n $width=\"all-spacing-6\"\n $height=\"all-spacing-6\"\n />\n {pickSummaryForComplete(props)}\n </OakFlex>\n );\n }\n}\n\nfunction pickSummaryForNotStarted(props: SectionProps) {\n switch (props.lessonSectionName) {\n case \"intro\":\n return \"Get ready\";\n case \"starter-quiz\":\n return `${props.numQuestions} Questions`;\n case \"exit-quiz\":\n return `Practice ${props.numQuestions} questions`;\n case \"video\":\n return `${props.videoLength} min`;\n }\n}\n\nfunction pickSummaryForComplete(props: SectionProps) {\n switch (props.lessonSectionName) {\n case \"intro\":\n case \"video\":\n return \"Completed\";\n case \"starter-quiz\":\n case \"exit-quiz\":\n // The counter is rendered as the summary next\n // when on a mobile device, so it is hidden on larger screens\n return (\n <>\n <OakBox $display={[\"none\", \"block\"]}>Completed</OakBox>\n <OakBox $display={[\"block\", \"none\"]}>\n {props.grade}/{props.numQuestions} correct\n </OakBox>\n </>\n );\n }\n}\n","import React from \"react\";\n\nimport { OakSpan, OakSpanProps } from \"@/components/base\";\n\nexport type OakBulletListProps = {\n listItems: string[];\n} & OakSpanProps;\n\nexport const OakBulletList = (props: OakBulletListProps) => {\n const { listItems, ...rest } = props;\n return (\n <OakSpan {...rest}>\n {listItems.map((item, i) => {\n return (\n <OakSpan key={i}>\n {i !== 0 && <OakSpan> • </OakSpan>}\n <OakSpan>{item}</OakSpan>\n </OakSpan>\n );\n })}\n </OakSpan>\n );\n};\n","import React, { useRef } from \"react\";\n\nimport {\n BaseCheckBoxProps,\n InternalCheckBoxHoverFocus,\n} from \"@/components/base/InternalCheckBox/InternalCheckBox\";\nimport {\n InternalCheckBoxLabel,\n InternalCheckBoxLabelProps,\n} from \"@/components/base/InternalCheckBoxLabel\";\nimport { InternalCheckBoxWrapper } from \"@/components/base/InternalCheckBoxWrapper\";\nimport {\n OakAllSpacingToken,\n OakBorderRadiusToken,\n OakBorderWidthToken,\n OakCombinedColorToken,\n OakInnerPaddingToken,\n} from \"@/styles\";\n\nexport type OakCheckBoxProps = BaseCheckBoxProps & {\n checkboxSize?: OakAllSpacingToken;\n checkboxBorder?: OakBorderWidthToken;\n checkboxBorderRadius?: OakBorderRadiusToken;\n checkedIcon?: React.JSX.Element;\n checkedBackgroundFill?: boolean;\n hoverBorderRadius?: OakBorderRadiusToken;\n iconPadding?: OakInnerPaddingToken;\n defaultColor?: OakCombinedColorToken;\n disabledColor?: OakCombinedColorToken;\n displayValue?: string;\n} & InternalCheckBoxLabelProps;\n\nexport const OakCheckBox = (props: OakCheckBoxProps) => {\n const {\n id,\n value,\n displayValue = value,\n disabled = false,\n defaultChecked = false,\n onChange,\n onFocus,\n onBlur,\n onHovered,\n iconPadding = \"inner-padding-none\",\n hoverBorderRadius = \"border-radius-xs\",\n checkboxSize = \"all-spacing-6\",\n checkboxBorder = \"border-solid-m\",\n checkboxBorderRadius = \"border-radius-xs\",\n defaultColor = \"text-primary\",\n disabledColor = \"text-disabled\",\n labelGap = \"space-between-s\",\n labelAlignItems = \"center\",\n checkedBackgroundFill = true,\n checkedIcon,\n } = props;\n\n const hoverStart = useRef(Date.now());\n\n const handleMouseEnter = () => {\n hoverStart.current = Date.now();\n };\n\n const handleMouseLeave = () => {\n const delta = Date.now() - hoverStart.current;\n if (onHovered) {\n onHovered(value, id, delta);\n }\n };\n\n const currentColor = disabled ? disabledColor : defaultColor;\n\n return (\n <InternalCheckBoxLabel\n htmlFor={id}\n labelGap={labelGap}\n labelAlignItems={labelAlignItems}\n $color={currentColor}\n disabled={disabled}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n data-testid={props[\"data-testid\"]}\n >\n <InternalCheckBoxWrapper\n size={checkboxSize}\n internalCheckbox={\n <InternalCheckBoxHoverFocus\n id={id}\n value={value}\n $width={checkboxSize}\n $height={checkboxSize}\n $ba={checkboxBorder}\n $borderRadius={checkboxBorderRadius}\n $borderColor={currentColor}\n $checkedBackground={checkedBackgroundFill ? currentColor : null}\n $hoverBorderRadius={hoverBorderRadius}\n onChange={onChange}\n onFocus={onFocus}\n onBlur={onBlur}\n defaultChecked={defaultChecked}\n disabled={disabled}\n />\n }\n checkedIcon={checkedIcon}\n iconPadding={iconPadding}\n />\n {displayValue}\n </InternalCheckBoxLabel>\n );\n};\n","import React from \"react\";\n\nimport { OakFlex } from \"@/components/base/OakFlex\";\nimport { OakSpan } from \"@/components/base/OakSpan\";\nimport { OakIcon } from \"@/components/base/OakIcon\";\n\nexport type OakFieldErrorProps = {\n children?: React.ReactNode;\n};\n\nexport const OakFieldError = (props: OakFieldErrorProps) => {\n const { children } = props;\n if (!children) {\n /**\n * Return early to avoid unwanted whitespace when there's no error\n */\n return null;\n }\n return (\n <OakFlex $alignItems={\"center\"} $flexDirection={\"row\"}>\n <OakFlex $alignSelf={\"flex-start\"} $mr={\"space-between-s\"}>\n <OakIcon iconName=\"content-guidance\" $colorFilter={\"red\"} />\n </OakFlex>\n <OakSpan $color=\"red\">{children}</OakSpan>\n </OakFlex>\n );\n};\n","import React from \"react\";\n\nimport {\n InternalRectButton,\n InternalRectButtonProps,\n} from \"@/components/ui/InternalRectButton\";\n\nexport type OakPrimaryButtonProps = Pick<\n InternalRectButtonProps,\n | \"children\"\n | \"className\"\n | \"data-testid\"\n | \"onClick\"\n | \"onHovered\"\n | \"disabled\"\n | \"isLoading\"\n | \"iconName\"\n | \"isTrailingIcon\"\n | \"type\"\n | \"width\"\n | \"maxWidth\"\n | \"form\"\n>;\n\nexport const OakPrimaryButton = (props: OakPrimaryButtonProps) => {\n return (\n <InternalRectButton\n defaultBorderColor=\"bg-btn-primary\"\n defaultBackground=\"bg-btn-primary\"\n defaultTextColor=\"text-inverted\"\n hoverBackground=\"bg-btn-primary-hover\"\n hoverBorderColor=\"bg-btn-primary-hover\"\n hoverTextColor=\"text-inverted\"\n disabledBackground=\"bg-btn-primary-disabled\"\n disabledBorderColor=\"text-disabled\"\n disabledTextColor=\"text-inverted\"\n {...props}\n />\n );\n};\n","import React from \"react\";\n\nimport { OakTextInput, OakTextInputProps } from \"@/components/ui\";\n\ntype OakQuizTextInputProps = Omit<\n OakTextInputProps,\n \"validity\" | \"iconName\" | \"iconAlt\" | \"isTrailingIcon\"\n> & {\n /**\n * Alters the appearance of the input to indicate whether or not a correct answer was given.\n * Also sets the input to read-only.\n */\n feedback?: \"correct\" | \"incorrect\" | null;\n};\n\nexport const OakQuizTextInput = ({\n feedback,\n readOnly,\n ...props\n}: OakQuizTextInputProps) => {\n let validity: OakTextInputProps[\"validity\"];\n let iconName: OakTextInputProps[\"iconName\"];\n let iconAlt: OakTextInputProps[\"iconAlt\"] = undefined;\n\n switch (feedback) {\n case \"correct\":\n validity = \"valid\";\n iconName = \"tick\";\n iconAlt = \"Correct\";\n break;\n case \"incorrect\":\n validity = \"invalid\";\n iconName = \"cross\";\n iconAlt = \"Incorrect\";\n break;\n }\n\n return (\n <OakTextInput\n {...props}\n validity={validity}\n iconName={iconName}\n iconAlt={iconAlt}\n readOnly={readOnly || !!feedback}\n isTrailingIcon\n />\n );\n};\n","import React from \"react\";\n\nimport {\n InternalRectButton,\n InternalRectButtonProps,\n} from \"@/components/ui/InternalRectButton\";\n\nexport type OakSecondaryButtonProps = Pick<\n InternalRectButtonProps,\n | \"children\"\n | \"className\"\n | \"data-testid\"\n | \"onClick\"\n | \"onHovered\"\n | \"disabled\"\n | \"isLoading\"\n | \"iconName\"\n | \"isTrailingIcon\"\n | \"type\"\n | \"width\"\n | \"maxWidth\"\n | \"form\"\n>;\n\nexport const OakSecondaryButton = (props: OakSecondaryButtonProps) => {\n return (\n <InternalRectButton\n defaultBorderColor=\"text-primary\"\n defaultBackground=\"bg-btn-secondary\"\n defaultTextColor=\"text-primary\"\n hoverBackground=\"bg-btn-secondary-hover\"\n hoverBorderColor=\"text-primary\"\n hoverTextColor=\"text-primary\"\n disabledBackground=\"bg-btn-secondary-disabled\"\n disabledBorderColor=\"text-disabled\"\n disabledTextColor=\"text-disabled\"\n {...props}\n />\n );\n};\n","import React from \"react\";\n\nimport { OakRoundIconProps } from \"../OakRoundIcon\";\nimport { InternalRoundButton } from \"../InternalRoundButton\";\n\nimport { OakIconName } from \"@/components/base\";\nimport { InternalButtonProps } from \"@/components/base/InternalButton\";\n\ntype OakTertiaryButtonProps = InternalButtonProps & {\n iconBackground?: OakRoundIconProps[\"$background\"];\n iconColorFilter?: OakRoundIconProps[\"$colorFilter\"];\n isTrailingIcon?: boolean;\n iconName?: OakIconName;\n};\n\n/**\n * An implementation of InternalRoundButton, its a subtle button with no border and a round icon.\n */\n\nexport const OakTertiaryButton = ({\n isTrailingIcon,\n iconName,\n children,\n disabled,\n ...props\n}: OakTertiaryButtonProps) => {\n return (\n <InternalRoundButton\n {...props}\n disabled={disabled}\n isTrailingIcon={isTrailingIcon}\n iconName={iconName}\n defaultIconColor={\"white\"}\n disabledIconColor=\"white\"\n disabledIconBackground=\"bg-btn-primary-disabled\"\n defaultIconBackground=\"black\"\n hoverIconBackground=\"bg-btn-primary-hover\"\n defaultTextColor=\"text-primary\"\n hoverTextColor=\"bg-btn-primary-hover\"\n disabledTextColor=\"text-disabled\"\n iconBackgroundSize={\"all-spacing-7\"}\n iconSize={\"all-spacing-6\"}\n >\n {children}\n </InternalRoundButton>\n );\n};\n","import React from \"react\";\nimport { ThemeProvider } from \"styled-components\";\n\nimport { OakTheme } from \"@/styles\";\n\nexport type OakThemeProviderProps = {\n theme: OakTheme;\n children: React.ReactNode;\n};\n\nexport const OakThemeProvider = ({\n theme,\n children,\n}: OakThemeProviderProps) => {\n return <ThemeProvider theme={theme}>{children}</ThemeProvider>;\n};\n","import { OakTheme } from \"./theme\";\n\nexport const oakDefaultTheme: OakTheme = {\n name: \"default\",\n uiColors: {\n \"text-primary\": \"black\",\n \"text-subdued\": \"grey60\",\n \"text-error\": \"red\",\n \"text-disabled\": \"grey50\",\n \"text-link-active\": \"navy\",\n \"text-link-hover\": \"navy110\",\n \"text-link-pressed\": \"navy120\",\n \"text-link-visited\": \"navy120\",\n \"text-inverted\": \"white\",\n \"text-success\": \"oakGreen\",\n \"text-warning\": \"amber\",\n \"bg-primary\": \"white\",\n \"bg-neutral\": \"grey20\",\n \"bg-neutral-stronger\": \"grey30\",\n \"bg-btn-primary\": \"black\",\n \"bg-btn-primary-hover\": \"grey60\",\n \"bg-btn-primary-disabled\": \"grey50\",\n \"bg-btn-secondary\": \"white\",\n \"bg-btn-secondary-hover\": \"grey20\",\n \"bg-btn-secondary-disabled\": \"grey30\",\n \"bg-icon\": \"black\",\n \"bg-icon-hover\": \"grey60\",\n \"bg-decorative1-main\": \"mint\",\n \"bg-decorative1-subdued\": \"mint50\",\n \"bg-decorative1-very-subdued\": \"mint30\",\n \"bg-decorative2-main\": \"aqua\",\n \"bg-decorative2-subdued\": \"aqua50\",\n \"bg-decorative2-very-subdued\": \"aqua30\",\n \"bg-decorative3-main\": \"lavender\",\n \"bg-decorative3-subdued\": \"lavender50\",\n \"bg-decorative3-very-subdued\": \"lavender30\",\n \"bg-decorative4-main\": \"pink\",\n \"bg-decorative4-subdued\": \"pink50\",\n \"bg-decorative4-very-subdued\": \"pink30\",\n \"bg-decorative5-main\": \"lemon\",\n \"bg-decorative5-subdued\": \"lemon50\",\n \"bg-decorative5-very-subdued\": \"lemon30\",\n \"bg-correct\": \"mint50\",\n \"bg-incorrect\": \"red30\",\n \"icon-main\": \"white\",\n \"icon-inverted\": \"black\",\n \"icon-disabled\": \"grey50\",\n \"icon-brand\": \"oakGreen\",\n \"icon-success\": \"oakGreen\",\n \"icon-error\": \"red\",\n \"icon-warning\": \"amber\",\n \"border-primary\": \"black\",\n \"border-inverted\": \"white\",\n \"border-neutral\": \"grey50\",\n \"border-brand\": \"oakGreen\",\n \"border-success\": \"oakGreen\",\n \"border-error\": \"red\",\n \"border-warning\": \"amber\",\n \"border-decorative1\": \"mint\",\n \"border-decorative1-stronger\": \"mint110\",\n \"border-decorative2\": \"aqua\",\n \"border-decorative2-stronger\": \"aqua110\",\n \"border-decorative3\": \"lavender\",\n \"border-decorative3-stronger\": \"lavender110\",\n \"border-decorative4\": \"pink\",\n \"border-decorative4-stronger\": \"pink110\",\n \"border-decorative5\": \"lemon\",\n \"border-decorative5-stronger\": \"lemon110\",\n \"border-decorative6\": \"amber50\",\n \"border-decorative6-stronger\": \"amber\",\n transparent: \"transparent\",\n },\n};\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__read","o","m","Symbol","iterator","r","ar","next","done","push","value","error","__makeTemplateObject","cooked","raw","defineProperty","SuppressedError","oakColorTokens","white","grey10","grey20","grey30","grey40","grey50","grey60","grey70","black","oakGreen","mint","mint30","mint50","mint110","aqua","aqua30","aqua50","aqua110","lavender","lavender30","lavender50","lavender110","pink","pink30","pink50","pink110","lemon","lemon30","lemon50","lemon110","amber","amber30","amber50","red","red30","red50","navy","navy110","navy120","blue","magenta","purple","teal","transparent","oakColorFilterTokens","oakUiRoleTokens","parseColor","includes","_a","c","theme","uiColors","truthy","breakpointsByName","small","large","breakpoints","values","sort","a","b","getBreakpoint","breakpointName","responsiveStyle","attr","getValues","parse","x","props","attrCss","undefined","css","templateObject_1","Array","isArray","to","from","pack","l","slice","concat","__spreadArray","templateObject_3","map","breakpoint","templateObject_4","filter","templateObject_2","colorStyle","$color","$background","BASE_FONT_SIZE_PX","REM_DP","pxToRem","px","Number","toFixed","oakAllSpacingTokens","oakInnerPaddingTokens","oakSpaceBetweenTokens","parseSpacing","positionStyle","$position","$top","$right","$bottom","$left","$overflow","$overflowX","$overflowY","$objectFit","$pointerEvents","$visibility","sizeStyle","$width","$minWidth","$maxWidth","$height","$minHeight","$maxHeight","paddingAll","$pa","paddingHorizontal","$ph","paddingVertical","$pv","paddingLeft","$pl","paddingRight","templateObject_5","$pr","paddingTop","templateObject_6","$pt","paddingBottom","templateObject_7","$pb","marginAll","templateObject_8","$ma","marginHorizontal","templateObject_9","$mh","marginVertical","templateObject_10","$mv","marginLeft","templateObject_11","$ml","marginRight","templateObject_12","$mr","marginTop","templateObject_13","$mt","marginBottom","templateObject_14","$mb","marginStyle","paddingStyle","spacingStyle","oakBorderWidthTokens","oakBorderRadiusTokens","parseBorder","parseBorderRadius","borderAll","$ba","borderTop","$bt","borderRight","$br","borderBottom","$bb","borderLeft","$bl","borderHorizontal","$bh","borderVertical","$bv","borderColor","$borderColor","borderRadius","$borderRadius","borderRadiusTopLeft","$btlr","borderRadiusTopRight","$btrr","borderRadiusBottomLeft","$bblr","borderRadiusBottomRight","$bbrr","borderRadiusTop","$btr","borderRadiusBottom","templateObject_15","$bbr","borderStyle","templateObject_16","displayStyle","$display","oakDropShadowTokens","parseDropShadow","variant","dropShadowStyle","$dropShadow","oakOpacityTokens","opaque","opacityStyle","$opacity","transformStyle","$transform","$transformOrigin","oakTransitionTokens","transitionStyle","$transition","oakFontSizeTokens","oakFontTokens","typographyStyle","$font","font","fontSize","lineHeight","$textAlign","$textDecoration","$whiteSpace","$wordWrap","$textOverflow","oakZIndexTokens","behind","neutral","zIndexStyle","$zIndex","oakBoxCss","onClick","OakBox","styled","div","flexStyle","$flexDirection","$flexWrap","$alignItems","$alignContent","$justifyContent","$alignSelf","$order","$flexGrow","$flexShrink","$flexBasis","$gap","$columnGap","$rowGap","OakFlex","default","OakSpan","span","OakForm","form","parseColorFilter","colorFilterStyle","$colorFilter","StyledFillImage","Image","StyledResponsiveImage","OakImage","as","src","alt","width","height","sizes","_b","_c","_d","placeholder","unoptimized","imageProps","rest","finalPlaceholder","React","createElement","fill","OakTypography","HeadingTagComponent","tag","ariaLabel","ariaHidden","otherProps","Tag","OakHeading","OakP","OakUL","ul","$reset","OakOL","ol","listStyle","$listStyle","OakLI","li","defaultProps","OakLabel","label","typedImageMap","OakIcon","iconName","_alt","imagePath","process","env","NEXT_PUBLIC_OAK_ASSETS_HOST","NEXT_PUBLIC_OAK_ASSETS_PATH","gridStyle","$rg","$cg","$gridAutoRows","$gridTemplateAreas","$gridTemplateColumns","OakGrid","combineSpanStart","start","parseSpanStart","split","span_1","gridArea","$colSpan","index","$colStart","$rowSpan","$rowStart","$colEnd","OakGridArea","OakMaxWidth","getCloudinaryIdFromUrl","config","toString","replace","canaryUrl","URL","getCldImageUrl","origin","getCloudinaryRootUrl","cloudinaryConfigContext","createContext","OakCloudinaryConfigProvider","Provider","screenReaderStyle","OakScreenReader","SpinnerKeyframe","keyframes","StyledLoadingSpinner","loaderColor","OakLoadingSpinner","internalButtonCss","InternalButton","onHovered","hoverStart","useRef","Date","now","className","disabled","event","onMouseEnter","current","onMouseLeave","delta","type","children","StyledInternalButton","hoverTextColor","hoverBackground","hoverBorderColor","defaultBackground","defaultBorderColor","defaultTextColor","disabledBackground","disabledBorderColor","disabledTextColor","StyledButtonWrapper","InternalRectButton","isTrailingIcon","isLoading","maxWidth","icon","Fragment","loader","iconLogic","disabledIconBackground","hoverIconBackground","defaultIconBackground","InternalRoundButton","iconBackgroundSize","iconSize","disabledIconColor","defaultIconColor","RadioContext","currentValue","name","RadioButtonLabel","$labelGap","$labelAlignItems","HiddenRadioButtonInput","input","attrs","VisibleRadioButtonInput","$disableFocusRing","$radioInnerSize","DisabledVisibleRadioButtonInput","OakRadioButton","forwardRef","ref","radioContext","useContext","onValueUpdated","id","tabIndex","dataTestId","disableFocusRing","_e","radioInnerSize","_f","radioOuterSize","_g","radioBorderWidth","_h","checkedRadioBorderWidth","checked","anyDisabled","finalRadioBorderWidth","htmlFor","onChange","BaseCheckBox","InternalCheckBox","$checkedBackground","InternalCheckBoxHover","$hoverBorderRadius","focusStyle","InternalCheckBoxHoverFocus","InternalCheckBoxLabel","labelGap","labelAlignItems","InternalCheckBoxLabelHoverDecor","StyledIconContainer","InternalCheckBoxWrapper","size","iconPadding","internalCheckbox","checkedIcon","StyledInput","InternalTextInput","onInitialFocus","onFocus","hadInitialFocused","StyledTextInputWrapper","$focusRingDropShadows","dropShadow","join","$readOnly","$hoverBackground","$readOnlyBorderColor","$readOnlyColor","$disabled","$disabledBackgroundColor","$disabledColor","OakTextInput","finalBorderColor","finalIconColor","finalReadOnlyBorderColor","readOnlyBorderColor","focusRingDropShadows","background","disabledBackgroundColor","_j","color","_k","disabledColor","_l","readOnlyColor","validity","_m","iconColor","_o","validBorderColor","_p","invalidBorderColor","_q","validIconColor","_r","invalidIconColor","iconAlt","_s","$borderStyle","readOnly","currentTarget","querySelector","focus","OakRoundIcon","StyledFlex","StyledSvg","svg","$fill","InternalTooltip","isOpen","tooltip","role","d","OakTooltip","StyledBackLink","StyledInternalCheckBox","StyledInternalCheckBoxLabelHoverDecor","StyledFlexBox","overlayBorderColor","feedbackBgColor","StyledOverlay","StyledOakFlex","$outlineColor","$checked","StyledInternalRoundButton","OakHintButton","OakQuizHint","hint","useState","setIsOpen","OakQuizFeedback","feedbackLabel","feedback","answerFeedback","StyledMobileSummary","StyledLayoutBox","StickyFooter","StyledLabel","StyledRoundIcon","StyledLessonNavItem","FlexedOakBox","pickIconForSection","sectionName","listItems","item","key","displayValue","defaultChecked","onBlur","hoverBorderRadius","checkboxSize","checkboxBorder","checkboxBorderRadius","defaultColor","checkedBackgroundFill","currentColor","cloudinaryId","endsWith","CldImage","content","lessonSectionName","topNavSlot","bottomNavSlot","pickSectionColours","pageBackgroundColor","contentBackgroundColor","contentBorderColor","mobileContentBackgroundColor","progress","href","pickColorsForSection","notStartedBackgroundColor","backgroundColor","pickLabelForSection","numQuestions","videoLength","pickSummaryForNotStarted","grade","pickSummaryForComplete","pickSummaryForProgress","renderQuestionCounter","backLinkSlot","counterSlot","heading","mobileSummary","pickSectionIcon","image","innerRef","isFeedback","defaultRef","inputRef","showTick","showCross","imageContainer","feedbackBorderColor","inputCheckbox","target","click","counter","total","outlineColor","feedbackAltText","showFeedback","feedbackIcon","defaultValue","setValue","ThemeProvider"],"mappings":"yNA+BWA,EAAW,WAQlB,OAPAA,EAAWC,OAAOC,QAAU,SAAkBC,GAC1C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAE5C,IAAK,IAAII,KADTL,EAAIG,UAAUF,GACOJ,OAAOS,UAAUC,eAAeC,KAAKR,EAAGK,KAAIN,EAAEM,GAAKL,EAAEK,IAE9E,OAAON,CACV,EACMH,EAASa,MAAMC,KAAMP,UAChC,EAEO,SAASQ,EAAOX,EAAGY,GACtB,IAAIb,EAAI,CAAA,EACR,IAAK,IAAIM,KAAKL,EAAOH,OAAOS,UAAUC,eAAeC,KAAKR,EAAGK,IAAMO,EAAEC,QAAQR,GAAK,IAC9EN,EAAEM,GAAKL,EAAEK,IACb,GAAS,MAALL,GAAqD,mBAAjCH,OAAOiB,sBACtB,KAAIb,EAAI,EAAb,IAAgBI,EAAIR,OAAOiB,sBAAsBd,GAAIC,EAAII,EAAED,OAAQH,IAC3DW,EAAEC,QAAQR,EAAEJ,IAAM,GAAKJ,OAAOS,UAAUS,qBAAqBP,KAAKR,EAAGK,EAAEJ,MACvEF,EAAEM,EAAEJ,IAAMD,EAAEK,EAAEJ,IAF4B,CAItD,OAAOF,CACX,CAgIO,SAASiB,EAAOC,EAAGf,GACtB,IAAIgB,EAAsB,mBAAXC,QAAyBF,EAAEE,OAAOC,UACjD,IAAKF,EAAG,OAAOD,EACf,IAAmBI,EAAYT,EAA3BX,EAAIiB,EAAEV,KAAKS,GAAOK,EAAK,GAC3B,IACI,WAAc,IAANpB,GAAgBA,KAAM,MAAQmB,EAAIpB,EAAEsB,QAAQC,MAAMF,EAAGG,KAAKJ,EAAEK,MACvE,CACD,MAAOC,GAASf,EAAI,CAAEe,MAAOA,EAAU,CAC/B,QACJ,IACQN,IAAMA,EAAEG,OAASN,EAAIjB,EAAU,SAAIiB,EAAEV,KAAKP,EACjD,CACO,QAAE,GAAIW,EAAG,MAAMA,EAAEe,KAAQ,CACpC,CACD,OAAOL,CACX,CA0DO,SAASM,EAAqBC,EAAQC,GAEzC,OADIjC,OAAOkC,eAAkBlC,OAAOkC,eAAeF,EAAQ,MAAO,CAAEH,MAAOI,IAAiBD,EAAOC,IAAMA,EAClGD,CACX,CA2DkD,mBAApBG,iBAAiCA,gBC3TlD,IAAAC,EAAiB,CAC5BC,MAAO,UACPC,OAAQ,UACRC,OAAQ,UACRC,OAAQ,UACRC,OAAQ,UACRC,OAAQ,UACRC,OAAQ,UACRC,OAAQ,UACRC,MAAO,UACPC,SAAU,UACVC,KAAM,UACNC,OAAQ,UACRC,OAAQ,UACRC,QAAS,UACTC,KAAM,UACNC,OAAQ,UACRC,OAAQ,UACRC,QAAS,UACTC,SAAU,UACVC,WAAY,UACZC,WAAY,UACZC,YAAa,UACbC,KAAM,UACNC,OAAQ,UACRC,OAAQ,UACRC,QAAS,UACTC,MAAO,UACPC,QAAS,UACTC,QAAS,UACTC,SAAU,UACVC,MAAO,UACPC,QAAS,UACTC,QAAS,UACTC,IAAK,UACLC,MAAO,UACPC,MAAO,UACPC,KAAM,UACNC,QAAS,UACTC,QAAS,UACTC,KAAM,UACNC,QAAS,UACTC,OAAQ,UACRC,KAAM,UACNC,YAAa,eAWFC,EAAuB,CAClCpC,MACE,wFACFyB,IAAK,2FACLxB,SACE,0FACFT,MACE,yFACFI,OACE,wFACFC,OACE,wFAKSwC,EAAkB,CAC7B,eACA,eACA,aACA,gBACA,mBACA,kBACA,oBACA,oBACA,gBACA,eACA,eACA,aACA,aACA,sBACA,iBACA,uBACA,0BACA,mBACA,yBACA,4BACA,UACA,gBACA,sBACA,yBACA,8BACA,sBACA,yBACA,8BACA,sBACA,yBACA,8BACA,sBACA,yBACA,8BACA,sBACA,yBACA,8BACA,aACA,eACA,YACA,gBACA,gBACA,aACA,eACA,aACA,eACA,iBACA,kBACA,iBACA,eACA,iBACA,eACA,iBACA,qBACA,8BACA,qBACA,8BACA,qBACA,8BACA,qBACA,8BACA,qBACA,8BACA,qBACA,8BACA,eCpHF,SAASC,EAAWtD,GAClB,GAAIA,QAGJ,OAAIA,KAASO,EACJA,EAAeP,GAGpBqD,EAAgBE,SAASvD,GACpB,SAACwD,GAAE,IACFC,EADOD,EAAAE,MACGC,SAAS3D,GACzB,OAAOO,EAAekD,EACxB,OAJF,CAMF,CCxBM,SAAUG,EAAU5D,GACxB,QAASA,CACX,CCHA,gBA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","x_google_ignoreList":[0]}