@randstad-uca/design-system 1.0.59 → 1.0.60

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/tslib/tslib.es6.js","../node_modules/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/state.js","../node_modules/@lit/reactive-element/decorators/query.js","../node_modules/@lit/reactive-element/decorators/base.js","../src/helpers/BaseControl.ts","../src/styles/fontStyles.ts","../src/components/Accordion.ts","../src/components/AccordionList.ts","../src/components/Button.ts","../src/components/CarouselCards.ts","../src/components/Checkbox.ts","../src/styles/tooltip.ts","../src/styles/mix.ts","../src/styles/error.ts","../src/components/Form.ts","../src/components/FormGroup.ts","../src/components/Icon.ts","../src/components/Notice.ts","../src/components/Modal.ts","../src/components/Popup.ts","../src/components/ProgressCircle.ts","../node_modules/@material/web/internal/controller/attachable-controller.js","../node_modules/@material/web/focus/internal/focus-ring.js","../node_modules/@material/web/focus/internal/focus-ring-styles.js","../node_modules/@material/web/focus/md-focus-ring.js","../node_modules/@material/web/internal/motion/animation.js","../node_modules/@material/web/ripple/internal/ripple.js","../node_modules/@material/web/ripple/internal/ripple-styles.js","../node_modules/@material/web/ripple/ripple.js","../node_modules/@material/web/internal/events/form-label-activation.js","../node_modules/@material/web/labs/behaviors/element-internals.js","../node_modules/@material/web/labs/behaviors/constraint-validation.js","../node_modules/@material/web/labs/behaviors/focusable.js","../node_modules/@material/web/labs/behaviors/form-associated.js","../node_modules/@material/web/labs/behaviors/validators/validator.js","../node_modules/@material/web/labs/behaviors/validators/radio-validator.js","../node_modules/@material/web/radio/internal/single-selection-controller.js","../node_modules/@material/web/radio/internal/radio.js","../node_modules/@material/web/radio/internal/radio-styles.js","../node_modules/@material/web/radio/radio.js","../src/components/Radio.ts","../src/components/Select.ts","../src/styles/globalStyles.ts","../src/components/Snackbar.ts","../src/components/Stepper.ts","../src/components/Tabs.ts","../src/styles/progress-bar-upload.ts","../src/components/Upload.ts","../node_modules/date-fns/constants.js","../node_modules/date-fns/constructFrom.js","../node_modules/date-fns/toDate.js","../node_modules/date-fns/addMonths.js","../node_modules/date-fns/_lib/defaultOptions.js","../node_modules/date-fns/startOfWeek.js","../node_modules/date-fns/startOfISOWeek.js","../node_modules/date-fns/getISOWeekYear.js","../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","../node_modules/date-fns/_lib/normalizeDates.js","../node_modules/date-fns/startOfDay.js","../node_modules/date-fns/addYears.js","../node_modules/date-fns/isValid.js","../node_modules/date-fns/isDate.js","../node_modules/date-fns/startOfMonth.js","../node_modules/date-fns/locale/en-US/_lib/formatDistance.js","../node_modules/date-fns/locale/_lib/buildFormatLongFn.js","../node_modules/date-fns/locale/en-US/_lib/formatLong.js","../node_modules/date-fns/locale/en-US/_lib/formatRelative.js","../node_modules/date-fns/locale/_lib/buildLocalizeFn.js","../node_modules/date-fns/locale/_lib/buildMatchFn.js","../node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","../node_modules/date-fns/locale/en-US.js","../node_modules/date-fns/locale/en-US/_lib/localize.js","../node_modules/date-fns/locale/en-US/_lib/match.js","../node_modules/date-fns/getDayOfYear.js","../node_modules/date-fns/differenceInCalendarDays.js","../node_modules/date-fns/startOfYear.js","../node_modules/date-fns/getISOWeek.js","../node_modules/date-fns/startOfISOWeekYear.js","../node_modules/date-fns/getWeekYear.js","../node_modules/date-fns/getWeek.js","../node_modules/date-fns/startOfWeekYear.js","../node_modules/date-fns/_lib/addLeadingZeros.js","../node_modules/date-fns/_lib/format/lightFormatters.js","../node_modules/date-fns/_lib/format/formatters.js","../node_modules/date-fns/_lib/format/longFormatters.js","../node_modules/date-fns/_lib/protectedTokens.js","../node_modules/date-fns/format.js","../node_modules/date-fns/getDate.js","../node_modules/date-fns/getDaysInMonth.js","../node_modules/date-fns/isAfter.js","../node_modules/date-fns/isBefore.js","../node_modules/date-fns/isSameMonth.js","../node_modules/date-fns/isSameYear.js","../node_modules/date-fns/isToday.js","../node_modules/date-fns/isSameDay.js","../node_modules/date-fns/constructNow.js","../src/components/CalendarOverlay.ts","../node_modules/date-fns/setYear.js","../node_modules/date-fns/setMonth.js","../node_modules/date-fns/getDay.js","../node_modules/date-fns/setDate.js","../src/components/DatePicker.ts","../node_modules/date-fns/subYears.js","../src/utils/file-format.ts","../src/components/File.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, Iterator */\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 = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"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 = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\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\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\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 = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\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, inner;\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 if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\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\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 var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\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 __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\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 __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer((()=>{customElements.define(t,e)})):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce(((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1]),t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet));else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((t=>t(this)))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((t=>t.hostConnected?.()))}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach((t=>t.hostDisconnected?.()))}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e,this[e]=h.fromAttribute(s,t.type)??this._$Ej?.get(e)??null,this._$Em=null}}requestUpdate(t,s,i){if(void 0!==t){const e=this.constructor,h=this[t];if(i??=e.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(e._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach((t=>t.hostUpdate?.())),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach((t=>t.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach((t=>this._$ET(t,this[t]))),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.0\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","import{defaultConverter as t,notEqual as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:t,reflect:!1,hasChanged:e},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e,r){return(n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;if(r){const{get:e,set:r}=\"object\"==typeof s?n:i??(()=>{const t=Symbol();return{get(){return this[t]},set(e){this[t]=e}}})();return t(n,s,{get(){let t=e.call(this);return void 0===t&&(t=o(this),(null!==t||this.hasUpdated)&&r.call(this,t)),t}})}return t(n,s,{get(){return o(this)}})}}export{e as query};\n//# sourceMappingURL=query.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import { html, LitElement, nothing } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\n\n@customElement(\"base-control\")\nexport class BaseControl extends LitElement { \n @property({ type: String }) label = '';\n @property({ type: String }) placeholder = '';\n @property({ type: String }) labelColor = '';\n\n @property() value: any = '';\n\n @property({ type: Boolean }) required = false;\n @property({ type: Boolean }) optional = false;\n @property({ type: Boolean }) disabled = false;\n \n @property({ type: Boolean, reflect: true }) error = false;\n @property({ type: String }) errorMessage: string | null = null;\n\n @property({ type: String }) helper: string | null = null;\n @property({ type: String }) helperAlign: 'left' | 'center' | 'right' | 'justify' = 'left';\n\n @property({ type: String }) help?: string; // Icono con tooltip (no es un enlace)\n @property({ type: String }) helpLink?: string; // Icono que es un enlace\n @property({ type: String }) helpLinkTooltipMessage?: string; // Mensaje para el tooltip del enlace\n\n public renderLabelContainer() {\n return html `\n ${ this.label ? \n html`\n <div class=\"label-container\">\n ${ this.renderLabel() }\n \n ${ this.renderHelp() }\n </div>\n ` : ''\n }\n `;\n }\n \n public renderLabel() {\n return html `\n <label class=\"form-label\">\n ${ this.label }\n ${ this.required\n ? html`\n <span class=\"required\">*</span>`\n : this.optional\n ? html` <span class=\"optional\">opcional</span> `\n : nothing\n }\n </label>\n `;\n }\n\n public renderHelp() {\n return html`\n ${ this.help\n ? html`\n <div class=\"tooltip-wrapper\">\n <randstad-icon name=\"info\" size=\"20px\"></randstad-icon>\n \n <div class=\"tooltip\">${ this.help }</div>\n </div>\n `\n : this.helpLink\n ? html`\n <a class=\"tooltip-wrapper\" href=\"${ this.helpLink }\">\n <randstad-icon name=\"ayuda\" size=\"20px\"></randstad-icon>\n \n ${ this.helpLinkTooltipMessage\n ? html`<div class=\"tooltip\">${ this.helpLinkTooltipMessage }</div>`\n : nothing\n }\n </a>\n `\n : nothing\n }\n `;\n }\n\n public renderError() {\n return html`\n ${ this.error ? \n html `\n <div class=\"error-message\">\n ${ this.errorMessage ? this.errorMessage : html`<slot name=\"error-extended\"></slot>` }\n </div>\n `\n : nothing\n }\n `;\n }\n\n public renderHelper() {\n const helperInlineStyles = `text-align: ${ this.helperAlign ?? 'left' };`;\n\n return html`\n ${ this.helper\n ? html`\n <p \n class=\"helper-description\"\n style=${ helperInlineStyles }\n >\n ${ this.helper }\n </p>\n `\n : nothing\n }\n `;\n }\n}","import { css } from 'lit';\r\n\r\nexport const bodyXS = css`\r\n font-family: 'Graphik', sans-serif;\r\n font-weight: 400;\r\n font-size: 12px;\r\n line-height: 15px;\r\n letter-spacing: 0%;\r\n`;\r\n\r\nexport const bodyS = css`\r\n font-family: 'Graphik', sans-serif;\r\n font-weight: 400;\r\n font-size: 14px;\r\n line-height: 25px;\r\n letter-spacing: 0%;\r\n`;\r\n\r\nexport const bodyM = css`\r\n font-family: 'Graphik', sans-serif;\r\n font-weight: 400;\r\n font-size: 16px;\r\n line-height: 25px;\r\n letter-spacing: 0%;\r\n`;\r\n\r\nexport const bodyL = css`\r\n font-family: 'Graphik', sans-serif;\r\n font-weight: 400;\r\n font-size: 18px;\r\n line-height: 30px;\r\n letter-spacing: 0%;\r\n`;\r\n\r\nexport const titleXXS = css`\r\n font-family: 'Graphik', sans-serif;\r\n font-weight: 400;\r\n font-size: 18px;\r\n line-height: 30px;\r\n letter-spacing: 0%;\r\n vertical-align: middle;\r\n`;\r\n\r\nexport const titleXS = css`\r\n font-family: 'Graphik', sans-serif;\r\n font-weight: 400;\r\n font-size: 20px;\r\n line-height: 30px;\r\n letter-spacing: -1%;\r\n vertical-align: middle;\r\n`;\r\n\r\nexport const titleS = css`\r\n font-family: 'Graphik', sans-serif;\r\n font-weight: 400;\r\n font-size: 26px;\r\n line-height: 30px;\r\n letter-spacing: -1%;\r\n vertical-align: middle;\r\n`;\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport { bodyM } from '../styles/fontStyles';\r\n\r\n@customElement('accordion-panel')\r\nexport class AccordionPanel extends LitElement {\r\n @property({ type: String }) title = '';\r\n @state() private isOpen = false;\r\n @state() private isDesktop = window.innerWidth > 940;\r\n\r\n static styles = css`\r\n :host {\r\n display: flex;\r\n flex-direction: column;\r\n font-family: 'Graphik', sans-serif;\r\n position: relative;\r\n }\r\n\r\n .header {\r\n display: flex;\r\n justify-content: space-between;\r\n gap: 16px;\r\n flex-direction: row;\r\n align-items: center;\r\n cursor: pointer;\r\n padding-bottom: 16px;\r\n }\r\n\r\n .title {\r\n ${bodyM}\r\n color: var(--secondary-color);\r\n }\r\n\r\n .icon-wrapper {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n transition: background-color 0.3s ease;\r\n }\r\n\r\n .icon {\r\n transition: transform 0.3s;\r\n }\r\n\r\n .content {\r\n overflow: hidden;\r\n max-height: 0;\r\n transition: max-height 0.3s ease, padding-bottom 0.3s ease;\r\n }\r\n\r\n .content.open {\r\n max-height: 1000px;\r\n padding-bottom: 16px;\r\n }\r\n\r\n :host::after {\r\n content: '';\r\n display: block;\r\n height: 1px;\r\n background-color: var(--secondary-color-20);\r\n width: 100%;\r\n }\r\n\r\n @media (min-width: 941px) {\r\n .header {\r\n align-items: flex-start;\r\n }\r\n .header:hover .icon-wrapper {\r\n background-color: var(--primary-color-5);\r\n }\r\n }\r\n `;\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n window.addEventListener('resize', this.handleResize);\r\n }\r\n\r\n disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n window.removeEventListener('resize', this.handleResize);\r\n }\r\n\r\n private handleResize = () => {\r\n this.isDesktop = window.innerWidth > 940;\r\n };\r\n\r\n private toggle() {\r\n this.isOpen = !this.isOpen;\r\n }\r\n\r\n private renderIcon() {\r\n return this.isOpen\r\n ? html`<randstad-icon name=\"arrow_up\" size=\"24px\" style=\"--icon-color: var(--primary-color);\"></randstad-icon>`\r\n : html`<randstad-icon name=\"arrow_down\" size=\"24px\" style=\"--icon-color: var(--primary-color);\"></randstad-icon>`;\r\n }\r\n\r\n render() {\r\n return html`\r\n <div class=\"header\" @click=${this.toggle}>\r\n <div class=\"title\">${this.title}</div>\r\n <div class=\"icon\">\r\n ${this.isDesktop\r\n ? html`\r\n <div class=\"icon-wrapper\">\r\n ${this.renderIcon()}\r\n </div>\r\n `\r\n : this.renderIcon()}\r\n </div>\r\n </div>\r\n <div class=\"content ${this.isOpen ? 'open' : ''}\">\r\n <slot></slot>\r\n </div>\r\n `;\r\n }\r\n\r\n}\r\n","import { LitElement, css, html } from 'lit';\r\nimport { customElement } from 'lit/decorators.js';\r\n\r\n@customElement('accordion-list')\r\nexport class AccordionList extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 16px;\r\n }\r\n `;\r\n\r\n render() {\r\n return html`<slot></slot>`;\r\n }\r\n}","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { bodyM, bodyL } from '../styles/fontStyles';\r\nimport { classMap } from 'lit/directives/class-map.js';\r\nimport '../styles/buttons.css';\r\n\r\n@customElement('randstad-button')\r\nexport class RandstadButton extends LitElement {\r\n @property({ type: String }) type: 'button' | 'submit' | 'reset' = 'button';\r\n @property({ type: String }) variant: 'button-primary' | 'button-secondary' | 'button-tertiary' | 'button-round' | 'button-card' | 'button-icon' = 'button-primary';\r\n \r\n @property({ type: String }) size: 'md' | 'lg' = 'md';\r\n @property({ type: String }) label = '';\r\n\r\n @property({ type: Boolean }) loader = false;\r\n\r\n @property({ type: String, attribute: 'icon-src' }) iconSrc?: string;\r\n @property({ type: String }) iconPosition: 'left' | 'right' = 'left';\r\n @property({ type: String }) iconName: string | null = null;\r\n\r\n @property({ type: Boolean, reflect: true }) disabled: boolean = false;\r\n \r\n @property({ type: String }) idevent = '';\r\n\r\n static styles = css`\r\n :host {\r\n display: inline-block;\r\n }\r\n\r\n .button {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-weight: 400;\r\n padding: 0;\r\n border: none;\r\n transition: background-color 0.2s, color 0.2s, box-shadow 0.2s;\r\n gap: 4px;\r\n width: 100%;\r\n position: relative;\r\n box-sizing: border-box; \r\n }\r\n\r\n .content-container {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 4px;\r\n width: 100%;\r\n padding: 16px;\r\n height: 100%;\r\n }\r\n\r\n .content-container .label-text {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n height: 100%;\r\n }\r\n\r\n .button-lg {\r\n ${bodyL}\r\n min-height: 62px;\r\n }\r\n\r\n .button-md {\r\n ${bodyM}\r\n min-height: 57px;\r\n }\r\n\r\n /* Primary */\r\n .button-primary {\r\n background-color: var(--primary-color);\r\n color: var(--white);\r\n }\r\n\r\n .button-primary:not([disabled]):hover {\r\n background-color: var(--primary-button-hover);\r\n }\r\n\r\n .button-primary:not([disabled]):active {\r\n background-color: var(--primary-button-active);\r\n }\r\n\r\n .button-primary:not([disabled]):focus-visible {\r\n outline: 2px solid var(--primary-button-focus);\r\n outline-offset: 2px;\r\n }\r\n\r\n .button-primary[disabled] {\r\n color: var(--secondary-color-60);\r\n background-color: var(--secondary-color-20);\r\n cursor: default;\r\n }\r\n\r\n /* Secondary */\r\n .button-secondary {\r\n background: none;\r\n color: var(--primary-color);\r\n border: 1px solid var(--primary-color);\r\n }\r\n\r\n .button-secondary:not([disabled]):hover {\r\n color: var(--primary-button-hover);\r\n border-color: var(--primary-button-hover);\r\n }\r\n\r\n .button-secondary:not([disabled]):active {\r\n color: var(--secondary-color-80);\r\n border-color: var(--secondary-color-80);\r\n }\r\n\r\n .button-secondary:not([disabled]):focus-visible {\r\n outline: 2px solid var(--primary-color);\r\n outline-offset: 2px;\r\n }\r\n\r\n .button-secondary[disabled] {\r\n color: var(--secondary-color-60);\r\n border-color: var(--secondary-color-60);\r\n cursor: default;\r\n }\r\n\r\n /* Tertiary */\r\n .button-tertiary {\r\n background: none;\r\n border: none;\r\n color: var(--primary-color);\r\n }\r\n\r\n .button-tertiary:not([disabled]):hover {\r\n background: var(--primary-color-5);\r\n }\r\n\r\n .button-tertiary:not([disabled]):active {\r\n background-color: var(--primary-color-10);\r\n }\r\n\r\n .button-tertiary:not([disabled]):focus-visible {\r\n outline: 2px solid var(--primary-color);\r\n outline-offset: 2px;\r\n }\r\n\r\n .button-tertiary[disabled] {\r\n color: var(--secondary-color-60);\r\n cursor: default;\r\n }\r\n\r\n /* Round */\r\n .button-round {\r\n width: 48px;\r\n height: 48px;\r\n border-radius: 50%;\r\n background-color: var(--white);\r\n box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.2);\r\n padding: 0;\r\n }\r\n\r\n .button-round:not([disabled]):hover {\r\n background-color: var(--randstad-blue-10);\r\n }\r\n\r\n .button-round:not([disabled]):active {\r\n background-color: var(--randstad-blue-40);\r\n }\r\n\r\n .button-round:not([disabled]):focus-visible {\r\n outline: 2px solid var(--primary-color);\r\n outline-offset: 2px;\r\n }\r\n\r\n .button-round[disabled] {\r\n background-color: var(--secondary-color-20);\r\n cursor: default;\r\n }\r\n\r\n .button-round img.button-icon {\r\n width: 24px;\r\n height: 24px;\r\n }\r\n\r\n /* Button Icon */\r\n .button-icon {\r\n background: none;\r\n border: none;\r\n color: var(--primary-color);\r\n padding: 4px;\r\n }\r\n\r\n .button-icon:not([disabled]):hover {\r\n background: var(--primary-color-5);\r\n }\r\n\r\n .button-icon:not([disabled]):active {\r\n background-color: var(--primary-color-10);\r\n }\r\n\r\n .button-icon:not([disabled]):focus-visible {\r\n outline: 2px solid var(--primary-color);\r\n outline-offset: 2px;\r\n }\r\n\r\n .button-icon[disabled] {\r\n color: var(--secondary-color-60);\r\n cursor: default;\r\n }\r\n \r\n /* Loader */\r\n .loader, .label-text, .button-icon {\r\n line-height: 1; \r\n }\r\n \r\n .loader {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 8px;\r\n }\r\n\r\n .dot {\r\n border-radius: 50%;\r\n display: inline-block;\r\n animation: growAndFade 2.4s infinite ease-in-out;\r\n }\r\n\r\n .button-md .dot {\r\n width: 6px;\r\n height: 6px;\r\n }\r\n\r\n .button-lg .dot {\r\n width: 8px;\r\n height: 8px;\r\n }\r\n\r\n .dot:nth-child(1) { animation-delay: 0s; }\r\n .dot:nth-child(2) { animation-delay: 0.8s; }\r\n .dot:nth-child(3) { animation-delay: 1.6s; }\r\n\r\n @keyframes growAndFade {\r\n 0% { transform: scale(1); }\r\n 16.67% { transform: scale(1.5); }\r\n 33.33% { transform: scale(1.5); }\r\n 50% { transform: scale(1); }\r\n 100% { transform: scale(1); }\r\n }\r\n\r\n .button-primary.loader .dot,\r\n .button-secondary.loader .dot {\r\n background-color: var(--white);\r\n }\r\n\r\n .button-secondary.loader {\r\n background-color: var(--primary-color);\r\n border: none;\r\n color: var(--white);\r\n }\r\n\r\n /* Estilos de sobrescritura para el estado de carga */\r\n .button-primary.loader[disabled] {\r\n background-color: var(--primary-color) !important;\r\n color: var(--white) !important;\r\n }\r\n\r\n .button-secondary.loader[disabled] {\r\n background-color: var(--primary-color) !important;\r\n border-color: var(--primary-color) !important;\r\n color: var(--white) !important;\r\n }\r\n\r\n .button-tertiary.loader[disabled] {\r\n color: var(--primary-color) !important;\r\n background-color: transparent !important;\r\n }\r\n\r\n .button-round.loader[disabled] {\r\n background-color: var(--white) !important;\r\n }\r\n\r\n .button-icon.loader[disabled] {\r\n color: var(--primary-color) !important;\r\n background-color: transparent !important;\r\n }\r\n /* */ \r\n\r\n .button-card {\r\n font-family: 'Graphik';\r\n background-color: var(--primary-color);\r\n color: var(--white);\r\n border-radius: 4px;\r\n padding: 4px 16px;\r\n font-weight: 400;\r\n font-size: 12px;\r\n line-height: 15px;\r\n letter-spacing: 0%;\r\n text-align: center;\r\n vertical-align: middle;\r\n\r\n }\r\n\r\n .button-card:not([disabled]):hover {\r\n background-color: #175197;\r\n }\r\n\r\n .button-card:not([disabled]):active {\r\n background-color: #124077;\r\n }\r\n\r\n .button-card:not([disabled]):focus-visible {\r\n outline: 2px solid var(--primary-color);\r\n outline-offset: 2px;\r\n }\r\n\r\n .button-card[disabled] {\r\n background-color: #CFD1D9;\r\n color: #6F758D;\r\n cursor: default;\r\n }\r\n\r\n `;\r\n\r\n private handleClick(event: Event) {\r\n if (this.disabled) return;\r\n\r\n if (this.type === 'submit') {\r\n const form = this.closest('form');\r\n if (form) form.requestSubmit();\r\n } else if( this.type === 'reset'){\r\n const form = this.closest('form');\r\n if (form) form.reset();\r\n } else if(this.idevent){\r\n const result = this.dispatchEvent(new CustomEvent('randstad-button-click',{detail:this.idevent,composed:true, bubbles: true, cancelable: false}))\r\n }\r\n }\r\n\r\n public render() {\r\n const classes = {\r\n button: true,\r\n [this.variant]: true,\r\n loader: this.loader,\r\n [`button-${this.size}`]: ['button-primary', 'button-secondary', 'button-tertiary'].includes(this.variant)\r\n };\r\n \r\n const dotColor = this.variant === 'button-tertiary' ? 'var(--primary-color)' : 'white';\r\n\r\n return html`\r\n <button\r\n part=\"button\"\r\n type=${this.type}\r\n class=${classMap(classes)}\r\n ?disabled=${this.disabled || this.loader}\r\n ?aria-busy=${this.loader}\r\n @click=${this.handleClick}\r\n >\r\n ${this.loader\r\n ? html`\r\n <div class=\"content-container\">\r\n <div class=\"loader\">\r\n <span class=\"dot\" style=\"background-color: ${dotColor};\"></span>\r\n <span class=\"dot\" style=\"background-color: ${dotColor};\"></span>\r\n <span class=\"dot\" style=\"background-color: ${dotColor};\"></span>\r\n </div>\r\n </div>\r\n `\r\n : html`\r\n <div class=\"content-container\">\r\n ${this.iconSrc && this.variant === 'button-round'\r\n ? html`<img src=${this.iconSrc} alt=\"icon\" class=\"button-icon\" part=\"button-icon\"/>`\r\n : ''}\r\n \r\n ${this.iconName && this.variant !== 'button-round' && this.iconPosition === 'left'\r\n ? html`<randstad-icon name=${this.iconName} size=\"24px\"></randstad-icon>`\r\n : ''}\r\n \r\n ${this.label ? html`<span class=\"label-text\" part=\"label\">${this.label}</span>` : html`<slot></slot>`}\r\n \r\n ${this.iconName && this.variant !== 'button-round' && this.iconPosition === 'right'\r\n ? html`<randstad-icon name=${this.iconName} size=\"24px\"></randstad-icon>`\r\n : ''}\r\n </div>\r\n `}\r\n </button>\r\n `;\r\n }\r\n}","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { bodyS, bodyL } from '../styles/fontStyles';\r\n\r\n@customElement('carousel-card')\r\nexport class CarouselCard extends LitElement {\r\n @property({ type: String }) img = '';\r\n @property({ type: String }) name = '';\r\n @property({ type: String }) title = '';\r\n @property({ type: String }) description = '';\r\n @property({ type: String }) buttonLabel = 'Contactanos';\r\n @property({ type: String }) cardId = '';\r\n\r\n static styles = css`\r\n :host {\r\n display: inline-block;\r\n font-family: \"Graphik\", sans-serif;\r\n }\r\n\r\n .image-container {\r\n width: 280px;\r\n height: 390px;\r\n position: relative;\r\n border-radius: 8px;\r\n overflow: hidden;\r\n background-size: cover;\r\n background-position: center;\r\n background-repeat: no-repeat;\r\n display: flex;\r\n align-items: flex-end;\r\n }\r\n\r\n .overlay-gradient,\r\n .overlay-hover {\r\n position: absolute;\r\n inset: 0;\r\n border-radius: 8px;\r\n transition: opacity 1s ease;\r\n z-index: 0;\r\n pointer-events: none;\r\n }\r\n\r\n .overlay-gradient {\r\n background: linear-gradient(180deg, rgba(15, 25, 65, 0) 0%, rgba(15, 25, 65, 0.279522) 48.01%, rgba(15, 25, 65, 0.6) 80.13%, rgba(15, 25, 65, 0.6) 100%);\r\n opacity: 1;\r\n }\r\n\r\n .overlay-hover {\r\n background: #0F1941CC;\r\n opacity: 0;\r\n }\r\n\r\n .image-container:hover .overlay-hover {\r\n opacity: 1;\r\n }\r\n\r\n .content-container {\r\n position: relative;\r\n z-index: 1;\r\n color: #FFFFFF;\r\n padding: 24px;\r\n box-sizing: border-box;\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n\r\n .title-wrapper {\r\n margin-bottom: 0; /* reset, por si acaso */\r\n }\r\n\r\n .title {\r\n ${bodyL}\r\n margin: 0;\r\n }\r\n\r\n .details {\r\n max-height: 0;\r\n overflow: hidden;\r\n opacity: 0;\r\n transform: translateY(40px);\r\n transition: max-height 0.4s ease, opacity 0.4s ease, transform 0.4s ease;\r\n }\r\n\r\n .image-container:hover .details {\r\n max-height: 240px;\r\n opacity: 1;\r\n transform: translateY(0);\r\n overflow: visible;\r\n }\r\n\r\n .description {\r\n ${bodyS}\r\n }\r\n\r\n ::part(button) {\r\n color: white;\r\n border: 1px solid white;\r\n background: transparent;\r\n text-align: left;\r\n }\r\n\r\n ::part(button):hover {\r\n background-color: rgba(255, 255, 255, 0.1);\r\n }\r\n\r\n ::part(button):active {\r\n background-color: rgba(255, 255, 255, 0.2);\r\n } \r\n `;\r\n\r\n render() {\r\n return html`\r\n <div class=\"image-container\" style=\"background-image: url(${this.img});\">\r\n <div class=\"overlay-gradient\"></div>\r\n <div class=\"overlay-hover\"></div>\r\n <div class=\"content-container\">\r\n <div class=\"title-wrapper\">\r\n <h3 class=\"title\">${this.name}</h3>\r\n </div>\r\n <div class=\"details\">\r\n <p class=\"description\">${this.description}</p>\r\n ${\r\n this.cardId ?\r\n html`<randstad-button\r\n variant=\"button-tertiary\"\r\n .label=${this.buttonLabel}\r\n idevent=${this.cardId}\r\n ></randstad-button>`\r\n :\r\n html`<randstad-button\r\n variant=\"button-tertiary\"\r\n .label=${this.buttonLabel}\r\n ></randstad-button>`\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { bodyS } from '../styles/fontStyles';\r\n\r\n@customElement('randstad-checkbox')\r\nexport class Checkbox extends LitElement {\r\n @property({ type: Boolean, reflect: true }) checked = false;\r\n @property({ type: Boolean }) error = false;\r\n @property({ type: Boolean }) disabled = false;\r\n\r\n\r\n static styles = css`\r\n :host {\r\n display: block;\r\n max-width: 100%;\r\n }\r\n\r\n label {\r\n ${bodyS}\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n color: var(--secondary-color);\r\n }\r\n\r\n input[type=\"checkbox\"] {\r\n min-width: 24px;\r\n min-height: 24px;\r\n cursor: pointer;\r\n border-radius: 4px;\r\n border: 1px solid var(--secondary-color-20);\r\n appearance: none;\r\n position: relative;\r\n }\r\n\r\n input[type=\"checkbox\"]:checked {\r\n background-color: var(--primary-color);\r\n border: 1px solid var(--primary-color);\r\n }\r\n\r\n input[type=\"checkbox\"]:checked::after {\r\n content: '';\r\n position: absolute;\r\n left: 8px;\r\n top: 4px;\r\n width: 5px;\r\n height: 11px;\r\n border: solid white;\r\n border-width: 0 1px 1px 0;\r\n transform: rotate(45deg);\r\n }\r\n\r\n input[type=\"checkbox\"]:checked:disabled::after {\r\n border-color: var(--secondary-color-40);\r\n }\r\n\r\n label.error input[type=\"checkbox\"]:checked:disabled::after {\r\n border-color: white;\r\n }\r\n\r\n .terms-text {\r\n display: inline;\r\n }\r\n\r\n .terms-text ::slotted(a) {\r\n color: var(--primary-color);\r\n text-decoration: none;\r\n cursor: pointer;\r\n }\r\n\r\n input[type=\"checkbox\"].error,\r\n label.error input[type=\"checkbox\"]:not(:disabled) {\r\n border-color: var(--ui-negative);\r\n }\r\n\r\n /* Hover sin error (solo si no está deshabilitado) */\r\n input[type=\"checkbox\"]:hover:not(:disabled):not(.error) {\r\n box-shadow: 0 0 0 4px var(--secondary-color-10);\r\n }\r\n\r\n /* Hover con error (solo si no está deshabilitado) */\r\n label.error input[type=\"checkbox\"]:hover:not(:disabled) {\r\n box-shadow: 0px 0px 0px 4px #E00F0F1A;\r\n }\r\n\r\n /* ✅ Focus sin error */\r\n input[type=\"checkbox\"]:focus-visible:not(:disabled):not(.error),\r\n label:not(.error) input[type=\"checkbox\"]:focus-visible:not(:disabled) {\r\n outline: none;\r\n box-shadow: 0 0 0 4px var(--secondary-color-10);\r\n }\r\n\r\n /* ❌ Focus con error */\r\n label.error input[type=\"checkbox\"]:focus-visible:not(:disabled) {\r\n outline: none;\r\n box-shadow: 0 0 0 4px #E00F0F1A;\r\n }\r\n\r\n input[type=\"checkbox\"].error:checked,\r\n label.error input[type=\"checkbox\"]:checked {\r\n background-color: var(--ui-negative);\r\n border-color: var(--ui-negative);\r\n }\r\n\r\n input[type=\"checkbox\"]:disabled {\r\n background-color: var(--secondary-color-10);\r\n border-color: var(--secondary-color-20);\r\n color: #9FA3B3;\r\n cursor: default;\r\n }\r\n\r\n label.disabled {\r\n color: #9FA3B3;\r\n }\r\n `;\r\n\r\n private toggleCheck(event: Event) {\r\n this.checked = (event.target as HTMLInputElement).checked;\r\n\r\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));\r\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\r\n this.dispatchEvent(new Event('click', { bubbles: true, composed: true }));\r\n }\r\n\r\n render() {\r\n return html`\r\n <label class=\"${this.error ? 'error' : ''} ${this.disabled ? 'disabled' : ''}\">\r\n <input\r\n type=\"checkbox\"\r\n role=\"checkbox\"\r\n aria-checked=${this.checked ? 'true' : 'false'}\r\n .checked=${this.checked}\r\n ?disabled=${this.disabled}\r\n @change=${this.toggleCheck}\r\n @focus=${() => this.setAttribute('focused', '')}\r\n @blur=${() => this.removeAttribute('focused')}\r\n />\r\n <span class=\"terms-text\">\r\n <slot></slot>\r\n </span>\r\n </label>\r\n `;\r\n }\r\n}","import { css } from 'lit';\n\nexport const tooltipStyles = css`\n .label-container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n }\n \n .tooltip-wrapper {\n position: relative;\n display: inline-flex;\n align-items: center;\n }\n\n .tooltip {\n position: absolute;\n top: 160%;\n right: 0;\n \n background-color: var(--tooltip-background, #0F1941);\n color: var(--tooltip-color, #fff);\n\n padding: 8px 12px;\n border-radius: 4px;\n font-size: 14px;\n line-height: 20px;\n\n width: 250px;\n max-width: 250px;\n \n z-index: 10;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s ease, visibility 0.2s ease, transform 0.2s ease;\n }\n\n .tooltip::after {\n content: '';\n position: absolute;\n top: -6px;\n right: 4px;\n \n width: 0;\n height: 0;\n border-style: solid;\n border-width: 0 6px 6px 6px; \n border-color: transparent transparent var(--tooltip-background, #0F1941) transparent; \n }\n\n .tooltip-wrapper:hover .tooltip {\n visibility: visible;\n opacity: 1;\n }\n`;","\nimport { css } from \"lit\";\nimport { bodyL, bodyM, bodyXS } from \"./fontStyles\";\n\nexport const mixStyles = css `\n :host {\n display: block;\n font-family: \"Graphik\", sans-serif;\n color: var(--secondary-randstad-dark-blue, #0f1941);\n width: 100%;\n }\n\n .form-label {\n ${ bodyM }\n display: flex;\n align-items: baseline;\n flex-direction: row;\n gap: 4px;\n color: var(--label-color, var(--secondary-color-80));\n }\n\n .input-container {\n position: relative;\n width: 100%;\n max-width: 100%;\n }\n\n input::placeholder {\n ${ bodyL }\n color: var(--secondary-color-40);\n }\n\n .helper-description {\n ${ bodyM }\n color: var(--secondary-color-40);\n margin: 0;\n }\n\n .required {\n color: var(--ui-negative);\n }\n\n .optional {\n color: var(--secondary-color-60);\n ${ bodyXS }\n }\n\n randstad-icon {\n color: var(--primary-color);\n }\n`;","import { css } from \"lit\";\nimport { bodyM } from \"./fontStyles\";\n\nexport const errorStyles = css `\n :host([error]) .input-wrapper, .form.error .form-input {\n border: 1px solid var(--ui-negative, red) !important;\n }\n\n :host([error]) .input-wrapper:hover, .form.error:hover .form-input:hover {\n box-shadow: 0px 0px 0px 4px #e00f0f1a !important;\n }\n\n :host([error]) .input-wrapper.active, .form.error.active .form-input.active {\n border: 1px solid var(--ui-negative, red) !important;\n box-shadow: none !important;\n }\n\n .error-message {\n ${ bodyM }\n color: var(--ui-negative, #E00F0F);\n margin-top: 4px;\n }\n`;","import { html, css, nothing } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { bodyM, bodyL } from '../styles/fontStyles';\r\nimport { tooltipStyles } from \"../styles/tooltip\";\r\nimport { BaseControl } from '../helpers/BaseControl';\r\nimport { mixStyles } from '../styles/mix';\r\nimport { errorStyles } from '../styles/error';\r\n\r\n@customElement('randstad-form')\r\nexport class RandstadForm extends BaseControl {\r\n //Evento post input en tiempo real durante la escritura, para validación pattern only text y only numeric.\r\n @property({ type: String }) keydown: 'number' | 'text' | undefined = undefined;\r\n\r\n @property({ type: String }) size: 'sm' | 'md' | 'lg' = 'md';\r\n @property({ type: String }) icon: 'left' | 'right' | null = null;\r\n\r\n @property({ type: Boolean }) typing: boolean = false;\r\n @property({ type: String }) type: 'text' | 'password' | 'textarea' = 'text';\r\n\r\n @property({ type: String }) linkText?: string;\r\n @property({ type: String }) linkRoute?: string;\r\n\r\n @property({ type: Boolean, reflect: true }) isPasswordVisible = false;\r\n @property({ type: Boolean }) cleanButton: boolean = false;\r\n @property({ type: Number }) maxLength?: number;\r\n\r\n @property({ type: String }) heightTextArea?: string;\r\n @property({ type: String }) maxHeightTextArea?: string;\r\n\r\n static styles = css`\r\n ${ mixStyles }\r\n ${ errorStyles }\r\n ${ tooltipStyles }\r\n\r\n .form {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n width: 100%;\r\n }\r\n\r\n .form-input {\r\n ${bodyL}\r\n padding: 16px;\r\n border: 1px solid var(--secondary-color-10);\r\n border-radius: 4px;\r\n outline: none;\r\n transition: border-color 0.3s ease, box-shadow 0.3s ease;\r\n width: 100%;\r\n color: var(--secondary-color);\r\n }\r\n\r\n /* Hover normal (sin error ni foco) */\r\n .form:not(.error):not(:focus-within) .form-input:hover {\r\n box-shadow: 0px 0px 0px 4px var(--form-hover-shadow);\r\n }\r\n\r\n /* Hover con error (sin foco) */\r\n .form.error:not(:focus-within) .form-input:hover {\r\n box-shadow: 0px 0px 0px 4px var(--ui-negative-pink-shadow);\r\n }\r\n\r\n .form-input:focus {\r\n border: 2px solid var(--primary-color)\r\n }\r\n\r\n .form.disabled .form-input, \r\n .form.disabled .toggle-password randstad-icon,\r\n .form.disabled .clean-button randstad-icon {\r\n background-color: var( --secondary-color-10 );\r\n color: #9FA3B3;\r\n cursor: default;\r\n }\r\n \r\n .form.disabled .toggle-password,\r\n .form.disabled .clean-button {\r\n cursor: default;\r\n }\r\n\r\n .input-with-button {\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n position: relative;\r\n }\r\n\r\n .input-with-button input {\r\n width: 100%;\r\n }\r\n\r\n .input-with-button input[type=\"password\"]{\r\n padding-right: 40px;\r\n }\r\n\r\n .input-with-button button {\r\n position: absolute;\r\n right: 10px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 40px;\r\n height: 40px;\r\n }\r\n\r\n .toggle-password randstad-icon {\r\n width: 100%;\r\n height: 100%;\r\n max-width: 32px;\r\n max-height: 32px;\r\n }\r\n\r\n textarea {\r\n ${bodyL}\r\n resize: none;\r\n }\r\n\r\n textarea.form-input {\r\n min-height: 30px;\r\n width: 100%;\r\n }\r\n\r\n .form.disabled textarea.form-input {\r\n background-color: var(--secondary-color-10);\r\n color: #9FA3B3;\r\n cursor: default;\r\n }\r\n \r\n .link-text {\r\n ${bodyM}\r\n color: var(--primary-color);\r\n cursor: pointer;\r\n text-align: end;\r\n text-decoration: none;\r\n vertical-align: middle;\r\n display: inline;\r\n padding: 0;\r\n margin: 0;\r\n line-height: normal;\r\n }\r\n\r\n .link-text:hover {\r\n color: var(--secondary-color);\r\n }\r\n\r\n .clean-button {\r\n position: absolute;\r\n right: 10px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 40px;\r\n height: 40px;\r\n }\r\n\r\n .clean-button randstad-icon {\r\n width: 24px;\r\n height: 24px;\r\n color: var( --primary-color );\r\n }\r\n `;\r\n\r\n private togglePassword( event: Event ) {\r\n this.isPasswordVisible = !this.isPasswordVisible;\r\n\r\n const input: HTMLInputElement | null | undefined = ( event.currentTarget as HTMLElement ).parentElement?.querySelector( 'input' ); \r\n if ( input ) input.type = this.isPasswordVisible ? 'text' : 'password';\r\n\r\n this.requestUpdate();\r\n }\r\n\r\n private handleInput( event: Event ) {\r\n this.handleInputCustom( event );\r\n\r\n const target: HTMLInputElement | HTMLTextAreaElement = event.target as HTMLInputElement | HTMLTextAreaElement;\r\n const newValue: string = target.value;\r\n\r\n if ( this.maxLength !== undefined && this.type !== 'textarea' ) this.value = newValue.slice( 0, this.maxLength );\r\n else this.value = newValue;\r\n \r\n this.dispatchEvent( new CustomEvent('valueChanged', { detail: this.value }) );\r\n this.dispatchEvent( new Event('input', { bubbles: true }) );\r\n\r\n this.requestUpdate();\r\n }\r\n\r\n private handleClear() {\r\n this.value = '';\r\n\r\n this.dispatchEvent(new CustomEvent('valueChanged', { detail: this.value }));\r\n this.dispatchEvent(new Event('input', { bubbles: true }));\r\n\r\n this.requestUpdate();\r\n }\r\n\r\n private handleLinkClick( event: Event ) {\r\n event.preventDefault();\r\n if( !this.linkRoute ) return;\r\n\r\n this.dispatchEvent(\r\n new CustomEvent('linkClicked', {\r\n detail: this.linkRoute,\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n\r\n public handleInputCustom( event: Event ) {\r\n if ( this.keydown === 'number' ) this.onlyNumeric( event );\r\n else if ( this.keydown === 'text' ) this.onlyText( event );\r\n }\r\n\r\n public onlyNumeric( event: Event ) {\r\n const inputElement: HTMLInputElement = event.target as HTMLInputElement;\r\n const currentValue: string = inputElement.value;\r\n \r\n // Solo permite dígitos (0-9)\r\n const sanitizedValue: string = currentValue.replace(/[^0-9]/g, '');\r\n \r\n // Actualiza el valor del input con el valor limpio\r\n inputElement.value = sanitizedValue;\r\n }\r\n\r\n public onlyText( event: Event ) {\r\n const inputElement: HTMLInputElement = event.target as HTMLInputElement;\r\n const currentValue: string = inputElement.value;\r\n\r\n // Solo permite letras, espacios y caracteres acentuados comunes en español\r\n const sanitizedValue: string = currentValue.replace( /[^a-zA-Z\\sáéíóúñÁÉÍÓÚÑ]/g, '' );\r\n\r\n // Actualiza el valor del input con el valor limpio\r\n inputElement.value = sanitizedValue;\r\n }\r\n\r\n private handleKeyDown( event: KeyboardEvent ) {\r\n if ( event.key !== 'Enter' ) return;\r\n \r\n const submitEvent = new Event('submit', {\r\n bubbles: true,\r\n composed: true,\r\n cancelable: true,\r\n });\r\n\r\n const form: HTMLFormElement | null = this.closest( 'form' );\r\n if ( form ) form.dispatchEvent( submitEvent );\r\n }\r\n\r\n public render() {\r\n const showCleanButton =\r\n this.cleanButton &&\r\n this.value &&\r\n this.type !== 'password' &&\r\n this.type !== 'textarea'\r\n ;\r\n\r\n const textareaInlineStyles =\r\n this.type === 'textarea'\r\n ? `height: ${this.heightTextArea ?? '30px'}; max-height: ${this.maxHeightTextArea ?? \"30px\"}; overflow-y: auto;`\r\n : ''\r\n ;\r\n\r\n const formStyles = html`\r\n ${ this.labelColor ? `--label-color: ${ this.labelColor };` : '' }\r\n `;\r\n\r\n return html`\r\n <div\r\n class=\"form ${ this.error ? 'error' : ''} ${ this.disabled ? 'disabled' : '' }\"\r\n style=\"${formStyles}\"\r\n >\r\n ${ this.renderLabelContainer() }\r\n\r\n <div class=\"form-container\">\r\n ${this.icon === 'left'\r\n ? html`<span class=\"icon left\"></span>`\r\n : nothing\r\n }\r\n\r\n <div class=\"input-with-button\">\r\n ${this.type === 'textarea'\r\n ? html`\r\n <textarea\r\n class=\"form-input\"\r\n placeholder=${this.placeholder || ''}\r\n .value=${this.value}\r\n ?disabled=${this.disabled}\r\n @input=${this.handleInput}\r\n @keydown=${this.handleKeyDown}\r\n maxlength=${this.maxLength ?? nothing}\r\n style=\"${textareaInlineStyles}\"\r\n >\r\n </textarea>\r\n `\r\n : html`\r\n <input\r\n class=\"form-input\"\r\n type=${this.type === 'password' && !this.isPasswordVisible ? 'password' : 'text'}\r\n placeholder=${this.placeholder || ''}\r\n .value=${this.value}\r\n ?disabled=${this.disabled}\r\n @input=${this.handleInput}\r\n @keydown=${this.handleKeyDown}\r\n maxlength=${this.maxLength ?? nothing}\r\n />\r\n\r\n ${this.type === 'password'\r\n ? html`\r\n <button\r\n type=\"button\"\r\n class=\"toggle-password\"\r\n @click=${this.togglePassword}\r\n ?disabled=${this.disabled}\r\n >\r\n ${this.isPasswordVisible\r\n ? html`\r\n <randstad-icon \r\n name=\"eye_crossed\" \r\n size=\"24px\"\r\n >\r\n </randstad-icon>\r\n `\r\n\r\n : html`\r\n <randstad-icon \r\n name=\"eye\" \r\n size=\"24px\"\r\n >\r\n </randstad-icon>`\r\n }\r\n </button>`\r\n : nothing\r\n }\r\n\r\n ${showCleanButton\r\n ? html`\r\n <button\r\n type=\"button\"\r\n class=\"clean-button\"\r\n @click=${this.handleClear}\r\n ?disabled=${this.disabled}\r\n >\r\n <randstad-icon \r\n name=\"close\" \r\n size=\"24px\"\r\n >\r\n </randstad-icon>\r\n </button>`\r\n : nothing\r\n }\r\n `}\r\n </div>\r\n\r\n ${this.icon === 'right'\r\n ? html`<span class=\"icon right\"></span>`\r\n : nothing\r\n }\r\n\r\n ${ this.renderError() }\r\n </div>\r\n\r\n\r\n ${this.linkText && this.linkRoute\r\n ? html`\r\n <div style=\"text-align: end;\">\r\n <a class=\"link-text\" @click=${this.handleLinkClick}>\r\n ${this.linkText}\r\n </a>\r\n </div>`\r\n : nothing\r\n }\r\n\r\n ${ this.renderHelper() } \r\n </div>\r\n `;\r\n }\r\n}","import { html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { BaseControl } from '../helpers/BaseControl';\r\nimport { mixStyles } from '../styles/mix';\r\nimport { errorStyles } from '../styles/error';\r\nimport { tooltipStyles } from '../styles/tooltip';\r\n\r\n@customElement('randstad-form-group')\r\nexport class FormGroup extends BaseControl {\r\n // Coloca las field en formato grilla, según el valor suminstrado\r\n @property({ type: String }) rows: string = '';\r\n\r\n static styles = css`\r\n ${ mixStyles }\r\n ${ errorStyles }\r\n ${ tooltipStyles }\r\n \r\n :host {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n }\r\n\r\n .group-container {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n width: 100%;\r\n }\r\n\r\n .fields {\r\n gap: 8px;\r\n }\r\n `;\r\n\r\n public render() {\r\n const fieldsInlineStyles: string = this.rows ? `display: grid; grid-template-columns: ${this.rows};` : 'display: flex; flex-direction: column;';\r\n\r\n return html`\r\n <div class=\"group-container\">\r\n ${ this.renderLabelContainer() }\r\n\r\n <div class=\"input-container\">\r\n <div class=\"fields\" style=\"${ fieldsInlineStyles };\">\r\n <slot></slot>\r\n </div>\r\n\r\n ${ this.renderError() }\r\n </div>\r\n\r\n ${ this.renderHelper() }\r\n </div>\r\n `;\r\n }\r\n}","import { LitElement, css } from 'lit';\r\nimport { property } from 'lit/decorators.js';\r\n\r\nexport class IconComponent extends LitElement {\r\n @property({ type: String }) name = '';\r\n @property({ type: String }) size = '24px';\r\n\r\n static styles = css`\r\n :host {\r\n display: inline-flex;\r\n width: var(--icon-size, 24px);\r\n height: var(--icon-size, 24px);\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n\r\n svg {\r\n width: var(--icon-size, 24px);\r\n height: var(--icon-size, 24px);\r\n fill: var(--icon-color, currentColor);\r\n }\r\n `;\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n this.style.setProperty('--icon-size', this.size);\r\n }\r\n\r\n updated(changedProps: Map<string, unknown>) {\r\n if (changedProps.has('size')) {\r\n this.style.setProperty('--icon-size', this.size);\r\n }\r\n }\r\n\r\n async loadIcon() {\r\n try {\r\n const response = await fetch(`/assets/icons/${this.name}.svg`);\r\n if (!response.ok) throw new Error('Icon not found');\r\n const svgText = await response.text();\r\n\r\n const parser = new DOMParser();\r\n const svgDoc = parser.parseFromString(svgText, 'image/svg+xml');\r\n const svgElement = svgDoc.querySelector('svg');\r\n\r\n if (svgElement) {\r\n svgElement.removeAttribute('fill');\r\n svgElement.setAttribute('width', this.size);\r\n svgElement.setAttribute('height', this.size);\r\n svgElement.querySelectorAll('[fill]').forEach(el => el.removeAttribute('fill'));\r\n svgElement.setAttribute('fill', 'currentColor');\r\n if ('innerHTML' in this.renderRoot) {\r\n this.renderRoot.innerHTML = '';\r\n }\r\n this.renderRoot.appendChild(svgElement);\r\n } else {\r\n throw new Error('No se encontró un elemento SVG válido');\r\n }\r\n } catch (error) {\r\n console.error(`❌ Error cargando icono ${this.name}:`, error);\r\n if ('innerHTML' in this.renderRoot) {\r\n this.renderRoot.innerHTML = '<span>⚠️</span>';\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n this.loadIcon();\r\n return null;\r\n }\r\n}\r\n\r\ncustomElements.define('randstad-icon', IconComponent);\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { bodyM } from '../styles/fontStyles';\r\n\r\n@customElement('randstad-notice')\r\nexport class RandstadNotice extends LitElement {\r\n @property({ type: String }) type: string = 'informative';\r\n @property({ type: String }) icon: string = 'info';\r\n @property({ type: String }) message: string = 'Este es un mensaje.';\r\n @property({ type: Boolean }) open: boolean = false;\r\n\r\n static styles = css`\r\n :host {\r\n display: block;\r\n font-family: 'Graphik', sans-serif;\r\n }\r\n\r\n .container {\r\n ${bodyM}\r\n display: flex;\r\n align-items: flex-start;\r\n gap: 8px;\r\n border-radius: 8px;\r\n padding: 16px;\r\n color: var(--secondary-color);\r\n }\r\n\r\n .icon {\r\n font-size: 34px;\r\n flex-shrink: 0;\r\n }\r\n\r\n .hidden {\r\n display: none;\r\n }\r\n\r\n .success {\r\n border: 1px solid var(--ui-positive);\r\n background: var(--ui-positive-5);\r\n --icon-color: var(--ui-positive);\r\n }\r\n\r\n .error {\r\n border: 1px solid var(--ui-negative);\r\n background: var(--ui-negative-5);\r\n --icon-color: var(--ui-negative);\r\n }\r\n\r\n .warning {\r\n border: 1px solid var(--ui-warning);\r\n background: var(--ui-warning-10);\r\n --icon-color: var(--ui-warning);\r\n }\r\n \r\n .informative {\r\n border: 1px solid var(--ui-informative);\r\n background: var(--ui-informative-10);\r\n --icon-color: var(--ui-informative);\r\n }\r\n `;\r\n\r\n render() {\r\n return html`\r\n <div class=\"container ${this.open ? '' : 'hidden'} ${this.type}\">\r\n <randstad-icon class=\"icon\" name=\"${this.icon}\" size=\"24px\" style=\"color: var(--icon-color);\"></randstad-icon>\r\n <span class=\"message\">${this.message}</span>\r\n </div>\r\n `;\r\n }\r\n}","import { LitElement, html, css, nothing } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport { titleS, bodyM } from '../styles/fontStyles';\r\nimport '../components/Notice';\r\nimport '../components/Button';\r\n\r\n@customElement('custom-modal')\r\nexport class CustomModal extends LitElement {\r\n @property({ type: Boolean, reflect: true }) open = false;\r\n\r\n @property({ type: String }) title = 'Título del modal';\r\n @property({ type: String }) subtitle?: string;\r\n\r\n @property({ type: Boolean }) showNotice = false;\r\n @property({ type: String }) noticeType: 'success' | 'error' | 'warning' | 'informative' = 'informative';\r\n @property({ type: String }) noticeMessage = '';\r\n @property({ type: String }) noticeIcon = 'info';\r\n\r\n @property({ type: Boolean }) showPrimaryButton = false;\r\n @property({ type: String }) primaryButtonLabel = 'Aceptar';\r\n\r\n @property({ type: Boolean }) showSecondaryButton = false;\r\n @property({ type: String }) secondaryButtonLabel = 'Cancelar';\r\n\r\n @property({ type: Boolean }) isFooterCustom = false;\r\n @property({ type: Boolean }) isPrimaryLoader = false;\r\n @property({ type: Boolean }) isPrimaryDisabled = false;\r\n\r\n @property({ type: String }) modalWidth = '500px';\r\n\r\n @state() private scrollable = false;\r\n\r\n static styles = css`\r\n :host {\r\n font-family: 'Graphik', sans-serif;\r\n display: none;\r\n }\r\n\r\n :host([open]) {\r\n display: block;\r\n z-index: 9999;\r\n }\r\n\r\n .overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n z-index: 9999;\r\n display: flex;\r\n background: rgba(15, 25, 65, 0.4);\r\n justify-content: center;\r\n align-items: center;\r\n overflow-y: auto;\r\n }\r\n\r\n .modal {\r\n width: 100%;\r\n background: var(--brand-off-white);\r\n max-width: var(--modal-width);\r\n max-height: 80vh;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n display: flex;\r\n flex-direction: column;\r\n border-radius: 8px;\r\n }\r\n\r\n .modal-body {\r\n overflow-y: auto;\r\n flex: 1;\r\n }\r\n \r\n .modal-footer {\r\n justify-content: flex-end;\r\n }\r\n\r\n .modal-footer.one-button randstad-button {\r\n width: 100%;\r\n }\r\n\r\n .modal-footer.two-buttons randstad-button {\r\n width: 50%;\r\n }\r\n\r\n /* Estilos para dispositivos pequeños (<= 940px) */\r\n @media (max-width: 940px) {\r\n .modal {\r\n /* Se estira para ocupar casi toda la pantalla */\r\n width: 96vw; \r\n height: 96vh;\r\n max-width: none;\r\n max-height: none;\r\n margin: 0;\r\n }\r\n\r\n .modal-header,\r\n .modal-body,\r\n .modal-footer {\r\n padding: 0; \r\n }\r\n\r\n .modal-header {\r\n margin-bottom: 16px;\r\n }\r\n \r\n .modal-footer {\r\n margin-top: 16px;\r\n }\r\n }\r\n\r\n /* Estilos comunes a ambos tamaños de pantalla */\r\n .modal-header {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 24px;\r\n border-bottom: 1px solid var(--secondary-color-20);\r\n }\r\n\r\n .modal-header-content {\r\n display: flex;\r\n gap: 32px;\r\n width: 100%;\r\n justify-content: space-between;\r\n align-items: center;\r\n }\r\n\r\n .titles-container {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n flex-grow: 1;\r\n }\r\n\r\n .modal-title {\r\n ${titleS}\r\n margin: 0;\r\n color: var(--secondary-color);\r\n }\r\n\r\n .modal-subtitle {\r\n ${bodyM}\r\n margin: 0;\r\n color: var(--secondary-color-60);\r\n }\r\n\r\n .modal-header randstad-notice {\r\n width: 100%;\r\n }\r\n\r\n .modal-close {\r\n background: none;\r\n border: none;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 0;\r\n }\r\n\r\n .modal-body {\r\n display: flex;\r\n flex-direction: column;\r\n padding: 24px;\r\n gap: 16px;\r\n }\r\n\r\n .modal-footer {\r\n display: flex;\r\n padding: 24px;\r\n gap: 16px;\r\n border-top: 1px solid var(--secondary-color-20);\r\n }\r\n `;\r\n\r\n private closeModal() {\r\n this.dispatchEvent(new CustomEvent('modal-close'));\r\n }\r\n\r\n public connectedCallback() {\r\n super.connectedCallback();\r\n this.setScrollableMode();\r\n window.addEventListener('resize', this.setScrollableMode);\r\n }\r\n\r\n public disconnectedCallback() {\r\n super.disconnectedCallback();\r\n window.removeEventListener('resize', this.setScrollableMode);\r\n }\r\n\r\n private setScrollableMode = () => {\r\n this.scrollable = window.innerWidth > 940;\r\n };\r\n\r\n private getFooterClass(): string {\r\n if ( this.isFooterCustom && !this.showPrimaryButton && !this.showSecondaryButton )\r\n return 'footer-custom';\r\n \r\n if ( this.showPrimaryButton && this.showSecondaryButton )\r\n return 'two-buttons';\r\n\r\n return 'one-button';\r\n }\r\n\r\n public render() {\r\n return html`\r\n <div class=\"overlay\" role=\"dialog\" aria-modal=\"true\">\r\n <div class=\"modal\" style=\"--modal-width: ${this.modalWidth};\">\r\n <div class=\"modal-header\">\r\n <div class=\"modal-header-content\">\r\n <div class=\"titles-container\">\r\n <div class=\"modal-title\">${this.title}</div>\r\n \r\n ${this.subtitle\r\n ? html`<div class=\"modal-subtitle\">${this.subtitle}</div>`\r\n : nothing\r\n }\r\n </div>\r\n\r\n <button class=\"modal-close\" @click=${this.closeModal} aria-label=\"Cerrar modal\">\r\n <randstad-icon name=\"close\" size=\"24px\" style=\"--icon-color: var(--primary-color);\"></randstad-icon>\r\n </button>\r\n </div>\r\n\r\n ${this.showNotice\r\n ? html`\r\n <randstad-notice\r\n .open=${true}\r\n .type=${this.noticeType}\r\n .icon=${this.noticeIcon}\r\n .message=${this.noticeMessage}\r\n >\r\n </randstad-notice>\r\n `\r\n : nothing\r\n }\r\n </div>\r\n\r\n <div class=\"modal-body ${this.scrollable ? 'scrollable' : ''}\">\r\n <slot name=\"content\"></slot>\r\n </div>\r\n\r\n <div class=\"modal-footer ${ this.getFooterClass() }\">\r\n ${ this.isFooterCustom && !this.showPrimaryButton && !this.showSecondaryButton\r\n ? html` <slot name=\"footer-custom\"></slot> `\r\n : nothing\r\n }\r\n\r\n ${ this.showSecondaryButton\r\n ? html`\r\n <randstad-button\r\n variant=\"button-secondary\"\r\n size=\"md\"\r\n @click=${() => this.dispatchEvent(new CustomEvent('secondary-click'))}\r\n label=${this.secondaryButtonLabel}\r\n >\r\n </randstad-button>\r\n `\r\n : nothing\r\n }\r\n ${ this.showPrimaryButton\r\n ? html`\r\n <randstad-button\r\n variant=\"button-primary\"\r\n size=\"md\"\r\n @click=${() => this.dispatchEvent(new CustomEvent('primary-click'))}\r\n label=${this.primaryButtonLabel}\r\n .loader=${this.isPrimaryLoader}\r\n .disabled=${this.isPrimaryDisabled}\r\n >\r\n </randstad-button>\r\n `\r\n : nothing\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}","import { LitElement, html, css, nothing } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { titleXS, bodyM, titleXXS } from '../styles/fontStyles';\r\nimport '../components/Button';\r\nimport '../components/Icon';\r\n\r\ninterface PopupAction {\r\n icon: string;\r\n label: string;\r\n value: string;\r\n}\r\n\r\n@customElement('custom-popup')\r\nexport class CustomPopup extends LitElement {\r\n @property({ type: Boolean, reflect: true }) open = false;\r\n @property({ type: String }) type: 'default' | 'stacked' | 'other' = 'default';\r\n @property({ type: String }) icon = 'warning';\r\n \r\n @property({ type: String }) title = 'Título del Popup';\r\n @property({ type: String }) description = 'Descripción del popup';\r\n @property({ type: String }) width = '400px';\r\n\r\n @property({ type: String }) buttonText = 'Aceptar';\r\n @property({ type: String }) confirmText = 'Sí';\r\n @property({ type: String }) cancelText = 'No';\r\n\r\n @property({ type: Array }) stackedActions: PopupAction[] = [];\r\n\r\n\r\n static styles = css`\r\n :host {\r\n display: none;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: rgba(0, 0, 0, 0.5);\r\n justify-content: center;\r\n align-items: center;\r\n font-family: \"Graphik\", sans-serif;\r\n }\r\n\r\n :host([open]) {\r\n display: flex;\r\n }\r\n\r\n @media (max-width:500px){\r\n .popup {\r\n width: 100%;\r\n margin: 0px 25px;\r\n }\r\n }\r\n @media (min-width:501px){\r\n .popup {\r\n width: var(--popup-width, 358px);\r\n }\r\n }\r\n\r\n .popup {\r\n background: var(--white);\r\n padding: 24px;\r\n border-radius: 16px;\r\n text-align: center;\r\n animation: fadeIn 0.2s ease-in-out;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 24px;\r\n align-items: center;\r\n }\r\n\r\n @keyframes fadeIn {\r\n from { opacity: 0; transform: scale(0.9); }\r\n to { opacity: 1; transform: scale(1); }\r\n }\r\n\r\n .popup-content {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 24px;\r\n width: 100%;\r\n }\r\n\r\n .titles-container {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n align-items: center; \r\n }\r\n\r\n .popup-title {\r\n ${titleXS}\r\n margin: 0;\r\n color: var(--secondary-color-80);\r\n }\r\n\r\n .popup-description {\r\n ${bodyM}\r\n margin: 0;\r\n color: var(--secondary-color-60);\r\n }\r\n\r\n .buttons-container {\r\n margin-top: 12px;\r\n display: flex;\r\n gap: 10px;\r\n }\r\n\r\n .buttons-container ::slotted(randstad-button),\r\n .buttons-container randstad-button {\r\n flex: 1 1 50%;\r\n }\r\n\r\n :host([type=\"stacked\"]) .buttons-container {\r\n flex-direction: column;\r\n gap: 12px;\r\n }\r\n\r\n .popup-actions {\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n }\r\n\r\n .action-item {\r\n ${titleXXS};\r\n display: flex;\r\n align-items: center;\r\n gap: 16px;\r\n cursor: pointer;\r\n color: var(--secondary-color);\r\n padding: 16px;\r\n border-radius: 8px;\r\n transition: background 0.2s;\r\n }\r\n\r\n .action-item:hover {\r\n background: var(--secondary-color-10, #f0f4ff);\r\n }\r\n\r\n .icon-circle {\r\n width: 32px;\r\n height: 32px;\r\n background: var(--primary-color-20, #D3E3F7);\r\n border-radius: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n\r\n `;\r\n\r\n firstUpdated() {\r\n if (this.open) {\r\n const button = this.renderRoot.querySelector('randstad-button');\r\n if (button) (button as HTMLElement).focus();\r\n }\r\n this.addEventListener('click', this._onBackgroundClick);\r\n }\r\n\r\n private _onBackgroundClick = (event: MouseEvent) => {\r\n const path = event.composedPath();\r\n const popupContainer = this.renderRoot.querySelector('.popup');\r\n\r\n if (popupContainer && !path.includes(popupContainer)) {\r\n this.dispatchEvent(new CustomEvent('popup-close', { detail: null }));\r\n this.open = false;\r\n }\r\n };\r\n\r\n disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.removeEventListener('click', this._onBackgroundClick);\r\n }\r\n\r\n closePopup(response: boolean | string) {\r\n this.dispatchEvent(new CustomEvent('popup-close', { detail: response }));\r\n this.open = false;\r\n }\r\n\r\n render() {\r\n return html`\r\n <div\r\n class=\"popup\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n ${this.type !== 'default' ? html`aria-labelledby=\"popup-title\"` : nothing}\r\n aria-describedby=\"popup-description\"\r\n >\r\n ${this.type !== 'stacked' && this.icon\r\n ? html`<img src=\"/assets/icons/${this.icon}\" alt=\"\" width=\"56\" height=\"56\" />`\r\n : nothing}\r\n\r\n <div class=\"popup-content\">\r\n ${this.type === 'default'\r\n ? html`\r\n ${ this.title ? html`<h2 id=\"popup-title\" class=\"popup-title\">${this.title}</h2>` : nothing }\r\n \r\n <div class=\"titles-container\">\r\n <p id=\"popup-description\" class=\"popup-description\">${this.description}</p>\r\n </div>\r\n\r\n <div class=\"buttons-container\">\r\n <randstad-button\r\n variant=\"button-primary\"\r\n size=\"md\"\r\n @click=${() => this.closePopup(true)}\r\n label=${this.buttonText}\r\n ></randstad-button>\r\n </div>\r\n `\r\n : this.type === 'stacked'\r\n ? html`\r\n <div class=\"popup-actions\">\r\n ${this.stackedActions.map(\r\n action => html`\r\n <div\r\n class=\"action-item\"\r\n @click=${() => this.closePopup(action.value)}\r\n >\r\n <div class=\"icon-circle\">\r\n <randstad-icon\r\n name=${action.icon}\r\n size=\"24px\"\r\n style=\"--icon-color: var(--primary-color);\"\r\n ></randstad-icon>\r\n </div>\r\n <span>${action.label}</span>\r\n </div>\r\n `\r\n )}\r\n </div>\r\n `\r\n : html`\r\n <div class=\"titles-container\">\r\n <h2 id=\"popup-title\" class=\"popup-title\">${this.title}</h2>\r\n <p id=\"popup-description\" class=\"popup-description\">${this.description}</p>\r\n </div>\r\n\r\n <div class=\"buttons-container\">\r\n <randstad-button\r\n variant=\"button-secondary\"\r\n size=\"md\"\r\n @click=${() => this.closePopup(false)}\r\n label=${this.cancelText}\r\n >\r\n </randstad-button>\r\n\r\n <randstad-button\r\n variant=\"button-primary\"\r\n size=\"md\"\r\n @click=${() => this.closePopup(true)}\r\n label=${this.confirmText}\r\n >\r\n </randstad-button>\r\n </div>\r\n `\r\n }\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n}","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { bodyXS } from '../styles/fontStyles';\r\n\r\n@customElement('progress-circle')\r\nexport class ProgressCircle extends LitElement {\r\n @property({ type: Number }) value = 0;\r\n @property({ type: Number }) max = 5;\r\n\r\n static styles = css`\r\n :host {\r\n display: inline-block;\r\n width: 64px;\r\n height: 64px;\r\n }\r\n\r\n svg {\r\n width: 64px;\r\n height: 64px;\r\n }\r\n\r\n .circle-text {\r\n ${bodyXS};\r\n text-align: center;\r\n vertical-align: middle;\r\n fill: var(--randstad-dark-blue-40);\r\n text-anchor: middle;\r\n dominant-baseline: middle;\r\n }\r\n\r\n circle.bg {\r\n stroke: var(--primary-light-blue-20);\r\n }\r\n\r\n circle.fg {\r\n stroke: var(--primary-light-blue);\r\n stroke-linecap: round;\r\n }\r\n `;\r\n\r\n render() {\r\n const strokeWidth = 6;\r\n const radius = 28; // 64/2 - strokeWidth\r\n const circumference = 2 * Math.PI * radius;\r\n\r\n const safeMax = Math.max(this.max, 1);\r\n const progress = Math.min(this.value / safeMax, 1);\r\n const offset = circumference * (1 - progress);\r\n\r\n return html`\r\n <svg\r\n viewBox=\"0 0 64 64\"\r\n role=\"img\"\r\n aria-label=\"Progreso: ${this.value} de ${this.max}\"\r\n >\r\n <!-- Fondo -->\r\n <circle\r\n class=\"bg\"\r\n cx=\"32\"\r\n cy=\"32\"\r\n r=\"${radius}\"\r\n stroke-width=\"${strokeWidth}\"\r\n fill=\"none\"\r\n />\r\n <!-- Progreso -->\r\n <circle\r\n class=\"fg\"\r\n cx=\"32\"\r\n cy=\"32\"\r\n r=\"${radius}\"\r\n stroke-width=\"${strokeWidth}\"\r\n fill=\"none\"\r\n stroke-dasharray=\"${circumference}\"\r\n stroke-dashoffset=\"${offset}\"\r\n transform=\"rotate(-90 32 32)\"\r\n />\r\n <!-- Texto -->\r\n <text x=\"32\" y=\"34\" class=\"circle-text\">\r\n ${this.value} de ${this.max}\r\n </text>\r\n </svg>\r\n `;\r\n }\r\n}\r\n","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { isServer } from 'lit';\n/**\n * A key to retrieve an `Attachable` element's `AttachableController` from a\n * global `MutationObserver`.\n */\nconst ATTACHABLE_CONTROLLER = Symbol('attachableController');\nlet FOR_ATTRIBUTE_OBSERVER;\nif (!isServer) {\n /**\n * A global `MutationObserver` that reacts to `for` attribute changes on\n * `Attachable` elements. If the `for` attribute changes, the controller will\n * re-attach to the new referenced element.\n */\n FOR_ATTRIBUTE_OBSERVER = new MutationObserver((records) => {\n for (const record of records) {\n // When a control's `for` attribute changes, inform its\n // `AttachableController` to update to a new control.\n record.target[ATTACHABLE_CONTROLLER]?.hostConnected();\n }\n });\n}\n/**\n * A controller that provides an implementation for `Attachable` elements.\n *\n * @example\n * ```ts\n * class MyElement extends LitElement implements Attachable {\n * get control() { return this.attachableController.control; }\n *\n * private readonly attachableController = new AttachableController(\n * this,\n * (previousControl, newControl) => {\n * previousControl?.removeEventListener('click', this.handleClick);\n * newControl?.addEventListener('click', this.handleClick);\n * }\n * );\n *\n * // Implement remaining `Attachable` properties/methods that call the\n * // controller's properties/methods.\n * }\n * ```\n */\nexport class AttachableController {\n get htmlFor() {\n return this.host.getAttribute('for');\n }\n set htmlFor(htmlFor) {\n if (htmlFor === null) {\n this.host.removeAttribute('for');\n }\n else {\n this.host.setAttribute('for', htmlFor);\n }\n }\n get control() {\n if (this.host.hasAttribute('for')) {\n if (!this.htmlFor || !this.host.isConnected) {\n return null;\n }\n return this.host.getRootNode().querySelector(`#${this.htmlFor}`);\n }\n return this.currentControl || this.host.parentElement;\n }\n set control(control) {\n if (control) {\n this.attach(control);\n }\n else {\n this.detach();\n }\n }\n /**\n * Creates a new controller for an `Attachable` element.\n *\n * @param host The `Attachable` element.\n * @param onControlChange A callback with two parameters for the previous and\n * next control. An `Attachable` element may perform setup or teardown\n * logic whenever the control changes.\n */\n constructor(host, onControlChange) {\n this.host = host;\n this.onControlChange = onControlChange;\n this.currentControl = null;\n host.addController(this);\n host[ATTACHABLE_CONTROLLER] = this;\n FOR_ATTRIBUTE_OBSERVER?.observe(host, { attributeFilter: ['for'] });\n }\n attach(control) {\n if (control === this.currentControl) {\n return;\n }\n this.setCurrentControl(control);\n // When imperatively attaching, remove the `for` attribute so\n // that the attached control is used instead of a referenced one.\n this.host.removeAttribute('for');\n }\n detach() {\n this.setCurrentControl(null);\n // When imperatively detaching, add an empty `for=\"\"` attribute. This will\n // ensure the control is `null` rather than the `parentElement`.\n this.host.setAttribute('for', '');\n }\n /** @private */\n hostConnected() {\n this.setCurrentControl(this.control);\n }\n /** @private */\n hostDisconnected() {\n this.setCurrentControl(null);\n }\n setCurrentControl(control) {\n this.onControlChange(this.currentControl, control);\n this.currentControl = control;\n }\n}\n//# sourceMappingURL=attachable-controller.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { isServer, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { AttachableController, } from '../../internal/controller/attachable-controller.js';\n/**\n * Events that the focus ring listens to.\n */\nconst EVENTS = ['focusin', 'focusout', 'pointerdown'];\n/**\n * A focus ring component.\n *\n * @fires visibility-changed {Event} Fired whenever `visible` changes.\n */\nexport class FocusRing extends LitElement {\n constructor() {\n super(...arguments);\n /**\n * Makes the focus ring visible.\n */\n this.visible = false;\n /**\n * Makes the focus ring animate inwards instead of outwards.\n */\n this.inward = false;\n this.attachableController = new AttachableController(this, this.onControlChange.bind(this));\n }\n get htmlFor() {\n return this.attachableController.htmlFor;\n }\n set htmlFor(htmlFor) {\n this.attachableController.htmlFor = htmlFor;\n }\n get control() {\n return this.attachableController.control;\n }\n set control(control) {\n this.attachableController.control = control;\n }\n attach(control) {\n this.attachableController.attach(control);\n }\n detach() {\n this.attachableController.detach();\n }\n connectedCallback() {\n super.connectedCallback();\n // Needed for VoiceOver, which will create a \"group\" if the element is a\n // sibling to other content.\n this.setAttribute('aria-hidden', 'true');\n }\n /** @private */\n handleEvent(event) {\n if (event[HANDLED_BY_FOCUS_RING]) {\n // This ensures the focus ring does not activate when multiple focus rings\n // are used within a single component.\n return;\n }\n switch (event.type) {\n default:\n return;\n case 'focusin':\n this.visible = this.control?.matches(':focus-visible') ?? false;\n break;\n case 'focusout':\n case 'pointerdown':\n this.visible = false;\n break;\n }\n event[HANDLED_BY_FOCUS_RING] = true;\n }\n onControlChange(prev, next) {\n if (isServer)\n return;\n for (const event of EVENTS) {\n prev?.removeEventListener(event, this);\n next?.addEventListener(event, this);\n }\n }\n update(changed) {\n if (changed.has('visible')) {\n // This logic can be removed once the `:has` selector has been introduced\n // to Firefox. This is necessary to allow correct submenu styles.\n this.dispatchEvent(new Event('visibility-changed'));\n }\n super.update(changed);\n }\n}\n__decorate([\n property({ type: Boolean, reflect: true })\n], FocusRing.prototype, \"visible\", void 0);\n__decorate([\n property({ type: Boolean, reflect: true })\n], FocusRing.prototype, \"inward\", void 0);\nconst HANDLED_BY_FOCUS_RING = Symbol('handledByFocusRing');\n//# sourceMappingURL=focus-ring.js.map","/**\n * @license\n * Copyright 2024 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n// Generated stylesheet for ./focus/internal/focus-ring-styles.css.\nimport { css } from 'lit';\nexport const styles = css `:host{animation-delay:0s,calc(var(--md-focus-ring-duration, 600ms)*.25);animation-duration:calc(var(--md-focus-ring-duration, 600ms)*.25),calc(var(--md-focus-ring-duration, 600ms)*.75);animation-timing-function:cubic-bezier(0.2, 0, 0, 1);box-sizing:border-box;color:var(--md-focus-ring-color, var(--md-sys-color-secondary, #625b71));display:none;pointer-events:none;position:absolute}:host([visible]){display:flex}:host(:not([inward])){animation-name:outward-grow,outward-shrink;border-end-end-radius:calc(var(--md-focus-ring-shape-end-end, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) + var(--md-focus-ring-outward-offset, 2px));border-end-start-radius:calc(var(--md-focus-ring-shape-end-start, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) + var(--md-focus-ring-outward-offset, 2px));border-start-end-radius:calc(var(--md-focus-ring-shape-start-end, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) + var(--md-focus-ring-outward-offset, 2px));border-start-start-radius:calc(var(--md-focus-ring-shape-start-start, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) + var(--md-focus-ring-outward-offset, 2px));inset:calc(-1*var(--md-focus-ring-outward-offset, 2px));outline:var(--md-focus-ring-width, 3px) solid currentColor}:host([inward]){animation-name:inward-grow,inward-shrink;border-end-end-radius:calc(var(--md-focus-ring-shape-end-end, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) - var(--md-focus-ring-inward-offset, 0px));border-end-start-radius:calc(var(--md-focus-ring-shape-end-start, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) - var(--md-focus-ring-inward-offset, 0px));border-start-end-radius:calc(var(--md-focus-ring-shape-start-end, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) - var(--md-focus-ring-inward-offset, 0px));border-start-start-radius:calc(var(--md-focus-ring-shape-start-start, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) - var(--md-focus-ring-inward-offset, 0px));border:var(--md-focus-ring-width, 3px) solid currentColor;inset:var(--md-focus-ring-inward-offset, 0px)}@keyframes outward-grow{from{outline-width:0}to{outline-width:var(--md-focus-ring-active-width, 8px)}}@keyframes outward-shrink{from{outline-width:var(--md-focus-ring-active-width, 8px)}}@keyframes inward-grow{from{border-width:0}to{border-width:var(--md-focus-ring-active-width, 8px)}}@keyframes inward-shrink{from{border-width:var(--md-focus-ring-active-width, 8px)}}@media(prefers-reduced-motion){:host{animation:none}}\n`;\n//# sourceMappingURL=focus-ring-styles.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { customElement } from 'lit/decorators.js';\nimport { FocusRing } from './internal/focus-ring.js';\nimport { styles } from './internal/focus-ring-styles.js';\n/**\n * TODO(b/267336424): add docs\n *\n * @final\n * @suppress {visibility}\n */\nlet MdFocusRing = class MdFocusRing extends FocusRing {\n};\nMdFocusRing.styles = [styles];\nMdFocusRing = __decorate([\n customElement('md-focus-ring')\n], MdFocusRing);\nexport { MdFocusRing };\n//# sourceMappingURL=md-focus-ring.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * Easing functions to use for web animations.\n *\n * **NOTE:** `EASING.EMPHASIZED` is approximated with unknown accuracy.\n *\n * TODO(b/241113345): replace with tokens\n */\nexport const EASING = {\n STANDARD: 'cubic-bezier(0.2, 0, 0, 1)',\n STANDARD_ACCELERATE: 'cubic-bezier(.3,0,1,1)',\n STANDARD_DECELERATE: 'cubic-bezier(0,0,0,1)',\n EMPHASIZED: 'cubic-bezier(.3,0,0,1)',\n EMPHASIZED_ACCELERATE: 'cubic-bezier(.3,0,.8,.15)',\n EMPHASIZED_DECELERATE: 'cubic-bezier(.05,.7,.1,1)',\n};\n/**\n * Creates an `AnimationSignal` that can be used to cancel a previous task.\n *\n * @example\n * class MyClass {\n * private labelAnimationSignal = createAnimationSignal();\n *\n * private async animateLabel() {\n * // Start of the task. Previous tasks will be canceled.\n * const signal = this.labelAnimationSignal.start();\n *\n * // Do async work...\n * if (signal.aborted) {\n * // Use AbortSignal to check if a request was made to abort after some\n * // asynchronous work.\n * return;\n * }\n *\n * const animation = this.animate(...);\n * // Add event listeners to be notified when the task should be canceled.\n * signal.addEventListener('abort', () => {\n * animation.cancel();\n * });\n *\n * animation.addEventListener('finish', () => {\n * // Tell the signal that the current task is finished.\n * this.labelAnimationSignal.finish();\n * });\n * }\n * }\n *\n * @return An `AnimationSignal`.\n */\nexport function createAnimationSignal() {\n // The current animation's AbortController\n let animationAbortController = null;\n return {\n start() {\n // Tell the previous animation to cancel.\n animationAbortController?.abort();\n // Set up a new AbortController for the current animation.\n animationAbortController = new AbortController();\n // Provide the AbortSignal so that the caller can check aborted status\n // and add listeners.\n return animationAbortController.signal;\n },\n finish() {\n animationAbortController = null;\n },\n };\n}\n/**\n * Returns a function which can be used to throttle function calls\n * mapped to a key via a given function that should produce a promise that\n * determines the throttle amount (defaults to requestAnimationFrame).\n */\nexport function createThrottle() {\n const stack = new Set();\n return async (key = '', cb, timeout = async () => {\n await new Promise(requestAnimationFrame);\n }) => {\n if (!stack.has(key)) {\n stack.add(key);\n await timeout();\n if (stack.has(key)) {\n stack.delete(key);\n cb();\n }\n }\n };\n}\n/**\n * Parses an number in milliseconds from a css time value\n */\nexport function msFromTimeCSSValue(value) {\n const match = value.trim().match(/([\\d.]+)(\\s*s$)?/);\n const time = match?.[1];\n const seconds = match?.[2];\n return Number(time ?? 0) * (seconds ? 1000 : 1);\n}\n//# sourceMappingURL=animation.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { html, isServer, LitElement } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { AttachableController, } from '../../internal/controller/attachable-controller.js';\nimport { EASING } from '../../internal/motion/animation.js';\nconst PRESS_GROW_MS = 450;\nconst MINIMUM_PRESS_MS = 225;\nconst INITIAL_ORIGIN_SCALE = 0.2;\nconst PADDING = 10;\nconst SOFT_EDGE_MINIMUM_SIZE = 75;\nconst SOFT_EDGE_CONTAINER_RATIO = 0.35;\nconst PRESS_PSEUDO = '::after';\nconst ANIMATION_FILL = 'forwards';\n/**\n * Interaction states for the ripple.\n *\n * On Touch:\n * - `INACTIVE -> TOUCH_DELAY -> WAITING_FOR_CLICK -> INACTIVE`\n * - `INACTIVE -> TOUCH_DELAY -> HOLDING -> WAITING_FOR_CLICK -> INACTIVE`\n *\n * On Mouse or Pen:\n * - `INACTIVE -> WAITING_FOR_CLICK -> INACTIVE`\n */\nvar State;\n(function (State) {\n /**\n * Initial state of the control, no touch in progress.\n *\n * Transitions:\n * - on touch down: transition to `TOUCH_DELAY`.\n * - on mouse down: transition to `WAITING_FOR_CLICK`.\n */\n State[State[\"INACTIVE\"] = 0] = \"INACTIVE\";\n /**\n * Touch down has been received, waiting to determine if it's a swipe or\n * scroll.\n *\n * Transitions:\n * - on touch up: begin press; transition to `WAITING_FOR_CLICK`.\n * - on cancel: transition to `INACTIVE`.\n * - after `TOUCH_DELAY_MS`: begin press; transition to `HOLDING`.\n */\n State[State[\"TOUCH_DELAY\"] = 1] = \"TOUCH_DELAY\";\n /**\n * A touch has been deemed to be a press\n *\n * Transitions:\n * - on up: transition to `WAITING_FOR_CLICK`.\n */\n State[State[\"HOLDING\"] = 2] = \"HOLDING\";\n /**\n * The user touch has finished, transition into rest state.\n *\n * Transitions:\n * - on click end press; transition to `INACTIVE`.\n */\n State[State[\"WAITING_FOR_CLICK\"] = 3] = \"WAITING_FOR_CLICK\";\n})(State || (State = {}));\n/**\n * Events that the ripple listens to.\n */\nconst EVENTS = [\n 'click',\n 'contextmenu',\n 'pointercancel',\n 'pointerdown',\n 'pointerenter',\n 'pointerleave',\n 'pointerup',\n];\n/**\n * Delay reacting to touch so that we do not show the ripple for a swipe or\n * scroll interaction.\n */\nconst TOUCH_DELAY_MS = 150;\n/**\n * Used to detect if HCM is active. Events do not process during HCM when the\n * ripple is not displayed.\n */\nconst FORCED_COLORS = isServer\n ? null\n : window.matchMedia('(forced-colors: active)');\n/**\n * A ripple component.\n */\nexport class Ripple extends LitElement {\n constructor() {\n super(...arguments);\n /**\n * Disables the ripple.\n */\n this.disabled = false;\n this.hovered = false;\n this.pressed = false;\n this.rippleSize = '';\n this.rippleScale = '';\n this.initialSize = 0;\n this.state = State.INACTIVE;\n this.checkBoundsAfterContextMenu = false;\n this.attachableController = new AttachableController(this, this.onControlChange.bind(this));\n }\n get htmlFor() {\n return this.attachableController.htmlFor;\n }\n set htmlFor(htmlFor) {\n this.attachableController.htmlFor = htmlFor;\n }\n get control() {\n return this.attachableController.control;\n }\n set control(control) {\n this.attachableController.control = control;\n }\n attach(control) {\n this.attachableController.attach(control);\n }\n detach() {\n this.attachableController.detach();\n }\n connectedCallback() {\n super.connectedCallback();\n // Needed for VoiceOver, which will create a \"group\" if the element is a\n // sibling to other content.\n this.setAttribute('aria-hidden', 'true');\n }\n render() {\n const classes = {\n 'hovered': this.hovered,\n 'pressed': this.pressed,\n };\n return html `<div class=\"surface ${classMap(classes)}\"></div>`;\n }\n update(changedProps) {\n if (changedProps.has('disabled') && this.disabled) {\n this.hovered = false;\n this.pressed = false;\n }\n super.update(changedProps);\n }\n /**\n * TODO(b/269799771): make private\n * @private only public for slider\n */\n handlePointerenter(event) {\n if (!this.shouldReactToEvent(event)) {\n return;\n }\n this.hovered = true;\n }\n /**\n * TODO(b/269799771): make private\n * @private only public for slider\n */\n handlePointerleave(event) {\n if (!this.shouldReactToEvent(event)) {\n return;\n }\n this.hovered = false;\n // release a held mouse or pen press that moves outside the element\n if (this.state !== State.INACTIVE) {\n this.endPressAnimation();\n }\n }\n handlePointerup(event) {\n if (!this.shouldReactToEvent(event)) {\n return;\n }\n if (this.state === State.HOLDING) {\n this.state = State.WAITING_FOR_CLICK;\n return;\n }\n if (this.state === State.TOUCH_DELAY) {\n this.state = State.WAITING_FOR_CLICK;\n this.startPressAnimation(this.rippleStartEvent);\n return;\n }\n }\n async handlePointerdown(event) {\n if (!this.shouldReactToEvent(event)) {\n return;\n }\n this.rippleStartEvent = event;\n if (!this.isTouch(event)) {\n this.state = State.WAITING_FOR_CLICK;\n this.startPressAnimation(event);\n return;\n }\n // after a longpress contextmenu event, an extra `pointerdown` can be\n // dispatched to the pressed element. Check that the down is within\n // bounds of the element in this case.\n if (this.checkBoundsAfterContextMenu && !this.inBounds(event)) {\n return;\n }\n this.checkBoundsAfterContextMenu = false;\n // Wait for a hold after touch delay\n this.state = State.TOUCH_DELAY;\n await new Promise((resolve) => {\n setTimeout(resolve, TOUCH_DELAY_MS);\n });\n if (this.state !== State.TOUCH_DELAY) {\n return;\n }\n this.state = State.HOLDING;\n this.startPressAnimation(event);\n }\n handleClick() {\n // Click is a MouseEvent in Firefox and Safari, so we cannot use\n // `shouldReactToEvent`\n if (this.disabled) {\n return;\n }\n if (this.state === State.WAITING_FOR_CLICK) {\n this.endPressAnimation();\n return;\n }\n if (this.state === State.INACTIVE) {\n // keyboard synthesized click event\n this.startPressAnimation();\n this.endPressAnimation();\n }\n }\n handlePointercancel(event) {\n if (!this.shouldReactToEvent(event)) {\n return;\n }\n this.endPressAnimation();\n }\n handleContextmenu() {\n if (this.disabled) {\n return;\n }\n this.checkBoundsAfterContextMenu = true;\n this.endPressAnimation();\n }\n determineRippleSize() {\n const { height, width } = this.getBoundingClientRect();\n const maxDim = Math.max(height, width);\n const softEdgeSize = Math.max(SOFT_EDGE_CONTAINER_RATIO * maxDim, SOFT_EDGE_MINIMUM_SIZE);\n const initialSize = Math.floor(maxDim * INITIAL_ORIGIN_SCALE);\n const hypotenuse = Math.sqrt(width ** 2 + height ** 2);\n const maxRadius = hypotenuse + PADDING;\n this.initialSize = initialSize;\n this.rippleScale = `${(maxRadius + softEdgeSize) / initialSize}`;\n this.rippleSize = `${initialSize}px`;\n }\n getNormalizedPointerEventCoords(pointerEvent) {\n const { scrollX, scrollY } = window;\n const { left, top } = this.getBoundingClientRect();\n const documentX = scrollX + left;\n const documentY = scrollY + top;\n const { pageX, pageY } = pointerEvent;\n return { x: pageX - documentX, y: pageY - documentY };\n }\n getTranslationCoordinates(positionEvent) {\n const { height, width } = this.getBoundingClientRect();\n // end in the center\n const endPoint = {\n x: (width - this.initialSize) / 2,\n y: (height - this.initialSize) / 2,\n };\n let startPoint;\n if (positionEvent instanceof PointerEvent) {\n startPoint = this.getNormalizedPointerEventCoords(positionEvent);\n }\n else {\n startPoint = {\n x: width / 2,\n y: height / 2,\n };\n }\n // center around start point\n startPoint = {\n x: startPoint.x - this.initialSize / 2,\n y: startPoint.y - this.initialSize / 2,\n };\n return { startPoint, endPoint };\n }\n startPressAnimation(positionEvent) {\n if (!this.mdRoot) {\n return;\n }\n this.pressed = true;\n this.growAnimation?.cancel();\n this.determineRippleSize();\n const { startPoint, endPoint } = this.getTranslationCoordinates(positionEvent);\n const translateStart = `${startPoint.x}px, ${startPoint.y}px`;\n const translateEnd = `${endPoint.x}px, ${endPoint.y}px`;\n this.growAnimation = this.mdRoot.animate({\n top: [0, 0],\n left: [0, 0],\n height: [this.rippleSize, this.rippleSize],\n width: [this.rippleSize, this.rippleSize],\n transform: [\n `translate(${translateStart}) scale(1)`,\n `translate(${translateEnd}) scale(${this.rippleScale})`,\n ],\n }, {\n pseudoElement: PRESS_PSEUDO,\n duration: PRESS_GROW_MS,\n easing: EASING.STANDARD,\n fill: ANIMATION_FILL,\n });\n }\n async endPressAnimation() {\n this.rippleStartEvent = undefined;\n this.state = State.INACTIVE;\n const animation = this.growAnimation;\n let pressAnimationPlayState = Infinity;\n if (typeof animation?.currentTime === 'number') {\n pressAnimationPlayState = animation.currentTime;\n }\n else if (animation?.currentTime) {\n pressAnimationPlayState = animation.currentTime.to('ms').value;\n }\n if (pressAnimationPlayState >= MINIMUM_PRESS_MS) {\n this.pressed = false;\n return;\n }\n await new Promise((resolve) => {\n setTimeout(resolve, MINIMUM_PRESS_MS - pressAnimationPlayState);\n });\n if (this.growAnimation !== animation) {\n // A new press animation was started. The old animation was canceled and\n // should not finish the pressed state.\n return;\n }\n this.pressed = false;\n }\n /**\n * Returns `true` if\n * - the ripple element is enabled\n * - the pointer is primary for the input type\n * - the pointer is the pointer that started the interaction, or will start\n * the interaction\n * - the pointer is a touch, or the pointer state has the primary button\n * held, or the pointer is hovering\n */\n shouldReactToEvent(event) {\n if (this.disabled || !event.isPrimary) {\n return false;\n }\n if (this.rippleStartEvent &&\n this.rippleStartEvent.pointerId !== event.pointerId) {\n return false;\n }\n if (event.type === 'pointerenter' || event.type === 'pointerleave') {\n return !this.isTouch(event);\n }\n const isPrimaryButton = event.buttons === 1;\n return this.isTouch(event) || isPrimaryButton;\n }\n /**\n * Check if the event is within the bounds of the element.\n *\n * This is only needed for the \"stuck\" contextmenu longpress on Chrome.\n */\n inBounds({ x, y }) {\n const { top, left, bottom, right } = this.getBoundingClientRect();\n return x >= left && x <= right && y >= top && y <= bottom;\n }\n isTouch({ pointerType }) {\n return pointerType === 'touch';\n }\n /** @private */\n async handleEvent(event) {\n if (FORCED_COLORS?.matches) {\n // Skip event logic since the ripple is `display: none`.\n return;\n }\n switch (event.type) {\n case 'click':\n this.handleClick();\n break;\n case 'contextmenu':\n this.handleContextmenu();\n break;\n case 'pointercancel':\n this.handlePointercancel(event);\n break;\n case 'pointerdown':\n await this.handlePointerdown(event);\n break;\n case 'pointerenter':\n this.handlePointerenter(event);\n break;\n case 'pointerleave':\n this.handlePointerleave(event);\n break;\n case 'pointerup':\n this.handlePointerup(event);\n break;\n default:\n break;\n }\n }\n onControlChange(prev, next) {\n if (isServer)\n return;\n for (const event of EVENTS) {\n prev?.removeEventListener(event, this);\n next?.addEventListener(event, this);\n }\n }\n}\n__decorate([\n property({ type: Boolean, reflect: true })\n], Ripple.prototype, \"disabled\", void 0);\n__decorate([\n state()\n], Ripple.prototype, \"hovered\", void 0);\n__decorate([\n state()\n], Ripple.prototype, \"pressed\", void 0);\n__decorate([\n query('.surface')\n], Ripple.prototype, \"mdRoot\", void 0);\n//# sourceMappingURL=ripple.js.map","/**\n * @license\n * Copyright 2024 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n// Generated stylesheet for ./ripple/internal/ripple-styles.css.\nimport { css } from 'lit';\nexport const styles = css `:host{display:flex;margin:auto;pointer-events:none}:host([disabled]){display:none}@media(forced-colors: active){:host{display:none}}:host,.surface{border-radius:inherit;position:absolute;inset:0;overflow:hidden}.surface{-webkit-tap-highlight-color:rgba(0,0,0,0)}.surface::before,.surface::after{content:\"\";opacity:0;position:absolute}.surface::before{background-color:var(--md-ripple-hover-color, var(--md-sys-color-on-surface, #1d1b20));inset:0;transition:opacity 15ms linear,background-color 15ms linear}.surface::after{background:radial-gradient(closest-side, var(--md-ripple-pressed-color, var(--md-sys-color-on-surface, #1d1b20)) max(100% - 70px, 65%), transparent 100%);transform-origin:center center;transition:opacity 375ms linear}.hovered::before{background-color:var(--md-ripple-hover-color, var(--md-sys-color-on-surface, #1d1b20));opacity:var(--md-ripple-hover-opacity, 0.08)}.pressed::after{opacity:var(--md-ripple-pressed-opacity, 0.12);transition-duration:105ms}\n`;\n//# sourceMappingURL=ripple-styles.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { customElement } from 'lit/decorators.js';\nimport { Ripple } from './internal/ripple.js';\nimport { styles } from './internal/ripple-styles.js';\n/**\n * @summary Ripples, also known as state layers, are visual indicators used to\n * communicate the status of a component or interactive element.\n *\n * @description A state layer is a semi-transparent covering on an element that\n * indicates its state. State layers provide a systematic approach to\n * visualizing states by using opacity. A layer can be applied to an entire\n * element or in a circular shape and only one state layer can be applied at a\n * given time.\n *\n * @final\n * @suppress {visibility}\n */\nlet MdRipple = class MdRipple extends Ripple {\n};\nMdRipple.styles = [styles];\nMdRipple = __decorate([\n customElement('md-ripple')\n], MdRipple);\nexport { MdRipple };\n//# sourceMappingURL=ripple.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * Dispatches a click event to the given element that triggers a native action,\n * but is not composed and therefore is not seen outside the element.\n *\n * This is useful for responding to an external click event on the host element\n * that should trigger an internal action like a button click.\n *\n * Note, a helper is provided because setting this up correctly is a bit tricky.\n * In particular, calling `click` on an element creates a composed event, which\n * is not desirable, and a manually dispatched event must specifically be a\n * `MouseEvent` to trigger a native action.\n *\n * @example\n * hostClickListener = (event: MouseEvent) {\n * if (isActivationClick(event)) {\n * this.dispatchActivationClick(this.buttonElement);\n * }\n * }\n *\n */\nexport function dispatchActivationClick(element) {\n const event = new MouseEvent('click', { bubbles: true });\n element.dispatchEvent(event);\n return event;\n}\n/**\n * Returns true if the click event should trigger an activation behavior. The\n * behavior is defined by the element and is whatever it should do when\n * clicked.\n *\n * Typically when an element needs to handle a click, the click is generated\n * from within the element and an event listener within the element implements\n * the needed behavior; however, it's possible to fire a click directly\n * at the element that the element should handle. This method helps\n * distinguish these \"external\" clicks.\n *\n * An \"external\" click can be triggered in a number of ways: via a click\n * on an associated label for a form associated element, calling\n * `element.click()`, or calling\n * `element.dispatchEvent(new MouseEvent('click', ...))`.\n *\n * Also works around Firefox issue\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1804576 by squelching\n * events for a microtask after called.\n *\n * @example\n * hostClickListener = (event: MouseEvent) {\n * if (isActivationClick(event)) {\n * this.dispatchActivationClick(this.buttonElement);\n * }\n * }\n *\n */\nexport function isActivationClick(event) {\n // Event must start at the event target.\n if (event.currentTarget !== event.target) {\n return false;\n }\n // Event must not be retargeted from shadowRoot.\n if (event.composedPath()[0] !== event.target) {\n return false;\n }\n // Target must not be disabled; this should only occur for a synthetically\n // dispatched click.\n if (event.target.disabled) {\n return false;\n }\n // This is an activation if the event should not be squelched.\n return !squelchEvent(event);\n}\n// TODO(https://bugzilla.mozilla.org/show_bug.cgi?id=1804576)\n// Remove when Firefox bug is addressed.\nfunction squelchEvent(event) {\n const squelched = isSquelchingEvents;\n if (squelched) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n squelchEventsForMicrotask();\n return squelched;\n}\n// Ignore events for one microtask only.\nlet isSquelchingEvents = false;\nasync function squelchEventsForMicrotask() {\n isSquelchingEvents = true;\n // Need to pause for just one microtask.\n // tslint:disable-next-line\n await null;\n isSquelchingEvents = false;\n}\n//# sourceMappingURL=form-label-activation.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * A unique symbol used for protected access to an instance's\n * `ElementInternals`.\n *\n * @example\n * ```ts\n * class MyElement extends mixinElementInternals(LitElement) {\n * constructor() {\n * super();\n * this[internals].role = 'button';\n * }\n * }\n * ```\n */\nexport const internals = Symbol('internals');\n// Private symbols\nconst privateInternals = Symbol('privateInternals');\n/**\n * Mixes in an attached `ElementInternals` instance.\n *\n * This mixin is only needed when other shared code needs access to a\n * component's `ElementInternals`, such as form-associated mixins.\n *\n * @param base The class to mix functionality into.\n * @return The provided class with `WithElementInternals` mixed in.\n */\nexport function mixinElementInternals(base) {\n class WithElementInternalsElement extends base {\n get [internals]() {\n // Create internals in getter so that it can be used in methods called on\n // construction in `ReactiveElement`, such as `requestUpdate()`.\n if (!this[privateInternals]) {\n // Cast needed for closure\n this[privateInternals] = this.attachInternals();\n }\n return this[privateInternals];\n }\n }\n return WithElementInternalsElement;\n}\n//# sourceMappingURL=element-internals.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { isServer } from 'lit';\nimport { internals } from './element-internals.js';\n/**\n * A symbol property used to create a constraint validation `Validator`.\n * Required for all `mixinConstraintValidation()` elements.\n */\nexport const createValidator = Symbol('createValidator');\n/**\n * A symbol property used to return an anchor for constraint validation popups.\n * Required for all `mixinConstraintValidation()` elements.\n */\nexport const getValidityAnchor = Symbol('getValidityAnchor');\n// Private symbol members, used to avoid name clashing.\nconst privateValidator = Symbol('privateValidator');\nconst privateSyncValidity = Symbol('privateSyncValidity');\nconst privateCustomValidationMessage = Symbol('privateCustomValidationMessage');\n/**\n * Mixes in constraint validation APIs for an element.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/Constraint_validation\n * for more details.\n *\n * Implementations must provide a validator to cache and compute its validity,\n * along with a shadow root element to anchor validation popups to.\n *\n * @example\n * ```ts\n * const baseClass = mixinConstraintValidation(\n * mixinFormAssociated(mixinElementInternals(LitElement))\n * );\n *\n * class MyCheckbox extends baseClass {\n * \\@property({type: Boolean}) checked = false;\n * \\@property({type: Boolean}) required = false;\n *\n * [createValidator]() {\n * return new CheckboxValidator(() => this);\n * }\n *\n * [getValidityAnchor]() {\n * return this.renderRoot.querySelector('.root');\n * }\n * }\n * ```\n *\n * @param base The class to mix functionality into.\n * @return The provided class with `ConstraintValidation` mixed in.\n */\nexport function mixinConstraintValidation(base) {\n var _a;\n class ConstraintValidationElement extends base {\n constructor() {\n super(...arguments);\n /**\n * Needed for Safari, see https://bugs.webkit.org/show_bug.cgi?id=261432\n * Replace with this[internals].validity.customError when resolved.\n */\n this[_a] = '';\n }\n get validity() {\n this[privateSyncValidity]();\n return this[internals].validity;\n }\n get validationMessage() {\n this[privateSyncValidity]();\n return this[internals].validationMessage;\n }\n get willValidate() {\n this[privateSyncValidity]();\n return this[internals].willValidate;\n }\n checkValidity() {\n this[privateSyncValidity]();\n return this[internals].checkValidity();\n }\n reportValidity() {\n this[privateSyncValidity]();\n return this[internals].reportValidity();\n }\n setCustomValidity(error) {\n this[privateCustomValidationMessage] = error;\n this[privateSyncValidity]();\n }\n requestUpdate(name, oldValue, options) {\n super.requestUpdate(name, oldValue, options);\n this[privateSyncValidity]();\n }\n firstUpdated(changed) {\n super.firstUpdated(changed);\n // Sync the validity again when the element first renders, since the\n // validity anchor is now available.\n //\n // Elements that `delegatesFocus: true` to an `<input>` will throw an\n // error in Chrome and Safari when a form tries to submit or call\n // `form.reportValidity()`:\n // \"An invalid form control with name='' is not focusable\"\n //\n // The validity anchor MUST be provided in `internals.setValidity()` and\n // MUST be the `<input>` element rendered.\n //\n // See https://lit.dev/playground/#gist=6c26e418e0010f7a5aac15005cde8bde\n // for a reproduction.\n this[privateSyncValidity]();\n }\n [(_a = privateCustomValidationMessage, privateSyncValidity)]() {\n if (isServer) {\n return;\n }\n if (!this[privateValidator]) {\n this[privateValidator] = this[createValidator]();\n }\n const { validity, validationMessage: nonCustomValidationMessage } = this[privateValidator].getValidity();\n const customError = !!this[privateCustomValidationMessage];\n const validationMessage = this[privateCustomValidationMessage] || nonCustomValidationMessage;\n this[internals].setValidity({ ...validity, customError }, validationMessage, this[getValidityAnchor]() ?? undefined);\n }\n [createValidator]() {\n throw new Error('Implement [createValidator]');\n }\n [getValidityAnchor]() {\n throw new Error('Implement [getValidityAnchor]');\n }\n }\n return ConstraintValidationElement;\n}\n//# sourceMappingURL=constraint-validation.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { property } from 'lit/decorators.js';\n/**\n * A property symbol that indicates whether or not a `Focusable` element can be\n * focused.\n */\nexport const isFocusable = Symbol('isFocusable');\nconst privateIsFocusable = Symbol('privateIsFocusable');\nconst externalTabIndex = Symbol('externalTabIndex');\nconst isUpdatingTabIndex = Symbol('isUpdatingTabIndex');\nconst updateTabIndex = Symbol('updateTabIndex');\n/**\n * Mixes in focusable functionality for a class.\n *\n * Elements can enable and disable their focusability with the `isFocusable`\n * symbol property. Changing `tabIndex` will trigger a lit render, meaning\n * `this.tabIndex` can be used in template expressions.\n *\n * This mixin will preserve externally-set tabindices. If an element turns off\n * focusability, but a user sets `tabindex=\"0\"`, it will still be focusable.\n *\n * To remove user overrides and restore focusability control to the element,\n * remove the `tabindex` attribute.\n *\n * @param base The class to mix functionality into.\n * @return The provided class with `Focusable` mixed in.\n */\nexport function mixinFocusable(base) {\n var _a, _b, _c;\n class FocusableElement extends base {\n constructor() {\n super(...arguments);\n this[_a] = true;\n this[_b] = null;\n this[_c] = false;\n }\n get [isFocusable]() {\n return this[privateIsFocusable];\n }\n set [isFocusable](value) {\n if (this[isFocusable] === value) {\n return;\n }\n this[privateIsFocusable] = value;\n this[updateTabIndex]();\n }\n connectedCallback() {\n super.connectedCallback();\n this[updateTabIndex]();\n }\n attributeChangedCallback(name, old, value) {\n if (name !== 'tabindex') {\n super.attributeChangedCallback(name, old, value);\n return;\n }\n this.requestUpdate('tabIndex', Number(old ?? -1));\n if (this[isUpdatingTabIndex]) {\n // Not an externally-initiated update.\n return;\n }\n if (!this.hasAttribute('tabindex')) {\n // User removed the attribute, can now use internal tabIndex\n this[externalTabIndex] = null;\n this[updateTabIndex]();\n return;\n }\n this[externalTabIndex] = this.tabIndex;\n }\n [(_a = privateIsFocusable, _b = externalTabIndex, _c = isUpdatingTabIndex, updateTabIndex)]() {\n const internalTabIndex = this[isFocusable] ? 0 : -1;\n const computedTabIndex = this[externalTabIndex] ?? internalTabIndex;\n this[isUpdatingTabIndex] = true;\n this.tabIndex = computedTabIndex;\n this[isUpdatingTabIndex] = false;\n }\n }\n __decorate([\n property({ noAccessor: true })\n ], FocusableElement.prototype, \"tabIndex\", void 0);\n return FocusableElement;\n}\n//# sourceMappingURL=focusable.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { property } from 'lit/decorators.js';\nimport { internals } from './element-internals.js';\n/**\n * A symbol property to retrieve the form value for an element.\n */\nexport const getFormValue = Symbol('getFormValue');\n/**\n * A symbol property to retrieve the form state for an element.\n */\nexport const getFormState = Symbol('getFormState');\n/**\n * Mixes in form-associated behavior for a class. This allows an element to add\n * values to `<form>` elements.\n *\n * Implementing classes should provide a `[formValue]` to return the current\n * value of the element, as well as reset and restore callbacks.\n *\n * @example\n * ```ts\n * const base = mixinFormAssociated(mixinElementInternals(LitElement));\n *\n * class MyControl extends base {\n * \\@property()\n * value = '';\n *\n * override [getFormValue]() {\n * return this.value;\n * }\n *\n * override formResetCallback() {\n * const defaultValue = this.getAttribute('value');\n * this.value = defaultValue;\n * }\n *\n * override formStateRestoreCallback(state: string) {\n * this.value = state;\n * }\n * }\n * ```\n *\n * Elements may optionally provide a `[formState]` if their values do not\n * represent the state of the component.\n *\n * @example\n * ```ts\n * const base = mixinFormAssociated(mixinElementInternals(LitElement));\n *\n * class MyCheckbox extends base {\n * \\@property()\n * value = 'on';\n *\n * \\@property({type: Boolean})\n * checked = false;\n *\n * override [getFormValue]() {\n * return this.checked ? this.value : null;\n * }\n *\n * override [getFormState]() {\n * return String(this.checked);\n * }\n *\n * override formResetCallback() {\n * const defaultValue = this.hasAttribute('checked');\n * this.checked = defaultValue;\n * }\n *\n * override formStateRestoreCallback(state: string) {\n * this.checked = Boolean(state);\n * }\n * }\n * ```\n *\n * IMPORTANT: Requires declares for lit-analyzer\n * @example\n * ```ts\n * const base = mixinFormAssociated(mixinElementInternals(LitElement));\n * class MyControl extends base {\n * // Writable mixin properties for lit-html binding, needed for lit-analyzer\n * declare disabled: boolean;\n * declare name: string;\n * }\n * ```\n *\n * @param base The class to mix functionality into. The base class must use\n * `mixinElementInternals()`.\n * @return The provided class with `FormAssociated` mixed in.\n */\nexport function mixinFormAssociated(base) {\n class FormAssociatedElement extends base {\n get form() {\n return this[internals].form;\n }\n get labels() {\n return this[internals].labels;\n }\n // Use @property for the `name` and `disabled` properties to add them to the\n // `observedAttributes` array and trigger `attributeChangedCallback()`.\n //\n // We don't use Lit's default getter/setter (`noAccessor: true`) because\n // the attributes need to be updated synchronously to work with synchronous\n // form APIs, and Lit updates attributes async by default.\n get name() {\n return this.getAttribute('name') ?? '';\n }\n set name(name) {\n // Note: setting name to null or empty does not remove the attribute.\n this.setAttribute('name', name);\n // We don't need to call `requestUpdate()` since it's called synchronously\n // in `attributeChangedCallback()`.\n }\n get disabled() {\n return this.hasAttribute('disabled');\n }\n set disabled(disabled) {\n this.toggleAttribute('disabled', disabled);\n // We don't need to call `requestUpdate()` since it's called synchronously\n // in `attributeChangedCallback()`.\n }\n attributeChangedCallback(name, old, value) {\n // Manually `requestUpdate()` for `name` and `disabled` when their\n // attribute or property changes.\n // The properties update their attributes, so this callback is invoked\n // immediately when the properties are set. We call `requestUpdate()` here\n // instead of letting Lit set the properties from the attribute change.\n // That would cause the properties to re-set the attribute and invoke this\n // callback again in a loop. This leads to stale state when Lit tries to\n // determine if a property changed or not.\n if (name === 'name' || name === 'disabled') {\n // Disabled's value is only false if the attribute is missing and null.\n const oldValue = name === 'disabled' ? old !== null : old;\n // Trigger a lit update when the attribute changes.\n this.requestUpdate(name, oldValue);\n return;\n }\n super.attributeChangedCallback(name, old, value);\n }\n requestUpdate(name, oldValue, options) {\n super.requestUpdate(name, oldValue, options);\n // If any properties change, update the form value, which may have changed\n // as well.\n // Update the form value synchronously in `requestUpdate()` rather than\n // `update()` or `updated()`, which are async. This is necessary to ensure\n // that form data is updated in time for synchronous event listeners.\n this[internals].setFormValue(this[getFormValue](), this[getFormState]());\n }\n [getFormValue]() {\n // Closure does not allow abstract symbol members, so a default\n // implementation is needed.\n throw new Error('Implement [getFormValue]');\n }\n [getFormState]() {\n return this[getFormValue]();\n }\n formDisabledCallback(disabled) {\n this.disabled = disabled;\n }\n }\n /** @nocollapse */\n FormAssociatedElement.formAssociated = true;\n __decorate([\n property({ noAccessor: true })\n ], FormAssociatedElement.prototype, \"name\", null);\n __decorate([\n property({ type: Boolean, noAccessor: true })\n ], FormAssociatedElement.prototype, \"disabled\", null);\n return FormAssociatedElement;\n}\n//# sourceMappingURL=form-associated.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * A class that computes and caches `ValidityStateFlags` for a component with\n * a given `State` interface.\n *\n * Cached performance before computing validity is important since constraint\n * validation must be checked frequently and synchronously when properties\n * change.\n *\n * @template State The expected interface of properties relevant to constraint\n * validation.\n */\nexport class Validator {\n /**\n * Creates a new validator.\n *\n * @param getCurrentState A callback that returns the current state of\n * constraint validation-related properties.\n */\n constructor(getCurrentState) {\n this.getCurrentState = getCurrentState;\n /**\n * The current validity state and message. This is cached and returns if\n * constraint validation state does not change.\n */\n this.currentValidity = {\n validity: {},\n validationMessage: '',\n };\n }\n /**\n * Returns the current `ValidityStateFlags` and validation message for the\n * validator.\n *\n * If the constraint validation state has not changed, this will return a\n * cached result. This is important since `getValidity()` can be called\n * frequently in response to synchronous property changes.\n *\n * @return The current validity and validation message.\n */\n getValidity() {\n const state = this.getCurrentState();\n const hasStateChanged = !this.prevState || !this.equals(this.prevState, state);\n if (!hasStateChanged) {\n return this.currentValidity;\n }\n const { validity, validationMessage } = this.computeValidity(state);\n this.prevState = this.copy(state);\n this.currentValidity = {\n validationMessage,\n validity: {\n // Change any `ValidityState` instances into `ValidityStateFlags` since\n // `ValidityState` cannot be easily `{...spread}`.\n badInput: validity.badInput,\n customError: validity.customError,\n patternMismatch: validity.patternMismatch,\n rangeOverflow: validity.rangeOverflow,\n rangeUnderflow: validity.rangeUnderflow,\n stepMismatch: validity.stepMismatch,\n tooLong: validity.tooLong,\n tooShort: validity.tooShort,\n typeMismatch: validity.typeMismatch,\n valueMissing: validity.valueMissing,\n },\n };\n return this.currentValidity;\n }\n}\n//# sourceMappingURL=validator.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { Validator } from './validator.js';\n/**\n * A validator that provides constraint validation that emulates\n * `<input type=\"radio\">` validation.\n */\nexport class RadioValidator extends Validator {\n computeValidity(states) {\n if (!this.radioElement) {\n // Lazily create the radio element\n this.radioElement = document.createElement('input');\n this.radioElement.type = 'radio';\n // A name is required for validation to run\n this.radioElement.name = 'group';\n }\n let isRequired = false;\n let isChecked = false;\n for (const { checked, required } of states) {\n if (required) {\n isRequired = true;\n }\n if (checked) {\n isChecked = true;\n }\n }\n // Firefox v119 doesn't compute grouped radio validation correctly while\n // they are detached from the DOM, which is why we don't render multiple\n // virtual <input>s. Instead, we can check the required/checked states and\n // grab the i18n'd validation message if the value is missing.\n this.radioElement.checked = isChecked;\n this.radioElement.required = isRequired;\n return {\n validity: {\n valueMissing: isRequired && !isChecked,\n },\n validationMessage: this.radioElement.validationMessage,\n };\n }\n equals(prevGroup, nextGroup) {\n if (prevGroup.length !== nextGroup.length) {\n return false;\n }\n for (let i = 0; i < prevGroup.length; i++) {\n const prev = prevGroup[i];\n const next = nextGroup[i];\n if (prev.checked !== next.checked || prev.required !== next.required) {\n return false;\n }\n }\n return true;\n }\n copy(states) {\n // Cast as unknown since typescript does not have enough information to\n // infer that the array always has at least one element.\n return states.map(({ checked, required }) => ({\n checked,\n required,\n }));\n }\n}\n//# sourceMappingURL=radio-validator.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * A `ReactiveController` that provides root node-scoped single selection for\n * elements, similar to native `<input type=\"radio\">` selection.\n *\n * To use, elements should add the controller and call\n * `selectionController.handleCheckedChange()` in a getter/setter. This must\n * be synchronous to match native behavior.\n *\n * @example\n * const CHECKED = Symbol('checked');\n *\n * class MyToggle extends LitElement {\n * get checked() { return this[CHECKED]; }\n * set checked(checked: boolean) {\n * const oldValue = this.checked;\n * if (oldValue === checked) {\n * return;\n * }\n *\n * this[CHECKED] = checked;\n * this.selectionController.handleCheckedChange();\n * this.requestUpdate('checked', oldValue);\n * }\n *\n * [CHECKED] = false;\n *\n * private selectionController = new SingleSelectionController(this);\n *\n * constructor() {\n * super();\n * this.addController(this.selectionController);\n * }\n * }\n */\nexport class SingleSelectionController {\n /**\n * All single selection elements in the host element's root with the same\n * `name` attribute, including the host element.\n */\n get controls() {\n const name = this.host.getAttribute('name');\n if (!name || !this.root || !this.host.isConnected) {\n return [this.host];\n }\n // Cast as unknown since there is not enough information for typescript to\n // know that there is always at least one element (the host).\n return Array.from(this.root.querySelectorAll(`[name=\"${name}\"]`));\n }\n constructor(host) {\n this.host = host;\n this.focused = false;\n this.root = null;\n this.handleFocusIn = () => {\n this.focused = true;\n this.updateTabIndices();\n };\n this.handleFocusOut = () => {\n this.focused = false;\n this.updateTabIndices();\n };\n /**\n * Handles arrow key events from the host. Using the arrow keys will\n * select and check the next or previous sibling with the host's\n * `name` attribute.\n */\n this.handleKeyDown = (event) => {\n const isDown = event.key === 'ArrowDown';\n const isUp = event.key === 'ArrowUp';\n const isLeft = event.key === 'ArrowLeft';\n const isRight = event.key === 'ArrowRight';\n // Ignore non-arrow keys\n if (!isLeft && !isRight && !isDown && !isUp) {\n return;\n }\n // Don't try to select another sibling if there aren't any.\n const siblings = this.controls;\n if (!siblings.length) {\n return;\n }\n // Prevent default interactions on the element for arrow keys,\n // since this controller will introduce new behavior.\n event.preventDefault();\n // Check if moving forwards or backwards\n const isRtl = getComputedStyle(this.host).direction === 'rtl';\n const forwards = isRtl ? isLeft || isDown : isRight || isDown;\n const hostIndex = siblings.indexOf(this.host);\n let nextIndex = forwards ? hostIndex + 1 : hostIndex - 1;\n // Search for the next sibling that is not disabled to select.\n // If we return to the host index, there is nothing to select.\n while (nextIndex !== hostIndex) {\n if (nextIndex >= siblings.length) {\n // Return to start if moving past the last item.\n nextIndex = 0;\n }\n else if (nextIndex < 0) {\n // Go to end if moving before the first item.\n nextIndex = siblings.length - 1;\n }\n // Check if the next sibling is disabled. If so,\n // move the index and continue searching.\n const nextSibling = siblings[nextIndex];\n if (nextSibling.hasAttribute('disabled')) {\n if (forwards) {\n nextIndex++;\n }\n else {\n nextIndex--;\n }\n continue;\n }\n // Uncheck and remove focusability from other siblings.\n for (const sibling of siblings) {\n if (sibling !== nextSibling) {\n sibling.checked = false;\n sibling.tabIndex = -1;\n sibling.blur();\n }\n }\n // The next sibling should be checked, focused and dispatch a change event\n nextSibling.checked = true;\n nextSibling.tabIndex = 0;\n nextSibling.focus();\n // Fire a change event since the change is triggered by a user action.\n // This matches native <input type=\"radio\"> behavior.\n nextSibling.dispatchEvent(new Event('change', { bubbles: true }));\n break;\n }\n };\n }\n hostConnected() {\n this.root = this.host.getRootNode();\n this.host.addEventListener('keydown', this.handleKeyDown);\n this.host.addEventListener('focusin', this.handleFocusIn);\n this.host.addEventListener('focusout', this.handleFocusOut);\n if (this.host.checked) {\n // Uncheck other siblings when attached if already checked. This mimics\n // native <input type=\"radio\"> behavior.\n this.uncheckSiblings();\n }\n // Update for the newly added host.\n this.updateTabIndices();\n }\n hostDisconnected() {\n this.host.removeEventListener('keydown', this.handleKeyDown);\n this.host.removeEventListener('focusin', this.handleFocusIn);\n this.host.removeEventListener('focusout', this.handleFocusOut);\n // Update for siblings that are still connected.\n this.updateTabIndices();\n this.root = null;\n }\n /**\n * Should be called whenever the host's `checked` property changes\n * synchronously.\n */\n handleCheckedChange() {\n if (!this.host.checked) {\n return;\n }\n this.uncheckSiblings();\n this.updateTabIndices();\n }\n uncheckSiblings() {\n for (const sibling of this.controls) {\n if (sibling !== this.host) {\n sibling.checked = false;\n }\n }\n }\n /**\n * Updates the `tabindex` of the host and its siblings.\n */\n updateTabIndices() {\n // There are three tabindex states for a group of elements:\n // 1. If any are checked, that element is focusable.\n const siblings = this.controls;\n const checkedSibling = siblings.find((sibling) => sibling.checked);\n // 2. If an element is focused, the others are no longer focusable.\n if (checkedSibling || this.focused) {\n const focusable = checkedSibling || this.host;\n focusable.tabIndex = 0;\n for (const sibling of siblings) {\n if (sibling !== focusable) {\n sibling.tabIndex = -1;\n }\n }\n return;\n }\n // 3. If none are checked or focused, all are focusable.\n for (const sibling of siblings) {\n sibling.tabIndex = 0;\n }\n }\n}\n//# sourceMappingURL=single-selection-controller.js.map","/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nvar _a;\nimport { __decorate } from \"tslib\";\nimport '../../focus/md-focus-ring.js';\nimport '../../ripple/ripple.js';\nimport { html, isServer, LitElement } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { isActivationClick } from '../../internal/events/form-label-activation.js';\nimport { createValidator, getValidityAnchor, mixinConstraintValidation, } from '../../labs/behaviors/constraint-validation.js';\nimport { internals, mixinElementInternals, } from '../../labs/behaviors/element-internals.js';\nimport { mixinFocusable } from '../../labs/behaviors/focusable.js';\nimport { getFormState, getFormValue, mixinFormAssociated, } from '../../labs/behaviors/form-associated.js';\nimport { RadioValidator } from '../../labs/behaviors/validators/radio-validator.js';\nimport { SingleSelectionController } from './single-selection-controller.js';\nconst CHECKED = Symbol('checked');\nlet maskId = 0;\n// Separate variable needed for closure.\nconst radioBaseClass = mixinConstraintValidation(mixinFormAssociated(mixinElementInternals(mixinFocusable(LitElement))));\n/**\n * A radio component.\n *\n * @fires input {InputEvent} Dispatched when the value changes from user\n * interaction. --bubbles\n * @fires change {Event} Dispatched when the value changes from user\n * interaction. --bubbles --composed\n */\nexport class Radio extends radioBaseClass {\n /**\n * Whether or not the radio is selected.\n */\n get checked() {\n return this[CHECKED];\n }\n set checked(checked) {\n const wasChecked = this.checked;\n if (wasChecked === checked) {\n return;\n }\n this[CHECKED] = checked;\n this.requestUpdate('checked', wasChecked);\n this.selectionController.handleCheckedChange();\n }\n constructor() {\n super();\n // Unique maskId is required because of a Safari bug that fail to persist\n // reference to the mask. This should be removed once the bug is fixed.\n this.maskId = `cutout${++maskId}`;\n this[_a] = false;\n /**\n * Whether or not the radio is required. If any radio is required in a group,\n * all radios are implicitly required.\n */\n this.required = false;\n /**\n * The element value to use in form submission when checked.\n */\n this.value = 'on';\n this.selectionController = new SingleSelectionController(this);\n this.addController(this.selectionController);\n if (!isServer) {\n this[internals].role = 'radio';\n this.addEventListener('click', this.handleClick.bind(this));\n this.addEventListener('keydown', this.handleKeydown.bind(this));\n }\n }\n render() {\n const classes = { 'checked': this.checked };\n return html `\n <div class=\"container ${classMap(classes)}\" aria-hidden=\"true\">\n <md-ripple\n part=\"ripple\"\n .control=${this}\n ?disabled=${this.disabled}></md-ripple>\n <md-focus-ring part=\"focus-ring\" .control=${this}></md-focus-ring>\n <svg class=\"icon\" viewBox=\"0 0 20 20\">\n <mask id=\"${this.maskId}\">\n <rect width=\"100%\" height=\"100%\" fill=\"white\" />\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"black\" />\n </mask>\n <circle\n class=\"outer circle\"\n cx=\"10\"\n cy=\"10\"\n r=\"10\"\n mask=\"url(#${this.maskId})\" />\n <circle class=\"inner circle\" cx=\"10\" cy=\"10\" r=\"5\" />\n </svg>\n\n <div class=\"touch-target\"></div>\n </div>\n `;\n }\n updated() {\n this[internals].ariaChecked = String(this.checked);\n }\n async handleClick(event) {\n if (this.disabled) {\n return;\n }\n // allow event to propagate to user code after a microtask.\n await 0;\n if (event.defaultPrevented) {\n return;\n }\n if (isActivationClick(event)) {\n this.focus();\n }\n // Per spec, clicking on a radio input always selects it.\n this.checked = true;\n this.dispatchEvent(new Event('change', { bubbles: true }));\n this.dispatchEvent(new InputEvent('input', { bubbles: true, composed: true }));\n }\n async handleKeydown(event) {\n // allow event to propagate to user code after a microtask.\n await 0;\n if (event.key !== ' ' || event.defaultPrevented) {\n return;\n }\n this.click();\n }\n [(_a = CHECKED, getFormValue)]() {\n return this.checked ? this.value : null;\n }\n [getFormState]() {\n return String(this.checked);\n }\n formResetCallback() {\n // The checked property does not reflect, so the original attribute set by\n // the user is used to determine the default value.\n this.checked = this.hasAttribute('checked');\n }\n formStateRestoreCallback(state) {\n this.checked = state === 'true';\n }\n [createValidator]() {\n return new RadioValidator(() => {\n if (!this.selectionController) {\n // Validation runs on superclass construction, so selection controller\n // might not actually be ready until this class constructs.\n return [this];\n }\n return this.selectionController.controls;\n });\n }\n [getValidityAnchor]() {\n return this.container;\n }\n}\n__decorate([\n property({ type: Boolean })\n], Radio.prototype, \"checked\", null);\n__decorate([\n property({ type: Boolean })\n], Radio.prototype, \"required\", void 0);\n__decorate([\n property()\n], Radio.prototype, \"value\", void 0);\n__decorate([\n query('.container')\n], Radio.prototype, \"container\", void 0);\n//# sourceMappingURL=radio.js.map","/**\n * @license\n * Copyright 2024 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n// Generated stylesheet for ./radio/internal/radio-styles.css.\nimport { css } from 'lit';\nexport const styles = css `@layer{:host{display:inline-flex;height:var(--md-radio-icon-size, 20px);outline:none;position:relative;vertical-align:top;width:var(--md-radio-icon-size, 20px);-webkit-tap-highlight-color:rgba(0,0,0,0);cursor:pointer;--md-ripple-hover-color: var(--md-radio-hover-state-layer-color, var(--md-sys-color-on-surface, #1d1b20));--md-ripple-hover-opacity: var(--md-radio-hover-state-layer-opacity, 0.08);--md-ripple-pressed-color: var(--md-radio-pressed-state-layer-color, var(--md-sys-color-primary, #6750a4));--md-ripple-pressed-opacity: var(--md-radio-pressed-state-layer-opacity, 0.12)}:host([disabled]){cursor:default}:host([touch-target=wrapper]){margin:max(0px,(48px - var(--md-radio-icon-size, 20px))/2)}.container{display:flex;height:100%;place-content:center;place-items:center;width:100%}md-focus-ring{height:44px;inset:unset;width:44px}.checked{--md-ripple-hover-color: var(--md-radio-selected-hover-state-layer-color, var(--md-sys-color-primary, #6750a4));--md-ripple-hover-opacity: var(--md-radio-selected-hover-state-layer-opacity, 0.08);--md-ripple-pressed-color: var(--md-radio-selected-pressed-state-layer-color, var(--md-sys-color-on-surface, #1d1b20));--md-ripple-pressed-opacity: var(--md-radio-selected-pressed-state-layer-opacity, 0.12)}.touch-target{height:48px;position:absolute;width:48px}:host([touch-target=none]) .touch-target{display:none}md-ripple{border-radius:50%;height:var(--md-radio-state-layer-size, 40px);inset:unset;width:var(--md-radio-state-layer-size, 40px)}.icon{fill:var(--md-radio-icon-color, var(--md-sys-color-on-surface-variant, #49454f));inset:0;position:absolute}.outer.circle{transition:fill 50ms linear}.inner.circle{opacity:0;transform-origin:center;transition:opacity 50ms linear}.checked .icon{fill:var(--md-radio-selected-icon-color, var(--md-sys-color-primary, #6750a4))}.checked .inner.circle{animation:inner-circle-grow 300ms cubic-bezier(0.05, 0.7, 0.1, 1);opacity:1}@keyframes inner-circle-grow{from{transform:scale(0)}to{transform:scale(1)}}:host([disabled]) .circle{animation-duration:0s;transition-duration:0s}:host(:hover) .icon{fill:var(--md-radio-hover-icon-color, var(--md-sys-color-on-surface, #1d1b20))}:host(:focus-within) .icon{fill:var(--md-radio-focus-icon-color, var(--md-sys-color-on-surface, #1d1b20))}:host(:active) .icon{fill:var(--md-radio-pressed-icon-color, var(--md-sys-color-on-surface, #1d1b20))}:host([disabled]) .icon{fill:var(--md-radio-disabled-unselected-icon-color, var(--md-sys-color-on-surface, #1d1b20));opacity:var(--md-radio-disabled-unselected-icon-opacity, 0.38)}:host(:hover) .checked .icon{fill:var(--md-radio-selected-hover-icon-color, var(--md-sys-color-primary, #6750a4))}:host(:focus-within) .checked .icon{fill:var(--md-radio-selected-focus-icon-color, var(--md-sys-color-primary, #6750a4))}:host(:active) .checked .icon{fill:var(--md-radio-selected-pressed-icon-color, var(--md-sys-color-primary, #6750a4))}:host([disabled]) .checked .icon{fill:var(--md-radio-disabled-selected-icon-color, var(--md-sys-color-on-surface, #1d1b20));opacity:var(--md-radio-disabled-selected-icon-opacity, 0.38)}}@layer hcm{@media(forced-colors: active){.icon{fill:CanvasText}:host([disabled]) .icon{fill:GrayText;opacity:1}}}\n`;\n//# sourceMappingURL=radio-styles.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { customElement } from 'lit/decorators.js';\nimport { Radio } from './internal/radio.js';\nimport { styles } from './internal/radio-styles.js';\n/**\n * @summary Radio buttons allow users to select one option from a set.\n *\n * @description\n * Radio buttons are the recommended way to allow users to make a single\n * selection from a list of options.\n *\n * Only one radio button can be selected at a time.\n *\n * Use radio buttons to:\n * - Select a single option from a set\n * - Expose all available options\n *\n * @final\n * @suppress {visibility}\n */\nlet MdRadio = class MdRadio extends Radio {\n};\nMdRadio.styles = [styles];\nMdRadio = __decorate([\n customElement('md-radio')\n], MdRadio);\nexport { MdRadio };\n//# sourceMappingURL=radio.js.map","import { html, css, LitElement } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport '@material/web/radio/radio.js';\r\n\r\n@customElement('custom-radio')\r\nexport class CustomRadio extends LitElement {\r\n @property({ type: String }) name = 'radio-group';\r\n @property({ type: Boolean }) checked = false;\r\n @property({ type: Boolean }) disabled = false;\r\n @property({ type: Boolean }) error = false;\r\n\r\n static styles = css`\r\n :host {\r\n font-family: \"Graphik\", sans-serif;\r\n }\r\n\r\n .radio-container {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n cursor: pointer;\r\n }\r\n\r\n md-radio {\r\n width: 24px;\r\n height: 24px;\r\n border-radius: 50%;\r\n background: var(--white);\r\n border: 1px solid var(--secondary-color-20);\r\n }\r\n\r\n md-radio::part(container):hover {\r\n box-shadow: 0px 0px 0px 4px #0F19411A;\r\n border: 1px solid var(--secondary-color-20);\r\n border-radius: 50%;\r\n }\r\n\r\n md-radio:focus-visible::part(container) {\r\n border: 1px solid var(--primary-color);\r\n }\r\n\r\n md-radio.checked {\r\n background: var(--primary-color);\r\n border: 1px solid var(--primary-color);\r\n }\r\n\r\n md-radio.checked.error {\r\n background: var(--ui-negative);\r\n border: 1px solid var(--ui-negative);\r\n }\r\n\r\n md-radio.error {\r\n border: 1px solid var(--ui-negative);\r\n }\r\n\r\n md-radio.disabled {\r\n border: 1px solid var(--secondary-color-20);\r\n background: var(--secondary-color-20);\r\n cursor: default;\r\n }\r\n\r\n .radio-container.disabled {\r\n color: #9FA3B3;\r\n cursor: default;\r\n }\r\n `;\r\n\r\n render() {\r\n const radioClasses = [\r\n this.checked ? 'checked' : '',\r\n this.error ? 'error' : '',\r\n this.disabled ? 'disabled' : '',\r\n ].join(' ');\r\n\r\n return html`\r\n <label class=\"radio-container ${ this.disabled ? 'disabled' : '' }\">\r\n <md-radio \r\n name=${this.name} \r\n class=${radioClasses}\r\n ?checked=${this.checked} \r\n ?disabled=${this.disabled}\r\n >\r\n </md-radio>\r\n \r\n <span>${this.checked ? 'On' : 'Off'} ${this.error ? 'Error' : ''}</span>\r\n </label>\r\n `;\r\n }\r\n}","import { html, css, nothing } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport { bodyL } from '../styles/fontStyles';\r\nimport { tooltipStyles } from \"../styles/tooltip\";\r\nimport { BaseControl } from '../helpers/BaseControl';\r\nimport { mixStyles } from '../styles/mix';\r\nimport { errorStyles } from '../styles/error';\r\n\r\ntype SelectOption = string | {\r\n label: string;\r\n value: string | object;\r\n disabled?: boolean;\r\n icon?: string;\r\n};\r\n\r\n@customElement('filterable-select')\r\nexport class FilterableSelect extends BaseControl {\r\n @property({ type: Object }) value: string | object = '';\r\n @property({ type: String, attribute: 'default-value' }) defaultValue = '';\r\n\r\n @property({ type: Array }) options: SelectOption[] = [];\r\n @property({ type: Boolean }) filterable = true;\r\n @property({ type: Number }) maxLength?: number;\r\n \r\n @state() private isMobile: boolean = false;\r\n @state() private highlightedIndex = -1;\r\n @state() private _isCleared: boolean = false;\r\n\r\n @state() filteredOptions: SelectOption[] = [];\r\n @state() filterValue = '';\r\n @state() isOpen = false;\r\n @state() mobileFilterValue = '';\r\n\r\n private debounceTimeout: number | null = null;\r\n\r\n static styles = css`\r\n ${ mixStyles }\r\n ${ errorStyles }\r\n ${ tooltipStyles }\r\n\r\n /* --- Own Error Styles --- */\r\n :host([error]) .input-container:not(.open) .input-wrapper:hover {\r\n box-shadow: 0px 0px 0px 4px #E00F0F1A !important;\r\n }\r\n\r\n :host([error]) .input-container.open:not(.mobile) .input-wrapper {\r\n border-bottom-left-radius: 0;\r\n border-bottom-right-radius: 0;\r\n border: 1px solid var(--ui-negative, red) !important;\r\n border-bottom: 1px solid transparent !important;\r\n }\r\n\r\n :host([error]) .input-container:not(.mobile) .options-list {\r\n border: 1px solid var(--ui-negative, red) !important;\r\n border-top: none !important;\r\n border-radius: 0 0 4px 4px;\r\n }\r\n\r\n /* Estilos para el estado disabled */\r\n .input-wrapper.disabled .filter-input, .input-wrapper.disabled .filter-input, .input-wrapper.disabled .filter-fake {\r\n background-color: var(--secondary-color-10);\r\n color: #9FA3B3;\r\n cursor: default;\r\n }\r\n\r\n .input-wrapper.disabled .icon-button,\r\n .input-wrapper.disabled .icon-button randstad-icon,\r\n .input-wrapper.disabled .icon-button .close-icon {\r\n color: #9FA3B3;\r\n cursor: default;\r\n }\r\n\r\n /* Y si tienes un icono seleccionado que también debe cambiar de color */\r\n .input-wrapper.disabled .icon-selected svg {\r\n fill: #9FA3B3;\r\n }\r\n\r\n .input-wrapper .icon-button .close-icon {\r\n color: var(--primary-color);\r\n }\r\n\r\n .select-container {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n width: 100%;\r\n }\r\n\r\n .input-container.focused:not(.open):not(.mobile) .input-wrapper {\r\n border: 1px solid var(--primary-color);\r\n border-radius: 4px;\r\n box-shadow: none;\r\n z-index: 11;\r\n }\r\n\r\n .input-container.focused:not(.open):not(.mobile) .input-wrapper:hover {\r\n box-shadow: none;\r\n }\r\n\r\n :host(:not([error])) .input-container.open:not(.mobile) {\r\n border-radius: 4px;\r\n border-bottom-left-radius: 0;\r\n border-bottom-right-radius: 0;\r\n }\r\n\r\n :host(:not([error])) .input-container.open:not(.mobile) .input-wrapper {\r\n border: 1px solid var(--primary-color);\r\n border-top-left-radius: 4px;\r\n border-top-right-radius: 4px;\r\n border-bottom-left-radius: 0;\r\n border-bottom-right-radius: 0;\r\n border-bottom: 1px solid transparent;\r\n box-shadow: none;\r\n z-index: 11;\r\n }\r\n\r\n :host(:not([error])) .input-wrapper:hover {\r\n box-shadow: 0px 0px 0px 4px #0F19411A;\r\n }\r\n\r\n :host .input-container.open:not(.mobile)::after {\r\n content: '';\r\n position: absolute;\r\n top: calc(100% - 1px);\r\n left: 20px;\r\n right: 20px;\r\n height: 1px;\r\n background-color: var(--gray-20);\r\n z-index: 10;\r\n }\r\n\r\n .input-wrapper {\r\n border: 1px solid var(--secondary-color-10);\r\n border-radius: 4px;\r\n overflow: hidden;\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n transition: box-shadow 0.2s ease-in-out;\r\n background-color: white;\r\n }\r\n\r\n .mobile-modal .filter-input {\r\n border-bottom: 1px solid var(--gray-20);\r\n }\r\n\r\n .filter-input {\r\n ${bodyL};\r\n padding: 16px;\r\n padding-right: 40px;\r\n border: none;\r\n outline: none;\r\n width: 100%;\r\n box-sizing: border-box;\r\n background: white;\r\n cursor: pointer;\r\n color: var(--secondary-color);\r\n flex-grow: 1;\r\n }\r\n\r\n .filter-input,\r\n .filter-fake,\r\n .input-wrapper,\r\n .mobile-modal {\r\n -webkit-tap-highlight-color: transparent !important;\r\n }\r\n\r\n .filter-input::placeholder {\r\n ${bodyL};\r\n color: var(--secondary-color-40);\r\n }\r\n\r\n .icon-button {\r\n position: absolute;\r\n right: 10px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 24px;\r\n height: 24px;\r\n padding: 0;\r\n }\r\n\r\n randstad-icon {\r\n width: 24px;\r\n height: 24px;\r\n color: var(--primary-color);\r\n }\r\n\r\n .options-list {\r\n width: 100%;\r\n position: absolute;\r\n top: 99%;\r\n left: 0;\r\n right: 0;\r\n max-height: 200px;\r\n overflow-y: auto;\r\n border: 1px solid var(--primary-color);\r\n border-top: none;\r\n border-radius: 0 0 4px 4px;\r\n background: white;\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n z-index: 10;\r\n }\r\n\r\n .options-list li {\r\n ${bodyL};\r\n padding: 8px 16px 8px 16px;\r\n cursor: pointer;\r\n color: var(--secondary-color-80);\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n .options-list li.highlighted {\r\n background-color: var(--primary-color-10);\r\n }\r\n\r\n .mobile-modal {\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n background-color: white;\r\n z-index: 1000;\r\n border-radius: 12px 12px 0 0;\r\n box-shadow: 0 -4px 10px rgba(0, 0, 0, 0.15);\r\n display: flex;\r\n flex-direction: column;\r\n padding: 0px;\r\n gap: 12px;\r\n animation: slideUp 0.5s ease-out;\r\n max-height: 80vh;\r\n overflow-y: auto;\r\n }\r\n\r\n .mobile-modal .options-list {\r\n position: static;\r\n max-height: none;\r\n border: none;\r\n box-shadow: none;\r\n }\r\n\r\n .mobile-modal .modal-input-container {\r\n position: relative;\r\n }\r\n\r\n .mobile-modal .modal-close-button {\r\n position: absolute;\r\n top: 50%;\r\n right: 12px;\r\n transform: translateY(-50%);\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n padding: 4px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n\r\n .mobile-modal .modal-close-button randstad-icon {\r\n width: 20px;\r\n height: 20px;\r\n color: var(--secondary-color-60);\r\n }\r\n\r\n .mobile-backdrop {\r\n position: fixed;\r\n inset: 0;\r\n background-color: rgba(0, 0, 0, 0.4);\r\n z-index: 999;\r\n display: flex;\r\n align-items: flex-end;\r\n }\r\n\r\n .filter-fake {\r\n ${bodyL};\r\n padding: 15px;\r\n padding-right: 40px;\r\n width: 100%;\r\n background: white;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n color: var(--secondary-color-80);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n @keyframes slideUp {\r\n from {\r\n transform: translateY(100%);\r\n }\r\n to {\r\n transform: translateY(0);\r\n }\r\n }\r\n\r\n .options-list::-webkit-scrollbar {\r\n width: 6px;\r\n }\r\n\r\n .options-list::-webkit-scrollbar-track {\r\n background: transparent;\r\n }\r\n\r\n .options-list::-webkit-scrollbar-thumb {\r\n background-color: var(--secondary-color-30);\r\n border-radius: 4px;\r\n }\r\n\r\n .options-list::-webkit-scrollbar-button {\r\n display: none;\r\n }\r\n\r\n /* Estilos por defecto del icon para mobile */\r\n .icon-selected {\r\n width: 24px;\r\n height: auto;\r\n margin-left: 4px;\r\n padding-right: 12px; \r\n border-right: 1px solid var(--secondary-color-20);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-shrink: 0;\r\n }\r\n\r\n .value-text {\r\n margin-left: 8px; /* Aumentamos el margen para separar el texto en mobile */\r\n }\r\n\r\n /*\r\n * Media query para aplicar estilos de escritorio (a partir de 941px)\r\n */\r\n @media (min-width: 941px) {\r\n .icon-selected {\r\n /* Estilos de escritorio para el icono, se anulan los de mobile */\r\n margin-left: 16px;\r\n padding-right: 18px;\r\n }\r\n \r\n .value-text {\r\n /* En escritorio no necesitamos este margen, lo reseteamos */\r\n margin-left: 0;\r\n }\r\n }\r\n\r\n .icon-selected svg,\r\n .icon-list svg {\r\n display: block;\r\n width: 100%;\r\n height: auto;\r\n }\r\n\r\n .icon-list {\r\n width: 24px;\r\n height: auto;\r\n margin-right: 8px;\r\n flex-shrink: 0;\r\n }\r\n `;\r\n\r\n public update(changedProperties: Map<string, any>) {\r\n if (changedProperties.has('options')) {\r\n this.filteredOptions = [...this.options];\r\n }\r\n \r\n if (changedProperties.has('defaultValue') || changedProperties.has('options') || changedProperties.has('value')) {\r\n // Ignora la lógica de defaultValue si el componente fue limpiado por el usuario\r\n if (this._isCleared) {\r\n super.update(changedProperties);\r\n return;\r\n }\r\n \r\n const targetValue = this.value || this.defaultValue;\r\n\r\n const match = this.options.find(opt =>\r\n typeof opt === 'string' ? opt === targetValue : (opt as { value: any }).value === targetValue\r\n );\r\n\r\n if (match) {\r\n this.filterValue = typeof match === 'string' ? match : match.label;\r\n this.value = typeof match === 'string' ? match : match.value;\r\n } else {\r\n this.filterValue = '';\r\n this.value = '';\r\n }\r\n }\r\n\r\n super.update(changedProperties);\r\n }\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n this.updateResponsiveMode();\r\n window.addEventListener('resize', this.updateResponsiveModeBound);\r\n document.addEventListener('click', this.handleClickOutside.bind(this));\r\n }\r\n\r\n disconnectedCallback() {\r\n window.removeEventListener('resize', this.updateResponsiveModeBound);\r\n document.removeEventListener('click', this.handleClickOutside.bind(this));\r\n super.disconnectedCallback();\r\n }\r\n\r\n private updateResponsiveModeBound = this.updateResponsiveMode.bind(this);\r\n\r\n private updateResponsiveMode() {\r\n this.isMobile = window.innerWidth <= 940;\r\n }\r\n\r\n handleInputClick(e: Event) {\r\n if (this.isMobile) {\r\n this.mobileFilterValue = '';\r\n }\r\n\r\n if (this.disabled) return;\r\n this.isOpen = !this.isOpen;\r\n this.requestUpdate();\r\n }\r\n\r\n handleInput(e: Event) {\r\n if (!this.filterable) return;\r\n // Un usuario está escribiendo, por lo tanto, no se ha borrado el campo intencionalmente\r\n this._isCleared = false;\r\n \r\n const rawValue = (e.target as HTMLInputElement).value;\r\n const value = this.maxLength ? rawValue.slice(0, this.maxLength).toLowerCase() : rawValue.toLowerCase();\r\n\r\n this.filterValue = value;\r\n this.value = '';\r\n\r\n this.filteredOptions = this.options.filter(option => {\r\n const label = typeof option === 'string' ? option : option.label;\r\n return label.toLowerCase().includes(this.filterValue.toLowerCase());\r\n });\r\n\r\n this.isOpen = true;\r\n\r\n if (this.debounceTimeout) {\r\n clearTimeout(this.debounceTimeout);\r\n }\r\n\r\n this.debounceTimeout = window.setTimeout(() => {\r\n if (this.filterValue.length > 2) {\r\n this.dispatchEvent(new CustomEvent('filter-location', {\r\n detail: { value: this.filterValue },\r\n bubbles: true,\r\n composed: true\r\n }));\r\n }\r\n }, 300);\r\n\r\n this.requestUpdate();\r\n }\r\n\r\n handleMobileInput(e: Event) {\r\n this._isCleared = false;\r\n const rawValue = (e.target as HTMLInputElement).value;\r\n const value = this.maxLength ? rawValue.slice(0, this.maxLength).toLowerCase() : rawValue.toLowerCase();\r\n\r\n this.mobileFilterValue = value;\r\n this.value = '';\r\n\r\n this.filteredOptions = this.options.filter(option => {\r\n const label = typeof option === 'string' ? option : option.label;\r\n return label.toLowerCase().includes(value);\r\n });\r\n\r\n if (this.debounceTimeout) {\r\n clearTimeout(this.debounceTimeout);\r\n }\r\n\r\n this.debounceTimeout = window.setTimeout(() => {\r\n if (value.length > 2) {\r\n this.dispatchEvent(new CustomEvent('filter-location', {\r\n detail: { value },\r\n bubbles: true,\r\n composed: true\r\n }));\r\n }\r\n }, 300);\r\n }\r\n\r\n public handleSelect(option: SelectOption) {\r\n // Cuando se selecciona una opción, el campo ya no está \"borrado\"\r\n this._isCleared = false; \r\n\r\n const value = typeof option === 'string' ? option : option.value;\r\n\r\n this.dispatchEvent(new CustomEvent('option-selected', {\r\n detail: { value },\r\n bubbles: true,\r\n composed: true\r\n }));\r\n\r\n this.filterValue = typeof option === 'string' ? option : option.label;\r\n this.value = value;\r\n this.isOpen = false;\r\n\r\n this.requestUpdate();\r\n }\r\n\r\n handleIconClick() {\r\n if (this.disabled) return;\r\n\r\n if (this.filterable && this.filterValue) {\r\n // El usuario está borrando el campo, activa el icon\r\n this._isCleared = true; \r\n this.filterValue = '';\r\n this.value = '';\r\n this.filteredOptions = [...this.options];\r\n this.dispatchEvent(new CustomEvent('option-selected', {\r\n detail: { value: '' },\r\n bubbles: true,\r\n composed: true\r\n }));\r\n this.isOpen = false;\r\n } else {\r\n this.isOpen = !this.isOpen;\r\n }\r\n\r\n this.requestUpdate();\r\n }\r\n\r\n handleClickOutside(e: Event) {\r\n const target = e.target;\r\n if (!(target instanceof Node)) return;\r\n\r\n if (!this.contains(target)) {\r\n this.isOpen = false;\r\n this.requestUpdate();\r\n }\r\n }\r\n\r\n handleKeyDown(e: KeyboardEvent) {\r\n const { key } = e;\r\n if (!this.isOpen && (key === 'Enter' || key === ' ')) {\r\n e.preventDefault();\r\n this.isOpen = true;\r\n return;\r\n }\r\n\r\n if (this.isOpen) {\r\n if (key === 'ArrowDown') {\r\n e.preventDefault();\r\n this.highlightedIndex = Math.min(this.highlightedIndex + 1, this.filteredOptions.length - 1);\r\n this.requestUpdate();\r\n } else if (key === 'ArrowUp') {\r\n e.preventDefault();\r\n this.highlightedIndex = Math.max(this.highlightedIndex - 1, 0);\r\n this.requestUpdate();\r\n } else if (key === 'Enter') {\r\n e.preventDefault();\r\n const option = this.filteredOptions[this.highlightedIndex];\r\n if (option) {\r\n this.handleSelect(option);\r\n }\r\n } else if (key === 'Escape') {\r\n e.preventDefault();\r\n this.isOpen = false;\r\n }\r\n }\r\n }\r\n\r\n private renderSelectedIcon() {\r\n const selectedOption = this.options.find(opt =>\r\n typeof opt === 'string' ? opt === this.value : (opt as { value: any }).value === this.value\r\n );\r\n\r\n // Se asegura de que el ícono exista y sea un string antes de usar unsafeSVG\r\n if (selectedOption && typeof selectedOption !== 'string' && selectedOption.icon && typeof selectedOption.icon === 'string') {\r\n // Usamos innerHTML para inyectar el SVG. Esto es menos seguro que unsafeSVG,\r\n // Se asume que los icons provienen de una fuente segura y confiable (Angular se encargará de la sanitización y seguridad del icon).\r\n return html`<span class=\"icon-selected\" .innerHTML=\"${selectedOption.icon}\"></span>`;\r\n }\r\n \r\n return nothing;\r\n }\r\n\r\n private renderOptionIcon(icon?: string) {\r\n if( !icon || typeof icon !== 'string' ) return nothing;\r\n\r\n // Usamos innerHTML para inyectar el icon.\r\n return html`<span class=\"icon-list\" .innerHTML=\"${icon}\"></span>`;\r\n }\r\n\r\n render() {\r\n const isMobile = this.isMobile;\r\n\r\n return html`\r\n <div class=\"select-container\" style=\"${this.labelColor ? ` --label-color: ${this.labelColor}` : ''}\">\r\n ${ this.renderLabelContainer() }\r\n \r\n <div class=\"list-container\">\r\n <div class=\"input-container ${this.isOpen ? 'focused' : ''} ${(this.isOpen && this.filteredOptions.length > 0) ? 'open' : ''} ${isMobile ? 'mobile' : ''}\">\r\n <div class=\"input-wrapper ${this.disabled ? 'disabled' : ''}\">\r\n ${isMobile ?\r\n html`\r\n <div\r\n class=\"filter-fake\"\r\n @click=\"${this.handleInputClick}\"\r\n @keydown=\"${this.handleKeyDown}\"\r\n tabindex=\"0\"\r\n role=\"combobox\"\r\n aria-expanded=\"${this.isOpen}\"\r\n aria-controls=\"options-list\"\r\n aria-haspopup=\"listbox\"\r\n aria-activedescendant=\"\"\r\n >\r\n ${this.renderSelectedIcon()}\r\n <span class=\"value-text\">${this.filterValue || this.placeholder}</span>\r\n </div>\r\n `\r\n : html`\r\n ${this.renderSelectedIcon()}\r\n\r\n <input\r\n class=\"filter-input\"\r\n .value=\"${this.filterValue || ''}\"\r\n @click=\"${this.handleInputClick}\"\r\n @keydown=\"${this.handleKeyDown}\"\r\n @input=${this.handleInput}\r\n placeholder=\"${this.filterValue ? '' : this.placeholder}\"\r\n ?disabled=\"${this.disabled}\"\r\n ?readonly=\"${!this.filterable}\"\r\n maxlength=\"${this.maxLength ?? ''}\"\r\n />\r\n `\r\n }\r\n\r\n <button\r\n class=\"icon-button\"\r\n @click=\"${this.handleIconClick}\"\r\n ?disabled=\"${this.disabled}\"\r\n >\r\n ${this.filterable && this.filterValue\r\n ? html`<randstad-icon name=\"close\" size=\"24px\"></randstad-icon>`\r\n : this.isOpen && this.filteredOptions.length > 0\r\n ? html`<randstad-icon name=\"arrow_up\" size=\"24px\"></randstad-icon>`\r\n : html`<randstad-icon name=\"arrow_down\" size=\"24px\"></randstad-icon>`\r\n }\r\n </button>\r\n </div>\r\n\r\n ${!isMobile && this.isOpen && this.filteredOptions.length > 0\r\n ? html`\r\n <ul class=\"options-list\">\r\n ${this.filteredOptions.map((option, index) => {\r\n const label = typeof option === 'string' ? option : option.label;\r\n const isDisabled = typeof option === 'object' && option.disabled;\r\n const icon = typeof option === 'object' ? option.icon : undefined;\r\n \r\n return html`\r\n <li\r\n class=\"${isDisabled ? 'disabled' : ''} ${index === this.highlightedIndex ? 'highlighted' : ''}\"\r\n role=\"option\"\r\n aria-selected=\"${index === this.highlightedIndex}\"\r\n @click=\"${() => {\r\n if (!isDisabled) this.handleSelect(option);\r\n }}\"\r\n >\r\n ${this.renderOptionIcon(icon)}\r\n ${label}\r\n </li>\r\n `;\r\n })}\r\n </ul>\r\n `\r\n : nothing\r\n }\r\n </div>\r\n\r\n ${ this.renderError() }\r\n </div>\r\n\r\n ${ this.renderHelper() }\r\n </div>\r\n\r\n ${isMobile && this.isOpen\r\n ? html`\r\n <div class=\"mobile-backdrop\" @click=\"${() => { this.isOpen = false; }}\">\r\n <div class=\"mobile-modal\" @click=\"${(e: Event) => e.stopPropagation()}\">\r\n <div class=\"modal-input-container\">\r\n <input\r\n class=\"filter-input\"\r\n .value=\"${this.mobileFilterValue || ''}\"\r\n @input=${(e: Event) => this.handleMobileInput(e)}\r\n placeholder=\"${this.placeholder}\"\r\n maxlength=\"${this.maxLength ?? ''}\"\r\n />\r\n <button class=\"modal-close-button\" @click=\"${() => { this.isOpen = false; }}\">\r\n <randstad-icon name=\"close\" size=\"20px\"></randstad-icon>\r\n </button>\r\n </div>\r\n \r\n <ul class=\"options-list\">\r\n ${this.filteredOptions.map((option, index) => {\r\n const label = typeof option === 'string' ? option : option.label;\r\n const isDisabled = typeof option === 'object' && option.disabled;\r\n const icon = typeof option === 'object' ? option.icon : undefined;\r\n \r\n return html`\r\n <li\r\n class=\"${isDisabled ? 'disabled' : ''} ${index === this.highlightedIndex ? 'highlighted' : ''}\"\r\n role=\"option\"\r\n aria-selected=\"${index === this.highlightedIndex}\"\r\n @click=\"${() => {\r\n if (!isDisabled) this.handleSelect(option);\r\n }}\"\r\n >\r\n ${this.renderOptionIcon(icon)}\r\n ${label}\r\n </li>\r\n `;\r\n })}\r\n </ul>\r\n </div>\r\n </div>\r\n `\r\n : nothing\r\n }\r\n `;\r\n }\r\n}","const globalStyles = new CSSStyleSheet();\r\n\r\nglobalStyles.replaceSync(`\r\n @font-face {\r\n font-family: 'Graphik';\r\n src: url('/src/assets/font/Graphik-Regular.woff2') format('woff2'),\r\n url('/src/assets/font/Graphik-Regular.woff') format('woff'),\r\n url('/src/assets/font/Graphik-Regular.eot') format('embedded-opentype');\r\n font-weight: normal;\r\n font-style: normal;\r\n }\r\n\r\n .body-s {\r\n font-weight: 400;\r\n font-size: 14px;\r\n line-height: 100%;\r\n letter-spacing: 0%;\r\n color: green;\r\n }\r\n\r\n .body-l {\r\n font-family: Graphik;\r\n font-size: 18px;\r\n font-style: normal;\r\n font-weight: 400;\r\n line-height: 30px;\r\n }\r\n`);\r\n\r\nexport default globalStyles;","import { LitElement, html, css } from 'lit';\r\nimport globalStyles from '../styles/globalStyles';\r\nimport { bodyS } from '../styles/fontStyles';\r\n\r\nclass RandstadSnackbar extends LitElement {\r\n type: string = 'informative';\r\n icon: string = 'info';\r\n message: string = 'Este es un mensaje.';\r\n open: boolean = false;\r\n position: string = 'bottom-center';\r\n private isMobile = false;\r\n\r\n static styles = [\r\n globalStyles,\r\n css`\r\n :host {\r\n display: flex;\r\n position: fixed;\r\n align-items: center;\r\n max-width: 100vw;\r\n height: auto;\r\n z-index: 9999;\r\n }\r\n\r\n :host([position=\"top-left\"]) {\r\n top: 16px;\r\n left: 16px;\r\n right: auto;\r\n transform: none;\r\n justify-content: flex-start;\r\n }\r\n\r\n :host([position=\"top-center\"]) {\r\n top: 16px;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n justify-content: center;\r\n }\r\n\r\n :host([position=\"top-right\"]) {\r\n top: 16px;\r\n right: 16px;\r\n left: auto;\r\n transform: none;\r\n justify-content: flex-end;\r\n }\r\n\r\n :host([position=\"bottom-left\"]) {\r\n bottom: 16px;\r\n left: 16px;\r\n right: auto;\r\n transform: none;\r\n justify-content: flex-start;\r\n }\r\n\r\n :host([position=\"bottom-center\"]) {\r\n bottom: 16px;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n justify-content: center;\r\n }\r\n\r\n :host([position=\"bottom-right\"]) {\r\n bottom: 16px;\r\n right: 16px;\r\n left: auto;\r\n transform: none;\r\n justify-content: flex-end;\r\n }\r\n\r\n :host(.mobile) {\r\n bottom: 16px !important;\r\n top: auto !important;\r\n left: 50% !important;\r\n transform: translateX(-50%) !important;\r\n justify-content: center !important;\r\n width: 100%;\r\n }\r\n\r\n :host(.mobile) .container {\r\n width: 90vw !important;\r\n }\r\n\r\n .container {\r\n ${bodyS};\r\n display: flex;\r\n align-items: center;\r\n box-sizing: border-box;\r\n min-height: 48px;\r\n min-width: 270px;\r\n max-width: 480px;\r\n border-radius: 4px;\r\n padding: 8px;\r\n gap: 8px;\r\n white-space: nowrap;\r\n color: var(--white);\r\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);\r\n }\r\n\r\n .message {\r\n display: block;\r\n display: -webkit-box;\r\n -webkit-box-orient: vertical;\r\n -webkit-line-clamp: 2;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: normal;\r\n max-height: calc(2 * 25px);\r\n line-height: 25px;\r\n word-break: break-word;\r\n max-width: 100%;\r\n }\r\n\r\n .container {\r\n color: var(--white);\r\n }\r\n randstad-icon {\r\n color: var(--white);\r\n }\r\n randstad-icon svg {\r\n fill: var(--white);\r\n }\r\n\r\n .icon {\r\n font-size: 18px;\r\n }\r\n .hidden {\r\n display: none;\r\n }\r\n .success {\r\n background-color: var(--ui-positive);\r\n }\r\n .error {\r\n background-color: var(--ui-negative);\r\n }\r\n .warning {\r\n background-color: var(--ui-warning);\r\n }\r\n .informative {\r\n background-color: var(--ui-informative);\r\n }\r\n `\r\n ];\r\n\r\n static get properties() {\r\n return {\r\n type: { type: String },\r\n icon: { type: String },\r\n message: { type: String },\r\n open: { type: Boolean },\r\n position: { type: String, reflect: true },\r\n };\r\n }\r\n\r\n constructor() {\r\n super();\r\n this.updateResponsiveStyles = this.updateResponsiveStyles.bind(this);\r\n }\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n window.addEventListener('resize', this.updateResponsiveStyles);\r\n this.updateResponsiveStyles();\r\n }\r\n\r\n disconnectedCallback() {\r\n window.removeEventListener('resize', this.updateResponsiveStyles);\r\n super.disconnectedCallback();\r\n }\r\n\r\n updateResponsiveStyles() {\r\n const isMobile = window.innerWidth <= 940;\r\n this.classList.toggle('mobile', isMobile);\r\n }\r\n\r\n render() {\r\n const ariaRole = this.type === 'error' || this.type === 'warning' ? 'alert' : 'status';\r\n return html`\r\n <div\r\n class=\"container ${this.open ? '' : 'hidden'} ${this.type}\"\r\n role=\"${ariaRole}\"\r\n aria-live=\"polite\"\r\n >\r\n <randstad-icon name=${this.icon} size=\"24px\" color=\"white\"></randstad-icon>\r\n <span class=\"message\">${this.message}</span>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ncustomElements.define('randstad-snackbar', RandstadSnackbar);","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n@customElement('custom-stepper')\r\nexport class CustomStepper extends LitElement {\r\n @property({ type: Number }) totalSteps = 4;\r\n @property({ type: Number }) currentStep = 0;\r\n\r\n static styles = css`\r\n .stepper {\r\n display: flex;\r\n gap: 20px;\r\n align-items: center;\r\n }\r\n\r\n .step {\r\n width: 20px;\r\n height: 20px;\r\n border-radius: 50%;\r\n background-color: var(--white);\r\n border: 1px solid var(--secondary-color-20);\r\n position: relative;\r\n box-sizing: content-box;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 12px;\r\n color: var(--secondary-color-20);\r\n }\r\n\r\n .step .inner-circle {\r\n width: 4px;\r\n height: 4px;\r\n border-radius: 50%;\r\n background-color: var(--white);\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n image-rendering: -webkit-optimize-contrast;\r\n image-rendering: crisp-edges;\r\n backface-visibility: hidden;\r\n transform-style: preserve-3d;\r\n }\r\n\r\n .step.completed {\r\n background-color: var(--primary-color);\r\n border: 1px solid var(--primary-color);\r\n }\r\n\r\n .step.completed randstad-icon {\r\n color: white;\r\n }\r\n\r\n .step.active {\r\n background-color: var(--white);\r\n border: 1px solid var(--primary-color);\r\n }\r\n\r\n .step.active .inner-circle {\r\n background-color: var(--primary-color);\r\n }\r\n\r\n .step.active .pulse-circle {\r\n width: 12px;\r\n height: 12px;\r\n border-radius: 50%;\r\n background-color: var(--primary-color);\r\n opacity: 0.25;\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%) scale(0.6);\r\n animation: pulse 2000ms ease-in-out infinite;\r\n image-rendering: -webkit-optimize-contrast;\r\n image-rendering: crisp-edges;\r\n backface-visibility: hidden;\r\n }\r\n\r\n @keyframes pulse {\r\n 0% {\r\n transform: translate(-50%, -50%) scale(0.6);\r\n }\r\n 80%, 100% {\r\n transform: translate(-50%, -50%) scale(1.2);\r\n }\r\n }\r\n\r\n .step,\r\n .inner-circle,\r\n .pulse-circle {\r\n will-change: transform;\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n }\r\n `;\r\n\r\n render() {\r\n return html`\r\n <div class=\"stepper\">\r\n ${Array.from({ length: this.totalSteps }, (_, index) => html`\r\n <div\r\n class=\"step ${index < this.currentStep ? 'completed' : index === this.currentStep ? 'active' : ''}\"\r\n >\r\n ${index < this.currentStep\r\n ? html`<randstad-icon name=\"tick-circle\" size=\"16px\"></randstad-icon>`\r\n : index === this.currentStep\r\n ? html`\r\n <span class=\"pulse-circle\"></span>\r\n <span class=\"inner-circle\"></span>\r\n `\r\n : html`<span class=\"inner-circle\"></span>`}\r\n </div>\r\n `)}\r\n </div>\r\n `;\r\n }\r\n}","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport { bodyM, titleXXS } from '../styles/fontStyles';\r\n\r\ninterface TabItem {\r\n label: string;\r\n icon: string;\r\n value: string;\r\n}\r\n\r\n@customElement('tabs-bar')\r\nexport class TabsBar extends LitElement {\r\n @property({ type: Array }) tabs: TabItem[] = [];\r\n @property({ type: String }) selected: string = '';\r\n @state() private internalSelected: string = '';\r\n @state() private showPrev = false;\r\n @state() private showNext = false;\r\n\r\n private readonly SCROLL_OFFSET = 56;\r\n\r\n\r\n static styles = css`\r\n :host {\r\n display: block;\r\n border-bottom: 1px solid #E7E8EC;\r\n font-family: \"Graphik\", sans-serif;\r\n }\r\n\r\n .tab-wrapper {\r\n display: flex;\r\n justify-content: flex-start;\r\n }\r\n\r\n .tab {\r\n ${titleXXS};\r\n display: flex;\r\n gap: 8px;\r\n flex-direction: row;\r\n padding: 24px;\r\n align-items: center;\r\n text-align: center;\r\n color: #6F758D;\r\n cursor: pointer;\r\n text-decoration: none;\r\n position: relative;\r\n flex: 0 0 auto;\r\n min-width: 0;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n transition: background-color 0.2s ease-in-out;\r\n }\r\n\r\n .tab:hover {\r\n background-color: #E7E8EC;\r\n }\r\n\r\n .tab.active {\r\n color: #2175D9;\r\n }\r\n\r\n .tab.active::after {\r\n height: 2px;\r\n background-color: #2175D9;\r\n content: '';\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n width: 100%;\r\n pointer-events: none;\r\n }\r\n\r\n .tab.active img {\r\n filter: brightness(0) saturate(100%) invert(28%) sepia(87%) saturate(3514%) hue-rotate(202deg) brightness(92%) contrast(101%);\r\n }\r\n\r\n img {\r\n width: 24px;\r\n height: 24px;\r\n }\r\n\r\n .scroll-container {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n overflow: hidden;\r\n }\r\n\r\n .tab-wrapper {\r\n display: flex;\r\n justify-content: flex-start;\r\n gap: 0px;\r\n overflow-x: auto;\r\n scroll-behavior: smooth;\r\n scrollbar-width: none; /* Firefox */\r\n -ms-overflow-style: none; /* IE 10+ */\r\n flex: 1;\r\n }\r\n\r\n .tab-wrapper::-webkit-scrollbar {\r\n display: none;\r\n }\r\n\r\n .scroll-button {\r\n border: none;\r\n font-size: 24px;\r\n cursor: pointer;\r\n z-index: 1;\r\n width: 56px;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n color: #2175D9;\r\n padding: 0px;\r\n }\r\n\r\n .scroll-button.prev {\r\n justify-content: flex-start;\r\n position: absolute;\r\n left: 0;\r\n background: linear-gradient(90deg, #FFFFFF 0%, #FFFFFF 50%, rgba(255, 255, 255, 0) 100%);\r\n }\r\n\r\n .scroll-button.next {\r\n justify-content: flex-end;\r\n position: absolute;\r\n right: 0;\r\n background: linear-gradient(270deg, #FFFFFF 0%, #FFFFFF 50%, rgba(255, 255, 255, 0) 100%);\r\n }\r\n\r\n @media (max-width: 940px) {\r\n .tab {\r\n ${bodyM};\r\n padding: 16px;\r\n }\r\n }\r\n `;\r\n\r\n firstUpdated() {\r\n this.handleScroll();\r\n }\r\n\r\n updated(changed: Map<string, any>) {\r\n if (changed.has('selected')) {\r\n this.internalSelected = this.selected;\r\n }\r\n }\r\n\r\n private selectTab(value: string) {\r\n this.internalSelected = value;\r\n const selectedTab = this.tabs.find(tab => tab.value === value);\r\n if (selectedTab) {\r\n this.dispatchEvent(new CustomEvent('tab-change', {\r\n detail: selectedTab,\r\n bubbles: true,\r\n composed: true,\r\n }));\r\n }\r\n }\r\n\r\n private scrollTabsLeft() {\r\n const wrapper = this.renderRoot.querySelector('.tab-wrapper');\r\n if (!wrapper) return;\r\n\r\n const scrollLeft = wrapper.scrollLeft;\r\n const tabs = Array.from(wrapper.querySelectorAll('.tab')) as HTMLElement[];\r\n\r\n for (let i = tabs.length - 1; i >= 0; i--) {\r\n const el = tabs[i];\r\n const tabLeft = el.offsetLeft;\r\n\r\n // Esta es la nueva condición clave 👇\r\n if (tabLeft < scrollLeft + this.SCROLL_OFFSET - 1) {\r\n const scrollTarget = tabLeft - this.SCROLL_OFFSET;\r\n wrapper.scrollTo({ left: scrollTarget, behavior: 'smooth' });\r\n break;\r\n }\r\n }\r\n\r\n setTimeout(() => this.handleScroll(), 300);\r\n }\r\n\r\n private scrollTabsRight() {\r\n const wrapper = this.renderRoot.querySelector('.tab-wrapper');\r\n if (!wrapper) return;\r\n\r\n const wrapperLeft = wrapper.scrollLeft;\r\n const tabs = Array.from(wrapper.querySelectorAll('.tab')) as HTMLElement[];\r\n\r\n for (const el of tabs) {\r\n if (el.offsetLeft > wrapperLeft + this.SCROLL_OFFSET) {\r\n const scrollTarget = el.offsetLeft - this.SCROLL_OFFSET;\r\n wrapper.scrollTo({ left: scrollTarget, behavior: 'smooth' });\r\n break;\r\n }\r\n }\r\n\r\n setTimeout(() => this.handleScroll(), 300);\r\n }\r\n\r\n private handleScroll = () => {\r\n const wrapper = this.renderRoot.querySelector('.tab-wrapper');\r\n if (!wrapper) return;\r\n\r\n const { scrollLeft, scrollWidth, clientWidth } = wrapper;\r\n\r\n this.showPrev = scrollLeft > 0;\r\n this.showNext = scrollLeft + clientWidth < scrollWidth - 1;\r\n };\r\n\r\n render() {\r\n return html`\r\n <div class=\"scroll-container\">\r\n ${this.showPrev ? html`\r\n <button class=\"scroll-button prev\" @click=${this.scrollTabsLeft}>\r\n <randstad-icon name=\"arrow_left\" size=\"36px\"></randstad-icon>\r\n </button>\r\n ` : null}\r\n\r\n <div class=\"tab-wrapper\" @scroll=${this.handleScroll}>\r\n ${this.tabs.map(tab => html`\r\n <div class=\"tab ${this.internalSelected === tab.value ? 'active' : ''}\"\r\n @click=${() => this.selectTab(tab.value)}>\r\n <img src=\"/assets/icons/${tab.icon}\" alt=\"${tab.label}\" />\r\n <span>${tab.label}</span>\r\n </div>\r\n `)}\r\n </div>\r\n\r\n ${this.showNext ? html`\r\n <button class=\"scroll-button next\" @click=${this.scrollTabsRight}>\r\n <randstad-icon name=\"arrow_right\" size=\"36px\"></randstad-icon>\r\n </button>\r\n ` : null}\r\n </div>\r\n `;\r\n }\r\n}\r\n","import { css } from 'lit';\n \nexport const progressBarUploadStyles = css`\n .progress-bar-container {\n min-height: 23px;\n display: flex;\n align-items: center;\n }\n\n .progress-bar {\n min-width: 80px;\n height: 8px;\n background-color: var(--secondary-color-20);\n border-radius: 999px;\n overflow: hidden;\n }\n\n .progress-bar-fill {\n height: 100%;\n background-color: var(--primary-color);\n transition: width 0.1s ease;\n }\n`;","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport { bodyS, bodyXS } from '../styles/fontStyles';\r\nimport { progressBarUploadStyles } from '../styles/progress-bar-upload';\r\n\r\n@customElement('upload-image')\r\nexport class UploadImage extends LitElement {\r\n @property({ type: Array }) files: File[] = []; \r\n @property({ type: Boolean, reflect: true }) disabled = false;\r\n @property({ type: Number }) simulatedDelay = 0;\r\n\r\n @state() private loading = false;\r\n @state() private progress = 0;\r\n @state() private isDragging = false;\r\n\r\n static styles = css`\r\n ${ progressBarUploadStyles }\r\n\r\n :host {\r\n font-family: 'Graphik', sans-serif;\r\n }\r\n\r\n .container {\r\n display: flex;\r\n gap: 16px;\r\n flex-direction: column;\r\n border: 1px solid var(--secondary-color-10);\r\n border-radius: 4px;\r\n padding: 16px;\r\n align-items: center;\r\n background-color: var(--white);\r\n transition: border 0.2s ease, outline 0.2s ease;\r\n }\r\n\r\n .container.dragging {\r\n border: 1px dashed var(--secondary-color-40);\r\n }\r\n \r\n .icon {\r\n width: 40px;\r\n height: 40px\r\n }\r\n\r\n .text-container {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n gap: 8px;\r\n }\r\n\r\n .text-main {\r\n ${bodyS};\r\n text-align: center;\r\n vertical-align: middle;\r\n color: var(--secondary-color-80);\r\n }\r\n\r\n .text-secondary {\r\n ${bodyXS};\r\n text-align: center;\r\n vertical-align: middle;\r\n color: var(--secondary-color-60);\r\n }\r\n\r\n .text-tertiary {\r\n ${bodyXS};\r\n text-align: center;\r\n vertical-align: middle;\r\n color: var(--secondary-color-40);\r\n }\r\n\r\n .button {\r\n ${bodyXS};\r\n background-color: var(--primary-color);\r\n border: none;\r\n padding: 4px 16px;\r\n cursor: pointer;\r\n border-radius: 4px;\r\n color: var(--white);\r\n text-align: center;\r\n vertical-align: middle;\r\n }\r\n\r\n :host([disabled]) .button {\r\n background-color: var(--secondary-color-20);\r\n color: var(--secondary-color-80);\r\n cursor: default;\r\n }\r\n\r\n input[type=\"file\"] {\r\n display: none;\r\n }\r\n `;\r\n\r\n private async handleFiles(files: FileList | null) {\r\n if (this.loading || this.disabled) return;\r\n \r\n // Verificamos que this.files sea un array antes de usar su longitud\r\n const currentFiles = Array.isArray(this.files) ? this.files : [];\r\n const selected = Array.from(files || []).slice(0, 3 - currentFiles.length);\r\n\r\n // Si la propiedad simulatedDelay no está definida (o es 0), se establece en 0. Si se especifica un valor, lo usa.\r\n const delay = this.simulatedDelay ?? 0;\r\n\r\n if (delay <= 0) {\r\n this.files = [...currentFiles, ...selected];\r\n this.dispatchEvent(new CustomEvent('files-changed', { detail: this.files }));\r\n return;\r\n }\r\n \r\n this.loading = true;\r\n this.progress = 0;\r\n\r\n //Se completó el ciclo de actualización de Lit\r\n await this.updateComplete;\r\n\r\n const startTime = Date.now();\r\n const interval = setInterval(() => {\r\n const elapsedTime = Date.now() - startTime;\r\n const newProgress = Math.min(Math.round((elapsedTime / delay) * 100), 100);\r\n\r\n this.progress = newProgress;\r\n \r\n if (this.progress >= 100) {\r\n clearInterval(interval);\r\n\r\n this.files = [...currentFiles, ...selected];\r\n this.loading = false;\r\n this.progress = 0;\r\n this.dispatchEvent(new CustomEvent('files-changed', { detail: this.files }));\r\n }\r\n }, 10);\r\n }\r\n\r\n private onFileInputChange(e: Event) {\r\n const target = e.target as HTMLInputElement;\r\n this.handleFiles(target.files);\r\n }\r\n\r\n private onDrop(e: DragEvent) {\r\n e.preventDefault();\r\n if ( this.disabled ) return;\r\n\r\n this.isDragging = false;\r\n this.handleFiles(e.dataTransfer?.files || null);\r\n }\r\n\r\n private onDragOver(e: DragEvent) {\r\n e.preventDefault();\r\n\r\n if ( this.disabled ) return;\r\n this.isDragging = true;\r\n }\r\n\r\n private onDragLeave(e: DragEvent) {\r\n e.preventDefault();\r\n\r\n if ( this.disabled ) return;\r\n this.isDragging = false;\r\n }\r\n\r\n render() {\r\n return html`\r\n <div class=\"container ${this.isDragging ? 'dragging' : ''}\"\r\n @drop=\"${this.onDrop}\"\r\n @dragover=\"${this.onDragOver}\"\r\n @dragleave=\"${this.onDragLeave}\"\r\n >\r\n <img class=\"icon\"\r\n src=${this.disabled\r\n ? '/assets/img/image-upload-disabled.svg'\r\n : '/assets/img/image-upload-circle.svg'}\r\n alt=\"Subir imagen\" \r\n />\r\n\r\n <div class=\"text-container\">\r\n <div class=\"text-main\">subí hasta 3 imágenes</div>\r\n\r\n <div class=\"text-secondary\">\r\n Podés agregar un archivo o arrastrar y soltar acá\r\n </div>\r\n\r\n <div class=\"text-tertiary\">.jpg, .jpeg, .png</div>\r\n </div>\r\n\r\n ${this.loading\r\n ? html`\r\n <div class=\"progress-bar-container\">\r\n <div class=\"progress-bar\" role=\"progressbar\" aria-label=\"Subiendo archivo…\">\r\n <div class=\"progress-bar-fill\" style=\"width: ${this.progress}%;\"></div>\r\n </div>\r\n </div>\r\n `\r\n\r\n : html`\r\n <label class=\"button\">\r\n agregar archivo\r\n <input type=\"file\" accept=\".jpg,.jpeg,.png\" multiple @change=\"${this.onFileInputChange}\" />\r\n </label>\r\n `\r\n }\r\n </div>\r\n `;\r\n }\r\n}","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMonths} function options.\n */\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be added.\n * @param options - The options object\n *\n * @returns The new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\nexport function addMonths(date, amount, options) {\n const _date = toDate(date, options?.in);\n if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return _date;\n }\n const dayOfMonth = _date.getDate();\n\n // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());\n endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n const daysInMonth = endOfDesiredMonth.getDate();\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n _date.setFullYear(\n endOfDesiredMonth.getFullYear(),\n endOfDesiredMonth.getMonth(),\n dayOfMonth,\n );\n return _date;\n }\n}\n\n// Fallback for modularized imports:\nexport default addMonths;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfISOWeek} function options.\n */\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date, options) {\n return startOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeekYear} function options.\n */\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { toDate } from \"../toDate.js\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { constructFrom } from \"../constructFrom.js\";\n\nexport function normalizeDates(context, ...dates) {\n const normalize = constructFrom.bind(\n null,\n context || dates.find((date) => typeof date === \"object\"),\n );\n return dates.map(normalize);\n}\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfDay} function options.\n */\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date, options) {\n const _date = toDate(date, options?.in);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The {@link addYears} function options.\n */\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be added.\n * @param options - The options\n *\n * @returns The new date with the years added\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport function addYears(date, amount, options) {\n return addMonths(date, amount * 12, options);\n}\n\n// Fallback for modularized imports:\nexport default addYears;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfMonth} function options.\n */\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date. The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments.\n * Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed,\n * or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a month\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n _date.setDate(1);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfMonth;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // [TODO] -- I challenge you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // [TODO] -- I challenge you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // [TODO] I challenge you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { formatDistance } from \"./en-US/_lib/formatDistance.js\";\nimport { formatLong } from \"./en-US/_lib/formatLong.js\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.js\";\nimport { localize } from \"./en-US/_lib/localize.js\";\nimport { match } from \"./en-US/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\nimport { startOfYear } from \"./startOfYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDayOfYear} function options.\n */\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date, options) {\n const _date = toDate(date, options?.in);\n const diff = differenceInCalendarDays(_date, startOfYear(_date));\n const dayOfYear = diff + 1;\n return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","import { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInDay } from \"./constants.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link differenceInCalendarDays} function options.\n */\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - The options object\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const laterStartOfDay = startOfDay(laterDate_);\n const earlierStartOfDay = startOfDay(earlierDate_);\n\n const laterTimestamp =\n +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);\n const earlierTimestamp =\n +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);\n\n // Round the number of days to the nearest integer because the number of\n // milliseconds in a day is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfYear} function options.\n */\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date, options) {\n const date_ = toDate(date, options?.in);\n date_.setFullYear(date_.getFullYear(), 0, 1);\n date_.setHours(0, 0, 0, 0);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeek} function options.\n */\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getISOWeekYear } from \"./getISOWeekYear.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\n\n/**\n * The {@link startOfISOWeekYear} function options.\n */\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date, options) {\n const year = getISOWeekYear(date, options);\n const fourthOfJanuary = constructFrom(options?.in || date, 0);\n fourthOfJanuary.setFullYear(year, 0, 4);\n fourthOfJanuary.setHours(0, 0, 0, 0);\n return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(options?.in || date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(options?.in || date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (+_date >= +startOfNextYear) {\n return year + 1;\n } else if (+_date >= +startOfThisYear) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { startOfWeekYear } from \"./startOfWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\nexport function getWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getWeekYear } from \"./getWeekYear.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(options?.in || date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","export function addLeadingZeros(number, targetLength) {\n const sign = number < 0 ? \"-\" : \"\";\n const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n return sign + output;\n}\n","import { addLeadingZeros } from \"../addLeadingZeros.js\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n // Year\n y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n },\n\n // Month\n M(date, token) {\n const month = date.getMonth();\n return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n\n // Day of the month\n d(date, token) {\n return addLeadingZeros(date.getDate(), token.length);\n },\n\n // AM or PM\n a(date, token) {\n const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return dayPeriodEnumValue.toUpperCase();\n case \"aaa\":\n return dayPeriodEnumValue;\n case \"aaaaa\":\n return dayPeriodEnumValue[0];\n case \"aaaa\":\n default:\n return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n }\n },\n\n // Hour [1-12]\n h(date, token) {\n return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n },\n\n // Hour [0-23]\n H(date, token) {\n return addLeadingZeros(date.getHours(), token.length);\n },\n\n // Minute\n m(date, token) {\n return addLeadingZeros(date.getMinutes(), token.length);\n },\n\n // Second\n s(date, token) {\n return addLeadingZeros(date.getSeconds(), token.length);\n },\n\n // Fraction of second\n S(date, token) {\n const numberOfDigits = token.length;\n const milliseconds = date.getMilliseconds();\n const fractionalSeconds = Math.trunc(\n milliseconds * Math.pow(10, numberOfDigits - 3),\n );\n return addLeadingZeros(fractionalSeconds, token.length);\n },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.js\";\nimport { getISOWeek } from \"../../getISOWeek.js\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.js\";\nimport { getWeek } from \"../../getWeek.js\";\nimport { getWeekYear } from \"../../getWeekYear.js\";\n\nimport { addLeadingZeros } from \"../addLeadingZeros.js\";\nimport { lightFormatters } from \"./lightFormatters.js\";\n\nconst dayPeriodEnum = {\n am: \"am\",\n pm: \"pm\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n // Era\n G: function (date, token, localize) {\n const era = date.getFullYear() > 0 ? 1 : 0;\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return localize.era(era, { width: \"abbreviated\" });\n // A, B\n case \"GGGGG\":\n return localize.era(era, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return localize.era(era, { width: \"wide\" });\n }\n },\n\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === \"yo\") {\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, { unit: \"year\" });\n }\n\n return lightFormatters.y(date, token);\n },\n\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n const signedWeekYear = getWeekYear(date, options);\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n // Two digit year\n if (token === \"YY\") {\n const twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n }\n\n // Ordinal number\n if (token === \"Yo\") {\n return localize.ordinalNumber(weekYear, { unit: \"year\" });\n }\n\n // Padding\n return addLeadingZeros(weekYear, token.length);\n },\n\n // ISO week-numbering year\n R: function (date, token) {\n const isoWeekYear = getISOWeekYear(date);\n\n // Padding\n return addLeadingZeros(isoWeekYear, token.length);\n },\n\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n const year = date.getFullYear();\n return addLeadingZeros(year, token.length);\n },\n\n // Quarter\n Q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"QQ\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone quarter\n q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"qq\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // Month\n M: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n case \"M\":\n case \"MM\":\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // J, F, ..., D\n case \"MMMMM\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return localize.month(month, { width: \"wide\", context: \"formatting\" });\n }\n },\n\n // Stand-alone month\n L: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return String(month + 1);\n // 01, 02, ..., 12\n case \"LL\":\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // J, F, ..., D\n case \"LLLLL\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return localize.month(month, { width: \"wide\", context: \"standalone\" });\n }\n },\n\n // Local week of year\n w: function (date, token, localize, options) {\n const week = getWeek(date, options);\n\n if (token === \"wo\") {\n return localize.ordinalNumber(week, { unit: \"week\" });\n }\n\n return addLeadingZeros(week, token.length);\n },\n\n // ISO week of year\n I: function (date, token, localize) {\n const isoWeek = getISOWeek(date);\n\n if (token === \"Io\") {\n return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n\n // Day of the month\n d: function (date, token, localize) {\n if (token === \"do\") {\n return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n }\n\n return lightFormatters.d(date, token);\n },\n\n // Day of year\n D: function (date, token, localize) {\n const dayOfYear = getDayOfYear(date);\n\n if (token === \"Do\") {\n return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n\n // Day of week\n E: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"EEEEE\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"EEEE\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Local day of week\n e: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case \"e\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"ee\":\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n case \"eo\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"eee\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"eeeee\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"eeee\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (same as in `e`)\n case \"c\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"cc\":\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n case \"co\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"ccc\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // T\n case \"ccccc\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"standalone\",\n });\n // Tuesday\n case \"cccc\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // ISO day of week\n i: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n switch (token) {\n // 2\n case \"i\":\n return String(isoDayOfWeek);\n // 02\n case \"ii\":\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n case \"io\":\n return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n // Tue\n case \"iii\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"iiiii\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"iiiiii\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"iiii\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM or PM\n a: function (date, token, localize) {\n const hours = date.getHours();\n const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"aaa\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"aaaaa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n }\n\n switch (token) {\n case \"b\":\n case \"bb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"bbb\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"bbbbb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"BBBBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === \"ho\") {\n let hours = date.getHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return lightFormatters.h(date, token);\n },\n\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === \"Ho\") {\n return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n }\n\n return lightFormatters.H(date, token);\n },\n\n // Hour [0-11]\n K: function (date, token, localize) {\n const hours = date.getHours() % 12;\n\n if (token === \"Ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Hour [1-24]\n k: function (date, token, localize) {\n let hours = date.getHours();\n if (hours === 0) hours = 24;\n\n if (token === \"ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Minute\n m: function (date, token, localize) {\n if (token === \"mo\") {\n return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n }\n\n return lightFormatters.m(date, token);\n },\n\n // Second\n s: function (date, token, localize) {\n if (token === \"so\") {\n return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n }\n\n return lightFormatters.s(date, token);\n },\n\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return \"Z\";\n }\n\n switch (token) {\n // Hours and optional minutes\n case \"X\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case \"XXXX\":\n case \"XX\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case \"XXXXX\":\n case \"XXX\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case \"x\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case \"xxxx\":\n case \"xx\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case \"xxxxx\":\n case \"xxx\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (GMT)\n O: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"O\":\n case \"OO\":\n case \"OOO\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"OOOO\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (specific non-location)\n z: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"z\":\n case \"zz\":\n case \"zzz\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"zzzz\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Seconds timestamp\n t: function (date, token, _localize) {\n const timestamp = Math.trunc(+date / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n\n // Milliseconds timestamp\n T: function (date, token, _localize) {\n return addLeadingZeros(+date, token.length);\n },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = Math.trunc(absOffset / 60);\n const minutes = absOffset % 60;\n if (minutes === 0) {\n return sign + String(hours);\n }\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n if (offset % 60 === 0) {\n const sign = offset > 0 ? \"-\" : \"+\";\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n const minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n","const dateLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"P\":\n return formatLong.date({ width: \"short\" });\n case \"PP\":\n return formatLong.date({ width: \"medium\" });\n case \"PPP\":\n return formatLong.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return formatLong.date({ width: \"full\" });\n }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"p\":\n return formatLong.time({ width: \"short\" });\n case \"pp\":\n return formatLong.time({ width: \"medium\" });\n case \"ppp\":\n return formatLong.time({ width: \"long\" });\n case \"pppp\":\n default:\n return formatLong.time({ width: \"full\" });\n }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n const matchResult = pattern.match(/(P+)(p+)?/) || [];\n const datePattern = matchResult[1];\n const timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n let dateTimeFormat;\n\n switch (datePattern) {\n case \"P\":\n dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n break;\n }\n\n return dateTimeFormat\n .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n const _message = message(token, format, input);\n console.warn(_message);\n if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { formatters } from \"./_lib/format/formatters.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { isValid } from \"./isValid.js\";\nimport { toDate } from \"./toDate.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n * and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const originalDate = toDate(date, options?.in);\n\n if (!isValid(originalDate)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n let parts = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp)\n .map((substring) => {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return { isToken: false, value: \"'\" };\n }\n\n const firstCharacter = substring[0];\n if (firstCharacter === \"'\") {\n return { isToken: false, value: cleanEscapedString(substring) };\n }\n\n if (formatters[firstCharacter]) {\n return { isToken: true, value: substring };\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n return { isToken: false, value: substring };\n });\n\n // invoke localize preprocessor (only for french locales at the moment)\n if (locale.localize.preprocessor) {\n parts = locale.localize.preprocessor(originalDate, parts);\n }\n\n const formatterOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n return parts\n .map((part) => {\n if (!part.isToken) return part.value;\n\n const token = part.value;\n\n if (\n (!options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)) ||\n (!options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token))\n ) {\n warnOrThrowProtectedError(token, formatStr, String(date));\n }\n\n const formatter = formatters[token[0]];\n return formatter(originalDate, token, locale.localize, formatterOptions);\n })\n .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n const matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDate} function options.\n */\n\n/**\n * @name getDate\n * @category Day Helpers\n * @summary Get the day of the month of the given date.\n *\n * @description\n * Get the day of the month of the given date.\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The day of month\n *\n * @example\n * // Which day of the month is 29 February 2012?\n * const result = getDate(new Date(2012, 1, 29))\n * //=> 29\n */\nexport function getDate(date, options) {\n return toDate(date, options?.in).getDate();\n}\n\n// Fallback for modularized imports:\nexport default getDate;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDaysInMonth} function options.\n */\n\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date, considering the context if provided.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The number of days in a month\n *\n * @example\n * // How many days are in February 2000?\n * const result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\nexport function getDaysInMonth(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n const monthIndex = _date.getMonth();\n const lastDayOfMonth = constructFrom(_date, 0);\n lastDayOfMonth.setFullYear(year, monthIndex + 1, 0);\n lastDayOfMonth.setHours(0, 0, 0, 0);\n return lastDayOfMonth.getDate();\n}\n\n// Fallback for modularized imports:\nexport default getDaysInMonth;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * @param date - The date that should be after the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is after the second date\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\nexport function isAfter(date, dateToCompare) {\n return +toDate(date) > +toDate(dateToCompare);\n}\n\n// Fallback for modularized imports:\nexport default isAfter;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param date - The date that should be before the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is before the second date\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport function isBefore(date, dateToCompare) {\n return +toDate(date) < +toDate(dateToCompare);\n}\n\n// Fallback for modularized imports:\nexport default isBefore;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link isSameMonth} function options.\n */\n\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same month (and year)\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\nexport function isSameMonth(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n return (\n laterDate_.getFullYear() === earlierDate_.getFullYear() &&\n laterDate_.getMonth() === earlierDate_.getMonth()\n );\n}\n\n// Fallback for modularized imports:\nexport default isSameMonth;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link isSameYear} function options.\n */\n\n/**\n * @name isSameYear\n * @category Year Helpers\n * @summary Are the given dates in the same year?\n *\n * @description\n * Are the given dates in the same year?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same year\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * const result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport function isSameYear(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n return laterDate_.getFullYear() === earlierDate_.getFullYear();\n}\n\n// Fallback for modularized imports:\nexport default isSameYear;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { constructNow } from \"./constructNow.js\";\nimport { isSameDay } from \"./isSameDay.js\";\n\n/**\n * The {@link isToday} function options.\n */\n\n/**\n * @name isToday\n * @category Day Helpers\n * @summary Is the given date today?\n * @pure false\n *\n * @description\n * Is the given date today?\n *\n * @param date - The date to check\n * @param options - An object with options\n *\n * @returns The date is today\n *\n * @example\n * // If today is 6 October 2014, is 6 October 14:00:00 today?\n * const result = isToday(new Date(2014, 9, 6, 14, 0))\n * //=> true\n */\nexport function isToday(date, options) {\n return isSameDay(\n constructFrom(options?.in || date, date),\n constructNow(options?.in || date),\n );\n}\n\n// Fallback for modularized imports:\nexport default isToday;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link isSameDay} function options.\n */\n\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same day (and year and month)\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\nexport function isSameDay(laterDate, earlierDate, options) {\n const [dateLeft_, dateRight_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n return +startOfDay(dateLeft_) === +startOfDay(dateRight_);\n}\n\n// Fallback for modularized imports:\nexport default isSameDay;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name constructNow\n * @category Generic Helpers\n * @summary Constructs a new current date using the passed value constructor.\n * @pure false\n *\n * @description\n * The function constructs a new current date using the constructor from\n * the reference date. It helps to build generic functions that accept date\n * extensions and use the current date.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * @param date - The reference date to take constructor from\n *\n * @returns Current date initialized using the given date constructor\n *\n * @example\n * import { constructNow, isSameDay } from 'date-fns'\n *\n * function isToday<DateType extends Date>(\n * date: DateArg<DateType>,\n * ): boolean {\n * // If we were to use `new Date()` directly, the function would behave\n * // differently in different timezones and return false for the same date.\n * return isSameDay(date, constructNow(date));\n * }\n */\nexport function constructNow(date) {\n return constructFrom(date, Date.now());\n}\n\n// Fallback for modularized imports:\nexport default constructNow;\n","import { LitElement, html, css } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { bodyL, bodyM, bodyS } from '../styles/fontStyles';\n\nimport * as dateFns from \"date-fns\";\n@customElement(\"calendar-overlay\")\nexport class CalendarOverlay extends LitElement {\n /**\n * La fecha actualmente seleccionada por el usuario.\n * Se utiliza para marcar visualmente el día seleccionado en el calendario.\n */\n @property({ type: Object }) selectedDate: Date | null = null;\n\n /**\n * La fecha que define el mes y año que se muestra actualmente en la vista del calendario.\n * Cambia al navegar entre meses o años.\n */\n @property({ type: Object }) viewDate: Date = new Date();\n\n @property({ type: Boolean }) isMobile = false;\n\n @property({ type: Number }) calendarWidth: number = 0;\n\n @property({ type: Object }) minDate: Date | null = null;\n @property({ type: Object }) maxDate: Date | null = null;\n\n /**\n * El estado de la vista actual del calendario, que puede ser 'días', 'meses' o 'años'.\n * Determina qué cuadrícula se renderiza en el overlay.\n */\n @state() private currentView: 'days' | 'months' | 'years' = 'days';\n\n static styles = css`\n /* Estilos generales del contenedor del calendario (escritorio) */\n .calendar-container {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 10;\n border: var(--border-weight-default, 1px) solid var(--secondary-randstad-dark-blue-10, #e7e8ec);\n background: var(--secondary-white, #fff);\n border-radius: 4px;\n margin-top: 8px;\n padding: 16px;\n box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1);\n font-family: Graphik;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n min-width: 360px;\n }\n \n /* El header no tiene margin-bottom */\n .header {\n margin-bottom: 0;\n }\n \n /* El separador no tiene margin-top para no dejar espacio con el header */\n .weekdays-separator {\n width: 100%;\n height: 1px;\n background-color: var(--secondary-randstad-dark-blue-10, #e7e8ec);\n margin-top: 0;\n margin-bottom: 16px; \n }\n\n /* Estilos del encabezado de navegación (botones y título) */\n .header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n /* Estilos generales para los botones de navegación */\n .nav-button {\n background: none;\n border: none;\n cursor: pointer;\n padding: 8px;\n color: var(--primary-randstad-blue-70, #2175d9);\n border-radius: 50%;\n transition: background-color 0.2s;\n gap: 8px;\n }\n\n .nav-button:hover {\n background-color: var(--secondary-randstad-light-blue-10, #e8f1fb);\n }\n\n .header-left,\n .header-right {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .month-year-button {\n ${bodyS}\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n background: none;\n border: none;\n cursor: pointer;\n transition: background-color 0.2s;\n color: var(--secondary-randstad-dark-blue-80, #3c4257);\n border-radius: 16px;\n width: auto;\n height: 41px;\n padding: 8px;\n }\n\n .month-year-button:hover {\n background-color: var(--secondary-randstad-light-blue-10, #e8f1fb);\n }\n\n .month-year-button randstad-icon {\n color: var(--primary-randstad-blue-70, #2175d9);\n }\n\n /* Contenedor de los nombres de los días de la semana */\n .weekdays {\n display: grid;\n place-items: center; \n grid-template-columns: repeat(7, 1fr);\n text-align: center;\n color: var(--secondary-randstad-dark-blue-60, #6c7387);\n opacity: 1;\n margin-bottom: 8px; /* Gap de 8px entre nombres y días */\n font-size: 16px;\n font-style: normal;\n font-weight: 500;\n margin-top: 0;\n }\n\n /* Cuadrícula para los días del mes */\n .days-grid {\n display: grid;\n place-items: center;\n grid-template-columns: repeat(7, 1fr);\n gap: 8px;\n }\n\n /* Estilos para cada botón de día */\n .day {\n ${bodyM}\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n cursor: pointer;\n background-color: transparent;\n border: none;\n color: var(--secondary-randstad-dark-blue-80, #3c4257);\n padding: 0;\n position: relative;\n }\n\n .day:hover {\n background-color: var(--secondary-randstad-light-blue-10, #e8f1fb);\n }\n\n /* Estilos para el día, mes y año de hoy */\n .day.today {\n color: var(--primary-randstad-blue-70, #2175d9);\n font-weight: 500;\n }\n\n .day.today::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n width: 100%;\n height: 2px;\n background-color: var(--primary-randstad-blue-70, #2175d9);\n border-radius: 2px;\n }\n\n /* Estilos para el día seleccionado */\n .day.selected {\n background-color: var(--primary-randstad-blue-70, #2175d9);\n color: var(--secondary-white, #fff);\n font-weight: 500;\n }\n\n /* Estilos para el día seleccionado cuando se muestra en un mes o año diferente */\n .day.secondary-selected {\n background-color: var(--secondary-randstad-dark-blue-10, #e7e8ec);\n color: var(--secondary-randstad-dark-blue-80, #3c4257);\n font-weight: 500;\n border: 1px solid var(--secondary-randstad-dark-blue-10, #e7e8ec);\n }\n\n /* Grillas para selección de año y mes */\n .year-grid,\n .month-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n }\n\n /* Botones de año y mes en la grilla */\n .year-button,\n .month-button {\n ${bodyM}\n background: var(--secondary-white, #fff);\n border: 1px solid transparent;\n color: var(--secondary-randstad-dark-blue-80, #3c4257);\n cursor: pointer;\n transition: background-color 0.2s, border-color 0.2s;\n border-radius: 9999px;\n padding: 4px 16px;\n text-align: center;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 38px;\n }\n\n .year-button:hover,\n .month-button:hover {\n background-color: var(--secondary-randstad-light-blue-10, #e8f1fb);\n }\n\n /* Estilos para el año o mes seleccionado */\n .year-button.selected,\n .month-button.selected {\n background-color: var(--primary-randstad-blue-70, #2175d9);\n color: var(--secondary-white, #fff);\n border: 1px solid var(--primary-randstad-blue-70, #2175d9);\n }\n\n /* Estilos para el mes seleccionado en otro año (estilo secundario) */\n .month-button.secondary-selected {\n background-color: var(--secondary-randstad-dark-blue-10, #e7e8ec);\n color: var(--secondary-randstad-dark-blue-80, #3c4257);\n font-weight: 500;\n border: 1px solid var(--secondary-randstad-dark-blue-10, #e7e8ec);\n }\n\n /* Estilos para el año y mes current */\n .year-button.current,\n .month-button.current {\n position: relative;\n }\n\n .year-button.current::after,\n .month-button.current::after {\n content: '';\n position: absolute;\n bottom: 0;\n width: 100%;\n height: 2px;\n border-radius: 2px;\n background-color: var(--primary-randstad-blue-70, #2175d9);\n }\n\n /* Estilos para el botón de navegación deshabilitado */\n .nav-button[disabled] {\n color: var(--secondary-randstad-dark-blue-30, #b1b5c4);\n pointer-events: none;\n }\n\n .nav-button[disabled]:hover {\n background-color: transparent;\n }\n\n /* Estilos para el botón de día deshabilitado */\n .day[disabled] {\n color: var(--secondary-randstad-dark-blue-30, #b1b5c4);\n pointer-events: none;\n background-color: transparent;\n }\n \n .day[disabled]:hover {\n background-color: transparent;\n }\n\n /* Estilos para los botones de año y mes deshabilitados */\n .year-button[disabled],\n .month-button[disabled] {\n color: var(--secondary-randstad-dark-blue-30, #b1b5c4);\n pointer-events: none;\n background-color: transparent;\n }\n \n .year-button[disabled]:hover,\n .month-button[disabled]:hover {\n background-color: transparent;\n }\n\n /* --- Estilos para móvil --- */\n .mobile-backdrop {\n position: fixed;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.4);\n z-index: 999;\n font-family: Graphik;\n }\n\n .mobile-modal {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: white;\n z-index: 1000;\n border-radius: 12px 12px 0 0;\n box-shadow: 0 -4px 10px rgba(0, 0, 0, 0.15);\n display: flex;\n flex-direction: column;\n padding: 24px 16px;\n animation: slideUp 0.5s ease-out;\n max-height: 80vh;\n overflow-y: auto;\n font-family: Graphik;\n }\n\n @keyframes slideUp {\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n }\n \n .mobile-modal .header {\n margin-bottom: 0;\n position: sticky;\n top: 0;\n background: white;\n z-index: 10;\n }\n \n .mobile-modal .weekdays-separator {\n margin: 0;\n }\n\n .mobile-modal .weekdays {\n place-items: center;\n margin-top: 16px;\n margin-bottom: 8px;\n }\n \n .mobile-modal .days-grid {\n gap: 8px;\n grid-template-columns: repeat(7, 1fr);\n place-items: center;\n }\n \n .mobile-modal .month-grid,\n .mobile-modal .year-grid {\n gap: 16px;\n margin-top: 16px;\n }\n\n .mobile-modal .day {\n ${bodyL}\n font-weight: 500;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px; \n height: 40px;\n border-radius: 50%;\n cursor: pointer;\n background-color: transparent;\n border: none;\n color: var(--secondary-randstad-dark-blue-80, #3c4257);\n position: relative;\n }\n\n .mobile-modal .day.selected {\n background-color: var(--primary-randstad-blue-70, #2175d9);\n color: var(--secondary-white, #fff);\n font-weight: 500;\n border-radius: 50%;\n }\n\n .mobile-modal .day.today {\n color: var(--primary-randstad-blue-70, #2175d9);\n font-weight: 500;\n }\n\n .mobile-modal .day.today::after {\n content: '';\n position: absolute;\n bottom: 0;\n width: 40px; \n left: 50%;\n transform: translateX(-50%); \n height: 2px;\n background-color: var(--primary-randstad-blue-70, #2175d9);\n border-radius: 2px;\n }\n\n .mobile-modal .year-grid,\n .mobile-modal .month-grid {\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n }\n\n .mobile-modal .year-button,\n .mobile-modal .month-button {\n width: 100%;\n height: 48px;\n border-radius: 9999px;\n flex: 1 1 33.3333%;\n padding: 0;\n }\n\n .mobile-modal .day.secondary-selected,\n .mobile-modal .month-button.secondary-selected {\n background-color: var(--secondary-randstad-dark-blue-10, #e7e8ec);\n color: var(--secondary-randstad-dark-blue-80, #3c4257);\n font-weight: 500;\n border: 1px solid var(--secondary-randstad-dark-blue-10, #e7e8ec);\n }\n\n /* Estilos para elementos deshabilitados dentro del modal de móviles. */\n .mobile-modal .day[disabled],\n .mobile-modal .month-button[disabled],\n .mobile-modal .year-button[disabled] {\n color: var(--secondary-randstad-dark-blue-30, #b1b5c4);\n pointer-events: none;\n background-color: transparent;\n }\n\n .mobile-modal .nav-button[disabled] {\n color: var(--secondary-randstad-dark-blue-30, #b1b5c4);\n pointer-events: none;\n background-color: transparent;\n }\n\n /* Evitamos que el estilo 'today' o 'current' se aplique si el elemento está deshabilitado */\n .mobile-modal .day.today[disabled]::after,\n .mobile-modal .nav-button[disabled] randstad-icon {\n color: var(--secondary-randstad-dark-blue-30, #b1b5c4);\n }\n /* */\n `;\n\n public connectedCallback() {\n super.connectedCallback();\n document.addEventListener(\"click\", this.handleOutsideClick);\n }\n\n public disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener(\"click\", this.handleOutsideClick);\n }\n\n /**\n * Cierra el overlay del calendario si el clic se produce fuera de sus límites.\n * Se utiliza un `event listener` en el documento para detectar clics en cualquier lugar de la página.\n \n * @param e - Objeto de evento del clic.\n */\n private handleOutsideClick = (e: MouseEvent) => {\n const root = this.getRootNode() as ShadowRoot | null;\n const inputElement = root?.host;\n\n if ( inputElement && !e.composedPath().includes(this) && !e.composedPath().includes(inputElement))\n this.dispatchEvent(new CustomEvent(\"close\", { bubbles: true, composed: true }));\n };\n\n /**\n * Alterna la vista del calendario entre 'days' y 'years' al hacer clic en el encabezado.\n * Si la vista actual es 'days', cambia a 'years'; si no, vuelve a 'days'.\n */\n private handleHeaderClick() {\n if (this.currentView === 'days') this.currentView = 'years';\n else this.currentView = 'days';\n }\n\n /**\n * Método auxiliar para actualizar la vista y disparar el evento\n */\n private _updateView(\n newDate: Date,\n newView: 'days' | 'months' | 'years' | null = null\n ) {\n this.viewDate = newDate;\n if (newView) this.currentView = newView;\n\n this.dispatchEvent(new CustomEvent(\"view-date-change\", { detail: { date: this.viewDate } }));\n }\n\n /**\n * Maneja la navegación entre periodos en el calendario según la vista actual.\n * Si la vista es de días, navega por meses; si es de meses, navega por años;\n * si es de años, navega por bloques de 21 años.\n * Actualiza la vista con la nueva fecha calculada.\n \n * @param direction -1 para retroceder, 1 para avanzar.\n */\n private handleNavClick(direction: number) {\n let newDate = this.viewDate;\n\n if (this.currentView === 'days') newDate = dateFns.addMonths(this.viewDate, direction);\n else if (this.currentView === 'months') newDate = dateFns.addYears(this.viewDate, direction);\n else newDate = dateFns.addYears(this.viewDate, direction * 21);\n\n this._updateView(newDate);\n }\n\n /**\n * Maneja la selección de un año en la vista de años.\n * Al seleccionar un año, actualiza la fecha de vista y cambia a la vista de meses.\n \n * @param year - El año seleccionado (número de 4 dígitos).\n */\n private handleYearSelect(year: number) {\n const newDate = dateFns.setYear(this.viewDate, year);\n this._updateView(newDate, 'months');\n }\n\n /**\n * Maneja la selección de un mes en la vista de meses.\n * Al seleccionar un mes, actualiza la fecha de vista y cambia a la vista de días.\n\n * @param monthIndex - El índice del mes seleccionado (0-11, donde 0 es Enero).\n */\n private handleMonthSelect(monthIndex: number) {\n const newDate = dateFns.setMonth(this.viewDate, monthIndex);\n this._updateView(newDate, 'days');\n }\n\n /**\n * Maneja el clic en un día del calendario.\n * Emite un evento `date-selected` al componente padre con la fecha y su valor formateado.\n\n * @param day - El objeto Date del día seleccionado.\n */\n private handleDayClick(day: Date) {\n this.selectedDate = day; // Actualizar la fecha seleccionada\n\n this.dispatchEvent(\n new CustomEvent(\"date-selected\", {\n detail: { date: day },\n bubbles: true,\n composed: true\n })\n );\n }\n\n private getFullMonthNames(): string[] {\n return [\n 'Enero',\n 'Febrero',\n 'Marzo',\n 'Abril',\n 'Mayo',\n 'Junio',\n 'Julio',\n 'Agosto',\n 'Septiembre',\n 'Octubre',\n 'Noviembre',\n 'Diciembre'\n ];\n }\n\n private getShortMonthNames(): string[] {\n return this.getFullMonthNames().map((month) => month.substring(0, 3));\n }\n\n private getShortWeekdays(): string[] {\n return ['lu', 'ma', 'mi', 'ju', 'vi', 'sa', 'do'];\n }\n\n /**\n * Renderiza el encabezado del calendario, mostrando el mes y el año actuales.\n * Incluye botones de navegación y un botón para cambiar la vista (a meses/años).\n */\n private renderHeader() {\n const monthNames = this.getFullMonthNames();\n\n let headerText: string = '';\n let disablePrev: boolean = false; \n let disableNext: boolean = false;\n\n if (this.currentView === 'years') {\n const startYear = this.viewDate.getFullYear() - (this.viewDate.getFullYear() % 21);\n const endYear = startYear + 20;\n headerText = `${startYear} - ${endYear}`;\n\n const minYear = this.minDate ? this.minDate.getFullYear() : -Infinity;\n const maxYear = this.maxDate ? this.maxDate.getFullYear() : Infinity; \n disablePrev = startYear <= minYear; \n disableNext = endYear >= maxYear;\n } else if (this.currentView === 'months') {\n headerText = `${this.viewDate.getFullYear()}`;\n\n const viewYear = this.viewDate.getFullYear();\n const minYear = this.minDate ? this.minDate.getFullYear() : -Infinity;\n const maxYear = this.maxDate ? this.maxDate.getFullYear() : Infinity;\n disablePrev = viewYear <= minYear;\n disableNext = viewYear >= maxYear;\n } else {\n const monthName = monthNames[this.viewDate.getMonth()];\n headerText = `${monthName} ${this.viewDate.getFullYear()}`;\n\n if (this.minDate) disablePrev = dateFns.isSameMonth(dateFns.startOfMonth(this.viewDate), dateFns.startOfMonth(this.minDate)) || dateFns.isBefore(this.viewDate, this.minDate); \n if (this.maxDate) disableNext = dateFns.isSameMonth(dateFns.startOfMonth(this.viewDate), dateFns.startOfMonth(this.maxDate)) || dateFns.isAfter(this.viewDate, this.maxDate);\n }\n\n return html`\n <div class=\"header\">\n <div class=\"header-left\">\n <button class=\"month-year-button\" @click=${this.handleHeaderClick}>\n <span>${headerText}</span>\n\n ${this.currentView === 'days'\n ? html`<randstad-icon name=\"arrow_drop_down\" class=\"select-icon\"></randstad-icon>`\n : html`<randstad-icon name=\"arrow_drop_up\" class=\"select-icon\"></randstad-icon>`\n }\n </button>\n </div>\n\n <div class=\"header-right\">\n <button class=\"nav-button\" @click=${() => this.handleNavClick(-1)} ?disabled=${disablePrev}>\n <randstad-icon name=\"arrow_left\"></randstad-icon>\n </button>\n\n <button class=\"nav-button\" @click=${() => this.handleNavClick(1)} ?disabled=${disableNext}>\n <randstad-icon name=\"arrow_right\"></randstad-icon>\n </button>\n </div>\n </div>\n `;\n }\n\n /**\n * Renderiza la vista de selección de años en el calendario.\n * Genera una cuadrícula de botones, cada uno representando un año dentro de un rango de 21 años.\n * El año actualmente seleccionado se resalta visualmente.\n * Al hacer clic en un botón de año, se invoca el método de manejo de selección de año.\n \n * @returns {TemplateResult} Plantilla HTML para la vista de años.\n */\n private renderYearsView() {\n const startYear = this.viewDate.getFullYear() - (this.viewDate.getFullYear() % 21);\n const years = Array.from({ length: 21 }, (_, i) => startYear + i);\n const selectedYear = this.selectedDate ? this.selectedDate.getFullYear() : null;\n const currentYear = new Date().getFullYear();\n\n const minYear = this.minDate ? this.minDate.getFullYear() : -Infinity; \n const maxYear = this.maxDate ? this.maxDate.getFullYear() : Infinity; \n\n return html`\n <div class=\"year-grid\"> \n ${years.map((y) => {\n const isDisabled = y < minYear || y > maxYear;\n const buttonClass = `year-button ${y === selectedYear ? 'selected' : y === currentYear ? 'current' : ''}`;\n \n return html`\n <button \n class=\"${buttonClass}\" \n @click=${() => this.handleYearSelect(y)}\n ?disabled=${isDisabled} \n >\n ${y}\n </button>\n `;\n })}\n </div>\n `;\n }\n\n /**\n * Renderiza la vista de selección de meses en el calendario.\n * Genera una cuadrícula de botones, cada uno representando un mes abreviado.\n * El mes actualmente seleccionado se resalta visualmente.\n * Al hacer clic en un botón de mes, se invoca el método de manejo de selección de mes.\n \n * @returns {TemplateResult} Plantilla HTML para la vista de meses.\n */\n private renderMonthsView() {\n const monthNames = this.getShortMonthNames();\n const selectedMonth = this.selectedDate?.getMonth();\n const currentMonth = new Date().getMonth();\n\n const viewYear = this.viewDate.getFullYear();\n\n return html`\n <div class=\"month-grid\">\n ${monthNames.map(\n (month, index) => {\n const isCurrentMonth = index === currentMonth;\n const isSelected = index === selectedMonth && this.selectedDate && dateFns.isSameYear(this.viewDate, this.selectedDate);\n const isSecondarySelected = index === selectedMonth && this.selectedDate && !dateFns.isSameYear(this.viewDate, this.selectedDate);\n\n let isDisabled = false; \n\n if (this.minDate && viewYear === this.minDate.getFullYear())\n isDisabled = index < this.minDate.getMonth();\n \n if (this.maxDate && viewYear === this.maxDate.getFullYear()) \n isDisabled = isDisabled || index > this.maxDate.getMonth();\n \n const buttonClass = `month-button ${isSelected ? 'selected' : isSecondarySelected ? 'secondary-selected' : isCurrentMonth ? 'current' : ''}`;\n \n return html`\n <button\n class=\"${buttonClass}\"\n ?disabled=${isDisabled}\n @click=${() => this.handleMonthSelect(index)}\n >\n ${month}\n </button>\n `;\n }\n )}\n </div>\n `;\n  }\n\n /**\n * Renderiza la cuadrícula de días para el mes actual.\n * Incluye los días de la semana, los días del mes y marca el día actual y el seleccionado.\n */\n private renderDayView() {\n const daysInMonth = dateFns.getDaysInMonth(this.viewDate);\n const startOfMonth = dateFns.startOfMonth(this.viewDate);\n const dayOfWeek = dateFns.getDay(startOfMonth);\n\n const leadingDays = Array.from({ length: dayOfWeek === 0 ? 6 : dayOfWeek - 1 },\n () => null\n );\n\n const days = Array.from({ length: daysInMonth }, \n (_, i) => dateFns.setDate(startOfMonth, i + 1)\n );\n\n const weekdays = this.getShortWeekdays();\n\n return html`\n <div class=\"weekdays\">\n ${weekdays.map((day) => html`<div>${day}</div>`)}\n </div>\n\n <div class=\"days-grid\">\n ${leadingDays.map(() => html`<div></div>`)}\n ${days.map((day) => {\n const normalizedDay = dateFns.startOfDay(day);\n const normalizedSelectedDate = this.selectedDate\n ? dateFns.startOfDay(this.selectedDate)\n : null;\n\n const isDisabled = (this.minDate && dateFns.isBefore(normalizedDay, dateFns.startOfDay(this.minDate))) ||\n (this.maxDate && dateFns.isAfter(normalizedDay, dateFns.startOfDay(this.maxDate)));\n\n const isTodayDay = dateFns.isToday(normalizedDay);\n\n // Si el día coincide con el día seleccionado\n const isSameDay = normalizedSelectedDate &&\n dateFns.getDate(normalizedDay) ===\n dateFns.getDate(normalizedSelectedDate);\n\n // Está seleccionado si es el mismo día y estamos en el mismo mes y año\n const isSelected = isSameDay && normalizedSelectedDate &&\n dateFns.isSameMonth(normalizedDay, normalizedSelectedDate) &&\n dateFns.isSameYear(normalizedDay, normalizedSelectedDate);\n\n // Es secundario si es el mismo día pero estamos en diferente mes o año\n const isSecondarySelected = isSameDay && !isSelected;\n\n const buttonClass = `day ${isTodayDay ? 'today' : ''} ${\n isSelected\n ? 'selected'\n : isSecondarySelected\n ? 'secondary-selected'\n : ''\n }`;\n\n return html`\n <button\n class=\"${buttonClass}\"\n ?disabled=${isDisabled}\n @click=${() => this.handleDayClick(day)}\n >\n ${dateFns.format(day, 'd')}\n </button>\n `;\n })}\n </div>\n `;\n }\n\n /**\n * Renderiza el overlay del calendario según la vista actual (días, meses o años).\n * Incluye el encabezado y la cuadrícula correspondiente.\n \n * @returns {TemplateResult} Plantilla HTML del overlay del calendario.\n */\n public render() {\n let content;\n\n if (this.currentView === 'days') content = this.renderDayView();\n else if (this.currentView === 'months') content = this.renderMonthsView();\n else content = this.renderYearsView();\n\n const mainContent = html`${this.renderHeader()} <div class=\"weekdays-separator\"></div> ${content}`;\n\n // Estilo para móvil\n if (this.isMobile) {\n return html`\n <div\n class=\"mobile-backdrop\"\n @click=${() => this.dispatchEvent(new CustomEvent(\"close\"))}\n >\n <div class=\"mobile-modal\" @click=${(e: Event) => e.stopPropagation()}>\n ${mainContent}\n </div>\n </div>\n `;\n }\n\n // Estilo para escritorio\n return html`\n <div class=\"calendar-container\" style=\"width: ${this.calendarWidth}px;\">\n ${mainContent}\n </div>\n `;\n }\n}","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setYear} function options.\n */\n\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param year - The year of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the year set\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * const result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\nexport function setYear(date, year, options) {\n const date_ = toDate(date, options?.in);\n\n // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n if (isNaN(+date_)) return constructFrom(options?.in || date, NaN);\n\n date_.setFullYear(year);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default setYear;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getDaysInMonth } from \"./getDaysInMonth.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setMonth} function options.\n */\n\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param month - The month index to set (0-11)\n * @param options - The options\n *\n * @returns The new date with the month set\n *\n * @example\n * // Set February to 1 September 2014:\n * const result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\nexport function setMonth(date, month, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n const day = _date.getDate();\n\n const midMonth = constructFrom(options?.in || date, 0);\n midMonth.setFullYear(year, month, 15);\n midMonth.setHours(0, 0, 0, 0);\n const daysInMonth = getDaysInMonth(midMonth);\n\n // Set the earlier date, allows to wrap Jan 31 to Feb 28\n _date.setMonth(month, Math.min(day, daysInMonth));\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setMonth;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDay} function options.\n */\n\n/**\n * @name getDay\n * @category Weekday Helpers\n * @summary Get the day of the week of the given date.\n *\n * @description\n * Get the day of the week of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of week, 0 represents Sunday\n *\n * @example\n * // Which day of the week is 29 February 2012?\n * const result = getDay(new Date(2012, 1, 29))\n * //=> 3\n */\nexport function getDay(date, options) {\n return toDate(date, options?.in).getDay();\n}\n\n// Fallback for modularized imports:\nexport default getDay;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setDate} function options.\n */\n\n/**\n * @name setDate\n * @category Day Helpers\n * @summary Set the day of the month to the given date.\n *\n * @description\n * Set the day of the month to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows using extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param dayOfMonth - The day of the month of the new date\n * @param options - The options\n *\n * @returns The new date with the day of the month set\n *\n * @example\n * // Set the 30th day of the month to 1 September 2014:\n * const result = setDate(new Date(2014, 8, 1), 30)\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport function setDate(date, dayOfMonth, options) {\n const _date = toDate(date, options?.in);\n _date.setDate(dayOfMonth);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setDate;\n","import { html, css, nothing } from \"lit\";\nimport { customElement, property, query, state } from \"lit/decorators.js\";\nimport { format, isAfter, isBefore, isValid, subYears } from \"date-fns\";\nimport { bodyL } from '../styles/fontStyles';\nimport { classMap } from 'lit/directives/class-map.js'; \nimport { mixStyles } from \"../styles/mix\";\nimport { errorStyles } from \"../styles/error\";\nimport { tooltipStyles } from \"../styles/tooltip\";\nimport { BaseControl } from \"../helpers/BaseControl\";\n\nimport \"./CalendarOverlay.ts\";\n\n@customElement(\"datepicker-component\")\nexport class DatePickerComponent extends BaseControl {\n @property({ type: String }) width?: string;\n @property({ type: Boolean }) isRenderClearButton = true;\n \n @property({ type: String }) minDate?: string;\n @property({ type: String }) maxDate?: string;\n\n // Validador de edad +18\n @property({ type: Boolean }) eighteenOrOlder = false;\n \n @state() private isOpen = false;\n @state() private selectedDate: Date | null = null;\n @state() private viewDate: Date = new Date();\n @state() private isMobile = false;\n @state() private calendarWidth: number = 0;\n\n @query(\".input-container\") private inputContainer!: HTMLDivElement;\n\n static styles = css`\n ${ mixStyles }\n ${ errorStyles }\n ${ tooltipStyles }\n\n /* Si se proporciona una propiedad width (ej. width=\"600px\"), se usa ese valor. */\n :host([width]) {\n width: var(--datepicker-width);\n }\n\n .datepicker-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 100%;\n }\n\n /* Estilos para evitar el desbordamiento en móviles */\n calendar-overlay {\n max-width: 100vw;\n box-sizing: border-box;\n }\n\n /* Estilos para el estado disabled */\n .input-wrapper.disabled, .input-wrapper.disabled .date-input {\n background-color: var(--secondary-color-10);\n color: #9FA3B3;\n cursor: default;\n }\n\n .input-wrapper.disabled .icon-button,\n .input-wrapper.disabled .icon-button randstad-icon {\n color: #9FA3B3;\n cursor: default;\n }\n\n /* Estilos del campo de entrada y sus estados */\n .input-wrapper {\n display: flex;\n align-items: center;\n border: 1px solid var(--md-sys-color-outline, #e0e0e0);\n border-radius: 4px;\n padding: 0 16px;\n transition: border-color 0.2s;\n background: white;\n box-sizing: border-box;\n min-width: 360px;\n }\n\n .input-wrapper:hover {\n box-shadow: 0px 0px 0px 4px #0f19411a;\n }\n\n .input-wrapper.active:hover {\n box-shadow: 0px 0px 0px 4px #0f19411a;\n }\n\n .input-wrapper.active {\n border: 1px solid var(--primary-color);\n box-shadow: none;\n }\n\n .date-input {\n ${bodyL}\n flex-grow: 1;\n border: none;\n outline: none;\n padding: 16px 0;\n cursor: text;\n background: white;\n color: #49454f;\n }\n\n .icon-button {\n background: none;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n }\n\n .clear-button {\n margin-right: 18px;\n color: #49454f;\n opacity: 0.6;\n }\n\n .clear-button randstad-icon {\n width: 18px;\n height: 18px;\n }\n\n .calendar-button {\n color: #2175d9;\n }\n\n .calendar-button randstad-icon {\n font-size: 18px;\n }\n `;\n\n private setMessageErrorFormatInvalid(): string {\n return `formato de fecha inválido, se esperaba 'dd-MM-yyyy'`;\n }\n\n /**\n * Ciclo de vida: se ejecuta al conectar el componente al DOM.\n * Inicializa el modo responsivo y listeners globales.\n */\n public connectedCallback() {\n super.connectedCallback();\n this.updateResponsiveMode();\n\n window.addEventListener(\"resize\", this.updateResponsiveModeBound);\n document.addEventListener(\"click\", this.handleClickOutside);\n }\n\n /**\n * Ciclo de vida: se ejecuta al desconectar el componente del DOM.\n * Limpia listeners globales.\n */\n public disconnectedCallback() {\n window.removeEventListener(\"resize\", this.updateResponsiveModeBound);\n document.removeEventListener(\"click\", this.handleClickOutside);\n \n super.disconnectedCallback();\n }\n\n /**\n * Ciclo de vida: se llama después de que la primera actualización del componente ha terminado.\n * Es ideal para obtener el ancho del DOM por primera vez.\n */\n public firstUpdated() {\n this.setInitialWidth();\n }\n \n /**\n * Ciclo de vida: se llama después de cada actualización.\n * Se usa para recalcular el ancho si la apertura del calendario ha cambiado.\n\n * @param changedProperties - Mapa de propiedades que han cambiado.\n */\n public updated( changedProperties: Map<string, any> ) {\n if ( changedProperties.has(\"value\")) this._syncValue( this.value );\n if ( changedProperties.has(\"isOpen\") || changedProperties.has(\"value\") ) this.setInitialWidth();\n\n super.updated( changedProperties );\n }\n\n private setInitialWidth() {\n if ( !this.inputContainer ) return;\n this.calendarWidth = this.inputContainer.getBoundingClientRect().width;\n }\n \n /**\n * Referencia enlazada para el listener de resize.\n */\n private updateResponsiveModeBound = this.updateResponsiveMode.bind(this);\n \n /**\n * Actualiza el estado isMobile según el ancho de la ventana.\n */\n private updateResponsiveMode() {\n this.isMobile = window.innerWidth <= 940;\n // Se llama a setInitialWidth() para recalcular el ancho si la vista cambia\n this.setInitialWidth();\n }\n\n /**\n * Maneja el evento de entrada del usuario en el input.\n * Valida el formato de la fecha y actualiza el estado del componente.\n \n * @param e - Objeto de evento de entrada.\n */\n public handleInput( e: Event ) {\n const input: HTMLInputElement = e.target as HTMLInputElement;\n this._parseAndValidateDate( input.value, true );\n }\n\n /**\n * Cierra el calendario si el clic se realiza fuera del componente.\n * Se ejecuta en el `document` para detectar clics en cualquier lugar de la página.\n \n * @param e - Objeto de evento del clic.\n */\n private handleClickOutside = ( e: Event ) => {\n const path = e.composedPath();\n\n if ( !path.includes( this ) ) this.isOpen = false;\n };\n\n /**\n * Abre o cierra el calendario al hacer clic en el botón de calendario.\n\n * @param e - Objeto de evento del clic.\n */\n public handleCalendarButtonClick( e: Event ) {\n if ( this.disabled ) return;\n e.stopPropagation();\n\n this.isOpen = !this.isOpen;\n\n if ( this.selectedDate ) this.viewDate = this.selectedDate;\n else this.viewDate = new Date();\n\n this.requestUpdate();\n }\n\n /**\n * Borra la fecha seleccionada y cierra el calendario.\n */\n public handleClearDate() {\n this.selectedDate = null;\n this.error = false;\n this.errorMessage = null;\n \n this.closeOverlay( null );\n }\n\n /**\n * Maneja la selección de fecha desde el calendario.\n */\n private handleDateSelect( e: CustomEvent ) {\n const selected = e.detail.date;\n if ( !selected ) return;\n\n this.selectedDate = selected;\n this.viewDate = selected;\n\n this.closeOverlay( format( selected, 'dd-MM-yyyy' ) );\n }\n \n /**\n * Maneja el cambio de la fecha de vista en el calendario.\n\n * @param e - Objeto de evento con la nueva fecha de vista.\n */\n private handleViewDateChange( e: CustomEvent ) {\n this.viewDate = e.detail.date;\n }\n \n /**\n * Cierra el calendario y actualiza el valor del componente.\n * Emite un evento 'date-selected' con el valor de la fecha seleccionada.\n\n * @param valueSet - La fecha en formato de cadena (ej: 'dd-MM-yyyy') a establecer.\n */\n private closeOverlay( valueSet: string | null ) {\n this.value = valueSet;\n\n this.dispatchEvent( new CustomEvent(\"date-selected\", { detail: { value: valueSet } }) );\n this.isOpen = false;\n }\n\n /**\n * Analiza la propiedad 'value' externa y actualiza el estado interno del componente.\n * Se ejecuta cuando una propiedad cambia desde fuera (p. ej., Storybook, componente padre).\n * No emite eventos ni interactúa con el DOM para evitar bucles de renderizado.\n \n * @param value La cadena de fecha pasada desde una propiedad externa.\n */\n private _syncValue( value: string | null ) {\n if ( value === '' || value === null ) {\n if ( !this.error ) {\n this.selectedDate = null;\n this.errorMessage = null;\n }\n \n return;\n }\n\n const parsedDate: Date | null = this._parseDate( value );\n\n if ( parsedDate && this._validateDate( parsedDate ) ) {\n this.selectedDate = parsedDate;\n this.viewDate = parsedDate;\n\n this.error = false;\n this.errorMessage = null;\n\n this.value = format( parsedDate, 'dd-MM-yyyy' ); \n } else {\n this.selectedDate = parsedDate;\n }\n }\n\n /**\n * Valida una fecha basándose en las reglas del componente.\n * Esto incluye la validación de edad y el rango de fechas.\n \n * @param date - El objeto Date a validar.\n * @returns `true` si la fecha es válida, `false` de lo contrario.\n */\n private _validateDate( date: Date | null ): boolean {\n if ( !date ) return false;\n \n // Resetear el estado de error antes de validar\n this.error = false;\n this.errorMessage = null;\n\n // Lógica de validación de edad\n if ( this.eighteenOrOlder ) {\n const eighteenYearsAgo: Date = subYears( new Date(), 18 );\n \n if ( isAfter( date, eighteenYearsAgo ) ) {\n this.error = true;\n this.errorMessage = 'tenés que ser mayor de 18 años';\n\n return false;\n }\n }\n \n // Lógica de validación de rango\n let isValidRange: boolean = this._isWithinBounds( date );\n \n if ( !isValidRange ) {\n this.error = true;\n const range: { minDate: Date | null; maxDate: Date | null; } | null = this._getValidDateRange();\n\n this.errorMessage = `la fecha debe estar entre ${ range?.minDate ? format( range.minDate, 'dd-MM-yyyy' ) : '' } y ${ range?.maxDate ? format( range.maxDate, 'dd-MM-yyyy' ) : '' }.`;\n return false;\n }\n \n return true;\n }\n \n /**\n * Valida la entrada del usuario en el campo de texto.\n \n * Este método se llama con cada pulsación de tecla o cambio en el input.\n * Se encarga de validar el formato, verificar si la fecha está dentro de los límites\n * y de actualizar el estado de error y el valor del input.\n \n * @param value La cadena de fecha que el usuario ha introducido.\n * @param fromInput Indica si la llamada proviene directamente de la interacción del usuario.\n */\n private _parseAndValidateDate( value: string | null, fromInput: boolean ) {\n if ( this.disabled ) return;\n\n if ( value === '' || value === null ) {\n this.selectedDate = null;\n this.error = false;\n this.errorMessage = null;\n\n if ( fromInput ) this.closeOverlay( null );\n return;\n }\n\n const parsedDate: Date | null = this._parseDate( value );\n\n if ( parsedDate ) {\n if ( this._validateDate( parsedDate ) ) {\n this.selectedDate = parsedDate;\n this.viewDate = parsedDate;\n this.error = false;\n this.errorMessage = null;\n \n if ( fromInput ) this.closeOverlay( format( parsedDate, 'dd-MM-yyyy' ) );\n } else {\n // El error y el mensaje ya han sido seteados por _validateDate\n if ( fromInput ) this.closeOverlay( null );\n console.error( 'La fecha es inválida.' );\n }\n } else {\n this.error = true;\n this.errorMessage = this.setMessageErrorFormatInvalid();\n \n if ( fromInput ) this.closeOverlay( null );\n console.error('Formato de fecha no válido.');\n }\n }\n\n /**\n * Intenta analizar una cadena de fecha en múltiples formatos.\n * Este método es la fuente de la verdad para el análisis de fechas.\n * Soporta los formatos 'dd-MM-yyyy' y 'yyyy-MM-dd', retornando un objeto Date.\n\n * @param dateString La cadena de fecha a analizar.\n * @returns Un objeto Date si es válido, de lo contrario, null.\n */\n private _parseDate( dateString: string ): Date | null {\n // Intenta parsear como 'dd-MM-yyyy'\n const partsDDMMYYYY = dateString.split( '-' ).map( Number );\n\n if ( partsDDMMYYYY.length === 3 ) {\n const [ day, month, year ] = partsDDMMYYYY;\n\n if ( day && month && year && month >= 1 && month <= 12 && year > 1000 ) {\n const tempDate = new Date( year, month - 1, day, 12 );\n if ( isValid( tempDate ) && format( tempDate, 'dd-MM-yyyy' ) === dateString ) return tempDate;\n }\n }\n \n // Si no es un formato válido, intenta parsear como 'yyyy-MM-dd'\n const partsYYYYMMDD = dateString.split('-').map(Number);\n\n if ( partsYYYYMMDD.length === 3 ) {\n const [ year, month, day ] = partsYYYYMMDD;\n\n if ( year && month && day && month >= 1 && month <= 12 && year > 1000 ) {\n const tempDate = new Date( year, month - 1, day, 12 );\n if ( isValid( tempDate ) && format( tempDate, 'yyyy-MM-dd' ) === dateString ) return tempDate;\n }\n }\n\n return null;\n }\n\n /**\n * Analiza una cadena de fecha con formato 'yyyy-MM-dd'.\n * Este método auxiliar ayuda a procesar la propiedad minDate y maxDate.\n \n * @param dateString La cadena de fecha en formato 'yyyy-MM-dd'.\n \n * @returns Un objeto Date si es válido, de lo contrario, null.\n */\n private _parseDateString(dateString: string | undefined): Date | null {\n if ( !dateString ) return null;\n const parts: number[] = dateString.split( '-' ).map( Number );\n\n if ( parts.length === 3 && !isNaN( parts[0] ) && !isNaN( parts[1] ) && !isNaN( parts[2] ) ) {\n // Creamos la fecha al mediodía (12:00) para evitar cualquier cambio de día causado por la zona horaria.\n const date: Date = new Date( parts[0], parts[1] - 1, parts[2], 12 );\n return date;\n }\n\n return null;\n }\n\n /**\n * Retorna el rango de fechas válido del componente.\n * Analiza las propiedades 'minDate' y 'maxDate' para determinar el rango permitido.\n\n * @returns Un objeto con las fechas mínima y máxima, o null si no se define un rango.\n */\n private _getValidDateRange(): { minDate: Date | null, maxDate: Date | null } | null {\n const minDateObj = this._parseDateString(this.minDate);\n const maxDateObj = this._parseDateString(this.maxDate);\n\n if ( !minDateObj && !maxDateObj ) return { minDate: null, maxDate: null };\n if ( minDateObj && maxDateObj && isAfter( minDateObj, maxDateObj ) ) return null;\n\n return { minDate: minDateObj, maxDate: maxDateObj };\n }\n\n /**\n * Verifica si una fecha dada está dentro del rango permitido.\n\n * @param date La fecha a verificar.\n \n * @returns Verdadero si la fecha está dentro de los límites, de lo contrario, falso.\n */\n private _isWithinBounds( date: Date ): boolean {\n const range: { minDate: Date | null, maxDate: Date | null } | null = this._getValidDateRange();\n\n // Si el rango es nulo (es inválido) o si no hay límites definidos, la fecha del usuario es válida\n if ( !range ) return true;\n\n // Comprobamos si la fecha está antes del mínimo\n if ( range.minDate && isBefore( date, range.minDate ) ) return false;\n\n // Comprobamos si la fecha está después del máximo\n if ( range.maxDate && isAfter( date, range.maxDate ) ) return false;\n\n return true;\n }\n\n /**\n * Renderiza el componente DatePicker, incluyendo el input, botones y el overlay del calendario.\n */\n public render() {\n const inputWrapperClasses = classMap({\n 'input-wrapper': true,\n 'active': this.isOpen,\n 'error': this.error,\n 'disabled': this.disabled\n });\n\n const containerWidth: string = this.width || '100%';\n const containerStyle: string = `width: ${ containerWidth };`;\n \n const range: { minDate: Date | null, maxDate: Date | null } | null = this._getValidDateRange();\n\n return html`\n <div class=\"datepicker-container\" style=\"${ this.labelColor ? ` --label-color: ${ this.labelColor }` : '' } ${ containerStyle }\">\n ${ this.renderLabelContainer() }\n\n <div class=\"input-container\">\n <div class=\"${inputWrapperClasses}\" style=\"width: 100%\">\n <input\n type=\"text\"\n class=\"date-input\"\n .value=\"${this.value}\"\n placeholder=\"${this.placeholder}\"\n ?disabled=${this.disabled}\n @input=${this.handleInput}\n />\n\n ${this.isRenderClearButton && this.selectedDate && !this.disabled\n ? html`\n <button\n class=\"icon-button clear-button\"\n @click=${this.handleClearDate}\n >\n <randstad-icon name=\"close\"></randstad-icon>\n </button>\n `\n : nothing\n }\n\n <button\n class=\"icon-button calendar-button\"\n @click=${this.handleCalendarButtonClick}\n >\n <randstad-icon name=\"calendar\"></randstad-icon>\n </button>\n </div>\n\n ${this.isOpen\n ? html`\n <calendar-overlay\n .isMobile=${this.isMobile}\n .selectedDate=${this.selectedDate}\n .viewDate=${this.viewDate}\n .calendarWidth=${this.calendarWidth}\n .minDate=${range?.minDate} \n .maxDate=${range?.maxDate} \n @close=${() => (this.isOpen = false)}\n @view-date-change=${this.handleViewDateChange}\n @date-selected=${this.handleDateSelect}\n >\n </calendar-overlay>\n `\n : nothing\n }\n \n ${ this.renderError() }\n </div>\n\n ${ this.renderHelper() }\n </div>\n `;\n }\n}","import { addYears } from \"./addYears.js\";\n\n/**\n * The {@link subYears} function options.\n */\n\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the years subtracted\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * const result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\nexport function subYears(date, amount, options) {\n return addYears(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subYears;\n","export const FILE_TYPE_MAPPING: { [key: string]: string } = {\n 'application/pdf': 'PDF',\n 'application/msword': 'Word (.doc)',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'Word (.docx)',\n\n 'image/jpeg': 'JPEG',\n 'image/png': 'PNG',\n\n 'text/plain': 'Texto (.txt)',\n\n // Agregar más tipos si se necesitaran\n};","import { html, css, nothing } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { bodyM } from '../styles/fontStyles';\nimport { FILE_TYPE_MAPPING } from '../utils/file-format';\nimport { tooltipStyles } from \"../styles/tooltip\";\nimport { BaseControl } from '../helpers/BaseControl';\nimport { mixStyles } from '../styles/mix';\nimport { errorStyles } from '../styles/error';\nimport { progressBarUploadStyles } from '../styles/progress-bar-upload';\n\nimport '../components/Button';\n\n@customElement('upload-file')\nexport class UploadFile extends BaseControl {\n @property({ type: String }) width?: string;\n\n @property({ type: Array }) files: File[] = [];\n @property({ type: Number }) maxFiles = 1;\n\n @property({ type: Array }) acceptedFileTypes: string[] = []; \n @property({ type: Number }) maxFileSize = 5242880; // 5 MB por defecto\n\n @property({ type: String }) buttonText = 'Agregar archivo';\n\n @property({ type: Number }) simulatedDelay = 0;\n\n @state() private loading = false;\n @state() private progress = 0;\n \n @query('input[type=\"file\"]') private fileInput!: HTMLInputElement;\n\n static styles = css`\n ${ mixStyles }\n ${ errorStyles }\n ${ tooltipStyles }\n ${ progressBarUploadStyles }\n\n :host([width]) {\n width: var(--upload-file-width);\n }\n \n /* Contenedor principal para organizar los elementos */\n .file-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n \n input[type=\"file\"] {\n display: none;\n }\n \n .file-list-container {\n width: 100%;\n display: flex;\n justify-content: flex-end;\n }\n\n .file-list {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 8px;\n }\n \n .file-item {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--secondary-color-80, #404767);\n max-width: 100%;\n }\n \n .file-name {\n ${bodyM};\n text-align: right;\n color: var(--secondary-color-40);\n vertical-align: middle;\n leading-trim: NONE;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 250px;\n }\n\n .remove-file-button {\n --primary-color: var(--ui-negative, #E00F0F);\n }\n\n .progress-bar {\n width: 100%;\n }\n `;\n\n public updated(changedProperties: Map<string, any>) {\n super.updated(changedProperties);\n this.applyWidth();\n }\n \n private applyWidth() {\n if (this.width) this.style.setProperty('--upload-file-width', this.width);\n }\n\n /**\n * Convierte una lista de tipos MIME en un string de nombres de archivos legibles.\n * Por ejemplo, 'application/pdf' se convierte en 'PDF'.\n \n * @returns Un string con los nombres de archivo aceptados, separados por comas.\n */\n private getReadableFileTypes(): string {\n // Convertimos los tipos MIME a nombres legibles\n const readableTypes = this.acceptedFileTypes.map(type => FILE_TYPE_MAPPING[type] || type);\n\n // Si solo hay un tipo, lo retornamos directamente\n if (readableTypes.length <= 1) {\n return readableTypes.join('');\n }\n\n // Obtenemos el último elemento\n const lastType = readableTypes.pop();\n\n // Unimos el resto con comas y agregamos el último con ' y '\n return `${readableTypes.join(', ')} y ${lastType}`;\n }\n\n /**\n * Valida una lista de archivos contra el tamaño máximo y los tipos de archivo aceptados.\n \n * @param filesToValidate Array de objetos File a validar.\n\n * @returns true si todos los archivos son válidos, de lo contrario false.\n */\n private validateFiles(filesToValidate: File[]): boolean {\n const maxFileSizeInMB = this.maxFileSize / 1024 / 1024;\n \n for (const file of filesToValidate) {\n if (this.acceptedFileTypes.length > 0 && !this.acceptedFileTypes.includes(file.type)) {\n this.errorMessage = `formato de archivo no válido, se aceptan: ${this.getReadableFileTypes()}`;\n return false;\n }\n\n if (file.size > this.maxFileSize) {\n this.errorMessage = `el archivo es demasiado grande, el máximo es de ${maxFileSizeInMB}MB`;\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Maneja los archivos seleccionados por el usuario.\n * Realiza validaciones de cantidad y tipo, y actualiza la lista de archivos.\n \n * @param files La lista de archivos de un input de tipo file.\n */\n private async handleFiles(files: FileList | null) {\n this.error = false;\n this.errorMessage = null;\n\n if ( !files || this.disabled || this.loading ) return;\n \n // Aseguramos que el valor de maxFiles sea un número válido.\n const maxFiles = Number.isFinite(this.maxFiles) && this.maxFiles > 0 ? this.maxFiles : 1;\n const selected = Array.from(files);\n const remainingSlots = maxFiles - this.files.length;\n \n if ( remainingSlots <= 0 ) {\n this.error = true;\n this.errorMessage = `se ha alcanzado el número máximo de archivos (${maxFiles}).`;\n\n return;\n }\n\n const filesToUpload = selected.slice( 0, remainingSlots );\n\n if ( !this.validateFiles( filesToUpload ) ) {\n this.error = true;\n return;\n }\n\n const delay = this.simulatedDelay ?? 0;\n\n if ( delay <= 0 ) {\n this.files = [ ...this.files, ...filesToUpload ];\n this.dispatchEvent( new CustomEvent('files-changed', { detail: this.files }) );\n \n return;\n }\n\n this.loading = true;\n this.progress = 0;\n\n await this.updateComplete;\n\n const startTime = Date.now();\n const interval = setInterval(() => {\n const elapsedTime = Date.now() - startTime;\n const newProgress = Math.min( Math.round((elapsedTime / delay) * 100), 100 );\n\n this.progress = newProgress;\n\n if (this.progress >= 100) {\n clearInterval(interval);\n\n this.files = [ ...this.files, ...filesToUpload ];\n this.loading = false;\n this.progress = 0;\n\n this.dispatchEvent( new CustomEvent( 'files-changed', { detail: this.files } ) );\n }\n }, 10);\n\n if ( this.fileInput ) this.fileInput.value = ''; \n }\n \n /**\n * Gestiona el evento de cambio en el input de tipo file.\n\n * @param e El evento de cambio.\n */\n private onFileInputChange(e: Event) {\n const target = e.target as HTMLInputElement;\n this.handleFiles(target.files);\n\n if (this.fileInput) this.fileInput.value = '';\n }\n \n /**\n * Elimina un archivo de la lista de archivos seleccionados.\n\n * @param index El índice del archivo a eliminar.\n */\n private removeFile(index: number) {\n this.files = this.files.filter((_, i) => i !== index);\n this.dispatchEvent(new CustomEvent('files-changed', { detail: this.files }));\n\n if (this.files.length === 0) {\n this.error = false;\n this.errorMessage = null;\n }\n }\n \n public render() {\n const isMaxFilesReached = this.files.length >= this.maxFiles;\n const buttonDisabled = this.disabled || isMaxFilesReached;\n\n return html`\n <div class=\"file-container\" style=\"${this.labelColor ? `--label-color: ${this.labelColor};` : ''}\">\n ${ this.renderLabelContainer() }\n \n ${ this.loading\n ? html`\n <div class=\"progress-bar-container\">\n <div class=\"progress-bar\" role=\"progressbar\" aria-label=\"Subiendo archivo…\">\n <div class=\"progress-bar-fill\" style=\"width: ${this.progress}%;\"></div>\n </div>\n </div>\n `\n : html`\n <randstad-button \n .label=${this.buttonText}\n .variant=${'button-primary'} \n ?disabled=${buttonDisabled}\n @click=${() => this.fileInput?.click()}\n >\n </randstad-button>\n `\n }\n \n <input \n type=\"file\" \n accept=${this.acceptedFileTypes.join(',')}\n ?multiple=${this.maxFiles > 1}\n ?disabled=${buttonDisabled}\n @change=\"${this.onFileInputChange}\" \n />\n\n ${ this.renderError() }\n\n ${ this.renderHelper() }\n\n ${this.files.length > 0\n ? html`\n <div class=\"file-list-container\">\n <div class=\"file-list\">\n ${this.files.map((file, index) => html`\n <div class=\"file-item\">\n <span class=\"file-name\">${file.name}</span>\n\n <randstad-button \n class=\"remove-file-button\"\n .variant=${'button-icon'}\n .iconName=${'trash'}\n @click=${() => this.removeFile(index)} \n ?disabled=${this.disabled}\n >\n </randstad-button>\n </div>\n `)}\n </div>\n </div>\n `\n : nothing\n }\n </div>\n `;\n }\n}"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__metadata","metadataKey","metadataValue","metadata","SuppressedError","t","e","o","addInitializer","customElements","define","globalThis","ShadowRoot","ShadyCSS","nativeShadow","Document","prototype","CSSStyleSheet","s","Symbol","WeakMap","n$2","constructor","this","_$cssResult$","Error","cssText","styleSheet","get","replaceSync","set","toString","S","adoptedStyleSheets","map","document","createElement","n","litNonce","setAttribute","textContent","appendChild","cssRules","is","h","getOwnPropertyNames","getOwnPropertySymbols","getPrototypeOf","a","trustedTypes","l","emptyScript","p","reactiveElementPolyfillSupport","u","toAttribute","Boolean","Array","JSON","stringify","fromAttribute","Number","parse","f","b","attribute","type","String","converter","reflect","useDefault","hasChanged","litPropertyMetadata","y","HTMLElement","_$Ei","push","observedAttributes","finalize","_$Eh","keys","createProperty","state","hasOwnProperty","create","wrapped","elementProperties","noAccessor","getPropertyDescriptor","call","requestUpdate","configurable","enumerable","getPropertyOptions","Map","finalized","properties","_$Eu","elementStyles","finalizeStyles","styles","isArray","Set","flat","reverse","unshift","toLowerCase","super","_$Ep","isUpdatePending","hasUpdated","_$Em","_$Ev","_$ES","Promise","enableUpdating","_$AL","_$E_","forEach","addController","_$EO","add","renderRoot","isConnected","hostConnected","removeController","delete","size","createRenderRoot","shadowRoot","attachShadow","shadowRootOptions","connectedCallback","disconnectedCallback","hostDisconnected","attributeChangedCallback","_$AK","_$ET","removeAttribute","_$Ej","hasAttribute","C","_$EP","has","_$Eq","reject","scheduleUpdate","performUpdate","shouldUpdate","willUpdate","hostUpdate","update","_$EM","_$AE","hostUpdated","firstUpdated","updated","updateComplete","getUpdateComplete","mode","ReactiveElement","reactiveElementVersions","kind","name","init","querySelector","BaseControl","LitElement","label","placeholder","labelColor","value","required","optional","disabled","error","errorMessage","helper","helperAlign","renderLabelContainer","html","renderLabel","renderHelp","nothing","help","helpLink","helpLinkTooltipMessage","renderError","renderHelper","helperInlineStyles","property","customElement","bodyXS","css","bodyS","bodyM","bodyL","titleXXS","titleXS","titleS","AccordionPanel","title","isOpen","isDesktop","window","innerWidth","handleResize","addEventListener","removeEventListener","toggle","renderIcon","render","AccordionList","RandstadButton","variant","loader","iconPosition","iconName","idevent","handleClick","event","form","closest","requestSubmit","reset","dispatchEvent","CustomEvent","detail","composed","bubbles","cancelable","classes","button","includes","dotColor","classMap","iconSrc","CarouselCard","img","description","buttonLabel","cardId","Checkbox","checked","toggleCheck","Event","tooltipStyles","mixStyles","errorStyles","RandstadForm","keydown","undefined","icon","typing","isPasswordVisible","cleanButton","togglePassword","input","currentTarget","parentElement","handleInput","handleInputCustom","newValue","maxLength","slice","handleClear","handleLinkClick","preventDefault","linkRoute","onlyNumeric","onlyText","inputElement","sanitizedValue","replace","handleKeyDown","submitEvent","showCleanButton","textareaInlineStyles","heightTextArea","maxHeightTextArea","formStyles","linkText","FormGroup","rows","fieldsInlineStyles","IconComponent","style","setProperty","changedProps","loadIcon","response","fetch","ok","svgText","text","parser","DOMParser","svgElement","parseFromString","querySelectorAll","el","innerHTML","console","RandstadNotice","message","open","CustomModal","showNotice","noticeType","noticeMessage","noticeIcon","showPrimaryButton","primaryButtonLabel","showSecondaryButton","secondaryButtonLabel","isFooterCustom","isPrimaryLoader","isPrimaryDisabled","modalWidth","scrollable","setScrollableMode","closeModal","getFooterClass","subtitle","CustomPopup","width","buttonText","confirmText","cancelText","stackedActions","_onBackgroundClick","path","composedPath","popupContainer","focus","closePopup","action","ProgressCircle","max","circumference","Math","PI","safeMax","offset","min","ATTACHABLE_CONTROLLER","FOR_ATTRIBUTE_OBSERVER","isServer","MutationObserver","records","record","AttachableController","htmlFor","host","getAttribute","control","getRootNode","currentControl","attach","detach","onControlChange","observe","attributeFilter","setCurrentControl","EVENTS","FocusRing","visible","inward","attachableController","bind","handleEvent","HANDLED_BY_FOCUS_RING","matches","prev","next","changed","MdFocusRing","EASING","State","FORCED_COLORS","matchMedia","Ripple","hovered","pressed","rippleSize","rippleScale","initialSize","INACTIVE","checkBoundsAfterContextMenu","handlePointerenter","shouldReactToEvent","handlePointerleave","endPressAnimation","handlePointerup","HOLDING","TOUCH_DELAY","WAITING_FOR_CLICK","startPressAnimation","rippleStartEvent","handlePointerdown","isTouch","inBounds","resolve","setTimeout","handlePointercancel","handleContextmenu","determineRippleSize","height","getBoundingClientRect","maxDim","softEdgeSize","floor","maxRadius","sqrt","getNormalizedPointerEventCoords","pointerEvent","scrollX","scrollY","left","top","documentX","documentY","pageX","pageY","x","getTranslationCoordinates","positionEvent","endPoint","startPoint","PointerEvent","mdRoot","growAnimation","cancel","translateStart","translateEnd","animate","transform","pseudoElement","duration","easing","fill","animation","pressAnimationPlayState","Infinity","currentTime","to","isPrimary","pointerId","isPrimaryButton","buttons","bottom","right","pointerType","query","MdRipple","isActivationClick","squelched","isSquelchingEvents","stopImmediatePropagation","async","squelchEventsForMicrotask","squelchEvent","internals","privateInternals","createValidator","getValidityAnchor","privateValidator","privateSyncValidity","privateCustomValidationMessage","isFocusable","privateIsFocusable","externalTabIndex","isUpdatingTabIndex","updateTabIndex","getFormValue","getFormState","Validator","getCurrentState","currentValidity","validity","validationMessage","getValidity","prevState","equals","computeValidity","copy","badInput","customError","patternMismatch","rangeOverflow","rangeUnderflow","stepMismatch","tooLong","tooShort","typeMismatch","valueMissing","RadioValidator","states","radioElement","isRequired","isChecked","prevGroup","nextGroup","SingleSelectionController","controls","root","from","focused","handleFocusIn","updateTabIndices","handleFocusOut","isDown","isUp","isLeft","isRight","siblings","forwards","getComputedStyle","direction","hostIndex","indexOf","nextIndex","nextSibling","sibling","tabIndex","blur","uncheckSiblings","handleCheckedChange","checkedSibling","find","focusable","_a","CHECKED","maskId","radioBaseClass","base","ConstraintValidationElement","willValidate","checkValidity","reportValidity","setCustomValidity","oldValue","options","nonCustomValidationMessage","setValidity","mixinConstraintValidation","FormAssociatedElement","labels","toggleAttribute","old","setFormValue","formDisabledCallback","formAssociated","mixinFormAssociated","_b","_c","FocusableElement","internalTabIndex","computedTabIndex","mixinFocusable","attachInternals","Radio","wasChecked","selectionController","role","handleKeydown","ariaChecked","defaultPrevented","InputEvent","click","formResetCallback","formStateRestoreCallback","container","MdRadio","CustomRadio","radioClasses","join","FilterableSelect","defaultValue","filterable","isMobile","highlightedIndex","_isCleared","filteredOptions","filterValue","mobileFilterValue","debounceTimeout","updateResponsiveModeBound","updateResponsiveMode","changedProperties","targetValue","match","opt","handleClickOutside","handleInputClick","rawValue","filter","option","clearTimeout","handleMobileInput","handleSelect","handleIconClick","Node","contains","renderSelectedIcon","selectedOption","renderOptionIcon","index","isDisabled","stopPropagation","globalStyles","RandstadSnackbar","position","updateResponsiveStyles","classList","ariaRole","CustomStepper","totalSteps","currentStep","_","TabsBar","tabs","selected","internalSelected","showPrev","showNext","SCROLL_OFFSET","handleScroll","wrapper","scrollLeft","scrollWidth","clientWidth","selectTab","selectedTab","tab","scrollTabsLeft","tabLeft","offsetLeft","scrollTarget","scrollTo","behavior","scrollTabsRight","wrapperLeft","progressBarUploadStyles","UploadImage","files","simulatedDelay","loading","progress","isDragging","handleFiles","currentFiles","delay","startTime","Date","now","interval","setInterval","elapsedTime","newProgress","round","clearInterval","onFileInputChange","onDrop","dataTransfer","onDragOver","onDragLeave","millisecondsInWeek","constructFromSymbol","for","constructFrom","date","toDate","argument","context","addMonths","amount","_date","in","isNaN","NaN","dayOfMonth","getDate","endOfDesiredMonth","getTime","setMonth","getMonth","setFullYear","getFullYear","defaultOptions","getDefaultOptions","startOfWeek","weekStartsOn","locale","day","getDay","diff","setDate","setHours","startOfISOWeek","getISOWeekYear","year","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","getTimezoneOffsetInMilliseconds","utcDate","UTC","getHours","getMinutes","getSeconds","getMilliseconds","setUTCFullYear","normalizeDates","dates","normalize","startOfDay","addYears","isValid","startOfMonth","formatDistanceLocale","lessThanXSeconds","one","other","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","buildFormatLongFn","args","defaultWidth","formats","formatLong","full","long","medium","short","time","dateTime","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","buildLocalizeFn","valuesArray","formattingValues","defaultFormattingWidth","values","argumentCallback","buildMatchFn","string","matchPattern","matchPatterns","defaultMatchWidth","matchResult","matchedString","parsePatterns","defaultParseWidth","array","predicate","findIndex","pattern","test","object","findKey","valueCallback","rest","enUS","code","formatDistance","token","count","result","tokenValue","addSuffix","comparison","formatRelative","_baseDate","_options","localize","ordinalNumber","dirtyNumber","number","rem100","era","narrow","abbreviated","wide","quarter","month","dayPeriod","am","pm","midnight","noon","morning","afternoon","evening","night","parsePattern","parseInt","parseResult","any","firstWeekContainsDate","getDayOfYear","laterDate","earlierDate","laterDate_","earlierDate_","laterStartOfDay","earlierStartOfDay","laterTimestamp","earlierTimestamp","differenceInCalendarDays","date_","startOfYear","getISOWeek","fourthOfJanuary","startOfISOWeekYear","getWeekYear","firstWeekOfNextYear","firstWeekOfThisYear","getWeek","firstWeek","startOfWeekYear","addLeadingZeros","targetLength","abs","padStart","lightFormatters","signedYear","M","dayPeriodEnumValue","toUpperCase","H","m","numberOfDigits","milliseconds","trunc","pow","dayPeriodEnum","formatters","G","unit","Y","signedWeekYear","weekYear","R","Q","ceil","q","L","w","week","I","isoWeek","D","dayOfYear","E","dayOfWeek","localDayOfWeek","isoDayOfWeek","hours","B","K","k","X","_localize","timezoneOffset","getTimezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","O","formatTimezoneShort","z","T","delimiter","sign","absOffset","minutes","dateLongFormatter","timeLongFormatter","longFormatters","P","datePattern","timePattern","dateTimeFormat","dayOfYearTokenRE","weekYearTokenRE","throwTokens","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","format","formatStr","defaultLocale","originalDate","RangeError","parts","substring","firstCharacter","longFormatter","isToken","cleanEscapedString","preprocessor","formatterOptions","part","_message","subject","warn","warnOrThrowProtectedError","formatter","matched","getDaysInMonth","monthIndex","lastDayOfMonth","isAfter","dateToCompare","isBefore","isSameMonth","isSameYear","isToday","dateLeft_","dateRight_","isSameDay","constructNow","CalendarOverlay","selectedDate","viewDate","calendarWidth","minDate","maxDate","currentView","handleOutsideClick","handleHeaderClick","_updateView","newDate","newView","handleNavClick","dateFns.addMonths","dateFns.addYears","handleYearSelect","dateFns.setYear","handleMonthSelect","midMonth","daysInMonth","dateFns.setMonth","handleDayClick","getFullMonthNames","getShortMonthNames","getShortWeekdays","renderHeader","monthNames","headerText","disablePrev","disableNext","startYear","endYear","viewYear","dateFns.isSameMonth","dateFns.startOfMonth","dateFns.isBefore","dateFns.isAfter","renderYearsView","years","selectedYear","currentYear","minYear","maxYear","renderMonthsView","selectedMonth","currentMonth","isCurrentMonth","isSelected","dateFns.isSameYear","isSecondarySelected","renderDayView","dateFns.getDaysInMonth","leadingDays","days","dateFns.setDate","weekdays","normalizedDay","dateFns.startOfDay","normalizedSelectedDate","isTodayDay","dateFns.isToday","dateFns.getDate","dateFns.format","content","mainContent","DatePickerComponent","isRenderClearButton","eighteenOrOlder","setMessageErrorFormatInvalid","setInitialWidth","_syncValue","inputContainer","_parseAndValidateDate","handleCalendarButtonClick","handleClearDate","closeOverlay","handleDateSelect","handleViewDateChange","valueSet","parsedDate","_parseDate","_validateDate","eighteenYearsAgo","subYears","_isWithinBounds","range","_getValidDateRange","fromInput","dateString","partsDDMMYYYY","split","tempDate","partsYYYYMMDD","_parseDateString","minDateObj","maxDateObj","inputWrapperClasses","active","containerStyle","HTMLDivElement","FILE_TYPE_MAPPING","UploadFile","maxFiles","acceptedFileTypes","maxFileSize","applyWidth","getReadableFileTypes","readableTypes","lastType","pop","validateFiles","filesToValidate","maxFileSizeInMB","file","isFinite","remainingSlots","filesToUpload","fileInput","removeFile","isMaxFilesReached","buttonDisabled","HTMLInputElement"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101,102,103,104,106]}
1
+ {"version":3,"file":"index.js","sources":["../node_modules/tslib/tslib.es6.js","../node_modules/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/state.js","../node_modules/@lit/reactive-element/decorators/query.js","../node_modules/@lit/reactive-element/decorators/base.js","../src/helpers/BaseControl.ts","../src/styles/fontStyles.ts","../src/components/Accordion.ts","../src/components/AccordionList.ts","../src/components/Button.ts","../src/components/CarouselCards.ts","../src/components/Checkbox.ts","../src/styles/tooltip.ts","../src/styles/mix.ts","../src/styles/error.ts","../src/components/Form.ts","../src/components/FormGroup.ts","../src/components/Icon.ts","../src/components/Notice.ts","../src/components/Modal.ts","../src/components/Popup.ts","../src/components/ProgressCircle.ts","../node_modules/@material/web/internal/controller/attachable-controller.js","../node_modules/@material/web/focus/internal/focus-ring.js","../node_modules/@material/web/focus/internal/focus-ring-styles.js","../node_modules/@material/web/focus/md-focus-ring.js","../node_modules/@material/web/internal/motion/animation.js","../node_modules/@material/web/ripple/internal/ripple.js","../node_modules/@material/web/ripple/internal/ripple-styles.js","../node_modules/@material/web/ripple/ripple.js","../node_modules/@material/web/internal/events/form-label-activation.js","../node_modules/@material/web/labs/behaviors/element-internals.js","../node_modules/@material/web/labs/behaviors/constraint-validation.js","../node_modules/@material/web/labs/behaviors/focusable.js","../node_modules/@material/web/labs/behaviors/form-associated.js","../node_modules/@material/web/labs/behaviors/validators/validator.js","../node_modules/@material/web/labs/behaviors/validators/radio-validator.js","../node_modules/@material/web/radio/internal/single-selection-controller.js","../node_modules/@material/web/radio/internal/radio.js","../node_modules/@material/web/radio/internal/radio-styles.js","../node_modules/@material/web/radio/radio.js","../src/components/Radio.ts","../src/components/Select.ts","../src/styles/globalStyles.ts","../src/components/Snackbar.ts","../src/components/Stepper.ts","../src/components/Tabs.ts","../src/styles/progress-bar-upload.ts","../src/components/Upload.ts","../node_modules/date-fns/constants.js","../node_modules/date-fns/constructFrom.js","../node_modules/date-fns/toDate.js","../node_modules/date-fns/addMonths.js","../node_modules/date-fns/_lib/defaultOptions.js","../node_modules/date-fns/startOfWeek.js","../node_modules/date-fns/startOfISOWeek.js","../node_modules/date-fns/getISOWeekYear.js","../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","../node_modules/date-fns/_lib/normalizeDates.js","../node_modules/date-fns/startOfDay.js","../node_modules/date-fns/addYears.js","../node_modules/date-fns/isValid.js","../node_modules/date-fns/isDate.js","../node_modules/date-fns/startOfMonth.js","../node_modules/date-fns/locale/en-US/_lib/formatDistance.js","../node_modules/date-fns/locale/_lib/buildFormatLongFn.js","../node_modules/date-fns/locale/en-US/_lib/formatLong.js","../node_modules/date-fns/locale/en-US/_lib/formatRelative.js","../node_modules/date-fns/locale/_lib/buildLocalizeFn.js","../node_modules/date-fns/locale/_lib/buildMatchFn.js","../node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","../node_modules/date-fns/locale/en-US.js","../node_modules/date-fns/locale/en-US/_lib/localize.js","../node_modules/date-fns/locale/en-US/_lib/match.js","../node_modules/date-fns/getDayOfYear.js","../node_modules/date-fns/differenceInCalendarDays.js","../node_modules/date-fns/startOfYear.js","../node_modules/date-fns/getISOWeek.js","../node_modules/date-fns/startOfISOWeekYear.js","../node_modules/date-fns/getWeekYear.js","../node_modules/date-fns/getWeek.js","../node_modules/date-fns/startOfWeekYear.js","../node_modules/date-fns/_lib/addLeadingZeros.js","../node_modules/date-fns/_lib/format/lightFormatters.js","../node_modules/date-fns/_lib/format/formatters.js","../node_modules/date-fns/_lib/format/longFormatters.js","../node_modules/date-fns/_lib/protectedTokens.js","../node_modules/date-fns/format.js","../node_modules/date-fns/getDate.js","../node_modules/date-fns/getDaysInMonth.js","../node_modules/date-fns/isAfter.js","../node_modules/date-fns/isBefore.js","../node_modules/date-fns/isSameMonth.js","../node_modules/date-fns/isSameYear.js","../node_modules/date-fns/isToday.js","../node_modules/date-fns/isSameDay.js","../node_modules/date-fns/constructNow.js","../src/components/CalendarOverlay.ts","../node_modules/date-fns/setYear.js","../node_modules/date-fns/setMonth.js","../node_modules/date-fns/getDay.js","../node_modules/date-fns/setDate.js","../src/components/DatePicker.ts","../node_modules/date-fns/subYears.js","../src/utils/file-format.ts","../src/components/File.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, Iterator */\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 = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"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 = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\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\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\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 = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\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, inner;\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 if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\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\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 var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\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 __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\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 __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer((()=>{customElements.define(t,e)})):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce(((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1]),t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet));else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((t=>t(this)))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((t=>t.hostConnected?.()))}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach((t=>t.hostDisconnected?.()))}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e,this[e]=h.fromAttribute(s,t.type)??this._$Ej?.get(e)??null,this._$Em=null}}requestUpdate(t,s,i){if(void 0!==t){const e=this.constructor,h=this[t];if(i??=e.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(e._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach((t=>t.hostUpdate?.())),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach((t=>t.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach((t=>this._$ET(t,this[t]))),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.0\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","import{defaultConverter as t,notEqual as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:t,reflect:!1,hasChanged:e},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e,r){return(n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;if(r){const{get:e,set:r}=\"object\"==typeof s?n:i??(()=>{const t=Symbol();return{get(){return this[t]},set(e){this[t]=e}}})();return t(n,s,{get(){let t=e.call(this);return void 0===t&&(t=o(this),(null!==t||this.hasUpdated)&&r.call(this,t)),t}})}return t(n,s,{get(){return o(this)}})}}export{e as query};\n//# sourceMappingURL=query.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import { html, LitElement, nothing } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\n\n@customElement(\"base-control\")\nexport class BaseControl extends LitElement { \n @property({ type: String }) label = '';\n @property({ type: String }) placeholder = '';\n @property({ type: String }) labelColor = '';\n\n @property() value: any = '';\n\n @property({ type: Boolean }) required = false;\n @property({ type: Boolean }) optional = false;\n @property({ type: Boolean }) disabled = false;\n \n @property({ type: Boolean, reflect: true }) error = false;\n @property({ type: String }) errorMessage: string | null = null;\n\n @property({ type: String }) helper: string | null = null;\n @property({ type: String }) helperAlign: 'left' | 'center' | 'right' | 'justify' = 'left';\n\n @property({ type: String }) help?: string; // Icono con tooltip (no es un enlace)\n @property({ type: String }) helpLink?: string; // Icono que es un enlace\n @property({ type: String }) helpLinkTooltipMessage?: string; // Mensaje para el tooltip del enlace\n\n public renderLabelContainer() {\n return html `\n ${ this.label ? \n html`\n <div class=\"label-container\">\n ${ this.renderLabel() }\n \n ${ this.renderHelp() }\n </div>\n ` : ''\n }\n `;\n }\n \n public renderLabel() {\n return html `\n <label class=\"form-label\">\n ${ this.label }\n ${ this.required\n ? html`\n <span class=\"required\">*</span>`\n : this.optional\n ? html` <span class=\"optional\">opcional</span> `\n : nothing\n }\n </label>\n `;\n }\n\n public renderHelp() {\n return html`\n ${ this.help\n ? html`\n <div class=\"tooltip-wrapper\">\n <randstad-icon name=\"info\" size=\"20px\"></randstad-icon>\n \n <div class=\"tooltip\">${ this.help }</div>\n </div>\n `\n : this.helpLink\n ? html`\n <a class=\"tooltip-wrapper\" href=\"${ this.helpLink }\">\n <randstad-icon name=\"ayuda\" size=\"20px\"></randstad-icon>\n \n ${ this.helpLinkTooltipMessage\n ? html`<div class=\"tooltip\">${ this.helpLinkTooltipMessage }</div>`\n : nothing\n }\n </a>\n `\n : nothing\n }\n `;\n }\n\n public renderError() {\n return html`\n ${ this.error ? \n html `\n <div class=\"error-message\">\n ${ this.errorMessage ? this.errorMessage : html`<slot name=\"error-extended\"></slot>` }\n </div>\n `\n : nothing\n }\n `;\n }\n\n public renderHelper() {\n const helperInlineStyles = `text-align: ${ this.helperAlign ?? 'left' };`;\n\n return html`\n ${ this.helper\n ? html`\n <p \n class=\"helper-description\"\n style=${ helperInlineStyles }\n >\n ${ this.helper }\n </p>\n `\n : nothing\n }\n `;\n }\n}","import { css } from 'lit';\r\n\r\nexport const bodyXS = css`\r\n font-family: 'Graphik', sans-serif;\r\n font-weight: 400;\r\n font-size: 12px;\r\n line-height: 15px;\r\n letter-spacing: 0%;\r\n`;\r\n\r\nexport const bodyS = css`\r\n font-family: 'Graphik', sans-serif;\r\n font-weight: 400;\r\n font-size: 14px;\r\n line-height: 25px;\r\n letter-spacing: 0%;\r\n`;\r\n\r\nexport const bodyM = css`\r\n font-family: 'Graphik', sans-serif;\r\n font-weight: 400;\r\n font-size: 16px;\r\n line-height: 25px;\r\n letter-spacing: 0%;\r\n`;\r\n\r\nexport const bodyL = css`\r\n font-family: 'Graphik', sans-serif;\r\n font-weight: 400;\r\n font-size: 18px;\r\n line-height: 30px;\r\n letter-spacing: 0%;\r\n`;\r\n\r\nexport const titleXXS = css`\r\n font-family: 'Graphik', sans-serif;\r\n font-weight: 400;\r\n font-size: 18px;\r\n line-height: 30px;\r\n letter-spacing: 0%;\r\n vertical-align: middle;\r\n`;\r\n\r\nexport const titleXS = css`\r\n font-family: 'Graphik', sans-serif;\r\n font-weight: 400;\r\n font-size: 20px;\r\n line-height: 30px;\r\n letter-spacing: -1%;\r\n vertical-align: middle;\r\n`;\r\n\r\nexport const titleS = css`\r\n font-family: 'Graphik', sans-serif;\r\n font-weight: 400;\r\n font-size: 26px;\r\n line-height: 30px;\r\n letter-spacing: -1%;\r\n vertical-align: middle;\r\n`;\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport { bodyM } from '../styles/fontStyles';\r\n\r\n@customElement('accordion-panel')\r\nexport class AccordionPanel extends LitElement {\r\n @property({ type: String }) title = '';\r\n @state() private isOpen = false;\r\n @state() private isDesktop = window.innerWidth > 940;\r\n\r\n static styles = css`\r\n :host {\r\n display: flex;\r\n flex-direction: column;\r\n font-family: 'Graphik', sans-serif;\r\n position: relative;\r\n }\r\n\r\n .header {\r\n display: flex;\r\n justify-content: space-between;\r\n gap: 16px;\r\n flex-direction: row;\r\n align-items: center;\r\n cursor: pointer;\r\n padding-bottom: 16px;\r\n }\r\n\r\n .title {\r\n ${bodyM}\r\n color: var(--secondary-color);\r\n }\r\n\r\n .icon-wrapper {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n transition: background-color 0.3s ease;\r\n }\r\n\r\n .icon {\r\n transition: transform 0.3s;\r\n }\r\n\r\n .content {\r\n overflow: hidden;\r\n max-height: 0;\r\n transition: max-height 0.3s ease, padding-bottom 0.3s ease;\r\n }\r\n\r\n .content.open {\r\n max-height: 1000px;\r\n padding-bottom: 16px;\r\n }\r\n\r\n :host::after {\r\n content: '';\r\n display: block;\r\n height: 1px;\r\n background-color: var(--secondary-color-20);\r\n width: 100%;\r\n }\r\n\r\n @media (min-width: 941px) {\r\n .header {\r\n align-items: flex-start;\r\n }\r\n .header:hover .icon-wrapper {\r\n background-color: var(--primary-color-5);\r\n }\r\n }\r\n `;\r\n\r\n connectedCallback(): void {\r\n super.connectedCallback();\r\n window.addEventListener('resize', this.handleResize);\r\n }\r\n\r\n disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n window.removeEventListener('resize', this.handleResize);\r\n }\r\n\r\n private handleResize = () => {\r\n this.isDesktop = window.innerWidth > 940;\r\n };\r\n\r\n private toggle() {\r\n this.isOpen = !this.isOpen;\r\n }\r\n\r\n private renderIcon() {\r\n return this.isOpen\r\n ? html`<randstad-icon name=\"arrow_up\" size=\"24px\" style=\"--icon-color: var(--primary-color);\"></randstad-icon>`\r\n : html`<randstad-icon name=\"arrow_down\" size=\"24px\" style=\"--icon-color: var(--primary-color);\"></randstad-icon>`;\r\n }\r\n\r\n render() {\r\n return html`\r\n <div class=\"header\" @click=${this.toggle}>\r\n <div class=\"title\">${this.title}</div>\r\n <div class=\"icon\">\r\n ${this.isDesktop\r\n ? html`\r\n <div class=\"icon-wrapper\">\r\n ${this.renderIcon()}\r\n </div>\r\n `\r\n : this.renderIcon()}\r\n </div>\r\n </div>\r\n <div class=\"content ${this.isOpen ? 'open' : ''}\">\r\n <slot></slot>\r\n </div>\r\n `;\r\n }\r\n\r\n}\r\n","import { LitElement, css, html } from 'lit';\r\nimport { customElement } from 'lit/decorators.js';\r\n\r\n@customElement('accordion-list')\r\nexport class AccordionList extends LitElement {\r\n static styles = css`\r\n :host {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 16px;\r\n }\r\n `;\r\n\r\n render() {\r\n return html`<slot></slot>`;\r\n }\r\n}","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { bodyM, bodyL } from '../styles/fontStyles';\r\nimport { classMap } from 'lit/directives/class-map.js';\r\nimport '../styles/buttons.css';\r\n\r\n@customElement('randstad-button')\r\nexport class RandstadButton extends LitElement {\r\n @property({ type: String }) type: 'button' | 'submit' | 'reset' = 'button';\r\n @property({ type: String }) variant: 'button-primary' | 'button-secondary' | 'button-tertiary' | 'button-round' | 'button-card' | 'button-icon' = 'button-primary';\r\n \r\n @property({ type: String }) size: 'md' | 'lg' = 'md';\r\n @property({ type: String }) label = '';\r\n\r\n @property({ type: Boolean }) loader = false;\r\n\r\n @property({ type: String, attribute: 'icon-src' }) iconSrc?: string;\r\n @property({ type: String }) iconPosition: 'left' | 'right' = 'left';\r\n @property({ type: String }) iconName: string | null = null;\r\n\r\n @property({ type: Boolean, reflect: true }) disabled: boolean = false;\r\n \r\n @property({ type: String }) idevent = '';\r\n\r\n static styles = css`\r\n :host {\r\n display: inline-block;\r\n }\r\n\r\n .button {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n font-weight: 400;\r\n padding: 0;\r\n border: none;\r\n transition: background-color 0.2s, color 0.2s, box-shadow 0.2s;\r\n gap: 4px;\r\n width: 100%;\r\n position: relative;\r\n box-sizing: border-box; \r\n }\r\n\r\n .content-container {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 4px;\r\n width: 100%;\r\n padding: 16px;\r\n height: 100%;\r\n }\r\n\r\n .content-container .label-text {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n height: 100%;\r\n }\r\n\r\n .button-lg {\r\n ${bodyL}\r\n min-height: 62px;\r\n }\r\n\r\n .button-md {\r\n ${bodyM}\r\n min-height: 57px;\r\n }\r\n\r\n /* Primary */\r\n .button-primary {\r\n background-color: var(--primary-color);\r\n color: var(--white);\r\n }\r\n\r\n .button-primary:not([disabled]):hover {\r\n background-color: var(--primary-button-hover);\r\n }\r\n\r\n .button-primary:not([disabled]):active {\r\n background-color: var(--primary-button-active);\r\n }\r\n\r\n .button-primary:not([disabled]):focus-visible {\r\n outline: 2px solid var(--primary-button-focus);\r\n outline-offset: 2px;\r\n }\r\n\r\n .button-primary[disabled] {\r\n color: var(--secondary-color-60);\r\n background-color: var(--secondary-color-20);\r\n cursor: default;\r\n }\r\n\r\n /* Secondary */\r\n .button-secondary {\r\n background: none;\r\n color: var(--primary-color);\r\n border: 1px solid var(--primary-color);\r\n }\r\n\r\n .button-secondary:not([disabled]):hover {\r\n color: var(--primary-button-hover);\r\n border-color: var(--primary-button-hover);\r\n }\r\n\r\n .button-secondary:not([disabled]):active {\r\n color: var(--secondary-color-80);\r\n border-color: var(--secondary-color-80);\r\n }\r\n\r\n .button-secondary:not([disabled]):focus-visible {\r\n outline: 2px solid var(--primary-color);\r\n outline-offset: 2px;\r\n }\r\n\r\n .button-secondary[disabled] {\r\n color: var(--secondary-color-60);\r\n border-color: var(--secondary-color-60);\r\n cursor: default;\r\n }\r\n\r\n /* Tertiary */\r\n .button-tertiary {\r\n background: none;\r\n border: none;\r\n color: var(--primary-color);\r\n }\r\n\r\n .button-tertiary:not([disabled]):hover {\r\n background: var(--primary-color-5);\r\n }\r\n\r\n .button-tertiary:not([disabled]):active {\r\n background-color: var(--primary-color-10);\r\n }\r\n\r\n .button-tertiary:not([disabled]):focus-visible {\r\n outline: 2px solid var(--primary-color);\r\n outline-offset: 2px;\r\n }\r\n\r\n .button-tertiary[disabled] {\r\n color: var(--secondary-color-60);\r\n cursor: default;\r\n }\r\n\r\n /* Round */\r\n .button-round {\r\n width: 48px;\r\n height: 48px;\r\n border-radius: 50%;\r\n background-color: var(--white);\r\n box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.2);\r\n padding: 0;\r\n }\r\n\r\n .button-round:not([disabled]):hover {\r\n background-color: var(--randstad-blue-10);\r\n }\r\n\r\n .button-round:not([disabled]):active {\r\n background-color: var(--randstad-blue-40);\r\n }\r\n\r\n .button-round:not([disabled]):focus-visible {\r\n outline: 2px solid var(--primary-color);\r\n outline-offset: 2px;\r\n }\r\n\r\n .button-round[disabled] {\r\n background-color: var(--secondary-color-20);\r\n cursor: default;\r\n }\r\n\r\n .button-round img.button-icon {\r\n width: 24px;\r\n height: 24px;\r\n }\r\n\r\n /* Button Icon */\r\n .button-icon {\r\n background: none;\r\n border: none;\r\n color: var(--primary-color);\r\n padding: 4px;\r\n }\r\n\r\n .button-icon:not([disabled]):hover {\r\n background: var(--primary-color-5);\r\n }\r\n\r\n .button-icon:not([disabled]):active {\r\n background-color: var(--primary-color-10);\r\n }\r\n\r\n .button-icon:not([disabled]):focus-visible {\r\n outline: 2px solid var(--primary-color);\r\n outline-offset: 2px;\r\n }\r\n\r\n .button-icon[disabled] {\r\n color: var(--secondary-color-60);\r\n cursor: default;\r\n }\r\n \r\n /* Loader */\r\n .loader, .label-text, .button-icon {\r\n line-height: 1; \r\n }\r\n \r\n .loader {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 8px;\r\n }\r\n\r\n .dot {\r\n border-radius: 50%;\r\n display: inline-block;\r\n animation: growAndFade 2.4s infinite ease-in-out;\r\n }\r\n\r\n .button-md .dot {\r\n width: 6px;\r\n height: 6px;\r\n }\r\n\r\n .button-lg .dot {\r\n width: 8px;\r\n height: 8px;\r\n }\r\n\r\n .dot:nth-child(1) { animation-delay: 0s; }\r\n .dot:nth-child(2) { animation-delay: 0.8s; }\r\n .dot:nth-child(3) { animation-delay: 1.6s; }\r\n\r\n @keyframes growAndFade {\r\n 0% { transform: scale(1); }\r\n 16.67% { transform: scale(1.5); }\r\n 33.33% { transform: scale(1.5); }\r\n 50% { transform: scale(1); }\r\n 100% { transform: scale(1); }\r\n }\r\n\r\n .button-primary.loader .dot,\r\n .button-secondary.loader .dot {\r\n background-color: var(--white);\r\n }\r\n\r\n .button-secondary.loader {\r\n background-color: var(--primary-color);\r\n border: none;\r\n color: var(--white);\r\n }\r\n\r\n /* Estilos de sobrescritura para el estado de carga */\r\n .button-primary.loader[disabled] {\r\n background-color: var(--primary-color) !important;\r\n color: var(--white) !important;\r\n }\r\n\r\n .button-secondary.loader[disabled] {\r\n background-color: var(--primary-color) !important;\r\n border-color: var(--primary-color) !important;\r\n color: var(--white) !important;\r\n }\r\n\r\n .button-tertiary.loader[disabled] {\r\n color: var(--primary-color) !important;\r\n background-color: transparent !important;\r\n }\r\n\r\n .button-round.loader[disabled] {\r\n background-color: var(--white) !important;\r\n }\r\n\r\n .button-icon.loader[disabled] {\r\n color: var(--primary-color) !important;\r\n background-color: transparent !important;\r\n }\r\n /* */ \r\n\r\n .button-card {\r\n font-family: 'Graphik';\r\n background-color: var(--primary-color);\r\n color: var(--white);\r\n border-radius: 4px;\r\n padding: 4px 16px;\r\n font-weight: 400;\r\n font-size: 12px;\r\n line-height: 15px;\r\n letter-spacing: 0%;\r\n text-align: center;\r\n vertical-align: middle;\r\n\r\n }\r\n\r\n .button-card:not([disabled]):hover {\r\n background-color: #175197;\r\n }\r\n\r\n .button-card:not([disabled]):active {\r\n background-color: #124077;\r\n }\r\n\r\n .button-card:not([disabled]):focus-visible {\r\n outline: 2px solid var(--primary-color);\r\n outline-offset: 2px;\r\n }\r\n\r\n .button-card[disabled] {\r\n background-color: #CFD1D9;\r\n color: #6F758D;\r\n cursor: default;\r\n }\r\n\r\n `;\r\n\r\n private handleClick(event: Event) {\r\n if (this.disabled) return;\r\n\r\n if (this.type === 'submit') {\r\n const form = this.closest('form');\r\n if (form) form.requestSubmit();\r\n } else if( this.type === 'reset'){\r\n const form = this.closest('form');\r\n if (form) form.reset();\r\n } else if(this.idevent){\r\n const result = this.dispatchEvent(new CustomEvent('randstad-button-click',{detail:this.idevent,composed:true, bubbles: true, cancelable: false}))\r\n }\r\n }\r\n\r\n public render() {\r\n const classes = {\r\n button: true,\r\n [this.variant]: true,\r\n loader: this.loader,\r\n [`button-${this.size}`]: ['button-primary', 'button-secondary', 'button-tertiary'].includes(this.variant)\r\n };\r\n \r\n const dotColor = this.variant === 'button-tertiary' ? 'var(--primary-color)' : 'white';\r\n\r\n return html`\r\n <button\r\n part=\"button\"\r\n type=${this.type}\r\n class=${classMap(classes)}\r\n ?disabled=${this.disabled || this.loader}\r\n ?aria-busy=${this.loader}\r\n @click=${this.handleClick}\r\n >\r\n ${this.loader\r\n ? html`\r\n <div class=\"content-container\">\r\n <div class=\"loader\">\r\n <span class=\"dot\" style=\"background-color: ${dotColor};\"></span>\r\n <span class=\"dot\" style=\"background-color: ${dotColor};\"></span>\r\n <span class=\"dot\" style=\"background-color: ${dotColor};\"></span>\r\n </div>\r\n </div>\r\n `\r\n : html`\r\n <div class=\"content-container\">\r\n ${this.iconSrc && this.variant === 'button-round'\r\n ? html`<img src=${this.iconSrc} alt=\"icon\" class=\"button-icon\" part=\"button-icon\"/>`\r\n : ''}\r\n \r\n ${this.iconName && this.variant !== 'button-round' && this.iconPosition === 'left'\r\n ? html`<randstad-icon name=${this.iconName} size=\"24px\"></randstad-icon>`\r\n : ''}\r\n \r\n ${this.label ? html`<span class=\"label-text\" part=\"label\">${this.label}</span>` : html`<slot></slot>`}\r\n \r\n ${this.iconName && this.variant !== 'button-round' && this.iconPosition === 'right'\r\n ? html`<randstad-icon name=${this.iconName} size=\"24px\"></randstad-icon>`\r\n : ''}\r\n </div>\r\n `}\r\n </button>\r\n `;\r\n }\r\n}","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { bodyS, bodyL } from '../styles/fontStyles';\r\n\r\n@customElement('carousel-card')\r\nexport class CarouselCard extends LitElement {\r\n @property({ type: String }) img = '';\r\n @property({ type: String }) name = '';\r\n @property({ type: String }) title = '';\r\n @property({ type: String }) description = '';\r\n @property({ type: String }) buttonLabel = 'Contactanos';\r\n @property({ type: String }) cardId = '';\r\n\r\n static styles = css`\r\n :host {\r\n display: inline-block;\r\n font-family: \"Graphik\", sans-serif;\r\n }\r\n\r\n .image-container {\r\n width: 280px;\r\n height: 390px;\r\n position: relative;\r\n border-radius: 8px;\r\n overflow: hidden;\r\n background-size: cover;\r\n background-position: center;\r\n background-repeat: no-repeat;\r\n display: flex;\r\n align-items: flex-end;\r\n }\r\n\r\n .overlay-gradient,\r\n .overlay-hover {\r\n position: absolute;\r\n inset: 0;\r\n border-radius: 8px;\r\n transition: opacity 1s ease;\r\n z-index: 0;\r\n pointer-events: none;\r\n }\r\n\r\n .overlay-gradient {\r\n background: linear-gradient(180deg, rgba(15, 25, 65, 0) 0%, rgba(15, 25, 65, 0.279522) 48.01%, rgba(15, 25, 65, 0.6) 80.13%, rgba(15, 25, 65, 0.6) 100%);\r\n opacity: 1;\r\n }\r\n\r\n .overlay-hover {\r\n background: #0F1941CC;\r\n opacity: 0;\r\n }\r\n\r\n .image-container:hover .overlay-hover {\r\n opacity: 1;\r\n }\r\n\r\n .content-container {\r\n position: relative;\r\n z-index: 1;\r\n color: #FFFFFF;\r\n padding: 24px;\r\n box-sizing: border-box;\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n\r\n .title-wrapper {\r\n margin-bottom: 0; /* reset, por si acaso */\r\n }\r\n\r\n .title {\r\n ${bodyL}\r\n margin: 0;\r\n }\r\n\r\n .details {\r\n max-height: 0;\r\n overflow: hidden;\r\n opacity: 0;\r\n transform: translateY(40px);\r\n transition: max-height 0.4s ease, opacity 0.4s ease, transform 0.4s ease;\r\n }\r\n\r\n .image-container:hover .details {\r\n max-height: 240px;\r\n opacity: 1;\r\n transform: translateY(0);\r\n overflow: visible;\r\n }\r\n\r\n .description {\r\n ${bodyS}\r\n }\r\n\r\n ::part(button) {\r\n color: white;\r\n border: 1px solid white;\r\n background: transparent;\r\n text-align: left;\r\n }\r\n\r\n ::part(button):hover {\r\n background-color: rgba(255, 255, 255, 0.1);\r\n }\r\n\r\n ::part(button):active {\r\n background-color: rgba(255, 255, 255, 0.2);\r\n } \r\n `;\r\n\r\n render() {\r\n return html`\r\n <div class=\"image-container\" style=\"background-image: url(${this.img});\">\r\n <div class=\"overlay-gradient\"></div>\r\n <div class=\"overlay-hover\"></div>\r\n <div class=\"content-container\">\r\n <div class=\"title-wrapper\">\r\n <h3 class=\"title\">${this.name}</h3>\r\n </div>\r\n <div class=\"details\">\r\n <p class=\"description\">${this.description}</p>\r\n ${\r\n this.cardId ?\r\n html`<randstad-button\r\n variant=\"button-tertiary\"\r\n .label=${this.buttonLabel}\r\n idevent=${this.cardId}\r\n ></randstad-button>`\r\n :\r\n html`<randstad-button\r\n variant=\"button-tertiary\"\r\n .label=${this.buttonLabel}\r\n ></randstad-button>`\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n}\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { bodyS } from '../styles/fontStyles';\r\n\r\n@customElement('randstad-checkbox')\r\nexport class Checkbox extends LitElement {\r\n @property({ type: Boolean, reflect: true }) checked = false;\r\n @property({ type: Boolean }) error = false;\r\n @property({ type: Boolean }) disabled = false;\r\n\r\n\r\n static styles = css`\r\n :host {\r\n display: block;\r\n max-width: 100%;\r\n }\r\n\r\n label {\r\n ${bodyS}\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n color: var(--secondary-color);\r\n }\r\n\r\n input[type=\"checkbox\"] {\r\n min-width: 24px;\r\n min-height: 24px;\r\n cursor: pointer;\r\n border-radius: 4px;\r\n border: 1px solid var(--secondary-color-20);\r\n appearance: none;\r\n position: relative;\r\n }\r\n\r\n input[type=\"checkbox\"]:checked {\r\n background-color: var(--primary-color);\r\n border: 1px solid var(--primary-color);\r\n }\r\n\r\n input[type=\"checkbox\"]:checked::after {\r\n content: '';\r\n position: absolute;\r\n left: 8px;\r\n top: 4px;\r\n width: 5px;\r\n height: 11px;\r\n border: solid white;\r\n border-width: 0 1px 1px 0;\r\n transform: rotate(45deg);\r\n }\r\n\r\n input[type=\"checkbox\"]:checked:disabled::after {\r\n border-color: var(--secondary-color-40);\r\n }\r\n\r\n label.error input[type=\"checkbox\"]:checked:disabled::after {\r\n border-color: white;\r\n }\r\n\r\n .terms-text {\r\n display: inline;\r\n }\r\n\r\n .terms-text ::slotted(a) {\r\n color: var(--primary-color);\r\n text-decoration: none;\r\n cursor: pointer;\r\n }\r\n\r\n input[type=\"checkbox\"].error,\r\n label.error input[type=\"checkbox\"]:not(:disabled) {\r\n border-color: var(--ui-negative);\r\n }\r\n\r\n /* Hover sin error (solo si no está deshabilitado) */\r\n input[type=\"checkbox\"]:hover:not(:disabled):not(.error) {\r\n box-shadow: 0 0 0 4px var(--secondary-color-10);\r\n }\r\n\r\n /* Hover con error (solo si no está deshabilitado) */\r\n label.error input[type=\"checkbox\"]:hover:not(:disabled) {\r\n box-shadow: 0px 0px 0px 4px #E00F0F1A;\r\n }\r\n\r\n /* ✅ Focus sin error */\r\n input[type=\"checkbox\"]:focus-visible:not(:disabled):not(.error),\r\n label:not(.error) input[type=\"checkbox\"]:focus-visible:not(:disabled) {\r\n outline: none;\r\n box-shadow: 0 0 0 4px var(--secondary-color-10);\r\n }\r\n\r\n /* ❌ Focus con error */\r\n label.error input[type=\"checkbox\"]:focus-visible:not(:disabled) {\r\n outline: none;\r\n box-shadow: 0 0 0 4px #E00F0F1A;\r\n }\r\n\r\n input[type=\"checkbox\"].error:checked,\r\n label.error input[type=\"checkbox\"]:checked {\r\n background-color: var(--ui-negative);\r\n border-color: var(--ui-negative);\r\n }\r\n\r\n input[type=\"checkbox\"]:disabled {\r\n background-color: var(--secondary-color-10);\r\n border-color: var(--secondary-color-20);\r\n color: #9FA3B3;\r\n cursor: default;\r\n }\r\n\r\n label.disabled {\r\n color: #9FA3B3;\r\n }\r\n `;\r\n\r\n private toggleCheck(event: Event) {\r\n this.checked = (event.target as HTMLInputElement).checked;\r\n\r\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }));\r\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\r\n this.dispatchEvent(new Event('click', { bubbles: true, composed: true }));\r\n }\r\n\r\n render() {\r\n return html`\r\n <label class=\"${this.error ? 'error' : ''} ${this.disabled ? 'disabled' : ''}\">\r\n <input\r\n type=\"checkbox\"\r\n role=\"checkbox\"\r\n aria-checked=${this.checked ? 'true' : 'false'}\r\n .checked=${this.checked}\r\n ?disabled=${this.disabled}\r\n @change=${this.toggleCheck}\r\n @focus=${() => this.setAttribute('focused', '')}\r\n @blur=${() => this.removeAttribute('focused')}\r\n />\r\n <span class=\"terms-text\">\r\n <slot></slot>\r\n </span>\r\n </label>\r\n `;\r\n }\r\n}","import { css } from 'lit';\n\nexport const tooltipStyles = css`\n .label-container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n }\n \n .tooltip-wrapper {\n position: relative;\n display: inline-flex;\n align-items: center;\n }\n\n .tooltip {\n position: absolute;\n top: 160%;\n right: 0;\n \n background-color: var(--tooltip-background, #0F1941);\n color: var(--tooltip-color, #fff);\n\n padding: 8px 12px;\n border-radius: 4px;\n font-size: 14px;\n line-height: 20px;\n\n width: 250px;\n max-width: 250px;\n \n z-index: 10;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.2s ease, visibility 0.2s ease, transform 0.2s ease;\n }\n\n .tooltip::after {\n content: '';\n position: absolute;\n top: -6px;\n right: 4px;\n \n width: 0;\n height: 0;\n border-style: solid;\n border-width: 0 6px 6px 6px; \n border-color: transparent transparent var(--tooltip-background, #0F1941) transparent; \n }\n\n .tooltip-wrapper:hover .tooltip {\n visibility: visible;\n opacity: 1;\n }\n`;","\nimport { css } from \"lit\";\nimport { bodyL, bodyM, bodyXS } from \"./fontStyles\";\n\nexport const mixStyles = css `\n :host {\n display: block;\n font-family: \"Graphik\", sans-serif;\n color: var(--secondary-randstad-dark-blue, #0f1941);\n width: 100%;\n }\n\n .form-label {\n ${ bodyM }\n display: flex;\n align-items: baseline;\n flex-direction: row;\n gap: 4px;\n color: var(--label-color, var(--secondary-color-80));\n }\n\n .input-container {\n position: relative;\n width: 100%;\n max-width: 100%;\n }\n\n input::placeholder {\n ${ bodyL }\n color: var(--secondary-color-40);\n }\n\n .helper-description {\n ${ bodyM }\n color: var(--secondary-color-40);\n margin: 0;\n }\n\n .required {\n color: var(--ui-negative);\n }\n\n .optional {\n color: var(--secondary-color-60);\n ${ bodyXS }\n }\n\n randstad-icon {\n color: var(--primary-color);\n }\n`;","import { css } from \"lit\";\nimport { bodyM } from \"./fontStyles\";\n\nexport const errorStyles = css `\n :host([error]) .input-wrapper, .form.error .form-input {\n border: 1px solid var(--ui-negative, red) !important;\n }\n\n :host([error]) .input-wrapper:hover, .form.error:hover .form-input:hover {\n box-shadow: 0px 0px 0px 4px #e00f0f1a !important;\n }\n\n :host([error]) .input-wrapper.active, .form.error.active .form-input.active {\n border: 1px solid var(--ui-negative, red) !important;\n box-shadow: none !important;\n }\n\n .error-message {\n ${ bodyM }\n color: var(--ui-negative, #E00F0F);\n margin-top: 4px;\n }\n`;","import { html, css, nothing } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { bodyM, bodyL } from '../styles/fontStyles';\r\nimport { tooltipStyles } from \"../styles/tooltip\";\r\nimport { BaseControl } from '../helpers/BaseControl';\r\nimport { mixStyles } from '../styles/mix';\r\nimport { errorStyles } from '../styles/error';\r\n\r\n@customElement('randstad-form')\r\nexport class RandstadForm extends BaseControl {\r\n //Evento post input en tiempo real durante la escritura, para validación pattern only text y only numeric.\r\n @property({ type: String }) keydown: 'number' | 'text' | undefined = undefined;\r\n\r\n @property({ type: String }) size: 'sm' | 'md' | 'lg' = 'md';\r\n @property({ type: String }) icon: 'left' | 'right' | null = null;\r\n\r\n @property({ type: Boolean }) typing: boolean = false;\r\n @property({ type: String }) type: 'text' | 'password' | 'textarea' = 'text';\r\n\r\n @property({ type: String }) linkText?: string;\r\n @property({ type: String }) linkRoute?: string;\r\n\r\n @property({ type: Boolean, reflect: true }) isPasswordVisible = false;\r\n @property({ type: Boolean }) cleanButton: boolean = false;\r\n @property({ type: Number }) maxLength?: number;\r\n\r\n @property({ type: String }) heightTextArea?: string;\r\n @property({ type: String }) maxHeightTextArea?: string;\r\n\r\n static styles = css`\r\n ${ mixStyles }\r\n ${ errorStyles }\r\n ${ tooltipStyles }\r\n\r\n .form {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n width: 100%;\r\n }\r\n\r\n .form-input {\r\n ${bodyL}\r\n padding: 16px;\r\n border: 1px solid var(--secondary-color-10);\r\n border-radius: 4px;\r\n outline: none;\r\n transition: border-color 0.3s ease, box-shadow 0.3s ease;\r\n width: 100%;\r\n color: var(--secondary-color);\r\n }\r\n\r\n /* Hover normal (sin error ni foco) */\r\n .form:not(.error):not(:focus-within) .form-input:hover {\r\n box-shadow: 0px 0px 0px 4px var(--form-hover-shadow);\r\n }\r\n\r\n /* Hover con error (sin foco) */\r\n .form.error:not(:focus-within) .form-input:hover {\r\n box-shadow: 0px 0px 0px 4px var(--ui-negative-pink-shadow);\r\n }\r\n\r\n .form-input:focus {\r\n border: 2px solid var(--primary-color)\r\n }\r\n\r\n .form.disabled .form-input, \r\n .form.disabled .toggle-password randstad-icon,\r\n .form.disabled .clean-button randstad-icon {\r\n background-color: var( --secondary-color-10 );\r\n color: #9FA3B3;\r\n cursor: default;\r\n }\r\n \r\n .form.disabled .toggle-password,\r\n .form.disabled .clean-button {\r\n cursor: default;\r\n }\r\n\r\n .input-with-button {\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n position: relative;\r\n }\r\n\r\n .input-with-button input {\r\n width: 100%;\r\n }\r\n\r\n .input-with-button input[type=\"password\"]{\r\n padding-right: 40px;\r\n }\r\n\r\n .input-with-button button {\r\n position: absolute;\r\n right: 10px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 40px;\r\n height: 40px;\r\n }\r\n\r\n .toggle-password randstad-icon {\r\n width: 100%;\r\n height: 100%;\r\n max-width: 32px;\r\n max-height: 32px;\r\n }\r\n\r\n textarea {\r\n ${bodyL}\r\n resize: none;\r\n }\r\n\r\n textarea.form-input {\r\n min-height: 30px;\r\n width: 100%;\r\n }\r\n\r\n .form.disabled textarea.form-input {\r\n background-color: var(--secondary-color-10);\r\n color: #9FA3B3;\r\n cursor: default;\r\n }\r\n \r\n .link-text {\r\n ${bodyM}\r\n color: var(--primary-color);\r\n cursor: pointer;\r\n text-align: end;\r\n text-decoration: none;\r\n vertical-align: middle;\r\n display: inline;\r\n padding: 0;\r\n margin: 0;\r\n line-height: normal;\r\n }\r\n\r\n .link-text:hover {\r\n color: var(--secondary-color);\r\n }\r\n\r\n .clean-button {\r\n position: absolute;\r\n right: 10px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 40px;\r\n height: 40px;\r\n }\r\n\r\n .clean-button randstad-icon {\r\n width: 24px;\r\n height: 24px;\r\n color: var( --primary-color );\r\n }\r\n `;\r\n\r\n private togglePassword( event: Event ) {\r\n this.isPasswordVisible = !this.isPasswordVisible;\r\n\r\n const input: HTMLInputElement | null | undefined = ( event.currentTarget as HTMLElement ).parentElement?.querySelector( 'input' ); \r\n if ( input ) input.type = this.isPasswordVisible ? 'text' : 'password';\r\n\r\n this.requestUpdate();\r\n }\r\n\r\n private handleInput( event: Event ) {\r\n this.handleInputCustom( event );\r\n\r\n const target: HTMLInputElement | HTMLTextAreaElement = event.target as HTMLInputElement | HTMLTextAreaElement;\r\n const newValue: string = target.value;\r\n\r\n if ( this.maxLength !== undefined && this.type !== 'textarea' ) this.value = newValue.slice( 0, this.maxLength );\r\n else this.value = newValue;\r\n \r\n this.dispatchEvent( new CustomEvent('valueChanged', { detail: this.value }) );\r\n this.dispatchEvent( new Event('input', { bubbles: true }) );\r\n\r\n this.requestUpdate();\r\n }\r\n\r\n private handleClear() {\r\n this.value = '';\r\n\r\n this.dispatchEvent(new CustomEvent('valueChanged', { detail: this.value }));\r\n this.dispatchEvent(new Event('input', { bubbles: true }));\r\n\r\n this.requestUpdate();\r\n }\r\n\r\n private handleLinkClick( event: Event ) {\r\n event.preventDefault();\r\n if( !this.linkRoute ) return;\r\n\r\n this.dispatchEvent(\r\n new CustomEvent('linkClicked', {\r\n detail: this.linkRoute,\r\n bubbles: true,\r\n composed: true,\r\n })\r\n );\r\n }\r\n\r\n public handleInputCustom( event: Event ) {\r\n if ( this.keydown === 'number' ) this.onlyNumeric( event );\r\n else if ( this.keydown === 'text' ) this.onlyText( event );\r\n }\r\n\r\n public onlyNumeric( event: Event ) {\r\n const inputElement: HTMLInputElement = event.target as HTMLInputElement;\r\n const currentValue: string = inputElement.value;\r\n \r\n // Solo permite dígitos (0-9)\r\n const sanitizedValue: string = currentValue.replace(/[^0-9]/g, '');\r\n \r\n // Actualiza el valor del input con el valor limpio\r\n inputElement.value = sanitizedValue;\r\n }\r\n\r\n public onlyText( event: Event ) {\r\n const inputElement: HTMLInputElement = event.target as HTMLInputElement;\r\n const currentValue: string = inputElement.value;\r\n\r\n // Solo permite letras, espacios y caracteres acentuados comunes en español\r\n const sanitizedValue: string = currentValue.replace( /[^a-zA-Z\\sáéíóúñÁÉÍÓÚÑ]/g, '' );\r\n\r\n // Actualiza el valor del input con el valor limpio\r\n inputElement.value = sanitizedValue;\r\n }\r\n\r\n private handleKeyDown( event: KeyboardEvent ) {\r\n if ( event.key !== 'Enter' ) return;\r\n \r\n const submitEvent = new Event('submit', {\r\n bubbles: true,\r\n composed: true,\r\n cancelable: true,\r\n });\r\n\r\n const form: HTMLFormElement | null = this.closest( 'form' );\r\n if ( form ) form.dispatchEvent( submitEvent );\r\n }\r\n\r\n public render() {\r\n const showCleanButton =\r\n this.cleanButton &&\r\n this.value &&\r\n this.type !== 'password' &&\r\n this.type !== 'textarea'\r\n ;\r\n\r\n const textareaInlineStyles =\r\n this.type === 'textarea'\r\n ? `height: ${this.heightTextArea ?? '30px'}; max-height: ${this.maxHeightTextArea ?? \"30px\"}; overflow-y: auto;`\r\n : ''\r\n ;\r\n\r\n const formStyles = html`\r\n ${ this.labelColor ? `--label-color: ${ this.labelColor };` : '' }\r\n `;\r\n\r\n return html`\r\n <div\r\n class=\"form ${ this.error ? 'error' : ''} ${ this.disabled ? 'disabled' : '' }\"\r\n style=\"${formStyles}\"\r\n >\r\n ${ this.renderLabelContainer() }\r\n\r\n <div class=\"form-container\">\r\n ${this.icon === 'left'\r\n ? html`<span class=\"icon left\"></span>`\r\n : nothing\r\n }\r\n\r\n <div class=\"input-with-button\">\r\n ${this.type === 'textarea'\r\n ? html`\r\n <textarea\r\n class=\"form-input\"\r\n placeholder=${this.placeholder || ''}\r\n .value=${this.value}\r\n ?disabled=${this.disabled}\r\n @input=${this.handleInput}\r\n @keydown=${this.handleKeyDown}\r\n maxlength=${this.maxLength ?? nothing}\r\n style=\"${textareaInlineStyles}\"\r\n >\r\n </textarea>\r\n `\r\n : html`\r\n <input\r\n class=\"form-input\"\r\n type=${this.type === 'password' && !this.isPasswordVisible ? 'password' : 'text'}\r\n placeholder=${this.placeholder || ''}\r\n .value=${this.value}\r\n ?disabled=${this.disabled}\r\n @input=${this.handleInput}\r\n @keydown=${this.handleKeyDown}\r\n maxlength=${this.maxLength ?? nothing}\r\n />\r\n\r\n ${this.type === 'password'\r\n ? html`\r\n <button\r\n type=\"button\"\r\n class=\"toggle-password\"\r\n @click=${this.togglePassword}\r\n ?disabled=${this.disabled}\r\n >\r\n ${this.isPasswordVisible\r\n ? html`\r\n <randstad-icon \r\n name=\"eye_crossed\" \r\n size=\"24px\"\r\n >\r\n </randstad-icon>\r\n `\r\n\r\n : html`\r\n <randstad-icon \r\n name=\"eye\" \r\n size=\"24px\"\r\n >\r\n </randstad-icon>`\r\n }\r\n </button>`\r\n : nothing\r\n }\r\n\r\n ${showCleanButton\r\n ? html`\r\n <button\r\n type=\"button\"\r\n class=\"clean-button\"\r\n @click=${this.handleClear}\r\n ?disabled=${this.disabled}\r\n >\r\n <randstad-icon \r\n name=\"close\" \r\n size=\"24px\"\r\n >\r\n </randstad-icon>\r\n </button>`\r\n : nothing\r\n }\r\n `}\r\n </div>\r\n\r\n ${this.icon === 'right'\r\n ? html`<span class=\"icon right\"></span>`\r\n : nothing\r\n }\r\n\r\n ${ this.renderError() }\r\n </div>\r\n\r\n\r\n ${this.linkText && this.linkRoute\r\n ? html`\r\n <div style=\"text-align: end;\">\r\n <a class=\"link-text\" @click=${this.handleLinkClick}>\r\n ${this.linkText}\r\n </a>\r\n </div>`\r\n : nothing\r\n }\r\n\r\n ${ this.renderHelper() } \r\n </div>\r\n `;\r\n }\r\n}","import { html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { BaseControl } from '../helpers/BaseControl';\r\nimport { mixStyles } from '../styles/mix';\r\nimport { errorStyles } from '../styles/error';\r\nimport { tooltipStyles } from '../styles/tooltip';\r\n\r\n@customElement('randstad-form-group')\r\nexport class FormGroup extends BaseControl {\r\n // Coloca las field en formato grilla, según el valor suminstrado\r\n @property({ type: String }) rows: string = '';\r\n\r\n static styles = css`\r\n ${ mixStyles }\r\n ${ errorStyles }\r\n ${ tooltipStyles }\r\n \r\n :host {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n }\r\n\r\n .group-container {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n width: 100%;\r\n }\r\n\r\n .fields {\r\n gap: 8px;\r\n }\r\n `;\r\n\r\n public render() {\r\n const fieldsInlineStyles: string = this.rows ? `display: grid; grid-template-columns: ${this.rows};` : 'display: flex; flex-direction: column;';\r\n\r\n return html`\r\n <div class=\"group-container\">\r\n ${ this.renderLabelContainer() }\r\n\r\n <div class=\"input-container\">\r\n <div class=\"fields\" style=\"${ fieldsInlineStyles };\">\r\n <slot></slot>\r\n </div>\r\n\r\n ${ this.renderError() }\r\n </div>\r\n\r\n ${ this.renderHelper() }\r\n </div>\r\n `;\r\n }\r\n}","import { LitElement, css } from 'lit';\r\nimport { property } from 'lit/decorators.js';\r\n\r\nexport class IconComponent extends LitElement {\r\n @property({ type: String }) name = '';\r\n @property({ type: String }) size = '24px';\r\n\r\n static styles = css`\r\n :host {\r\n display: inline-flex;\r\n width: var(--icon-size, 24px);\r\n height: var(--icon-size, 24px);\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n\r\n svg {\r\n width: var(--icon-size, 24px);\r\n height: var(--icon-size, 24px);\r\n fill: var(--icon-color, currentColor);\r\n }\r\n `;\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n this.style.setProperty('--icon-size', this.size);\r\n }\r\n\r\n updated(changedProps: Map<string, unknown>) {\r\n if (changedProps.has('size')) {\r\n this.style.setProperty('--icon-size', this.size);\r\n }\r\n }\r\n\r\n async loadIcon() {\r\n try {\r\n const response = await fetch(`/assets/icons/${this.name}.svg`);\r\n if (!response.ok) throw new Error('Icon not found');\r\n const svgText = await response.text();\r\n\r\n const parser = new DOMParser();\r\n const svgDoc = parser.parseFromString(svgText, 'image/svg+xml');\r\n const svgElement = svgDoc.querySelector('svg');\r\n\r\n if (svgElement) {\r\n svgElement.removeAttribute('fill');\r\n svgElement.setAttribute('width', this.size);\r\n svgElement.setAttribute('height', this.size);\r\n svgElement.querySelectorAll('[fill]').forEach(el => el.removeAttribute('fill'));\r\n svgElement.setAttribute('fill', 'currentColor');\r\n if ('innerHTML' in this.renderRoot) {\r\n this.renderRoot.innerHTML = '';\r\n }\r\n this.renderRoot.appendChild(svgElement);\r\n } else {\r\n throw new Error('No se encontró un elemento SVG válido');\r\n }\r\n } catch (error) {\r\n console.error(`❌ Error cargando icono ${this.name}:`, error);\r\n if ('innerHTML' in this.renderRoot) {\r\n this.renderRoot.innerHTML = '<span>⚠️</span>';\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n this.loadIcon();\r\n return null;\r\n }\r\n}\r\n\r\ncustomElements.define('randstad-icon', IconComponent);\r\n","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { bodyM } from '../styles/fontStyles';\r\n\r\n@customElement('randstad-notice')\r\nexport class RandstadNotice extends LitElement {\r\n @property({ type: String }) type: string = 'informative';\r\n @property({ type: String }) icon: string = 'info';\r\n @property({ type: String }) message: string = 'Este es un mensaje.';\r\n @property({ type: Boolean }) open: boolean = false;\r\n\r\n static styles = css`\r\n :host {\r\n display: block;\r\n font-family: 'Graphik', sans-serif;\r\n }\r\n\r\n .container {\r\n ${bodyM}\r\n display: flex;\r\n align-items: flex-start;\r\n gap: 8px;\r\n border-radius: 8px;\r\n padding: 16px;\r\n color: var(--secondary-color);\r\n }\r\n\r\n .icon {\r\n font-size: 34px;\r\n flex-shrink: 0;\r\n }\r\n\r\n .hidden {\r\n display: none;\r\n }\r\n\r\n .success {\r\n border: 1px solid var(--ui-positive);\r\n background: var(--ui-positive-5);\r\n --icon-color: var(--ui-positive);\r\n }\r\n\r\n .error {\r\n border: 1px solid var(--ui-negative);\r\n background: var(--ui-negative-5);\r\n --icon-color: var(--ui-negative);\r\n }\r\n\r\n .warning {\r\n border: 1px solid var(--ui-warning);\r\n background: var(--ui-warning-10);\r\n --icon-color: var(--ui-warning);\r\n }\r\n \r\n .informative {\r\n border: 1px solid var(--ui-informative);\r\n background: var(--ui-informative-10);\r\n --icon-color: var(--ui-informative);\r\n }\r\n `;\r\n\r\n render() {\r\n return html`\r\n <div class=\"container ${this.open ? '' : 'hidden'} ${this.type}\">\r\n <randstad-icon class=\"icon\" name=\"${this.icon}\" size=\"24px\" style=\"color: var(--icon-color);\"></randstad-icon>\r\n <span class=\"message\">${this.message}</span>\r\n </div>\r\n `;\r\n }\r\n}","import { LitElement, html, css, nothing } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport { titleS, bodyM } from '../styles/fontStyles';\r\nimport '../components/Notice';\r\nimport '../components/Button';\r\n\r\n@customElement('custom-modal')\r\nexport class CustomModal extends LitElement {\r\n @property({ type: Boolean, reflect: true }) open = false;\r\n\r\n @property({ type: String }) title = 'Título del modal';\r\n @property({ type: String }) subtitle?: string;\r\n\r\n @property({ type: Boolean }) showNotice = false;\r\n @property({ type: String }) noticeType: 'success' | 'error' | 'warning' | 'informative' = 'informative';\r\n @property({ type: String }) noticeMessage = '';\r\n @property({ type: String }) noticeIcon = 'info';\r\n\r\n @property({ type: Boolean }) showPrimaryButton = false;\r\n @property({ type: String }) primaryButtonLabel = 'Aceptar';\r\n\r\n @property({ type: Boolean }) showSecondaryButton = false;\r\n @property({ type: String }) secondaryButtonLabel = 'Cancelar';\r\n\r\n @property({ type: Boolean }) isFooterCustom = false;\r\n @property({ type: Boolean }) isPrimaryLoader = false;\r\n @property({ type: Boolean }) isPrimaryDisabled = false;\r\n\r\n @property({ type: String }) modalWidth = '500px';\r\n\r\n @state() private scrollable = false;\r\n\r\n static styles = css`\r\n :host {\r\n font-family: 'Graphik', sans-serif;\r\n display: none;\r\n }\r\n\r\n :host([open]) {\r\n display: block;\r\n z-index: 9999;\r\n }\r\n\r\n .overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n z-index: 9999;\r\n display: flex;\r\n background: rgba(15, 25, 65, 0.4);\r\n justify-content: center;\r\n align-items: center;\r\n overflow-y: auto;\r\n }\r\n\r\n .modal {\r\n width: 100%;\r\n background: var(--brand-off-white);\r\n max-width: var(--modal-width);\r\n max-height: 80vh;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n display: flex;\r\n flex-direction: column;\r\n border-radius: 8px;\r\n }\r\n\r\n .modal-body {\r\n overflow-y: auto;\r\n flex: 1;\r\n }\r\n \r\n .modal-footer {\r\n justify-content: flex-end;\r\n }\r\n\r\n .modal-footer.one-button randstad-button {\r\n width: 100%;\r\n }\r\n\r\n .modal-footer.two-buttons randstad-button {\r\n width: 50%;\r\n }\r\n\r\n /* Estilos para dispositivos pequeños (<= 940px) */\r\n @media (max-width: 940px) {\r\n .modal {\r\n /* Se estira para ocupar casi toda la pantalla */\r\n width: 96vw; \r\n height: 96vh;\r\n max-width: none;\r\n max-height: none;\r\n margin: 0;\r\n }\r\n\r\n .modal-header,\r\n .modal-body,\r\n .modal-footer {\r\n padding: 0; \r\n }\r\n\r\n .modal-header {\r\n margin-bottom: 16px;\r\n }\r\n \r\n .modal-footer {\r\n margin-top: 16px;\r\n }\r\n }\r\n\r\n /* Estilos comunes a ambos tamaños de pantalla */\r\n .modal-header {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 24px;\r\n border-bottom: 1px solid var(--secondary-color-20);\r\n }\r\n\r\n .modal-header-content {\r\n display: flex;\r\n gap: 32px;\r\n width: 100%;\r\n justify-content: space-between;\r\n align-items: center;\r\n }\r\n\r\n .titles-container {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n flex-grow: 1;\r\n }\r\n\r\n .modal-title {\r\n ${titleS}\r\n margin: 0;\r\n color: var(--secondary-color);\r\n }\r\n\r\n .modal-subtitle {\r\n ${bodyM}\r\n margin: 0;\r\n color: var(--secondary-color-60);\r\n }\r\n\r\n .modal-header randstad-notice {\r\n width: 100%;\r\n }\r\n\r\n .modal-close {\r\n background: none;\r\n border: none;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 0;\r\n }\r\n\r\n .modal-body {\r\n display: flex;\r\n flex-direction: column;\r\n padding: 24px;\r\n gap: 16px;\r\n }\r\n\r\n .modal-footer {\r\n display: flex;\r\n padding: 24px;\r\n gap: 16px;\r\n border-top: 1px solid var(--secondary-color-20);\r\n }\r\n `;\r\n\r\n private closeModal() {\r\n this.dispatchEvent(new CustomEvent('modal-close'));\r\n }\r\n\r\n public connectedCallback() {\r\n super.connectedCallback();\r\n this.setScrollableMode();\r\n window.addEventListener('resize', this.setScrollableMode);\r\n }\r\n\r\n public disconnectedCallback() {\r\n super.disconnectedCallback();\r\n window.removeEventListener('resize', this.setScrollableMode);\r\n }\r\n\r\n private setScrollableMode = () => {\r\n this.scrollable = window.innerWidth > 940;\r\n };\r\n\r\n private getFooterClass(): string {\r\n if ( this.isFooterCustom && !this.showPrimaryButton && !this.showSecondaryButton )\r\n return 'footer-custom';\r\n \r\n if ( this.showPrimaryButton && this.showSecondaryButton )\r\n return 'two-buttons';\r\n\r\n return 'one-button';\r\n }\r\n\r\n public render() {\r\n return html`\r\n <div class=\"overlay\" role=\"dialog\" aria-modal=\"true\">\r\n <div class=\"modal\" style=\"--modal-width: ${this.modalWidth};\">\r\n <div class=\"modal-header\">\r\n <div class=\"modal-header-content\">\r\n <div class=\"titles-container\">\r\n <div class=\"modal-title\">${this.title}</div>\r\n \r\n ${this.subtitle\r\n ? html`<div class=\"modal-subtitle\">${this.subtitle}</div>`\r\n : nothing\r\n }\r\n </div>\r\n\r\n <button class=\"modal-close\" @click=${this.closeModal} aria-label=\"Cerrar modal\">\r\n <randstad-icon name=\"close\" size=\"24px\" style=\"--icon-color: var(--primary-color);\"></randstad-icon>\r\n </button>\r\n </div>\r\n\r\n ${this.showNotice\r\n ? html`\r\n <randstad-notice\r\n .open=${true}\r\n .type=${this.noticeType}\r\n .icon=${this.noticeIcon}\r\n .message=${this.noticeMessage}\r\n >\r\n </randstad-notice>\r\n `\r\n : nothing\r\n }\r\n </div>\r\n\r\n <div class=\"modal-body ${this.scrollable ? 'scrollable' : ''}\">\r\n <slot name=\"content\"></slot>\r\n </div>\r\n\r\n <div class=\"modal-footer ${ this.getFooterClass() }\">\r\n ${ this.isFooterCustom && !this.showPrimaryButton && !this.showSecondaryButton\r\n ? html` <slot name=\"footer-custom\"></slot> `\r\n : nothing\r\n }\r\n\r\n ${ this.showSecondaryButton\r\n ? html`\r\n <randstad-button\r\n variant=\"button-secondary\"\r\n size=\"md\"\r\n @click=${() => this.dispatchEvent(new CustomEvent('secondary-click'))}\r\n label=${this.secondaryButtonLabel}\r\n >\r\n </randstad-button>\r\n `\r\n : nothing\r\n }\r\n ${ this.showPrimaryButton\r\n ? html`\r\n <randstad-button\r\n variant=\"button-primary\"\r\n size=\"md\"\r\n @click=${() => this.dispatchEvent(new CustomEvent('primary-click'))}\r\n label=${this.primaryButtonLabel}\r\n .loader=${this.isPrimaryLoader}\r\n .disabled=${this.isPrimaryDisabled}\r\n >\r\n </randstad-button>\r\n `\r\n : nothing\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}","import { LitElement, html, css, nothing } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { titleXS, bodyM, titleXXS } from '../styles/fontStyles';\r\nimport '../components/Button';\r\nimport '../components/Icon';\r\n\r\ninterface PopupAction {\r\n icon: string;\r\n label: string;\r\n value: string;\r\n}\r\n\r\n@customElement('custom-popup')\r\nexport class CustomPopup extends LitElement {\r\n @property({ type: Boolean, reflect: true }) open = false;\r\n @property({ type: String }) type: 'default' | 'stacked' | 'other' = 'default';\r\n @property({ type: String }) icon = 'warning';\r\n \r\n @property({ type: String }) title = 'Título del Popup';\r\n @property({ type: String }) description = 'Descripción del popup';\r\n @property({ type: String }) width = '400px';\r\n\r\n @property({ type: String }) buttonText = 'Aceptar';\r\n @property({ type: String }) confirmText = 'Sí';\r\n @property({ type: String }) cancelText = 'No';\r\n\r\n @property({ type: Array }) stackedActions: PopupAction[] = [];\r\n\r\n\r\n static styles = css`\r\n :host {\r\n display: none;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: rgba(0, 0, 0, 0.5);\r\n justify-content: center;\r\n align-items: center;\r\n font-family: \"Graphik\", sans-serif;\r\n }\r\n\r\n :host([open]) {\r\n display: flex;\r\n }\r\n\r\n @media (max-width:500px){\r\n .popup {\r\n width: 100%;\r\n margin: 0px 25px;\r\n }\r\n }\r\n @media (min-width:501px){\r\n .popup {\r\n width: var(--popup-width, 358px);\r\n }\r\n }\r\n\r\n .popup {\r\n background: var(--white);\r\n padding: 24px;\r\n border-radius: 16px;\r\n text-align: center;\r\n animation: fadeIn 0.2s ease-in-out;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 24px;\r\n align-items: center;\r\n }\r\n\r\n @keyframes fadeIn {\r\n from { opacity: 0; transform: scale(0.9); }\r\n to { opacity: 1; transform: scale(1); }\r\n }\r\n\r\n .popup-content {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 24px;\r\n width: 100%;\r\n }\r\n\r\n .titles-container {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n align-items: center; \r\n }\r\n\r\n .popup-title {\r\n ${titleXS}\r\n margin: 0;\r\n color: var(--secondary-color-80);\r\n }\r\n\r\n .popup-description {\r\n ${bodyM}\r\n margin: 0;\r\n color: var(--secondary-color-60);\r\n }\r\n\r\n .buttons-container {\r\n margin-top: 12px;\r\n display: flex;\r\n gap: 10px;\r\n }\r\n\r\n .buttons-container ::slotted(randstad-button),\r\n .buttons-container randstad-button {\r\n flex: 1 1 50%;\r\n }\r\n\r\n :host([type=\"stacked\"]) .buttons-container {\r\n flex-direction: column;\r\n gap: 12px;\r\n }\r\n\r\n .popup-actions {\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n }\r\n\r\n .action-item {\r\n ${titleXXS};\r\n display: flex;\r\n align-items: center;\r\n gap: 16px;\r\n cursor: pointer;\r\n color: var(--secondary-color);\r\n padding: 16px;\r\n border-radius: 8px;\r\n transition: background 0.2s;\r\n }\r\n\r\n .action-item:hover {\r\n background: var(--secondary-color-10, #f0f4ff);\r\n }\r\n\r\n .icon-circle {\r\n width: 32px;\r\n height: 32px;\r\n background: var(--primary-color-20, #D3E3F7);\r\n border-radius: 50%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n\r\n `;\r\n\r\n firstUpdated() {\r\n if (this.open) {\r\n const button = this.renderRoot.querySelector('randstad-button');\r\n if (button) (button as HTMLElement).focus();\r\n }\r\n this.addEventListener('click', this._onBackgroundClick);\r\n }\r\n\r\n private _onBackgroundClick = (event: MouseEvent) => {\r\n const path = event.composedPath();\r\n const popupContainer = this.renderRoot.querySelector('.popup');\r\n\r\n if (popupContainer && !path.includes(popupContainer)) {\r\n this.dispatchEvent(new CustomEvent('popup-close', { detail: null }));\r\n this.open = false;\r\n }\r\n };\r\n\r\n disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.removeEventListener('click', this._onBackgroundClick);\r\n }\r\n\r\n closePopup(response: boolean | string) {\r\n this.dispatchEvent(new CustomEvent('popup-close', { detail: response }));\r\n this.open = false;\r\n }\r\n\r\n render() {\r\n return html`\r\n <div\r\n class=\"popup\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n ${this.type !== 'default' ? html`aria-labelledby=\"popup-title\"` : nothing}\r\n aria-describedby=\"popup-description\"\r\n >\r\n ${this.type !== 'stacked' && this.icon\r\n ? html`<img src=\"/assets/icons/${this.icon}\" alt=\"\" width=\"56\" height=\"56\" />`\r\n : nothing}\r\n\r\n <div class=\"popup-content\">\r\n ${this.type === 'default'\r\n ? html`\r\n ${ this.title ? html`<h2 id=\"popup-title\" class=\"popup-title\">${this.title}</h2>` : nothing }\r\n \r\n <div class=\"titles-container\">\r\n <p id=\"popup-description\" class=\"popup-description\">${this.description}</p>\r\n </div>\r\n\r\n <div class=\"buttons-container\">\r\n <randstad-button\r\n variant=\"button-primary\"\r\n size=\"md\"\r\n @click=${() => this.closePopup(true)}\r\n label=${this.buttonText}\r\n ></randstad-button>\r\n </div>\r\n `\r\n : this.type === 'stacked'\r\n ? html`\r\n <div class=\"popup-actions\">\r\n ${this.stackedActions.map(\r\n action => html`\r\n <div\r\n class=\"action-item\"\r\n @click=${() => this.closePopup(action.value)}\r\n >\r\n <div class=\"icon-circle\">\r\n <randstad-icon\r\n name=${action.icon}\r\n size=\"24px\"\r\n style=\"--icon-color: var(--primary-color);\"\r\n ></randstad-icon>\r\n </div>\r\n <span>${action.label}</span>\r\n </div>\r\n `\r\n )}\r\n </div>\r\n `\r\n : html`\r\n <div class=\"titles-container\">\r\n <h2 id=\"popup-title\" class=\"popup-title\">${this.title}</h2>\r\n <p id=\"popup-description\" class=\"popup-description\">${this.description}</p>\r\n </div>\r\n\r\n <div class=\"buttons-container\">\r\n <randstad-button\r\n variant=\"button-secondary\"\r\n size=\"md\"\r\n @click=${() => this.closePopup(false)}\r\n label=${this.cancelText}\r\n >\r\n </randstad-button>\r\n\r\n <randstad-button\r\n variant=\"button-primary\"\r\n size=\"md\"\r\n @click=${() => this.closePopup(true)}\r\n label=${this.confirmText}\r\n >\r\n </randstad-button>\r\n </div>\r\n `\r\n }\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n}","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport { bodyXS } from '../styles/fontStyles';\r\n\r\n@customElement('progress-circle')\r\nexport class ProgressCircle extends LitElement {\r\n @property({ type: Number }) value = 0;\r\n @property({ type: Number }) max = 5;\r\n\r\n static styles = css`\r\n :host {\r\n display: inline-block;\r\n width: 64px;\r\n height: 64px;\r\n }\r\n\r\n svg {\r\n width: 64px;\r\n height: 64px;\r\n }\r\n\r\n .circle-text {\r\n ${bodyXS};\r\n text-align: center;\r\n vertical-align: middle;\r\n fill: var(--randstad-dark-blue-40);\r\n text-anchor: middle;\r\n dominant-baseline: middle;\r\n }\r\n\r\n circle.bg {\r\n stroke: var(--primary-light-blue-20);\r\n }\r\n\r\n circle.fg {\r\n stroke: var(--primary-light-blue);\r\n stroke-linecap: round;\r\n }\r\n `;\r\n\r\n render() {\r\n const strokeWidth = 6;\r\n const radius = 28; // 64/2 - strokeWidth\r\n const circumference = 2 * Math.PI * radius;\r\n\r\n const safeMax = Math.max(this.max, 1);\r\n const progress = Math.min(this.value / safeMax, 1);\r\n const offset = circumference * (1 - progress);\r\n\r\n return html`\r\n <svg\r\n viewBox=\"0 0 64 64\"\r\n role=\"img\"\r\n aria-label=\"Progreso: ${this.value} de ${this.max}\"\r\n >\r\n <!-- Fondo -->\r\n <circle\r\n class=\"bg\"\r\n cx=\"32\"\r\n cy=\"32\"\r\n r=\"${radius}\"\r\n stroke-width=\"${strokeWidth}\"\r\n fill=\"none\"\r\n />\r\n <!-- Progreso -->\r\n <circle\r\n class=\"fg\"\r\n cx=\"32\"\r\n cy=\"32\"\r\n r=\"${radius}\"\r\n stroke-width=\"${strokeWidth}\"\r\n fill=\"none\"\r\n stroke-dasharray=\"${circumference}\"\r\n stroke-dashoffset=\"${offset}\"\r\n transform=\"rotate(-90 32 32)\"\r\n />\r\n <!-- Texto -->\r\n <text x=\"32\" y=\"34\" class=\"circle-text\">\r\n ${this.value} de ${this.max}\r\n </text>\r\n </svg>\r\n `;\r\n }\r\n}\r\n","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { isServer } from 'lit';\n/**\n * A key to retrieve an `Attachable` element's `AttachableController` from a\n * global `MutationObserver`.\n */\nconst ATTACHABLE_CONTROLLER = Symbol('attachableController');\nlet FOR_ATTRIBUTE_OBSERVER;\nif (!isServer) {\n /**\n * A global `MutationObserver` that reacts to `for` attribute changes on\n * `Attachable` elements. If the `for` attribute changes, the controller will\n * re-attach to the new referenced element.\n */\n FOR_ATTRIBUTE_OBSERVER = new MutationObserver((records) => {\n for (const record of records) {\n // When a control's `for` attribute changes, inform its\n // `AttachableController` to update to a new control.\n record.target[ATTACHABLE_CONTROLLER]?.hostConnected();\n }\n });\n}\n/**\n * A controller that provides an implementation for `Attachable` elements.\n *\n * @example\n * ```ts\n * class MyElement extends LitElement implements Attachable {\n * get control() { return this.attachableController.control; }\n *\n * private readonly attachableController = new AttachableController(\n * this,\n * (previousControl, newControl) => {\n * previousControl?.removeEventListener('click', this.handleClick);\n * newControl?.addEventListener('click', this.handleClick);\n * }\n * );\n *\n * // Implement remaining `Attachable` properties/methods that call the\n * // controller's properties/methods.\n * }\n * ```\n */\nexport class AttachableController {\n get htmlFor() {\n return this.host.getAttribute('for');\n }\n set htmlFor(htmlFor) {\n if (htmlFor === null) {\n this.host.removeAttribute('for');\n }\n else {\n this.host.setAttribute('for', htmlFor);\n }\n }\n get control() {\n if (this.host.hasAttribute('for')) {\n if (!this.htmlFor || !this.host.isConnected) {\n return null;\n }\n return this.host.getRootNode().querySelector(`#${this.htmlFor}`);\n }\n return this.currentControl || this.host.parentElement;\n }\n set control(control) {\n if (control) {\n this.attach(control);\n }\n else {\n this.detach();\n }\n }\n /**\n * Creates a new controller for an `Attachable` element.\n *\n * @param host The `Attachable` element.\n * @param onControlChange A callback with two parameters for the previous and\n * next control. An `Attachable` element may perform setup or teardown\n * logic whenever the control changes.\n */\n constructor(host, onControlChange) {\n this.host = host;\n this.onControlChange = onControlChange;\n this.currentControl = null;\n host.addController(this);\n host[ATTACHABLE_CONTROLLER] = this;\n FOR_ATTRIBUTE_OBSERVER?.observe(host, { attributeFilter: ['for'] });\n }\n attach(control) {\n if (control === this.currentControl) {\n return;\n }\n this.setCurrentControl(control);\n // When imperatively attaching, remove the `for` attribute so\n // that the attached control is used instead of a referenced one.\n this.host.removeAttribute('for');\n }\n detach() {\n this.setCurrentControl(null);\n // When imperatively detaching, add an empty `for=\"\"` attribute. This will\n // ensure the control is `null` rather than the `parentElement`.\n this.host.setAttribute('for', '');\n }\n /** @private */\n hostConnected() {\n this.setCurrentControl(this.control);\n }\n /** @private */\n hostDisconnected() {\n this.setCurrentControl(null);\n }\n setCurrentControl(control) {\n this.onControlChange(this.currentControl, control);\n this.currentControl = control;\n }\n}\n//# sourceMappingURL=attachable-controller.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { isServer, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { AttachableController, } from '../../internal/controller/attachable-controller.js';\n/**\n * Events that the focus ring listens to.\n */\nconst EVENTS = ['focusin', 'focusout', 'pointerdown'];\n/**\n * A focus ring component.\n *\n * @fires visibility-changed {Event} Fired whenever `visible` changes.\n */\nexport class FocusRing extends LitElement {\n constructor() {\n super(...arguments);\n /**\n * Makes the focus ring visible.\n */\n this.visible = false;\n /**\n * Makes the focus ring animate inwards instead of outwards.\n */\n this.inward = false;\n this.attachableController = new AttachableController(this, this.onControlChange.bind(this));\n }\n get htmlFor() {\n return this.attachableController.htmlFor;\n }\n set htmlFor(htmlFor) {\n this.attachableController.htmlFor = htmlFor;\n }\n get control() {\n return this.attachableController.control;\n }\n set control(control) {\n this.attachableController.control = control;\n }\n attach(control) {\n this.attachableController.attach(control);\n }\n detach() {\n this.attachableController.detach();\n }\n connectedCallback() {\n super.connectedCallback();\n // Needed for VoiceOver, which will create a \"group\" if the element is a\n // sibling to other content.\n this.setAttribute('aria-hidden', 'true');\n }\n /** @private */\n handleEvent(event) {\n if (event[HANDLED_BY_FOCUS_RING]) {\n // This ensures the focus ring does not activate when multiple focus rings\n // are used within a single component.\n return;\n }\n switch (event.type) {\n default:\n return;\n case 'focusin':\n this.visible = this.control?.matches(':focus-visible') ?? false;\n break;\n case 'focusout':\n case 'pointerdown':\n this.visible = false;\n break;\n }\n event[HANDLED_BY_FOCUS_RING] = true;\n }\n onControlChange(prev, next) {\n if (isServer)\n return;\n for (const event of EVENTS) {\n prev?.removeEventListener(event, this);\n next?.addEventListener(event, this);\n }\n }\n update(changed) {\n if (changed.has('visible')) {\n // This logic can be removed once the `:has` selector has been introduced\n // to Firefox. This is necessary to allow correct submenu styles.\n this.dispatchEvent(new Event('visibility-changed'));\n }\n super.update(changed);\n }\n}\n__decorate([\n property({ type: Boolean, reflect: true })\n], FocusRing.prototype, \"visible\", void 0);\n__decorate([\n property({ type: Boolean, reflect: true })\n], FocusRing.prototype, \"inward\", void 0);\nconst HANDLED_BY_FOCUS_RING = Symbol('handledByFocusRing');\n//# sourceMappingURL=focus-ring.js.map","/**\n * @license\n * Copyright 2024 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n// Generated stylesheet for ./focus/internal/focus-ring-styles.css.\nimport { css } from 'lit';\nexport const styles = css `:host{animation-delay:0s,calc(var(--md-focus-ring-duration, 600ms)*.25);animation-duration:calc(var(--md-focus-ring-duration, 600ms)*.25),calc(var(--md-focus-ring-duration, 600ms)*.75);animation-timing-function:cubic-bezier(0.2, 0, 0, 1);box-sizing:border-box;color:var(--md-focus-ring-color, var(--md-sys-color-secondary, #625b71));display:none;pointer-events:none;position:absolute}:host([visible]){display:flex}:host(:not([inward])){animation-name:outward-grow,outward-shrink;border-end-end-radius:calc(var(--md-focus-ring-shape-end-end, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) + var(--md-focus-ring-outward-offset, 2px));border-end-start-radius:calc(var(--md-focus-ring-shape-end-start, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) + var(--md-focus-ring-outward-offset, 2px));border-start-end-radius:calc(var(--md-focus-ring-shape-start-end, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) + var(--md-focus-ring-outward-offset, 2px));border-start-start-radius:calc(var(--md-focus-ring-shape-start-start, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) + var(--md-focus-ring-outward-offset, 2px));inset:calc(-1*var(--md-focus-ring-outward-offset, 2px));outline:var(--md-focus-ring-width, 3px) solid currentColor}:host([inward]){animation-name:inward-grow,inward-shrink;border-end-end-radius:calc(var(--md-focus-ring-shape-end-end, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) - var(--md-focus-ring-inward-offset, 0px));border-end-start-radius:calc(var(--md-focus-ring-shape-end-start, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) - var(--md-focus-ring-inward-offset, 0px));border-start-end-radius:calc(var(--md-focus-ring-shape-start-end, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) - var(--md-focus-ring-inward-offset, 0px));border-start-start-radius:calc(var(--md-focus-ring-shape-start-start, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) - var(--md-focus-ring-inward-offset, 0px));border:var(--md-focus-ring-width, 3px) solid currentColor;inset:var(--md-focus-ring-inward-offset, 0px)}@keyframes outward-grow{from{outline-width:0}to{outline-width:var(--md-focus-ring-active-width, 8px)}}@keyframes outward-shrink{from{outline-width:var(--md-focus-ring-active-width, 8px)}}@keyframes inward-grow{from{border-width:0}to{border-width:var(--md-focus-ring-active-width, 8px)}}@keyframes inward-shrink{from{border-width:var(--md-focus-ring-active-width, 8px)}}@media(prefers-reduced-motion){:host{animation:none}}\n`;\n//# sourceMappingURL=focus-ring-styles.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { customElement } from 'lit/decorators.js';\nimport { FocusRing } from './internal/focus-ring.js';\nimport { styles } from './internal/focus-ring-styles.js';\n/**\n * TODO(b/267336424): add docs\n *\n * @final\n * @suppress {visibility}\n */\nlet MdFocusRing = class MdFocusRing extends FocusRing {\n};\nMdFocusRing.styles = [styles];\nMdFocusRing = __decorate([\n customElement('md-focus-ring')\n], MdFocusRing);\nexport { MdFocusRing };\n//# sourceMappingURL=md-focus-ring.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * Easing functions to use for web animations.\n *\n * **NOTE:** `EASING.EMPHASIZED` is approximated with unknown accuracy.\n *\n * TODO(b/241113345): replace with tokens\n */\nexport const EASING = {\n STANDARD: 'cubic-bezier(0.2, 0, 0, 1)',\n STANDARD_ACCELERATE: 'cubic-bezier(.3,0,1,1)',\n STANDARD_DECELERATE: 'cubic-bezier(0,0,0,1)',\n EMPHASIZED: 'cubic-bezier(.3,0,0,1)',\n EMPHASIZED_ACCELERATE: 'cubic-bezier(.3,0,.8,.15)',\n EMPHASIZED_DECELERATE: 'cubic-bezier(.05,.7,.1,1)',\n};\n/**\n * Creates an `AnimationSignal` that can be used to cancel a previous task.\n *\n * @example\n * class MyClass {\n * private labelAnimationSignal = createAnimationSignal();\n *\n * private async animateLabel() {\n * // Start of the task. Previous tasks will be canceled.\n * const signal = this.labelAnimationSignal.start();\n *\n * // Do async work...\n * if (signal.aborted) {\n * // Use AbortSignal to check if a request was made to abort after some\n * // asynchronous work.\n * return;\n * }\n *\n * const animation = this.animate(...);\n * // Add event listeners to be notified when the task should be canceled.\n * signal.addEventListener('abort', () => {\n * animation.cancel();\n * });\n *\n * animation.addEventListener('finish', () => {\n * // Tell the signal that the current task is finished.\n * this.labelAnimationSignal.finish();\n * });\n * }\n * }\n *\n * @return An `AnimationSignal`.\n */\nexport function createAnimationSignal() {\n // The current animation's AbortController\n let animationAbortController = null;\n return {\n start() {\n // Tell the previous animation to cancel.\n animationAbortController?.abort();\n // Set up a new AbortController for the current animation.\n animationAbortController = new AbortController();\n // Provide the AbortSignal so that the caller can check aborted status\n // and add listeners.\n return animationAbortController.signal;\n },\n finish() {\n animationAbortController = null;\n },\n };\n}\n/**\n * Returns a function which can be used to throttle function calls\n * mapped to a key via a given function that should produce a promise that\n * determines the throttle amount (defaults to requestAnimationFrame).\n */\nexport function createThrottle() {\n const stack = new Set();\n return async (key = '', cb, timeout = async () => {\n await new Promise(requestAnimationFrame);\n }) => {\n if (!stack.has(key)) {\n stack.add(key);\n await timeout();\n if (stack.has(key)) {\n stack.delete(key);\n cb();\n }\n }\n };\n}\n/**\n * Parses an number in milliseconds from a css time value\n */\nexport function msFromTimeCSSValue(value) {\n const match = value.trim().match(/([\\d.]+)(\\s*s$)?/);\n const time = match?.[1];\n const seconds = match?.[2];\n return Number(time ?? 0) * (seconds ? 1000 : 1);\n}\n//# sourceMappingURL=animation.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { html, isServer, LitElement } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { AttachableController, } from '../../internal/controller/attachable-controller.js';\nimport { EASING } from '../../internal/motion/animation.js';\nconst PRESS_GROW_MS = 450;\nconst MINIMUM_PRESS_MS = 225;\nconst INITIAL_ORIGIN_SCALE = 0.2;\nconst PADDING = 10;\nconst SOFT_EDGE_MINIMUM_SIZE = 75;\nconst SOFT_EDGE_CONTAINER_RATIO = 0.35;\nconst PRESS_PSEUDO = '::after';\nconst ANIMATION_FILL = 'forwards';\n/**\n * Interaction states for the ripple.\n *\n * On Touch:\n * - `INACTIVE -> TOUCH_DELAY -> WAITING_FOR_CLICK -> INACTIVE`\n * - `INACTIVE -> TOUCH_DELAY -> HOLDING -> WAITING_FOR_CLICK -> INACTIVE`\n *\n * On Mouse or Pen:\n * - `INACTIVE -> WAITING_FOR_CLICK -> INACTIVE`\n */\nvar State;\n(function (State) {\n /**\n * Initial state of the control, no touch in progress.\n *\n * Transitions:\n * - on touch down: transition to `TOUCH_DELAY`.\n * - on mouse down: transition to `WAITING_FOR_CLICK`.\n */\n State[State[\"INACTIVE\"] = 0] = \"INACTIVE\";\n /**\n * Touch down has been received, waiting to determine if it's a swipe or\n * scroll.\n *\n * Transitions:\n * - on touch up: begin press; transition to `WAITING_FOR_CLICK`.\n * - on cancel: transition to `INACTIVE`.\n * - after `TOUCH_DELAY_MS`: begin press; transition to `HOLDING`.\n */\n State[State[\"TOUCH_DELAY\"] = 1] = \"TOUCH_DELAY\";\n /**\n * A touch has been deemed to be a press\n *\n * Transitions:\n * - on up: transition to `WAITING_FOR_CLICK`.\n */\n State[State[\"HOLDING\"] = 2] = \"HOLDING\";\n /**\n * The user touch has finished, transition into rest state.\n *\n * Transitions:\n * - on click end press; transition to `INACTIVE`.\n */\n State[State[\"WAITING_FOR_CLICK\"] = 3] = \"WAITING_FOR_CLICK\";\n})(State || (State = {}));\n/**\n * Events that the ripple listens to.\n */\nconst EVENTS = [\n 'click',\n 'contextmenu',\n 'pointercancel',\n 'pointerdown',\n 'pointerenter',\n 'pointerleave',\n 'pointerup',\n];\n/**\n * Delay reacting to touch so that we do not show the ripple for a swipe or\n * scroll interaction.\n */\nconst TOUCH_DELAY_MS = 150;\n/**\n * Used to detect if HCM is active. Events do not process during HCM when the\n * ripple is not displayed.\n */\nconst FORCED_COLORS = isServer\n ? null\n : window.matchMedia('(forced-colors: active)');\n/**\n * A ripple component.\n */\nexport class Ripple extends LitElement {\n constructor() {\n super(...arguments);\n /**\n * Disables the ripple.\n */\n this.disabled = false;\n this.hovered = false;\n this.pressed = false;\n this.rippleSize = '';\n this.rippleScale = '';\n this.initialSize = 0;\n this.state = State.INACTIVE;\n this.checkBoundsAfterContextMenu = false;\n this.attachableController = new AttachableController(this, this.onControlChange.bind(this));\n }\n get htmlFor() {\n return this.attachableController.htmlFor;\n }\n set htmlFor(htmlFor) {\n this.attachableController.htmlFor = htmlFor;\n }\n get control() {\n return this.attachableController.control;\n }\n set control(control) {\n this.attachableController.control = control;\n }\n attach(control) {\n this.attachableController.attach(control);\n }\n detach() {\n this.attachableController.detach();\n }\n connectedCallback() {\n super.connectedCallback();\n // Needed for VoiceOver, which will create a \"group\" if the element is a\n // sibling to other content.\n this.setAttribute('aria-hidden', 'true');\n }\n render() {\n const classes = {\n 'hovered': this.hovered,\n 'pressed': this.pressed,\n };\n return html `<div class=\"surface ${classMap(classes)}\"></div>`;\n }\n update(changedProps) {\n if (changedProps.has('disabled') && this.disabled) {\n this.hovered = false;\n this.pressed = false;\n }\n super.update(changedProps);\n }\n /**\n * TODO(b/269799771): make private\n * @private only public for slider\n */\n handlePointerenter(event) {\n if (!this.shouldReactToEvent(event)) {\n return;\n }\n this.hovered = true;\n }\n /**\n * TODO(b/269799771): make private\n * @private only public for slider\n */\n handlePointerleave(event) {\n if (!this.shouldReactToEvent(event)) {\n return;\n }\n this.hovered = false;\n // release a held mouse or pen press that moves outside the element\n if (this.state !== State.INACTIVE) {\n this.endPressAnimation();\n }\n }\n handlePointerup(event) {\n if (!this.shouldReactToEvent(event)) {\n return;\n }\n if (this.state === State.HOLDING) {\n this.state = State.WAITING_FOR_CLICK;\n return;\n }\n if (this.state === State.TOUCH_DELAY) {\n this.state = State.WAITING_FOR_CLICK;\n this.startPressAnimation(this.rippleStartEvent);\n return;\n }\n }\n async handlePointerdown(event) {\n if (!this.shouldReactToEvent(event)) {\n return;\n }\n this.rippleStartEvent = event;\n if (!this.isTouch(event)) {\n this.state = State.WAITING_FOR_CLICK;\n this.startPressAnimation(event);\n return;\n }\n // after a longpress contextmenu event, an extra `pointerdown` can be\n // dispatched to the pressed element. Check that the down is within\n // bounds of the element in this case.\n if (this.checkBoundsAfterContextMenu && !this.inBounds(event)) {\n return;\n }\n this.checkBoundsAfterContextMenu = false;\n // Wait for a hold after touch delay\n this.state = State.TOUCH_DELAY;\n await new Promise((resolve) => {\n setTimeout(resolve, TOUCH_DELAY_MS);\n });\n if (this.state !== State.TOUCH_DELAY) {\n return;\n }\n this.state = State.HOLDING;\n this.startPressAnimation(event);\n }\n handleClick() {\n // Click is a MouseEvent in Firefox and Safari, so we cannot use\n // `shouldReactToEvent`\n if (this.disabled) {\n return;\n }\n if (this.state === State.WAITING_FOR_CLICK) {\n this.endPressAnimation();\n return;\n }\n if (this.state === State.INACTIVE) {\n // keyboard synthesized click event\n this.startPressAnimation();\n this.endPressAnimation();\n }\n }\n handlePointercancel(event) {\n if (!this.shouldReactToEvent(event)) {\n return;\n }\n this.endPressAnimation();\n }\n handleContextmenu() {\n if (this.disabled) {\n return;\n }\n this.checkBoundsAfterContextMenu = true;\n this.endPressAnimation();\n }\n determineRippleSize() {\n const { height, width } = this.getBoundingClientRect();\n const maxDim = Math.max(height, width);\n const softEdgeSize = Math.max(SOFT_EDGE_CONTAINER_RATIO * maxDim, SOFT_EDGE_MINIMUM_SIZE);\n const initialSize = Math.floor(maxDim * INITIAL_ORIGIN_SCALE);\n const hypotenuse = Math.sqrt(width ** 2 + height ** 2);\n const maxRadius = hypotenuse + PADDING;\n this.initialSize = initialSize;\n this.rippleScale = `${(maxRadius + softEdgeSize) / initialSize}`;\n this.rippleSize = `${initialSize}px`;\n }\n getNormalizedPointerEventCoords(pointerEvent) {\n const { scrollX, scrollY } = window;\n const { left, top } = this.getBoundingClientRect();\n const documentX = scrollX + left;\n const documentY = scrollY + top;\n const { pageX, pageY } = pointerEvent;\n return { x: pageX - documentX, y: pageY - documentY };\n }\n getTranslationCoordinates(positionEvent) {\n const { height, width } = this.getBoundingClientRect();\n // end in the center\n const endPoint = {\n x: (width - this.initialSize) / 2,\n y: (height - this.initialSize) / 2,\n };\n let startPoint;\n if (positionEvent instanceof PointerEvent) {\n startPoint = this.getNormalizedPointerEventCoords(positionEvent);\n }\n else {\n startPoint = {\n x: width / 2,\n y: height / 2,\n };\n }\n // center around start point\n startPoint = {\n x: startPoint.x - this.initialSize / 2,\n y: startPoint.y - this.initialSize / 2,\n };\n return { startPoint, endPoint };\n }\n startPressAnimation(positionEvent) {\n if (!this.mdRoot) {\n return;\n }\n this.pressed = true;\n this.growAnimation?.cancel();\n this.determineRippleSize();\n const { startPoint, endPoint } = this.getTranslationCoordinates(positionEvent);\n const translateStart = `${startPoint.x}px, ${startPoint.y}px`;\n const translateEnd = `${endPoint.x}px, ${endPoint.y}px`;\n this.growAnimation = this.mdRoot.animate({\n top: [0, 0],\n left: [0, 0],\n height: [this.rippleSize, this.rippleSize],\n width: [this.rippleSize, this.rippleSize],\n transform: [\n `translate(${translateStart}) scale(1)`,\n `translate(${translateEnd}) scale(${this.rippleScale})`,\n ],\n }, {\n pseudoElement: PRESS_PSEUDO,\n duration: PRESS_GROW_MS,\n easing: EASING.STANDARD,\n fill: ANIMATION_FILL,\n });\n }\n async endPressAnimation() {\n this.rippleStartEvent = undefined;\n this.state = State.INACTIVE;\n const animation = this.growAnimation;\n let pressAnimationPlayState = Infinity;\n if (typeof animation?.currentTime === 'number') {\n pressAnimationPlayState = animation.currentTime;\n }\n else if (animation?.currentTime) {\n pressAnimationPlayState = animation.currentTime.to('ms').value;\n }\n if (pressAnimationPlayState >= MINIMUM_PRESS_MS) {\n this.pressed = false;\n return;\n }\n await new Promise((resolve) => {\n setTimeout(resolve, MINIMUM_PRESS_MS - pressAnimationPlayState);\n });\n if (this.growAnimation !== animation) {\n // A new press animation was started. The old animation was canceled and\n // should not finish the pressed state.\n return;\n }\n this.pressed = false;\n }\n /**\n * Returns `true` if\n * - the ripple element is enabled\n * - the pointer is primary for the input type\n * - the pointer is the pointer that started the interaction, or will start\n * the interaction\n * - the pointer is a touch, or the pointer state has the primary button\n * held, or the pointer is hovering\n */\n shouldReactToEvent(event) {\n if (this.disabled || !event.isPrimary) {\n return false;\n }\n if (this.rippleStartEvent &&\n this.rippleStartEvent.pointerId !== event.pointerId) {\n return false;\n }\n if (event.type === 'pointerenter' || event.type === 'pointerleave') {\n return !this.isTouch(event);\n }\n const isPrimaryButton = event.buttons === 1;\n return this.isTouch(event) || isPrimaryButton;\n }\n /**\n * Check if the event is within the bounds of the element.\n *\n * This is only needed for the \"stuck\" contextmenu longpress on Chrome.\n */\n inBounds({ x, y }) {\n const { top, left, bottom, right } = this.getBoundingClientRect();\n return x >= left && x <= right && y >= top && y <= bottom;\n }\n isTouch({ pointerType }) {\n return pointerType === 'touch';\n }\n /** @private */\n async handleEvent(event) {\n if (FORCED_COLORS?.matches) {\n // Skip event logic since the ripple is `display: none`.\n return;\n }\n switch (event.type) {\n case 'click':\n this.handleClick();\n break;\n case 'contextmenu':\n this.handleContextmenu();\n break;\n case 'pointercancel':\n this.handlePointercancel(event);\n break;\n case 'pointerdown':\n await this.handlePointerdown(event);\n break;\n case 'pointerenter':\n this.handlePointerenter(event);\n break;\n case 'pointerleave':\n this.handlePointerleave(event);\n break;\n case 'pointerup':\n this.handlePointerup(event);\n break;\n default:\n break;\n }\n }\n onControlChange(prev, next) {\n if (isServer)\n return;\n for (const event of EVENTS) {\n prev?.removeEventListener(event, this);\n next?.addEventListener(event, this);\n }\n }\n}\n__decorate([\n property({ type: Boolean, reflect: true })\n], Ripple.prototype, \"disabled\", void 0);\n__decorate([\n state()\n], Ripple.prototype, \"hovered\", void 0);\n__decorate([\n state()\n], Ripple.prototype, \"pressed\", void 0);\n__decorate([\n query('.surface')\n], Ripple.prototype, \"mdRoot\", void 0);\n//# sourceMappingURL=ripple.js.map","/**\n * @license\n * Copyright 2024 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n// Generated stylesheet for ./ripple/internal/ripple-styles.css.\nimport { css } from 'lit';\nexport const styles = css `:host{display:flex;margin:auto;pointer-events:none}:host([disabled]){display:none}@media(forced-colors: active){:host{display:none}}:host,.surface{border-radius:inherit;position:absolute;inset:0;overflow:hidden}.surface{-webkit-tap-highlight-color:rgba(0,0,0,0)}.surface::before,.surface::after{content:\"\";opacity:0;position:absolute}.surface::before{background-color:var(--md-ripple-hover-color, var(--md-sys-color-on-surface, #1d1b20));inset:0;transition:opacity 15ms linear,background-color 15ms linear}.surface::after{background:radial-gradient(closest-side, var(--md-ripple-pressed-color, var(--md-sys-color-on-surface, #1d1b20)) max(100% - 70px, 65%), transparent 100%);transform-origin:center center;transition:opacity 375ms linear}.hovered::before{background-color:var(--md-ripple-hover-color, var(--md-sys-color-on-surface, #1d1b20));opacity:var(--md-ripple-hover-opacity, 0.08)}.pressed::after{opacity:var(--md-ripple-pressed-opacity, 0.12);transition-duration:105ms}\n`;\n//# sourceMappingURL=ripple-styles.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { customElement } from 'lit/decorators.js';\nimport { Ripple } from './internal/ripple.js';\nimport { styles } from './internal/ripple-styles.js';\n/**\n * @summary Ripples, also known as state layers, are visual indicators used to\n * communicate the status of a component or interactive element.\n *\n * @description A state layer is a semi-transparent covering on an element that\n * indicates its state. State layers provide a systematic approach to\n * visualizing states by using opacity. A layer can be applied to an entire\n * element or in a circular shape and only one state layer can be applied at a\n * given time.\n *\n * @final\n * @suppress {visibility}\n */\nlet MdRipple = class MdRipple extends Ripple {\n};\nMdRipple.styles = [styles];\nMdRipple = __decorate([\n customElement('md-ripple')\n], MdRipple);\nexport { MdRipple };\n//# sourceMappingURL=ripple.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * Dispatches a click event to the given element that triggers a native action,\n * but is not composed and therefore is not seen outside the element.\n *\n * This is useful for responding to an external click event on the host element\n * that should trigger an internal action like a button click.\n *\n * Note, a helper is provided because setting this up correctly is a bit tricky.\n * In particular, calling `click` on an element creates a composed event, which\n * is not desirable, and a manually dispatched event must specifically be a\n * `MouseEvent` to trigger a native action.\n *\n * @example\n * hostClickListener = (event: MouseEvent) {\n * if (isActivationClick(event)) {\n * this.dispatchActivationClick(this.buttonElement);\n * }\n * }\n *\n */\nexport function dispatchActivationClick(element) {\n const event = new MouseEvent('click', { bubbles: true });\n element.dispatchEvent(event);\n return event;\n}\n/**\n * Returns true if the click event should trigger an activation behavior. The\n * behavior is defined by the element and is whatever it should do when\n * clicked.\n *\n * Typically when an element needs to handle a click, the click is generated\n * from within the element and an event listener within the element implements\n * the needed behavior; however, it's possible to fire a click directly\n * at the element that the element should handle. This method helps\n * distinguish these \"external\" clicks.\n *\n * An \"external\" click can be triggered in a number of ways: via a click\n * on an associated label for a form associated element, calling\n * `element.click()`, or calling\n * `element.dispatchEvent(new MouseEvent('click', ...))`.\n *\n * Also works around Firefox issue\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1804576 by squelching\n * events for a microtask after called.\n *\n * @example\n * hostClickListener = (event: MouseEvent) {\n * if (isActivationClick(event)) {\n * this.dispatchActivationClick(this.buttonElement);\n * }\n * }\n *\n */\nexport function isActivationClick(event) {\n // Event must start at the event target.\n if (event.currentTarget !== event.target) {\n return false;\n }\n // Event must not be retargeted from shadowRoot.\n if (event.composedPath()[0] !== event.target) {\n return false;\n }\n // Target must not be disabled; this should only occur for a synthetically\n // dispatched click.\n if (event.target.disabled) {\n return false;\n }\n // This is an activation if the event should not be squelched.\n return !squelchEvent(event);\n}\n// TODO(https://bugzilla.mozilla.org/show_bug.cgi?id=1804576)\n// Remove when Firefox bug is addressed.\nfunction squelchEvent(event) {\n const squelched = isSquelchingEvents;\n if (squelched) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n squelchEventsForMicrotask();\n return squelched;\n}\n// Ignore events for one microtask only.\nlet isSquelchingEvents = false;\nasync function squelchEventsForMicrotask() {\n isSquelchingEvents = true;\n // Need to pause for just one microtask.\n // tslint:disable-next-line\n await null;\n isSquelchingEvents = false;\n}\n//# sourceMappingURL=form-label-activation.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * A unique symbol used for protected access to an instance's\n * `ElementInternals`.\n *\n * @example\n * ```ts\n * class MyElement extends mixinElementInternals(LitElement) {\n * constructor() {\n * super();\n * this[internals].role = 'button';\n * }\n * }\n * ```\n */\nexport const internals = Symbol('internals');\n// Private symbols\nconst privateInternals = Symbol('privateInternals');\n/**\n * Mixes in an attached `ElementInternals` instance.\n *\n * This mixin is only needed when other shared code needs access to a\n * component's `ElementInternals`, such as form-associated mixins.\n *\n * @param base The class to mix functionality into.\n * @return The provided class with `WithElementInternals` mixed in.\n */\nexport function mixinElementInternals(base) {\n class WithElementInternalsElement extends base {\n get [internals]() {\n // Create internals in getter so that it can be used in methods called on\n // construction in `ReactiveElement`, such as `requestUpdate()`.\n if (!this[privateInternals]) {\n // Cast needed for closure\n this[privateInternals] = this.attachInternals();\n }\n return this[privateInternals];\n }\n }\n return WithElementInternalsElement;\n}\n//# sourceMappingURL=element-internals.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { isServer } from 'lit';\nimport { internals } from './element-internals.js';\n/**\n * A symbol property used to create a constraint validation `Validator`.\n * Required for all `mixinConstraintValidation()` elements.\n */\nexport const createValidator = Symbol('createValidator');\n/**\n * A symbol property used to return an anchor for constraint validation popups.\n * Required for all `mixinConstraintValidation()` elements.\n */\nexport const getValidityAnchor = Symbol('getValidityAnchor');\n// Private symbol members, used to avoid name clashing.\nconst privateValidator = Symbol('privateValidator');\nconst privateSyncValidity = Symbol('privateSyncValidity');\nconst privateCustomValidationMessage = Symbol('privateCustomValidationMessage');\n/**\n * Mixes in constraint validation APIs for an element.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/HTML/Constraint_validation\n * for more details.\n *\n * Implementations must provide a validator to cache and compute its validity,\n * along with a shadow root element to anchor validation popups to.\n *\n * @example\n * ```ts\n * const baseClass = mixinConstraintValidation(\n * mixinFormAssociated(mixinElementInternals(LitElement))\n * );\n *\n * class MyCheckbox extends baseClass {\n * \\@property({type: Boolean}) checked = false;\n * \\@property({type: Boolean}) required = false;\n *\n * [createValidator]() {\n * return new CheckboxValidator(() => this);\n * }\n *\n * [getValidityAnchor]() {\n * return this.renderRoot.querySelector('.root');\n * }\n * }\n * ```\n *\n * @param base The class to mix functionality into.\n * @return The provided class with `ConstraintValidation` mixed in.\n */\nexport function mixinConstraintValidation(base) {\n var _a;\n class ConstraintValidationElement extends base {\n constructor() {\n super(...arguments);\n /**\n * Needed for Safari, see https://bugs.webkit.org/show_bug.cgi?id=261432\n * Replace with this[internals].validity.customError when resolved.\n */\n this[_a] = '';\n }\n get validity() {\n this[privateSyncValidity]();\n return this[internals].validity;\n }\n get validationMessage() {\n this[privateSyncValidity]();\n return this[internals].validationMessage;\n }\n get willValidate() {\n this[privateSyncValidity]();\n return this[internals].willValidate;\n }\n checkValidity() {\n this[privateSyncValidity]();\n return this[internals].checkValidity();\n }\n reportValidity() {\n this[privateSyncValidity]();\n return this[internals].reportValidity();\n }\n setCustomValidity(error) {\n this[privateCustomValidationMessage] = error;\n this[privateSyncValidity]();\n }\n requestUpdate(name, oldValue, options) {\n super.requestUpdate(name, oldValue, options);\n this[privateSyncValidity]();\n }\n firstUpdated(changed) {\n super.firstUpdated(changed);\n // Sync the validity again when the element first renders, since the\n // validity anchor is now available.\n //\n // Elements that `delegatesFocus: true` to an `<input>` will throw an\n // error in Chrome and Safari when a form tries to submit or call\n // `form.reportValidity()`:\n // \"An invalid form control with name='' is not focusable\"\n //\n // The validity anchor MUST be provided in `internals.setValidity()` and\n // MUST be the `<input>` element rendered.\n //\n // See https://lit.dev/playground/#gist=6c26e418e0010f7a5aac15005cde8bde\n // for a reproduction.\n this[privateSyncValidity]();\n }\n [(_a = privateCustomValidationMessage, privateSyncValidity)]() {\n if (isServer) {\n return;\n }\n if (!this[privateValidator]) {\n this[privateValidator] = this[createValidator]();\n }\n const { validity, validationMessage: nonCustomValidationMessage } = this[privateValidator].getValidity();\n const customError = !!this[privateCustomValidationMessage];\n const validationMessage = this[privateCustomValidationMessage] || nonCustomValidationMessage;\n this[internals].setValidity({ ...validity, customError }, validationMessage, this[getValidityAnchor]() ?? undefined);\n }\n [createValidator]() {\n throw new Error('Implement [createValidator]');\n }\n [getValidityAnchor]() {\n throw new Error('Implement [getValidityAnchor]');\n }\n }\n return ConstraintValidationElement;\n}\n//# sourceMappingURL=constraint-validation.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { property } from 'lit/decorators.js';\n/**\n * A property symbol that indicates whether or not a `Focusable` element can be\n * focused.\n */\nexport const isFocusable = Symbol('isFocusable');\nconst privateIsFocusable = Symbol('privateIsFocusable');\nconst externalTabIndex = Symbol('externalTabIndex');\nconst isUpdatingTabIndex = Symbol('isUpdatingTabIndex');\nconst updateTabIndex = Symbol('updateTabIndex');\n/**\n * Mixes in focusable functionality for a class.\n *\n * Elements can enable and disable their focusability with the `isFocusable`\n * symbol property. Changing `tabIndex` will trigger a lit render, meaning\n * `this.tabIndex` can be used in template expressions.\n *\n * This mixin will preserve externally-set tabindices. If an element turns off\n * focusability, but a user sets `tabindex=\"0\"`, it will still be focusable.\n *\n * To remove user overrides and restore focusability control to the element,\n * remove the `tabindex` attribute.\n *\n * @param base The class to mix functionality into.\n * @return The provided class with `Focusable` mixed in.\n */\nexport function mixinFocusable(base) {\n var _a, _b, _c;\n class FocusableElement extends base {\n constructor() {\n super(...arguments);\n this[_a] = true;\n this[_b] = null;\n this[_c] = false;\n }\n get [isFocusable]() {\n return this[privateIsFocusable];\n }\n set [isFocusable](value) {\n if (this[isFocusable] === value) {\n return;\n }\n this[privateIsFocusable] = value;\n this[updateTabIndex]();\n }\n connectedCallback() {\n super.connectedCallback();\n this[updateTabIndex]();\n }\n attributeChangedCallback(name, old, value) {\n if (name !== 'tabindex') {\n super.attributeChangedCallback(name, old, value);\n return;\n }\n this.requestUpdate('tabIndex', Number(old ?? -1));\n if (this[isUpdatingTabIndex]) {\n // Not an externally-initiated update.\n return;\n }\n if (!this.hasAttribute('tabindex')) {\n // User removed the attribute, can now use internal tabIndex\n this[externalTabIndex] = null;\n this[updateTabIndex]();\n return;\n }\n this[externalTabIndex] = this.tabIndex;\n }\n [(_a = privateIsFocusable, _b = externalTabIndex, _c = isUpdatingTabIndex, updateTabIndex)]() {\n const internalTabIndex = this[isFocusable] ? 0 : -1;\n const computedTabIndex = this[externalTabIndex] ?? internalTabIndex;\n this[isUpdatingTabIndex] = true;\n this.tabIndex = computedTabIndex;\n this[isUpdatingTabIndex] = false;\n }\n }\n __decorate([\n property({ noAccessor: true })\n ], FocusableElement.prototype, \"tabIndex\", void 0);\n return FocusableElement;\n}\n//# sourceMappingURL=focusable.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { property } from 'lit/decorators.js';\nimport { internals } from './element-internals.js';\n/**\n * A symbol property to retrieve the form value for an element.\n */\nexport const getFormValue = Symbol('getFormValue');\n/**\n * A symbol property to retrieve the form state for an element.\n */\nexport const getFormState = Symbol('getFormState');\n/**\n * Mixes in form-associated behavior for a class. This allows an element to add\n * values to `<form>` elements.\n *\n * Implementing classes should provide a `[formValue]` to return the current\n * value of the element, as well as reset and restore callbacks.\n *\n * @example\n * ```ts\n * const base = mixinFormAssociated(mixinElementInternals(LitElement));\n *\n * class MyControl extends base {\n * \\@property()\n * value = '';\n *\n * override [getFormValue]() {\n * return this.value;\n * }\n *\n * override formResetCallback() {\n * const defaultValue = this.getAttribute('value');\n * this.value = defaultValue;\n * }\n *\n * override formStateRestoreCallback(state: string) {\n * this.value = state;\n * }\n * }\n * ```\n *\n * Elements may optionally provide a `[formState]` if their values do not\n * represent the state of the component.\n *\n * @example\n * ```ts\n * const base = mixinFormAssociated(mixinElementInternals(LitElement));\n *\n * class MyCheckbox extends base {\n * \\@property()\n * value = 'on';\n *\n * \\@property({type: Boolean})\n * checked = false;\n *\n * override [getFormValue]() {\n * return this.checked ? this.value : null;\n * }\n *\n * override [getFormState]() {\n * return String(this.checked);\n * }\n *\n * override formResetCallback() {\n * const defaultValue = this.hasAttribute('checked');\n * this.checked = defaultValue;\n * }\n *\n * override formStateRestoreCallback(state: string) {\n * this.checked = Boolean(state);\n * }\n * }\n * ```\n *\n * IMPORTANT: Requires declares for lit-analyzer\n * @example\n * ```ts\n * const base = mixinFormAssociated(mixinElementInternals(LitElement));\n * class MyControl extends base {\n * // Writable mixin properties for lit-html binding, needed for lit-analyzer\n * declare disabled: boolean;\n * declare name: string;\n * }\n * ```\n *\n * @param base The class to mix functionality into. The base class must use\n * `mixinElementInternals()`.\n * @return The provided class with `FormAssociated` mixed in.\n */\nexport function mixinFormAssociated(base) {\n class FormAssociatedElement extends base {\n get form() {\n return this[internals].form;\n }\n get labels() {\n return this[internals].labels;\n }\n // Use @property for the `name` and `disabled` properties to add them to the\n // `observedAttributes` array and trigger `attributeChangedCallback()`.\n //\n // We don't use Lit's default getter/setter (`noAccessor: true`) because\n // the attributes need to be updated synchronously to work with synchronous\n // form APIs, and Lit updates attributes async by default.\n get name() {\n return this.getAttribute('name') ?? '';\n }\n set name(name) {\n // Note: setting name to null or empty does not remove the attribute.\n this.setAttribute('name', name);\n // We don't need to call `requestUpdate()` since it's called synchronously\n // in `attributeChangedCallback()`.\n }\n get disabled() {\n return this.hasAttribute('disabled');\n }\n set disabled(disabled) {\n this.toggleAttribute('disabled', disabled);\n // We don't need to call `requestUpdate()` since it's called synchronously\n // in `attributeChangedCallback()`.\n }\n attributeChangedCallback(name, old, value) {\n // Manually `requestUpdate()` for `name` and `disabled` when their\n // attribute or property changes.\n // The properties update their attributes, so this callback is invoked\n // immediately when the properties are set. We call `requestUpdate()` here\n // instead of letting Lit set the properties from the attribute change.\n // That would cause the properties to re-set the attribute and invoke this\n // callback again in a loop. This leads to stale state when Lit tries to\n // determine if a property changed or not.\n if (name === 'name' || name === 'disabled') {\n // Disabled's value is only false if the attribute is missing and null.\n const oldValue = name === 'disabled' ? old !== null : old;\n // Trigger a lit update when the attribute changes.\n this.requestUpdate(name, oldValue);\n return;\n }\n super.attributeChangedCallback(name, old, value);\n }\n requestUpdate(name, oldValue, options) {\n super.requestUpdate(name, oldValue, options);\n // If any properties change, update the form value, which may have changed\n // as well.\n // Update the form value synchronously in `requestUpdate()` rather than\n // `update()` or `updated()`, which are async. This is necessary to ensure\n // that form data is updated in time for synchronous event listeners.\n this[internals].setFormValue(this[getFormValue](), this[getFormState]());\n }\n [getFormValue]() {\n // Closure does not allow abstract symbol members, so a default\n // implementation is needed.\n throw new Error('Implement [getFormValue]');\n }\n [getFormState]() {\n return this[getFormValue]();\n }\n formDisabledCallback(disabled) {\n this.disabled = disabled;\n }\n }\n /** @nocollapse */\n FormAssociatedElement.formAssociated = true;\n __decorate([\n property({ noAccessor: true })\n ], FormAssociatedElement.prototype, \"name\", null);\n __decorate([\n property({ type: Boolean, noAccessor: true })\n ], FormAssociatedElement.prototype, \"disabled\", null);\n return FormAssociatedElement;\n}\n//# sourceMappingURL=form-associated.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * A class that computes and caches `ValidityStateFlags` for a component with\n * a given `State` interface.\n *\n * Cached performance before computing validity is important since constraint\n * validation must be checked frequently and synchronously when properties\n * change.\n *\n * @template State The expected interface of properties relevant to constraint\n * validation.\n */\nexport class Validator {\n /**\n * Creates a new validator.\n *\n * @param getCurrentState A callback that returns the current state of\n * constraint validation-related properties.\n */\n constructor(getCurrentState) {\n this.getCurrentState = getCurrentState;\n /**\n * The current validity state and message. This is cached and returns if\n * constraint validation state does not change.\n */\n this.currentValidity = {\n validity: {},\n validationMessage: '',\n };\n }\n /**\n * Returns the current `ValidityStateFlags` and validation message for the\n * validator.\n *\n * If the constraint validation state has not changed, this will return a\n * cached result. This is important since `getValidity()` can be called\n * frequently in response to synchronous property changes.\n *\n * @return The current validity and validation message.\n */\n getValidity() {\n const state = this.getCurrentState();\n const hasStateChanged = !this.prevState || !this.equals(this.prevState, state);\n if (!hasStateChanged) {\n return this.currentValidity;\n }\n const { validity, validationMessage } = this.computeValidity(state);\n this.prevState = this.copy(state);\n this.currentValidity = {\n validationMessage,\n validity: {\n // Change any `ValidityState` instances into `ValidityStateFlags` since\n // `ValidityState` cannot be easily `{...spread}`.\n badInput: validity.badInput,\n customError: validity.customError,\n patternMismatch: validity.patternMismatch,\n rangeOverflow: validity.rangeOverflow,\n rangeUnderflow: validity.rangeUnderflow,\n stepMismatch: validity.stepMismatch,\n tooLong: validity.tooLong,\n tooShort: validity.tooShort,\n typeMismatch: validity.typeMismatch,\n valueMissing: validity.valueMissing,\n },\n };\n return this.currentValidity;\n }\n}\n//# sourceMappingURL=validator.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { Validator } from './validator.js';\n/**\n * A validator that provides constraint validation that emulates\n * `<input type=\"radio\">` validation.\n */\nexport class RadioValidator extends Validator {\n computeValidity(states) {\n if (!this.radioElement) {\n // Lazily create the radio element\n this.radioElement = document.createElement('input');\n this.radioElement.type = 'radio';\n // A name is required for validation to run\n this.radioElement.name = 'group';\n }\n let isRequired = false;\n let isChecked = false;\n for (const { checked, required } of states) {\n if (required) {\n isRequired = true;\n }\n if (checked) {\n isChecked = true;\n }\n }\n // Firefox v119 doesn't compute grouped radio validation correctly while\n // they are detached from the DOM, which is why we don't render multiple\n // virtual <input>s. Instead, we can check the required/checked states and\n // grab the i18n'd validation message if the value is missing.\n this.radioElement.checked = isChecked;\n this.radioElement.required = isRequired;\n return {\n validity: {\n valueMissing: isRequired && !isChecked,\n },\n validationMessage: this.radioElement.validationMessage,\n };\n }\n equals(prevGroup, nextGroup) {\n if (prevGroup.length !== nextGroup.length) {\n return false;\n }\n for (let i = 0; i < prevGroup.length; i++) {\n const prev = prevGroup[i];\n const next = nextGroup[i];\n if (prev.checked !== next.checked || prev.required !== next.required) {\n return false;\n }\n }\n return true;\n }\n copy(states) {\n // Cast as unknown since typescript does not have enough information to\n // infer that the array always has at least one element.\n return states.map(({ checked, required }) => ({\n checked,\n required,\n }));\n }\n}\n//# sourceMappingURL=radio-validator.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * A `ReactiveController` that provides root node-scoped single selection for\n * elements, similar to native `<input type=\"radio\">` selection.\n *\n * To use, elements should add the controller and call\n * `selectionController.handleCheckedChange()` in a getter/setter. This must\n * be synchronous to match native behavior.\n *\n * @example\n * const CHECKED = Symbol('checked');\n *\n * class MyToggle extends LitElement {\n * get checked() { return this[CHECKED]; }\n * set checked(checked: boolean) {\n * const oldValue = this.checked;\n * if (oldValue === checked) {\n * return;\n * }\n *\n * this[CHECKED] = checked;\n * this.selectionController.handleCheckedChange();\n * this.requestUpdate('checked', oldValue);\n * }\n *\n * [CHECKED] = false;\n *\n * private selectionController = new SingleSelectionController(this);\n *\n * constructor() {\n * super();\n * this.addController(this.selectionController);\n * }\n * }\n */\nexport class SingleSelectionController {\n /**\n * All single selection elements in the host element's root with the same\n * `name` attribute, including the host element.\n */\n get controls() {\n const name = this.host.getAttribute('name');\n if (!name || !this.root || !this.host.isConnected) {\n return [this.host];\n }\n // Cast as unknown since there is not enough information for typescript to\n // know that there is always at least one element (the host).\n return Array.from(this.root.querySelectorAll(`[name=\"${name}\"]`));\n }\n constructor(host) {\n this.host = host;\n this.focused = false;\n this.root = null;\n this.handleFocusIn = () => {\n this.focused = true;\n this.updateTabIndices();\n };\n this.handleFocusOut = () => {\n this.focused = false;\n this.updateTabIndices();\n };\n /**\n * Handles arrow key events from the host. Using the arrow keys will\n * select and check the next or previous sibling with the host's\n * `name` attribute.\n */\n this.handleKeyDown = (event) => {\n const isDown = event.key === 'ArrowDown';\n const isUp = event.key === 'ArrowUp';\n const isLeft = event.key === 'ArrowLeft';\n const isRight = event.key === 'ArrowRight';\n // Ignore non-arrow keys\n if (!isLeft && !isRight && !isDown && !isUp) {\n return;\n }\n // Don't try to select another sibling if there aren't any.\n const siblings = this.controls;\n if (!siblings.length) {\n return;\n }\n // Prevent default interactions on the element for arrow keys,\n // since this controller will introduce new behavior.\n event.preventDefault();\n // Check if moving forwards or backwards\n const isRtl = getComputedStyle(this.host).direction === 'rtl';\n const forwards = isRtl ? isLeft || isDown : isRight || isDown;\n const hostIndex = siblings.indexOf(this.host);\n let nextIndex = forwards ? hostIndex + 1 : hostIndex - 1;\n // Search for the next sibling that is not disabled to select.\n // If we return to the host index, there is nothing to select.\n while (nextIndex !== hostIndex) {\n if (nextIndex >= siblings.length) {\n // Return to start if moving past the last item.\n nextIndex = 0;\n }\n else if (nextIndex < 0) {\n // Go to end if moving before the first item.\n nextIndex = siblings.length - 1;\n }\n // Check if the next sibling is disabled. If so,\n // move the index and continue searching.\n const nextSibling = siblings[nextIndex];\n if (nextSibling.hasAttribute('disabled')) {\n if (forwards) {\n nextIndex++;\n }\n else {\n nextIndex--;\n }\n continue;\n }\n // Uncheck and remove focusability from other siblings.\n for (const sibling of siblings) {\n if (sibling !== nextSibling) {\n sibling.checked = false;\n sibling.tabIndex = -1;\n sibling.blur();\n }\n }\n // The next sibling should be checked, focused and dispatch a change event\n nextSibling.checked = true;\n nextSibling.tabIndex = 0;\n nextSibling.focus();\n // Fire a change event since the change is triggered by a user action.\n // This matches native <input type=\"radio\"> behavior.\n nextSibling.dispatchEvent(new Event('change', { bubbles: true }));\n break;\n }\n };\n }\n hostConnected() {\n this.root = this.host.getRootNode();\n this.host.addEventListener('keydown', this.handleKeyDown);\n this.host.addEventListener('focusin', this.handleFocusIn);\n this.host.addEventListener('focusout', this.handleFocusOut);\n if (this.host.checked) {\n // Uncheck other siblings when attached if already checked. This mimics\n // native <input type=\"radio\"> behavior.\n this.uncheckSiblings();\n }\n // Update for the newly added host.\n this.updateTabIndices();\n }\n hostDisconnected() {\n this.host.removeEventListener('keydown', this.handleKeyDown);\n this.host.removeEventListener('focusin', this.handleFocusIn);\n this.host.removeEventListener('focusout', this.handleFocusOut);\n // Update for siblings that are still connected.\n this.updateTabIndices();\n this.root = null;\n }\n /**\n * Should be called whenever the host's `checked` property changes\n * synchronously.\n */\n handleCheckedChange() {\n if (!this.host.checked) {\n return;\n }\n this.uncheckSiblings();\n this.updateTabIndices();\n }\n uncheckSiblings() {\n for (const sibling of this.controls) {\n if (sibling !== this.host) {\n sibling.checked = false;\n }\n }\n }\n /**\n * Updates the `tabindex` of the host and its siblings.\n */\n updateTabIndices() {\n // There are three tabindex states for a group of elements:\n // 1. If any are checked, that element is focusable.\n const siblings = this.controls;\n const checkedSibling = siblings.find((sibling) => sibling.checked);\n // 2. If an element is focused, the others are no longer focusable.\n if (checkedSibling || this.focused) {\n const focusable = checkedSibling || this.host;\n focusable.tabIndex = 0;\n for (const sibling of siblings) {\n if (sibling !== focusable) {\n sibling.tabIndex = -1;\n }\n }\n return;\n }\n // 3. If none are checked or focused, all are focusable.\n for (const sibling of siblings) {\n sibling.tabIndex = 0;\n }\n }\n}\n//# sourceMappingURL=single-selection-controller.js.map","/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nvar _a;\nimport { __decorate } from \"tslib\";\nimport '../../focus/md-focus-ring.js';\nimport '../../ripple/ripple.js';\nimport { html, isServer, LitElement } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { isActivationClick } from '../../internal/events/form-label-activation.js';\nimport { createValidator, getValidityAnchor, mixinConstraintValidation, } from '../../labs/behaviors/constraint-validation.js';\nimport { internals, mixinElementInternals, } from '../../labs/behaviors/element-internals.js';\nimport { mixinFocusable } from '../../labs/behaviors/focusable.js';\nimport { getFormState, getFormValue, mixinFormAssociated, } from '../../labs/behaviors/form-associated.js';\nimport { RadioValidator } from '../../labs/behaviors/validators/radio-validator.js';\nimport { SingleSelectionController } from './single-selection-controller.js';\nconst CHECKED = Symbol('checked');\nlet maskId = 0;\n// Separate variable needed for closure.\nconst radioBaseClass = mixinConstraintValidation(mixinFormAssociated(mixinElementInternals(mixinFocusable(LitElement))));\n/**\n * A radio component.\n *\n * @fires input {InputEvent} Dispatched when the value changes from user\n * interaction. --bubbles\n * @fires change {Event} Dispatched when the value changes from user\n * interaction. --bubbles --composed\n */\nexport class Radio extends radioBaseClass {\n /**\n * Whether or not the radio is selected.\n */\n get checked() {\n return this[CHECKED];\n }\n set checked(checked) {\n const wasChecked = this.checked;\n if (wasChecked === checked) {\n return;\n }\n this[CHECKED] = checked;\n this.requestUpdate('checked', wasChecked);\n this.selectionController.handleCheckedChange();\n }\n constructor() {\n super();\n // Unique maskId is required because of a Safari bug that fail to persist\n // reference to the mask. This should be removed once the bug is fixed.\n this.maskId = `cutout${++maskId}`;\n this[_a] = false;\n /**\n * Whether or not the radio is required. If any radio is required in a group,\n * all radios are implicitly required.\n */\n this.required = false;\n /**\n * The element value to use in form submission when checked.\n */\n this.value = 'on';\n this.selectionController = new SingleSelectionController(this);\n this.addController(this.selectionController);\n if (!isServer) {\n this[internals].role = 'radio';\n this.addEventListener('click', this.handleClick.bind(this));\n this.addEventListener('keydown', this.handleKeydown.bind(this));\n }\n }\n render() {\n const classes = { 'checked': this.checked };\n return html `\n <div class=\"container ${classMap(classes)}\" aria-hidden=\"true\">\n <md-ripple\n part=\"ripple\"\n .control=${this}\n ?disabled=${this.disabled}></md-ripple>\n <md-focus-ring part=\"focus-ring\" .control=${this}></md-focus-ring>\n <svg class=\"icon\" viewBox=\"0 0 20 20\">\n <mask id=\"${this.maskId}\">\n <rect width=\"100%\" height=\"100%\" fill=\"white\" />\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"black\" />\n </mask>\n <circle\n class=\"outer circle\"\n cx=\"10\"\n cy=\"10\"\n r=\"10\"\n mask=\"url(#${this.maskId})\" />\n <circle class=\"inner circle\" cx=\"10\" cy=\"10\" r=\"5\" />\n </svg>\n\n <div class=\"touch-target\"></div>\n </div>\n `;\n }\n updated() {\n this[internals].ariaChecked = String(this.checked);\n }\n async handleClick(event) {\n if (this.disabled) {\n return;\n }\n // allow event to propagate to user code after a microtask.\n await 0;\n if (event.defaultPrevented) {\n return;\n }\n if (isActivationClick(event)) {\n this.focus();\n }\n // Per spec, clicking on a radio input always selects it.\n this.checked = true;\n this.dispatchEvent(new Event('change', { bubbles: true }));\n this.dispatchEvent(new InputEvent('input', { bubbles: true, composed: true }));\n }\n async handleKeydown(event) {\n // allow event to propagate to user code after a microtask.\n await 0;\n if (event.key !== ' ' || event.defaultPrevented) {\n return;\n }\n this.click();\n }\n [(_a = CHECKED, getFormValue)]() {\n return this.checked ? this.value : null;\n }\n [getFormState]() {\n return String(this.checked);\n }\n formResetCallback() {\n // The checked property does not reflect, so the original attribute set by\n // the user is used to determine the default value.\n this.checked = this.hasAttribute('checked');\n }\n formStateRestoreCallback(state) {\n this.checked = state === 'true';\n }\n [createValidator]() {\n return new RadioValidator(() => {\n if (!this.selectionController) {\n // Validation runs on superclass construction, so selection controller\n // might not actually be ready until this class constructs.\n return [this];\n }\n return this.selectionController.controls;\n });\n }\n [getValidityAnchor]() {\n return this.container;\n }\n}\n__decorate([\n property({ type: Boolean })\n], Radio.prototype, \"checked\", null);\n__decorate([\n property({ type: Boolean })\n], Radio.prototype, \"required\", void 0);\n__decorate([\n property()\n], Radio.prototype, \"value\", void 0);\n__decorate([\n query('.container')\n], Radio.prototype, \"container\", void 0);\n//# sourceMappingURL=radio.js.map","/**\n * @license\n * Copyright 2024 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n// Generated stylesheet for ./radio/internal/radio-styles.css.\nimport { css } from 'lit';\nexport const styles = css `@layer{:host{display:inline-flex;height:var(--md-radio-icon-size, 20px);outline:none;position:relative;vertical-align:top;width:var(--md-radio-icon-size, 20px);-webkit-tap-highlight-color:rgba(0,0,0,0);cursor:pointer;--md-ripple-hover-color: var(--md-radio-hover-state-layer-color, var(--md-sys-color-on-surface, #1d1b20));--md-ripple-hover-opacity: var(--md-radio-hover-state-layer-opacity, 0.08);--md-ripple-pressed-color: var(--md-radio-pressed-state-layer-color, var(--md-sys-color-primary, #6750a4));--md-ripple-pressed-opacity: var(--md-radio-pressed-state-layer-opacity, 0.12)}:host([disabled]){cursor:default}:host([touch-target=wrapper]){margin:max(0px,(48px - var(--md-radio-icon-size, 20px))/2)}.container{display:flex;height:100%;place-content:center;place-items:center;width:100%}md-focus-ring{height:44px;inset:unset;width:44px}.checked{--md-ripple-hover-color: var(--md-radio-selected-hover-state-layer-color, var(--md-sys-color-primary, #6750a4));--md-ripple-hover-opacity: var(--md-radio-selected-hover-state-layer-opacity, 0.08);--md-ripple-pressed-color: var(--md-radio-selected-pressed-state-layer-color, var(--md-sys-color-on-surface, #1d1b20));--md-ripple-pressed-opacity: var(--md-radio-selected-pressed-state-layer-opacity, 0.12)}.touch-target{height:48px;position:absolute;width:48px}:host([touch-target=none]) .touch-target{display:none}md-ripple{border-radius:50%;height:var(--md-radio-state-layer-size, 40px);inset:unset;width:var(--md-radio-state-layer-size, 40px)}.icon{fill:var(--md-radio-icon-color, var(--md-sys-color-on-surface-variant, #49454f));inset:0;position:absolute}.outer.circle{transition:fill 50ms linear}.inner.circle{opacity:0;transform-origin:center;transition:opacity 50ms linear}.checked .icon{fill:var(--md-radio-selected-icon-color, var(--md-sys-color-primary, #6750a4))}.checked .inner.circle{animation:inner-circle-grow 300ms cubic-bezier(0.05, 0.7, 0.1, 1);opacity:1}@keyframes inner-circle-grow{from{transform:scale(0)}to{transform:scale(1)}}:host([disabled]) .circle{animation-duration:0s;transition-duration:0s}:host(:hover) .icon{fill:var(--md-radio-hover-icon-color, var(--md-sys-color-on-surface, #1d1b20))}:host(:focus-within) .icon{fill:var(--md-radio-focus-icon-color, var(--md-sys-color-on-surface, #1d1b20))}:host(:active) .icon{fill:var(--md-radio-pressed-icon-color, var(--md-sys-color-on-surface, #1d1b20))}:host([disabled]) .icon{fill:var(--md-radio-disabled-unselected-icon-color, var(--md-sys-color-on-surface, #1d1b20));opacity:var(--md-radio-disabled-unselected-icon-opacity, 0.38)}:host(:hover) .checked .icon{fill:var(--md-radio-selected-hover-icon-color, var(--md-sys-color-primary, #6750a4))}:host(:focus-within) .checked .icon{fill:var(--md-radio-selected-focus-icon-color, var(--md-sys-color-primary, #6750a4))}:host(:active) .checked .icon{fill:var(--md-radio-selected-pressed-icon-color, var(--md-sys-color-primary, #6750a4))}:host([disabled]) .checked .icon{fill:var(--md-radio-disabled-selected-icon-color, var(--md-sys-color-on-surface, #1d1b20));opacity:var(--md-radio-disabled-selected-icon-opacity, 0.38)}}@layer hcm{@media(forced-colors: active){.icon{fill:CanvasText}:host([disabled]) .icon{fill:GrayText;opacity:1}}}\n`;\n//# sourceMappingURL=radio-styles.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { customElement } from 'lit/decorators.js';\nimport { Radio } from './internal/radio.js';\nimport { styles } from './internal/radio-styles.js';\n/**\n * @summary Radio buttons allow users to select one option from a set.\n *\n * @description\n * Radio buttons are the recommended way to allow users to make a single\n * selection from a list of options.\n *\n * Only one radio button can be selected at a time.\n *\n * Use radio buttons to:\n * - Select a single option from a set\n * - Expose all available options\n *\n * @final\n * @suppress {visibility}\n */\nlet MdRadio = class MdRadio extends Radio {\n};\nMdRadio.styles = [styles];\nMdRadio = __decorate([\n customElement('md-radio')\n], MdRadio);\nexport { MdRadio };\n//# sourceMappingURL=radio.js.map","import { html, css, LitElement } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport '@material/web/radio/radio.js';\r\n\r\n@customElement('custom-radio')\r\nexport class CustomRadio extends LitElement {\r\n @property({ type: String }) name = 'radio-group';\r\n @property({ type: Boolean }) checked = false;\r\n @property({ type: Boolean }) disabled = false;\r\n @property({ type: Boolean }) error = false;\r\n\r\n static styles = css`\r\n :host {\r\n font-family: \"Graphik\", sans-serif;\r\n }\r\n\r\n .radio-container {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n cursor: pointer;\r\n }\r\n\r\n md-radio {\r\n width: 24px;\r\n height: 24px;\r\n border-radius: 50%;\r\n background: var(--white);\r\n border: 1px solid var(--secondary-color-20);\r\n }\r\n\r\n md-radio::part(container):hover {\r\n box-shadow: 0px 0px 0px 4px #0F19411A;\r\n border: 1px solid var(--secondary-color-20);\r\n border-radius: 50%;\r\n }\r\n\r\n md-radio:focus-visible::part(container) {\r\n border: 1px solid var(--primary-color);\r\n }\r\n\r\n md-radio.checked {\r\n background: var(--primary-color);\r\n border: 1px solid var(--primary-color);\r\n }\r\n\r\n md-radio.checked.error {\r\n background: var(--ui-negative);\r\n border: 1px solid var(--ui-negative);\r\n }\r\n\r\n md-radio.error {\r\n border: 1px solid var(--ui-negative);\r\n }\r\n\r\n md-radio.disabled {\r\n border: 1px solid var(--secondary-color-20);\r\n background: var(--secondary-color-20);\r\n cursor: default;\r\n }\r\n\r\n .radio-container.disabled {\r\n color: #9FA3B3;\r\n cursor: default;\r\n }\r\n `;\r\n\r\n render() {\r\n const radioClasses = [\r\n this.checked ? 'checked' : '',\r\n this.error ? 'error' : '',\r\n this.disabled ? 'disabled' : '',\r\n ].join(' ');\r\n\r\n return html`\r\n <label class=\"radio-container ${ this.disabled ? 'disabled' : '' }\">\r\n <md-radio \r\n name=${this.name} \r\n class=${radioClasses}\r\n ?checked=${this.checked} \r\n ?disabled=${this.disabled}\r\n >\r\n </md-radio>\r\n \r\n <span>${this.checked ? 'On' : 'Off'} ${this.error ? 'Error' : ''}</span>\r\n </label>\r\n `;\r\n }\r\n}","import { html, css, nothing } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport { bodyL } from '../styles/fontStyles';\r\nimport { tooltipStyles } from \"../styles/tooltip\";\r\nimport { BaseControl } from '../helpers/BaseControl';\r\nimport { mixStyles } from '../styles/mix';\r\nimport { errorStyles } from '../styles/error';\r\n\r\ntype SelectOption = string | {\r\n label: string;\r\n value: string | object;\r\n disabled?: boolean;\r\n icon?: string;\r\n};\r\n\r\n@customElement('filterable-select')\r\nexport class FilterableSelect extends BaseControl {\r\n @property({ type: Object }) value: string | object = '';\r\n @property({ type: String, attribute: 'default-value' }) defaultValue = '';\r\n\r\n @property({ type: Array }) options: SelectOption[] = [];\r\n @property({ type: Boolean }) filterable = true;\r\n @property({ type: Number }) maxLength?: number;\r\n \r\n @state() private isMobile: boolean = false;\r\n @state() private highlightedIndex = -1;\r\n @state() private _isCleared: boolean = false;\r\n\r\n @state() filteredOptions: SelectOption[] = [];\r\n @state() filterValue = '';\r\n @state() isOpen = false;\r\n @state() mobileFilterValue = '';\r\n\r\n private debounceTimeout: number | null = null;\r\n\r\n static styles = css`\r\n ${ mixStyles }\r\n ${ errorStyles }\r\n ${ tooltipStyles }\r\n\r\n /* --- Own Error Styles --- */\r\n :host([error]) .input-container:not(.open) .input-wrapper:hover {\r\n box-shadow: 0px 0px 0px 4px #E00F0F1A !important;\r\n }\r\n\r\n :host([error]) .input-container.open:not(.mobile) .input-wrapper {\r\n border-bottom-left-radius: 0;\r\n border-bottom-right-radius: 0;\r\n border: 1px solid var(--ui-negative, red) !important;\r\n border-bottom: 1px solid transparent !important;\r\n }\r\n\r\n :host([error]) .input-container:not(.mobile) .options-list {\r\n border: 1px solid var(--ui-negative, red) !important;\r\n border-top: none !important;\r\n border-radius: 0 0 4px 4px;\r\n }\r\n\r\n /* Estilos para el estado disabled */\r\n .input-wrapper.disabled .filter-input, .input-wrapper.disabled .filter-input, .input-wrapper.disabled .filter-fake {\r\n background-color: var(--secondary-color-10);\r\n color: #9FA3B3;\r\n cursor: default;\r\n }\r\n\r\n .input-wrapper.disabled .icon-button,\r\n .input-wrapper.disabled .icon-button randstad-icon,\r\n .input-wrapper.disabled .icon-button .close-icon {\r\n color: #9FA3B3;\r\n cursor: default;\r\n }\r\n\r\n /* Y si tienes un icono seleccionado que también debe cambiar de color */\r\n .input-wrapper.disabled .icon-selected svg {\r\n fill: #9FA3B3;\r\n }\r\n\r\n .input-wrapper .icon-button .close-icon {\r\n color: var(--primary-color);\r\n }\r\n\r\n .select-container {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n width: 100%;\r\n }\r\n\r\n .input-container.focused:not(.open):not(.mobile) .input-wrapper {\r\n border: 1px solid var(--primary-color);\r\n border-radius: 4px;\r\n box-shadow: none;\r\n z-index: 11;\r\n }\r\n\r\n .input-container.focused:not(.open):not(.mobile) .input-wrapper:hover {\r\n box-shadow: none;\r\n }\r\n\r\n :host(:not([error])) .input-container.open:not(.mobile) {\r\n border-radius: 4px;\r\n border-bottom-left-radius: 0;\r\n border-bottom-right-radius: 0;\r\n }\r\n\r\n :host(:not([error])) .input-container.open:not(.mobile) .input-wrapper {\r\n border: 1px solid var(--primary-color);\r\n border-top-left-radius: 4px;\r\n border-top-right-radius: 4px;\r\n border-bottom-left-radius: 0;\r\n border-bottom-right-radius: 0;\r\n border-bottom: 1px solid transparent;\r\n box-shadow: none;\r\n z-index: 11;\r\n }\r\n\r\n :host(:not([error])) .input-wrapper:hover {\r\n box-shadow: 0px 0px 0px 4px #0F19411A;\r\n }\r\n\r\n :host .input-container.open:not(.mobile)::after {\r\n content: '';\r\n position: absolute;\r\n top: calc(100% - 1px);\r\n left: 20px;\r\n right: 20px;\r\n height: 1px;\r\n background-color: var(--gray-20);\r\n z-index: 10;\r\n }\r\n\r\n .input-wrapper {\r\n border: 1px solid var(--secondary-color-10);\r\n border-radius: 4px;\r\n overflow: hidden;\r\n display: flex;\r\n align-items: center;\r\n width: 100%;\r\n transition: box-shadow 0.2s ease-in-out;\r\n background-color: white;\r\n }\r\n\r\n .mobile-modal .filter-input {\r\n border-bottom: 1px solid var(--gray-20);\r\n }\r\n\r\n .filter-input {\r\n ${bodyL};\r\n padding: 16px;\r\n padding-right: 40px;\r\n border: none;\r\n outline: none;\r\n width: 100%;\r\n box-sizing: border-box;\r\n background: white;\r\n cursor: pointer;\r\n color: var(--secondary-color);\r\n flex-grow: 1;\r\n }\r\n\r\n .filter-input,\r\n .filter-fake,\r\n .input-wrapper,\r\n .mobile-modal {\r\n -webkit-tap-highlight-color: transparent !important;\r\n }\r\n\r\n .filter-input::placeholder {\r\n ${bodyL};\r\n color: var(--secondary-color-40);\r\n }\r\n\r\n .icon-button {\r\n position: absolute;\r\n right: 10px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 24px;\r\n height: 24px;\r\n padding: 0;\r\n }\r\n\r\n randstad-icon {\r\n width: 24px;\r\n height: 24px;\r\n color: var(--primary-color);\r\n }\r\n\r\n .options-list {\r\n width: 100%;\r\n position: absolute;\r\n top: 99%;\r\n left: 0;\r\n right: 0;\r\n max-height: 200px;\r\n overflow-y: auto;\r\n border: 1px solid var(--primary-color);\r\n border-top: none;\r\n border-radius: 0 0 4px 4px;\r\n background: white;\r\n list-style: none;\r\n margin: 0;\r\n padding: 0;\r\n z-index: 10;\r\n }\r\n\r\n .options-list li {\r\n ${bodyL};\r\n padding: 8px 16px 8px 16px;\r\n cursor: pointer;\r\n color: var(--secondary-color-80);\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n .options-list li.highlighted {\r\n background-color: var(--primary-color-10);\r\n }\r\n\r\n .mobile-modal {\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n background-color: white;\r\n z-index: 1000;\r\n border-radius: 12px 12px 0 0;\r\n box-shadow: 0 -4px 10px rgba(0, 0, 0, 0.15);\r\n display: flex;\r\n flex-direction: column;\r\n padding: 0px;\r\n gap: 12px;\r\n animation: slideUp 0.5s ease-out;\r\n max-height: 80vh;\r\n overflow-y: auto;\r\n }\r\n\r\n .mobile-modal .options-list {\r\n position: static;\r\n max-height: none;\r\n border: none;\r\n box-shadow: none;\r\n }\r\n\r\n .mobile-modal .modal-input-container {\r\n position: relative;\r\n }\r\n\r\n .mobile-modal .modal-close-button {\r\n position: absolute;\r\n top: 50%;\r\n right: 12px;\r\n transform: translateY(-50%);\r\n background: transparent;\r\n border: none;\r\n cursor: pointer;\r\n padding: 4px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n\r\n .mobile-modal .modal-close-button randstad-icon {\r\n width: 20px;\r\n height: 20px;\r\n color: var(--secondary-color-60);\r\n }\r\n\r\n .mobile-backdrop {\r\n position: fixed;\r\n inset: 0;\r\n background-color: rgba(0, 0, 0, 0.4);\r\n z-index: 999;\r\n display: flex;\r\n align-items: flex-end;\r\n }\r\n\r\n .filter-fake {\r\n ${bodyL};\r\n padding: 15px;\r\n padding-right: 40px;\r\n width: 100%;\r\n background: white;\r\n box-sizing: border-box;\r\n cursor: pointer;\r\n color: var(--secondary-color-80);\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n @keyframes slideUp {\r\n from {\r\n transform: translateY(100%);\r\n }\r\n to {\r\n transform: translateY(0);\r\n }\r\n }\r\n\r\n .options-list::-webkit-scrollbar {\r\n width: 6px;\r\n }\r\n\r\n .options-list::-webkit-scrollbar-track {\r\n background: transparent;\r\n }\r\n\r\n .options-list::-webkit-scrollbar-thumb {\r\n background-color: var(--secondary-color-30);\r\n border-radius: 4px;\r\n }\r\n\r\n .options-list::-webkit-scrollbar-button {\r\n display: none;\r\n }\r\n\r\n /* Estilos por defecto del icon para mobile */\r\n .icon-selected {\r\n width: 24px;\r\n height: auto;\r\n margin-left: 4px;\r\n padding-right: 12px; \r\n border-right: 1px solid var(--secondary-color-20);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-shrink: 0;\r\n }\r\n\r\n .value-text {\r\n margin-left: 8px; /* Aumentamos el margen para separar el texto en mobile */\r\n }\r\n\r\n /*\r\n * Media query para aplicar estilos de escritorio (a partir de 941px)\r\n */\r\n @media (min-width: 941px) {\r\n .icon-selected {\r\n /* Estilos de escritorio para el icono, se anulan los de mobile */\r\n margin-left: 16px;\r\n padding-right: 18px;\r\n }\r\n \r\n .value-text {\r\n /* En escritorio no necesitamos este margen, lo reseteamos */\r\n margin-left: 0;\r\n }\r\n }\r\n\r\n .icon-selected svg,\r\n .icon-list svg {\r\n display: block;\r\n width: 100%;\r\n height: auto;\r\n }\r\n\r\n .icon-list {\r\n width: 24px;\r\n height: auto;\r\n margin-right: 8px;\r\n flex-shrink: 0;\r\n }\r\n `;\r\n\r\n public update(changedProperties: Map<string, any>) {\r\n if (changedProperties.has('options')) {\r\n this.filteredOptions = [...this.options];\r\n }\r\n \r\n if (changedProperties.has('defaultValue') || changedProperties.has('options') || changedProperties.has('value')) {\r\n // Ignora la lógica de defaultValue si el componente fue limpiado por el usuario\r\n if (this._isCleared) {\r\n super.update(changedProperties);\r\n return;\r\n }\r\n \r\n const targetValue = this.value || this.defaultValue;\r\n\r\n const match = this.options.find(opt =>\r\n typeof opt === 'string' ? opt === targetValue : (opt as { value: any }).value === targetValue\r\n );\r\n\r\n if (match) {\r\n this.filterValue = typeof match === 'string' ? match : match.label;\r\n this.value = typeof match === 'string' ? match : match.value;\r\n } else {\r\n this.filterValue = '';\r\n this.value = '';\r\n }\r\n }\r\n\r\n super.update(changedProperties);\r\n }\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n this.updateResponsiveMode();\r\n window.addEventListener('resize', this.updateResponsiveModeBound);\r\n document.addEventListener('click', this.handleClickOutside.bind(this));\r\n }\r\n\r\n disconnectedCallback() {\r\n window.removeEventListener('resize', this.updateResponsiveModeBound);\r\n document.removeEventListener('click', this.handleClickOutside.bind(this));\r\n super.disconnectedCallback();\r\n }\r\n\r\n private updateResponsiveModeBound = this.updateResponsiveMode.bind(this);\r\n\r\n private updateResponsiveMode() {\r\n this.isMobile = window.innerWidth <= 940;\r\n }\r\n\r\n handleInputClick(e: Event) {\r\n if (this.isMobile) {\r\n this.mobileFilterValue = '';\r\n }\r\n\r\n if (this.disabled) return;\r\n this.isOpen = !this.isOpen;\r\n this.requestUpdate();\r\n }\r\n\r\n handleInput(e: Event) {\r\n if (!this.filterable) return;\r\n // Un usuario está escribiendo, por lo tanto, no se ha borrado el campo intencionalmente\r\n this._isCleared = false;\r\n \r\n const rawValue = (e.target as HTMLInputElement).value;\r\n const value = this.maxLength ? rawValue.slice(0, this.maxLength).toLowerCase() : rawValue.toLowerCase();\r\n\r\n this.filterValue = value;\r\n this.value = '';\r\n\r\n this.filteredOptions = this.options.filter(option => {\r\n const label = typeof option === 'string' ? option : option.label;\r\n return label.toLowerCase().includes(this.filterValue.toLowerCase());\r\n });\r\n\r\n this.isOpen = true;\r\n\r\n if (this.debounceTimeout) {\r\n clearTimeout(this.debounceTimeout);\r\n }\r\n\r\n this.debounceTimeout = window.setTimeout(() => {\r\n if (this.filterValue.length > 2) {\r\n this.dispatchEvent(new CustomEvent('filter-location', {\r\n detail: { value: this.filterValue },\r\n bubbles: true,\r\n composed: true\r\n }));\r\n }\r\n }, 300);\r\n\r\n this.requestUpdate();\r\n }\r\n\r\n handleMobileInput(e: Event) {\r\n this._isCleared = false;\r\n const rawValue = (e.target as HTMLInputElement).value;\r\n const value = this.maxLength ? rawValue.slice(0, this.maxLength).toLowerCase() : rawValue.toLowerCase();\r\n\r\n this.mobileFilterValue = value;\r\n this.value = '';\r\n\r\n this.filteredOptions = this.options.filter(option => {\r\n const label = typeof option === 'string' ? option : option.label;\r\n return label.toLowerCase().includes(value);\r\n });\r\n\r\n if (this.debounceTimeout) {\r\n clearTimeout(this.debounceTimeout);\r\n }\r\n\r\n this.debounceTimeout = window.setTimeout(() => {\r\n if (value.length > 2) {\r\n this.dispatchEvent(new CustomEvent('filter-location', {\r\n detail: { value },\r\n bubbles: true,\r\n composed: true\r\n }));\r\n }\r\n }, 300);\r\n }\r\n\r\n public handleSelect(option: SelectOption) {\r\n // Cuando se selecciona una opción, el campo ya no está \"borrado\"\r\n this._isCleared = false; \r\n\r\n const value = typeof option === 'string' ? option : option.value;\r\n\r\n this.dispatchEvent(new CustomEvent('option-selected', {\r\n detail: { value },\r\n bubbles: true,\r\n composed: true\r\n }));\r\n\r\n this.filterValue = typeof option === 'string' ? option : option.label;\r\n this.value = value;\r\n this.isOpen = false;\r\n\r\n this.requestUpdate();\r\n }\r\n\r\n handleIconClick() {\r\n if (this.disabled) return;\r\n\r\n if (this.filterable && this.filterValue) {\r\n // El usuario está borrando el campo, activa el icon\r\n this._isCleared = true; \r\n this.filterValue = '';\r\n this.value = '';\r\n this.filteredOptions = [...this.options];\r\n this.dispatchEvent(new CustomEvent('option-selected', {\r\n detail: { value: '' },\r\n bubbles: true,\r\n composed: true\r\n }));\r\n this.isOpen = false;\r\n } else {\r\n this.isOpen = !this.isOpen;\r\n }\r\n\r\n this.requestUpdate();\r\n }\r\n\r\n handleClickOutside(e: Event) {\r\n const target = e.target;\r\n if (!(target instanceof Node)) return;\r\n\r\n if (!this.contains(target)) {\r\n this.isOpen = false;\r\n this.requestUpdate();\r\n }\r\n }\r\n\r\n handleKeyDown(e: KeyboardEvent) {\r\n const { key } = e;\r\n if (!this.isOpen && (key === 'Enter' || key === ' ')) {\r\n e.preventDefault();\r\n this.isOpen = true;\r\n return;\r\n }\r\n\r\n if (this.isOpen) {\r\n if (key === 'ArrowDown') {\r\n e.preventDefault();\r\n this.highlightedIndex = Math.min(this.highlightedIndex + 1, this.filteredOptions.length - 1);\r\n this.requestUpdate();\r\n } else if (key === 'ArrowUp') {\r\n e.preventDefault();\r\n this.highlightedIndex = Math.max(this.highlightedIndex - 1, 0);\r\n this.requestUpdate();\r\n } else if (key === 'Enter') {\r\n e.preventDefault();\r\n const option = this.filteredOptions[this.highlightedIndex];\r\n if (option) {\r\n this.handleSelect(option);\r\n }\r\n } else if (key === 'Escape') {\r\n e.preventDefault();\r\n this.isOpen = false;\r\n }\r\n }\r\n }\r\n\r\n private renderSelectedIcon() {\r\n const selectedOption = this.options.find(opt =>\r\n typeof opt === 'string' ? opt === this.value : (opt as { value: any }).value === this.value\r\n );\r\n\r\n // Se asegura de que el ícono exista y sea un string antes de usar unsafeSVG\r\n if (selectedOption && typeof selectedOption !== 'string' && selectedOption.icon && typeof selectedOption.icon === 'string') {\r\n // Usamos innerHTML para inyectar el SVG. Esto es menos seguro que unsafeSVG,\r\n // Se asume que los icons provienen de una fuente segura y confiable (Angular se encargará de la sanitización y seguridad del icon).\r\n return html`<span class=\"icon-selected\" .innerHTML=\"${selectedOption.icon}\"></span>`;\r\n }\r\n \r\n return nothing;\r\n }\r\n\r\n private renderOptionIcon(icon?: string) {\r\n if( !icon || typeof icon !== 'string' ) return nothing;\r\n\r\n // Usamos innerHTML para inyectar el icon.\r\n return html`<span class=\"icon-list\" .innerHTML=\"${icon}\"></span>`;\r\n }\r\n\r\n render() {\r\n const isMobile = this.isMobile;\r\n\r\n return html`\r\n <div class=\"select-container\" style=\"${this.labelColor ? ` --label-color: ${this.labelColor}` : ''}\">\r\n ${ this.renderLabelContainer() }\r\n \r\n <div class=\"list-container\">\r\n <div class=\"input-container ${this.isOpen ? 'focused' : ''} ${(this.isOpen && this.filteredOptions.length > 0) ? 'open' : ''} ${isMobile ? 'mobile' : ''}\">\r\n <div class=\"input-wrapper ${this.disabled ? 'disabled' : ''}\">\r\n ${isMobile ?\r\n html`\r\n <div\r\n class=\"filter-fake\"\r\n @click=\"${this.handleInputClick}\"\r\n @keydown=\"${this.handleKeyDown}\"\r\n tabindex=\"0\"\r\n role=\"combobox\"\r\n aria-expanded=\"${this.isOpen}\"\r\n aria-controls=\"options-list\"\r\n aria-haspopup=\"listbox\"\r\n aria-activedescendant=\"\"\r\n >\r\n ${this.renderSelectedIcon()}\r\n <span class=\"value-text\">${this.filterValue || this.placeholder}</span>\r\n </div>\r\n `\r\n : html`\r\n ${this.renderSelectedIcon()}\r\n\r\n <input\r\n class=\"filter-input\"\r\n .value=\"${this.filterValue || ''}\"\r\n @click=\"${this.handleInputClick}\"\r\n @keydown=\"${this.handleKeyDown}\"\r\n @input=${this.handleInput}\r\n placeholder=\"${this.filterValue ? '' : this.placeholder}\"\r\n ?disabled=\"${this.disabled}\"\r\n ?readonly=\"${!this.filterable}\"\r\n maxlength=\"${this.maxLength ?? ''}\"\r\n />\r\n `\r\n }\r\n\r\n <button\r\n class=\"icon-button\"\r\n @click=\"${this.handleIconClick}\"\r\n ?disabled=\"${this.disabled}\"\r\n >\r\n ${this.filterable && this.filterValue\r\n ? html`<randstad-icon name=\"close\" size=\"24px\"></randstad-icon>`\r\n : this.isOpen && this.filteredOptions.length > 0\r\n ? html`<randstad-icon name=\"arrow_up\" size=\"24px\"></randstad-icon>`\r\n : html`<randstad-icon name=\"arrow_down\" size=\"24px\"></randstad-icon>`\r\n }\r\n </button>\r\n </div>\r\n\r\n ${!isMobile && this.isOpen && this.filteredOptions.length > 0\r\n ? html`\r\n <ul class=\"options-list\">\r\n ${this.filteredOptions.map((option, index) => {\r\n const label = typeof option === 'string' ? option : option.label;\r\n const isDisabled = typeof option === 'object' && option.disabled;\r\n const icon = typeof option === 'object' ? option.icon : undefined;\r\n \r\n return html`\r\n <li\r\n class=\"${isDisabled ? 'disabled' : ''} ${index === this.highlightedIndex ? 'highlighted' : ''}\"\r\n role=\"option\"\r\n aria-selected=\"${index === this.highlightedIndex}\"\r\n @click=\"${() => {\r\n if (!isDisabled) this.handleSelect(option);\r\n }}\"\r\n >\r\n ${this.renderOptionIcon(icon)}\r\n ${label}\r\n </li>\r\n `;\r\n })}\r\n </ul>\r\n `\r\n : nothing\r\n }\r\n </div>\r\n\r\n ${ this.renderError() }\r\n </div>\r\n\r\n ${ this.renderHelper() }\r\n </div>\r\n\r\n ${isMobile && this.isOpen\r\n ? html`\r\n <div class=\"mobile-backdrop\" @click=\"${() => { this.isOpen = false; }}\">\r\n <div class=\"mobile-modal\" @click=\"${(e: Event) => e.stopPropagation()}\">\r\n <div class=\"modal-input-container\">\r\n <input\r\n class=\"filter-input\"\r\n .value=\"${this.mobileFilterValue || ''}\"\r\n @input=${(e: Event) => this.handleMobileInput(e)}\r\n placeholder=\"${this.placeholder}\"\r\n maxlength=\"${this.maxLength ?? ''}\"\r\n />\r\n <button class=\"modal-close-button\" @click=\"${() => { this.isOpen = false; }}\">\r\n <randstad-icon name=\"close\" size=\"20px\"></randstad-icon>\r\n </button>\r\n </div>\r\n \r\n <ul class=\"options-list\">\r\n ${this.filteredOptions.map((option, index) => {\r\n const label = typeof option === 'string' ? option : option.label;\r\n const isDisabled = typeof option === 'object' && option.disabled;\r\n const icon = typeof option === 'object' ? option.icon : undefined;\r\n \r\n return html`\r\n <li\r\n class=\"${isDisabled ? 'disabled' : ''} ${index === this.highlightedIndex ? 'highlighted' : ''}\"\r\n role=\"option\"\r\n aria-selected=\"${index === this.highlightedIndex}\"\r\n @click=\"${() => {\r\n if (!isDisabled) this.handleSelect(option);\r\n }}\"\r\n >\r\n ${this.renderOptionIcon(icon)}\r\n ${label}\r\n </li>\r\n `;\r\n })}\r\n </ul>\r\n </div>\r\n </div>\r\n `\r\n : nothing\r\n }\r\n `;\r\n }\r\n}","const globalStyles = new CSSStyleSheet();\r\n\r\nglobalStyles.replaceSync(`\r\n @font-face {\r\n font-family: 'Graphik';\r\n src: url('/src/assets/font/Graphik-Regular.woff2') format('woff2'),\r\n url('/src/assets/font/Graphik-Regular.woff') format('woff'),\r\n url('/src/assets/font/Graphik-Regular.eot') format('embedded-opentype');\r\n font-weight: normal;\r\n font-style: normal;\r\n }\r\n\r\n .body-s {\r\n font-weight: 400;\r\n font-size: 14px;\r\n line-height: 100%;\r\n letter-spacing: 0%;\r\n color: green;\r\n }\r\n\r\n .body-l {\r\n font-family: Graphik;\r\n font-size: 18px;\r\n font-style: normal;\r\n font-weight: 400;\r\n line-height: 30px;\r\n }\r\n`);\r\n\r\nexport default globalStyles;","import { LitElement, html, css } from 'lit';\r\nimport globalStyles from '../styles/globalStyles';\r\nimport { bodyS } from '../styles/fontStyles';\r\n\r\nclass RandstadSnackbar extends LitElement {\r\n type: string = 'informative';\r\n icon: string = 'info';\r\n message: string = 'Este es un mensaje.';\r\n open: boolean = false;\r\n position: string = 'bottom-center';\r\n private isMobile = false;\r\n\r\n static styles = [\r\n globalStyles,\r\n css`\r\n :host {\r\n display: flex;\r\n position: fixed;\r\n align-items: center;\r\n max-width: 100vw;\r\n height: auto;\r\n z-index: 9999;\r\n }\r\n\r\n :host([position=\"top-left\"]) {\r\n top: 16px;\r\n left: 16px;\r\n right: auto;\r\n transform: none;\r\n justify-content: flex-start;\r\n }\r\n\r\n :host([position=\"top-center\"]) {\r\n top: 16px;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n justify-content: center;\r\n }\r\n\r\n :host([position=\"top-right\"]) {\r\n top: 16px;\r\n right: 16px;\r\n left: auto;\r\n transform: none;\r\n justify-content: flex-end;\r\n }\r\n\r\n :host([position=\"bottom-left\"]) {\r\n bottom: 16px;\r\n left: 16px;\r\n right: auto;\r\n transform: none;\r\n justify-content: flex-start;\r\n }\r\n\r\n :host([position=\"bottom-center\"]) {\r\n bottom: 16px;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n justify-content: center;\r\n }\r\n\r\n :host([position=\"bottom-right\"]) {\r\n bottom: 16px;\r\n right: 16px;\r\n left: auto;\r\n transform: none;\r\n justify-content: flex-end;\r\n }\r\n\r\n :host(.mobile) {\r\n bottom: 16px !important;\r\n top: auto !important;\r\n left: 50% !important;\r\n transform: translateX(-50%) !important;\r\n justify-content: center !important;\r\n width: 100%;\r\n }\r\n\r\n :host(.mobile) .container {\r\n width: 90vw !important;\r\n }\r\n\r\n .container {\r\n ${bodyS};\r\n display: flex;\r\n align-items: center;\r\n box-sizing: border-box;\r\n min-height: 48px;\r\n min-width: 270px;\r\n max-width: 480px;\r\n border-radius: 4px;\r\n padding: 8px;\r\n gap: 8px;\r\n white-space: nowrap;\r\n color: var(--white);\r\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);\r\n }\r\n\r\n .message {\r\n display: block;\r\n display: -webkit-box;\r\n -webkit-box-orient: vertical;\r\n -webkit-line-clamp: 2;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: normal;\r\n max-height: calc(2 * 25px);\r\n line-height: 25px;\r\n word-break: break-word;\r\n max-width: 100%;\r\n }\r\n\r\n .container {\r\n color: var(--white);\r\n }\r\n randstad-icon {\r\n color: var(--white);\r\n }\r\n randstad-icon svg {\r\n fill: var(--white);\r\n }\r\n\r\n .icon {\r\n font-size: 18px;\r\n }\r\n .hidden {\r\n display: none;\r\n }\r\n .success {\r\n background-color: var(--ui-positive);\r\n }\r\n .error {\r\n background-color: var(--ui-negative);\r\n }\r\n .warning {\r\n background-color: var(--ui-warning);\r\n }\r\n .informative {\r\n background-color: var(--ui-informative);\r\n }\r\n `\r\n ];\r\n\r\n static get properties() {\r\n return {\r\n type: { type: String },\r\n icon: { type: String },\r\n message: { type: String },\r\n open: { type: Boolean },\r\n position: { type: String, reflect: true },\r\n };\r\n }\r\n\r\n constructor() {\r\n super();\r\n this.updateResponsiveStyles = this.updateResponsiveStyles.bind(this);\r\n }\r\n\r\n connectedCallback() {\r\n super.connectedCallback();\r\n window.addEventListener('resize', this.updateResponsiveStyles);\r\n this.updateResponsiveStyles();\r\n }\r\n\r\n disconnectedCallback() {\r\n window.removeEventListener('resize', this.updateResponsiveStyles);\r\n super.disconnectedCallback();\r\n }\r\n\r\n updateResponsiveStyles() {\r\n const isMobile = window.innerWidth <= 940;\r\n this.classList.toggle('mobile', isMobile);\r\n }\r\n\r\n render() {\r\n const ariaRole = this.type === 'error' || this.type === 'warning' ? 'alert' : 'status';\r\n return html`\r\n <div\r\n class=\"container ${this.open ? '' : 'hidden'} ${this.type}\"\r\n role=\"${ariaRole}\"\r\n aria-live=\"polite\"\r\n >\r\n <randstad-icon name=${this.icon} size=\"24px\" color=\"white\"></randstad-icon>\r\n <span class=\"message\">${this.message}</span>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ncustomElements.define('randstad-snackbar', RandstadSnackbar);","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\n\r\n@customElement('custom-stepper')\r\nexport class CustomStepper extends LitElement {\r\n @property({ type: Number }) totalSteps = 4;\r\n @property({ type: Number }) currentStep = 0;\r\n\r\n static styles = css`\r\n .stepper {\r\n display: flex;\r\n gap: 20px;\r\n align-items: center;\r\n }\r\n\r\n .step {\r\n width: 20px;\r\n height: 20px;\r\n border-radius: 50%;\r\n background-color: var(--white);\r\n border: 1px solid var(--secondary-color-20);\r\n position: relative;\r\n box-sizing: content-box;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 12px;\r\n color: var(--secondary-color-20);\r\n }\r\n\r\n .step .inner-circle {\r\n width: 4px;\r\n height: 4px;\r\n border-radius: 50%;\r\n background-color: var(--white);\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%);\r\n image-rendering: -webkit-optimize-contrast;\r\n image-rendering: crisp-edges;\r\n backface-visibility: hidden;\r\n transform-style: preserve-3d;\r\n }\r\n\r\n .step.completed {\r\n background-color: var(--primary-color);\r\n border: 1px solid var(--primary-color);\r\n }\r\n\r\n .step.completed randstad-icon {\r\n color: white;\r\n }\r\n\r\n .step.active {\r\n background-color: var(--white);\r\n border: 1px solid var(--primary-color);\r\n }\r\n\r\n .step.active .inner-circle {\r\n background-color: var(--primary-color);\r\n }\r\n\r\n .step.active .pulse-circle {\r\n width: 12px;\r\n height: 12px;\r\n border-radius: 50%;\r\n background-color: var(--primary-color);\r\n opacity: 0.25;\r\n position: absolute;\r\n top: 50%;\r\n left: 50%;\r\n transform: translate(-50%, -50%) scale(0.6);\r\n animation: pulse 2000ms ease-in-out infinite;\r\n image-rendering: -webkit-optimize-contrast;\r\n image-rendering: crisp-edges;\r\n backface-visibility: hidden;\r\n }\r\n\r\n @keyframes pulse {\r\n 0% {\r\n transform: translate(-50%, -50%) scale(0.6);\r\n }\r\n 80%, 100% {\r\n transform: translate(-50%, -50%) scale(1.2);\r\n }\r\n }\r\n\r\n .step,\r\n .inner-circle,\r\n .pulse-circle {\r\n will-change: transform;\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n }\r\n `;\r\n\r\n render() {\r\n return html`\r\n <div class=\"stepper\">\r\n ${Array.from({ length: this.totalSteps }, (_, index) => html`\r\n <div\r\n class=\"step ${index < this.currentStep ? 'completed' : index === this.currentStep ? 'active' : ''}\"\r\n >\r\n ${index < this.currentStep\r\n ? html`<randstad-icon name=\"tick-circle\" size=\"16px\"></randstad-icon>`\r\n : index === this.currentStep\r\n ? html`\r\n <span class=\"pulse-circle\"></span>\r\n <span class=\"inner-circle\"></span>\r\n `\r\n : html`<span class=\"inner-circle\"></span>`}\r\n </div>\r\n `)}\r\n </div>\r\n `;\r\n }\r\n}","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport { bodyM, titleXXS } from '../styles/fontStyles';\r\n\r\ninterface TabItem {\r\n label: string;\r\n icon: string;\r\n value: string;\r\n}\r\n\r\n@customElement('tabs-bar')\r\nexport class TabsBar extends LitElement {\r\n @property({ type: Array }) tabs: TabItem[] = [];\r\n @property({ type: String }) selected: string = '';\r\n @state() private internalSelected: string = '';\r\n @state() private showPrev = false;\r\n @state() private showNext = false;\r\n\r\n private readonly SCROLL_OFFSET = 56;\r\n\r\n\r\n static styles = css`\r\n :host {\r\n display: block;\r\n border-bottom: 1px solid #E7E8EC;\r\n font-family: \"Graphik\", sans-serif;\r\n }\r\n\r\n .tab-wrapper {\r\n display: flex;\r\n justify-content: flex-start;\r\n }\r\n\r\n .tab {\r\n ${titleXXS};\r\n display: flex;\r\n gap: 8px;\r\n flex-direction: row;\r\n padding: 24px;\r\n align-items: center;\r\n text-align: center;\r\n color: #6F758D;\r\n cursor: pointer;\r\n text-decoration: none;\r\n position: relative;\r\n flex: 0 0 auto;\r\n min-width: 0;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n transition: background-color 0.2s ease-in-out;\r\n }\r\n\r\n .tab:hover {\r\n background-color: #E7E8EC;\r\n }\r\n\r\n .tab.active {\r\n color: #2175D9;\r\n }\r\n\r\n .tab.active::after {\r\n height: 2px;\r\n background-color: #2175D9;\r\n content: '';\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n width: 100%;\r\n pointer-events: none;\r\n }\r\n\r\n .tab.active img {\r\n filter: brightness(0) saturate(100%) invert(28%) sepia(87%) saturate(3514%) hue-rotate(202deg) brightness(92%) contrast(101%);\r\n }\r\n\r\n img {\r\n width: 24px;\r\n height: 24px;\r\n }\r\n\r\n .scroll-container {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n overflow: hidden;\r\n }\r\n\r\n .tab-wrapper {\r\n display: flex;\r\n justify-content: flex-start;\r\n gap: 0px;\r\n overflow-x: auto;\r\n scroll-behavior: smooth;\r\n scrollbar-width: none; /* Firefox */\r\n -ms-overflow-style: none; /* IE 10+ */\r\n flex: 1;\r\n }\r\n\r\n .tab-wrapper::-webkit-scrollbar {\r\n display: none;\r\n }\r\n\r\n .scroll-button {\r\n border: none;\r\n font-size: 24px;\r\n cursor: pointer;\r\n z-index: 1;\r\n width: 56px;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n color: #2175D9;\r\n padding: 0px;\r\n }\r\n\r\n .scroll-button.prev {\r\n justify-content: flex-start;\r\n position: absolute;\r\n left: 0;\r\n background: linear-gradient(90deg, #FFFFFF 0%, #FFFFFF 50%, rgba(255, 255, 255, 0) 100%);\r\n }\r\n\r\n .scroll-button.next {\r\n justify-content: flex-end;\r\n position: absolute;\r\n right: 0;\r\n background: linear-gradient(270deg, #FFFFFF 0%, #FFFFFF 50%, rgba(255, 255, 255, 0) 100%);\r\n }\r\n\r\n @media (max-width: 940px) {\r\n .tab {\r\n ${bodyM};\r\n padding: 16px;\r\n }\r\n }\r\n `;\r\n\r\n firstUpdated() {\r\n this.handleScroll();\r\n }\r\n\r\n updated(changed: Map<string, any>) {\r\n if (changed.has('selected')) {\r\n this.internalSelected = this.selected;\r\n }\r\n }\r\n\r\n private selectTab(value: string) {\r\n this.internalSelected = value;\r\n const selectedTab = this.tabs.find(tab => tab.value === value);\r\n if (selectedTab) {\r\n this.dispatchEvent(new CustomEvent('tab-change', {\r\n detail: selectedTab,\r\n bubbles: true,\r\n composed: true,\r\n }));\r\n }\r\n }\r\n\r\n private scrollTabsLeft() {\r\n const wrapper = this.renderRoot.querySelector('.tab-wrapper');\r\n if (!wrapper) return;\r\n\r\n const scrollLeft = wrapper.scrollLeft;\r\n const tabs = Array.from(wrapper.querySelectorAll('.tab')) as HTMLElement[];\r\n\r\n for (let i = tabs.length - 1; i >= 0; i--) {\r\n const el = tabs[i];\r\n const tabLeft = el.offsetLeft;\r\n\r\n // Esta es la nueva condición clave 👇\r\n if (tabLeft < scrollLeft + this.SCROLL_OFFSET - 1) {\r\n const scrollTarget = tabLeft - this.SCROLL_OFFSET;\r\n wrapper.scrollTo({ left: scrollTarget, behavior: 'smooth' });\r\n break;\r\n }\r\n }\r\n\r\n setTimeout(() => this.handleScroll(), 300);\r\n }\r\n\r\n private scrollTabsRight() {\r\n const wrapper = this.renderRoot.querySelector('.tab-wrapper');\r\n if (!wrapper) return;\r\n\r\n const wrapperLeft = wrapper.scrollLeft;\r\n const tabs = Array.from(wrapper.querySelectorAll('.tab')) as HTMLElement[];\r\n\r\n for (const el of tabs) {\r\n if (el.offsetLeft > wrapperLeft + this.SCROLL_OFFSET) {\r\n const scrollTarget = el.offsetLeft - this.SCROLL_OFFSET;\r\n wrapper.scrollTo({ left: scrollTarget, behavior: 'smooth' });\r\n break;\r\n }\r\n }\r\n\r\n setTimeout(() => this.handleScroll(), 300);\r\n }\r\n\r\n private handleScroll = () => {\r\n const wrapper = this.renderRoot.querySelector('.tab-wrapper');\r\n if (!wrapper) return;\r\n\r\n const { scrollLeft, scrollWidth, clientWidth } = wrapper;\r\n\r\n this.showPrev = scrollLeft > 0;\r\n this.showNext = scrollLeft + clientWidth < scrollWidth - 1;\r\n };\r\n\r\n render() {\r\n return html`\r\n <div class=\"scroll-container\">\r\n ${this.showPrev ? html`\r\n <button class=\"scroll-button prev\" @click=${this.scrollTabsLeft}>\r\n <randstad-icon name=\"arrow_left\" size=\"36px\"></randstad-icon>\r\n </button>\r\n ` : null}\r\n\r\n <div class=\"tab-wrapper\" @scroll=${this.handleScroll}>\r\n ${this.tabs.map(tab => html`\r\n <div class=\"tab ${this.internalSelected === tab.value ? 'active' : ''}\"\r\n @click=${() => this.selectTab(tab.value)}>\r\n <img src=\"/assets/icons/${tab.icon}\" alt=\"${tab.label}\" />\r\n <span>${tab.label}</span>\r\n </div>\r\n `)}\r\n </div>\r\n\r\n ${this.showNext ? html`\r\n <button class=\"scroll-button next\" @click=${this.scrollTabsRight}>\r\n <randstad-icon name=\"arrow_right\" size=\"36px\"></randstad-icon>\r\n </button>\r\n ` : null}\r\n </div>\r\n `;\r\n }\r\n}\r\n","import { css } from 'lit';\n \nexport const progressBarUploadStyles = css`\n .progress-bar-container {\n min-height: 23px;\n display: flex;\n align-items: center;\n }\n\n .progress-bar {\n min-width: 80px;\n height: 8px;\n background-color: var(--secondary-color-20);\n border-radius: 999px;\n overflow: hidden;\n }\n\n .progress-bar-fill {\n height: 100%;\n background-color: var(--primary-color);\n transition: width 0.1s ease;\n }\n`;","import { LitElement, html, css } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport { bodyS, bodyXS } from '../styles/fontStyles';\r\nimport { progressBarUploadStyles } from '../styles/progress-bar-upload';\r\n\r\n@customElement('upload-image')\r\nexport class UploadImage extends LitElement {\r\n @property({ type: Array }) files: File[] = []; \r\n @property({ type: Boolean, reflect: true }) disabled = false;\r\n @property({ type: Number }) simulatedDelay = 0;\r\n\r\n @state() private loading = false;\r\n @state() private progress = 0;\r\n @state() private isDragging = false;\r\n\r\n static styles = css`\r\n ${ progressBarUploadStyles }\r\n\r\n :host {\r\n font-family: 'Graphik', sans-serif;\r\n }\r\n\r\n .container {\r\n display: flex;\r\n gap: 16px;\r\n flex-direction: column;\r\n border: 1px solid var(--secondary-color-10);\r\n border-radius: 4px;\r\n padding: 16px;\r\n align-items: center;\r\n background-color: var(--white);\r\n transition: border 0.2s ease, outline 0.2s ease;\r\n }\r\n\r\n .container.dragging {\r\n border: 1px dashed var(--secondary-color-40);\r\n }\r\n \r\n .icon {\r\n width: 40px;\r\n height: 40px\r\n }\r\n\r\n .text-container {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n gap: 8px;\r\n }\r\n\r\n .text-main {\r\n ${bodyS};\r\n text-align: center;\r\n vertical-align: middle;\r\n color: var(--secondary-color-80);\r\n }\r\n\r\n .text-secondary {\r\n ${bodyXS};\r\n text-align: center;\r\n vertical-align: middle;\r\n color: var(--secondary-color-60);\r\n }\r\n\r\n .text-tertiary {\r\n ${bodyXS};\r\n text-align: center;\r\n vertical-align: middle;\r\n color: var(--secondary-color-40);\r\n }\r\n\r\n .button {\r\n ${bodyXS};\r\n background-color: var(--primary-color);\r\n border: none;\r\n padding: 4px 16px;\r\n cursor: pointer;\r\n border-radius: 4px;\r\n color: var(--white);\r\n text-align: center;\r\n vertical-align: middle;\r\n }\r\n\r\n :host([disabled]) .button {\r\n background-color: var(--secondary-color-20);\r\n color: var(--secondary-color-80);\r\n cursor: default;\r\n }\r\n\r\n input[type=\"file\"] {\r\n display: none;\r\n }\r\n `;\r\n\r\n private async handleFiles(files: FileList | null) {\r\n if (this.loading || this.disabled) return;\r\n \r\n // Verificamos que this.files sea un array antes de usar su longitud\r\n const currentFiles = Array.isArray(this.files) ? this.files : [];\r\n const selected = Array.from(files || []).slice(0, 3 - currentFiles.length);\r\n\r\n // Si la propiedad simulatedDelay no está definida (o es 0), se establece en 0. Si se especifica un valor, lo usa.\r\n const delay = this.simulatedDelay ?? 0;\r\n\r\n if (delay <= 0) {\r\n this.files = [...currentFiles, ...selected];\r\n this.dispatchEvent(new CustomEvent('files-changed', { detail: this.files }));\r\n return;\r\n }\r\n \r\n this.loading = true;\r\n this.progress = 0;\r\n\r\n //Se completó el ciclo de actualización de Lit\r\n await this.updateComplete;\r\n\r\n const startTime = Date.now();\r\n const interval = setInterval(() => {\r\n const elapsedTime = Date.now() - startTime;\r\n const newProgress = Math.min(Math.round((elapsedTime / delay) * 100), 100);\r\n\r\n this.progress = newProgress;\r\n \r\n if (this.progress >= 100) {\r\n clearInterval(interval);\r\n\r\n this.files = [...currentFiles, ...selected];\r\n this.loading = false;\r\n this.progress = 0;\r\n this.dispatchEvent(new CustomEvent('files-changed', { detail: this.files }));\r\n }\r\n }, 10);\r\n }\r\n\r\n private onFileInputChange(e: Event) {\r\n const target = e.target as HTMLInputElement;\r\n this.handleFiles(target.files);\r\n }\r\n\r\n private onDrop(e: DragEvent) {\r\n e.preventDefault();\r\n if ( this.disabled ) return;\r\n\r\n this.isDragging = false;\r\n this.handleFiles(e.dataTransfer?.files || null);\r\n }\r\n\r\n private onDragOver(e: DragEvent) {\r\n e.preventDefault();\r\n\r\n if ( this.disabled ) return;\r\n this.isDragging = true;\r\n }\r\n\r\n private onDragLeave(e: DragEvent) {\r\n e.preventDefault();\r\n\r\n if ( this.disabled ) return;\r\n this.isDragging = false;\r\n }\r\n\r\n render() {\r\n return html`\r\n <div class=\"container ${this.isDragging ? 'dragging' : ''}\"\r\n @drop=\"${this.onDrop}\"\r\n @dragover=\"${this.onDragOver}\"\r\n @dragleave=\"${this.onDragLeave}\"\r\n >\r\n <img class=\"icon\"\r\n src=${this.disabled\r\n ? '/assets/img/image-upload-disabled.svg'\r\n : '/assets/img/image-upload-circle.svg'}\r\n alt=\"Subir imagen\" \r\n />\r\n\r\n <div class=\"text-container\">\r\n <div class=\"text-main\">subí hasta 3 imágenes</div>\r\n\r\n <div class=\"text-secondary\">\r\n Podés agregar un archivo o arrastrar y soltar acá\r\n </div>\r\n\r\n <div class=\"text-tertiary\">.jpg, .jpeg, .png</div>\r\n </div>\r\n\r\n ${this.loading\r\n ? html`\r\n <div class=\"progress-bar-container\">\r\n <div class=\"progress-bar\" role=\"progressbar\" aria-label=\"Subiendo archivo…\">\r\n <div class=\"progress-bar-fill\" style=\"width: ${this.progress}%;\"></div>\r\n </div>\r\n </div>\r\n `\r\n\r\n : html`\r\n <label class=\"button\">\r\n agregar archivo\r\n <input type=\"file\" accept=\".jpg,.jpeg,.png\" multiple @change=\"${this.onFileInputChange}\" />\r\n </label>\r\n `\r\n }\r\n </div>\r\n `;\r\n }\r\n}","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMonths} function options.\n */\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be added.\n * @param options - The options object\n *\n * @returns The new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\nexport function addMonths(date, amount, options) {\n const _date = toDate(date, options?.in);\n if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return _date;\n }\n const dayOfMonth = _date.getDate();\n\n // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());\n endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n const daysInMonth = endOfDesiredMonth.getDate();\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n _date.setFullYear(\n endOfDesiredMonth.getFullYear(),\n endOfDesiredMonth.getMonth(),\n dayOfMonth,\n );\n return _date;\n }\n}\n\n// Fallback for modularized imports:\nexport default addMonths;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfISOWeek} function options.\n */\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date, options) {\n return startOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeekYear} function options.\n */\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { toDate } from \"../toDate.js\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { constructFrom } from \"../constructFrom.js\";\n\nexport function normalizeDates(context, ...dates) {\n const normalize = constructFrom.bind(\n null,\n context || dates.find((date) => typeof date === \"object\"),\n );\n return dates.map(normalize);\n}\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfDay} function options.\n */\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date, options) {\n const _date = toDate(date, options?.in);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The {@link addYears} function options.\n */\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be added.\n * @param options - The options\n *\n * @returns The new date with the years added\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport function addYears(date, amount, options) {\n return addMonths(date, amount * 12, options);\n}\n\n// Fallback for modularized imports:\nexport default addYears;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfMonth} function options.\n */\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date. The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments.\n * Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed,\n * or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a month\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n _date.setDate(1);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfMonth;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // [TODO] -- I challenge you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // [TODO] -- I challenge you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // [TODO] I challenge you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { formatDistance } from \"./en-US/_lib/formatDistance.js\";\nimport { formatLong } from \"./en-US/_lib/formatLong.js\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.js\";\nimport { localize } from \"./en-US/_lib/localize.js\";\nimport { match } from \"./en-US/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\nimport { startOfYear } from \"./startOfYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDayOfYear} function options.\n */\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date, options) {\n const _date = toDate(date, options?.in);\n const diff = differenceInCalendarDays(_date, startOfYear(_date));\n const dayOfYear = diff + 1;\n return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","import { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInDay } from \"./constants.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link differenceInCalendarDays} function options.\n */\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - The options object\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const laterStartOfDay = startOfDay(laterDate_);\n const earlierStartOfDay = startOfDay(earlierDate_);\n\n const laterTimestamp =\n +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);\n const earlierTimestamp =\n +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);\n\n // Round the number of days to the nearest integer because the number of\n // milliseconds in a day is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfYear} function options.\n */\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date, options) {\n const date_ = toDate(date, options?.in);\n date_.setFullYear(date_.getFullYear(), 0, 1);\n date_.setHours(0, 0, 0, 0);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeek} function options.\n */\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getISOWeekYear } from \"./getISOWeekYear.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\n\n/**\n * The {@link startOfISOWeekYear} function options.\n */\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date, options) {\n const year = getISOWeekYear(date, options);\n const fourthOfJanuary = constructFrom(options?.in || date, 0);\n fourthOfJanuary.setFullYear(year, 0, 4);\n fourthOfJanuary.setHours(0, 0, 0, 0);\n return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(options?.in || date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(options?.in || date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (+_date >= +startOfNextYear) {\n return year + 1;\n } else if (+_date >= +startOfThisYear) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { startOfWeekYear } from \"./startOfWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\nexport function getWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getWeekYear } from \"./getWeekYear.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(options?.in || date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","export function addLeadingZeros(number, targetLength) {\n const sign = number < 0 ? \"-\" : \"\";\n const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n return sign + output;\n}\n","import { addLeadingZeros } from \"../addLeadingZeros.js\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n // Year\n y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n },\n\n // Month\n M(date, token) {\n const month = date.getMonth();\n return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n\n // Day of the month\n d(date, token) {\n return addLeadingZeros(date.getDate(), token.length);\n },\n\n // AM or PM\n a(date, token) {\n const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return dayPeriodEnumValue.toUpperCase();\n case \"aaa\":\n return dayPeriodEnumValue;\n case \"aaaaa\":\n return dayPeriodEnumValue[0];\n case \"aaaa\":\n default:\n return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n }\n },\n\n // Hour [1-12]\n h(date, token) {\n return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n },\n\n // Hour [0-23]\n H(date, token) {\n return addLeadingZeros(date.getHours(), token.length);\n },\n\n // Minute\n m(date, token) {\n return addLeadingZeros(date.getMinutes(), token.length);\n },\n\n // Second\n s(date, token) {\n return addLeadingZeros(date.getSeconds(), token.length);\n },\n\n // Fraction of second\n S(date, token) {\n const numberOfDigits = token.length;\n const milliseconds = date.getMilliseconds();\n const fractionalSeconds = Math.trunc(\n milliseconds * Math.pow(10, numberOfDigits - 3),\n );\n return addLeadingZeros(fractionalSeconds, token.length);\n },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.js\";\nimport { getISOWeek } from \"../../getISOWeek.js\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.js\";\nimport { getWeek } from \"../../getWeek.js\";\nimport { getWeekYear } from \"../../getWeekYear.js\";\n\nimport { addLeadingZeros } from \"../addLeadingZeros.js\";\nimport { lightFormatters } from \"./lightFormatters.js\";\n\nconst dayPeriodEnum = {\n am: \"am\",\n pm: \"pm\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n // Era\n G: function (date, token, localize) {\n const era = date.getFullYear() > 0 ? 1 : 0;\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return localize.era(era, { width: \"abbreviated\" });\n // A, B\n case \"GGGGG\":\n return localize.era(era, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return localize.era(era, { width: \"wide\" });\n }\n },\n\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === \"yo\") {\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, { unit: \"year\" });\n }\n\n return lightFormatters.y(date, token);\n },\n\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n const signedWeekYear = getWeekYear(date, options);\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n // Two digit year\n if (token === \"YY\") {\n const twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n }\n\n // Ordinal number\n if (token === \"Yo\") {\n return localize.ordinalNumber(weekYear, { unit: \"year\" });\n }\n\n // Padding\n return addLeadingZeros(weekYear, token.length);\n },\n\n // ISO week-numbering year\n R: function (date, token) {\n const isoWeekYear = getISOWeekYear(date);\n\n // Padding\n return addLeadingZeros(isoWeekYear, token.length);\n },\n\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n const year = date.getFullYear();\n return addLeadingZeros(year, token.length);\n },\n\n // Quarter\n Q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"QQ\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone quarter\n q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"qq\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // Month\n M: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n case \"M\":\n case \"MM\":\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // J, F, ..., D\n case \"MMMMM\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return localize.month(month, { width: \"wide\", context: \"formatting\" });\n }\n },\n\n // Stand-alone month\n L: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return String(month + 1);\n // 01, 02, ..., 12\n case \"LL\":\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // J, F, ..., D\n case \"LLLLL\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return localize.month(month, { width: \"wide\", context: \"standalone\" });\n }\n },\n\n // Local week of year\n w: function (date, token, localize, options) {\n const week = getWeek(date, options);\n\n if (token === \"wo\") {\n return localize.ordinalNumber(week, { unit: \"week\" });\n }\n\n return addLeadingZeros(week, token.length);\n },\n\n // ISO week of year\n I: function (date, token, localize) {\n const isoWeek = getISOWeek(date);\n\n if (token === \"Io\") {\n return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n\n // Day of the month\n d: function (date, token, localize) {\n if (token === \"do\") {\n return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n }\n\n return lightFormatters.d(date, token);\n },\n\n // Day of year\n D: function (date, token, localize) {\n const dayOfYear = getDayOfYear(date);\n\n if (token === \"Do\") {\n return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n\n // Day of week\n E: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"EEEEE\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"EEEE\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Local day of week\n e: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case \"e\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"ee\":\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n case \"eo\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"eee\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"eeeee\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"eeee\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (same as in `e`)\n case \"c\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"cc\":\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n case \"co\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"ccc\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // T\n case \"ccccc\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"standalone\",\n });\n // Tuesday\n case \"cccc\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // ISO day of week\n i: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n switch (token) {\n // 2\n case \"i\":\n return String(isoDayOfWeek);\n // 02\n case \"ii\":\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n case \"io\":\n return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n // Tue\n case \"iii\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"iiiii\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"iiiiii\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"iiii\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM or PM\n a: function (date, token, localize) {\n const hours = date.getHours();\n const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"aaa\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"aaaaa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n }\n\n switch (token) {\n case \"b\":\n case \"bb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"bbb\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"bbbbb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"BBBBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === \"ho\") {\n let hours = date.getHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return lightFormatters.h(date, token);\n },\n\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === \"Ho\") {\n return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n }\n\n return lightFormatters.H(date, token);\n },\n\n // Hour [0-11]\n K: function (date, token, localize) {\n const hours = date.getHours() % 12;\n\n if (token === \"Ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Hour [1-24]\n k: function (date, token, localize) {\n let hours = date.getHours();\n if (hours === 0) hours = 24;\n\n if (token === \"ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Minute\n m: function (date, token, localize) {\n if (token === \"mo\") {\n return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n }\n\n return lightFormatters.m(date, token);\n },\n\n // Second\n s: function (date, token, localize) {\n if (token === \"so\") {\n return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n }\n\n return lightFormatters.s(date, token);\n },\n\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return \"Z\";\n }\n\n switch (token) {\n // Hours and optional minutes\n case \"X\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case \"XXXX\":\n case \"XX\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case \"XXXXX\":\n case \"XXX\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case \"x\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case \"xxxx\":\n case \"xx\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case \"xxxxx\":\n case \"xxx\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (GMT)\n O: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"O\":\n case \"OO\":\n case \"OOO\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"OOOO\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (specific non-location)\n z: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"z\":\n case \"zz\":\n case \"zzz\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"zzzz\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Seconds timestamp\n t: function (date, token, _localize) {\n const timestamp = Math.trunc(+date / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n\n // Milliseconds timestamp\n T: function (date, token, _localize) {\n return addLeadingZeros(+date, token.length);\n },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = Math.trunc(absOffset / 60);\n const minutes = absOffset % 60;\n if (minutes === 0) {\n return sign + String(hours);\n }\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n if (offset % 60 === 0) {\n const sign = offset > 0 ? \"-\" : \"+\";\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n const minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n","const dateLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"P\":\n return formatLong.date({ width: \"short\" });\n case \"PP\":\n return formatLong.date({ width: \"medium\" });\n case \"PPP\":\n return formatLong.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return formatLong.date({ width: \"full\" });\n }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"p\":\n return formatLong.time({ width: \"short\" });\n case \"pp\":\n return formatLong.time({ width: \"medium\" });\n case \"ppp\":\n return formatLong.time({ width: \"long\" });\n case \"pppp\":\n default:\n return formatLong.time({ width: \"full\" });\n }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n const matchResult = pattern.match(/(P+)(p+)?/) || [];\n const datePattern = matchResult[1];\n const timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n let dateTimeFormat;\n\n switch (datePattern) {\n case \"P\":\n dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n break;\n }\n\n return dateTimeFormat\n .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n const _message = message(token, format, input);\n console.warn(_message);\n if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { formatters } from \"./_lib/format/formatters.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { isValid } from \"./isValid.js\";\nimport { toDate } from \"./toDate.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n * and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const originalDate = toDate(date, options?.in);\n\n if (!isValid(originalDate)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n let parts = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp)\n .map((substring) => {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return { isToken: false, value: \"'\" };\n }\n\n const firstCharacter = substring[0];\n if (firstCharacter === \"'\") {\n return { isToken: false, value: cleanEscapedString(substring) };\n }\n\n if (formatters[firstCharacter]) {\n return { isToken: true, value: substring };\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n return { isToken: false, value: substring };\n });\n\n // invoke localize preprocessor (only for french locales at the moment)\n if (locale.localize.preprocessor) {\n parts = locale.localize.preprocessor(originalDate, parts);\n }\n\n const formatterOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n return parts\n .map((part) => {\n if (!part.isToken) return part.value;\n\n const token = part.value;\n\n if (\n (!options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)) ||\n (!options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token))\n ) {\n warnOrThrowProtectedError(token, formatStr, String(date));\n }\n\n const formatter = formatters[token[0]];\n return formatter(originalDate, token, locale.localize, formatterOptions);\n })\n .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n const matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDate} function options.\n */\n\n/**\n * @name getDate\n * @category Day Helpers\n * @summary Get the day of the month of the given date.\n *\n * @description\n * Get the day of the month of the given date.\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The day of month\n *\n * @example\n * // Which day of the month is 29 February 2012?\n * const result = getDate(new Date(2012, 1, 29))\n * //=> 29\n */\nexport function getDate(date, options) {\n return toDate(date, options?.in).getDate();\n}\n\n// Fallback for modularized imports:\nexport default getDate;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDaysInMonth} function options.\n */\n\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date, considering the context if provided.\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The number of days in a month\n *\n * @example\n * // How many days are in February 2000?\n * const result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\nexport function getDaysInMonth(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n const monthIndex = _date.getMonth();\n const lastDayOfMonth = constructFrom(_date, 0);\n lastDayOfMonth.setFullYear(year, monthIndex + 1, 0);\n lastDayOfMonth.setHours(0, 0, 0, 0);\n return lastDayOfMonth.getDate();\n}\n\n// Fallback for modularized imports:\nexport default getDaysInMonth;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * @param date - The date that should be after the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is after the second date\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * const result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\nexport function isAfter(date, dateToCompare) {\n return +toDate(date) > +toDate(dateToCompare);\n}\n\n// Fallback for modularized imports:\nexport default isAfter;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * @param date - The date that should be before the other one to return true\n * @param dateToCompare - The date to compare with\n *\n * @returns The first date is before the second date\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * const result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport function isBefore(date, dateToCompare) {\n return +toDate(date) < +toDate(dateToCompare);\n}\n\n// Fallback for modularized imports:\nexport default isBefore;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link isSameMonth} function options.\n */\n\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same month (and year)\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\nexport function isSameMonth(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n return (\n laterDate_.getFullYear() === earlierDate_.getFullYear() &&\n laterDate_.getMonth() === earlierDate_.getMonth()\n );\n}\n\n// Fallback for modularized imports:\nexport default isSameMonth;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link isSameYear} function options.\n */\n\n/**\n * @name isSameYear\n * @category Year Helpers\n * @summary Are the given dates in the same year?\n *\n * @description\n * Are the given dates in the same year?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same year\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * const result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport function isSameYear(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n return laterDate_.getFullYear() === earlierDate_.getFullYear();\n}\n\n// Fallback for modularized imports:\nexport default isSameYear;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { constructNow } from \"./constructNow.js\";\nimport { isSameDay } from \"./isSameDay.js\";\n\n/**\n * The {@link isToday} function options.\n */\n\n/**\n * @name isToday\n * @category Day Helpers\n * @summary Is the given date today?\n * @pure false\n *\n * @description\n * Is the given date today?\n *\n * @param date - The date to check\n * @param options - An object with options\n *\n * @returns The date is today\n *\n * @example\n * // If today is 6 October 2014, is 6 October 14:00:00 today?\n * const result = isToday(new Date(2014, 9, 6, 14, 0))\n * //=> true\n */\nexport function isToday(date, options) {\n return isSameDay(\n constructFrom(options?.in || date, date),\n constructNow(options?.in || date),\n );\n}\n\n// Fallback for modularized imports:\nexport default isToday;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link isSameDay} function options.\n */\n\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same day (and year and month)\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\nexport function isSameDay(laterDate, earlierDate, options) {\n const [dateLeft_, dateRight_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n return +startOfDay(dateLeft_) === +startOfDay(dateRight_);\n}\n\n// Fallback for modularized imports:\nexport default isSameDay;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name constructNow\n * @category Generic Helpers\n * @summary Constructs a new current date using the passed value constructor.\n * @pure false\n *\n * @description\n * The function constructs a new current date using the constructor from\n * the reference date. It helps to build generic functions that accept date\n * extensions and use the current date.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * @param date - The reference date to take constructor from\n *\n * @returns Current date initialized using the given date constructor\n *\n * @example\n * import { constructNow, isSameDay } from 'date-fns'\n *\n * function isToday<DateType extends Date>(\n * date: DateArg<DateType>,\n * ): boolean {\n * // If we were to use `new Date()` directly, the function would behave\n * // differently in different timezones and return false for the same date.\n * return isSameDay(date, constructNow(date));\n * }\n */\nexport function constructNow(date) {\n return constructFrom(date, Date.now());\n}\n\n// Fallback for modularized imports:\nexport default constructNow;\n","import { LitElement, html, css } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { bodyL, bodyM, bodyS } from '../styles/fontStyles';\n\nimport * as dateFns from \"date-fns\";\n@customElement(\"calendar-overlay\")\nexport class CalendarOverlay extends LitElement {\n /**\n * La fecha actualmente seleccionada por el usuario.\n * Se utiliza para marcar visualmente el día seleccionado en el calendario.\n */\n @property({ type: Object }) selectedDate: Date | null = null;\n\n /**\n * La fecha que define el mes y año que se muestra actualmente en la vista del calendario.\n * Cambia al navegar entre meses o años.\n */\n @property({ type: Object }) viewDate: Date = new Date();\n\n @property({ type: Boolean }) isMobile = false;\n\n @property({ type: Number }) calendarWidth: number = 0;\n\n @property({ type: Object }) minDate: Date | null = null;\n @property({ type: Object }) maxDate: Date | null = null;\n\n /**\n * El estado de la vista actual del calendario, que puede ser 'días', 'meses' o 'años'.\n * Determina qué cuadrícula se renderiza en el overlay.\n */\n @state() private currentView: 'days' | 'months' | 'years' = 'days';\n\n static styles = css`\n /* Estilos generales del contenedor del calendario (escritorio) */\n .calendar-container {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 10;\n border: var(--border-weight-default, 1px) solid var(--secondary-randstad-dark-blue-10, #e7e8ec);\n background: var(--secondary-white, #fff);\n border-radius: 4px;\n margin-top: 8px;\n padding: 16px;\n box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1);\n font-family: Graphik;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n min-width: 360px;\n }\n \n /* El header no tiene margin-bottom */\n .header {\n margin-bottom: 0;\n }\n \n /* El separador no tiene margin-top para no dejar espacio con el header */\n .weekdays-separator {\n width: 100%;\n height: 1px;\n background-color: var(--secondary-randstad-dark-blue-10, #e7e8ec);\n margin-top: 0;\n margin-bottom: 16px; \n }\n\n /* Estilos del encabezado de navegación (botones y título) */\n .header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n /* Estilos generales para los botones de navegación */\n .nav-button {\n background: none;\n border: none;\n cursor: pointer;\n padding: 8px;\n color: var(--primary-randstad-blue-70, #2175d9);\n border-radius: 50%;\n transition: background-color 0.2s;\n gap: 8px;\n }\n\n .nav-button:hover {\n background-color: var(--secondary-randstad-light-blue-10, #e8f1fb);\n }\n\n .header-left,\n .header-right {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .month-year-button {\n ${bodyS}\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n background: none;\n border: none;\n cursor: pointer;\n transition: background-color 0.2s;\n color: var(--secondary-randstad-dark-blue-80, #3c4257);\n border-radius: 16px;\n width: auto;\n height: 41px;\n padding: 8px;\n }\n\n .month-year-button:hover {\n background-color: var(--secondary-randstad-light-blue-10, #e8f1fb);\n }\n\n .month-year-button randstad-icon {\n color: var(--primary-randstad-blue-70, #2175d9);\n }\n\n /* Contenedor de los nombres de los días de la semana */\n .weekdays {\n display: grid;\n place-items: center; \n grid-template-columns: repeat(7, 1fr);\n text-align: center;\n color: var(--secondary-randstad-dark-blue-60, #6c7387);\n opacity: 1;\n margin-bottom: 8px; /* Gap de 8px entre nombres y días */\n font-size: 16px;\n font-style: normal;\n font-weight: 500;\n margin-top: 0;\n }\n\n /* Cuadrícula para los días del mes */\n .days-grid {\n display: grid;\n place-items: center;\n grid-template-columns: repeat(7, 1fr);\n gap: 8px;\n }\n\n /* Estilos para cada botón de día */\n .day {\n ${bodyM}\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n border-radius: 50%;\n cursor: pointer;\n background-color: transparent;\n border: none;\n color: var(--secondary-randstad-dark-blue-80, #3c4257);\n padding: 0;\n position: relative;\n }\n\n .day:hover {\n background-color: var(--secondary-randstad-light-blue-10, #e8f1fb);\n }\n\n /* Estilos para el día, mes y año de hoy */\n .day.today {\n color: var(--primary-randstad-blue-70, #2175d9);\n font-weight: 500;\n }\n\n .day.today::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n width: 100%;\n height: 2px;\n background-color: var(--primary-randstad-blue-70, #2175d9);\n border-radius: 2px;\n }\n\n /* Estilos para el día seleccionado */\n .day.selected {\n background-color: var(--primary-randstad-blue-70, #2175d9);\n color: var(--secondary-white, #fff);\n font-weight: 500;\n }\n\n /* Estilos para el día seleccionado cuando se muestra en un mes o año diferente */\n .day.secondary-selected {\n background-color: var(--secondary-randstad-dark-blue-10, #e7e8ec);\n color: var(--secondary-randstad-dark-blue-80, #3c4257);\n font-weight: 500;\n border: 1px solid var(--secondary-randstad-dark-blue-10, #e7e8ec);\n }\n\n /* Grillas para selección de año y mes */\n .year-grid,\n .month-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n }\n\n /* Botones de año y mes en la grilla */\n .year-button,\n .month-button {\n ${bodyM}\n background: var(--secondary-white, #fff);\n border: 1px solid transparent;\n color: var(--secondary-randstad-dark-blue-80, #3c4257);\n cursor: pointer;\n transition: background-color 0.2s, border-color 0.2s;\n border-radius: 9999px;\n padding: 4px 16px;\n text-align: center;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 38px;\n }\n\n .year-button:hover,\n .month-button:hover {\n background-color: var(--secondary-randstad-light-blue-10, #e8f1fb);\n }\n\n /* Estilos para el año o mes seleccionado */\n .year-button.selected,\n .month-button.selected {\n background-color: var(--primary-randstad-blue-70, #2175d9);\n color: var(--secondary-white, #fff);\n border: 1px solid var(--primary-randstad-blue-70, #2175d9);\n }\n\n /* Estilos para el mes seleccionado en otro año (estilo secundario) */\n .month-button.secondary-selected {\n background-color: var(--secondary-randstad-dark-blue-10, #e7e8ec);\n color: var(--secondary-randstad-dark-blue-80, #3c4257);\n font-weight: 500;\n border: 1px solid var(--secondary-randstad-dark-blue-10, #e7e8ec);\n }\n\n /* Estilos para el año y mes current */\n .year-button.current,\n .month-button.current {\n position: relative;\n }\n\n .year-button.current::after,\n .month-button.current::after {\n content: '';\n position: absolute;\n bottom: 0;\n width: 100%;\n height: 2px;\n border-radius: 2px;\n background-color: var(--primary-randstad-blue-70, #2175d9);\n }\n\n /* Estilos para el botón de navegación deshabilitado */\n .nav-button[disabled] {\n color: var(--secondary-randstad-dark-blue-30, #b1b5c4);\n pointer-events: none;\n }\n\n .nav-button[disabled]:hover {\n background-color: transparent;\n }\n\n /* Estilos para el botón de día deshabilitado */\n .day[disabled] {\n color: var(--secondary-randstad-dark-blue-30, #b1b5c4);\n pointer-events: none;\n background-color: transparent;\n }\n \n .day[disabled]:hover {\n background-color: transparent;\n }\n\n /* Estilos para los botones de año y mes deshabilitados */\n .year-button[disabled],\n .month-button[disabled] {\n color: var(--secondary-randstad-dark-blue-30, #b1b5c4);\n pointer-events: none;\n background-color: transparent;\n }\n \n .year-button[disabled]:hover,\n .month-button[disabled]:hover {\n background-color: transparent;\n }\n\n /* --- Estilos para móvil --- */\n .mobile-backdrop {\n position: fixed;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.4);\n z-index: 999;\n font-family: Graphik;\n }\n\n .mobile-modal {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: white;\n z-index: 1000;\n border-radius: 12px 12px 0 0;\n box-shadow: 0 -4px 10px rgba(0, 0, 0, 0.15);\n display: flex;\n flex-direction: column;\n padding: 24px 16px;\n animation: slideUp 0.5s ease-out;\n max-height: 80vh;\n overflow-y: auto;\n font-family: Graphik;\n }\n\n @keyframes slideUp {\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n }\n \n .mobile-modal .header {\n margin-bottom: 0;\n position: sticky;\n top: 0;\n background: white;\n z-index: 10;\n }\n \n .mobile-modal .weekdays-separator {\n margin: 0;\n }\n\n .mobile-modal .weekdays {\n place-items: center;\n margin-top: 16px;\n margin-bottom: 8px;\n }\n \n .mobile-modal .days-grid {\n gap: 8px;\n grid-template-columns: repeat(7, 1fr);\n place-items: center;\n }\n \n .mobile-modal .month-grid,\n .mobile-modal .year-grid {\n gap: 16px;\n margin-top: 16px;\n }\n\n .mobile-modal .day {\n ${bodyL}\n font-weight: 500;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px; \n height: 40px;\n border-radius: 50%;\n cursor: pointer;\n background-color: transparent;\n border: none;\n color: var(--secondary-randstad-dark-blue-80, #3c4257);\n position: relative;\n }\n\n .mobile-modal .day.selected {\n background-color: var(--primary-randstad-blue-70, #2175d9);\n color: var(--secondary-white, #fff);\n font-weight: 500;\n border-radius: 50%;\n }\n\n .mobile-modal .day.today {\n color: var(--primary-randstad-blue-70, #2175d9);\n font-weight: 500;\n }\n\n .mobile-modal .day.today::after {\n content: '';\n position: absolute;\n bottom: 0;\n width: 40px; \n left: 50%;\n transform: translateX(-50%); \n height: 2px;\n background-color: var(--primary-randstad-blue-70, #2175d9);\n border-radius: 2px;\n }\n\n .mobile-modal .year-grid,\n .mobile-modal .month-grid {\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n }\n\n .mobile-modal .year-button,\n .mobile-modal .month-button {\n width: 100%;\n height: 48px;\n border-radius: 9999px;\n flex: 1 1 33.3333%;\n padding: 0;\n }\n\n .mobile-modal .day.secondary-selected,\n .mobile-modal .month-button.secondary-selected {\n background-color: var(--secondary-randstad-dark-blue-10, #e7e8ec);\n color: var(--secondary-randstad-dark-blue-80, #3c4257);\n font-weight: 500;\n border: 1px solid var(--secondary-randstad-dark-blue-10, #e7e8ec);\n }\n\n /* Estilos para elementos deshabilitados dentro del modal de móviles. */\n .mobile-modal .day[disabled],\n .mobile-modal .month-button[disabled],\n .mobile-modal .year-button[disabled] {\n color: var(--secondary-randstad-dark-blue-30, #b1b5c4);\n pointer-events: none;\n background-color: transparent;\n }\n\n .mobile-modal .nav-button[disabled] {\n color: var(--secondary-randstad-dark-blue-30, #b1b5c4);\n pointer-events: none;\n background-color: transparent;\n }\n\n /* Evitamos que el estilo 'today' o 'current' se aplique si el elemento está deshabilitado */\n .mobile-modal .day.today[disabled]::after,\n .mobile-modal .nav-button[disabled] randstad-icon {\n color: var(--secondary-randstad-dark-blue-30, #b1b5c4);\n }\n /* */\n `;\n\n public connectedCallback() {\n super.connectedCallback();\n document.addEventListener(\"click\", this.handleOutsideClick);\n }\n\n public disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener(\"click\", this.handleOutsideClick);\n }\n\n /**\n * Cierra el overlay del calendario si el clic se produce fuera de sus límites.\n * Se utiliza un `event listener` en el documento para detectar clics en cualquier lugar de la página.\n \n * @param e - Objeto de evento del clic.\n */\n private handleOutsideClick = (e: MouseEvent) => {\n const root = this.getRootNode() as ShadowRoot | null;\n const inputElement = root?.host;\n\n if ( inputElement && !e.composedPath().includes(this) && !e.composedPath().includes(inputElement))\n this.dispatchEvent(new CustomEvent(\"close\", { bubbles: true, composed: true }));\n };\n\n /**\n * Alterna la vista del calendario entre 'days' y 'years' al hacer clic en el encabezado.\n * Si la vista actual es 'days', cambia a 'years'; si no, vuelve a 'days'.\n */\n private handleHeaderClick() {\n if (this.currentView === 'days') this.currentView = 'years';\n else this.currentView = 'days';\n }\n\n /**\n * Método auxiliar para actualizar la vista y disparar el evento\n */\n private _updateView(\n newDate: Date,\n newView: 'days' | 'months' | 'years' | null = null\n ) {\n this.viewDate = newDate;\n if (newView) this.currentView = newView;\n\n this.dispatchEvent(new CustomEvent(\"view-date-change\", { detail: { date: this.viewDate } }));\n }\n\n /**\n * Maneja la navegación entre periodos en el calendario según la vista actual.\n * Si la vista es de días, navega por meses; si es de meses, navega por años;\n * si es de años, navega por bloques de 21 años.\n * Actualiza la vista con la nueva fecha calculada.\n \n * @param direction -1 para retroceder, 1 para avanzar.\n */\n private handleNavClick(direction: number) {\n let newDate = this.viewDate;\n\n if (this.currentView === 'days') newDate = dateFns.addMonths(this.viewDate, direction);\n else if (this.currentView === 'months') newDate = dateFns.addYears(this.viewDate, direction);\n else newDate = dateFns.addYears(this.viewDate, direction * 21);\n\n this._updateView(newDate);\n }\n\n /**\n * Maneja la selección de un año en la vista de años.\n * Al seleccionar un año, actualiza la fecha de vista y cambia a la vista de meses.\n \n * @param year - El año seleccionado (número de 4 dígitos).\n */\n private handleYearSelect(year: number) {\n const newDate = dateFns.setYear(this.viewDate, year);\n this._updateView(newDate, 'months');\n }\n\n /**\n * Maneja la selección de un mes en la vista de meses.\n * Al seleccionar un mes, actualiza la fecha de vista y cambia a la vista de días.\n\n * @param monthIndex - El índice del mes seleccionado (0-11, donde 0 es Enero).\n */\n private handleMonthSelect(monthIndex: number) {\n const newDate = dateFns.setMonth(this.viewDate, monthIndex);\n this._updateView(newDate, 'days');\n }\n\n /**\n * Maneja el clic en un día del calendario.\n * Emite un evento `date-selected` al componente padre con la fecha y su valor formateado.\n\n * @param day - El objeto Date del día seleccionado.\n */\n private handleDayClick(day: Date) {\n this.selectedDate = day; // Actualizar la fecha seleccionada\n\n this.dispatchEvent(\n new CustomEvent(\"date-selected\", {\n detail: { date: day },\n bubbles: true,\n composed: true\n })\n );\n }\n\n private getFullMonthNames(): string[] {\n return [\n 'Enero',\n 'Febrero',\n 'Marzo',\n 'Abril',\n 'Mayo',\n 'Junio',\n 'Julio',\n 'Agosto',\n 'Septiembre',\n 'Octubre',\n 'Noviembre',\n 'Diciembre'\n ];\n }\n\n private getShortMonthNames(): string[] {\n return this.getFullMonthNames().map((month) => month.substring(0, 3));\n }\n\n private getShortWeekdays(): string[] {\n return ['lu', 'ma', 'mi', 'ju', 'vi', 'sa', 'do'];\n }\n\n /**\n * Renderiza el encabezado del calendario, mostrando el mes y el año actuales.\n * Incluye botones de navegación y un botón para cambiar la vista (a meses/años).\n */\n private renderHeader() {\n const monthNames = this.getFullMonthNames();\n\n let headerText: string = '';\n let disablePrev: boolean = false; \n let disableNext: boolean = false;\n\n if (this.currentView === 'years') {\n const startYear = this.viewDate.getFullYear() - (this.viewDate.getFullYear() % 21);\n const endYear = startYear + 20;\n headerText = `${startYear} - ${endYear}`;\n\n const minYear = this.minDate ? this.minDate.getFullYear() : -Infinity;\n const maxYear = this.maxDate ? this.maxDate.getFullYear() : Infinity; \n disablePrev = startYear <= minYear; \n disableNext = endYear >= maxYear;\n } else if (this.currentView === 'months') {\n headerText = `${this.viewDate.getFullYear()}`;\n\n const viewYear = this.viewDate.getFullYear();\n const minYear = this.minDate ? this.minDate.getFullYear() : -Infinity;\n const maxYear = this.maxDate ? this.maxDate.getFullYear() : Infinity;\n disablePrev = viewYear <= minYear;\n disableNext = viewYear >= maxYear;\n } else {\n const monthName = monthNames[this.viewDate.getMonth()];\n headerText = `${monthName} ${this.viewDate.getFullYear()}`;\n\n if (this.minDate) disablePrev = dateFns.isSameMonth(dateFns.startOfMonth(this.viewDate), dateFns.startOfMonth(this.minDate)) || dateFns.isBefore(this.viewDate, this.minDate); \n if (this.maxDate) disableNext = dateFns.isSameMonth(dateFns.startOfMonth(this.viewDate), dateFns.startOfMonth(this.maxDate)) || dateFns.isAfter(this.viewDate, this.maxDate);\n }\n\n return html`\n <div class=\"header\">\n <div class=\"header-left\">\n <button class=\"month-year-button\" @click=${this.handleHeaderClick}>\n <span>${headerText}</span>\n\n ${this.currentView === 'days'\n ? html`<randstad-icon name=\"arrow_drop_down\" class=\"select-icon\"></randstad-icon>`\n : html`<randstad-icon name=\"arrow_drop_up\" class=\"select-icon\"></randstad-icon>`\n }\n </button>\n </div>\n\n <div class=\"header-right\">\n <button class=\"nav-button\" @click=${() => this.handleNavClick(-1)} ?disabled=${disablePrev}>\n <randstad-icon name=\"arrow_left\"></randstad-icon>\n </button>\n\n <button class=\"nav-button\" @click=${() => this.handleNavClick(1)} ?disabled=${disableNext}>\n <randstad-icon name=\"arrow_right\"></randstad-icon>\n </button>\n </div>\n </div>\n `;\n }\n\n /**\n * Renderiza la vista de selección de años en el calendario.\n * Genera una cuadrícula de botones, cada uno representando un año dentro de un rango de 21 años.\n * El año actualmente seleccionado se resalta visualmente.\n * Al hacer clic en un botón de año, se invoca el método de manejo de selección de año.\n \n * @returns {TemplateResult} Plantilla HTML para la vista de años.\n */\n private renderYearsView() {\n const startYear = this.viewDate.getFullYear() - (this.viewDate.getFullYear() % 21);\n const years = Array.from({ length: 21 }, (_, i) => startYear + i);\n const selectedYear = this.selectedDate ? this.selectedDate.getFullYear() : null;\n const currentYear = new Date().getFullYear();\n\n const minYear = this.minDate ? this.minDate.getFullYear() : -Infinity; \n const maxYear = this.maxDate ? this.maxDate.getFullYear() : Infinity; \n\n return html`\n <div class=\"year-grid\"> \n ${years.map((y) => {\n const isDisabled = y < minYear || y > maxYear;\n const buttonClass = `year-button ${y === selectedYear ? 'selected' : y === currentYear ? 'current' : ''}`;\n \n return html`\n <button \n class=\"${buttonClass}\" \n @click=${() => this.handleYearSelect(y)}\n ?disabled=${isDisabled} \n >\n ${y}\n </button>\n `;\n })}\n </div>\n `;\n }\n\n /**\n * Renderiza la vista de selección de meses en el calendario.\n * Genera una cuadrícula de botones, cada uno representando un mes abreviado.\n * El mes actualmente seleccionado se resalta visualmente.\n * Al hacer clic en un botón de mes, se invoca el método de manejo de selección de mes.\n \n * @returns {TemplateResult} Plantilla HTML para la vista de meses.\n */\n private renderMonthsView() {\n const monthNames = this.getShortMonthNames();\n const selectedMonth = this.selectedDate?.getMonth();\n const currentMonth = new Date().getMonth();\n\n const viewYear = this.viewDate.getFullYear();\n\n return html`\n <div class=\"month-grid\">\n ${monthNames.map(\n (month, index) => {\n const isCurrentMonth = index === currentMonth;\n const isSelected = index === selectedMonth && this.selectedDate && dateFns.isSameYear(this.viewDate, this.selectedDate);\n const isSecondarySelected = index === selectedMonth && this.selectedDate && !dateFns.isSameYear(this.viewDate, this.selectedDate);\n\n let isDisabled = false; \n\n if (this.minDate && viewYear === this.minDate.getFullYear())\n isDisabled = index < this.minDate.getMonth();\n \n if (this.maxDate && viewYear === this.maxDate.getFullYear()) \n isDisabled = isDisabled || index > this.maxDate.getMonth();\n \n const buttonClass = `month-button ${isSelected ? 'selected' : isSecondarySelected ? 'secondary-selected' : isCurrentMonth ? 'current' : ''}`;\n \n return html`\n <button\n class=\"${buttonClass}\"\n ?disabled=${isDisabled}\n @click=${() => this.handleMonthSelect(index)}\n >\n ${month}\n </button>\n `;\n }\n )}\n </div>\n `;\n  }\n\n /**\n * Renderiza la cuadrícula de días para el mes actual.\n * Incluye los días de la semana, los días del mes y marca el día actual y el seleccionado.\n */\n private renderDayView() {\n const daysInMonth = dateFns.getDaysInMonth(this.viewDate);\n const startOfMonth = dateFns.startOfMonth(this.viewDate);\n const dayOfWeek = dateFns.getDay(startOfMonth);\n\n const leadingDays = Array.from({ length: dayOfWeek === 0 ? 6 : dayOfWeek - 1 },\n () => null\n );\n\n const days = Array.from({ length: daysInMonth }, \n (_, i) => dateFns.setDate(startOfMonth, i + 1)\n );\n\n const weekdays = this.getShortWeekdays();\n\n return html`\n <div class=\"weekdays\">\n ${weekdays.map((day) => html`<div>${day}</div>`)}\n </div>\n\n <div class=\"days-grid\">\n ${leadingDays.map(() => html`<div></div>`)}\n ${days.map((day) => {\n const normalizedDay = dateFns.startOfDay(day);\n const normalizedSelectedDate = this.selectedDate\n ? dateFns.startOfDay(this.selectedDate)\n : null;\n\n const isDisabled = (this.minDate && dateFns.isBefore(normalizedDay, dateFns.startOfDay(this.minDate))) ||\n (this.maxDate && dateFns.isAfter(normalizedDay, dateFns.startOfDay(this.maxDate)));\n\n const isTodayDay = dateFns.isToday(normalizedDay);\n\n // Si el día coincide con el día seleccionado\n const isSameDay = normalizedSelectedDate &&\n dateFns.getDate(normalizedDay) ===\n dateFns.getDate(normalizedSelectedDate);\n\n // Está seleccionado si es el mismo día y estamos en el mismo mes y año\n const isSelected = isSameDay && normalizedSelectedDate &&\n dateFns.isSameMonth(normalizedDay, normalizedSelectedDate) &&\n dateFns.isSameYear(normalizedDay, normalizedSelectedDate);\n\n // Es secundario si es el mismo día pero estamos en diferente mes o año\n const isSecondarySelected = isSameDay && !isSelected;\n\n const buttonClass = `day ${isTodayDay ? 'today' : ''} ${\n isSelected\n ? 'selected'\n : isSecondarySelected\n ? 'secondary-selected'\n : ''\n }`;\n\n return html`\n <button\n class=\"${buttonClass}\"\n ?disabled=${isDisabled}\n @click=${() => this.handleDayClick(day)}\n >\n ${dateFns.format(day, 'd')}\n </button>\n `;\n })}\n </div>\n `;\n }\n\n /**\n * Renderiza el overlay del calendario según la vista actual (días, meses o años).\n * Incluye el encabezado y la cuadrícula correspondiente.\n \n * @returns {TemplateResult} Plantilla HTML del overlay del calendario.\n */\n public render() {\n let content;\n\n if (this.currentView === 'days') content = this.renderDayView();\n else if (this.currentView === 'months') content = this.renderMonthsView();\n else content = this.renderYearsView();\n\n const mainContent = html`${this.renderHeader()} <div class=\"weekdays-separator\"></div> ${content}`;\n\n // Estilo para móvil\n if (this.isMobile) {\n return html`\n <div\n class=\"mobile-backdrop\"\n @click=${() => this.dispatchEvent(new CustomEvent(\"close\"))}\n >\n <div class=\"mobile-modal\" @click=${(e: Event) => e.stopPropagation()}>\n ${mainContent}\n </div>\n </div>\n `;\n }\n\n // Estilo para escritorio\n return html`\n <div class=\"calendar-container\" style=\"width: ${this.calendarWidth}px;\">\n ${mainContent}\n </div>\n `;\n }\n}","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setYear} function options.\n */\n\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param year - The year of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the year set\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * const result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\nexport function setYear(date, year, options) {\n const date_ = toDate(date, options?.in);\n\n // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n if (isNaN(+date_)) return constructFrom(options?.in || date, NaN);\n\n date_.setFullYear(year);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default setYear;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getDaysInMonth } from \"./getDaysInMonth.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setMonth} function options.\n */\n\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param month - The month index to set (0-11)\n * @param options - The options\n *\n * @returns The new date with the month set\n *\n * @example\n * // Set February to 1 September 2014:\n * const result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\nexport function setMonth(date, month, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n const day = _date.getDate();\n\n const midMonth = constructFrom(options?.in || date, 0);\n midMonth.setFullYear(year, month, 15);\n midMonth.setHours(0, 0, 0, 0);\n const daysInMonth = getDaysInMonth(midMonth);\n\n // Set the earlier date, allows to wrap Jan 31 to Feb 28\n _date.setMonth(month, Math.min(day, daysInMonth));\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setMonth;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDay} function options.\n */\n\n/**\n * @name getDay\n * @category Weekday Helpers\n * @summary Get the day of the week of the given date.\n *\n * @description\n * Get the day of the week of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of week, 0 represents Sunday\n *\n * @example\n * // Which day of the week is 29 February 2012?\n * const result = getDay(new Date(2012, 1, 29))\n * //=> 3\n */\nexport function getDay(date, options) {\n return toDate(date, options?.in).getDay();\n}\n\n// Fallback for modularized imports:\nexport default getDay;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link setDate} function options.\n */\n\n/**\n * @name setDate\n * @category Day Helpers\n * @summary Set the day of the month to the given date.\n *\n * @description\n * Set the day of the month to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows using extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param dayOfMonth - The day of the month of the new date\n * @param options - The options\n *\n * @returns The new date with the day of the month set\n *\n * @example\n * // Set the 30th day of the month to 1 September 2014:\n * const result = setDate(new Date(2014, 8, 1), 30)\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport function setDate(date, dayOfMonth, options) {\n const _date = toDate(date, options?.in);\n _date.setDate(dayOfMonth);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default setDate;\n","import { html, css, nothing } from \"lit\";\nimport { customElement, property, query, state } from \"lit/decorators.js\";\nimport { format, isAfter, isBefore, isValid, subYears } from \"date-fns\";\nimport { bodyL } from '../styles/fontStyles';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { mixStyles } from \"../styles/mix\";\nimport { errorStyles } from \"../styles/error\";\nimport { tooltipStyles } from \"../styles/tooltip\";\nimport { BaseControl } from \"../helpers/BaseControl\";\n\nimport \"./CalendarOverlay.ts\";\n\n@customElement(\"datepicker-component\")\nexport class DatePickerComponent extends BaseControl {\n @property({ type: String }) width?: string;\n @property({ type: Boolean }) isRenderClearButton = true;\n\n @property({ type: String }) minDate?: string;\n @property({ type: String }) maxDate?: string;\n\n // Validador de edad +18\n @property({ type: Boolean }) eighteenOrOlder = false;\n\n @state() private isOpen = false;\n @state() private selectedDate: Date | null = null;\n @state() private viewDate: Date = new Date();\n @state() private isMobile = false;\n @state() private calendarWidth: number = 0;\n\n @state() private inputValue: string | null = null;\n\n @query(\".input-container\") private inputContainer!: HTMLDivElement;\n\n static styles = css`\n ${ mixStyles }\n ${ errorStyles }\n ${ tooltipStyles }\n\n /* Si se proporciona una propiedad width (ej. width=\"600px\"), se usa ese valor. */\n :host([width]) {\n width: var(--datepicker-width);\n }\n\n .datepicker-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 100%;\n }\n\n /* Estilos para evitar el desbordamiento en móviles */\n calendar-overlay {\n max-width: 100vw;\n box-sizing: border-box;\n }\n\n /* Estilos para el estado disabled */\n .input-wrapper.disabled, .input-wrapper.disabled .date-input {\n background-color: var(--secondary-color-10);\n color: #9FA3B3;\n cursor: default;\n }\n\n .input-wrapper.disabled .icon-button,\n .input-wrapper.disabled .icon-button randstad-icon {\n color: #9FA3B3;\n cursor: default;\n }\n\n /* Estilos del campo de entrada y sus estados */\n .input-wrapper {\n display: flex;\n align-items: center;\n border: 1px solid var(--md-sys-color-outline, #e0e0e0);\n border-radius: 4px;\n padding: 0 16px;\n transition: border-color 0.2s;\n background: white;\n box-sizing: border-box;\n min-width: 360px;\n }\n\n .input-wrapper:hover {\n box-shadow: 0px 0px 0px 4px #0f19411a;\n }\n\n .input-wrapper.active:hover {\n box-shadow: 0px 0px 0px 4px #0f19411a;\n }\n\n .input-wrapper.active {\n border: 1px solid var(--primary-color);\n box-shadow: none;\n }\n\n .date-input {\n ${bodyL}\n flex-grow: 1;\n border: none;\n outline: none;\n padding: 16px 0;\n cursor: text;\n background: white;\n color: #49454f;\n }\n\n .icon-button {\n background: none;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n }\n\n .clear-button {\n margin-right: 18px;\n color: #49454f;\n opacity: 0.6;\n }\n\n .clear-button randstad-icon {\n width: 18px;\n height: 18px;\n }\n\n .calendar-button {\n color: #2175d9;\n }\n\n .calendar-button randstad-icon {\n font-size: 18px;\n }\n `;\n\n private setMessageErrorFormatInvalid(): string {\n return `formato de fecha inválido, se esperaba 'dd-MM-yyyy'`;\n }\n\n /**\n * Ciclo de vida: se ejecuta al conectar el componente al DOM.\n * Inicializa el modo responsivo y listeners globales.\n */\n public connectedCallback() {\n super.connectedCallback();\n this.updateResponsiveMode();\n\n window.addEventListener(\"resize\", this.updateResponsiveModeBound);\n document.addEventListener(\"click\", this.handleClickOutside);\n }\n\n /**\n * Ciclo de vida: se ejecuta al desconectar el componente del DOM.\n * Limpia listeners globales.\n */\n public disconnectedCallback() {\n window.removeEventListener(\"resize\", this.updateResponsiveModeBound);\n document.removeEventListener(\"click\", this.handleClickOutside);\n \n super.disconnectedCallback();\n }\n\n /**\n * Ciclo de vida: se llama después de que la primera actualización del componente ha terminado.\n * Es ideal para obtener el ancho del DOM por primera vez.\n */\n public firstUpdated() {\n this.setInitialWidth();\n }\n \n /**\n * Ciclo de vida: se llama después de cada actualización.\n * Se usa para recalcular el ancho si la apertura del calendario ha cambiado.\n \n * @param changedProperties - Mapa de propiedades que han cambiado.\n */\n public updated( changedProperties: Map<string, any> ) {\n if ( changedProperties.has(\"value\")) this._syncValue( this.value );\n if ( changedProperties.has(\"isOpen\") || changedProperties.has(\"value\") ) this.setInitialWidth();\n\n super.updated( changedProperties );\n }\n\n private setInitialWidth() {\n if ( !this.inputContainer ) return;\n this.calendarWidth = this.inputContainer.getBoundingClientRect().width;\n }\n \n /**\n * Referencia enlazada para el listener de resize.\n */\n private updateResponsiveModeBound = this.updateResponsiveMode.bind( this );\n \n /**\n * Actualiza el estado isMobile según el ancho de la ventana.\n */\n private updateResponsiveMode() {\n this.isMobile = window.innerWidth <= 940;\n // Se llama a setInitialWidth() para recalcular el ancho si la vista cambia\n this.setInitialWidth();\n }\n\n /**\n * Maneja el evento de entrada del usuario en el input.\n * Valida el formato de la fecha y actualiza el estado del componente.\n \n * @param e - Objeto de evento de entrada.\n */\n public handleInput( e: Event ) {\n const input: HTMLInputElement = e.target as HTMLInputElement;\n this.inputValue = input.value;\n this._parseAndValidateDate( input.value, true );\n }\n\n /**\n * Cierra el calendario si el clic se realiza fuera del componente.\n * Se ejecuta en el `document` para detectar clics en cualquier lugar de la página.\n \n * @param e - Objeto de evento del clic.\n */\n private handleClickOutside = ( e: Event ) => {\n const path = e.composedPath();\n\n if ( !path.includes( this ) ) this.isOpen = false;\n };\n\n /**\n * Abre o cierra el calendario al hacer clic en el botón de calendario.\n \n * @param e - Objeto de evento del clic.\n */\n public handleCalendarButtonClick( e: Event ) {\n if ( this.disabled ) return;\n e.stopPropagation();\n\n this.isOpen = !this.isOpen;\n\n if ( this.selectedDate ) this.viewDate = this.selectedDate;\n else this.viewDate = new Date();\n\n this.requestUpdate();\n }\n\n /**\n * Borra la fecha seleccionada y cierra el calendario.\n */\n public handleClearDate() {\n this.inputValue = null;\n this.selectedDate = null;\n this.error = false;\n this.errorMessage = null;\n \n this.closeOverlay( null );\n }\n\n /**\n * Maneja la selección de fecha desde el calendario.\n */\n private handleDateSelect( e: CustomEvent ) {\n const selected = e.detail.date;\n if ( !selected ) return;\n\n const isValidDate: boolean = this._validateDate( selected );\n\n if ( isValidDate ) {\n this.selectedDate = selected;\n this.viewDate = selected;\n\n // Actualizamos el valor del input con el formato correcto\n const formattedDate = format( selected, 'dd-MM-yyyy' );\n this.inputValue = formattedDate;\n\n this.closeOverlay( formattedDate );\n } else {\n // Si la fecha seleccionada del calendario es inválida,\n // aseguramos que el valor del componente sea null\n const formattedDate = format( selected, 'dd-MM-yyyy' );\n this.inputValue = formattedDate; \n \n this.selectedDate = null;\n this.closeOverlay( null );\n }\n }\n \n /**\n * Maneja el cambio de la fecha de vista en el calendario.\n \n * @param e - Objeto de evento con la nueva fecha de vista.\n */\n private handleViewDateChange( e: CustomEvent ) {\n this.viewDate = e.detail.date;\n }\n \n /**\n * Cierra el calendario y actualiza el valor del componente.\n * Emite un evento 'date-selected' con el valor de la fecha seleccionada.\n \n * @param valueSet - La fecha en formato de cadena (ej: 'dd-MM-yyyy') a establecer.\n */\n private closeOverlay( valueSet: string | null ) {\n this.value = valueSet;\n\n this.dispatchEvent( new CustomEvent(\"date-selected\", { detail: { value: valueSet } }) );\n this.isOpen = false;\n }\n\n /**\n * Analiza la propiedad 'value' externa y actualiza el estado interno del componente.\n * Se ejecuta cuando una propiedad cambia desde fuera (p. ej., Storybook, componente padre).\n * No emite eventos ni interactúa con el DOM para evitar bucles de renderizado.\n\n * @param value La cadena de fecha pasada desde una propiedad externa.\n */\n private _syncValue( value: string | null ) {\n if ( value === '' || value === null ) {\n if ( !this.error ) {\n this.selectedDate = null;\n this.inputValue = null;\n this.errorMessage = null;\n }\n\n return;\n }\n\n const parsedDate: Date | null = this._parseDate( value );\n\n if ( parsedDate && this._validateDate( parsedDate ) ) {\n this.selectedDate = parsedDate;\n this.viewDate = parsedDate;\n\n this.error = false;\n this.errorMessage = null;\n\n this.value = format( parsedDate, 'dd-MM-yyyy' );\n this.inputValue = this.value;\n } else {\n this.selectedDate = parsedDate;\n }\n }\n\n /**\n * Valida una fecha basándose en las reglas del componente.\n * Esto incluye la validación de edad y el rango de fechas.\n \n * @param date - El objeto Date a validar.\n * @returns `true` si la fecha es válida, `false` de lo contrario.\n */\n private _validateDate( date: Date | null ): boolean {\n if ( !date ) return false;\n \n // Resetear el estado de error antes de validar \n this.error = false;\n this.errorMessage = null;\n\n // Lógica de validación de edad\n if ( this.eighteenOrOlder ) {\n const eighteenYearsAgo: Date = subYears( new Date(), 18 );\n \n if ( isAfter( date, eighteenYearsAgo ) ) {\n this.error = true;\n this.errorMessage = 'tenés que ser mayor de 18 años';\n \n return false;\n }\n }\n \n // Lógica de validación de rango\n let isValidRange: boolean = this._isWithinBounds( date );\n \n if ( !isValidRange ) {\n const range: { minDate: Date | null; maxDate: Date | null; } | null = this._getValidDateRange();\n \n this.error = true;\n this.errorMessage = `la fecha debe estar entre ${ range?.minDate ? format( range.minDate, 'dd-MM-yyyy' ) : '' } y ${ range?.maxDate ? format( range.maxDate, 'dd-MM-yyyy' ) : '' }.`;\n \n return false;\n }\n \n return true;\n }\n \n /**\n * Valida la entrada del usuario en el campo de texto.\n\n * Este método se llama con cada pulsación de tecla o cambio en el input.\n * Se encarga de validar el formato, verificar si la fecha está dentro de los límites\n * y de actualizar el estado de error y el valor del input.\n \n * @param value La cadena de fecha que el usuario ha introducido.\n * @param fromInput Indica si la llamada proviene directamente de la interacción del usuario.\n */\n private _parseAndValidateDate( value: string | null, fromInput: boolean ) {\n if ( this.disabled ) return;\n\n if ( value === '' || value === null ) {\n this.selectedDate = null;\n this.error = false;\n this.errorMessage = null;\n\n if ( fromInput ) this.closeOverlay( null );\n return;\n }\n\n const parsedDate: Date | null = this._parseDate( value );\n\n if ( parsedDate ) {\n const isValidDate = this._validateDate( parsedDate );\n\n if ( isValidDate ) {\n this.selectedDate = parsedDate;\n this.viewDate = parsedDate;\n this.error = false;\n this.errorMessage = null;\n \n if ( fromInput ) this.closeOverlay( format( parsedDate, 'dd-MM-yyyy' ) );\n } else {\n // El error y el mensaje ya han sido seteados por _validateDate\n this.error = true;\n this.selectedDate = null;\n\n if ( fromInput ) this.closeOverlay( null );\n }\n } else {\n this.error = true;\n this.errorMessage = this.setMessageErrorFormatInvalid();\n this.selectedDate = null;\n \n if ( fromInput ) this.closeOverlay( null );\n }\n }\n\n /**\n * Intenta analizar una cadena de fecha en múltiples formatos.\n * Este método es la fuente de la verdad para el análisis de fechas. \n * Soporta los formatos 'dd-MM-yyyy' y 'yyyy-MM-dd', retornando un objeto Date.\n \n * @param dateString La cadena de fecha a analizar.\n * @returns Un objeto Date si es válido, de lo contrario, null.\n */\n private _parseDate( dateString: string ): Date | null {\n // Intenta parsear como 'dd-MM-yyyy'\n const partsDDMMYYYY = dateString.split( '-' ).map( Number );\n\n if ( partsDDMMYYYY.length === 3 ) {\n const [ day, month, year ] = partsDDMMYYYY;\n\n if ( day && month && year && month >= 1 && month <= 12 && year > 1000 ) {\n const tempDate = new Date( year, month - 1, day, 12 );\n if ( isValid( tempDate ) && format( tempDate, 'dd-MM-yyyy' ) === dateString ) return tempDate;\n }\n }\n \n // Si no es un formato válido, intenta parsear como 'yyyy-MM-dd'\n const partsYYYYMMDD = dateString.split('-').map(Number);\n\n if ( partsYYYYMMDD.length === 3 ) {\n const [ year, month, day ] = partsYYYYMMDD;\n\n if ( year && month && day && month >= 1 && month <= 12 && year > 1000 ) {\n const tempDate = new Date( year, month - 1, day, 12 );\n if ( isValid( tempDate ) && format( tempDate, 'yyyy-MM-dd' ) === dateString ) return tempDate;\n }\n }\n\n return null;\n }\n\n /**\n * Analiza una cadena de fecha con formato 'yyyy-MM-dd'.\n * Este método auxiliar ayuda a procesar la propiedad minDate y maxDate.\n \n * @param dateString La cadena de fecha en formato 'yyyy-MM-dd'.\n\n * @returns Un objeto Date si es válido, de lo contrario, null.\n */\n private _parseDateString(dateString: string | undefined): Date | null {\n if ( !dateString ) return null;\n const parts: number[] = dateString.split( '-' ).map( Number );\n\n if ( parts.length === 3 && !isNaN( parts[0] ) && !isNaN( parts[1] ) && !isNaN( parts[2] ) ) {\n // Creamos la fecha al mediodía (12:00) para evitar cualquier cambio de día causado por la zona horaria.\n const date: Date = new Date( parts[0], parts[1] - 1, parts[2], 12 );\n return date;\n }\n\n return null;\n }\n\n /**\n * Retorna el rango de fechas válido del componente.\n * Analiza las propiedades 'minDate' y 'maxDate' para determinar el rango permitido.\n \n * @returns Un objeto con las fechas mínima y máxima, o null si no se define un rango.\n */\n private _getValidDateRange(): { minDate: Date | null, maxDate: Date | null } | null {\n const minDateObj: Date | null = this._parseDateString( this.minDate );\n const maxDateObj: Date | null = this._parseDateString( this.maxDate );\n\n if ( !minDateObj && !maxDateObj ) return { minDate: null, maxDate: null };\n if ( minDateObj && maxDateObj && isAfter( minDateObj, maxDateObj ) ) return null;\n\n return { minDate: minDateObj, maxDate: maxDateObj };\n }\n\n /**\n * Verifica si una fecha dada está dentro del rango permitido.\n \n * @param date La fecha a verificar.\n\n * @returns Verdadero si la fecha está dentro de los límites, de lo contrario, falso.\n */\n private _isWithinBounds( date: Date ): boolean {\n const range: { minDate: Date | null, maxDate: Date | null } | null = this._getValidDateRange();\n\n // Si el rango es nulo (es inválido) o si no hay límites definidos, la fecha del usuario es válida\n if ( !range ) return true;\n\n // Comprobamos si la fecha está antes del mínimo\n if ( range.minDate && isBefore( date, range.minDate ) ) return false;\n\n // Comprobamos si la fecha está después del máximo\n if ( range.maxDate && isAfter( date, range.maxDate ) ) return false;\n\n return true;\n }\n\n /**\n * Renderiza el componente DatePicker, incluyendo el input, botones y el overlay del calendario.\n */\n public render() {\n const inputWrapperClasses = classMap({\n 'input-wrapper': true,\n 'active': this.isOpen,\n 'error': this.error,\n 'disabled': this.disabled\n });\n\n const containerWidth: string = this.width || '100%';\n const containerStyle: string = `width: ${ containerWidth };`;\n \n const range: { minDate: Date | null, maxDate: Date | null } | null = this._getValidDateRange();\n\n return html`\n <div class=\"datepicker-container\" style=\"${ this.labelColor ? ` --label-color: ${ this.labelColor }` : '' } ${ containerStyle }\">\n ${ this.renderLabelContainer() }\n\n <div class=\"input-container\">\n <div class=\"${inputWrapperClasses}\" style=\"width: 100%\">\n <input\n type=\"text\"\n class=\"date-input\"\n .value=\"${this.inputValue ?? ''}\"\n placeholder=\"${this.placeholder}\"\n ?disabled=${this.disabled}\n @input=${this.handleInput}\n />\n\n ${this.isRenderClearButton && this.selectedDate && !this.disabled\n ? html`\n <button\n class=\"icon-button clear-button\"\n @click=${this.handleClearDate}\n >\n <randstad-icon name=\"close\"></randstad-icon>\n </button>\n `\n : nothing\n }\n\n <button\n class=\"icon-button calendar-button\"\n @click=${this.handleCalendarButtonClick}\n >\n <randstad-icon name=\"calendar\"></randstad-icon>\n </button>\n </div>\n\n ${this.isOpen\n ? html`\n <calendar-overlay\n .isMobile=${this.isMobile}\n .selectedDate=${this.selectedDate}\n .viewDate=${this.viewDate}\n .calendarWidth=${this.calendarWidth}\n .minDate=${range?.minDate}\n .maxDate=${range?.maxDate}\n @close=${() => (this.isOpen = false)}\n @view-date-change=${this.handleViewDateChange}\n @date-selected=${this.handleDateSelect}\n >\n </calendar-overlay>\n `\n : nothing\n }\n \n ${ this.renderError() }\n </div>\n\n ${ this.renderHelper() }\n </div>\n `;\n }\n}","import { addYears } from \"./addYears.js\";\n\n/**\n * The {@link subYears} function options.\n */\n\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the years subtracted\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * const result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\nexport function subYears(date, amount, options) {\n return addYears(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subYears;\n","export const FILE_TYPE_MAPPING: { [key: string]: string } = {\n 'application/pdf': 'PDF',\n 'application/msword': 'Word (.doc)',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'Word (.docx)',\n\n 'image/jpeg': 'JPEG',\n 'image/png': 'PNG',\n\n 'text/plain': 'Texto (.txt)',\n\n // Agregar más tipos si se necesitaran\n};","import { html, css, nothing } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { bodyM } from '../styles/fontStyles';\nimport { FILE_TYPE_MAPPING } from '../utils/file-format';\nimport { tooltipStyles } from \"../styles/tooltip\";\nimport { BaseControl } from '../helpers/BaseControl';\nimport { mixStyles } from '../styles/mix';\nimport { errorStyles } from '../styles/error';\nimport { progressBarUploadStyles } from '../styles/progress-bar-upload';\n\nimport '../components/Button';\n\n@customElement('upload-file')\nexport class UploadFile extends BaseControl {\n @property({ type: String }) width?: string;\n\n @property({ type: Array }) files: File[] = [];\n @property({ type: Number }) maxFiles = 1;\n\n @property({ type: Array }) acceptedFileTypes: string[] = []; \n @property({ type: Number }) maxFileSize = 5242880; // 5 MB por defecto\n\n @property({ type: String }) buttonText = 'Agregar archivo';\n\n @property({ type: Number }) simulatedDelay = 0;\n\n @state() private loading = false;\n @state() private progress = 0;\n \n @query('input[type=\"file\"]') private fileInput!: HTMLInputElement;\n\n static styles = css`\n ${ mixStyles }\n ${ errorStyles }\n ${ tooltipStyles }\n ${ progressBarUploadStyles }\n\n :host([width]) {\n width: var(--upload-file-width);\n }\n \n /* Contenedor principal para organizar los elementos */\n .file-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n \n input[type=\"file\"] {\n display: none;\n }\n \n .file-list-container {\n width: 100%;\n display: flex;\n justify-content: flex-end;\n }\n\n .file-list {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 8px;\n }\n \n .file-item {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--secondary-color-80, #404767);\n max-width: 100%;\n }\n \n .file-name {\n ${bodyM};\n text-align: right;\n color: var(--secondary-color-40);\n vertical-align: middle;\n leading-trim: NONE;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 250px;\n }\n\n .remove-file-button {\n --primary-color: var(--ui-negative, #E00F0F);\n }\n\n .progress-bar {\n width: 100%;\n }\n `;\n\n public updated(changedProperties: Map<string, any>) {\n super.updated(changedProperties);\n this.applyWidth();\n }\n \n private applyWidth() {\n if (this.width) this.style.setProperty('--upload-file-width', this.width);\n }\n\n /**\n * Convierte una lista de tipos MIME en un string de nombres de archivos legibles.\n * Por ejemplo, 'application/pdf' se convierte en 'PDF'.\n \n * @returns Un string con los nombres de archivo aceptados, separados por comas.\n */\n private getReadableFileTypes(): string {\n // Convertimos los tipos MIME a nombres legibles\n const readableTypes = this.acceptedFileTypes.map(type => FILE_TYPE_MAPPING[type] || type);\n\n // Si solo hay un tipo, lo retornamos directamente\n if (readableTypes.length <= 1) {\n return readableTypes.join('');\n }\n\n // Obtenemos el último elemento\n const lastType = readableTypes.pop();\n\n // Unimos el resto con comas y agregamos el último con ' y '\n return `${readableTypes.join(', ')} y ${lastType}`;\n }\n\n /**\n * Valida una lista de archivos contra el tamaño máximo y los tipos de archivo aceptados.\n \n * @param filesToValidate Array de objetos File a validar.\n\n * @returns true si todos los archivos son válidos, de lo contrario false.\n */\n private validateFiles(filesToValidate: File[]): boolean {\n const maxFileSizeInMB = this.maxFileSize / 1024 / 1024;\n \n for (const file of filesToValidate) {\n if (this.acceptedFileTypes.length > 0 && !this.acceptedFileTypes.includes(file.type)) {\n this.errorMessage = `formato de archivo no válido, se aceptan: ${this.getReadableFileTypes()}`;\n return false;\n }\n\n if (file.size > this.maxFileSize) {\n this.errorMessage = `el archivo es demasiado grande, el máximo es de ${maxFileSizeInMB}MB`;\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Maneja los archivos seleccionados por el usuario.\n * Realiza validaciones de cantidad y tipo, y actualiza la lista de archivos.\n \n * @param files La lista de archivos de un input de tipo file.\n */\n private async handleFiles(files: FileList | null) {\n this.error = false;\n this.errorMessage = null;\n\n if ( !files || this.disabled || this.loading ) return;\n \n // Aseguramos que el valor de maxFiles sea un número válido.\n const maxFiles = Number.isFinite(this.maxFiles) && this.maxFiles > 0 ? this.maxFiles : 1;\n const selected = Array.from(files);\n const remainingSlots = maxFiles - this.files.length;\n \n if ( remainingSlots <= 0 ) {\n this.error = true;\n this.errorMessage = `se ha alcanzado el número máximo de archivos (${maxFiles}).`;\n\n return;\n }\n\n const filesToUpload = selected.slice( 0, remainingSlots );\n\n if ( !this.validateFiles( filesToUpload ) ) {\n this.error = true;\n return;\n }\n\n const delay = this.simulatedDelay ?? 0;\n\n if ( delay <= 0 ) {\n this.files = [ ...this.files, ...filesToUpload ];\n this.dispatchEvent( new CustomEvent('files-changed', { detail: this.files }) );\n \n return;\n }\n\n this.loading = true;\n this.progress = 0;\n\n await this.updateComplete;\n\n const startTime = Date.now();\n const interval = setInterval(() => {\n const elapsedTime = Date.now() - startTime;\n const newProgress = Math.min( Math.round((elapsedTime / delay) * 100), 100 );\n\n this.progress = newProgress;\n\n if (this.progress >= 100) {\n clearInterval(interval);\n\n this.files = [ ...this.files, ...filesToUpload ];\n this.loading = false;\n this.progress = 0;\n\n this.dispatchEvent( new CustomEvent( 'files-changed', { detail: this.files } ) );\n }\n }, 10);\n\n if ( this.fileInput ) this.fileInput.value = ''; \n }\n \n /**\n * Gestiona el evento de cambio en el input de tipo file.\n\n * @param e El evento de cambio.\n */\n private onFileInputChange(e: Event) {\n const target = e.target as HTMLInputElement;\n this.handleFiles(target.files);\n\n if (this.fileInput) this.fileInput.value = '';\n }\n \n /**\n * Elimina un archivo de la lista de archivos seleccionados.\n\n * @param index El índice del archivo a eliminar.\n */\n private removeFile(index: number) {\n this.files = this.files.filter((_, i) => i !== index);\n this.dispatchEvent(new CustomEvent('files-changed', { detail: this.files }));\n\n if (this.files.length === 0) {\n this.error = false;\n this.errorMessage = null;\n }\n }\n \n public render() {\n const isMaxFilesReached = this.files.length >= this.maxFiles;\n const buttonDisabled = this.disabled || isMaxFilesReached;\n\n return html`\n <div class=\"file-container\" style=\"${this.labelColor ? `--label-color: ${this.labelColor};` : ''}\">\n ${ this.renderLabelContainer() }\n \n ${ this.loading\n ? html`\n <div class=\"progress-bar-container\">\n <div class=\"progress-bar\" role=\"progressbar\" aria-label=\"Subiendo archivo…\">\n <div class=\"progress-bar-fill\" style=\"width: ${this.progress}%;\"></div>\n </div>\n </div>\n `\n : html`\n <randstad-button \n .label=${this.buttonText}\n .variant=${'button-primary'} \n ?disabled=${buttonDisabled}\n @click=${() => this.fileInput?.click()}\n >\n </randstad-button>\n `\n }\n \n <input \n type=\"file\" \n accept=${this.acceptedFileTypes.join(',')}\n ?multiple=${this.maxFiles > 1}\n ?disabled=${buttonDisabled}\n @change=\"${this.onFileInputChange}\" \n />\n\n ${ this.renderError() }\n\n ${ this.renderHelper() }\n\n ${this.files.length > 0\n ? html`\n <div class=\"file-list-container\">\n <div class=\"file-list\">\n ${this.files.map((file, index) => html`\n <div class=\"file-item\">\n <span class=\"file-name\">${file.name}</span>\n\n <randstad-button \n class=\"remove-file-button\"\n .variant=${'button-icon'}\n .iconName=${'trash'}\n @click=${() => this.removeFile(index)} \n ?disabled=${this.disabled}\n >\n </randstad-button>\n </div>\n `)}\n </div>\n </div>\n `\n : nothing\n }\n </div>\n `;\n }\n}"],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__metadata","metadataKey","metadataValue","metadata","SuppressedError","t","e","o","addInitializer","customElements","define","globalThis","ShadowRoot","ShadyCSS","nativeShadow","Document","prototype","CSSStyleSheet","s","Symbol","WeakMap","n$2","constructor","this","_$cssResult$","Error","cssText","styleSheet","get","replaceSync","set","toString","S","adoptedStyleSheets","map","document","createElement","n","litNonce","setAttribute","textContent","appendChild","cssRules","is","h","getOwnPropertyNames","getOwnPropertySymbols","getPrototypeOf","a","trustedTypes","l","emptyScript","p","reactiveElementPolyfillSupport","u","toAttribute","Boolean","Array","JSON","stringify","fromAttribute","Number","parse","f","b","attribute","type","String","converter","reflect","useDefault","hasChanged","litPropertyMetadata","y","HTMLElement","_$Ei","push","observedAttributes","finalize","_$Eh","keys","createProperty","state","hasOwnProperty","create","wrapped","elementProperties","noAccessor","getPropertyDescriptor","call","requestUpdate","configurable","enumerable","getPropertyOptions","Map","finalized","properties","_$Eu","elementStyles","finalizeStyles","styles","isArray","Set","flat","reverse","unshift","toLowerCase","super","_$Ep","isUpdatePending","hasUpdated","_$Em","_$Ev","_$ES","Promise","enableUpdating","_$AL","_$E_","forEach","addController","_$EO","add","renderRoot","isConnected","hostConnected","removeController","delete","size","createRenderRoot","shadowRoot","attachShadow","shadowRootOptions","connectedCallback","disconnectedCallback","hostDisconnected","attributeChangedCallback","_$AK","_$ET","removeAttribute","_$Ej","hasAttribute","C","_$EP","has","_$Eq","reject","scheduleUpdate","performUpdate","shouldUpdate","willUpdate","hostUpdate","update","_$EM","_$AE","hostUpdated","firstUpdated","updated","updateComplete","getUpdateComplete","mode","ReactiveElement","reactiveElementVersions","kind","name","init","querySelector","BaseControl","LitElement","label","placeholder","labelColor","value","required","optional","disabled","error","errorMessage","helper","helperAlign","renderLabelContainer","html","renderLabel","renderHelp","nothing","help","helpLink","helpLinkTooltipMessage","renderError","renderHelper","helperInlineStyles","property","customElement","bodyXS","css","bodyS","bodyM","bodyL","titleXXS","titleXS","titleS","AccordionPanel","title","isOpen","isDesktop","window","innerWidth","handleResize","addEventListener","removeEventListener","toggle","renderIcon","render","AccordionList","RandstadButton","variant","loader","iconPosition","iconName","idevent","handleClick","event","form","closest","requestSubmit","reset","dispatchEvent","CustomEvent","detail","composed","bubbles","cancelable","classes","button","includes","dotColor","classMap","iconSrc","CarouselCard","img","description","buttonLabel","cardId","Checkbox","checked","toggleCheck","Event","tooltipStyles","mixStyles","errorStyles","RandstadForm","keydown","undefined","icon","typing","isPasswordVisible","cleanButton","togglePassword","input","currentTarget","parentElement","handleInput","handleInputCustom","newValue","maxLength","slice","handleClear","handleLinkClick","preventDefault","linkRoute","onlyNumeric","onlyText","inputElement","sanitizedValue","replace","handleKeyDown","submitEvent","showCleanButton","textareaInlineStyles","heightTextArea","maxHeightTextArea","formStyles","linkText","FormGroup","rows","fieldsInlineStyles","IconComponent","style","setProperty","changedProps","loadIcon","response","fetch","ok","svgText","text","parser","DOMParser","svgElement","parseFromString","querySelectorAll","el","innerHTML","console","RandstadNotice","message","open","CustomModal","showNotice","noticeType","noticeMessage","noticeIcon","showPrimaryButton","primaryButtonLabel","showSecondaryButton","secondaryButtonLabel","isFooterCustom","isPrimaryLoader","isPrimaryDisabled","modalWidth","scrollable","setScrollableMode","closeModal","getFooterClass","subtitle","CustomPopup","width","buttonText","confirmText","cancelText","stackedActions","_onBackgroundClick","path","composedPath","popupContainer","focus","closePopup","action","ProgressCircle","max","circumference","Math","PI","safeMax","offset","min","ATTACHABLE_CONTROLLER","FOR_ATTRIBUTE_OBSERVER","isServer","MutationObserver","records","record","AttachableController","htmlFor","host","getAttribute","control","getRootNode","currentControl","attach","detach","onControlChange","observe","attributeFilter","setCurrentControl","EVENTS","FocusRing","visible","inward","attachableController","bind","handleEvent","HANDLED_BY_FOCUS_RING","matches","prev","next","changed","MdFocusRing","EASING","State","FORCED_COLORS","matchMedia","Ripple","hovered","pressed","rippleSize","rippleScale","initialSize","INACTIVE","checkBoundsAfterContextMenu","handlePointerenter","shouldReactToEvent","handlePointerleave","endPressAnimation","handlePointerup","HOLDING","TOUCH_DELAY","WAITING_FOR_CLICK","startPressAnimation","rippleStartEvent","handlePointerdown","isTouch","inBounds","resolve","setTimeout","handlePointercancel","handleContextmenu","determineRippleSize","height","getBoundingClientRect","maxDim","softEdgeSize","floor","maxRadius","sqrt","getNormalizedPointerEventCoords","pointerEvent","scrollX","scrollY","left","top","documentX","documentY","pageX","pageY","x","getTranslationCoordinates","positionEvent","endPoint","startPoint","PointerEvent","mdRoot","growAnimation","cancel","translateStart","translateEnd","animate","transform","pseudoElement","duration","easing","fill","animation","pressAnimationPlayState","Infinity","currentTime","to","isPrimary","pointerId","isPrimaryButton","buttons","bottom","right","pointerType","query","MdRipple","isActivationClick","squelched","isSquelchingEvents","stopImmediatePropagation","async","squelchEventsForMicrotask","squelchEvent","internals","privateInternals","createValidator","getValidityAnchor","privateValidator","privateSyncValidity","privateCustomValidationMessage","isFocusable","privateIsFocusable","externalTabIndex","isUpdatingTabIndex","updateTabIndex","getFormValue","getFormState","Validator","getCurrentState","currentValidity","validity","validationMessage","getValidity","prevState","equals","computeValidity","copy","badInput","customError","patternMismatch","rangeOverflow","rangeUnderflow","stepMismatch","tooLong","tooShort","typeMismatch","valueMissing","RadioValidator","states","radioElement","isRequired","isChecked","prevGroup","nextGroup","SingleSelectionController","controls","root","from","focused","handleFocusIn","updateTabIndices","handleFocusOut","isDown","isUp","isLeft","isRight","siblings","forwards","getComputedStyle","direction","hostIndex","indexOf","nextIndex","nextSibling","sibling","tabIndex","blur","uncheckSiblings","handleCheckedChange","checkedSibling","find","focusable","_a","CHECKED","maskId","radioBaseClass","base","ConstraintValidationElement","willValidate","checkValidity","reportValidity","setCustomValidity","oldValue","options","nonCustomValidationMessage","setValidity","mixinConstraintValidation","FormAssociatedElement","labels","toggleAttribute","old","setFormValue","formDisabledCallback","formAssociated","mixinFormAssociated","_b","_c","FocusableElement","internalTabIndex","computedTabIndex","mixinFocusable","attachInternals","Radio","wasChecked","selectionController","role","handleKeydown","ariaChecked","defaultPrevented","InputEvent","click","formResetCallback","formStateRestoreCallback","container","MdRadio","CustomRadio","radioClasses","join","FilterableSelect","defaultValue","filterable","isMobile","highlightedIndex","_isCleared","filteredOptions","filterValue","mobileFilterValue","debounceTimeout","updateResponsiveModeBound","updateResponsiveMode","changedProperties","targetValue","match","opt","handleClickOutside","handleInputClick","rawValue","filter","option","clearTimeout","handleMobileInput","handleSelect","handleIconClick","Node","contains","renderSelectedIcon","selectedOption","renderOptionIcon","index","isDisabled","stopPropagation","globalStyles","RandstadSnackbar","position","updateResponsiveStyles","classList","ariaRole","CustomStepper","totalSteps","currentStep","_","TabsBar","tabs","selected","internalSelected","showPrev","showNext","SCROLL_OFFSET","handleScroll","wrapper","scrollLeft","scrollWidth","clientWidth","selectTab","selectedTab","tab","scrollTabsLeft","tabLeft","offsetLeft","scrollTarget","scrollTo","behavior","scrollTabsRight","wrapperLeft","progressBarUploadStyles","UploadImage","files","simulatedDelay","loading","progress","isDragging","handleFiles","currentFiles","delay","startTime","Date","now","interval","setInterval","elapsedTime","newProgress","round","clearInterval","onFileInputChange","onDrop","dataTransfer","onDragOver","onDragLeave","millisecondsInWeek","constructFromSymbol","for","constructFrom","date","toDate","argument","context","addMonths","amount","_date","in","isNaN","NaN","dayOfMonth","getDate","endOfDesiredMonth","getTime","setMonth","getMonth","setFullYear","getFullYear","defaultOptions","getDefaultOptions","startOfWeek","weekStartsOn","locale","day","getDay","diff","setDate","setHours","startOfISOWeek","getISOWeekYear","year","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","getTimezoneOffsetInMilliseconds","utcDate","UTC","getHours","getMinutes","getSeconds","getMilliseconds","setUTCFullYear","normalizeDates","dates","normalize","startOfDay","addYears","isValid","startOfMonth","formatDistanceLocale","lessThanXSeconds","one","other","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","buildFormatLongFn","args","defaultWidth","formats","formatLong","full","long","medium","short","time","dateTime","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","buildLocalizeFn","valuesArray","formattingValues","defaultFormattingWidth","values","argumentCallback","buildMatchFn","string","matchPattern","matchPatterns","defaultMatchWidth","matchResult","matchedString","parsePatterns","defaultParseWidth","array","predicate","findIndex","pattern","test","object","findKey","valueCallback","rest","enUS","code","formatDistance","token","count","result","tokenValue","addSuffix","comparison","formatRelative","_baseDate","_options","localize","ordinalNumber","dirtyNumber","number","rem100","era","narrow","abbreviated","wide","quarter","month","dayPeriod","am","pm","midnight","noon","morning","afternoon","evening","night","parsePattern","parseInt","parseResult","any","firstWeekContainsDate","getDayOfYear","laterDate","earlierDate","laterDate_","earlierDate_","laterStartOfDay","earlierStartOfDay","laterTimestamp","earlierTimestamp","differenceInCalendarDays","date_","startOfYear","getISOWeek","fourthOfJanuary","startOfISOWeekYear","getWeekYear","firstWeekOfNextYear","firstWeekOfThisYear","getWeek","firstWeek","startOfWeekYear","addLeadingZeros","targetLength","abs","padStart","lightFormatters","signedYear","M","dayPeriodEnumValue","toUpperCase","H","m","numberOfDigits","milliseconds","trunc","pow","dayPeriodEnum","formatters","G","unit","Y","signedWeekYear","weekYear","R","Q","ceil","q","L","w","week","I","isoWeek","D","dayOfYear","E","dayOfWeek","localDayOfWeek","isoDayOfWeek","hours","B","K","k","X","_localize","timezoneOffset","getTimezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","O","formatTimezoneShort","z","T","delimiter","sign","absOffset","minutes","dateLongFormatter","timeLongFormatter","longFormatters","P","datePattern","timePattern","dateTimeFormat","dayOfYearTokenRE","weekYearTokenRE","throwTokens","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","format","formatStr","defaultLocale","originalDate","RangeError","parts","substring","firstCharacter","longFormatter","isToken","cleanEscapedString","preprocessor","formatterOptions","part","_message","subject","warn","warnOrThrowProtectedError","formatter","matched","getDaysInMonth","monthIndex","lastDayOfMonth","isAfter","dateToCompare","isBefore","isSameMonth","isSameYear","isToday","dateLeft_","dateRight_","isSameDay","constructNow","CalendarOverlay","selectedDate","viewDate","calendarWidth","minDate","maxDate","currentView","handleOutsideClick","handleHeaderClick","_updateView","newDate","newView","handleNavClick","dateFns.addMonths","dateFns.addYears","handleYearSelect","dateFns.setYear","handleMonthSelect","midMonth","daysInMonth","dateFns.setMonth","handleDayClick","getFullMonthNames","getShortMonthNames","getShortWeekdays","renderHeader","monthNames","headerText","disablePrev","disableNext","startYear","endYear","viewYear","dateFns.isSameMonth","dateFns.startOfMonth","dateFns.isBefore","dateFns.isAfter","renderYearsView","years","selectedYear","currentYear","minYear","maxYear","renderMonthsView","selectedMonth","currentMonth","isCurrentMonth","isSelected","dateFns.isSameYear","isSecondarySelected","renderDayView","dateFns.getDaysInMonth","leadingDays","days","dateFns.setDate","weekdays","normalizedDay","dateFns.startOfDay","normalizedSelectedDate","isTodayDay","dateFns.isToday","dateFns.getDate","dateFns.format","content","mainContent","DatePickerComponent","isRenderClearButton","eighteenOrOlder","inputValue","setMessageErrorFormatInvalid","setInitialWidth","_syncValue","inputContainer","_parseAndValidateDate","handleCalendarButtonClick","handleClearDate","closeOverlay","handleDateSelect","_validateDate","formattedDate","handleViewDateChange","valueSet","parsedDate","_parseDate","eighteenYearsAgo","subYears","_isWithinBounds","range","_getValidDateRange","fromInput","dateString","partsDDMMYYYY","split","tempDate","partsYYYYMMDD","_parseDateString","minDateObj","maxDateObj","inputWrapperClasses","active","containerStyle","HTMLDivElement","FILE_TYPE_MAPPING","UploadFile","maxFiles","acceptedFileTypes","maxFileSize","applyWidth","getReadableFileTypes","readableTypes","lastType","pop","validateFiles","filesToValidate","maxFileSizeInMB","file","isFinite","remainingSlots","filesToUpload","fileInput","removeFile","isMaxFilesReached","buttonDisabled","HTMLInputElement"],"mappings":"sIAsDO,SAASA,EAAWC,EAAYC,EAAQC,EAAKC,GAChD,IAA2HC,EAAvHC,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIJ,EAAkB,OAATE,EAAgBA,EAAOM,OAAOC,yBAAyBT,EAAQC,GAAOC,EACrH,GAAuB,iBAAZQ,SAAoD,mBAArBA,QAAQC,SAAyBJ,EAAIG,QAAQC,SAASZ,EAAYC,EAAQC,EAAKC,QACpH,IAAK,IAAIU,EAAIb,EAAWO,OAAS,EAAGM,GAAK,EAAGA,KAAST,EAAIJ,EAAWa,MAAIL,GAAKH,EAAI,EAAID,EAAEI,GAAKH,EAAI,EAAID,EAAEH,EAAQC,EAAKM,GAAKJ,EAAEH,EAAQC,KAASM,GAChJ,OAAOH,EAAI,GAAKG,GAAKC,OAAOK,eAAeb,EAAQC,EAAKM,GAAIA,CAChE,CAmDO,SAASO,EAAWC,EAAaC,GACpC,GAAuB,iBAAZN,SAAoD,mBAArBA,QAAQO,SAAyB,OAAOP,QAAQO,SAASF,EAAaC,EACpH,CAwNkD,mBAApBE,iBAAiCA;;;;;;ACnU/D,MAAMC,EAAEA,GAAG,CAACC,EAAEC,cAAcA,EAAEA,EAAEC,gBAAc,KAAOC,eAAeC,OAAOL,EAAEC,EAAG,IAAGG,eAAeC,OAAOL,EAAEC,ICArGD,EAAEM,WAAWL,EAAED,EAAEO,kBAAa,IAASP,EAAEQ,UAAUR,EAAEQ,SAASC,eAAe,uBAAuBC,SAASC,WAAW,YAAYC,cAAcD,UAAUE,EAAEC,SAASZ,EAAE,IAAIa;;;;;GAAO,IAAAC,EAAC,MAAQ,WAAAC,CAAYjB,EAAEC,EAAEC,GAAG,GAAGgB,KAAKC,cAAa,EAAGjB,IAAIW,EAAE,MAAMO,MAAM,qEAAqEF,KAAKG,QAAQrB,EAAEkB,KAAKlB,EAAEC,CAAC,CAAC,cAAIqB,GAAa,IAAItB,EAAEkB,KAAKhB,EAAE,MAAMW,EAAEK,KAAKlB,EAAE,GAAGC,QAAG,IAASD,EAAE,CAAC,MAAMC,OAAE,IAASY,GAAG,IAAIA,EAAE1B,OAAOc,IAAID,EAAEE,EAAEqB,IAAIV,SAAI,IAASb,KAAKkB,KAAKhB,EAAEF,EAAE,IAAIY,eAAeY,YAAYN,KAAKG,SAASpB,GAAGC,EAAEuB,IAAIZ,EAAEb,GAAG,CAAC,OAAOA,CAAC,CAAC,QAAA0B,GAAW,OAAOR,KAAKG,OAAO,GAAO,MAAyYM,EAAE,CAACd,EAAEX,KAAK,GAAGD,EAAEY,EAAEe,mBAAmB1B,EAAE2B,KAAK7B,GAAGA,aAAaY,cAAcZ,EAAEA,EAAEsB,kBAAkB,IAAI,MAAMrB,KAAKC,EAAE,CAAC,MAAMA,EAAE4B,SAASC,cAAc,SAASC,EAAEhC,EAAEiC,cAAS,IAASD,GAAG9B,EAAEgC,aAAa,QAAQF,GAAG9B,EAAEiC,YAAYlC,EAAEoB,QAAQR,EAAEuB,YAAYlC,EAAE,GAAGjB,EAAEgB,EAAED,GAAGA,EAAEA,GAAGA,aAAaY,cAAc,CAACZ,IAAI,IAAIC,EAAE,GAAG,IAAI,MAAMY,KAAKb,EAAEqC,SAASpC,GAAGY,EAAEQ,QAAQ,MAAztBrB,IAAG,IAAIgC,EAAE,iBAAiBhC,EAAEA,EAAEA,EAAE,QAAG,EAAOa,GAAsrBzB,CAAEa,EAAG,EAAjE,CAAmED,GAAGA,GCAlzCsC,GAAG7C,EAAEC,eAAeO,EAAEX,yBAAyBiD,EAAEC,oBAAoBpD,EAAEqD,sBAAsBvC,EAAEwC,eAAeV,GAAG3C,OAAOsD,EAAErC,WAAWrB,EAAE0D,EAAEC,aAAaC,EAAE5D,EAAEA,EAAE6D,YAAY,GAAGC,EAAEJ,EAAEK,+BAA+BhE,EAAE,CAACgB,EAAEa,IAAIb,EAAEiD,EAAE,CAAC,WAAAC,CAAYlD,EAAEa,GAAG,OAAOA,GAAG,KAAKsC,QAAQnD,EAAEA,EAAE6C,EAAE,KAAK,MAAM,KAAKxD,OAAO,KAAK+D,MAAMpD,EAAE,MAAMA,EAAEA,EAAEqD,KAAKC,UAAUtD,GAAG,OAAOA,CAAC,EAAE,aAAAuD,CAAcvD,EAAEa,GAAG,IAAIpB,EAAEO,EAAE,OAAOa,GAAG,KAAKsC,QAAQ1D,EAAE,OAAOO,EAAE,MAAM,KAAKwD,OAAO/D,EAAE,OAAOO,EAAE,KAAKwD,OAAOxD,GAAG,MAAM,KAAKX,OAAO,KAAK+D,MAAM,IAAI3D,EAAE4D,KAAKI,MAAMzD,EAAE,CAAC,MAAMA,GAAGP,EAAE,IAAI,EAAE,OAAOA,CAAC,GAAGiE,EAAE,CAAC1D,EAAEa,KAAKpB,EAAEO,EAAEa,GAAG8C,EAAE,CAACC,WAAU,EAAGC,KAAKC,OAAOC,UAAUd,EAAEe,SAAQ,EAAGC,YAAW,EAAGC,WAAWR;;;;;GAAG5C,OAAOhB,WAAWgB,OAAO,YAAY6B,EAAEwB,sBAAsB,IAAIpD,QAAQ,MAAMqD,UAAUC,YAAY,qBAAOlE,CAAeH,GAAGkB,KAAKoD,QAAQpD,KAAK2B,IAAI,IAAI0B,KAAKvE,EAAE,CAAC,6BAAWwE,GAAqB,OAAOtD,KAAKuD,WAAWvD,KAAKwD,MAAM,IAAIxD,KAAKwD,KAAKC,OAAO,CAAC,qBAAOC,CAAe5E,EAAEa,EAAE8C,GAAG,GAAG9C,EAAEgE,QAAQhE,EAAE+C,WAAU,GAAI1C,KAAKoD,OAAOpD,KAAKP,UAAUmE,eAAe9E,MAAMa,EAAExB,OAAO0F,OAAOlE,IAAImE,SAAQ,GAAI9D,KAAK+D,kBAAkBxD,IAAIzB,EAAEa,IAAIA,EAAEqE,WAAW,CAAC,MAAMzF,EAAEqB,SAASyB,EAAErB,KAAKiE,sBAAsBnF,EAAEP,EAAEoB,QAAG,IAAS0B,GAAGtC,EAAEiB,KAAKP,UAAUX,EAAEuC,EAAE,CAAC,CAAC,4BAAO4C,CAAsBnF,EAAEa,EAAEpB,GAAG,MAAM8B,IAAItB,EAAEwB,IAAIrC,GAAGmD,EAAErB,KAAKP,UAAUX,IAAI,CAAC,GAAAuB,GAAM,OAAOL,KAAKL,EAAE,EAAE,GAAAY,CAAIzB,GAAGkB,KAAKL,GAAGb,CAAC,GAAG,MAAM,CAACuB,IAAItB,EAAE,GAAAwB,CAAIZ,GAAG,MAAM0B,EAAEtC,GAAGmF,KAAKlE,MAAM9B,GAAGgG,KAAKlE,KAAKL,GAAGK,KAAKmE,cAAcrF,EAAEuC,EAAE9C,EAAE,EAAE6F,cAAa,EAAGC,YAAW,EAAG,CAAC,yBAAOC,CAAmBxF,GAAG,OAAOkB,KAAK+D,kBAAkB1D,IAAIvB,IAAI2D,CAAC,CAAC,WAAOW,GAAO,GAAGpD,KAAK4D,eAAe9F,EAAE,sBAAsB,OAAO,MAAMgB,EAAEgC,EAAEd,MAAMlB,EAAEyE,gBAAW,IAASzE,EAAE6C,IAAI3B,KAAK2B,EAAE,IAAI7C,EAAE6C,IAAI3B,KAAK+D,kBAAkB,IAAIQ,IAAIzF,EAAEiF,kBAAkB,CAAC,eAAOR,GAAW,GAAGvD,KAAK4D,eAAe9F,EAAE,cAAc,OAAO,GAAGkC,KAAKwE,WAAU,EAAGxE,KAAKoD,OAAOpD,KAAK4D,eAAe9F,EAAE,eAAe,CAAC,MAAMgB,EAAEkB,KAAKyE,WAAW9E,EAAE,IAAIzB,EAAEY,MAAME,EAAEF,IAAI,IAAI,MAAMP,KAAKoB,EAAEK,KAAK0D,eAAenF,EAAEO,EAAEP,GAAG,CAAC,MAAMO,EAAEkB,KAAKJ,OAAOhB,UAAU,GAAG,OAAOE,EAAE,CAAC,MAAMa,EAAEsD,oBAAoB5C,IAAIvB,GAAG,QAAG,IAASa,EAAE,IAAI,MAAMb,EAAEP,KAAKoB,EAAEK,KAAK+D,kBAAkBxD,IAAIzB,EAAEP,EAAE,CAACyB,KAAKwD,KAAK,IAAIe,IAAI,IAAI,MAAMzF,EAAEa,KAAKK,KAAK+D,kBAAkB,CAAC,MAAMxF,EAAEyB,KAAK0E,KAAK5F,EAAEa,QAAG,IAASpB,GAAGyB,KAAKwD,KAAKjD,IAAIhC,EAAEO,EAAE,CAACkB,KAAK2E,cAAc3E,KAAK4E,eAAe5E,KAAK6E,OAAO,CAAC,qBAAOD,CAAejF,GAAG,MAAMpB,EAAE,GAAG,GAAG2D,MAAM4C,QAAQnF,GAAG,CAAC,MAAMZ,EAAE,IAAIgG,IAAIpF,EAAEqF,KAAK,KAAKC,WAAW,IAAI,MAAMtF,KAAKZ,EAAER,EAAE2G,QAAQpG,EAAEa,GAAG,WAAM,IAASA,GAAGpB,EAAE8E,KAAKvE,EAAEa,IAAI,OAAOpB,CAAC,CAAC,WAAOmG,CAAK5F,EAAEa,GAAG,MAAMpB,EAAEoB,EAAE+C,UAAU,OAAM,IAAKnE,OAAE,EAAO,iBAAiBA,EAAEA,EAAE,iBAAiBO,EAAEA,EAAEqG,mBAAc,CAAM,CAAC,WAAApF,GAAcqF,QAAQpF,KAAKqF,UAAK,EAAOrF,KAAKsF,iBAAgB,EAAGtF,KAAKuF,YAAW,EAAGvF,KAAKwF,KAAK,KAAKxF,KAAKyF,MAAM,CAAC,IAAAA,GAAOzF,KAAK0F,KAAK,IAAIC,SAAS7G,GAAGkB,KAAK4F,eAAe9G,IAAIkB,KAAK6F,KAAK,IAAItB,IAAIvE,KAAK8F,OAAO9F,KAAKmE,gBAAgBnE,KAAKD,YAAY4B,GAAGoE,SAASjH,GAAGA,EAAEkB,OAAO,CAAC,aAAAgG,CAAclH,IAAIkB,KAAKiG,OAAO,IAAIlB,KAAKmB,IAAIpH,QAAG,IAASkB,KAAKmG,YAAYnG,KAAKoG,aAAatH,EAAEuH,iBAAiB,CAAC,gBAAAC,CAAiBxH,GAAGkB,KAAKiG,MAAMM,OAAOzH,EAAE,CAAC,IAAAgH,GAAO,MAAMhH,EAAE,IAAIyF,IAAI5E,EAAEK,KAAKD,YAAYgE,kBAAkB,IAAI,MAAMxF,KAAKoB,EAAE8D,OAAOzD,KAAK4D,eAAerF,KAAKO,EAAEyB,IAAIhC,EAAEyB,KAAKzB,WAAWyB,KAAKzB,IAAIO,EAAE0H,KAAK,IAAIxG,KAAKqF,KAAKvG,EAAE,CAAC,gBAAA2H,GAAmB,MAAM3H,EAAEkB,KAAK0G,YAAY1G,KAAK2G,aAAa3G,KAAKD,YAAY6G,mBAAmB,OAAOjH,EAAEb,EAAEkB,KAAKD,YAAY4E,eAAe7F,CAAC,CAAC,iBAAA+H,GAAoB7G,KAAKmG,aAAanG,KAAKyG,mBAAmBzG,KAAK4F,gBAAe,GAAI5F,KAAKiG,MAAMF,SAASjH,GAAGA,EAAEuH,mBAAmB,CAAC,cAAAT,CAAe9G,GAAG,CAAC,oBAAAgI,GAAuB9G,KAAKiG,MAAMF,SAASjH,GAAGA,EAAEiI,sBAAsB,CAAC,wBAAAC,CAAyBlI,EAAEa,EAAEpB,GAAGyB,KAAKiH,KAAKnI,EAAEP,EAAE,CAAC,IAAA2I,CAAKpI,EAAEa,GAAG,MAAMpB,EAAEyB,KAAKD,YAAYgE,kBAAkB1D,IAAIvB,GAAGC,EAAEiB,KAAKD,YAAY2E,KAAK5F,EAAEP,GAAG,QAAG,IAASQ,IAAG,IAAKR,EAAEuE,QAAQ,CAAC,MAAMzB,QAAG,IAAS9C,EAAEsE,WAAWb,YAAYzD,EAAEsE,UAAUd,GAAGC,YAAYrC,EAAEpB,EAAEoE,MAAM3C,KAAKwF,KAAK1G,EAAE,MAAMuC,EAAErB,KAAKmH,gBAAgBpI,GAAGiB,KAAKgB,aAAajC,EAAEsC,GAAGrB,KAAKwF,KAAK,IAAI,CAAC,CAAC,IAAAyB,CAAKnI,EAAEa,GAAG,MAAMpB,EAAEyB,KAAKD,YAAYhB,EAAER,EAAEiF,KAAKnD,IAAIvB,GAAG,QAAG,IAASC,GAAGiB,KAAKwF,OAAOzG,EAAE,CAAC,MAAMD,EAAEP,EAAE+F,mBAAmBvF,GAAGsC,EAAE,mBAAmBvC,EAAE+D,UAAU,CAACR,cAAcvD,EAAE+D,gBAAW,IAAS/D,EAAE+D,WAAWR,cAAcvD,EAAE+D,UAAUd,EAAE/B,KAAKwF,KAAKzG,EAAEiB,KAAKjB,GAAGsC,EAAEgB,cAAc1C,EAAEb,EAAE6D,OAAO3C,KAAKoH,MAAM/G,IAAItB,IAAI,KAAKiB,KAAKwF,KAAK,IAAI,CAAC,CAAC,aAAArB,CAAcrF,EAAEa,EAAEpB,GAAG,QAAG,IAASO,EAAE,CAAC,MAAMC,EAAEiB,KAAKD,YAAYsB,EAAErB,KAAKlB,GAAG,GAAGP,IAAIQ,EAAEuF,mBAAmBxF,MAAMP,EAAEyE,YAAYR,GAAGnB,EAAE1B,IAAIpB,EAAEwE,YAAYxE,EAAEuE,SAASzB,IAAIrB,KAAKoH,MAAM/G,IAAIvB,KAAKkB,KAAKqH,aAAatI,EAAE2F,KAAK5F,EAAEP,KAAK,OAAOyB,KAAKsH,EAAExI,EAAEa,EAAEpB,EAAE,EAAC,IAAKyB,KAAKsF,kBAAkBtF,KAAK0F,KAAK1F,KAAKuH,OAAO,CAAC,CAAAD,CAAExI,EAAEa,GAAGoD,WAAWxE,EAAEuE,QAAQ/D,EAAE+E,QAAQzC,GAAGnD,GAAGK,KAAKyB,KAAKoH,OAAO,IAAI7C,KAAKiD,IAAI1I,KAAKkB,KAAKoH,KAAK7G,IAAIzB,EAAEZ,GAAGyB,GAAGK,KAAKlB,KAAI,IAAKuC,QAAG,IAASnD,KAAK8B,KAAK6F,KAAK2B,IAAI1I,KAAKkB,KAAKuF,YAAYhH,IAAIoB,OAAE,GAAQK,KAAK6F,KAAKtF,IAAIzB,EAAEa,KAAI,IAAKZ,GAAGiB,KAAKwF,OAAO1G,IAAIkB,KAAKyH,OAAO,IAAI1C,KAAKmB,IAAIpH,GAAG,CAAC,UAAMyI,GAAOvH,KAAKsF,iBAAgB,EAAG,UAAUtF,KAAK0F,IAAI,CAAC,MAAM5G,GAAG6G,QAAQ+B,OAAO5I,EAAE,CAAC,MAAMA,EAAEkB,KAAK2H,iBAAiB,OAAO,MAAM7I,SAASA,GAAGkB,KAAKsF,eAAe,CAAC,cAAAqC,GAAiB,OAAO3H,KAAK4H,eAAe,CAAC,aAAAA,GAAgB,IAAI5H,KAAKsF,gBAAgB,OAAO,IAAItF,KAAKuF,WAAW,CAAC,GAAGvF,KAAKmG,aAAanG,KAAKyG,mBAAmBzG,KAAKqF,KAAK,CAAC,IAAI,MAAMvG,EAAEa,KAAKK,KAAKqF,KAAKrF,KAAKlB,GAAGa,EAAEK,KAAKqF,UAAK,CAAM,CAAC,MAAMvG,EAAEkB,KAAKD,YAAYgE,kBAAkB,GAAGjF,EAAE0H,KAAK,EAAE,IAAI,MAAM7G,EAAEpB,KAAKO,EAAE,CAAC,MAAMgF,QAAQhF,GAAGP,EAAEQ,EAAEiB,KAAKL,IAAG,IAAKb,GAAGkB,KAAK6F,KAAK2B,IAAI7H,SAAI,IAASZ,GAAGiB,KAAKsH,EAAE3H,OAAE,EAAOpB,EAAEQ,EAAE,CAAC,CAAC,IAAID,GAAE,EAAG,MAAMa,EAAEK,KAAK6F,KAAK,IAAI/G,EAAEkB,KAAK6H,aAAalI,GAAGb,GAAGkB,KAAK8H,WAAWnI,GAAGK,KAAKiG,MAAMF,SAASjH,GAAGA,EAAEiJ,iBAAiB/H,KAAKgI,OAAOrI,IAAIK,KAAKiI,MAAM,CAAC,MAAMtI,GAAG,MAAMb,GAAE,EAAGkB,KAAKiI,OAAOtI,CAAC,CAACb,GAAGkB,KAAKkI,KAAKvI,EAAE,CAAC,UAAAmI,CAAWhJ,GAAG,CAAC,IAAAoJ,CAAKpJ,GAAGkB,KAAKiG,MAAMF,SAASjH,GAAGA,EAAEqJ,kBAAkBnI,KAAKuF,aAAavF,KAAKuF,YAAW,EAAGvF,KAAKoI,aAAatJ,IAAIkB,KAAKqI,QAAQvJ,EAAE,CAAC,IAAAmJ,GAAOjI,KAAK6F,KAAK,IAAItB,IAAIvE,KAAKsF,iBAAgB,CAAE,CAAC,kBAAIgD,GAAiB,OAAOtI,KAAKuI,mBAAmB,CAAC,iBAAAA,GAAoB,OAAOvI,KAAK0F,IAAI,CAAC,YAAAmC,CAAa/I,GAAG,OAAM,CAAE,CAAC,MAAAkJ,CAAOlJ,GAAGkB,KAAKyH,OAAOzH,KAAKyH,KAAK1B,SAASjH,GAAGkB,KAAKkH,KAAKpI,EAAEkB,KAAKlB,MAAMkB,KAAKiI,MAAM,CAAC,OAAAI,CAAQvJ,GAAG,CAAC,YAAAsJ,CAAatJ,GAAG,EAAEoE,EAAEyB,cAAc,GAAGzB,EAAE0D,kBAAkB,CAAC4B,KAAK,QAAQtF,EAAEpF,EAAE,sBAAsB,IAAIyG,IAAIrB,EAAEpF,EAAE,cAAc,IAAIyG,IAAI1C,IAAI,CAAC4G,gBAAgBvF,KAAKzB,EAAEiH,0BAA0B,IAAIrF,KAAK;;;;;;ACA5wL,MAAMrE,EAAE,CAAC0D,WAAU,EAAGC,KAAKC,OAAOC,UAAU/D,EAAEgE,SAAQ,EAAGE,WAAWjE,GAAGb,EAAE,CAACY,EAAEE,EAAED,EAAEb,KAAK,MAAMyK,KAAK7H,EAAElC,SAASL,GAAGL,EAAE,IAAIyB,EAAEP,WAAW6D,oBAAoB5C,IAAI9B,GAAG,QAAG,IAASoB,GAAGP,WAAW6D,oBAAoB1C,IAAIhC,EAAEoB,EAAE,IAAI4E,KAAK,WAAWzD,KAAKhC,EAAEX,OAAO0F,OAAO/E,IAAIgF,SAAQ,GAAInE,EAAEY,IAAIrC,EAAE0K,KAAK9J,GAAG,aAAagC,EAAE,CAAC,MAAM8H,KAAK5J,GAAGd,EAAE,MAAM,CAAC,GAAAqC,CAAIrC,GAAG,MAAM4C,EAAE/B,EAAEsB,IAAI6D,KAAKlE,MAAMjB,EAAEwB,IAAI2D,KAAKlE,KAAK9B,GAAG8B,KAAKmE,cAAcnF,EAAE8B,EAAEhC,EAAE,EAAE,IAAA+J,CAAK9J,GAAG,YAAO,IAASA,GAAGiB,KAAKsH,EAAEtI,OAAE,EAAOF,EAAEC,GAAGA,CAAC,EAAE,CAAC,GAAG,WAAW+B,EAAE,CAAC,MAAM8H,KAAK5J,GAAGd,EAAE,OAAO,SAASA,GAAG,MAAM4C,EAAEd,KAAKhB,GAAGD,EAAEmF,KAAKlE,KAAK9B,GAAG8B,KAAKmE,cAAcnF,EAAE8B,EAAEhC,EAAE,CAAC,CAAC,MAAMoB,MAAM,mCAAmCY,IAAI,SAASA,EAAEhC,GAAG,MAAM,CAACC,EAAEC,IAAI,iBAAiBA,EAAEd,EAAEY,EAAEC,EAAEC,GAAG,EAAEF,EAAEC,EAAEC,KAAK,MAAMd,EAAEa,EAAE6E,eAAe5E,GAAG,OAAOD,EAAEgB,YAAY2D,eAAe1E,EAAEF,GAAGZ,EAAEC,OAAOC,yBAAyBW,EAAEC,QAAG,CAAO,EAA9H,CAAgIF,EAAEC,EAAEC,EAAE;;;;;GCAlyB,SAASd,EAAEA,GAAG,OAAOY,EAAE,IAAIZ,EAAEyF,OAAM,EAAGjB,WAAU,GAAI;;;;;;;;;;;ACApD,SAAS3D,EAAEA,EAAEb,GAAG,MAAM,CAAC4C,EAAEnB,EAAEpB,ICAtB,EAACQ,EAAED,EAAEf,KAAKA,EAAEqG,cAAa,EAAGrG,EAAEsG,YAAW,EAAGhG,QAAQC,UAAU,iBAAiBQ,GAAGX,OAAOK,eAAeO,EAAED,EAAEf,GAAGA,GDAsNe,CAAEgC,EAAEnB,EAAE,CAAC,GAAAU,GAAM,MAA/SvB,IAAGA,EAAEqH,YAAY2C,cAAc/J,IAAI,KAAmRC,CAAEgB,KAAK,GAAI,CEDrW,IAAM+I,EAAN,cAA0BC,EAA1B,WAAAjJ,uBACyBC,KAAAiJ,MAAQ,GACRjJ,KAAAkJ,YAAc,GACdlJ,KAAAmJ,WAAa,GAE7BnJ,KAAAoJ,MAAa,GAEIpJ,KAAAqJ,UAAW,EACXrJ,KAAAsJ,UAAW,EACXtJ,KAAAuJ,UAAW,EAEIvJ,KAAAwJ,OAAQ,EACxBxJ,KAAAyJ,aAA8B,KAE9BzJ,KAAA0J,OAAwB,KACxB1J,KAAA2J,YAAuD,MA2FvF,CArFW,oBAAAC,GACH,OAAOC,CAAK;cACL7J,KAAKiJ,MACJY,CAAI;;0BAEO7J,KAAK8J;;0BAEL9J,KAAK+J;;kBAEZ;SAGhB,CAEO,WAAAD,GACH,OAAOD,CAAK;;kBAED7J,KAAKiJ;kBACLjJ,KAAKqJ,SACFQ,CAAI;yDAEJ7J,KAAKsJ,SACDO,CAAI,2CACJG;;SAItB,CAEO,UAAAD,GACH,OAAOF,CAAI;cACJ7J,KAAKiK,KACFJ,CAAI;;;;+CAI0B7J,KAAKiK;;kBAGnCjK,KAAKkK,SACDL,CAAI;2DACkC7J,KAAKkK;;;8BAGlClK,KAAKmK,uBACFN,CAAI,wBAAyB7J,KAAKmK,+BAClCH;;sBAIZA;SAGlB,CAEO,WAAAI,GACH,OAAOP,CAAI;cACH7J,KAAKwJ,MACDK,CAAK;;8BAEM7J,KAAKyJ,aAAezJ,KAAKyJ,aAAeI,CAAI;;sBAGzDG;SAGd,CAEO,YAAAK,GACH,MAAMC,EAAqB,eAAgBtK,KAAK2J,aAAe,UAE/D,OAAOE,CAAI;cACJ7J,KAAK0J,OACFG,CAAI;;;gCAGWS;;0BAENtK,KAAK0J;;kBAGdM;SAGd,GAxG4BvM,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAqBmG,EAAAtJ,UAAA,aAAA,GACXhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA2BmG,EAAAtJ,UAAA,mBAAA,GACjBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA0BmG,EAAAtJ,UAAA,kBAAA,GAEhChC,EAAA,CAAX8M,6BAA2BxB,EAAAtJ,UAAA,aAAA,GAEChC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAA4B8G,EAAAtJ,UAAA,gBAAA,GACjBhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAA4B8G,EAAAtJ,UAAA,gBAAA,GACjBhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAA4B8G,EAAAtJ,UAAA,gBAAA,GAEFhC,EAAA,CAA3C8M,EAAS,CAAE5H,KAAMV,QAASa,SAAS,6BAAsBiG,EAAAtJ,UAAA,aAAA,GAC9BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA6CmG,EAAAtJ,UAAA,oBAAA,GAEnChC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAuCmG,EAAAtJ,UAAA,cAAA,GAC7BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAwEmG,EAAAtJ,UAAA,mBAAA,GAE9DhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAwBmG,EAAAtJ,UAAA,YAAA,GACdhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA4BmG,EAAAtJ,UAAA,gBAAA,GAClBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA0CmG,EAAAtJ,UAAA,8BAAA,GAnBnDsJ,EAAWtL,EAAA,CADvB+M,EAAc,iBACFzB,GCFN,MAAM0B,EAASC,CAAG;;;;;;EAQZC,EAAQD,CAAG;;;;;;EAQXE,EAAQF,CAAG;;;;;;EAQXG,EAAQH,CAAG;;;;;;EAQXI,EAAWJ,CAAG;;;;;;;EASdK,EAAUL,CAAG;;;;;;;EASbM,EAASN,CAAG;;;;;;;EC/ClB,IAAMO,EAAN,cAA6BjC,EAA7B,WAAAjJ,uBACuBC,KAAAkL,MAAQ,GACnBlL,KAAAmL,QAAS,EACTnL,KAAAoL,UAAYC,OAAOC,WAAa,IA8EzCtL,KAAAuL,aAAe,KACrBvL,KAAKoL,UAAYC,OAAOC,WAAa,IAiCzC,QA9GStL,KAAA6E,OAAS6F,CAAG;;;;;;;;;;;;;;;;;;;QAmBbE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CJ,CAEF,iBAAA/D,GACEzB,MAAMyB,oBACNwE,OAAOG,iBAAiB,SAAUxL,KAAKuL,aACzC,CAEA,oBAAAzE,GACE1B,MAAM0B,uBACNuE,OAAOI,oBAAoB,SAAUzL,KAAKuL,aAC5C,CAMQ,MAAAG,GACN1L,KAAKmL,QAAUnL,KAAKmL,MACtB,CAEQ,UAAAQ,GACN,OAAO3L,KAAKmL,OACRtB,CAAI,0GACJA,CAAI,2GACV,CAEA,MAAA+B,GACE,OAAO/B,CAAI;mCACoB7J,KAAK0L;6BACX1L,KAAKkL;;YAEtBlL,KAAKoL,UACHvB,CAAI;;oBAEE7J,KAAK2L;;gBAGX3L,KAAK2L;;;4BAGS3L,KAAKmL,OAAS,OAAS;;;KAIjD,GAhH4B1N,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAqBqI,EAAAxL,UAAA,aAAA,GACtBhC,EAAA,CAAhBkG,6BAA+BsH,EAAAxL,UAAA,cAAA,GACfhC,EAAA,CAAhBkG,6BAAoDsH,EAAAxL,UAAA,iBAAA,GAH1CwL,EAAcxN,EAAA,CAD1B+M,EAAc,oBACFS,GCDN,IAAMY,EAAN,cAA4B7C,SAC1BhJ,KAAA6E,OAAS6F,CAAG;;;;;;GAMjB,CAEF,MAAAkB,GACE,OAAO/B,CAAI,eACb,GAXWgC,EAAapO,EAAA,CADzB+M,EAAc,mBACFqB,GCGN,IAAMC,EAAN,cAA6B9C,EAA7B,WAAAjJ,uBACuBC,KAAA2C,KAAsC,SACtC3C,KAAA+L,QAAsH,iBAEtH/L,KAAAwG,KAAoB,KACpBxG,KAAAiJ,MAAQ,GAEPjJ,KAAAgM,QAAS,EAGVhM,KAAAiM,aAAiC,OACjCjM,KAAAkM,SAA0B,KAEVlM,KAAAuJ,UAAoB,EAEpCvJ,KAAAmM,QAAU,EA4WxC,QA1WSnM,KAAA6E,OAAS6F,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAuCbG;;;;;QAKAD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6PJ,CAEM,WAAAwB,CAAYC,GAClB,IAAIrM,KAAKuJ,SAET,GAAkB,WAAdvJ,KAAK2C,KAAmB,CAC1B,MAAM2J,EAAOtM,KAAKuM,QAAQ,QACtBD,GAAMA,EAAKE,eACjB,MAAO,GAAkB,UAAdxM,KAAK2C,KAAiB,CAC/B,MAAM2J,EAAOtM,KAAKuM,QAAQ,QACtBD,GAAMA,EAAKG,OACjB,MAAUzM,KAAKmM,SACEnM,KAAK0M,cAAc,IAAIC,YAAY,wBAAwB,CAACC,OAAO5M,KAAKmM,QAAQU,UAAS,EAAMC,SAAS,EAAMC,YAAY,IAE7I,CAEO,MAAAnB,GACL,MAAMoB,EAAU,CACdC,QAAQ,EACR,CAACjN,KAAK+L,UAAU,EAChBC,OAAQhM,KAAKgM,OACb,CAAC,UAAUhM,KAAKwG,QAAS,CAAC,iBAAkB,mBAAoB,mBAAmB0G,SAASlN,KAAK+L,UAG7FoB,EAA4B,oBAAjBnN,KAAK+L,QAAgC,uBAAyB,QAE/E,OAAOlC,CAAI;;;eAGA7J,KAAK2C;gBACJyK,EAASJ;oBACLhN,KAAKuJ,UAAYvJ,KAAKgM;qBACrBhM,KAAKgM;iBACThM,KAAKoM;;UAEZpM,KAAKgM,OACHnC,CAAI;;;6DAG6CsD;6DACAA;6DACAA;;;cAIjDtD,CAAI;;gBAEA7J,KAAKqN,SAA4B,iBAAjBrN,KAAK+L,QACnBlC,CAAI,YAAY7J,KAAKqN,8DACrB;;gBAEFrN,KAAKkM,UAA6B,iBAAjBlM,KAAK+L,SAAoD,SAAtB/L,KAAKiM,aACvDpC,CAAI,uBAAuB7J,KAAKkM,wCAChC;;gBAEFlM,KAAKiJ,MAAQY,CAAI,yCAAyC7J,KAAKiJ,eAAiBY,CAAI;;gBAEpF7J,KAAKkM,UAA6B,iBAAjBlM,KAAK+L,SAAoD,UAAtB/L,KAAKiM,aACvDpC,CAAI,uBAAuB7J,KAAKkM,wCAChC;;;;KAKhB,GAzX4BzO,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAyDkJ,EAAArM,UAAA,YAAA,GAC/ChC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAiJkJ,EAAArM,UAAA,eAAA,GAEvIhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAmCkJ,EAAArM,UAAA,YAAA,GACzBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAqBkJ,EAAArM,UAAA,aAAA,GAEVhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAA0B6J,EAAArM,UAAA,cAAA,GAEOhC,EAAA,CAAlD8M,EAAS,CAAE5H,KAAMC,OAAQF,UAAW,sCAA+BoJ,EAAArM,UAAA,eAAA,GACxChC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAkDkJ,EAAArM,UAAA,oBAAA,GACxChC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAyCkJ,EAAArM,UAAA,gBAAA,GAEfhC,EAAA,CAA3C8M,EAAS,CAAE5H,KAAMV,QAASa,SAAS,8BAAkCgJ,EAAArM,UAAA,gBAAA,GAE1ChC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAuBkJ,EAAArM,UAAA,eAAA,GAf9BqM,EAAcrO,EAAA,CAD1B+M,EAAc,oBACFsB,GCFN,IAAMwB,EAAN,cAA2BtE,EAA3B,WAAAjJ,uBACuBC,KAAAuN,IAAM,GACNvN,KAAA4I,KAAO,GACP5I,KAAAkL,MAAQ,GACRlL,KAAAwN,YAAc,GACdxN,KAAAyN,YAAc,cACdzN,KAAA0N,OAAS,EAkIvC,QAhIS1N,KAAA6E,OAAS6F,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA2DbG;;;;;;;;;;;;;;;;;;;;QAoBAF;;;;;;;;;;;;;;;;;GAiBJ,CAEF,MAAAiB,GACE,OAAO/B,CAAI;kEACmD7J,KAAKuN;;;;;gCAKvCvN,KAAK4I;;;qCAGA5I,KAAKwN;cAE5BxN,KAAK0N,OACL7D,CAAI;;uBAEK7J,KAAKyN;wBACJzN,KAAK0N;iCAGjB7D,CAAI;;uBAEO7J,KAAKyN;;;;;KAO1B,GArI4BhQ,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAmB0K,EAAA7N,UAAA,WAAA,GACThC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAoB0K,EAAA7N,UAAA,YAAA,GACVhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAqB0K,EAAA7N,UAAA,aAAA,GACXhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA2B0K,EAAA7N,UAAA,mBAAA,GACjBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAsC0K,EAAA7N,UAAA,mBAAA,GAC5BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAsB0K,EAAA7N,UAAA,cAAA,GAN7B6N,EAAY7P,EAAA,CADxB+M,EAAc,kBACF8C,GCAN,IAAMK,EAAN,cAAuB3E,EAAvB,WAAAjJ,uBACuCC,KAAA4N,SAAU,EACzB5N,KAAAwJ,OAAQ,EACRxJ,KAAAuJ,UAAW,CAuI1C,QApISvJ,KAAA6E,OAAS6F,CAAG;;;;;;;QAObC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGJ,CAEM,WAAAkD,CAAYxB,GAClBrM,KAAK4N,QAAWvB,EAAM1O,OAA4BiQ,QAElD5N,KAAK0M,cAAc,IAAIoB,MAAM,QAAS,CAAEhB,SAAS,EAAMD,UAAU,KACjE7M,KAAK0M,cAAc,IAAIoB,MAAM,SAAU,CAAEhB,SAAS,EAAMD,UAAU,KAClE7M,KAAK0M,cAAc,IAAIoB,MAAM,QAAS,CAAEhB,SAAS,EAAMD,UAAU,IACnE,CAEA,MAAAjB,GACE,OAAO/B,CAAI;sBACO7J,KAAKwJ,MAAQ,QAAU,MAAMxJ,KAAKuJ,SAAW,WAAa;;;;yBAIvDvJ,KAAK4N,QAAU,OAAS;qBAC5B5N,KAAK4N;sBACJ5N,KAAKuJ;oBACPvJ,KAAK6N;mBACN,IAAM7N,KAAKgB,aAAa,UAAW;kBACpC,IAAMhB,KAAKmH,gBAAgB;;;;;;KAO3C,GAxI4C1J,EAAA,CAA3C8M,EAAS,CAAE5H,KAAMV,QAASa,SAAS,6BAAwB6K,EAAAlO,UAAA,eAAA,GAC/BhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAAyB0L,EAAAlO,UAAA,aAAA,GACdhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAA4B0L,EAAAlO,UAAA,gBAAA,GAHnCkO,EAAQlQ,EAAA,CADpB+M,EAAc,sBACFmD,GCHN,MAAMI,EAAgBrD,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECEnBsD,EAAYtD,CAAI;;;;;;;;;MAStBE;;;;;;;;;;;;;;;MAeAC;;;;;MAKAD;;;;;;;;;;;MAWAH;;;;;;ECzCMwD,EAAcvD,CAAI;;;;;;;;;;;;;;;UAepBE;;;;ECTJ,IAAMsD,EAAN,cAA2BnF,EAA3B,WAAAhJ,uBAEuBC,KAAAmO,aAAyCC,EAEzCpO,KAAAwG,KAA2B,KAC3BxG,KAAAqO,KAAgC,KAE/BrO,KAAAsO,QAAkB,EACnBtO,KAAA2C,KAAyC,OAKzB3C,KAAAuO,mBAAoB,EACnCvO,KAAAwO,aAAuB,CA0WtD,QApWSxO,KAAA6E,OAAS6F,CAAG;MACdsD;MACAC;MACAF;;;;;;;;;;QAUClD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA2EAA;;;;;;;;;;;;;;;;QAgBAD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCJ,CAEM,cAAA6D,CAAgBpC,GACtBrM,KAAKuO,mBAAqBvO,KAAKuO,kBAE/B,MAAMG,EAA+CrC,EAAMsC,cAA+BC,eAAe9F,cAAe,SACnH4F,IAAQA,EAAM/L,KAAO3C,KAAKuO,kBAAoB,OAAS,YAE5DvO,KAAKmE,eACP,CAEQ,WAAA0K,CAAaxC,GACnBrM,KAAK8O,kBAAmBzC,GAExB,MACM0C,EADiD1C,EAAM1O,OAC7ByL,WAERgF,IAAnBpO,KAAKgP,WAAyC,aAAdhP,KAAK2C,KAAsB3C,KAAKoJ,MAAQ2F,EAASE,MAAO,EAAGjP,KAAKgP,WAChGhP,KAAKoJ,MAAQ2F,EAElB/O,KAAK0M,cAAe,IAAIC,YAAY,eAAgB,CAAEC,OAAQ5M,KAAKoJ,SACnEpJ,KAAK0M,cAAe,IAAIoB,MAAM,QAAS,CAAEhB,SAAS,KAElD9M,KAAKmE,eACP,CAEQ,WAAA+K,GACNlP,KAAKoJ,MAAQ,GAEbpJ,KAAK0M,cAAc,IAAIC,YAAY,eAAgB,CAAEC,OAAQ5M,KAAKoJ,SAClEpJ,KAAK0M,cAAc,IAAIoB,MAAM,QAAS,CAAEhB,SAAS,KAEjD9M,KAAKmE,eACP,CAEQ,eAAAgL,CAAiB9C,GACvBA,EAAM+C,iBACDpP,KAAKqP,WAEVrP,KAAK0M,cACH,IAAIC,YAAY,cAAe,CAC7BC,OAAQ5M,KAAKqP,UACbvC,SAAS,EACTD,UAAU,IAGhB,CAEO,iBAAAiC,CAAmBzC,GACF,WAAjBrM,KAAKmO,QAAuBnO,KAAKsP,YAAajD,GACxB,SAAjBrM,KAAKmO,SAAqBnO,KAAKuP,SAAUlD,EACrD,CAEO,WAAAiD,CAAajD,GAClB,MAAMmD,EAAiCnD,EAAM1O,OAIvC8R,EAHuBD,EAAapG,MAGEsG,QAAQ,UAAW,IAG/DF,EAAapG,MAAQqG,CACvB,CAEO,QAAAF,CAAUlD,GACf,MAAMmD,EAAiCnD,EAAM1O,OAIvC8R,EAHuBD,EAAapG,MAGEsG,QAAS,2BAA4B,IAGjFF,EAAapG,MAAQqG,CACvB,CAEQ,aAAAE,CAAetD,GACrB,GAAmB,UAAdA,EAAMzO,IAAkB,OAE7B,MAAMgS,EAAc,IAAI9B,MAAM,SAAU,CACtChB,SAAS,EACTD,UAAU,EACVE,YAAY,IAGRT,EAA+BtM,KAAKuM,QAAS,QAC9CD,GAAOA,EAAKI,cAAekD,EAClC,CAEO,MAAAhE,GACL,MAAMiE,EACJ7P,KAAKwO,aACLxO,KAAKoJ,OACS,aAAdpJ,KAAK2C,MACS,aAAd3C,KAAK2C,KAGDmN,EACU,aAAd9P,KAAK2C,KACD,WAAW3C,KAAK+P,gBAAkB,uBAAuB/P,KAAKgQ,mBAAqB,4BACnF,GAGAC,EAAapG,CAAI;QAClB7J,KAAKmJ,WAAa,kBAAmBnJ,KAAKmJ,cAAiB;MAGhE,OAAOU,CAAI;;sBAEQ7J,KAAKwJ,MAAQ,QAAU,MAAOxJ,KAAKuJ,SAAW,WAAa;iBACjE0G;;UAENjQ,KAAK4J;;;YAGU,SAAd5J,KAAKqO,KACHxE,CAAI,kCACJG;;;cAIc,aAAdhK,KAAK2C,KACHkH,CAAI;;;gCAGY7J,KAAKkJ,aAAe;2BACzBlJ,KAAKoJ;8BACFpJ,KAAKuJ;2BACRvJ,KAAK6O;6BACH7O,KAAK2P;8BACJ3P,KAAKgP,WAAahF;2BACrB8F;;;gBAIXjG,CAAI;;;yBAGmB,aAAd7J,KAAK2C,MAAwB3C,KAAKuO,kBAAiC,OAAb;gCAC/CvO,KAAKkJ,aAAe;2BACzBlJ,KAAKoJ;8BACFpJ,KAAKuJ;2BACRvJ,KAAK6O;6BACH7O,KAAK2P;8BACJ3P,KAAKgP,WAAahF;;;kBAGhB,aAAdhK,KAAK2C,KACHkH,CAAI;;;;+BAIO7J,KAAKyO;kCACFzO,KAAKuJ;;wBAEfvJ,KAAKuO,kBACH1E,CAAI;;;;;;0BAQJA,CAAI;;;;;;+BAQVG;;kBAGF6F,EACEhG,CAAI;;;;+BAIO7J,KAAKkP;kCACFlP,KAAKuJ;;;;;;;+BAQnBS;;;;YAKM,UAAdhK,KAAKqO,KACHxE,CAAI,mCACJG;;YAGDhK,KAAKoK;;;;UAIRpK,KAAKkQ,UAAYlQ,KAAKqP,UACpBxF,CAAI;;4CAE4B7J,KAAKmP;kBAC/BnP,KAAKkQ;;oBAGXlG;;UAGDhK,KAAKqK;;KAGd,GArX4B5M,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA6DsL,EAAAzO,UAAA,eAAA,GAEnDhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA0CsL,EAAAzO,UAAA,YAAA,GAChChC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA+CsL,EAAAzO,UAAA,YAAA,GAEpChC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,oCAAmCiM,EAAAzO,UAAA,cAAA,GACzBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA0DsL,EAAAzO,UAAA,YAAA,GAEhDhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA4BsL,EAAAzO,UAAA,gBAAA,GAClBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA6BsL,EAAAzO,UAAA,iBAAA,GAEHhC,EAAA,CAA3C8M,EAAS,CAAE5H,KAAMV,QAASa,SAAS,6BAAkCoL,EAAAzO,UAAA,yBAAA,GACzChC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,oCAAwCiM,EAAAzO,UAAA,mBAAA,GAC9BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAML,kCAA6B4L,EAAAzO,UAAA,iBAAA,GAEnBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAkCsL,EAAAzO,UAAA,sBAAA,GACxBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAqCsL,EAAAzO,UAAA,yBAAA,GAlB5CyO,EAAYzQ,EAAA,CADxB+M,EAAc,kBACF0D,GCDN,IAAMiC,EAAN,cAAwBpH,EAAxB,WAAAhJ,uBAEuBC,KAAAoQ,KAAe,EA4C7C,QA1CSpQ,KAAA6E,OAAS6F,CAAG;MACdsD;MACAC;MACAF;;;;;;;;;;;;;;;;;;GAkBH,CAEK,MAAAnC,GACL,MAAMyE,EAA6BrQ,KAAKoQ,KAAO,yCAAyCpQ,KAAKoQ,QAAU,yCAEvG,OAAOvG,CAAI;;UAEJ7J,KAAK4J;;;uCAGwByG;;;;YAI3BrQ,KAAKoK;;;UAGPpK,KAAKqK;;KAGd,GA3C4B5M,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA4BuN,EAAA1Q,UAAA,YAAA,GAFnC0Q,EAAS1S,EAAA,CADrB+M,EAAc,wBACF2F,GCLP,MAAOG,WAAsBtH,EAAnC,WAAAjJ,uBAC8BC,KAAA4I,KAAO,GACP5I,KAAAwG,KAAO,MAgErC,QA9DSxG,KAAA6E,OAAS6F,CAAG;;;;;;;;;;;;;;GAcjB,CAEF,iBAAA7D,GACEzB,MAAMyB,oBACN7G,KAAKuQ,MAAMC,YAAY,cAAexQ,KAAKwG,KAC7C,CAEA,OAAA6B,CAAQoI,GACFA,EAAajJ,IAAI,SACnBxH,KAAKuQ,MAAMC,YAAY,cAAexQ,KAAKwG,KAE/C,CAEA,cAAMkK,GACJ,IACE,MAAMC,QAAiBC,MAAM,iBAAiB5Q,KAAK4I,YACnD,IAAK+H,EAASE,GAAI,MAAM,IAAI3Q,MAAM,kBAClC,MAAM4Q,QAAgBH,EAASI,OAEzBC,EAAS,IAAIC,UAEbC,EADSF,EAAOG,gBAAgBL,EAAS,iBACrBhI,cAAc,OAExC,IAAIoI,EAWF,MAAM,IAAIhR,MAAM,yCAVhBgR,EAAW/J,gBAAgB,QAC3B+J,EAAWlQ,aAAa,QAAShB,KAAKwG,MACtC0K,EAAWlQ,aAAa,SAAUhB,KAAKwG,MACvC0K,EAAWE,iBAAiB,UAAUrL,SAAQsL,GAAMA,EAAGlK,gBAAgB,UACvE+J,EAAWlQ,aAAa,OAAQ,gBAC5B,cAAehB,KAAKmG,aACtBnG,KAAKmG,WAAWmL,UAAY,IAE9BtR,KAAKmG,WAAWjF,YAAYgQ,EAIhC,CAAE,MAAO1H,GACP+H,QAAQ/H,MAAM,0BAA0BxJ,KAAK4I,QAASY,GAClD,cAAexJ,KAAKmG,aACtBnG,KAAKmG,WAAWmL,UAAY,kBAEhC,CACF,CAEA,MAAA1F,GAEE,OADA5L,KAAK0Q,WACE,IACT,EAhE4BjT,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAoB0N,GAAA7Q,UAAA,YAAA,GACVhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAwB0N,GAAA7Q,UAAA,YAAA,GAkE5CP,eAAeC,OAAO,gBAAiBmR,IClEhC,IAAMkB,GAAN,cAA6BxI,EAA7B,WAAAjJ,uBACuBC,KAAA2C,KAAe,cACf3C,KAAAqO,KAAe,OACfrO,KAAAyR,QAAkB,sBACjBzR,KAAA0R,MAAgB,CA4D/C,QA1DS1R,KAAA6E,OAAS6F,CAAG;;;;;;;QAObE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCJ,CAEF,MAAAgB,GACE,OAAO/B,CAAI;8BACe7J,KAAK0R,KAAO,GAAK,YAAY1R,KAAK2C;4CACpB3C,KAAKqO;gCACjBrO,KAAKyR;;KAGnC,GA9D4BhU,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAuC4O,GAAA/R,UAAA,YAAA,GAC7BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAgC4O,GAAA/R,UAAA,YAAA,GACtBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAkD4O,GAAA/R,UAAA,eAAA,GACvChC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,oCAAiCuP,GAAA/R,UAAA,YAAA,GAJxC+R,GAAc/T,EAAA,CAD1B+M,EAAc,oBACFgH,ICEN,IAAMG,GAAN,cAA0B3I,EAA1B,WAAAjJ,uBACuCC,KAAA0R,MAAO,EAEvB1R,KAAAkL,MAAQ,mBAGPlL,KAAA4R,YAAa,EACd5R,KAAA6R,WAA8D,cAC9D7R,KAAA8R,cAAgB,GAChB9R,KAAA+R,WAAa,OAEZ/R,KAAAgS,mBAAoB,EACrBhS,KAAAiS,mBAAqB,UAEpBjS,KAAAkS,qBAAsB,EACvBlS,KAAAmS,qBAAuB,WAEtBnS,KAAAoS,gBAAiB,EACjBpS,KAAAqS,iBAAkB,EAClBrS,KAAAsS,mBAAoB,EAErBtS,KAAAuS,WAAa,QAExBvS,KAAAwS,YAAa,EAmKtBxS,KAAAyS,kBAAoB,KAC1BzS,KAAKwS,WAAanH,OAAOC,WAAa,IAwF1C,QA1PStL,KAAA6E,OAAS6F,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0GbM;;;;;;QAMAJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCJ,CAEM,UAAA8H,GACN1S,KAAK0M,cAAc,IAAIC,YAAY,eACrC,CAEO,iBAAA9F,GACLzB,MAAMyB,oBACN7G,KAAKyS,oBACLpH,OAAOG,iBAAiB,SAAUxL,KAAKyS,kBACzC,CAEO,oBAAA3L,GACL1B,MAAM0B,uBACNuE,OAAOI,oBAAoB,SAAUzL,KAAKyS,kBAC5C,CAMQ,cAAAE,GACN,OAAK3S,KAAKoS,gBAAmBpS,KAAKgS,mBAAsBhS,KAAKkS,oBAGxDlS,KAAKgS,mBAAqBhS,KAAKkS,oBAC7B,cAEA,aALA,eAMT,CAEO,MAAAtG,GACL,OAAO/B,CAAI;;mDAEoC7J,KAAKuS;;;;2CAIbvS,KAAKkL;;kBAE9BlL,KAAK4S,SACH/I,CAAI,+BAA+B7J,KAAK4S,iBACxC5I;;;mDAI+BhK,KAAK0S;;;;;cAK1C1S,KAAK4R,WACH/H,CAAI;;2BAEM;0BACA7J,KAAK6R;0BACL7R,KAAK+R;6BACF/R,KAAK8R;;;kBAIlB9H;;;mCAImBhK,KAAKwS,WAAa,aAAe;;;;qCAI9BxS,KAAK2S;eAC5B3S,KAAKoS,gBAAmBpS,KAAKgS,mBAAsBhS,KAAKkS,oBAEvDlI,EADAH,CAAI;;cAIL7J,KAAKkS,oBACJrI,CAAI;;;;2BAIO,IAAM7J,KAAK0M,cAAc,IAAIC,YAAY;0BAC1C3M,KAAKmS;;;kBAIfnI;cAEDhK,KAAKgS,kBACJnI,CAAI;;;;2BAIO,IAAM7J,KAAK0M,cAAc,IAAIC,YAAY;0BAC1C3M,KAAKiS;4BACHjS,KAAKqS;8BACHrS,KAAKsS;;;kBAInBtI;;;;KAMd,GAjR4CvM,EAAA,CAA3C8M,EAAS,CAAE5H,KAAMV,QAASa,SAAS,6BAAqB6O,GAAAlS,UAAA,YAAA,GAE7BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAqC+O,GAAAlS,UAAA,aAAA,GAC3BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA4B+O,GAAAlS,UAAA,gBAAA,GAEjBhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAA8B0P,GAAAlS,UAAA,kBAAA,GACpBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAsF+O,GAAAlS,UAAA,kBAAA,GAC5EhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA6B+O,GAAAlS,UAAA,qBAAA,GACnBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA8B+O,GAAAlS,UAAA,kBAAA,GAEnBhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAAqC0P,GAAAlS,UAAA,yBAAA,GAC3BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAyC+O,GAAAlS,UAAA,0BAAA,GAE9BhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAAuC0P,GAAAlS,UAAA,2BAAA,GAC7BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA4C+O,GAAAlS,UAAA,4BAAA,GAEjChC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAAkC0P,GAAAlS,UAAA,sBAAA,GACvBhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAAmC0P,GAAAlS,UAAA,uBAAA,GACxBhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAAqC0P,GAAAlS,UAAA,yBAAA,GAE3BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA+B+O,GAAAlS,UAAA,kBAAA,GAEhChC,EAAA,CAAhBkG,6BAAmCgO,GAAAlS,UAAA,kBAAA,GAvBzBkS,GAAWlU,EAAA,CADvB+M,EAAc,iBACFmH,ICMN,IAAMkB,GAAN,cAA0B7J,EAA1B,WAAAjJ,uBACuCC,KAAA0R,MAAO,EACvB1R,KAAA2C,KAAwC,UACxC3C,KAAAqO,KAAO,UAEPrO,KAAAkL,MAAQ,mBACRlL,KAAAwN,YAAc,wBACdxN,KAAA8S,MAAQ,QAER9S,KAAA+S,WAAa,UACb/S,KAAAgT,YAAc,KACdhT,KAAAiT,WAAa,KAEdjT,KAAAkT,eAAgC,GAsInDlT,KAAAmT,mBAAsB9G,IAC5B,MAAM+G,EAAO/G,EAAMgH,eACbC,EAAiBtT,KAAKmG,WAAW2C,cAAc,UAEjDwK,IAAmBF,EAAKlG,SAASoG,KACnCtT,KAAK0M,cAAc,IAAIC,YAAY,cAAe,CAAEC,OAAQ,QAC5D5M,KAAK0R,MAAO,GAiGlB,QA1OS1R,KAAA6E,OAAS6F,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA8DbK;;;;;;QAMAH;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4BAE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBJ,CAEF,YAAA1C,GACE,GAAIpI,KAAK0R,KAAM,CACb,MAAMzE,EAASjN,KAAKmG,WAAW2C,cAAc,mBACzCmE,GAASA,EAAuBsG,OACtC,CACAvT,KAAKwL,iBAAiB,QAASxL,KAAKmT,mBACtC,CAYA,oBAAArM,GACE1B,MAAM0B,uBACN9G,KAAKyL,oBAAoB,QAASzL,KAAKmT,mBACzC,CAEA,UAAAK,CAAW7C,GACT3Q,KAAK0M,cAAc,IAAIC,YAAY,cAAe,CAAEC,OAAQ+D,KAC5D3Q,KAAK0R,MAAO,CACd,CAEA,MAAA9F,GACE,OAAO/B,CAAI;;;;;UAKS,YAAd7J,KAAK2C,KAAqBkH,CAAI,gCAAkCG;;;UAGlD,YAAdhK,KAAK2C,MAAsB3C,KAAKqO,KAC9BxE,CAAI,2BAA2B7J,KAAKqO,yCACpCrE;;;YAGc,YAAdhK,KAAK2C,KACHkH,CAAI;kBACC7J,KAAKkL,MAAQrB,CAAI,4CAA4C7J,KAAKkL,aAAelB;;;wEAG5BhK,KAAKwN;;;;;;;6BAOhD,IAAMxN,KAAKwT,YAAW;4BACvBxT,KAAK+S;;;gBAIL,YAAd/S,KAAK2C,KACLkH,CAAI;;oBAEE7J,KAAKkT,eAAevS,KACpB8S,GAAU5J,CAAI;;;iCAGD,IAAM7J,KAAKwT,WAAWC,EAAOrK;;;;mCAI3BqK,EAAOpF;;;;;gCAKVoF,EAAOxK;;;;gBAMzBY,CAAI;;6DAE2C7J,KAAKkL;wEACMlL,KAAKwN;;;;;;;6BAOhD,IAAMxN,KAAKwT,YAAW;4BACvBxT,KAAKiT;;;;;;;6BAOJ,IAAMjT,KAAKwT,YAAW;4BACvBxT,KAAKgT;;;;;;;KAS/B,GAvP4CvV,EAAA,CAA3C8M,EAAS,CAAE5H,KAAMV,QAASa,SAAS,6BAAqB+P,GAAApT,UAAA,YAAA,GAC7BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA4DiQ,GAAApT,UAAA,YAAA,GAClDhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA2BiQ,GAAApT,UAAA,YAAA,GAEjBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAqCiQ,GAAApT,UAAA,aAAA,GAC3BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAgDiQ,GAAApT,UAAA,mBAAA,GACtChC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA0BiQ,GAAApT,UAAA,aAAA,GAEhBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAiCiQ,GAAApT,UAAA,kBAAA,GACvBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA6BiQ,GAAApT,UAAA,mBAAA,GACnBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA4BiQ,GAAApT,UAAA,kBAAA,GAEnBhC,EAAA,CAA1B8M,EAAS,CAAE5H,KAAMT,gCAA4C2Q,GAAApT,UAAA,sBAAA,GAbnDoT,GAAWpV,EAAA,CADvB+M,EAAc,iBACFqI,ICRN,IAAMa,GAAN,cAA6B1K,EAA7B,WAAAjJ,uBACuBC,KAAAoJ,MAAQ,EACRpJ,KAAA2T,IAAM,CA4EpC,QA1ES3T,KAAA6E,OAAS6F,CAAG;;;;;;;;;;;;;QAabD;;;;;;;;;;;;;;;;GAgBJ,CAEF,MAAAmB,GACE,MAEMgI,EAAgB,EAAIC,KAAKC,GADhB,GAGTC,EAAUF,KAAKF,IAAI3T,KAAK2T,IAAK,GAE7BK,EAASJ,GAAiB,EADfC,KAAKI,IAAIjU,KAAKoJ,MAAQ2K,EAAS,IAGhD,OAAOlK,CAAI;;;;gCAIiB7J,KAAKoJ,YAAYpJ,KAAK2T;;;;;;;eAXnC;0BADK;;;;;;;;eACL;0BADK;;8BA+BMC;+BACCI;;;;;YAKnBhU,KAAKoJ,YAAYpJ,KAAK2T;;;KAIhC,GA5E4BlW,EAAA,CAA3B8M,EAAS,CAAE5H,KAAML,kCAAoBoR,GAAAjU,UAAA,aAAA,GACVhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAML,kCAAkBoR,GAAAjU,UAAA,WAAA,GAFzBiU,GAAcjW,EAAA,CAD1B+M,EAAc,oBACFkJ;;;;;;ACKb,MAAMQ,GAAwBtU,OAAO,wBACrC,IAAIuU,GACCC,IAMDD,GAAyB,IAAIE,kBAAkBC,IAC3C,IAAK,MAAMC,KAAUD,EAGjBC,EAAO5W,OAAOuW,KAAwB7N,oBAyB3C,MAAMmO,GACT,WAAIC,GACA,OAAOzU,KAAK0U,KAAKC,aAAa,MAClC,CACA,WAAIF,CAAQA,GACQ,OAAZA,EACAzU,KAAK0U,KAAKvN,gBAAgB,OAG1BnH,KAAK0U,KAAK1T,aAAa,MAAOyT,EAEtC,CACA,WAAIG,GACA,OAAI5U,KAAK0U,KAAKrN,aAAa,OAClBrH,KAAKyU,SAAYzU,KAAK0U,KAAKtO,YAGzBpG,KAAK0U,KAAKG,cAAc/L,cAAc,IAAI9I,KAAKyU,WAF3C,KAIRzU,KAAK8U,gBAAkB9U,KAAK0U,KAAK9F,aAC5C,CACA,WAAIgG,CAAQA,GACJA,EACA5U,KAAK+U,OAAOH,GAGZ5U,KAAKgV,QAEb,CASA,WAAAjV,CAAY2U,EAAMO,GACdjV,KAAK0U,KAAOA,EACZ1U,KAAKiV,gBAAkBA,EACvBjV,KAAK8U,eAAiB,KACtBJ,EAAK1O,cAAchG,MACnB0U,EAAKR,IAAyBlU,KAC9BmU,IAAwBe,QAAQR,EAAM,CAAES,gBAAiB,CAAC,QAC9D,CACA,MAAAJ,CAAOH,GACCA,IAAY5U,KAAK8U,iBAGrB9U,KAAKoV,kBAAkBR,GAGvB5U,KAAK0U,KAAKvN,gBAAgB,OAC9B,CACA,MAAA6N,GACIhV,KAAKoV,kBAAkB,MAGvBpV,KAAK0U,KAAK1T,aAAa,MAAO,GAClC,CAEA,aAAAqF,GACIrG,KAAKoV,kBAAkBpV,KAAK4U,QAChC,CAEA,gBAAA7N,GACI/G,KAAKoV,kBAAkB,KAC3B,CACA,iBAAAA,CAAkBR,GACd5U,KAAKiV,gBAAgBjV,KAAK8U,eAAgBF,GAC1C5U,KAAK8U,eAAiBF,CAC1B;;;;;GC1GJ,MAAMS,GAAS,CAAC,UAAW,WAAY,eAMhC,MAAMC,WAAkBtM,EAC3B,WAAAjJ,GACIqF,SAASpH,WAITgC,KAAKuV,SAAU,EAIfvV,KAAKwV,QAAS,EACdxV,KAAKyV,qBAAuB,IAAIjB,GAAqBxU,KAAMA,KAAKiV,gBAAgBS,KAAK1V,MACzF,CACA,WAAIyU,GACA,OAAOzU,KAAKyV,qBAAqBhB,OACrC,CACA,WAAIA,CAAQA,GACRzU,KAAKyV,qBAAqBhB,QAAUA,CACxC,CACA,WAAIG,GACA,OAAO5U,KAAKyV,qBAAqBb,OACrC,CACA,WAAIA,CAAQA,GACR5U,KAAKyV,qBAAqBb,QAAUA,CACxC,CACA,MAAAG,CAAOH,GACH5U,KAAKyV,qBAAqBV,OAAOH,EACrC,CACA,MAAAI,GACIhV,KAAKyV,qBAAqBT,QAC9B,CACA,iBAAAnO,GACIzB,MAAMyB,oBAGN7G,KAAKgB,aAAa,cAAe,OACrC,CAEA,WAAA2U,CAAYtJ,GACR,IAAIA,EAAMuJ,IAAV,CAKA,OAAQvJ,EAAM1J,MACV,QACI,OACJ,IAAK,UACD3C,KAAKuV,QAAUvV,KAAK4U,SAASiB,QAAQ,oBAAqB,EAC1D,MACJ,IAAK,WACL,IAAK,cACD7V,KAAKuV,SAAU,EAGvBlJ,EAAMuJ,KAAyB,CAZ/B,CAaJ,CACA,eAAAX,CAAgBa,EAAMC,GAClB,IAAI3B,EAEJ,IAAK,MAAM/H,KAASgJ,GAChBS,GAAMrK,oBAAoBY,EAAOrM,MACjC+V,GAAMvK,iBAAiBa,EAAOrM,KAEtC,CACA,MAAAgI,CAAOgO,GACCA,EAAQxO,IAAI,YAGZxH,KAAK0M,cAAc,IAAIoB,MAAM,uBAEjC1I,MAAM4C,OAAOgO,EACjB,EAEJvY,EAAW,CACP8M,EAAS,CAAE5H,KAAMV,QAASa,SAAS,KACpCwS,GAAU7V,UAAW,eAAW,GACnChC,EAAW,CACP8M,EAAS,CAAE5H,KAAMV,QAASa,SAAS,KACpCwS,GAAU7V,UAAW,cAAU,GAClC,MAAMmW,GAAwBhW,OAAO,sBC3FxBiF,GAAS6F,CAAI;;;;;;;;;;;GCQ1B,IAAIuL,GAAc,cAA0BX,KAE5CW,GAAYpR,OAAS,CAACA,IACtBoR,GAAcxY,EAAW,CACrB+M,EAAc,kBACfyL;;;;;;ACRI,MAAMC,GACC;;;;;GCgBd,IAAIC,IACJ,SAAWA,GAQPA,EAAMA,EAAgB,SAAI,GAAK,WAU/BA,EAAMA,EAAmB,YAAI,GAAK,cAOlCA,EAAMA,EAAe,QAAI,GAAK,UAO9BA,EAAMA,EAAyB,kBAAI,GAAK,mBAC3C,CAjCD,CAiCGA,KAAUA,GAAQ,CAAA,IAIrB,MAAMd,GAAS,CACX,QACA,cACA,gBACA,cACA,eACA,eACA,aAWEe,GAAgBhC,EAChB,KACA/I,OAAOgL,WAAW,2BAIjB,MAAMC,WAAetN,EACxB,WAAAjJ,GACIqF,SAASpH,WAITgC,KAAKuJ,UAAW,EAChBvJ,KAAKuW,SAAU,EACfvW,KAAKwW,SAAU,EACfxW,KAAKyW,WAAa,GAClBzW,KAAK0W,YAAc,GACnB1W,KAAK2W,YAAc,EACnB3W,KAAK2D,MAAQwS,GAAMS,SACnB5W,KAAK6W,6BAA8B,EACnC7W,KAAKyV,qBAAuB,IAAIjB,GAAqBxU,KAAMA,KAAKiV,gBAAgBS,KAAK1V,MACzF,CACA,WAAIyU,GACA,OAAOzU,KAAKyV,qBAAqBhB,OACrC,CACA,WAAIA,CAAQA,GACRzU,KAAKyV,qBAAqBhB,QAAUA,CACxC,CACA,WAAIG,GACA,OAAO5U,KAAKyV,qBAAqBb,OACrC,CACA,WAAIA,CAAQA,GACR5U,KAAKyV,qBAAqBb,QAAUA,CACxC,CACA,MAAAG,CAAOH,GACH5U,KAAKyV,qBAAqBV,OAAOH,EACrC,CACA,MAAAI,GACIhV,KAAKyV,qBAAqBT,QAC9B,CACA,iBAAAnO,GACIzB,MAAMyB,oBAGN7G,KAAKgB,aAAa,cAAe,OACrC,CACA,MAAA4K,GACI,MAAMoB,EAAU,CACZuJ,QAAWvW,KAAKuW,QAChBC,QAAWxW,KAAKwW,SAEpB,OAAO3M,CAAK,uBAAuBuD,EAASJ,YAChD,CACA,MAAAhF,CAAOyI,GACCA,EAAajJ,IAAI,aAAexH,KAAKuJ,WACrCvJ,KAAKuW,SAAU,EACfvW,KAAKwW,SAAU,GAEnBpR,MAAM4C,OAAOyI,EACjB,CAKA,kBAAAqG,CAAmBzK,GACVrM,KAAK+W,mBAAmB1K,KAG7BrM,KAAKuW,SAAU,EACnB,CAKA,kBAAAS,CAAmB3K,GACVrM,KAAK+W,mBAAmB1K,KAG7BrM,KAAKuW,SAAU,EAEXvW,KAAK2D,QAAUwS,GAAMS,UACrB5W,KAAKiX,oBAEb,CACA,eAAAC,CAAgB7K,GACZ,GAAKrM,KAAK+W,mBAAmB1K,GAA7B,CAGA,GAAIrM,KAAK2D,QAAUwS,GAAMgB,QAIzB,OAAInX,KAAK2D,QAAUwS,GAAMiB,aACrBpX,KAAK2D,MAAQwS,GAAMkB,uBACnBrX,KAAKsX,oBAAoBtX,KAAKuX,wBAFlC,EAHIvX,KAAK2D,MAAQwS,GAAMkB,iBAFvB,CAUJ,CACA,uBAAMG,CAAkBnL,GACpB,GAAKrM,KAAK+W,mBAAmB1K,GAA7B,CAIA,GADArM,KAAKuX,iBAAmBlL,GACnBrM,KAAKyX,QAAQpL,GAGd,OAFArM,KAAK2D,MAAQwS,GAAMkB,uBACnBrX,KAAKsX,oBAAoBjL,GAMzBrM,KAAK6W,8BAAgC7W,KAAK0X,SAASrL,KAGvDrM,KAAK6W,6BAA8B,EAEnC7W,KAAK2D,MAAQwS,GAAMiB,kBACb,IAAIzR,SAASgS,IACfC,WAAWD,EA3HA,QA6HX3X,KAAK2D,QAAUwS,GAAMiB,cAGzBpX,KAAK2D,MAAQwS,GAAMgB,QACnBnX,KAAKsX,oBAAoBjL,IAvBzB,CAwBJ,CACA,WAAAD,GAGQpM,KAAKuJ,WAGLvJ,KAAK2D,QAAUwS,GAAMkB,kBAIrBrX,KAAK2D,QAAUwS,GAAMS,WAErB5W,KAAKsX,sBACLtX,KAAKiX,qBANLjX,KAAKiX,oBAQb,CACA,mBAAAY,CAAoBxL,GACXrM,KAAK+W,mBAAmB1K,IAG7BrM,KAAKiX,mBACT,CACA,iBAAAa,GACQ9X,KAAKuJ,WAGTvJ,KAAK6W,6BAA8B,EACnC7W,KAAKiX,oBACT,CACA,mBAAAc,GACI,MAAMC,OAAEA,EAAMlF,MAAEA,GAAU9S,KAAKiY,wBACzBC,EAASrE,KAAKF,IAAIqE,EAAQlF,GAC1BqF,EAAetE,KAAKF,IAnOA,IAmOgCuE,EApOnC,IAqOjBvB,EAAc9C,KAAKuE,MAvOJ,GAuOUF,GAEzBG,EADaxE,KAAKyE,KAAKxF,GAAS,EAAIkF,GAAU,GAvO5C,GAyORhY,KAAK2W,YAAcA,EACnB3W,KAAK0W,YAAc,IAAI2B,EAAYF,GAAgBxB,EACnD3W,KAAKyW,WAAa,GAAGE,KACzB,CACA,+BAAA4B,CAAgCC,GAC5B,MAAMC,QAAEA,EAAOC,QAAEA,GAAYrN,QACvBsN,KAAEA,EAAIC,IAAEA,GAAQ5Y,KAAKiY,wBACrBY,EAAYJ,EAAUE,EACtBG,EAAYJ,EAAUE,GACtBG,MAAEA,EAAKC,MAAEA,GAAUR,EACzB,MAAO,CAAES,EAAGF,EAAQF,EAAW3V,EAAG8V,EAAQF,EAC9C,CACA,yBAAAI,CAA0BC,GACtB,MAAMnB,OAAEA,EAAMlF,MAAEA,GAAU9S,KAAKiY,wBAEzBmB,EAAW,CACbH,GAAInG,EAAQ9S,KAAK2W,aAAe,EAChCzT,GAAI8U,EAAShY,KAAK2W,aAAe,GAErC,IAAI0C,EAeJ,OAbIA,EADAF,aAAyBG,aACZtZ,KAAKuY,gCAAgCY,GAGrC,CACTF,EAAGnG,EAAQ,EACX5P,EAAG8U,EAAS,GAIpBqB,EAAa,CACTJ,EAAGI,EAAWJ,EAAIjZ,KAAK2W,YAAc,EACrCzT,EAAGmW,EAAWnW,EAAIlD,KAAK2W,YAAc,GAElC,CAAE0C,aAAYD,WACzB,CACA,mBAAA9B,CAAoB6B,GAChB,IAAKnZ,KAAKuZ,OACN,OAEJvZ,KAAKwW,SAAU,EACfxW,KAAKwZ,eAAeC,SACpBzZ,KAAK+X,sBACL,MAAMsB,WAAEA,EAAUD,SAAEA,GAAapZ,KAAKkZ,0BAA0BC,GAC1DO,EAAiB,GAAGL,EAAWJ,QAAQI,EAAWnW,MAClDyW,EAAe,GAAGP,EAASH,QAAQG,EAASlW,MAClDlD,KAAKwZ,cAAgBxZ,KAAKuZ,OAAOK,QAAQ,CACrChB,IAAK,CAAC,EAAG,GACTD,KAAM,CAAC,EAAG,GACVX,OAAQ,CAAChY,KAAKyW,WAAYzW,KAAKyW,YAC/B3D,MAAO,CAAC9S,KAAKyW,WAAYzW,KAAKyW,YAC9BoD,UAAW,CACP,aAAaH,cACb,aAAaC,YAAuB3Z,KAAK0W,iBAE9C,CACCoD,cA9RS,UA+RTC,SArSU,IAsSVC,OAAQ9D,GACR+D,KAhSW,YAkSnB,CACA,uBAAMhD,GACFjX,KAAKuX,sBAAmBnJ,EACxBpO,KAAK2D,MAAQwS,GAAMS,SACnB,MAAMsD,EAAYla,KAAKwZ,cACvB,IAAIW,EAA0BC,IACQ,iBAA3BF,GAAWG,YAClBF,EAA0BD,EAAUG,YAE/BH,GAAWG,cAChBF,EAA0BD,EAAUG,YAAYC,GAAG,MAAMlR,OAEzD+Q,GApTa,IAqTbna,KAAKwW,SAAU,SAGb,IAAI7Q,SAASgS,IACfC,WAAWD,EAzTE,IAyT0BwC,MAEvCna,KAAKwZ,gBAAkBU,IAK3Bla,KAAKwW,SAAU,GACnB,CAUA,kBAAAO,CAAmB1K,GACf,GAAIrM,KAAKuJ,WAAa8C,EAAMkO,UACxB,OAAO,EAEX,GAAIva,KAAKuX,kBACLvX,KAAKuX,iBAAiBiD,YAAcnO,EAAMmO,UAC1C,OAAO,EAEX,GAAmB,iBAAfnO,EAAM1J,MAA0C,iBAAf0J,EAAM1J,KACvC,OAAQ3C,KAAKyX,QAAQpL,GAEzB,MAAMoO,EAAoC,IAAlBpO,EAAMqO,QAC9B,OAAO1a,KAAKyX,QAAQpL,IAAUoO,CAClC,CAMA,QAAA/C,EAASuB,EAAEA,EAAC/V,EAAEA,IACV,MAAM0V,IAAEA,EAAGD,KAAEA,EAAIgC,OAAEA,EAAMC,MAAEA,GAAU5a,KAAKiY,wBAC1C,OAAOgB,GAAKN,GAAQM,GAAK2B,GAAS1X,GAAK0V,GAAO1V,GAAKyX,CACvD,CACA,OAAAlD,EAAQoD,YAAEA,IACN,MAAuB,UAAhBA,CACX,CAEA,iBAAMlF,CAAYtJ,GACd,IAAI+J,IAAeP,QAInB,OAAQxJ,EAAM1J,MACV,IAAK,QACD3C,KAAKoM,cACL,MACJ,IAAK,cACDpM,KAAK8X,oBACL,MACJ,IAAK,gBACD9X,KAAK6X,oBAAoBxL,GACzB,MACJ,IAAK,oBACKrM,KAAKwX,kBAAkBnL,GAC7B,MACJ,IAAK,eACDrM,KAAK8W,mBAAmBzK,GACxB,MACJ,IAAK,eACDrM,KAAKgX,mBAAmB3K,GACxB,MACJ,IAAK,YACDrM,KAAKkX,gBAAgB7K,GAKjC,CACA,eAAA4I,CAAgBa,EAAMC,GAClB,IAAI3B,EAEJ,IAAK,MAAM/H,KAASgJ,GAChBS,GAAMrK,oBAAoBY,EAAOrM,MACjC+V,GAAMvK,iBAAiBa,EAAOrM,KAEtC,EAEJvC,EAAW,CACP8M,EAAS,CAAE5H,KAAMV,QAASa,SAAS,KACpCwT,GAAO7W,UAAW,gBAAY,GACjChC,EAAW,CACPkG,KACD2S,GAAO7W,UAAW,eAAW,GAChChC,EAAW,CACPkG,KACD2S,GAAO7W,UAAW,eAAW,GAChChC,EAAW,CACPqd,EAAM,aACPxE,GAAO7W,UAAW,cAAU;;;;;;AC9ZxB,MAAMoF,GAAS6F,CAAI;;;;;;ICe1B,IAAIqQ,GAAW,cAAuBzE;;;;;;ACoC/B,SAAS0E,GAAkB3O,GAE9B,OAAIA,EAAMsC,gBAAkBtC,EAAM1O,SAI9B0O,EAAMgH,eAAe,KAAOhH,EAAM1O,UAKlC0O,EAAM1O,OAAO4L,WAQrB,SAAsB8C,GAClB,MAAM4O,EAAYC,GACdD,IACA5O,EAAM+C,iBACN/C,EAAM8O,4BAGV,OAIJC,iBACIF,IAAqB,QAGf,KACNA,IAAqB,CACzB;;;;;GAXIG,GACOJ,CACX,CAZYK,CAAajP,IACzB,CDlDA0O,GAASlW,OAAS,CAACA,IACnBkW,GAAWtd,EAAW,CAClB+M,EAAc,cACfuQ,IC4DH,IAAIG,IAAqB,ECpElB,MAAMK,GAAY3b,OAAO,aAE1B4b,GAAmB5b,OAAO;;;;;;ACVzB,MAAM6b,GAAkB7b,OAAO,mBAKzB8b,GAAoB9b,OAAO,qBAElC+b,GAAmB/b,OAAO,oBAC1Bgc,GAAsBhc,OAAO,uBAC7Bic,GAAiCjc,OAAO;;;;;;ACTvC,MAAMkc,GAAclc,OAAO,eAC5Bmc,GAAqBnc,OAAO,sBAC5Boc,GAAmBpc,OAAO,oBAC1Bqc,GAAqBrc,OAAO,sBAC5Bsc,GAAiBtc,OAAO;;;;;;ACJvB,MAAMuc,GAAevc,OAAO,gBAItBwc,GAAexc,OAAO;;;;;;ACC5B,MAAMyc,GAOT,WAAAtc,CAAYuc,GACRtc,KAAKsc,gBAAkBA,EAKvBtc,KAAKuc,gBAAkB,CACnBC,SAAU,CAAA,EACVC,kBAAmB,GAE3B,CAWA,WAAAC,GACI,MAAM/Y,EAAQ3D,KAAKsc,kBAEnB,MADyBtc,KAAK2c,YAAc3c,KAAK4c,OAAO5c,KAAK2c,UAAWhZ,IAEpE,OAAO3D,KAAKuc,gBAEhB,MAAMC,SAAEA,EAAQC,kBAAEA,GAAsBzc,KAAK6c,gBAAgBlZ,GAmB7D,OAlBA3D,KAAK2c,UAAY3c,KAAK8c,KAAKnZ,GAC3B3D,KAAKuc,gBAAkB,CACnBE,oBACAD,SAAU,CAGNO,SAAUP,EAASO,SACnBC,YAAaR,EAASQ,YACtBC,gBAAiBT,EAASS,gBAC1BC,cAAeV,EAASU,cACxBC,eAAgBX,EAASW,eACzBC,aAAcZ,EAASY,aACvBC,QAASb,EAASa,QAClBC,SAAUd,EAASc,SACnBC,aAAcf,EAASe,aACvBC,aAAchB,EAASgB,eAGxBxd,KAAKuc,eAChB;;;;;GC5DG,MAAMkB,WAAuBpB,GAChC,eAAAQ,CAAgBa,GACP1d,KAAK2d,eAEN3d,KAAK2d,aAAe/c,SAASC,cAAc,SAC3Cb,KAAK2d,aAAahb,KAAO,QAEzB3C,KAAK2d,aAAa/U,KAAO,SAE7B,IAAIgV,GAAa,EACbC,GAAY,EAChB,IAAK,MAAMjQ,QAAEA,EAAOvE,SAAEA,KAAcqU,EAC5BrU,IACAuU,GAAa,GAEbhQ,IACAiQ,GAAY,GASpB,OAFA7d,KAAK2d,aAAa/P,QAAUiQ,EAC5B7d,KAAK2d,aAAatU,SAAWuU,EACtB,CACHpB,SAAU,CACNgB,aAAcI,IAAeC,GAEjCpB,kBAAmBzc,KAAK2d,aAAalB,kBAE7C,CACA,MAAAG,CAAOkB,EAAWC,GACd,GAAID,EAAU7f,SAAW8f,EAAU9f,OAC/B,OAAO,EAEX,IAAK,IAAIM,EAAI,EAAGA,EAAIuf,EAAU7f,OAAQM,IAAK,CACvC,MAAMuX,EAAOgI,EAAUvf,GACjBwX,EAAOgI,EAAUxf,GACvB,GAAIuX,EAAKlI,UAAYmI,EAAKnI,SAAWkI,EAAKzM,WAAa0M,EAAK1M,SACxD,OAAO,CAEf,CACA,OAAO,CACX,CACA,IAAAyT,CAAKY,GAGD,OAAOA,EAAO/c,KAAI,EAAGiN,UAASvE,eAAU,CACpCuE,UACAvE,cAER;;;;;GCvBG,MAAM2U,GAKT,YAAIC,GACA,MAAMrV,EAAO5I,KAAK0U,KAAKC,aAAa,QACpC,OAAK/L,GAAS5I,KAAKke,MAASle,KAAK0U,KAAKtO,YAK/BlE,MAAMic,KAAKne,KAAKke,KAAK9M,iBAAiB,UAAUxI,QAJ5C,CAAC5I,KAAK0U,KAKrB,CACA,WAAA3U,CAAY2U,GACR1U,KAAK0U,KAAOA,EACZ1U,KAAKoe,SAAU,EACfpe,KAAKke,KAAO,KACZle,KAAKqe,cAAgB,KACjBre,KAAKoe,SAAU,EACfpe,KAAKse,oBAETte,KAAKue,eAAiB,KAClBve,KAAKoe,SAAU,EACfpe,KAAKse,oBAOTte,KAAK2P,cAAiBtD,IAClB,MAAMmS,EAAuB,cAAdnS,EAAMzO,IACf6gB,EAAqB,YAAdpS,EAAMzO,IACb8gB,EAAuB,cAAdrS,EAAMzO,IACf+gB,EAAwB,eAAdtS,EAAMzO,IAEtB,KAAK8gB,GAAWC,GAAYH,GAAWC,GACnC,OAGJ,MAAMG,EAAW5e,KAAKie,SACtB,IAAKW,EAAS3gB,OACV,OAIJoO,EAAM+C,iBAEN,MACMyP,EADkD,QAA1CC,iBAAiB9e,KAAK0U,MAAMqK,UACjBL,GAAUF,EAASG,GAAWH,EACjDQ,EAAYJ,EAASK,QAAQjf,KAAK0U,MACxC,IAAIwK,EAAYL,EAAWG,EAAY,EAAIA,EAAY,EAGvD,KAAOE,IAAcF,GAAW,CACxBE,GAAaN,EAAS3gB,OAEtBihB,EAAY,EAEPA,EAAY,IAEjBA,EAAYN,EAAS3gB,OAAS,GAIlC,MAAMkhB,EAAcP,EAASM,GAC7B,IAAIC,EAAY9X,aAAa,YAA7B,CAUA,IAAK,MAAM+X,KAAWR,EACdQ,IAAYD,IACZC,EAAQxR,SAAU,EAClBwR,EAAQC,UAAW,EACnBD,EAAQE,QAIhBH,EAAYvR,SAAU,EACtBuR,EAAYE,SAAW,EACvBF,EAAY5L,QAGZ4L,EAAYzS,cAAc,IAAIoB,MAAM,SAAU,CAAEhB,SAAS,KACzD,KAhBA,CAPQ+R,EACAK,IAGAA,GAoBZ,EAER,CACA,aAAA7Y,GACIrG,KAAKke,KAAOle,KAAK0U,KAAKG,cACtB7U,KAAK0U,KAAKlJ,iBAAiB,UAAWxL,KAAK2P,eAC3C3P,KAAK0U,KAAKlJ,iBAAiB,UAAWxL,KAAKqe,eAC3Cre,KAAK0U,KAAKlJ,iBAAiB,WAAYxL,KAAKue,gBACxCve,KAAK0U,KAAK9G,SAGV5N,KAAKuf,kBAGTvf,KAAKse,kBACT,CACA,gBAAAvX,GACI/G,KAAK0U,KAAKjJ,oBAAoB,UAAWzL,KAAK2P,eAC9C3P,KAAK0U,KAAKjJ,oBAAoB,UAAWzL,KAAKqe,eAC9Cre,KAAK0U,KAAKjJ,oBAAoB,WAAYzL,KAAKue,gBAE/Cve,KAAKse,mBACLte,KAAKke,KAAO,IAChB,CAKA,mBAAAsB,GACSxf,KAAK0U,KAAK9G,UAGf5N,KAAKuf,kBACLvf,KAAKse,mBACT,CACA,eAAAiB,GACI,IAAK,MAAMH,KAAWpf,KAAKie,SACnBmB,IAAYpf,KAAK0U,OACjB0K,EAAQxR,SAAU,EAG9B,CAIA,gBAAA0Q,GAGI,MAAMM,EAAW5e,KAAKie,SAChBwB,EAAiBb,EAASc,MAAMN,GAAYA,EAAQxR,UAE1D,GAAI6R,GAAkBzf,KAAKoe,QAA3B,CACI,MAAMuB,EAAYF,GAAkBzf,KAAK0U,KACzCiL,EAAUN,SAAW,EACrB,IAAK,MAAMD,KAAWR,EACdQ,IAAYO,IACZP,EAAQC,UAAW,EAI/B,MAEA,IAAK,MAAMD,KAAWR,EAClBQ,EAAQC,SAAW,CAE3B;;;;;GC/LJ,IAAIO,GAcJ,MAAMC,GAAUjgB,OAAO,WACvB,IAAIkgB,GAAS,EAEb,MAAMC,GN+BC,SAAmCC,GACtC,IAAIJ,EACJ,MAAMK,UAAoCD,EACtC,WAAAjgB,GACIqF,SAASpH,WAKTgC,KAAK4f,GAAM,EACf,CACA,YAAIpD,GAEA,OADAxc,KAAK4b,MACE5b,KAAKub,IAAWiB,QAC3B,CACA,qBAAIC,GAEA,OADAzc,KAAK4b,MACE5b,KAAKub,IAAWkB,iBAC3B,CACA,gBAAIyD,GAEA,OADAlgB,KAAK4b,MACE5b,KAAKub,IAAW2E,YAC3B,CACA,aAAAC,GAEI,OADAngB,KAAK4b,MACE5b,KAAKub,IAAW4E,eAC3B,CACA,cAAAC,GAEI,OADApgB,KAAK4b,MACE5b,KAAKub,IAAW6E,gBAC3B,CACA,iBAAAC,CAAkB7W,GACdxJ,KAAK6b,IAAkCrS,EACvCxJ,KAAK4b,KACT,CACA,aAAAzX,CAAcyE,EAAM0X,EAAUC,GAC1Bnb,MAAMjB,cAAcyE,EAAM0X,EAAUC,GACpCvgB,KAAK4b,KACT,CACA,YAAAxT,CAAa4N,GACT5Q,MAAMgD,aAAa4N,GAcnBhW,KAAK4b,KACT,CACA,EAAEgE,EAAK/D,GAAgCD,OACnC,GAAIxH,EACA,OAECpU,KAAK2b,MACN3b,KAAK2b,IAAoB3b,KAAKyb,OAElC,MAAMe,SAAEA,EAAUC,kBAAmB+D,GAA+BxgB,KAAK2b,IAAkBe,cACrFM,IAAgBhd,KAAK6b,IACrBY,EAAoBzc,KAAK6b,KAAmC2E,EAClExgB,KAAKub,IAAWkF,YAAY,IAAKjE,EAAUQ,eAAeP,EAAmBzc,KAAK0b,YAAwBtN,EAC9G,CACA,CAACqN,MACG,MAAM,IAAIvb,MAAM,8BACpB,CACA,CAACwb,MACG,MAAM,IAAIxb,MAAM,gCACpB,EAEJ,OAAO+f,CACX,CM3GuBS,CJwEhB,SAA6BV,GAChC,MAAMW,UAA8BX,EAChC,QAAI1T,GACA,OAAOtM,KAAKub,IAAWjP,IAC3B,CACA,UAAIsU,GACA,OAAO5gB,KAAKub,IAAWqF,MAC3B,CAOA,QAAIhY,GACA,OAAO5I,KAAK2U,aAAa,SAAW,EACxC,CACA,QAAI/L,CAAKA,GAEL5I,KAAKgB,aAAa,OAAQ4H,EAG9B,CACA,YAAIW,GACA,OAAOvJ,KAAKqH,aAAa,WAC7B,CACA,YAAIkC,CAASA,GACTvJ,KAAK6gB,gBAAgB,WAAYtX,EAGrC,CACA,wBAAAvC,CAAyB4B,EAAMkY,EAAK1X,GAShC,GAAa,SAATR,GAA4B,aAATA,EAOvBxD,MAAM4B,yBAAyB4B,EAAMkY,EAAK1X,OAP1C,CAEI,MAAMkX,EAAoB,aAAT1X,EAA8B,OAARkY,EAAeA,EAEtD9gB,KAAKmE,cAAcyE,EAAM0X,EAE7B,CAEJ,CACA,aAAAnc,CAAcyE,EAAM0X,EAAUC,GAC1Bnb,MAAMjB,cAAcyE,EAAM0X,EAAUC,GAMpCvgB,KAAKub,IAAWwF,aAAa/gB,KAAKmc,MAAiBnc,KAAKoc,MAC5D,CACA,CAACD,MAGG,MAAM,IAAIjc,MAAM,2BACpB,CACA,CAACkc,MACG,OAAOpc,KAAKmc,KAChB,CACA,oBAAA6E,CAAqBzX,GACjBvJ,KAAKuJ,SAAWA,CACpB,EAUJ,OAPAoX,EAAsBM,gBAAiB,EACvCxjB,EAAW,CACP8M,EAAS,CAAEvG,YAAY,KACxB2c,EAAsBlhB,UAAW,OAAQ,MAC5ChC,EAAW,CACP8M,EAAS,CAAE5H,KAAMV,QAAS+B,YAAY,KACvC2c,EAAsBlhB,UAAW,WAAY,MACzCkhB,CACX,CIvJiDO,EPSXlB,GEC/B,SAAwBA,GAC3B,IAAIJ,EAAIuB,EAAIC,EACZ,MAAMC,UAAyBrB,EAC3B,WAAAjgB,GACIqF,SAASpH,WACTgC,KAAK4f,IAAM,EACX5f,KAAKmhB,GAAM,KACXnhB,KAAKohB,IAAM,CACf,CACA,IAAKtF,MACD,OAAO9b,KAAK+b,GAChB,CACA,IAAKD,IAAa1S,GACVpJ,KAAK8b,MAAiB1S,IAG1BpJ,KAAK+b,IAAsB3S,EAC3BpJ,KAAKkc,MACT,CACA,iBAAArV,GACIzB,MAAMyB,oBACN7G,KAAKkc,KACT,CACA,wBAAAlV,CAAyB4B,EAAMkY,EAAK1X,GAChC,GAAa,aAATR,GAKJ,GADA5I,KAAKmE,cAAc,WAAY7B,OAAOwe,IAAO,KACzC9gB,KAAKic,IAIT,OAAKjc,KAAKqH,aAAa,iBAMvBrH,KAAKgc,IAAoBhc,KAAKqf,WAJ1Brf,KAAKgc,IAAoB,UACzBhc,KAAKkc,YAXL9W,MAAM4B,yBAAyB4B,EAAMkY,EAAK1X,EAelD,CACA,EAAEwW,EAAK7D,GAAoBoF,EAAKnF,GAAkBoF,EAAKnF,GAAoBC,OACvE,MAAMoF,EAAmBthB,KAAK8b,IAAe,GAAI,EAC3CyF,EAAmBvhB,KAAKgc,KAAqBsF,EACnDthB,KAAKic,KAAsB,EAC3Bjc,KAAKqf,SAAWkC,EAChBvhB,KAAKic,KAAsB,CAC/B,EAKJ,OAHAxe,EAAW,CACP8M,EAAS,CAAEvG,YAAY,KACxBqd,EAAiB5hB,UAAW,gBAAY,GACpC4hB,CACX,CK/D2FG,CAAexY,GPUtG,cAA0CgX,GACtC,IAAKzE,MAOD,OAJKvb,KAAKwb,MAENxb,KAAKwb,IAAoBxb,KAAKyhB,mBAE3BzhB,KAAKwb,GAChB,MAVD,IAA+BwE,GOA/B,MAAM0B,WAAc3B,GAIvB,WAAInS,GACA,OAAO5N,KAAK6f,GAChB,CACA,WAAIjS,CAAQA,GACR,MAAM+T,EAAa3hB,KAAK4N,QACpB+T,IAAe/T,IAGnB5N,KAAK6f,IAAWjS,EAChB5N,KAAKmE,cAAc,UAAWwd,GAC9B3hB,KAAK4hB,oBAAoBpC,sBAC7B,CACA,WAAAzf,GACIqF,QAGApF,KAAK8f,OAAS,YAAWA,GACzB9f,KAAK4f,KAAM,EAKX5f,KAAKqJ,UAAW,EAIhBrJ,KAAKoJ,MAAQ,KACbpJ,KAAK4hB,oBAAsB,IAAI5D,GAA0Bhe,MACzDA,KAAKgG,cAAchG,KAAK4hB,qBACnBxN,IACDpU,KAAKub,IAAWsG,KAAO,QACvB7hB,KAAKwL,iBAAiB,QAASxL,KAAKoM,YAAYsJ,KAAK1V,OACrDA,KAAKwL,iBAAiB,UAAWxL,KAAK8hB,cAAcpM,KAAK1V,OAEjE,CACA,MAAA4L,GACI,MAAMoB,EAAU,CAAEY,QAAW5N,KAAK4N,SAClC,OAAO/D,CAAK;8BACUuD,EAASJ;;;qBAGlBhN;sBACCA,KAAKuJ;oDACyBvJ;;sBAE9BA,KAAK8f;;;;;;;;;yBASF9f,KAAK8f;;;;;;KAO1B,CACA,OAAAzX,GACIrI,KAAKub,IAAWwG,YAAcnf,OAAO5C,KAAK4N,QAC9C,CACA,iBAAMxB,CAAYC,GACVrM,KAAKuJ,iBAIH,EACF8C,EAAM2V,mBAGNhH,GAAkB3O,IAClBrM,KAAKuT,QAGTvT,KAAK4N,SAAU,EACf5N,KAAK0M,cAAc,IAAIoB,MAAM,SAAU,CAAEhB,SAAS,KAClD9M,KAAK0M,cAAc,IAAIuV,WAAW,QAAS,CAAEnV,SAAS,EAAMD,UAAU,MAC1E,CACA,mBAAMiV,CAAczV,SAEV,EACY,MAAdA,EAAMzO,KAAeyO,EAAM2V,kBAG/BhiB,KAAKkiB,OACT,CACA,EAAEtC,GAAKC,GAAS1D,OACZ,OAAOnc,KAAK4N,QAAU5N,KAAKoJ,MAAQ,IACvC,CACA,CAACgT,MACG,OAAOxZ,OAAO5C,KAAK4N,QACvB,CACA,iBAAAuU,GAGIniB,KAAK4N,QAAU5N,KAAKqH,aAAa,UACrC,CACA,wBAAA+a,CAAyBze,GACrB3D,KAAK4N,QAAoB,SAAVjK,CACnB,CACA,CAAC8X,MACG,OAAO,IAAIgC,IAAe,IACjBzd,KAAK4hB,oBAKH5hB,KAAK4hB,oBAAoB3D,SAFrB,CAACje,OAIpB,CACA,CAAC0b,MACG,OAAO1b,KAAKqiB,SAChB,EAEJ5kB,EAAW,CACP8M,EAAS,CAAE5H,KAAMV,WAClByf,GAAMjiB,UAAW,UAAW,MAC/BhC,EAAW,CACP8M,EAAS,CAAE5H,KAAMV,WAClByf,GAAMjiB,UAAW,gBAAY,GAChChC,EAAW,CACP8M,KACDmX,GAAMjiB,UAAW,aAAS,GAC7BhC,EAAW,CACPqd,EAAM,eACP4G,GAAMjiB,UAAW,iBAAa;;;;;;AC7J1B,MAAMoF,GAAS6F,CAAI;;;;;;ICkB1B,IAAI4X,GAAU,cAAsBZ,KAEpCY,GAAQzd,OAAS,CAACA,IAClByd,GAAU7kB,EAAW,CACjB+M,EAAc,aACf8X,ICzBI,IAAMC,GAAN,cAA0BvZ,EAA1B,WAAAjJ,uBACuBC,KAAA4I,KAAO,cACN5I,KAAA4N,SAAU,EACV5N,KAAAuJ,UAAW,EACXvJ,KAAAwJ,OAAQ,CA+EvC,QA7ESxJ,KAAA6E,OAAS6F,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDjB,CAEF,MAAAkB,GACE,MAAM4W,EAAe,CACnBxiB,KAAK4N,QAAU,UAAY,GAC3B5N,KAAKwJ,MAAQ,QAAU,GACvBxJ,KAAKuJ,SAAW,WAAa,IAC7BkZ,KAAK,KAEP,OAAO5Y,CAAI;sCACwB7J,KAAKuJ,SAAW,WAAa;;iBAEnDvJ,KAAK4I;kBACJ4Z;qBACGxiB,KAAK4N;sBACJ5N,KAAKuJ;;;;gBAIXvJ,KAAK4N,QAAU,KAAO,SAAS5N,KAAKwJ,MAAQ,QAAU;;KAGpE,GAjF4B/L,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA+B2f,GAAA9iB,UAAA,YAAA,GACpBhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAA2BsgB,GAAA9iB,UAAA,eAAA,GAChBhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAA4BsgB,GAAA9iB,UAAA,gBAAA,GACjBhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAAyBsgB,GAAA9iB,UAAA,aAAA,GAJhC8iB,GAAW9kB,EAAA,CADvB+M,EAAc,iBACF+X,ICWN,IAAMG,GAAN,cAA+B3Z,EAA/B,WAAAhJ,uBACuBC,KAAAoJ,MAAyB,GACGpJ,KAAA2iB,aAAe,GAE5C3iB,KAAAugB,QAA0B,GACxBvgB,KAAA4iB,YAAa,EAGzB5iB,KAAA6iB,UAAoB,EACpB7iB,KAAA8iB,kBAAmB,EACnB9iB,KAAA+iB,YAAsB,EAE9B/iB,KAAAgjB,gBAAkC,GAClChjB,KAAAijB,YAAc,GACdjjB,KAAAmL,QAAS,EACTnL,KAAAkjB,kBAAoB,GAErBljB,KAAAmjB,gBAAiC,KA+XjCnjB,KAAAojB,0BAA4BpjB,KAAKqjB,qBAAqB3N,KAAK1V,KA+TrE,QA5rBSA,KAAA6E,OAAS6F,CAAG;MACdsD;MACAC;MACAF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6GClD;;;;;;;;;;;;;;;;;;;;;QAqBAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6CAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAuEAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuFJ,CAEK,MAAA7C,CAAOsb,GAKZ,GAJIA,EAAkB9b,IAAI,aACxBxH,KAAKgjB,gBAAkB,IAAIhjB,KAAKugB,UAG9B+C,EAAkB9b,IAAI,iBAAmB8b,EAAkB9b,IAAI,YAAc8b,EAAkB9b,IAAI,SAAU,CAE/G,GAAIxH,KAAK+iB,WAEP,YADA3d,MAAM4C,OAAOsb,GAIf,MAAMC,EAAcvjB,KAAKoJ,OAASpJ,KAAK2iB,aAEjCa,EAAQxjB,KAAKugB,QAAQb,MAAK+D,GACf,iBAARA,EAAmBA,IAAQF,EAAeE,EAAuBra,QAAUma,IAGhFC,GACFxjB,KAAKijB,YAA+B,iBAAVO,EAAqBA,EAAQA,EAAMva,MAC7DjJ,KAAKoJ,MAAyB,iBAAVoa,EAAqBA,EAAQA,EAAMpa,QAEvDpJ,KAAKijB,YAAc,GACnBjjB,KAAKoJ,MAAQ,GAEjB,CAEAhE,MAAM4C,OAAOsb,EACf,CAEA,iBAAAzc,GACEzB,MAAMyB,oBACN7G,KAAKqjB,uBACLhY,OAAOG,iBAAiB,SAAUxL,KAAKojB,2BACvCxiB,SAAS4K,iBAAiB,QAASxL,KAAK0jB,mBAAmBhO,KAAK1V,MAClE,CAEA,oBAAA8G,GACEuE,OAAOI,oBAAoB,SAAUzL,KAAKojB,2BAC1CxiB,SAAS6K,oBAAoB,QAASzL,KAAK0jB,mBAAmBhO,KAAK1V,OACnEoF,MAAM0B,sBACR,CAIQ,oBAAAuc,GACNrjB,KAAK6iB,SAAWxX,OAAOC,YAAc,GACvC,CAEA,gBAAAqY,CAAiB5kB,GACXiB,KAAK6iB,WACP7iB,KAAKkjB,kBAAoB,IAGvBljB,KAAKuJ,WACTvJ,KAAKmL,QAAUnL,KAAKmL,OACpBnL,KAAKmE,gBACP,CAEA,WAAA0K,CAAY9P,GACV,IAAKiB,KAAK4iB,WAAY,OAEtB5iB,KAAK+iB,YAAa,EAElB,MAAMa,EAAY7kB,EAAEpB,OAA4ByL,MAC1CA,EAAQpJ,KAAKgP,UAAY4U,EAAS3U,MAAM,EAAGjP,KAAKgP,WAAW7J,cAAgBye,EAASze,cAE1FnF,KAAKijB,YAAc7Z,EACnBpJ,KAAKoJ,MAAQ,GAEbpJ,KAAKgjB,gBAAkBhjB,KAAKugB,QAAQsD,QAAOC,IACT,iBAAXA,EAAsBA,EAASA,EAAO7a,OAC9C9D,cAAc+H,SAASlN,KAAKijB,YAAY9d,iBAGvDnF,KAAKmL,QAAS,EAEVnL,KAAKmjB,iBACPY,aAAa/jB,KAAKmjB,iBAGpBnjB,KAAKmjB,gBAAkB9X,OAAOuM,YAAW,KACnC5X,KAAKijB,YAAYhlB,OAAS,GAC5B+B,KAAK0M,cAAc,IAAIC,YAAY,kBAAmB,CACpDC,OAAQ,CAAExD,MAAOpJ,KAAKijB,aACtBnW,SAAS,EACTD,UAAU,OAGb,KAEH7M,KAAKmE,eACP,CAEA,iBAAA6f,CAAkBjlB,GAChBiB,KAAK+iB,YAAa,EAClB,MAAMa,EAAY7kB,EAAEpB,OAA4ByL,MAC1CA,EAAQpJ,KAAKgP,UAAY4U,EAAS3U,MAAM,EAAGjP,KAAKgP,WAAW7J,cAAgBye,EAASze,cAE1FnF,KAAKkjB,kBAAoB9Z,EACzBpJ,KAAKoJ,MAAQ,GAEbpJ,KAAKgjB,gBAAkBhjB,KAAKugB,QAAQsD,QAAOC,IACT,iBAAXA,EAAsBA,EAASA,EAAO7a,OAC9C9D,cAAc+H,SAAS9D,KAGlCpJ,KAAKmjB,iBACPY,aAAa/jB,KAAKmjB,iBAGpBnjB,KAAKmjB,gBAAkB9X,OAAOuM,YAAW,KACnCxO,EAAMnL,OAAS,GACjB+B,KAAK0M,cAAc,IAAIC,YAAY,kBAAmB,CACpDC,OAAQ,CAAExD,SACV0D,SAAS,EACTD,UAAU,OAGb,IACL,CAEO,YAAAoX,CAAaH,GAElB9jB,KAAK+iB,YAAa,EAElB,MAAM3Z,EAA0B,iBAAX0a,EAAsBA,EAASA,EAAO1a,MAE3DpJ,KAAK0M,cAAc,IAAIC,YAAY,kBAAmB,CACpDC,OAAQ,CAAExD,SACV0D,SAAS,EACTD,UAAU,KAGZ7M,KAAKijB,YAAgC,iBAAXa,EAAsBA,EAASA,EAAO7a,MAChEjJ,KAAKoJ,MAAQA,EACbpJ,KAAKmL,QAAS,EAEdnL,KAAKmE,eACP,CAEA,eAAA+f,GACMlkB,KAAKuJ,WAELvJ,KAAK4iB,YAAc5iB,KAAKijB,aAE1BjjB,KAAK+iB,YAAa,EAClB/iB,KAAKijB,YAAc,GACnBjjB,KAAKoJ,MAAQ,GACbpJ,KAAKgjB,gBAAkB,IAAIhjB,KAAKugB,SAChCvgB,KAAK0M,cAAc,IAAIC,YAAY,kBAAmB,CACpDC,OAAQ,CAAExD,MAAO,IACjB0D,SAAS,EACTD,UAAU,KAEZ7M,KAAKmL,QAAS,GAEdnL,KAAKmL,QAAUnL,KAAKmL,OAGtBnL,KAAKmE,gBACP,CAEA,kBAAAuf,CAAmB3kB,GACjB,MAAMpB,EAASoB,EAAEpB,OACXA,aAAkBwmB,OAEnBnkB,KAAKokB,SAASzmB,KACjBqC,KAAKmL,QAAS,EACdnL,KAAKmE,iBAET,CAEA,aAAAwL,CAAc5Q,GACZ,MAAMnB,IAAEA,GAAQmB,EAChB,IAAKiB,KAAKmL,SAAmB,UAARvN,GAA2B,MAARA,GAGtC,OAFAmB,EAAEqQ,sBACFpP,KAAKmL,QAAS,GAIhB,GAAInL,KAAKmL,OACP,GAAY,cAARvN,EACFmB,EAAEqQ,iBACFpP,KAAK8iB,iBAAmBjP,KAAKI,IAAIjU,KAAK8iB,iBAAmB,EAAG9iB,KAAKgjB,gBAAgB/kB,OAAS,GAC1F+B,KAAKmE,qBACA,GAAY,YAARvG,EACTmB,EAAEqQ,iBACFpP,KAAK8iB,iBAAmBjP,KAAKF,IAAI3T,KAAK8iB,iBAAmB,EAAG,GAC5D9iB,KAAKmE,qBACA,GAAY,UAARvG,EAAiB,CAC1BmB,EAAEqQ,iBACF,MAAM0U,EAAS9jB,KAAKgjB,gBAAgBhjB,KAAK8iB,kBACrCgB,GACF9jB,KAAKikB,aAAaH,EAEtB,KAAmB,WAARlmB,IACTmB,EAAEqQ,iBACFpP,KAAKmL,QAAS,EAGpB,CAEQ,kBAAAkZ,GACN,MAAMC,EAAiBtkB,KAAKugB,QAAQb,MAAK+D,GACxB,iBAARA,EAAmBA,IAAQzjB,KAAKoJ,MAASqa,EAAuBra,QAAUpJ,KAAKoJ,QAIxF,OAAIkb,GAA4C,iBAAnBA,GAA+BA,EAAejW,MAAuC,iBAAxBiW,EAAejW,KAGhGxE,CAAI,2CAA2Cya,EAAejW,gBAGhErE,CACT,CAEQ,gBAAAua,CAAiBlW,GACvB,OAAKA,GAAwB,iBAATA,EAGbxE,CAAI,uCAAuCwE,aAHHrE,CAIjD,CAEA,MAAA4B,GACE,MAAMiX,EAAW7iB,KAAK6iB,SAEtB,OAAOhZ,CAAI;6CAC8B7J,KAAKmJ,WAAa,mBAAmBnJ,KAAKmJ,aAAe;UAC3FnJ,KAAK4J;;;wCAGwB5J,KAAKmL,OAAS,UAAY,MAAOnL,KAAKmL,QAAUnL,KAAKgjB,gBAAgB/kB,OAAS,EAAK,OAAS,MAAM4kB,EAAW,SAAW;wCACxH7iB,KAAKuJ,SAAW,WAAa;gBACrDsZ,EACAhZ,CAAI;;;8BAGU7J,KAAK2jB;gCACH3jB,KAAK2P;;;qCAGA3P,KAAKmL;;;;;sBAKpBnL,KAAKqkB;+CACoBrkB,KAAKijB,aAAejjB,KAAKkJ;;kBAGtDW,CAAI;oBACF7J,KAAKqkB;;;;8BAIKrkB,KAAKijB,aAAe;8BACpBjjB,KAAK2jB;gCACH3jB,KAAK2P;6BACR3P,KAAK6O;mCACC7O,KAAKijB,YAAc,GAAKjjB,KAAKkJ;iCAC/BlJ,KAAKuJ;kCACJvJ,KAAK4iB;iCACN5iB,KAAKgP,WAAa;;;;;;0BAOzBhP,KAAKkkB;6BACFlkB,KAAKuJ;;kBAEhBvJ,KAAK4iB,YAAc5iB,KAAKijB,YACtBpZ,CAAI,2DACJ7J,KAAKmL,QAAUnL,KAAKgjB,gBAAgB/kB,OAAS,EAC3C4L,CAAI,8DACJA,CAAI;;;;eAKXgZ,GAAY7iB,KAAKmL,QAAUnL,KAAKgjB,gBAAgB/kB,OAAS,EACxD4L,CAAI;;oBAEA7J,KAAKgjB,gBAAgBriB,KAAI,CAACmjB,EAAQU,KAClC,MAAMvb,EAA0B,iBAAX6a,EAAsBA,EAASA,EAAO7a,MACrDwb,EAA+B,iBAAXX,GAAuBA,EAAOva,SAClD8E,EAAyB,iBAAXyV,EAAsBA,EAAOzV,UAAOD,EAExD,OAAOvE,CAAI;;iCAEE4a,EAAa,WAAa,MAAMD,IAAUxkB,KAAK8iB,iBAAmB,cAAgB;;yCAE1E0B,IAAUxkB,KAAK8iB;kCACtB,KACH2B,GAAYzkB,KAAKikB,aAAaH;;0BAGnC9jB,KAAKukB,iBAAiBlW;0BACtBpF;;;;gBAMVe;;;YAIHhK,KAAKoK;;;UAGPpK,KAAKqK;;;QAGRwY,GAAY7iB,KAAKmL,OACftB,CAAI;iDACmC,KAAQ7J,KAAKmL,QAAS;gDACtBpM,GAAaA,EAAE2lB;;;;4BAIpC1kB,KAAKkjB,mBAAqB;2BAC1BnkB,GAAaiB,KAAKgkB,kBAAkBjlB;iCAC/BiB,KAAKkJ;+BACPlJ,KAAKgP,WAAa;;6DAEY,KAAQhP,KAAKmL,QAAS;;;;;;kBAMjEnL,KAAKgjB,gBAAgBriB,KAAI,CAACmjB,EAAQU,KAClC,MAAMvb,EAA0B,iBAAX6a,EAAsBA,EAASA,EAAO7a,MACrDwb,EAA+B,iBAAXX,GAAuBA,EAAOva,SAClD8E,EAAyB,iBAAXyV,EAAsBA,EAAOzV,UAAOD,EAExD,OAAOvE,CAAI;;+BAEE4a,EAAa,WAAa,MAAMD,IAAUxkB,KAAK8iB,iBAAmB,cAAgB;;uCAE1E0B,IAAUxkB,KAAK8iB;gCACtB,KACH2B,GAAYzkB,KAAKikB,aAAaH;;wBAGnC9jB,KAAKukB,iBAAiBlW;wBACtBpF;;;;;;UAQde;KAGR,GA7sB4BvM,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMxE,kCAAsCukB,GAAAjjB,UAAA,aAAA,GACAhC,EAAA,CAAvD8M,EAAS,CAAE5H,KAAMC,OAAQF,UAAW,2CAAqCggB,GAAAjjB,UAAA,oBAAA,GAE/ChC,EAAA,CAA1B8M,EAAS,CAAE5H,KAAMT,gCAAsCwgB,GAAAjjB,UAAA,eAAA,GAC3BhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAA6BygB,GAAAjjB,UAAA,kBAAA,GACnBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAML,kCAA6BogB,GAAAjjB,UAAA,iBAAA,GAE9BhC,EAAA,CAAhBkG,8BAA0C+e,GAAAjjB,UAAA,gBAAA,GAC1BhC,EAAA,CAAhBkG,6BAAsC+e,GAAAjjB,UAAA,wBAAA,GACtBhC,EAAA,CAAhBkG,8BAA4C+e,GAAAjjB,UAAA,kBAAA,GAEpChC,EAAA,CAARkG,4BAA6C+e,GAAAjjB,UAAA,uBAAA,GACrChC,EAAA,CAARkG,6BAAyB+e,GAAAjjB,UAAA,mBAAA,GACjBhC,EAAA,CAARkG,6BAAuB+e,GAAAjjB,UAAA,cAAA,GACfhC,EAAA,CAARkG,6BAA+B+e,GAAAjjB,UAAA,yBAAA,GAfrBijB,GAAgBjlB,EAAA,CAD5B+M,EAAc,sBACFkY,IChBb,MAAMiC,GAAe,IAAIjlB,cAEzBilB,GAAarkB,YAAY,gmBCEzB,MAAMskB,WAAyB5b,SAQtBhJ,KAAA6E,OAAS,CACd8f,GACAja,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAsEGC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA0DN,CAEF,qBAAWlG,GACT,MAAO,CACL9B,KAAM,CAAEA,KAAMC,QACdyL,KAAM,CAAE1L,KAAMC,QACd6O,QAAS,CAAE9O,KAAMC,QACjB8O,KAAM,CAAE/O,KAAMV,SACd4iB,SAAU,CAAEliB,KAAMC,OAAQE,SAAS,GAEvC,CAEA,WAAA/C,GACEqF,QAtJFpF,KAAA2C,KAAe,cACf3C,KAAAqO,KAAe,OACfrO,KAAAyR,QAAkB,sBAClBzR,KAAA0R,MAAgB,EAChB1R,KAAA6kB,SAAmB,gBACX7kB,KAAA6iB,UAAW,EAkJjB7iB,KAAK8kB,uBAAyB9kB,KAAK8kB,uBAAuBpP,KAAK1V,KACjE,CAEA,iBAAA6G,GACEzB,MAAMyB,oBACNwE,OAAOG,iBAAiB,SAAUxL,KAAK8kB,wBACvC9kB,KAAK8kB,wBACP,CAEA,oBAAAhe,GACEuE,OAAOI,oBAAoB,SAAUzL,KAAK8kB,wBAC1C1f,MAAM0B,sBACR,CAEA,sBAAAge,GACE,MAAMjC,EAAWxX,OAAOC,YAAc,IACtCtL,KAAK+kB,UAAUrZ,OAAO,SAAUmX,EAClC,CAEA,MAAAjX,GACE,MAAMoZ,EAAyB,UAAdhlB,KAAK2C,MAAkC,YAAd3C,KAAK2C,KAAqB,QAAU,SAC9E,OAAOkH,CAAI;;2BAEY7J,KAAK0R,KAAO,GAAK,YAAY1R,KAAK2C;gBAC7CqiB;;;8BAGchlB,KAAKqO;gCACHrO,KAAKyR;;KAGnC,EAGFvS,eAAeC,OAAO,oBAAqBylB,IC1LpC,IAAMK,GAAN,cAA4Bjc,EAA5B,WAAAjJ,uBACuBC,KAAAklB,WAAa,EACbllB,KAAAmlB,YAAc,CA+G5C,QA7GSnlB,KAAA6E,OAAS6F,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuFjB,CAEF,MAAAkB,GACE,OAAO/B,CAAI;;UAEL3H,MAAMic,KAAK,CAAElgB,OAAQ+B,KAAKklB,aAAc,CAACE,EAAGZ,IAAU3a,CAAI;;0BAE1C2a,EAAQxkB,KAAKmlB,YAAc,YAAcX,IAAUxkB,KAAKmlB,YAAc,SAAW;;cAE7FX,EAAQxkB,KAAKmlB,YACXtb,CAAI,iEACJ2a,IAAUxkB,KAAKmlB,YACftb,CAAI;;;kBAIJA,CAAI;;;;KAKlB,GA/G4BpM,EAAA,CAA3B8M,EAAS,CAAE5H,KAAML,kCAAyB2iB,GAAAxlB,UAAA,kBAAA,GACfhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAML,kCAA0B2iB,GAAAxlB,UAAA,mBAAA,GAFjCwlB,GAAaxnB,EAAA,CADzB+M,EAAc,mBACFya,ICON,IAAMI,GAAN,cAAsBrc,EAAtB,WAAAjJ,uBACsBC,KAAAslB,KAAkB,GACjBtlB,KAAAulB,SAAmB,GAC9BvlB,KAAAwlB,iBAA2B,GAC3BxlB,KAAAylB,UAAW,EACXzlB,KAAA0lB,UAAW,EAEX1lB,KAAA2lB,cAAgB,GAsLzB3lB,KAAA4lB,aAAe,KACrB,MAAMC,EAAU7lB,KAAKmG,WAAW2C,cAAc,gBAC9C,IAAK+c,EAAS,OAEd,MAAMC,WAAEA,EAAUC,YAAEA,EAAWC,YAAEA,GAAgBH,EAEjD7lB,KAAKylB,SAAWK,EAAa,EAC7B9lB,KAAK0lB,SAAWI,EAAaE,EAAcD,EAAc,EA8B7D,QAxNS/lB,KAAA6E,OAAS6F,CAAG;;;;;;;;;;;;;QAabI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAkGEF;;;;GAIN,CAEF,YAAAxC,GACEpI,KAAK4lB,cACP,CAEA,OAAAvd,CAAQ2N,GACFA,EAAQxO,IAAI,cACdxH,KAAKwlB,iBAAmBxlB,KAAKulB,SAEjC,CAEQ,SAAAU,CAAU7c,GAChBpJ,KAAKwlB,iBAAmBpc,EACxB,MAAM8c,EAAclmB,KAAKslB,KAAK5F,MAAKyG,GAAOA,EAAI/c,QAAUA,IACpD8c,GACFlmB,KAAK0M,cAAc,IAAIC,YAAY,aAAc,CAC/CC,OAAQsZ,EACRpZ,SAAS,EACTD,UAAU,IAGhB,CAEQ,cAAAuZ,GACN,MAAMP,EAAU7lB,KAAKmG,WAAW2C,cAAc,gBAC9C,IAAK+c,EAAS,OAEd,MAAMC,EAAaD,EAAQC,WACrBR,EAAOpjB,MAAMic,KAAK0H,EAAQzU,iBAAiB,SAEjD,IAAK,IAAI7S,EAAI+mB,EAAKrnB,OAAS,EAAGM,GAAK,EAAGA,IAAK,CACzC,MACM8nB,EADKf,EAAK/mB,GACG+nB,WAGnB,GAAID,EAAUP,EAAa9lB,KAAK2lB,cAAgB,EAAG,CACjD,MAAMY,EAAeF,EAAUrmB,KAAK2lB,cACpCE,EAAQW,SAAS,CAAE7N,KAAM4N,EAAcE,SAAU,WACjD,KACF,CACF,CAEA7O,YAAW,IAAM5X,KAAK4lB,gBAAgB,IACxC,CAEQ,eAAAc,GACN,MAAMb,EAAU7lB,KAAKmG,WAAW2C,cAAc,gBAC9C,IAAK+c,EAAS,OAEd,MAAMc,EAAcd,EAAQC,WACtBR,EAAOpjB,MAAMic,KAAK0H,EAAQzU,iBAAiB,SAEjD,IAAK,MAAMC,KAAMiU,EACf,GAAIjU,EAAGiV,WAAaK,EAAc3mB,KAAK2lB,cAAe,CACpD,MAAMY,EAAelV,EAAGiV,WAAatmB,KAAK2lB,cAC1CE,EAAQW,SAAS,CAAE7N,KAAM4N,EAAcE,SAAU,WACjD,KACF,CAGF7O,YAAW,IAAM5X,KAAK4lB,gBAAgB,IACxC,CAYA,MAAAha,GACE,OAAO/B,CAAI;;UAEL7J,KAAKylB,SAAW5b,CAAI;sDACwB7J,KAAKomB;;;UAG/C;;2CAE+BpmB,KAAK4lB;YACpC5lB,KAAKslB,KAAK3kB,KAAIwlB,GAAOtc,CAAI;8BACP7J,KAAKwlB,mBAAqBW,EAAI/c,MAAQ,SAAW;yBACtD,IAAMpJ,KAAKimB,UAAUE,EAAI/c;wCACV+c,EAAI9X,cAAc8X,EAAIld;sBACxCkd,EAAIld;;;;;UAKhBjJ,KAAK0lB,SAAW7b,CAAI;sDACwB7J,KAAK0mB;;;UAG/C;;KAGV,GAhO2BjpB,EAAA,CAA1B8M,EAAS,CAAE5H,KAAMT,gCAA8BmjB,GAAA5lB,UAAA,YAAA,GACpBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAgCyiB,GAAA5lB,UAAA,gBAAA,GACjChC,EAAA,CAAhBkG,6BAA8C0hB,GAAA5lB,UAAA,wBAAA,GAC9BhC,EAAA,CAAhBkG,6BAAiC0hB,GAAA5lB,UAAA,gBAAA,GACjBhC,EAAA,CAAhBkG,6BAAiC0hB,GAAA5lB,UAAA,gBAAA,GALvB4lB,GAAO5nB,EAAA,CADnB+M,EAAc,aACF6a,ICTN,MAAMuB,GAA0Blc,CAAG;;;;;;;;;;;;;;;;;;;;ECInC,IAAMmc,GAAN,cAA0B7d,EAA1B,WAAAjJ,uBACsBC,KAAA8mB,MAAgB,GACC9mB,KAAAuJ,UAAW,EAC3BvJ,KAAA+mB,eAAiB,EAE5B/mB,KAAAgnB,SAAU,EACVhnB,KAAAinB,SAAW,EACXjnB,KAAAknB,YAAa,CA+LhC,QA7LSlnB,KAAA6E,OAAS6F,CAAG;MACdkc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAmCCjc;;;;;;;QAOAF;;;;;;;QAOAA;;;;;;;QAOAA;;;;;;;;;;;;;;;;;;;;GAoBJ,CAEM,iBAAM0c,CAAYL,GACxB,GAAI9mB,KAAKgnB,SAAWhnB,KAAKuJ,SAAU,OAGnC,MAAM6d,EAAellB,MAAM4C,QAAQ9E,KAAK8mB,OAAS9mB,KAAK8mB,MAAQ,GACxDvB,EAAWrjB,MAAMic,KAAK2I,GAAS,IAAI7X,MAAM,EAAG,EAAImY,EAAanpB,QAG7DopB,EAAQrnB,KAAK+mB,gBAAkB,EAErC,GAAIM,GAAS,EAGX,OAFArnB,KAAK8mB,MAAQ,IAAIM,KAAiB7B,QAClCvlB,KAAK0M,cAAc,IAAIC,YAAY,gBAAiB,CAAEC,OAAQ5M,KAAK8mB,SAIrE9mB,KAAKgnB,SAAU,EACfhnB,KAAKinB,SAAW,QAGVjnB,KAAKsI,eAEX,MAAMgf,EAAYC,KAAKC,MACjBC,EAAWC,aAAY,KAC3B,MAAMC,EAAcJ,KAAKC,MAAQF,EAC3BM,EAAc/T,KAAKI,IAAIJ,KAAKgU,MAAOF,EAAcN,EAAS,KAAM,KAEtErnB,KAAKinB,SAAWW,EAEZ5nB,KAAKinB,UAAY,MACnBa,cAAcL,GAEdznB,KAAK8mB,MAAQ,IAAIM,KAAiB7B,GAClCvlB,KAAKgnB,SAAU,EACfhnB,KAAKinB,SAAW,EAChBjnB,KAAK0M,cAAc,IAAIC,YAAY,gBAAiB,CAAEC,OAAQ5M,KAAK8mB,YAEpE,GACL,CAEQ,iBAAAiB,CAAkBhpB,GACxB,MAAMpB,EAASoB,EAAEpB,OACjBqC,KAAKmnB,YAAYxpB,EAAOmpB,MAC1B,CAEQ,MAAAkB,CAAOjpB,GACbA,EAAEqQ,iBACGpP,KAAKuJ,WAEVvJ,KAAKknB,YAAa,EAClBlnB,KAAKmnB,YAAYpoB,EAAEkpB,cAAcnB,OAAS,MAC5C,CAEQ,UAAAoB,CAAWnpB,GACjBA,EAAEqQ,iBAEGpP,KAAKuJ,WACVvJ,KAAKknB,YAAa,EACpB,CAEQ,WAAAiB,CAAYppB,GAClBA,EAAEqQ,iBAEGpP,KAAKuJ,WACVvJ,KAAKknB,YAAa,EACpB,CAEA,MAAAtb,GACE,OAAO/B,CAAI;8BACe7J,KAAKknB,WAAa,WAAa;iBAC5ClnB,KAAKgoB;qBACDhoB,KAAKkoB;sBACJloB,KAAKmoB;;;gBAGXnoB,KAAKuJ,SACP,wCACA;;;;;;;;;;;;;;UAcJvJ,KAAKgnB,QACHnd,CAAI;;;+DAG+C7J,KAAKinB;;;YAKxDpd,CAAI;;;8EAG8D7J,KAAK+nB;;;;KAMjF,GApM2BtqB,EAAA,CAA1B8M,EAAS,CAAE5H,KAAMT,gCAA4B2kB,GAAApnB,UAAA,aAAA,GACFhC,EAAA,CAA3C8M,EAAS,CAAE5H,KAAMV,QAASa,SAAS,6BAAyB+jB,GAAApnB,UAAA,gBAAA,GACjChC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAML,kCAA6BukB,GAAApnB,UAAA,sBAAA,GAE9BhC,EAAA,CAAhBkG,6BAAgCkjB,GAAApnB,UAAA,eAAA,GAChBhC,EAAA,CAAhBkG,6BAA6BkjB,GAAApnB,UAAA,gBAAA,GACbhC,EAAA,CAAhBkG,6BAAmCkjB,GAAApnB,UAAA,kBAAA,GAPzBonB,GAAWppB,EAAA,CADvB+M,EAAc,iBACFqc,ICsEN,MAAMuB,GAAqB,OA2IrBC,GAAsBzoB,OAAO0oB,IAAI,qBClLvC,SAASC,GAAcC,EAAMpf,GAClC,MAAoB,mBAATof,EAA4BA,EAAKpf,GAExCof,GAAwB,iBAATA,GAAqBH,MAAuBG,EACtDA,EAAKH,IAAqBjf,GAE/Bof,aAAgBjB,KAAa,IAAIiB,EAAKzoB,YAAYqJ,GAE/C,IAAIme,KAAKne,EAClB,CCNO,SAASqf,GAAOC,EAAUC,GAE/B,OAAOJ,GAAcI,GAAWD,EAAUA,EAC5C,CCVO,SAASE,GAAUJ,EAAMK,EAAQtI,GACtC,MAAMuI,EAAQL,GAAOD,EAAMjI,GAASwI,IACpC,GAAIC,MAAMH,GAAS,OAAON,GAA6BC,EAAMS,KAC7D,IAAKJ,EAEH,OAAOC,EAET,MAAMI,EAAaJ,EAAMK,UAUnBC,EAAoBb,GAA6BC,EAAMM,EAAMO,WACnED,EAAkBE,SAASR,EAAMS,WAAaV,EAAS,EAAG,GAE1D,OAAIK,GADgBE,EAAkBD,UAI7BC,GASPN,EAAMU,YACJJ,EAAkBK,cAClBL,EAAkBG,WAClBL,GAEKJ,EAEX,CCxEA,IAAIY,GAAiB,CAAA,EAEd,SAASC,KACd,OAAOD,EACT,CC8BO,SAASE,GAAYpB,EAAMjI,GAChC,MAAMmJ,EAAiBC,KACjBE,EACJtJ,GAASsJ,cACTtJ,GAASuJ,QAAQvJ,SAASsJ,cAC1BH,EAAeG,cACfH,EAAeI,QAAQvJ,SAASsJ,cAChC,EAEIf,EAAQL,GAAOD,EAAMjI,GAASwI,IAC9BgB,EAAMjB,EAAMkB,SACZC,GAAQF,EAAMF,EAAe,EAAI,GAAKE,EAAMF,EAIlD,OAFAf,EAAMoB,QAAQpB,EAAMK,UAAYc,GAChCnB,EAAMqB,SAAS,EAAG,EAAG,EAAG,GACjBrB,CACT,CCpBO,SAASsB,GAAe5B,EAAMjI,GACnC,OAAOqJ,GAAYpB,EAAM,IAAKjI,EAASsJ,aAAc,GACvD,CCJO,SAASQ,GAAe7B,EAAMjI,GACnC,MAAMuI,EAAQL,GAAOD,EAAMjI,GAASwI,IAC9BuB,EAAOxB,EAAMW,cAEbc,EAA4BhC,GAAcO,EAAO,GACvDyB,EAA0Bf,YAAYc,EAAO,EAAG,EAAG,GACnDC,EAA0BJ,SAAS,EAAG,EAAG,EAAG,GAC5C,MAAMK,EAAkBJ,GAAeG,GAEjCE,EAA4BlC,GAAcO,EAAO,GACvD2B,EAA0BjB,YAAYc,EAAM,EAAG,GAC/CG,EAA0BN,SAAS,EAAG,EAAG,EAAG,GAC5C,MAAMO,EAAkBN,GAAeK,GAEvC,OAAI3B,EAAMO,WAAamB,EAAgBnB,UAC9BiB,EAAO,EACLxB,EAAMO,WAAaqB,EAAgBrB,UACrCiB,EAEAA,EAAO,CAElB,CCpCO,SAASK,GAAgCnC,GAC9C,MAAMM,EAAQL,GAAOD,GACfoC,EAAU,IAAIrD,KAClBA,KAAKsD,IACH/B,EAAMW,cACNX,EAAMS,WACNT,EAAMK,UACNL,EAAMgC,WACNhC,EAAMiC,aACNjC,EAAMkC,aACNlC,EAAMmC,oBAIV,OADAL,EAAQM,eAAepC,EAAMW,gBACrBjB,GAAQoC,CAClB,CC1BO,SAASO,GAAexC,KAAYyC,GACzC,MAAMC,EAAY9C,GAAc7S,KAC9B,KACW0V,EAAM1L,MAAM8I,GAAyB,iBAATA,KAEzC,OAAO4C,EAAMzqB,IAAI0qB,EACnB,CCoBO,SAASC,GAAW9C,EAAMjI,GAC/B,MAAMuI,EAAQL,GAAOD,EAAMjI,GAASwI,IAEpC,OADAD,EAAMqB,SAAS,EAAG,EAAG,EAAG,GACjBrB,CACT,CCJO,SAASyC,GAAS/C,EAAMK,EAAQtI,GACrC,OAAOqI,GAAUJ,EAAe,GAATK,EAAatI,EACtC,CCIO,SAASiL,GAAQhD,GACtB,WCHqBpf,EDGHof,aCDCjB,MACC,iBAAVne,GACoC,kBAA1CjL,OAAOsB,UAAUe,SAAS0D,KAAKkF,KDDQ,iBAATof,GAAsBQ,OAAOP,GAAOD,KCHjE,IAAgBpf,CDIvB,CEPO,SAASqiB,GAAajD,EAAMjI,GACjC,MAAMuI,EAAQL,GAAOD,EAAMjI,GAASwI,IAGpC,OAFAD,EAAMoB,QAAQ,GACdpB,EAAMqB,SAAS,EAAG,EAAG,EAAG,GACjBrB,CACT,CClCA,MAAM4C,GAAuB,CAC3BC,iBAAkB,CAChBC,IAAK,qBACLC,MAAO,+BAGTC,SAAU,CACRF,IAAK,WACLC,MAAO,qBAGTE,YAAa,gBAEbC,iBAAkB,CAChBJ,IAAK,qBACLC,MAAO,+BAGTI,SAAU,CACRL,IAAK,WACLC,MAAO,qBAGTK,YAAa,CACXN,IAAK,eACLC,MAAO,yBAGTM,OAAQ,CACNP,IAAK,SACLC,MAAO,mBAGTO,MAAO,CACLR,IAAK,QACLC,MAAO,kBAGTQ,YAAa,CACXT,IAAK,eACLC,MAAO,yBAGTS,OAAQ,CACNV,IAAK,SACLC,MAAO,mBAGTU,aAAc,CACZX,IAAK,gBACLC,MAAO,0BAGTW,QAAS,CACPZ,IAAK,UACLC,MAAO,oBAGTY,YAAa,CACXb,IAAK,eACLC,MAAO,yBAGTa,OAAQ,CACNd,IAAK,SACLC,MAAO,mBAGTc,WAAY,CACVf,IAAK,cACLC,MAAO,wBAGTe,aAAc,CACZhB,IAAK,gBACLC,MAAO,2BC3EJ,SAASgB,GAAkBC,GAChC,MAAO,CAACvM,EAAU,MAEhB,MAAMzN,EAAQyN,EAAQzN,MAAQlQ,OAAO2d,EAAQzN,OAASga,EAAKC,aAE3D,OADeD,EAAKE,QAAQla,IAAUga,EAAKE,QAAQF,EAAKC,cAG5D,CCLA,MAqBaE,GAAa,CACxBzE,KAAMqE,GAAkB,CACtBG,QAvBgB,CAClBE,KAAM,mBACNC,KAAM,aACNC,OAAQ,WACRC,MAAO,cAoBLN,aAAc,SAGhBO,KAAMT,GAAkB,CACtBG,QArBgB,CAClBE,KAAM,iBACNC,KAAM,cACNC,OAAQ,YACRC,MAAO,UAkBLN,aAAc,SAGhBQ,SAAUV,GAAkB,CAC1BG,QAnBoB,CACtBE,KAAM,yBACNC,KAAM,yBACNC,OAAQ,qBACRC,MAAO,sBAgBLN,aAAc,UCpCZS,GAAuB,CAC3BC,SAAU,qBACVC,UAAW,mBACXC,MAAO,eACPC,SAAU,kBACVC,SAAU,cACVhC,MAAO,KCiCF,SAASiC,GAAgBhB,GAC9B,MAAO,CAAC1jB,EAAOmX,KAGb,IAAIwN,EACJ,GAAgB,gBAHAxN,GAASoI,QAAU/lB,OAAO2d,EAAQoI,SAAW,eAG7BmE,EAAKkB,iBAAkB,CACrD,MAAMjB,EAAeD,EAAKmB,wBAA0BnB,EAAKC,aACnDja,EAAQyN,GAASzN,MAAQlQ,OAAO2d,EAAQzN,OAASia,EAEvDgB,EACEjB,EAAKkB,iBAAiBlb,IAAUga,EAAKkB,iBAAiBjB,EAC1D,KAAO,CACL,MAAMA,EAAeD,EAAKC,aACpBja,EAAQyN,GAASzN,MAAQlQ,OAAO2d,EAAQzN,OAASga,EAAKC,aAE5DgB,EAAcjB,EAAKoB,OAAOpb,IAAUga,EAAKoB,OAAOnB,EAClD,CAIA,OAAOgB,EAHOjB,EAAKqB,iBAAmBrB,EAAKqB,iBAAiB/kB,GAASA,GAKzE,CC7DO,SAASglB,GAAatB,GAC3B,MAAO,CAACuB,EAAQ9N,EAAU,MACxB,MAAMzN,EAAQyN,EAAQzN,MAEhBwb,EACHxb,GAASga,EAAKyB,cAAczb,IAC7Bga,EAAKyB,cAAczB,EAAK0B,mBACpBC,EAAcJ,EAAO7K,MAAM8K,GAEjC,IAAKG,EACH,OAAO,KAET,MAAMC,EAAgBD,EAAY,GAE5BE,EACH7b,GAASga,EAAK6B,cAAc7b,IAC7Bga,EAAK6B,cAAc7B,EAAK8B,mBAEpBhxB,EAAMsE,MAAM4C,QAAQ6pB,GA+B9B,SAAmBE,EAAOC,GACxB,IAAK,IAAIlxB,EAAM,EAAGA,EAAMixB,EAAM5wB,OAAQL,IACpC,GAAIkxB,EAAUD,EAAMjxB,IAClB,OAAOA,EAGX,MACF,CArCQmxB,CAAUJ,GAAgBK,GAAYA,EAAQC,KAAKP,KAkB3D,SAAiBQ,EAAQJ,GACvB,IAAK,MAAMlxB,KAAOsxB,EAChB,GACE/wB,OAAOsB,UAAUmE,eAAeM,KAAKgrB,EAAQtxB,IAC7CkxB,EAAUI,EAAOtxB,IAEjB,OAAOA,EAGX,MACF,CA1BQuxB,CAAQR,GAAgBK,GAAYA,EAAQC,KAAKP,KAErD,IAAItlB,EAEJA,EAAQ0jB,EAAKsC,cAAgBtC,EAAKsC,cAAcxxB,GAAOA,EACvDwL,EAAQmX,EAAQ6O,cAEZ7O,EAAQ6O,cAAchmB,GACtBA,EAIJ,MAAO,CAAEA,QAAOimB,KAFHhB,EAAOpf,MAAMyf,EAAczwB,SAI5C,CCnCO,IAA6B6uB,GCc7B,MAAMwC,GAAO,CAClBC,KAAM,QACNC,eP+D4B,CAACC,EAAOC,EAAOnP,KAC3C,IAAIoP,EAEJ,MAAMC,EAAalE,GAAqB+D,GASxC,OAPEE,EADwB,iBAAfC,EACAA,EACU,IAAVF,EACAE,EAAWhE,IAEXgE,EAAW/D,MAAMnc,QAAQ,YAAaggB,EAAMlvB,YAGnD+f,GAASsP,UACPtP,EAAQuP,YAAcvP,EAAQuP,WAAa,EACtC,MAAQH,EAERA,EAAS,OAIbA,GOlFP1C,WAAYA,GACZ8C,eJT4B,CAACN,EAAO3G,EAAOkH,EAAWC,IACtDzC,GAAqBiC,GISrBS,SCyIsB,CACtBC,cAzBoB,CAACC,EAAaH,KAClC,MAAMI,EAAS/tB,OAAO8tB,GAShBE,EAASD,EAAS,IACxB,GAAIC,EAAS,IAAMA,EAAS,GAC1B,OAAQA,EAAS,IACf,KAAK,EACH,OAAOD,EAAS,KAClB,KAAK,EACH,OAAOA,EAAS,KAClB,KAAK,EACH,OAAOA,EAAS,KAGtB,OAAOA,EAAS,MAMhBE,IAAKzC,GAAgB,CACnBI,OA9Jc,CAChBsC,OAAQ,CAAC,IAAK,KACdC,YAAa,CAAC,KAAM,MACpBC,KAAM,CAAC,gBAAiB,gBA4JtB3D,aAAc,SAGhB4D,QAAS7C,GAAgB,CACvBI,OA7JkB,CACpBsC,OAAQ,CAAC,IAAK,IAAK,IAAK,KACxBC,YAAa,CAAC,KAAM,KAAM,KAAM,MAChCC,KAAM,CAAC,cAAe,cAAe,cAAe,gBA2JlD3D,aAAc,OACdoB,iBAAmBwC,GAAYA,EAAU,IAG3CC,MAAO9C,GAAgB,CACrBI,OAzJgB,CAClBsC,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAChEC,YAAa,CACX,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAGFC,KAAM,CACJ,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,aA6HA3D,aAAc,SAGhBhD,IAAK+D,GAAgB,CACnBI,OA7Hc,CAChBsC,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACvCnD,MAAO,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAC5CoD,YAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACxDC,KAAM,CACJ,SACA,SACA,UACA,YACA,WACA,SACA,aAmHA3D,aAAc,SAGhB8D,UAAW/C,GAAgB,CACzBI,OAnHoB,CACtBsC,OAAQ,CACNM,GAAI,IACJC,GAAI,IACJC,SAAU,KACVC,KAAM,IACNC,QAAS,UACTC,UAAW,YACXC,QAAS,UACTC,MAAO,SAETZ,YAAa,CACXK,GAAI,KACJC,GAAI,KACJC,SAAU,WACVC,KAAM,OACNC,QAAS,UACTC,UAAW,YACXC,QAAS,UACTC,MAAO,SAETX,KAAM,CACJI,GAAI,OACJC,GAAI,OACJC,SAAU,WACVC,KAAM,OACNC,QAAS,UACTC,UAAW,YACXC,QAAS,UACTC,MAAO,UAuFPtE,aAAc,OACdiB,iBApF8B,CAChCwC,OAAQ,CACNM,GAAI,IACJC,GAAI,IACJC,SAAU,KACVC,KAAM,IACNC,QAAS,iBACTC,UAAW,mBACXC,QAAS,iBACTC,MAAO,YAETZ,YAAa,CACXK,GAAI,KACJC,GAAI,KACJC,SAAU,WACVC,KAAM,OACNC,QAAS,iBACTC,UAAW,mBACXC,QAAS,iBACTC,MAAO,YAETX,KAAM,CACJI,GAAI,OACJC,GAAI,OACJC,SAAU,WACVC,KAAM,OACNC,QAAS,iBACTC,UAAW,mBACXC,QAAS,iBACTC,MAAO,aAwDPpD,uBAAwB,UDpK1BzK,MEqEmB,CACnB2M,eH1FkCrD,GG0FC,CACjCwB,aAxF8B,wBAyF9BgD,aAxF8B,OAyF9BlC,cAAgBhmB,GAAUmoB,SAASnoB,EAAO,KH5FrC,CAACilB,EAAQ9N,EAAU,MACxB,MAAMkO,EAAcJ,EAAO7K,MAAMsJ,GAAKwB,cACtC,IAAKG,EAAa,OAAO,KACzB,MAAMC,EAAgBD,EAAY,GAE5B+C,EAAcnD,EAAO7K,MAAMsJ,GAAKwE,cACtC,IAAKE,EAAa,OAAO,KACzB,IAAIpoB,EAAQ0jB,GAAKsC,cACbtC,GAAKsC,cAAcoC,EAAY,IAC/BA,EAAY,GAOhB,OAJApoB,EAAQmX,EAAQ6O,cAAgB7O,EAAQ6O,cAAchmB,GAASA,EAIxD,CAAEA,QAAOimB,KAFHhB,EAAOpf,MAAMyf,EAAczwB,WGiF1CsyB,IAAKnC,GAAa,CAChBG,cA3FqB,CACvBiC,OAAQ,UACRC,YAAa,6DACbC,KAAM,8DAyFJlC,kBAAmB,OACnBG,cAxFqB,CACvB8C,IAAK,CAAC,MAAO,YAwFX7C,kBAAmB,QAGrB+B,QAASvC,GAAa,CACpBG,cAzFyB,CAC3BiC,OAAQ,WACRC,YAAa,YACbC,KAAM,kCAuFJlC,kBAAmB,OACnBG,cAtFyB,CAC3B8C,IAAK,CAAC,KAAM,KAAM,KAAM,OAsFtB7C,kBAAmB,MACnBQ,cAAgB5K,GAAUA,EAAQ,IAGpCoM,MAAOxC,GAAa,CAClBG,cAxFuB,CACzBiC,OAAQ,eACRC,YAAa,sDACbC,KAAM,6FAsFJlC,kBAAmB,OACnBG,cArFuB,CACzB6B,OAAQ,CACN,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAGFiB,IAAK,CACH,OACA,MACA,QACA,OACA,QACA,QACA,QACA,OACA,MACA,MACA,MACA,QA0DA7C,kBAAmB,QAGrB7E,IAAKqE,GAAa,CAChBG,cA1DqB,CACvBiC,OAAQ,YACRnD,MAAO,2BACPoD,YAAa,kCACbC,KAAM,gEAuDJlC,kBAAmB,OACnBG,cAtDqB,CACvB6B,OAAQ,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACnDiB,IAAK,CAAC,OAAQ,MAAO,OAAQ,MAAO,OAAQ,MAAO,SAqDjD7C,kBAAmB,QAGrBiC,UAAWzC,GAAa,CACtBG,cAtD2B,CAC7BiC,OAAQ,6DACRiB,IAAK,kFAqDHjD,kBAAmB,MACnBG,cApD2B,CAC7B8C,IAAK,CACHX,GAAI,MACJC,GAAI,MACJC,SAAU,OACVC,KAAM,OACNC,QAAS,WACTC,UAAW,aACXC,QAAS,WACTC,MAAO,WA4CPzC,kBAAmB,SF5GrBrO,QAAS,CACPsJ,aAAc,EACd6H,sBAAuB,IGGpB,SAASC,GAAanJ,EAAMjI,GACjC,MAAMuI,EAAQL,GAAOD,EAAMjI,GAASwI,IAC9BkB,ECYD,SAAkC2H,EAAWC,GAClD,MAAOC,EAAYC,GAAgB5G,GACjC5K,EACAqR,EACAC,GAGIG,EAAkB1G,GAAWwG,GAC7BG,EAAoB3G,GAAWyG,GAE/BG,GACHF,EAAkBrH,GAAgCqH,GAC/CG,GACHF,EAAoBtH,GAAgCsH,GAKvD,OAAOpe,KAAKgU,OAAOqK,EAAiBC,G1ByBL,M0BxBjC,CD/BeC,CAAyBtJ,EEAjC,SAAqBN,EAAMjI,GAChC,MAAM8R,EAAQ5J,GAAOD,EAAMjI,GAASwI,IAGpC,OAFAsJ,EAAM7I,YAAY6I,EAAM5I,cAAe,EAAG,GAC1C4I,EAAMlI,SAAS,EAAG,EAAG,EAAG,GACjBkI,CACT,CFL+CC,CAAYxJ,IAEzD,OADkBmB,EAAO,CAE3B,CGFO,SAASsI,GAAW/J,EAAMjI,GAC/B,MAAMuI,EAAQL,GAAOD,EAAMjI,GAASwI,IAC9BkB,GAAQG,GAAetB,ICExB,SAA4BN,EAAMjI,GACvC,MAAM+J,EAAOD,GAAe7B,EAAMjI,GAC5BiS,EAAkBjK,GAA6BC,EAAM,GAG3D,OAFAgK,EAAgBhJ,YAAYc,EAAM,EAAG,GACrCkI,EAAgBrI,SAAS,EAAG,EAAG,EAAG,GAC3BC,GAAeoI,EACxB,CDRyCC,CAAmB3J,GAK1D,OAAOjV,KAAKgU,MAAMoC,EAAO7B,IAAsB,CACjD,CEMO,SAASsK,GAAYlK,EAAMjI,GAChC,MAAMuI,EAAQL,GAAOD,EAAMjI,GAASwI,IAC9BuB,EAAOxB,EAAMW,cAEbC,EAAiBC,KACjB+H,EACJnR,GAASmR,uBACTnR,GAASuJ,QAAQvJ,SAASmR,uBAC1BhI,EAAegI,uBACfhI,EAAeI,QAAQvJ,SAASmR,uBAChC,EAEIiB,EAAsBpK,GAAchI,GAASwI,IAAMP,EAAM,GAC/DmK,EAAoBnJ,YAAYc,EAAO,EAAG,EAAGoH,GAC7CiB,EAAoBxI,SAAS,EAAG,EAAG,EAAG,GACtC,MAAMK,EAAkBZ,GAAY+I,EAAqBpS,GAEnDqS,EAAsBrK,GAAchI,GAASwI,IAAMP,EAAM,GAC/DoK,EAAoBpJ,YAAYc,EAAM,EAAGoH,GACzCkB,EAAoBzI,SAAS,EAAG,EAAG,EAAG,GACtC,MAAMO,EAAkBd,GAAYgJ,EAAqBrS,GAEzD,OAAKuI,IAAU0B,EACNF,EAAO,GACJxB,IAAU4B,EACbJ,EAEAA,EAAO,CAElB,CC7BO,SAASuI,GAAQrK,EAAMjI,GAC5B,MAAMuI,EAAQL,GAAOD,EAAMjI,GAASwI,IAC9BkB,GAAQL,GAAYd,EAAOvI,ICC5B,SAAyBiI,EAAMjI,GACpC,MAAMmJ,EAAiBC,KACjB+H,EACJnR,GAASmR,uBACTnR,GAASuJ,QAAQvJ,SAASmR,uBAC1BhI,EAAegI,uBACfhI,EAAeI,QAAQvJ,SAASmR,uBAChC,EAEIpH,EAAOoI,GAAYlK,EAAMjI,GACzBuS,EAAYvK,GAAchI,GAASwI,IAAMP,EAAM,GAIrD,OAHAsK,EAAUtJ,YAAYc,EAAM,EAAGoH,GAC/BoB,EAAU3I,SAAS,EAAG,EAAG,EAAG,GACdP,GAAYkJ,EAAWvS,EAEvC,CDhB+CwS,CAAgBjK,EAAOvI,GAKpE,OAAO1M,KAAKgU,MAAMoC,EAAO7B,IAAsB,CACjD,CEnDO,SAAS4K,GAAgB3C,EAAQ4C,GAGtC,OAFa5C,EAAS,EAAI,IAAM,IACjBxc,KAAKqf,IAAI7C,GAAQ7vB,WAAW2yB,SAASF,EAAc,IAEpE,CCWO,MAAMG,GAAkB,CAE7B,CAAAlwB,CAAEslB,EAAMiH,GAUN,MAAM4D,EAAa7K,EAAKiB,cAElBa,EAAO+I,EAAa,EAAIA,EAAa,EAAIA,EAC/C,OAAOL,GAA0B,OAAVvD,EAAiBnF,EAAO,IAAMA,EAAMmF,EAAMxxB,OACnE,EAGA,CAAAq1B,CAAE9K,EAAMiH,GACN,MAAMmB,EAAQpI,EAAKe,WACnB,MAAiB,MAAVkG,EAAgB7sB,OAAOguB,EAAQ,GAAKoC,GAAgBpC,EAAQ,EAAG,EACxE,EAGA9yB,EAAC,CAAC0qB,EAAMiH,IACCuD,GAAgBxK,EAAKW,UAAWsG,EAAMxxB,QAI/C,CAAAwD,CAAE+mB,EAAMiH,GACN,MAAM8D,EAAqB/K,EAAKsC,WAAa,IAAM,EAAI,KAAO,KAE9D,OAAQ2E,GACN,IAAK,IACL,IAAK,KACH,OAAO8D,EAAmBC,cAC5B,IAAK,MACH,OAAOD,EACT,IAAK,QACH,OAAOA,EAAmB,GAE5B,QACE,MAA8B,OAAvBA,EAA8B,OAAS,OAEpD,EAGAlyB,EAAC,CAACmnB,EAAMiH,IACCuD,GAAgBxK,EAAKsC,WAAa,IAAM,GAAI2E,EAAMxxB,QAI3Dw1B,EAAC,CAACjL,EAAMiH,IACCuD,GAAgBxK,EAAKsC,WAAY2E,EAAMxxB,QAIhDy1B,EAAC,CAAClL,EAAMiH,IACCuD,GAAgBxK,EAAKuC,aAAc0E,EAAMxxB,QAIlD0B,EAAC,CAAC6oB,EAAMiH,IACCuD,GAAgBxK,EAAKwC,aAAcyE,EAAMxxB,QAIlD,CAAAwC,CAAE+nB,EAAMiH,GACN,MAAMkE,EAAiBlE,EAAMxxB,OACvB21B,EAAepL,EAAKyC,kBAI1B,OAAO+H,GAHmBnf,KAAKggB,MAC7BD,EAAe/f,KAAKigB,IAAI,GAAIH,EAAiB,IAELlE,EAAMxxB,OAClD,GCjFI81B,GAGM,WAHNA,GAIE,OAJFA,GAKK,UALLA,GAMO,YANPA,GAOK,UAPLA,GAQG,QAiDIC,GAAa,CAExBC,EAAG,SAAUzL,EAAMiH,EAAOS,GACxB,MAAMK,EAAM/H,EAAKiB,cAAgB,EAAI,EAAI,EACzC,OAAQgG,GAEN,IAAK,IACL,IAAK,KACL,IAAK,MACH,OAAOS,EAASK,IAAIA,EAAK,CAAEzd,MAAO,gBAEpC,IAAK,QACH,OAAOod,EAASK,IAAIA,EAAK,CAAEzd,MAAO,WAGpC,QACE,OAAOod,EAASK,IAAIA,EAAK,CAAEzd,MAAO,SAExC,EAGA5P,EAAG,SAAUslB,EAAMiH,EAAOS,GAExB,GAAc,OAAVT,EAAgB,CAClB,MAAM4D,EAAa7K,EAAKiB,cAElBa,EAAO+I,EAAa,EAAIA,EAAa,EAAIA,EAC/C,OAAOnD,EAASC,cAAc7F,EAAM,CAAE4J,KAAM,QAC9C,CAEA,OAAOd,GAAgBlwB,EAAEslB,EAAMiH,EACjC,EAGA0E,EAAG,SAAU3L,EAAMiH,EAAOS,EAAU3P,GAClC,MAAM6T,EAAiB1B,GAAYlK,EAAMjI,GAEnC8T,EAAWD,EAAiB,EAAIA,EAAiB,EAAIA,EAG3D,GAAc,OAAV3E,EAAgB,CAElB,OAAOuD,GADcqB,EAAW,IACK,EACvC,CAGA,MAAc,OAAV5E,EACKS,EAASC,cAAckE,EAAU,CAAEH,KAAM,SAI3ClB,GAAgBqB,EAAU5E,EAAMxxB,OACzC,EAGAq2B,EAAG,SAAU9L,EAAMiH,GAIjB,OAAOuD,GAHa3I,GAAe7B,GAGCiH,EAAMxxB,OAC5C,EAWA8D,EAAG,SAAUymB,EAAMiH,GAEjB,OAAOuD,GADMxK,EAAKiB,cACWgG,EAAMxxB,OACrC,EAGAs2B,EAAG,SAAU/L,EAAMiH,EAAOS,GACxB,MAAMS,EAAU9c,KAAK2gB,MAAMhM,EAAKe,WAAa,GAAK,GAClD,OAAQkG,GAEN,IAAK,IACH,OAAO7sB,OAAO+tB,GAEhB,IAAK,KACH,OAAOqC,GAAgBrC,EAAS,GAElC,IAAK,KACH,OAAOT,EAASC,cAAcQ,EAAS,CAAEuD,KAAM,YAEjD,IAAK,MACH,OAAOhE,EAASS,QAAQA,EAAS,CAC/B7d,MAAO,cACP6V,QAAS,eAGb,IAAK,QACH,OAAOuH,EAASS,QAAQA,EAAS,CAC/B7d,MAAO,SACP6V,QAAS,eAIb,QACE,OAAOuH,EAASS,QAAQA,EAAS,CAC/B7d,MAAO,OACP6V,QAAS,eAGjB,EAGA8L,EAAG,SAAUjM,EAAMiH,EAAOS,GACxB,MAAMS,EAAU9c,KAAK2gB,MAAMhM,EAAKe,WAAa,GAAK,GAClD,OAAQkG,GAEN,IAAK,IACH,OAAO7sB,OAAO+tB,GAEhB,IAAK,KACH,OAAOqC,GAAgBrC,EAAS,GAElC,IAAK,KACH,OAAOT,EAASC,cAAcQ,EAAS,CAAEuD,KAAM,YAEjD,IAAK,MACH,OAAOhE,EAASS,QAAQA,EAAS,CAC/B7d,MAAO,cACP6V,QAAS,eAGb,IAAK,QACH,OAAOuH,EAASS,QAAQA,EAAS,CAC/B7d,MAAO,SACP6V,QAAS,eAIb,QACE,OAAOuH,EAASS,QAAQA,EAAS,CAC/B7d,MAAO,OACP6V,QAAS,eAGjB,EAGA2K,EAAG,SAAU9K,EAAMiH,EAAOS,GACxB,MAAMU,EAAQpI,EAAKe,WACnB,OAAQkG,GACN,IAAK,IACL,IAAK,KACH,OAAO2D,GAAgBE,EAAE9K,EAAMiH,GAEjC,IAAK,KACH,OAAOS,EAASC,cAAcS,EAAQ,EAAG,CAAEsD,KAAM,UAEnD,IAAK,MACH,OAAOhE,EAASU,MAAMA,EAAO,CAC3B9d,MAAO,cACP6V,QAAS,eAGb,IAAK,QACH,OAAOuH,EAASU,MAAMA,EAAO,CAC3B9d,MAAO,SACP6V,QAAS,eAIb,QACE,OAAOuH,EAASU,MAAMA,EAAO,CAAE9d,MAAO,OAAQ6V,QAAS,eAE7D,EAGA+L,EAAG,SAAUlM,EAAMiH,EAAOS,GACxB,MAAMU,EAAQpI,EAAKe,WACnB,OAAQkG,GAEN,IAAK,IACH,OAAO7sB,OAAOguB,EAAQ,GAExB,IAAK,KACH,OAAOoC,GAAgBpC,EAAQ,EAAG,GAEpC,IAAK,KACH,OAAOV,EAASC,cAAcS,EAAQ,EAAG,CAAEsD,KAAM,UAEnD,IAAK,MACH,OAAOhE,EAASU,MAAMA,EAAO,CAC3B9d,MAAO,cACP6V,QAAS,eAGb,IAAK,QACH,OAAOuH,EAASU,MAAMA,EAAO,CAC3B9d,MAAO,SACP6V,QAAS,eAIb,QACE,OAAOuH,EAASU,MAAMA,EAAO,CAAE9d,MAAO,OAAQ6V,QAAS,eAE7D,EAGAgM,EAAG,SAAUnM,EAAMiH,EAAOS,EAAU3P,GAClC,MAAMqU,EAAO/B,GAAQrK,EAAMjI,GAE3B,MAAc,OAAVkP,EACKS,EAASC,cAAcyE,EAAM,CAAEV,KAAM,SAGvClB,GAAgB4B,EAAMnF,EAAMxxB,OACrC,EAGA42B,EAAG,SAAUrM,EAAMiH,EAAOS,GACxB,MAAM4E,EAAUvC,GAAW/J,GAE3B,MAAc,OAAViH,EACKS,EAASC,cAAc2E,EAAS,CAAEZ,KAAM,SAG1ClB,GAAgB8B,EAASrF,EAAMxxB,OACxC,EAGAH,EAAG,SAAU0qB,EAAMiH,EAAOS,GACxB,MAAc,OAAVT,EACKS,EAASC,cAAc3H,EAAKW,UAAW,CAAE+K,KAAM,SAGjDd,GAAgBt1B,EAAE0qB,EAAMiH,EACjC,EAGAsF,EAAG,SAAUvM,EAAMiH,EAAOS,GACxB,MAAM8E,EAAYrD,GAAanJ,GAE/B,MAAc,OAAViH,EACKS,EAASC,cAAc6E,EAAW,CAAEd,KAAM,cAG5ClB,GAAgBgC,EAAWvF,EAAMxxB,OAC1C,EAGAg3B,EAAG,SAAUzM,EAAMiH,EAAOS,GACxB,MAAMgF,EAAY1M,EAAKwB,SACvB,OAAQyF,GAEN,IAAK,IACL,IAAK,KACL,IAAK,MACH,OAAOS,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,cACP6V,QAAS,eAGb,IAAK,QACH,OAAOuH,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,SACP6V,QAAS,eAGb,IAAK,SACH,OAAOuH,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,QACP6V,QAAS,eAIb,QACE,OAAOuH,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,OACP6V,QAAS,eAGjB,EAGA5pB,EAAG,SAAUypB,EAAMiH,EAAOS,EAAU3P,GAClC,MAAM2U,EAAY1M,EAAKwB,SACjBmL,GAAkBD,EAAY3U,EAAQsJ,aAAe,GAAK,GAAK,EACrE,OAAQ4F,GAEN,IAAK,IACH,OAAO7sB,OAAOuyB,GAEhB,IAAK,KACH,OAAOnC,GAAgBmC,EAAgB,GAEzC,IAAK,KACH,OAAOjF,EAASC,cAAcgF,EAAgB,CAAEjB,KAAM,QACxD,IAAK,MACH,OAAOhE,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,cACP6V,QAAS,eAGb,IAAK,QACH,OAAOuH,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,SACP6V,QAAS,eAGb,IAAK,SACH,OAAOuH,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,QACP6V,QAAS,eAIb,QACE,OAAOuH,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,OACP6V,QAAS,eAGjB,EAGA5qB,EAAG,SAAUyqB,EAAMiH,EAAOS,EAAU3P,GAClC,MAAM2U,EAAY1M,EAAKwB,SACjBmL,GAAkBD,EAAY3U,EAAQsJ,aAAe,GAAK,GAAK,EACrE,OAAQ4F,GAEN,IAAK,IACH,OAAO7sB,OAAOuyB,GAEhB,IAAK,KACH,OAAOnC,GAAgBmC,EAAgB1F,EAAMxxB,QAE/C,IAAK,KACH,OAAOiyB,EAASC,cAAcgF,EAAgB,CAAEjB,KAAM,QACxD,IAAK,MACH,OAAOhE,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,cACP6V,QAAS,eAGb,IAAK,QACH,OAAOuH,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,SACP6V,QAAS,eAGb,IAAK,SACH,OAAOuH,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,QACP6V,QAAS,eAIb,QACE,OAAOuH,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,OACP6V,QAAS,eAGjB,EAGApqB,EAAG,SAAUiqB,EAAMiH,EAAOS,GACxB,MAAMgF,EAAY1M,EAAKwB,SACjBoL,EAA6B,IAAdF,EAAkB,EAAIA,EAC3C,OAAQzF,GAEN,IAAK,IACH,OAAO7sB,OAAOwyB,GAEhB,IAAK,KACH,OAAOpC,GAAgBoC,EAAc3F,EAAMxxB,QAE7C,IAAK,KACH,OAAOiyB,EAASC,cAAciF,EAAc,CAAElB,KAAM,QAEtD,IAAK,MACH,OAAOhE,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,cACP6V,QAAS,eAGb,IAAK,QACH,OAAOuH,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,SACP6V,QAAS,eAGb,IAAK,SACH,OAAOuH,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,QACP6V,QAAS,eAIb,QACE,OAAOuH,EAASnG,IAAImL,EAAW,CAC7BpiB,MAAO,OACP6V,QAAS,eAGjB,EAGAlnB,EAAG,SAAU+mB,EAAMiH,EAAOS,GACxB,MACMqD,EADQ/K,EAAKsC,WACgB,IAAM,EAAI,KAAO,KAEpD,OAAQ2E,GACN,IAAK,IACL,IAAK,KACH,OAAOS,EAASW,UAAU0C,EAAoB,CAC5CzgB,MAAO,cACP6V,QAAS,eAEb,IAAK,MACH,OAAOuH,EACJW,UAAU0C,EAAoB,CAC7BzgB,MAAO,cACP6V,QAAS,eAEVxjB,cACL,IAAK,QACH,OAAO+qB,EAASW,UAAU0C,EAAoB,CAC5CzgB,MAAO,SACP6V,QAAS,eAGb,QACE,OAAOuH,EAASW,UAAU0C,EAAoB,CAC5CzgB,MAAO,OACP6V,QAAS,eAGjB,EAGAlmB,EAAG,SAAU+lB,EAAMiH,EAAOS,GACxB,MAAMmF,EAAQ7M,EAAKsC,WACnB,IAAIyI,EASJ,OAPEA,EADY,KAAV8B,EACmBtB,GACF,IAAVsB,EACYtB,GAEAsB,EAAQ,IAAM,EAAI,KAAO,KAGxC5F,GACN,IAAK,IACL,IAAK,KACH,OAAOS,EAASW,UAAU0C,EAAoB,CAC5CzgB,MAAO,cACP6V,QAAS,eAEb,IAAK,MACH,OAAOuH,EACJW,UAAU0C,EAAoB,CAC7BzgB,MAAO,cACP6V,QAAS,eAEVxjB,cACL,IAAK,QACH,OAAO+qB,EAASW,UAAU0C,EAAoB,CAC5CzgB,MAAO,SACP6V,QAAS,eAGb,QACE,OAAOuH,EAASW,UAAU0C,EAAoB,CAC5CzgB,MAAO,OACP6V,QAAS,eAGjB,EAGA2M,EAAG,SAAU9M,EAAMiH,EAAOS,GACxB,MAAMmF,EAAQ7M,EAAKsC,WACnB,IAAIyI,EAWJ,OATEA,EADE8B,GAAS,GACUtB,GACZsB,GAAS,GACGtB,GACZsB,GAAS,EACGtB,GAEAA,GAGftE,GACN,IAAK,IACL,IAAK,KACL,IAAK,MACH,OAAOS,EAASW,UAAU0C,EAAoB,CAC5CzgB,MAAO,cACP6V,QAAS,eAEb,IAAK,QACH,OAAOuH,EAASW,UAAU0C,EAAoB,CAC5CzgB,MAAO,SACP6V,QAAS,eAGb,QACE,OAAOuH,EAASW,UAAU0C,EAAoB,CAC5CzgB,MAAO,OACP6V,QAAS,eAGjB,EAGAtnB,EAAG,SAAUmnB,EAAMiH,EAAOS,GACxB,GAAc,OAAVT,EAAgB,CAClB,IAAI4F,EAAQ7M,EAAKsC,WAAa,GAE9B,OADc,IAAVuK,IAAaA,EAAQ,IAClBnF,EAASC,cAAckF,EAAO,CAAEnB,KAAM,QAC/C,CAEA,OAAOd,GAAgB/xB,EAAEmnB,EAAMiH,EACjC,EAGAgE,EAAG,SAAUjL,EAAMiH,EAAOS,GACxB,MAAc,OAAVT,EACKS,EAASC,cAAc3H,EAAKsC,WAAY,CAAEoJ,KAAM,SAGlDd,GAAgBK,EAAEjL,EAAMiH,EACjC,EAGA8F,EAAG,SAAU/M,EAAMiH,EAAOS,GACxB,MAAMmF,EAAQ7M,EAAKsC,WAAa,GAEhC,MAAc,OAAV2E,EACKS,EAASC,cAAckF,EAAO,CAAEnB,KAAM,SAGxClB,GAAgBqC,EAAO5F,EAAMxxB,OACtC,EAGAu3B,EAAG,SAAUhN,EAAMiH,EAAOS,GACxB,IAAImF,EAAQ7M,EAAKsC,WAGjB,OAFc,IAAVuK,IAAaA,EAAQ,IAEX,OAAV5F,EACKS,EAASC,cAAckF,EAAO,CAAEnB,KAAM,SAGxClB,GAAgBqC,EAAO5F,EAAMxxB,OACtC,EAGAy1B,EAAG,SAAUlL,EAAMiH,EAAOS,GACxB,MAAc,OAAVT,EACKS,EAASC,cAAc3H,EAAKuC,aAAc,CAAEmJ,KAAM,WAGpDd,GAAgBM,EAAElL,EAAMiH,EACjC,EAGA9vB,EAAG,SAAU6oB,EAAMiH,EAAOS,GACxB,MAAc,OAAVT,EACKS,EAASC,cAAc3H,EAAKwC,aAAc,CAAEkJ,KAAM,WAGpDd,GAAgBzzB,EAAE6oB,EAAMiH,EACjC,EAGAhvB,EAAG,SAAU+nB,EAAMiH,GACjB,OAAO2D,GAAgB3yB,EAAE+nB,EAAMiH,EACjC,EAGAgG,EAAG,SAAUjN,EAAMiH,EAAOiG,GACxB,MAAMC,EAAiBnN,EAAKoN,oBAE5B,GAAuB,IAAnBD,EACF,MAAO,IAGT,OAAQlG,GAEN,IAAK,IACH,OAAOoG,GAAkCF,GAK3C,IAAK,OACL,IAAK,KACH,OAAOG,GAAeH,GAOxB,QACE,OAAOG,GAAeH,EAAgB,KAE5C,EAGA1c,EAAG,SAAUuP,EAAMiH,EAAOiG,GACxB,MAAMC,EAAiBnN,EAAKoN,oBAE5B,OAAQnG,GAEN,IAAK,IACH,OAAOoG,GAAkCF,GAK3C,IAAK,OACL,IAAK,KACH,OAAOG,GAAeH,GAOxB,QACE,OAAOG,GAAeH,EAAgB,KAE5C,EAGAI,EAAG,SAAUvN,EAAMiH,EAAOiG,GACxB,MAAMC,EAAiBnN,EAAKoN,oBAE5B,OAAQnG,GAEN,IAAK,IACL,IAAK,KACL,IAAK,MACH,MAAO,MAAQuG,GAAoBL,EAAgB,KAGrD,QACE,MAAO,MAAQG,GAAeH,EAAgB,KAEpD,EAGAM,EAAG,SAAUzN,EAAMiH,EAAOiG,GACxB,MAAMC,EAAiBnN,EAAKoN,oBAE5B,OAAQnG,GAEN,IAAK,IACL,IAAK,KACL,IAAK,MACH,MAAO,MAAQuG,GAAoBL,EAAgB,KAGrD,QACE,MAAO,MAAQG,GAAeH,EAAgB,KAEpD,EAGA72B,EAAG,SAAU0pB,EAAMiH,EAAOiG,GAExB,OAAO1C,GADWnf,KAAKggB,OAAOrL,EAAO,KACHiH,EAAMxxB,OAC1C,EAGAi4B,EAAG,SAAU1N,EAAMiH,EAAOiG,GACxB,OAAO1C,IAAiBxK,EAAMiH,EAAMxxB,OACtC,GAGF,SAAS+3B,GAAoBhiB,EAAQmiB,EAAY,IAC/C,MAAMC,EAAOpiB,EAAS,EAAI,IAAM,IAC1BqiB,EAAYxiB,KAAKqf,IAAIlf,GACrBqhB,EAAQxhB,KAAKggB,MAAMwC,EAAY,IAC/BC,EAAUD,EAAY,GAC5B,OAAgB,IAAZC,EACKF,EAAOxzB,OAAOyyB,GAEhBe,EAAOxzB,OAAOyyB,GAASc,EAAYnD,GAAgBsD,EAAS,EACrE,CAEA,SAAST,GAAkC7hB,EAAQmiB,GACjD,GAAIniB,EAAS,IAAO,EAAG,CAErB,OADaA,EAAS,EAAI,IAAM,KAClBgf,GAAgBnf,KAAKqf,IAAIlf,GAAU,GAAI,EACvD,CACA,OAAO8hB,GAAe9hB,EAAQmiB,EAChC,CAEA,SAASL,GAAe9hB,EAAQmiB,EAAY,IAC1C,MAAMC,EAAOpiB,EAAS,EAAI,IAAM,IAC1BqiB,EAAYxiB,KAAKqf,IAAIlf,GAG3B,OAAOoiB,EAFOpD,GAAgBnf,KAAKggB,MAAMwC,EAAY,IAAK,GAEpCF,EADNnD,GAAgBqD,EAAY,GAAI,EAElD,CCvwBA,MAAME,GAAoB,CAACvH,EAAS/B,KAClC,OAAQ+B,GACN,IAAK,IACH,OAAO/B,EAAWzE,KAAK,CAAE1V,MAAO,UAClC,IAAK,KACH,OAAOma,EAAWzE,KAAK,CAAE1V,MAAO,WAClC,IAAK,MACH,OAAOma,EAAWzE,KAAK,CAAE1V,MAAO,SAElC,QACE,OAAOma,EAAWzE,KAAK,CAAE1V,MAAO,WAIhC0jB,GAAoB,CAACxH,EAAS/B,KAClC,OAAQ+B,GACN,IAAK,IACH,OAAO/B,EAAWK,KAAK,CAAExa,MAAO,UAClC,IAAK,KACH,OAAOma,EAAWK,KAAK,CAAExa,MAAO,WAClC,IAAK,MACH,OAAOma,EAAWK,KAAK,CAAExa,MAAO,SAElC,QACE,OAAOma,EAAWK,KAAK,CAAExa,MAAO,WAoCzB2jB,GAAiB,CAC5B50B,EAAG20B,GACHE,EAlC4B,CAAC1H,EAAS/B,KACtC,MAAMwB,EAAcO,EAAQxL,MAAM,cAAgB,GAC5CmT,EAAclI,EAAY,GAC1BmI,EAAcnI,EAAY,GAEhC,IAAKmI,EACH,OAAOL,GAAkBvH,EAAS/B,GAGpC,IAAI4J,EAEJ,OAAQF,GACN,IAAK,IACHE,EAAiB5J,EAAWM,SAAS,CAAEza,MAAO,UAC9C,MACF,IAAK,KACH+jB,EAAiB5J,EAAWM,SAAS,CAAEza,MAAO,WAC9C,MACF,IAAK,MACH+jB,EAAiB5J,EAAWM,SAAS,CAAEza,MAAO,SAC9C,MAEF,QACE+jB,EAAiB5J,EAAWM,SAAS,CAAEza,MAAO,SAIlD,OAAO+jB,EACJnnB,QAAQ,WAAY6mB,GAAkBI,EAAa1J,IACnDvd,QAAQ,WAAY8mB,GAAkBI,EAAa3J,MCzDlD6J,GAAmB,OACnBC,GAAkB,OAElBC,GAAc,CAAC,IAAK,KAAM,KAAM,QCwBtC,MAAMC,GACJ,wDAIIC,GAA6B,oCAE7BC,GAAsB,eACtBC,GAAoB,MACpBC,GAAgC,WAoS/B,SAASC,GAAO9O,EAAM+O,EAAWhX,GACtC,MAAMmJ,EAAiBC,KACjBG,EAA4BJ,EAAeI,QAAU0N,GAErD9F,EAGJhI,EAAegI,uBACfhI,EAAeI,QAAQvJ,SAASmR,uBAChC,EAEI7H,EAGJH,EAAeG,cACfH,EAAeI,QAAQvJ,SAASsJ,cAChC,EAEI4N,EAAehP,GAAOD,EAAMjI,GAASwI,IAE3C,IAAKyC,GAAQiM,GACX,MAAM,IAAIC,WAAW,sBAGvB,IAAIC,EAAQJ,EACT/T,MAAM0T,IACNv2B,KAAKi3B,IACJ,MAAMC,EAAiBD,EAAU,GACjC,GAAuB,MAAnBC,GAA6C,MAAnBA,EAAwB,CAEpD,OAAOC,EADerB,GAAeoB,IAChBD,EAAW9N,EAAOmD,WACzC,CACA,OAAO2K,KAERnV,KAAK,IACLe,MAAMyT,IACNt2B,KAAKi3B,IAEJ,GAAkB,OAAdA,EACF,MAAO,CAAEG,SAAS,EAAO3uB,MAAO,KAGlC,MAAMyuB,EAAiBD,EAAU,GACjC,GAAuB,MAAnBC,EACF,MAAO,CAAEE,SAAS,EAAO3uB,MAAO4uB,GAAmBJ,IAGrD,GAAI5D,GAAW6D,GACb,MAAO,CAAEE,SAAS,EAAM3uB,MAAOwuB,GAGjC,GAAIC,EAAerU,MAAM6T,IACvB,MAAM,IAAIK,WACR,iEACEG,EACA,KAIN,MAAO,CAAEE,SAAS,EAAO3uB,MAAOwuB,MAIhC9N,EAAOoG,SAAS+H,eAClBN,EAAQ7N,EAAOoG,SAAS+H,aAAaR,EAAcE,IAGrD,MAAMO,EAAmB,CACvBxG,wBACA7H,eACAC,UAGF,OAAO6N,EACJh3B,KAAKw3B,IACJ,IAAKA,EAAKJ,QAAS,OAAOI,EAAK/uB,MAE/B,MAAMqmB,EAAQ0I,EAAK/uB,OD5YlB,SAAkCqmB,GACvC,OAAOsH,GAAgB9H,KAAKQ,EAC9B,CC6YQ,CAC2BA,IDpZ5B,SAAmCA,GACxC,OAAOqH,GAAiB7H,KAAKQ,EAC/B,CCmZA,CACoCA,KD9Y7B,SAAmCA,EAAO6H,EAAQ5oB,GACvD,MAAM0pB,EAKR,SAAiB3I,EAAO6H,EAAQ5oB,GAC9B,MAAM2pB,EAAuB,MAAb5I,EAAM,GAAa,QAAU,oBAC7C,MAAO,SAASA,EAAMtqB,gCAAgCsqB,aAAiB6H,uBAA4Be,oBAA0B3pB,kFAC/H,CARmB+C,CAAQge,EAAO6H,EAAQ5oB,GAExC,GADA6C,QAAQ+mB,KAAKF,GACTpB,GAAY9pB,SAASuiB,GAAQ,MAAM,IAAIiI,WAAWU,EACxD,CC4YQG,CAA0B9I,EAAO8H,EAAW30B,OAAO4lB,IAIrD,OAAOgQ,EADWxE,GAAWvE,EAAM,KAClBgI,EAAchI,EAAO3F,EAAOoG,SAAUgI,MAExDzV,KAAK,GACV,CAEA,SAASuV,GAAmBtpB,GAC1B,MAAM+pB,EAAU/pB,EAAM8U,MAAM2T,IAE5B,OAAKsB,EAIEA,EAAQ,GAAG/oB,QAAQ0nB,GAAmB,KAHpC1oB,CAIX,CCtZO,SAASya,GAAQX,EAAMjI,GAC5B,OAAOkI,GAAOD,EAAMjI,GAASwI,IAAII,SACnC,CCDO,SAASuP,GAAelQ,EAAMjI,GACnC,MAAMuI,EAAQL,GAAOD,EAAMjI,GAASwI,IAC9BuB,EAAOxB,EAAMW,cACbkP,EAAa7P,EAAMS,WACnBqP,EAAiBrQ,GAAcO,EAAO,GAG5C,OAFA8P,EAAepP,YAAYc,EAAMqO,EAAa,EAAG,GACjDC,EAAezO,SAAS,EAAG,EAAG,EAAG,GAC1ByO,EAAezP,SACxB,CCbO,SAAS0P,GAAQrQ,EAAMsQ,GAC5B,OAAQrQ,GAAOD,IAASC,GAAOqQ,EACjC,CCFO,SAASC,GAASvQ,EAAMsQ,GAC7B,OAAQrQ,GAAOD,IAASC,GAAOqQ,EACjC,CCQO,SAASE,GAAYpH,EAAWC,EAAatR,GAClD,MAAOuR,EAAYC,GAAgB5G,GACjC5K,EACAqR,EACAC,GAEF,OACEC,EAAWrI,gBAAkBsI,EAAatI,eAC1CqI,EAAWvI,aAAewI,EAAaxI,UAE3C,CCfO,SAAS0P,GAAWrH,EAAWC,EAAatR,GACjD,MAAOuR,EAAYC,GAAgB5G,GACjC5K,EACAqR,EACAC,GAEF,OAAOC,EAAWrI,gBAAkBsI,EAAatI,aACnD,CCLO,SAASyP,GAAQ1Q,EAAMjI,GAC5B,OCQK,SAAmBqR,EAAWC,GACnC,MAAOsH,EAAWC,GAAcjO,GAC9B5K,EACAqR,EACAC,GAEF,OAAQvG,GAAW6N,MAAgB7N,GAAW8N,EAChD,CDfSC,CACL9Q,GAA6BC,EAAMA,GEChC,SAAsBA,GAC3B,OAAOD,GAAcC,EAAMjB,KAAKC,MAClC,CFFI8R,CAA4B9Q,GAEhC,CG1BO,IAAM+Q,GAAN,cAA8BvwB,EAA9B,WAAAjJ,uBAKuBC,KAAAw5B,aAA4B,KAM5Bx5B,KAAAy5B,SAAiB,IAAIlS,KAEpBvnB,KAAA6iB,UAAW,EAEZ7iB,KAAA05B,cAAwB,EAExB15B,KAAA25B,QAAuB,KACvB35B,KAAA45B,QAAuB,KAMlC55B,KAAA65B,YAA2C,OAkbpD75B,KAAA85B,mBAAsB/6B,IAC5B,MAAMmf,EAAOle,KAAK6U,cACZrF,EAAe0O,GAAMxJ,MAEtBlF,GAAiBzQ,EAAEsU,eAAenG,SAASlN,OAAUjB,EAAEsU,eAAenG,SAASsC,IACpFxP,KAAK0M,cAAc,IAAIC,YAAY,QAAS,CAAEG,SAAS,EAAMD,UAAU,KA2W3E,QAhyBS7M,KAAA6E,OAAS6F,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiEbC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAiDAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+DAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0JAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFJ,CAEK,iBAAAhE,GACLzB,MAAMyB,oBACNjG,SAAS4K,iBAAiB,QAASxL,KAAK85B,mBAC1C,CAEO,oBAAAhzB,GACL1B,MAAM0B,uBACNlG,SAAS6K,oBAAoB,QAASzL,KAAK85B,mBAC7C,CAoBQ,iBAAAC,GACmB,SAArB/5B,KAAK65B,YAAwB75B,KAAK65B,YAAc,QAC/C75B,KAAK65B,YAAc,MAC1B,CAKQ,WAAAG,CACNC,EACAC,EAA8C,MAE9Cl6B,KAAKy5B,SAAWQ,EACZC,IAASl6B,KAAK65B,YAAcK,GAEhCl6B,KAAK0M,cAAc,IAAIC,YAAY,mBAAoB,CAAEC,OAAQ,CAAE4b,KAAMxoB,KAAKy5B,YAChF,CAUQ,cAAAU,CAAepb,GACrB,IAAIkb,EAAUj6B,KAAKy5B,SAEcQ,EAAR,SAArBj6B,KAAK65B,YAAkCO,GAAkBp6B,KAAKy5B,SAAU1a,GAC9C,WAArB/e,KAAK65B,YAAoCQ,GAAiBr6B,KAAKy5B,SAAU1a,GACnEsb,GAAiBr6B,KAAKy5B,SAAsB,GAAZ1a,GAE/C/e,KAAKg6B,YAAYC,EACnB,CAQQ,gBAAAK,CAAiBhQ,GACvB,MAAM2P,EC1eH,SAAiBzR,EAAM8B,EAAM/J,GAClC,MAAM8R,EAAQ5J,GAAOD,EAAMjI,GAASwI,IAGpC,OAAIC,OAAOqJ,GAAe9J,GAA6BC,EAAMS,MAE7DoJ,EAAM7I,YAAYc,GACX+H,EACT,CDkeoBkI,CAAgBv6B,KAAKy5B,SAAUnP,GAC/CtqB,KAAKg6B,YAAYC,EAAS,SAC5B,CAQQ,iBAAAO,CAAkB7B,GACxB,MAAMsB,EEpfH,SAAkBzR,EAAMoI,EAAOrQ,GACpC,MAAMuI,EAAQL,GAAOD,EAAMjI,GAASwI,IAC9BuB,EAAOxB,EAAMW,cACbM,EAAMjB,EAAMK,UAEZsR,EAAWlS,GAA6BC,EAAM,GACpDiS,EAASjR,YAAYc,EAAMsG,EAAO,IAClC6J,EAAStQ,SAAS,EAAG,EAAG,EAAG,GAC3B,MAAMuQ,EAAchC,GAAe+B,GAInC,OADA3R,EAAMQ,SAASsH,EAAO/c,KAAKI,IAAI8V,EAAK2Q,IAC7B5R,CACT,CFueoB6R,CAAiB36B,KAAKy5B,SAAUd,GAChD34B,KAAKg6B,YAAYC,EAAS,OAC5B,CAQQ,cAAAW,CAAe7Q,GACrB/pB,KAAKw5B,aAAezP,EAEpB/pB,KAAK0M,cACH,IAAIC,YAAY,gBAAiB,CAC/BC,OAAQ,CAAE4b,KAAMuB,GAChBjd,SAAS,EACTD,UAAU,IAGhB,CAEQ,iBAAAguB,GACN,MAAO,CACL,QACA,UACA,QACA,QACA,OACA,QACA,QACA,SACA,aACA,UACA,YACA,YAEJ,CAEQ,kBAAAC,GACN,OAAO96B,KAAK66B,oBAAoBl6B,KAAKiwB,GAAUA,EAAMgH,UAAU,EAAG,IACpE,CAEQ,gBAAAmD,GACN,MAAO,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC9C,CAMQ,YAAAC,GACN,MAAMC,EAAaj7B,KAAK66B,oBAExB,IAAIK,EAAqB,GACrBC,GAAuB,EACvBC,GAAuB,EAE3B,GAAyB,UAArBp7B,KAAK65B,YAAyB,CAChC,MAAMwB,EAAYr7B,KAAKy5B,SAAShQ,cAAiBzpB,KAAKy5B,SAAShQ,cAAgB,GACzE6R,EAAUD,EAAY,GAC5BH,EAAa,GAAGG,OAAeC,IAI/BH,EAAcE,IAFEr7B,KAAK25B,QAAU35B,KAAK25B,QAAQlQ,eAAiBrP,KAG7DghB,EAAcE,IAFEt7B,KAAK45B,QAAU55B,KAAK45B,QAAQnQ,cAAgBrP,IAG9D,MAAO,GAAyB,WAArBpa,KAAK65B,YAA0B,CACxCqB,EAAa,GAAGl7B,KAAKy5B,SAAShQ,gBAE9B,MAAM8R,EAAWv7B,KAAKy5B,SAAShQ,cAG/B0R,EAAcI,IAFEv7B,KAAK25B,QAAU35B,KAAK25B,QAAQlQ,eAAiBrP,KAG7DghB,EAAcG,IAFEv7B,KAAK45B,QAAU55B,KAAK45B,QAAQnQ,cAAgBrP,IAG9D,KAAO,CAEL8gB,EAAa,GADKD,EAAWj7B,KAAKy5B,SAASlQ,eACdvpB,KAAKy5B,SAAShQ,gBAEvCzpB,KAAK25B,UAASwB,EAAcK,GAAoBC,GAAqBz7B,KAAKy5B,UAAWgC,GAAqBz7B,KAAK25B,WAAa+B,GAAiB17B,KAAKy5B,SAAUz5B,KAAK25B,UACjK35B,KAAK45B,UAASwB,EAAcI,GAAoBC,GAAqBz7B,KAAKy5B,UAAWgC,GAAqBz7B,KAAK45B,WAAa+B,GAAgB37B,KAAKy5B,SAAUz5B,KAAK45B,SACtK,CAEA,OAAO/vB,CAAI;;;qDAGsC7J,KAAK+5B;oBACtCmB;;cAEe,SAArBl7B,KAAK65B,YACHhwB,CAAI,6EACJA,CAAI;;;;;8CAM0B,IAAM7J,KAAKm6B,gBAAe,gBAAiBgB;;;;8CAI3C,IAAMn7B,KAAKm6B,eAAe,gBAAgBiB;;;;;KAMtF,CAUQ,eAAAQ,GACN,MAAMP,EAAYr7B,KAAKy5B,SAAShQ,cAAiBzpB,KAAKy5B,SAAShQ,cAAgB,GACzEoS,EAAQ35B,MAAMic,KAAK,CAAElgB,OAAQ,KAAM,CAACmnB,EAAG7mB,IAAM88B,EAAY98B,IACzDu9B,EAAe97B,KAAKw5B,aAAex5B,KAAKw5B,aAAa/P,cAAgB,KACrEsS,GAAc,IAAIxU,MAAOkC,cAEzBuS,EAAUh8B,KAAK25B,QAAU35B,KAAK25B,QAAQlQ,eAAiBrP,IACvD6hB,EAAUj8B,KAAK45B,QAAU55B,KAAK45B,QAAQnQ,cAAgBrP,IAE5D,OAAOvQ,CAAI;;UAELgyB,EAAMl7B,KAAKuC,GAIJ2G,CAAI;;uBAFS,gBAAe3G,IAAM44B,EAAe,WAAa54B,IAAM64B,EAAc,UAAY;uBAKxF,IAAM/7B,KAAKs6B,iBAAiBp3B;0BANtBA,EAAI84B,GAAW94B,EAAI+4B;;gBAShC/4B;;;;KAMd,CAUQ,gBAAAg5B,GACN,MAAMjB,EAAaj7B,KAAK86B,qBAClBqB,EAAgBn8B,KAAKw5B,cAAcjQ,WACnC6S,GAAe,IAAI7U,MAAOgC,WAE1BgS,EAAWv7B,KAAKy5B,SAAShQ,cAE/B,OAAO5f,CAAI;;UAELoxB,EAAWt6B,KACX,CAACiwB,EAAOpM,KACN,MAAM6X,EAAiB7X,IAAU4X,EAC3BE,EAAa9X,IAAU2X,GAAiBn8B,KAAKw5B,cAAgB+C,GAAmBv8B,KAAKy5B,SAAUz5B,KAAKw5B,cACpGgD,EAAsBhY,IAAU2X,GAAiBn8B,KAAKw5B,eAAiB+C,GAAmBv8B,KAAKy5B,SAAUz5B,KAAKw5B,cAEpH,IAAI/U,GAAa,EAEbzkB,KAAK25B,SAAW4B,IAAav7B,KAAK25B,QAAQlQ,gBAC9ChF,EAAaD,EAAQxkB,KAAK25B,QAAQpQ,YAE9BvpB,KAAK45B,SAAW2B,IAAav7B,KAAK45B,QAAQnQ,gBAC9ChF,EAAaA,GAAcD,EAAQxkB,KAAK45B,QAAQrQ,YAIhD,OAAO1f,CAAI;;yBAFS,iBAAgByyB,EAAa,WAAaE,EAAsB,qBAAuBH,EAAiB,UAAY;4BAKxH5X;yBACH,IAAMzkB,KAAKw6B,kBAAkBhW;;kBAEpCoM;;;;KAOhB,CAMQ,aAAA6L,GACN,MAAM/B,EAAcgC,GAAuB18B,KAAKy5B,UAC1ChO,EAAegQ,GAAqBz7B,KAAKy5B,UACzCvE,EGlsBDzM,GHksB4BgD,EGlsBflL,GAASwI,IAAIiB,SAD5B,IAAsBzJ,EHqsBzB,MAAMoc,EAAcz6B,MAAMic,KAAK,CAAElgB,OAAsB,IAAdi3B,EAAkB,EAAIA,EAAY,IACzE,IAAM,OAGF0H,EAAO16B,MAAMic,KAAK,CAAElgB,OAAQy8B,IAChC,CAACtV,EAAG7mB,IItsBH,SAAiBiqB,EAAMU,EAAY3I,GACxC,MAAMuI,EAAQL,GAAOD,EAAMjI,GAASwI,IAEpC,OADAD,EAAMoB,QAAQhB,GACPJ,CACT,CJksBgB+T,CAAgBpR,EAAcltB,EAAI,KAGxCu+B,EAAW98B,KAAK+6B,mBAEtB,OAAOlxB,CAAI;;UAELizB,EAASn8B,KAAKopB,GAAQlgB,CAAI,QAAQkgB;;;;UAIlC4S,EAAYh8B,KAAI,IAAMkJ,CAAI;UAC1B+yB,EAAKj8B,KAAKopB,IACV,MAAMgT,EAAgBC,GAAmBjT,GACnCkT,EAAyBj9B,KAAKw5B,aAChCwD,GAAmBh9B,KAAKw5B,cACxB,KAEE/U,EAAczkB,KAAK25B,SAAW+B,GAAiBqB,EAAeC,GAAmBh9B,KAAK25B,WACzF35B,KAAK45B,SAAW+B,GAAgBoB,EAAeC,GAAmBh9B,KAAK45B,UAEpEsD,EAAaC,GAAgBJ,GAG7B1D,EAAY4D,GAChBG,GAAgBL,KAChBK,GAAgBH,GAGZX,EAAajD,GAAa4D,GAC9BzB,GAAoBuB,EAAeE,IACnCV,GAAmBQ,EAAeE,GAapC,OAAOpzB,CAAI;;uBARS,OAAOqzB,EAAa,QAAU,MAChDZ,EACE,WAJwBjD,IAAciD,EAMtC,qBACA;0BAMY7X;uBACH,IAAMzkB,KAAK46B,eAAe7Q;;gBAEjCsT,GAAetT,EAAK;;;;KAMlC,CAQO,MAAAne,GACL,IAAI0xB,EAE6BA,EAAR,SAArBt9B,KAAK65B,YAAkC75B,KAAKy8B,gBAClB,WAArBz8B,KAAK65B,YAAoC75B,KAAKk8B,mBACxCl8B,KAAK47B,kBAEpB,MAAM2B,EAAc1zB,CAAI,GAAG7J,KAAKg7B,yDAAyDsC,IAGzF,OAAIt9B,KAAK6iB,SACAhZ,CAAI;;;mBAGE,IAAM7J,KAAK0M,cAAc,IAAIC,YAAY;;6CAEd5N,GAAaA,EAAE2lB;cAC/C6Y;;;QAOH1zB,CAAI;sDACuC7J,KAAK05B;UACjD6D;;KAGR,GApzB4B9/B,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMxE,kCAA2Co7B,GAAA95B,UAAA,oBAAA,GAMjChC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMxE,yBAAoBopB,OAAkBgS,GAAA95B,UAAA,gBAAA,GAE3BhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAA4Bs3B,GAAA95B,UAAA,gBAAA,GAElBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAML,kCAAoCi3B,GAAA95B,UAAA,qBAAA,GAE1BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMxE,kCAAsCo7B,GAAA95B,UAAA,eAAA,GAC5BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMxE,kCAAsCo7B,GAAA95B,UAAA,eAAA,GAMvChC,EAAA,CAAhBkG,6BAAkE41B,GAAA95B,UAAA,mBAAA,GAxBxD85B,GAAe97B,EAAA,CAD3B+M,EAAc,qBACF+uB,IKON,IAAMiE,GAAN,cAAkCz0B,EAAlC,WAAAhJ,uBAEwBC,KAAAy9B,qBAAsB,EAMtBz9B,KAAA09B,iBAAkB,EAE9B19B,KAAAmL,QAAS,EACTnL,KAAAw5B,aAA4B,KAC5Bx5B,KAAAy5B,SAAiB,IAAIlS,KACrBvnB,KAAA6iB,UAAW,EACX7iB,KAAA05B,cAAwB,EAExB15B,KAAA29B,WAA4B,KAmKrC39B,KAAAojB,0BAA4BpjB,KAAKqjB,qBAAqB3N,KAAM1V,MA6B5DA,KAAA0jB,mBAAuB3kB,IAChBA,EAAEsU,eAEJnG,SAAUlN,QAASA,KAAKmL,QAAS,GA2XhD,QA1jBSnL,KAAA6E,OAAS6F,CAAG;MACdsD;MACAC;MACAF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4DClD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCJ,CAEM,4BAAA+yB,GACJ,MAAO,qDACX,CAMO,iBAAA/2B,GACLzB,MAAMyB,oBACN7G,KAAKqjB,uBAELhY,OAAOG,iBAAiB,SAAUxL,KAAKojB,2BACvCxiB,SAAS4K,iBAAiB,QAASxL,KAAK0jB,mBAC1C,CAMO,oBAAA5c,GACLuE,OAAOI,oBAAoB,SAAUzL,KAAKojB,2BAC1CxiB,SAAS6K,oBAAoB,QAASzL,KAAK0jB,oBAE3Cte,MAAM0B,sBACR,CAMO,YAAAsB,GACLpI,KAAK69B,iBACP,CAQO,OAAAx1B,CAASib,GACTA,EAAkB9b,IAAI,UAAUxH,KAAK89B,WAAY99B,KAAKoJ,QACtDka,EAAkB9b,IAAI,WAAa8b,EAAkB9b,IAAI,WAAWxH,KAAK69B,kBAE9Ez4B,MAAMiD,QAASib,EACjB,CAEQ,eAAAua,GACA79B,KAAK+9B,iBACX/9B,KAAK05B,cAAgB15B,KAAK+9B,eAAe9lB,wBAAwBnF,MACnE,CAUQ,oBAAAuQ,GACNrjB,KAAK6iB,SAAWxX,OAAOC,YAAc,IAErCtL,KAAK69B,iBACP,CAQO,WAAAhvB,CAAa9P,GAClB,MAAM2P,EAA0B3P,EAAEpB,OAClCqC,KAAK29B,WAAajvB,EAAMtF,MACxBpJ,KAAKg+B,sBAAuBtvB,EAAMtF,OAAO,EAC3C,CAmBO,yBAAA60B,CAA2Bl/B,GAC3BiB,KAAKuJ,WACVxK,EAAE2lB,kBAEF1kB,KAAKmL,QAAUnL,KAAKmL,OAEfnL,KAAKw5B,aAAex5B,KAAKy5B,SAAWz5B,KAAKw5B,aACzCx5B,KAAKy5B,SAAW,IAAIlS,KAEzBvnB,KAAKmE,gBACP,CAKO,eAAA+5B,GACLl+B,KAAK29B,WAAa,KAClB39B,KAAKw5B,aAAe,KACpBx5B,KAAKwJ,OAAQ,EACbxJ,KAAKyJ,aAAe,KAEpBzJ,KAAKm+B,aAAc,KACrB,CAKQ,gBAAAC,CAAkBr/B,GACxB,MAAMwmB,EAAWxmB,EAAE6N,OAAO4b,KAC1B,IAAMjD,EAAW,OAIjB,GAF6BvlB,KAAKq+B,cAAe9Y,GAE9B,CACjBvlB,KAAKw5B,aAAejU,EACpBvlB,KAAKy5B,SAAWlU,EAGhB,MAAM+Y,EAAgBhH,GAAQ/R,EAAU,cACxCvlB,KAAK29B,WAAaW,EAElBt+B,KAAKm+B,aAAcG,EACrB,KAAO,CAGL,MAAMA,EAAgBhH,GAAQ/R,EAAU,cACxCvlB,KAAK29B,WAAaW,EAElBt+B,KAAKw5B,aAAe,KACpBx5B,KAAKm+B,aAAc,KACrB,CACF,CAOQ,oBAAAI,CAAsBx/B,GAC5BiB,KAAKy5B,SAAW16B,EAAE6N,OAAO4b,IAC3B,CAQQ,YAAA2V,CAAcK,GACpBx+B,KAAKoJ,MAAQo1B,EAEbx+B,KAAK0M,cAAe,IAAIC,YAAY,gBAAiB,CAAEC,OAAQ,CAAExD,MAAOo1B,MACxEx+B,KAAKmL,QAAS,CAChB,CASQ,UAAA2yB,CAAY10B,GAClB,GAAe,KAAVA,GAA0B,OAAVA,EAOnB,YANMpJ,KAAKwJ,QACTxJ,KAAKw5B,aAAe,KACpBx5B,KAAK29B,WAAa,KAClB39B,KAAKyJ,aAAe,OAMxB,MAAMg1B,EAA0Bz+B,KAAK0+B,WAAYt1B,GAE5Cq1B,GAAcz+B,KAAKq+B,cAAeI,IACrCz+B,KAAKw5B,aAAeiF,EACpBz+B,KAAKy5B,SAAWgF,EAEhBz+B,KAAKwJ,OAAQ,EACbxJ,KAAKyJ,aAAe,KAEpBzJ,KAAKoJ,MAAQkuB,GAAQmH,EAAY,cACjCz+B,KAAK29B,WAAa39B,KAAKoJ,OAEvBpJ,KAAKw5B,aAAeiF,CAExB,CASQ,aAAAJ,CAAe7V,GACrB,IAAMA,EAAO,OAAO,EAOpB,GAJAxoB,KAAKwJ,OAAQ,EACbxJ,KAAKyJ,aAAe,KAGfzJ,KAAK09B,gBAAkB,CAC1B,MAAMiB,ECzUL,SAAkBnW,EAAMK,EAAQtI,GACrC,OAAOgL,GAAS/C,GAAM,GAASjI,EACjC,CDuUqCqe,CAAU,IAAIrX,MAE7C,GAAKsR,GAASrQ,EAAMmW,GAIlB,OAHA3+B,KAAKwJ,OAAQ,EACbxJ,KAAKyJ,aAAe,kCAEb,CAEX,CAKA,IAF4BzJ,KAAK6+B,gBAAiBrW,GAE7B,CACnB,MAAMsW,EAAgE9+B,KAAK++B,qBAK3E,OAHA/+B,KAAKwJ,OAAQ,EACbxJ,KAAKyJ,aAAe,6BAA8Bq1B,GAAOnF,QAAUrC,GAAQwH,EAAMnF,QAAS,cAAiB,QAAUmF,GAAOlF,QAAUtC,GAAQwH,EAAMlF,QAAS,cAAiB,OAEvK,CACT,CAEA,OAAO,CACT,CAYQ,qBAAAoE,CAAuB50B,EAAsB41B,GACnD,GAAKh/B,KAAKuJ,SAAW,OAErB,GAAe,KAAVH,GAA0B,OAAVA,EAMnB,OALApJ,KAAKw5B,aAAe,KACpBx5B,KAAKwJ,OAAQ,EACbxJ,KAAKyJ,aAAe,UAEfu1B,GAAYh/B,KAAKm+B,aAAc,OAItC,MAAMM,EAA0Bz+B,KAAK0+B,WAAYt1B,GAEjD,GAAKq1B,EAAa,CACIz+B,KAAKq+B,cAAeI,IAGtCz+B,KAAKw5B,aAAeiF,EACpBz+B,KAAKy5B,SAAWgF,EAChBz+B,KAAKwJ,OAAQ,EACbxJ,KAAKyJ,aAAe,KAEfu1B,GAAYh/B,KAAKm+B,aAAc7G,GAAQmH,EAAY,iBAGxDz+B,KAAKwJ,OAAQ,EACbxJ,KAAKw5B,aAAe,KAEfwF,GAAYh/B,KAAKm+B,aAAc,MAExC,MACEn+B,KAAKwJ,OAAQ,EACbxJ,KAAKyJ,aAAezJ,KAAK49B,+BACzB59B,KAAKw5B,aAAe,KAEfwF,GAAYh/B,KAAKm+B,aAAc,KAExC,CAUQ,UAAAO,CAAYO,GAElB,MAAMC,EAAgBD,EAAWE,MAAO,KAAMx+B,IAAK2B,QAEnD,GAA8B,IAAzB48B,EAAcjhC,OAAe,CAChC,MAAQ8rB,EAAK6G,EAAOtG,GAAS4U,EAE7B,GAAKnV,GAAO6G,GAAStG,GAAQsG,GAAS,GAAKA,GAAS,IAAMtG,EAAO,IAAO,CACtE,MAAM8U,EAAW,IAAI7X,KAAM+C,EAAMsG,EAAQ,EAAG7G,EAAK,IACjD,GAAKyB,GAAS4T,IAAc9H,GAAQ8H,EAAU,gBAAmBH,EAAa,OAAOG,CACvF,CACF,CAGA,MAAMC,EAAgBJ,EAAWE,MAAM,KAAKx+B,IAAI2B,QAEhD,GAA8B,IAAzB+8B,EAAcphC,OAAe,CAChC,MAAQqsB,EAAMsG,EAAO7G,GAAQsV,EAE7B,GAAK/U,GAAQsG,GAAS7G,GAAO6G,GAAS,GAAKA,GAAS,IAAMtG,EAAO,IAAO,CACtE,MAAM8U,EAAW,IAAI7X,KAAM+C,EAAMsG,EAAQ,EAAG7G,EAAK,IACjD,GAAKyB,GAAS4T,IAAc9H,GAAQ8H,EAAU,gBAAmBH,EAAa,OAAOG,CACvF,CACF,CAEA,OAAO,IACT,CAUQ,gBAAAE,CAAiBL,GACvB,IAAMA,EAAa,OAAO,KAC1B,MAAMtH,EAAkBsH,EAAWE,MAAO,KAAMx+B,IAAK2B,QAErD,GAAsB,IAAjBq1B,EAAM15B,SAAiB+qB,MAAO2O,EAAM,MAAS3O,MAAO2O,EAAM,MAAS3O,MAAO2O,EAAM,IAAO,CAG1F,OADmB,IAAIpQ,KAAMoQ,EAAM,GAAIA,EAAM,GAAK,EAAGA,EAAM,GAAI,GAEjE,CAEA,OAAO,IACT,CAQQ,kBAAAoH,GACN,MAAMQ,EAA0Bv/B,KAAKs/B,iBAAkBt/B,KAAK25B,SACtD6F,EAA0Bx/B,KAAKs/B,iBAAkBt/B,KAAK45B,SAE5D,OAAM2F,GAAeC,EAChBD,GAAcC,GAAc3G,GAAS0G,EAAYC,GAAsB,KAErE,CAAE7F,QAAS4F,EAAY3F,QAAS4F,GAHE,CAAE7F,QAAS,KAAMC,QAAS,KAIrE,CASQ,eAAAiF,CAAiBrW,GACvB,MAAMsW,EAA+D9+B,KAAK++B,qBAG1E,OAAMD,KAGDA,EAAMnF,UAAWZ,GAAUvQ,EAAMsW,EAAMnF,aAGvCmF,EAAMlF,UAAWf,GAASrQ,EAAMsW,EAAMlF,SAG7C,CAKO,MAAAhuB,GACL,MAAM6zB,EAAsBryB,EAAS,CACnC,iBAAiB,EACjBsyB,OAAU1/B,KAAKmL,OACf3B,MAASxJ,KAAKwJ,MACdD,SAAYvJ,KAAKuJ,WAIbo2B,EAAyB,UADA3/B,KAAK8S,OAAS,UAGvCgsB,EAA+D9+B,KAAK++B,qBAE1E,OAAOl1B,CAAI;iDACmC7J,KAAKmJ,WAAa,mBAAoBnJ,KAAKmJ,aAAgB,MAAQw2B;UAC1G3/B,KAAK4J;;;wBAGQ61B;;;;0BAIEz/B,KAAK29B,YAAc;+BACd39B,KAAKkJ;4BACRlJ,KAAKuJ;yBACRvJ,KAAK6O;;;cAGhB7O,KAAKy9B,qBAAuBz9B,KAAKw5B,eAAiBx5B,KAAKuJ,SACrDM,CAAI;;;2BAGO7J,KAAKk+B;;;;gBAKhBl0B;;;;uBAKOhK,KAAKi+B;;;;;;YAMhBj+B,KAAKmL,OACHtB,CAAI;;4BAEU7J,KAAK6iB;gCACD7iB,KAAKw5B;4BACTx5B,KAAKy5B;iCACAz5B,KAAK05B;2BACXoF,GAAOnF;2BACPmF,GAAOlF;yBACT,IAAO55B,KAAKmL,QAAS;oCACVnL,KAAKu+B;iCACRv+B,KAAKo+B;;;cAIxBp0B;;YAGDhK,KAAKoK;;;UAGPpK,KAAKqK;;KAGd,GA5kB4B5M,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAyB46B,GAAA/9B,UAAA,aAAA,GACdhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAAsCu7B,GAAA/9B,UAAA,2BAAA,GAE5BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA2B46B,GAAA/9B,UAAA,eAAA,GACjBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAA2B46B,GAAA/9B,UAAA,eAAA,GAGhBhC,EAAA,CAA5B8M,EAAS,CAAE5H,KAAMV,mCAAmCu7B,GAAA/9B,UAAA,uBAAA,GAEpChC,EAAA,CAAhBkG,6BAA+B65B,GAAA/9B,UAAA,cAAA,GACfhC,EAAA,CAAhBkG,6BAAiD65B,GAAA/9B,UAAA,oBAAA,GACjChC,EAAA,CAAhBkG,oBAA0B4jB,OAAkBiW,GAAA/9B,UAAA,gBAAA,GAC5BhC,EAAA,CAAhBkG,6BAAiC65B,GAAA/9B,UAAA,gBAAA,GACjBhC,EAAA,CAAhBkG,6BAA0C65B,GAAA/9B,UAAA,qBAAA,GAE1BhC,EAAA,CAAhBkG,6BAAiD65B,GAAA/9B,UAAA,kBAAA,GAEfhC,EAAA,CAAlCqd,EAAM,oCAA6C8kB,iBAAepC,GAAA/9B,UAAA,sBAAA,GAlBxD+9B,GAAmB//B,EAAA,CAD/B+M,EAAc,yBACFgzB,IEbN,MAAMqC,GAA+C,CACxD,kBAAmB,MACnB,qBAAsB,cACtB,0EAA2E,eAE3E,aAAc,OACd,YAAa,MAEb,aAAc,gBCKX,IAAMC,GAAN,cAAyB/2B,EAAzB,WAAAhJ,uBAGwBC,KAAA8mB,MAAgB,GACf9mB,KAAA+/B,SAAW,EAEZ//B,KAAAggC,kBAA8B,GAC7BhgC,KAAAigC,YAAc,QAEdjgC,KAAA+S,WAAa,kBAEb/S,KAAA+mB,eAAiB,EAE5B/mB,KAAAgnB,SAAU,EACVhnB,KAAAinB,SAAW,CAyRhC,QArRWjnB,KAAA6E,OAAS6F,CAAG;UACZsD;UACAC;UACAF;UACA6Y;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuCGhc;;;;;;;;;;;;;;;;;;KAkBR,CAEK,OAAAvC,CAAQib,GACXle,MAAMiD,QAAQib,GACdtjB,KAAKkgC,YACT,CAEQ,UAAAA,GACAlgC,KAAK8S,OAAO9S,KAAKuQ,MAAMC,YAAY,sBAAuBxQ,KAAK8S,MACvE,CAQQ,oBAAAqtB,GAEJ,MAAMC,EAAgBpgC,KAAKggC,kBAAkBr/B,KAAIgC,GAAQk9B,GAAkBl9B,IAASA,IAGpF,GAAIy9B,EAAcniC,QAAU,EACxB,OAAOmiC,EAAc3d,KAAK,IAI9B,MAAM4d,EAAWD,EAAcE,MAG/B,MAAO,GAAGF,EAAc3d,KAAK,WAAW4d,GAC5C,CASQ,aAAAE,CAAcC,GAClB,MAAMC,EAAkBzgC,KAAKigC,YAAc,KAAO,KAElD,IAAK,MAAMS,KAAQF,EAAiB,CAChC,GAAIxgC,KAAKggC,kBAAkB/hC,OAAS,IAAM+B,KAAKggC,kBAAkB9yB,SAASwzB,EAAK/9B,MAE3E,OADA3C,KAAKyJ,aAAe,6CAA6CzJ,KAAKmgC,0BAC/D,EAGX,GAAIO,EAAKl6B,KAAOxG,KAAKigC,YAEjB,OADAjgC,KAAKyJ,aAAe,mDAAmDg3B,OAChE,CAEf,CAEA,OAAO,CACX,CAQQ,iBAAMtZ,CAAYL,GAItB,GAHA9mB,KAAKwJ,OAAQ,EACbxJ,KAAKyJ,aAAe,MAEdqd,GAAS9mB,KAAKuJ,UAAYvJ,KAAKgnB,QAAU,OAG/C,MAAM+Y,EAAWz9B,OAAOq+B,SAAS3gC,KAAK+/B,WAAa//B,KAAK+/B,SAAW,EAAI//B,KAAK+/B,SAAW,EACjFxa,EAAWrjB,MAAMic,KAAK2I,GACtB8Z,EAAiBb,EAAW//B,KAAK8mB,MAAM7oB,OAE7C,GAAK2iC,GAAkB,EAInB,OAHA5gC,KAAKwJ,OAAQ,OACbxJ,KAAKyJ,aAAe,iDAAiDs2B,OAKzE,MAAMc,EAAgBtb,EAAStW,MAAO,EAAG2xB,GAEzC,IAAM5gC,KAAKugC,cAAeM,GAEtB,YADA7gC,KAAKwJ,OAAQ,GAIjB,MAAM6d,EAAQrnB,KAAK+mB,gBAAkB,EAErC,GAAKM,GAAS,EAIV,OAHArnB,KAAK8mB,MAAQ,IAAK9mB,KAAK8mB,SAAU+Z,QACjC7gC,KAAK0M,cAAe,IAAIC,YAAY,gBAAiB,CAAEC,OAAQ5M,KAAK8mB,SAKxE9mB,KAAKgnB,SAAU,EACfhnB,KAAKinB,SAAW,QAEVjnB,KAAKsI,eAEX,MAAMgf,EAAYC,KAAKC,MACjBC,EAAWC,aAAY,KACzB,MAAMC,EAAcJ,KAAKC,MAAQF,EAC3BM,EAAc/T,KAAKI,IAAKJ,KAAKgU,MAAOF,EAAcN,EAAS,KAAM,KAEvErnB,KAAKinB,SAAWW,EAEZ5nB,KAAKinB,UAAY,MACjBa,cAAcL,GAEdznB,KAAK8mB,MAAQ,IAAK9mB,KAAK8mB,SAAU+Z,GACjC7gC,KAAKgnB,SAAU,EACfhnB,KAAKinB,SAAW,EAEhBjnB,KAAK0M,cAAe,IAAIC,YAAa,gBAAiB,CAAEC,OAAQ5M,KAAK8mB,YAE1E,IAEE9mB,KAAK8gC,YAAY9gC,KAAK8gC,UAAU13B,MAAQ,GACjD,CAOQ,iBAAA2e,CAAkBhpB,GACtB,MAAMpB,EAASoB,EAAEpB,OACjBqC,KAAKmnB,YAAYxpB,EAAOmpB,OAEpB9mB,KAAK8gC,YAAW9gC,KAAK8gC,UAAU13B,MAAQ,GAC/C,CAOQ,UAAA23B,CAAWvc,GACfxkB,KAAK8mB,MAAQ9mB,KAAK8mB,MAAMjD,QAAO,CAACuB,EAAG7mB,IAAMA,IAAMimB,IAC/CxkB,KAAK0M,cAAc,IAAIC,YAAY,gBAAiB,CAAEC,OAAQ5M,KAAK8mB,SAEzC,IAAtB9mB,KAAK8mB,MAAM7oB,SACX+B,KAAKwJ,OAAQ,EACbxJ,KAAKyJ,aAAe,KAE5B,CAEO,MAAAmC,GACH,MAAMo1B,EAAoBhhC,KAAK8mB,MAAM7oB,QAAU+B,KAAK+/B,SAC9CkB,EAAiBjhC,KAAKuJ,UAAYy3B,EAExC,OAAOn3B,CAAI;iDAC8B7J,KAAKmJ,WAAa,kBAAkBnJ,KAAKmJ,cAAgB;kBACvFnJ,KAAK4J;;kBAEL5J,KAAKgnB,QACFnd,CAAI;;;+EAGqD7J,KAAKinB;;;sBAI9Dpd,CAAI;;qCAEW7J,KAAK+S;uCACH;wCACCkuB;qCACH,IAAMjhC,KAAK8gC,WAAW5e;;;;;;;6BAQ9BliB,KAAKggC,kBAAkBvd,KAAK;gCACzBziB,KAAK+/B,SAAW;gCAChBkB;+BACDjhC,KAAK+nB;;;kBAGjB/nB,KAAKoK;;kBAELpK,KAAKqK;;kBAENrK,KAAK8mB,MAAM7oB,OAAS,EAChB4L,CAAI;;;kCAGQ7J,KAAK8mB,MAAMnmB,KAAI,CAAC+/B,EAAMlc,IAAU3a,CAAI;;kEAEJ62B,EAAK93B;;;;uDAIhB;wDACC;qDACH,IAAM5I,KAAK+gC,WAAWvc;wDACnBxkB,KAAKuJ;;;;;;;sBAQvCS;;SAIlB,GArS4BvM,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAyBk9B,GAAArgC,UAAA,aAAA,GAEhBhC,EAAA,CAA1B8M,EAAS,CAAE5H,KAAMT,gCAA4B49B,GAAArgC,UAAA,aAAA,GAClBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAML,kCAAuBw9B,GAAArgC,UAAA,gBAAA,GAEdhC,EAAA,CAA1B8M,EAAS,CAAE5H,KAAMT,gCAA0C49B,GAAArgC,UAAA,yBAAA,GAChChC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAML,kCAAgCw9B,GAAArgC,UAAA,mBAAA,GAEtBhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAMC,kCAAyCk9B,GAAArgC,UAAA,kBAAA,GAE/BhC,EAAA,CAA3B8M,EAAS,CAAE5H,KAAML,kCAA6Bw9B,GAAArgC,UAAA,sBAAA,GAE9BhC,EAAA,CAAhBkG,6BAAgCm8B,GAAArgC,UAAA,eAAA,GAChBhC,EAAA,CAAhBkG,6BAA6Bm8B,GAAArgC,UAAA,gBAAA,GAEOhC,EAAA,CAApCqd,EAAM,sCAA0ComB,mBAAiBpB,GAAArgC,UAAA,iBAAA,GAhBzDqgC,GAAUriC,EAAA,CADtB+M,EAAc,gBACFs1B","x_google_ignoreList":[0,1,2,3,4,5,6,7,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101,102,103,104,106]}