fluentui-react-calendar
Version:
A read-only calendar component with day, week, and month views for React applications
1 lines • 45.9 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/Calendar.jsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n \"react-stack-bottom-frame\": function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React[\"react-stack-bottom-frame\"].bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { useState, useMemo, useCallback } from 'react';\r\nimport './Calendar.css';\r\n\r\nconst Calendar = ({ events }) => {\r\n const [date, setDate] = useState(new Date());\r\n const [view, setView] = useState('month'); // 'month', 'week', 'day'\r\n const [selectedDate, setSelectedDate] = useState(new Date());\r\n\r\n // Navigation icons\r\n const rightArrowIcon = (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 12 12\" className=\"nav-icon\">\r\n <path fill=\"currentColor\" d=\"M4.47 2.22a.75.75 0 0 0 0 1.06L7.19 6L4.47 8.72a.75.75 0 0 0 1.06 1.06l3.25-3.25a.75.75 0 0 0 0-1.06L5.53 2.22a.75.75 0 0 0-1.06 0\"/>\r\n </svg>\r\n );\r\n\r\n const leftArrowIcon = (\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 12 12\" className=\"nav-icon left\">\r\n <path fill=\"currentColor\" d=\"M4.47 2.22a.75.75 0 0 0 0 1.06L7.19 6L4.47 8.72a.75.75 0 0 0 1.06 1.06l3.25-3.25a.75.75 0 0 0 0-1.06L5.53 2.22a.75.75 0 0 0-1.06 0\"/>\r\n </svg>\r\n );\r\n\r\n // Format date as DD-MM-YYYY for event lookup - memoized\r\n const formatDateKey = useCallback((date) => {\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const year = date.getFullYear();\r\n return `${day}-${month}-${year}`;\r\n }, []);\r\n\r\n // Get events for a specific date - memoized\r\n const getEventsForDate = useCallback((date) => {\r\n const dateKey = formatDateKey(date);\r\n return events[dateKey] || [];\r\n }, [events, formatDateKey]);\r\n\r\n // Navigation functions - memoized\r\n const prevPeriod = useCallback(() => {\r\n setDate(prevDate => {\r\n const newDate = new Date(prevDate);\r\n if (view === 'month') {\r\n newDate.setMonth(prevDate.getMonth() - 1);\r\n } else if (view === 'week') {\r\n newDate.setDate(prevDate.getDate() - 7);\r\n } else if (view === 'day') {\r\n newDate.setDate(prevDate.getDate() - 1);\r\n }\r\n return newDate;\r\n });\r\n }, [view]);\r\n\r\n const nextPeriod = useCallback(() => {\r\n setDate(prevDate => {\r\n const newDate = new Date(prevDate);\r\n if (view === 'month') {\r\n newDate.setMonth(prevDate.getMonth() + 1);\r\n } else if (view === 'week') {\r\n newDate.setDate(prevDate.getDate() + 7);\r\n } else if (view === 'day') {\r\n newDate.setDate(prevDate.getDate() + 1);\r\n }\r\n return newDate;\r\n });\r\n }, [view]);\r\n\r\n const goToToday = useCallback(() => {\r\n setDate(new Date());\r\n setSelectedDate(new Date());\r\n }, []);\r\n\r\n // Format time to 12-hour format\r\n const formatTo12Hour = useCallback((timeStr) => {\r\n const [hours] = timeStr.split(':');\r\n const hour = parseInt(hours, 10);\r\n const ampm = hour >= 12 ? 'PM' : 'AM';\r\n const hour12 = hour % 12 || 12;\r\n return `${hour12}:${timeStr.split(':')[1]} ${ampm}`;\r\n }, []);\r\n\r\n // Handle event click to navigate to the link\r\n const handleEventClick = useCallback((link, e) => {\r\n e.stopPropagation();\r\n if (link) {\r\n window.open(link, '_blank');\r\n }\r\n }, []);\r\n\r\n // Memoized calendar calculations\r\n const calendarData = useMemo(() => {\r\n // Get days in a month\r\n const getDaysInMonth = (year, month) => {\r\n return new Date(year, month + 1, 0).getDate();\r\n };\r\n\r\n // Get the first day of the month (0 = Sunday, 1 = Monday, etc.)\r\n const getFirstDayOfMonth = (year, month) => {\r\n return new Date(year, month, 1).getDay();\r\n };\r\n\r\n const year = date.getFullYear();\r\n const month = date.getMonth();\r\n const daysInMonth = getDaysInMonth(year, month);\r\n const firstDay = getFirstDayOfMonth(year, month);\r\n\r\n // Generate time slots for day view\r\n const timeSlots = [];\r\n for (let hour = 0; hour < 24; hour++) {\r\n const hourStr = hour.toString().padStart(2, '0');\r\n const hour12 = hour % 12 || 12;\r\n const ampm = hour >= 12 ? 'PM' : 'AM';\r\n timeSlots.push({ hour, time: `${hourStr}:00`, time12: `${hour12}:00 ${ampm}` });\r\n }\r\n\r\n // Get days of the week for week view\r\n const daysOfWeek = [];\r\n const startOfWeek = new Date(date);\r\n startOfWeek.setDate(date.getDate() - date.getDay());\r\n for (let i = 0; i < 7; i++) {\r\n const currentDate = new Date(startOfWeek);\r\n currentDate.setDate(startOfWeek.getDate() + i);\r\n daysOfWeek.push(currentDate);\r\n }\r\n\r\n return { year, month, daysInMonth, firstDay, timeSlots, daysOfWeek };\r\n }, [date]);\r\n\r\n // Render month view\r\n const renderMonthView = useCallback(() => {\r\n const { year, month, daysInMonth, firstDay } = calendarData;\r\n const days = [];\r\n const today = new Date();\r\n\r\n // Add empty cells for days before the first day of the month\r\n for (let i = 0; i < firstDay; i++) {\r\n days.push(<div key={`empty-${i}`} className=\"calendar-day empty\"></div>);\r\n }\r\n\r\n // Add cells for each day of the month\r\n for (let day = 1; day <= daysInMonth; day++) {\r\n const currentDate = new Date(year, month, day);\r\n const dayEvents = getEventsForDate(currentDate);\r\n // Show up to 2 events\r\n const eventsToShow = dayEvents.slice(0, 2);\r\n const remainingEvents = dayEvents.length > 2 ? dayEvents.length - 2 : 0;\r\n\r\n const isToday = currentDate.getDate() === today.getDate() && \r\n currentDate.getMonth() === today.getMonth() && \r\n currentDate.getFullYear() === today.getFullYear();\r\n \r\n const isSelected = currentDate.getDate() === selectedDate.getDate() && \r\n currentDate.getMonth() === selectedDate.getMonth() && \r\n currentDate.getFullYear() === selectedDate.getFullYear();\r\n\r\n days.push(\r\n <div \r\n key={`day-${day}`} \r\n className={`calendar-day ${isToday ? 'today' : ''} ${isSelected ? 'selected' : ''}`}\r\n onClick={() => {\r\n setSelectedDate(new Date(year, month, day));\r\n setView('day');\r\n }}\r\n >\r\n <div className=\"day-header\">\r\n <span className=\"day-number\">{day}</span>\r\n </div>\r\n <div className=\"day-events\">\r\n {eventsToShow.map((event, idx) => (\r\n <a \r\n key={idx} \r\n className=\"event-pill\" \r\n href={event.link} \r\n target=\"_blank\" \r\n rel=\"noopener noreferrer\"\r\n onClick={(e) => handleEventClick(event.link, e)}\r\n title={`${formatTo12Hour(event.time)} - ${event.event}`}\r\n >\r\n {formatTo12Hour(event.time)} - {event.event}\r\n </a>\r\n ))}\r\n {remainingEvents > 0 && (\r\n <div className=\"event-more\">\r\n +{remainingEvents} more\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"month-view\">\r\n <div className=\"weekday-header\">\r\n <div>Sunday</div>\r\n <div>Monday</div>\r\n <div>Tuesday</div>\r\n <div>Wednesday</div>\r\n <div>Thursday</div>\r\n <div>Friday</div>\r\n <div>Saturday</div>\r\n </div>\r\n <div className=\"days-grid\">\r\n {days}\r\n </div>\r\n </div>\r\n );\r\n }, [calendarData, getEventsForDate, selectedDate, formatTo12Hour, handleEventClick]);\r\n\r\n // Render week view\r\n const renderWeekView = useCallback(() => {\r\n const { daysOfWeek } = calendarData;\r\n const today = new Date();\r\n\r\n return (\r\n <div className=\"week-view\">\r\n <div className=\"week-days-container\">\r\n {daysOfWeek.map((day, index) => {\r\n const dayEvents = getEventsForDate(day);\r\n const isToday = day.getDate() === today.getDate() && \r\n day.getMonth() === today.getMonth() && \r\n day.getFullYear() === today.getFullYear();\r\n \r\n const isSelected = day.getDate() === selectedDate.getDate() && \r\n day.getMonth() === selectedDate.getMonth() && \r\n day.getFullYear() === selectedDate.getFullYear();\r\n\r\n // Show up to 4 events\r\n const eventsToShow = dayEvents.slice(0, 4);\r\n const remainingEvents = dayEvents.length > 4 ? dayEvents.length - 4 : 0;\r\n\r\n return (\r\n <div \r\n key={index} \r\n className={`week-day-column ${isToday ? 'today' : ''} ${isSelected ? 'selected' : ''}`}\r\n onClick={() => {\r\n setSelectedDate(new Date(day));\r\n setView('day');\r\n }}\r\n >\r\n <div className=\"week-day-header\">\r\n <div className=\"weekday\">\r\n {day.toLocaleDateString('en-US', { weekday: 'long' })}\r\n </div>\r\n <div className=\"date\">{day.getDate()}</div>\r\n </div>\r\n <div className=\"week-day-events\">\r\n {eventsToShow.map((event, idx) => (\r\n <a \r\n key={idx} \r\n className=\"week-event\" \r\n href={event.link}\r\n target=\"_blank\" \r\n rel=\"noopener noreferrer\"\r\n onClick={(e) => handleEventClick(event.link, e)}\r\n title={`${formatTo12Hour(event.time)} - ${event.event}`}\r\n >\r\n <div className=\"event-time\">{formatTo12Hour(event.time)}</div>\r\n <div className=\"event-title\">{event.event}</div>\r\n </a>\r\n ))}\r\n {remainingEvents > 0 && (\r\n <div className=\"week-event-more\">\r\n +{remainingEvents} more\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n }, [calendarData, getEventsForDate, selectedDate, formatTo12Hour, handleEventClick]);\r\n\r\n // Render day view\r\n const renderDayView = useCallback(() => {\r\n const { timeSlots } = calendarData;\r\n const eventsForDay = getEventsForDate(selectedDate);\r\n\r\n return (\r\n <div className=\"day-view\">\r\n <div className=\"day-header\">\r\n <h3>{selectedDate.toLocaleDateString('en-US', { weekday: 'long', month: 'long', day: 'numeric', year: 'numeric' })}</h3>\r\n </div>\r\n <div className=\"day-body\">\r\n <div className=\"time-column\">\r\n {timeSlots.map((slot) => (\r\n <div key={slot.time} className=\"time-slot\">\r\n <span>{slot.time12}</span>\r\n </div>\r\n ))}\r\n </div>\r\n <div className=\"events-column\">\r\n {timeSlots.map((slot) => {\r\n const eventsAtTime = eventsForDay.filter(event => event.time.startsWith(slot.hour.toString().padStart(2, '0')));\r\n \r\n return (\r\n <div key={slot.time} className=\"day-time-slot\">\r\n {eventsAtTime.map((event, eventIdx) => (\r\n <a \r\n key={eventIdx} \r\n className=\"day-event\" \r\n href={event.link}\r\n target=\"_blank\" \r\n rel=\"noopener noreferrer\"\r\n onClick={(e) => handleEventClick(event.link, e)}\r\n title={`${formatTo12Hour(event.time)} - ${event.event}`}\r\n >\r\n <div className=\"event-time\">{formatTo12Hour(event.time)}</div>\r\n <div className=\"event-title\">{event.event}</div>\r\n </a>\r\n ))}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }, [calendarData, getEventsForDate, selectedDate, formatTo12Hour, handleEventClick]);\r\n\r\n // Memoized view renderer\r\n const currentView = useMemo(() => {\r\n switch(view) {\r\n case 'month': return renderMonthView();\r\n case 'week': return renderWeekView();\r\n case 'day': return renderDayView();\r\n default: return renderMonthView();\r\n }\r\n }, [view, renderMonthView, renderWeekView, renderDayView]);\r\n\r\n // Memoized title renderer\r\n const title = useMemo(() => {\r\n if (view === 'month') {\r\n return (\r\n <h2>{date.toLocaleDateString('en-US', { month: 'long', year: 'numeric' })}</h2>\r\n );\r\n } else if (view === 'week') {\r\n const { daysOfWeek } = calendarData;\r\n return (\r\n <h2>\r\n {daysOfWeek[0].toLocaleDateString('en-US', { month: 'short', day: 'numeric' })} - {daysOfWeek[6].toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })}\r\n </h2>\r\n );\r\n } else if (view === 'day') {\r\n return (\r\n <h2>{selectedDate.toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' })}</h2>\r\n );\r\n }\r\n }, [view, date, selectedDate, calendarData]);\r\n\r\n return (\r\n <div className=\"calendar-container\">\r\n <div className=\"calendar-header\">\r\n <div style={{ width: \"200px\" }}>\r\n <div className=\"calendar-title\">\r\n {title}\r\n </div>\r\n</div>\r\n\r\n <div className=\"calendar-actions\">\r\n <button onClick={prevPeriod} className=\"nav-button\">\r\n {leftArrowIcon}\r\n </button>\r\n <button onClick={goToToday} className=\"today-button\">\r\n Today\r\n </button>\r\n <button onClick={nextPeriod} className=\"nav-button\">\r\n {rightArrowIcon}\r\n </button>\r\n </div>\r\n <div className=\"view-switcher\">\r\n <button onClick={() => setView('day')} className={view === 'day' ? 'active' : ''}>\r\n Day\r\n </button>\r\n <button onClick={() => setView('week')} className={view === 'week' ? 'active' : ''}>\r\n Week\r\n </button>\r\n <button onClick={() => setView('month')} className={view === 'month' ? 'active' : ''}>\r\n Month\r\n </button>\r\n </div>\r\n </div>\r\n <div className=\"calendar-body\">\r\n {currentView}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Calendar;"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","self","source","owner","debugStack","debugTask","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","events","date","setDate","useState","view","setView","selectedDate","setSelectedDate","rightArrowIcon","jsx","leftArrowIcon","formatDateKey","useCallback","day","month","year","getEventsForDate","dateKey","prevPeriod","prevDate","newDate","nextPeriod","goToToday","formatTo12Hour","timeStr","hours","hour","ampm","handleEventClick","link","e","calendarData","useMemo","getDaysInMonth","getFirstDayOfMonth","daysInMonth","firstDay","timeSlots","hourStr","hour12","daysOfWeek","startOfWeek","i","currentDate","renderMonthView","days","today","dayEvents","eventsToShow","remainingEvents","isToday","isSelected","jsxs","event","idx","renderWeekView","index","renderDayView","eventsForDay","slot","eventsAtTime","eventIdx","currentView","title"],"mappings":";;;;;;;;;yCAWA,IAAIA,EAAqB,OAAO,IAAI,4BAA4B,EAC9DC,EAAsB,OAAO,IAAI,gBAAgB,EACnD,SAASC,EAAQC,EAAMC,EAAQC,EAAU,CACvC,IAAIC,EAAM,KAGV,GAFWD,IAAX,SAAwBC,EAAM,GAAKD,GACxBD,EAAO,MAAlB,SAA0BE,EAAM,GAAKF,EAAO,KACxC,QAASA,EAAQ,CACnBC,EAAW,CAAE,EACb,QAASE,KAAYH,EACTG,IAAV,QAAuBF,EAASE,CAAQ,EAAIH,EAAOG,CAAQ,EAC9D,MAAMF,EAAWD,EAClB,OAAAA,EAASC,EAAS,IACX,CACL,SAAUL,EACV,KAAMG,EACN,IAAKG,EACL,IAAgBF,IAAX,OAAoBA,EAAS,KAClC,MAAOC,CACR,CACH,CACA,OAAAG,EAAA,SAAmBP,EACnBO,EAAA,IAAcN,EACdM,EAAA,KAAeN;;;;;;;;yCCtBE,QAAQ,IAAI,WAA7B,cACG,UAAY,CACX,SAASO,EAAyBN,EAAM,CACtC,GAAYA,GAAR,KAAc,OAAO,KACzB,GAAmB,OAAOA,GAAtB,WACF,OAAOA,EAAK,WAAaO,EACrB,KACAP,EAAK,aAAeA,EAAK,MAAQ,KACvC,GAAiB,OAAOA,GAApB,SAA0B,OAAOA,EACrC,OAAQA,EAAI,CACV,KAAKF,EACH,MAAO,WACT,KAAKU,EACH,MAAO,WACT,KAAKC,EACH,MAAO,aACT,KAAKC,EACH,MAAO,WACT,KAAKC,EACH,MAAO,eACT,KAAKC,EACH,MAAO,UACjB,CACM,GAAiB,OAAOZ,GAApB,SACF,OACgB,OAAOA,EAAK,KAAzB,UACC,QAAQ,MACN,mHACD,EACHA,EAAK,SACf,CACU,KAAKa,EACH,MAAO,SACT,KAAKC,EACH,OAAQd,EAAK,aAAe,WAAa,YAC3C,KAAKe,EACH,OAAQf,EAAK,SAAS,aAAe,WAAa,YACpD,KAAKgB,EACH,IAAIC,EAAYjB,EAAK,OACrB,OAAAA,EAAOA,EAAK,YACZA,IACIA,EAAOiB,EAAU,aAAeA,EAAU,MAAQ,GACnDjB,EAAcA,IAAP,GAAc,cAAgBA,EAAO,IAAM,cAC9CA,EACT,KAAKkB,EACH,OACGD,EAAYjB,EAAK,aAAe,KACxBiB,IAAT,KACIA,EACAX,EAAyBN,EAAK,IAAI,GAAK,OAE/C,KAAKmB,EACHF,EAAYjB,EAAK,SACjBA,EAAOA,EAAK,MACZ,GAAI,CACF,OAAOM,EAAyBN,EAAKiB,CAAS,CAAC,CAChD,MAAW,CAAA,CACxB,CACM,OAAO,IACb,CACI,SAASG,EAAmBC,EAAO,CACjC,MAAO,GAAKA,CAClB,CACI,SAASC,EAAuBD,EAAO,CACrC,GAAI,CACFD,EAAmBC,CAAK,EACxB,IAAIE,EAA2B,EAChC,MAAW,CACVA,EAA2B,EACnC,CACM,GAAIA,EAA0B,CAC5BA,EAA2B,QAC3B,IAAIC,EAAwBD,EAAyB,MACjDE,EACc,OAAO,QAAtB,YACC,OAAO,aACPJ,EAAM,OAAO,WAAW,GAC1BA,EAAM,YAAY,MAClB,SACF,OAAAG,EAAsB,KACpBD,EACA,2GACAE,CACD,EACML,EAAmBC,CAAK,CACvC,CACA,CACI,SAASK,EAAY1B,EAAM,CACzB,GAAIA,IAASF,EAAqB,MAAO,KACzC,GACe,OAAOE,GAApB,UACSA,IAAT,MACAA,EAAK,WAAamB,EAElB,MAAO,QACT,GAAI,CACF,IAAIQ,EAAOrB,EAAyBN,CAAI,EACxC,OAAO2B,EAAO,IAAMA,EAAO,IAAM,OAClC,MAAW,CACV,MAAO,OACf,CACA,CACI,SAASC,GAAW,CAClB,IAAIC,EAAaC,EAAqB,EACtC,OAAgBD,IAAT,KAAsB,KAAOA,EAAW,SAAU,CAC/D,CACI,SAASE,GAAe,CACtB,OAAO,MAAM,uBAAuB,CAC1C,CACI,SAASC,EAAY/B,EAAQ,CAC3B,GAAIgC,EAAe,KAAKhC,EAAQ,KAAK,EAAG,CACtC,IAAIiC,EAAS,OAAO,yBAAyBjC,EAAQ,KAAK,EAAE,IAC5D,GAAIiC,GAAUA,EAAO,eAAgB,MAAO,EACpD,CACM,OAAkBjC,EAAO,MAAlB,MACb,CACI,SAASkC,EAA2BC,EAAOC,EAAa,CACtD,SAASC,GAAwB,CAC/BC,IACIA,EAA6B,GAC/B,QAAQ,MACN,0OACAF,CACZ,EACA,CACMC,EAAsB,eAAiB,GACvC,OAAO,eAAeF,EAAO,MAAO,CAClC,IAAKE,EACL,aAAc,EACtB,CAAO,CACP,CACI,SAASE,GAAyC,CAChD,IAAIC,EAAgBnC,EAAyB,KAAK,IAAI,EACtD,OAAAoC,EAAuBD,CAAa,IAChCC,EAAuBD,CAAa,EAAI,GAC1C,QAAQ,MACN,6IACV,GACMA,EAAgB,KAAK,MAAM,IACTA,IAAX,OAA2BA,EAAgB,IACxD,CACI,SAASE,EACP3C,EACAG,EACAyC,EACAC,EACAC,EACAV,EACAW,EACAC,EACA,CACA,OAAAJ,EAAOR,EAAM,IACbpC,EAAO,CACL,SAAUH,EACV,KAAMG,EACN,IAAKG,EACL,MAAOiC,EACP,OAAQU,CACT,GACoBF,IAAX,OAAkBA,EAAO,QAAnC,KACI,OAAO,eAAe5C,EAAM,MAAO,CACjC,WAAY,GACZ,IAAKwC,CACN,CAAA,EACD,OAAO,eAAexC,EAAM,MAAO,CAAE,WAAY,GAAI,MAAO,KAAM,EACtEA,EAAK,OAAS,CAAE,EAChB,OAAO,eAAeA,EAAK,OAAQ,YAAa,CAC9C,aAAc,GACd,WAAY,GACZ,SAAU,GACV,MAAO,CACf,CAAO,EACD,OAAO,eAAeA,EAAM,aAAc,CACxC,aAAc,GACd,WAAY,GACZ,SAAU,GACV,MAAO,IACf,CAAO,EACD,OAAO,eAAeA,EAAM,cAAe,CACzC,aAAc,GACd,WAAY,GACZ,SAAU,GACV,MAAO+C,CACf,CAAO,EACD,OAAO,eAAe/C,EAAM,aAAc,CACxC,aAAc,GACd,WAAY,GACZ,SAAU,GACV,MAAOgD,CACf,CAAO,EACD,OAAO,SAAW,OAAO,OAAOhD,EAAK,KAAK,EAAG,OAAO,OAAOA,CAAI,GACxDA,CACb,CACI,SAASiD,EACPjD,EACAC,EACAC,EACAgD,EACAL,EACAD,EACAG,EACAC,EACA,CACA,IAAIG,EAAWlD,EAAO,SACtB,GAAekD,IAAX,OACF,GAAID,EACF,GAAIE,EAAYD,CAAQ,EAAG,CACzB,IACED,EAAmB,EACnBA,EAAmBC,EAAS,OAC5BD,IAEAG,EAAkBF,EAASD,CAAgB,CAAC,EAC9C,OAAO,QAAU,OAAO,OAAOC,CAAQ,CACxC,MACC,QAAQ,MACN,sJACD,OACAE,EAAkBF,CAAQ,EACjC,GAAIlB,EAAe,KAAKhC,EAAQ,KAAK,EAAG,CACtCkD,EAAW7C,EAAyBN,CAAI,EACxC,IAAIsD,EAAO,OAAO,KAAKrD,CAAM,EAAE,OAAO,SAAUsD,GAAG,CACjD,OAAiBA,KAAV,KACjB,CAAS,EACDL,EACE,EAAII,EAAK,OACL,kBAAoBA,EAAK,KAAK,SAAS,EAAI,SAC3C,iBACNE,EAAsBL,EAAWD,CAAgB,IAC7CI,EACA,EAAIA,EAAK,OAAS,IAAMA,EAAK,KAAK,SAAS,EAAI,SAAW,KAC5D,QAAQ,MACN;AAAA;AAAA;AAAA;AAAA;AAAA,mCACAJ,EACAC,EACAG,EACAH,CACD,EACAK,EAAsBL,EAAWD,CAAgB,EAAI,GAChE,CAMM,GALAC,EAAW,KACAjD,IAAX,SACGoB,EAAuBpB,CAAQ,EAAIiD,EAAW,GAAKjD,GACtD8B,EAAY/B,CAAM,IACfqB,EAAuBrB,EAAO,GAAG,EAAIkD,EAAW,GAAKlD,EAAO,KAC3D,QAASA,EAAQ,CACnBC,EAAW,CAAE,EACb,QAASE,KAAYH,EACTG,IAAV,QAAuBF,EAASE,CAAQ,EAAIH,EAAOG,CAAQ,EAC9D,MAAMF,EAAWD,EAClB,OAAAkD,GACEhB,EACEjC,EACe,OAAOF,GAAtB,WACIA,EAAK,aAAeA,EAAK,MAAQ,UACjCA,CACL,EACI2C,EACL3C,EACAmD,EACAP,EACAC,EACAjB,EAAU,EACV1B,EACA6C,EACAC,CACD,CACP,CACI,SAASK,EAAkBI,EAAM,CAClB,OAAOA,GAApB,UACWA,IAAT,MACAA,EAAK,WAAa5D,GAClB4D,EAAK,SACJA,EAAK,OAAO,UAAY,EACjC,CACI,IAAIC,EAAQC,EACV9D,EAAqB,OAAO,IAAI,4BAA4B,EAC5DgB,EAAoB,OAAO,IAAI,cAAc,EAC7Cf,EAAsB,OAAO,IAAI,gBAAgB,EACjDW,EAAyB,OAAO,IAAI,mBAAmB,EACvDD,EAAsB,OAAO,IAAI,gBAAgB,EAE/CO,EAAsB,OAAO,IAAI,gBAAgB,EACnDD,EAAqB,OAAO,IAAI,eAAe,EAC/CE,EAAyB,OAAO,IAAI,mBAAmB,EACvDN,EAAsB,OAAO,IAAI,gBAAgB,EACjDC,EAA2B,OAAO,IAAI,qBAAqB,EAC3DO,EAAkB,OAAO,IAAI,YAAY,EACzCC,EAAkB,OAAO,IAAI,YAAY,EACzCP,EAAsB,OAAO,IAAI,gBAAgB,EACjDL,EAAyB,OAAO,IAAI,wBAAwB,EAC5DuB,EACE4B,EAAM,gEACRzB,EAAiB,OAAO,UAAU,eAClCmB,EAAc,MAAM,QACpBQ,EAAa,QAAQ,WACjB,QAAQ,WACR,UAAY,CACV,OAAO,IACR,EACPF,EAAQ,CACN,2BAA4B,SAAUG,EAAmB,CACvD,OAAOA,EAAmB,CAClC,CACK,EACD,IAAItB,EACAG,EAAyB,CAAE,EAC3BoB,EAAyBJ,EAAM,0BAA0B,EAAE,KAC7DA,EACA3B,CACN,EAAO,EACCgC,EAAwBH,EAAWlC,EAAYK,CAAY,CAAC,EAC5DyB,EAAwB,CAAE,EAC9BQ,EAAA,SAAmBlE,EACnBkE,EAAW,IAAG,SAAUhE,EAAMC,EAAQC,EAAU2C,EAAQD,EAAM,CAC5D,IAAIqB,EACF,IAAMnC,EAAqB,6BAC7B,OAAOmB,EACLjD,EACAC,EACAC,EACA,GACA2C,EACAD,EACAqB,EACI,MAAM,uBAAuB,EAC7BH,EACJG,EAAmBL,EAAWlC,EAAY1B,CAAI,CAAC,EAAI+D,CACpD,CACF,EACDC,EAAY,KAAG,SAAUhE,EAAMC,EAAQC,EAAU2C,EAAQD,EAAM,CAC7D,IAAIqB,EACF,IAAMnC,EAAqB,6BAC7B,OAAOmB,EACLjD,EACAC,EACAC,EACA,GACA2C,EACAD,EACAqB,EACI,MAAM,uBAAuB,EAC7BH,EACJG,EAAmBL,EAAWlC,EAAY1B,CAAI,CAAC,EAAI+D,CACpD,CACF,CACL,EAAM,2CCnWF,QAAQ,IAAI,WAAa,aAC3BG,EAAA,QAAiBP,GAAgD,EAEjEO,EAAA,QAAiBC,GAAiD,8BCFnD,CAAC,CAAE,OAAAC,KAAa,CAC/B,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAAS,IAAI,IAAM,EACrC,CAACC,EAAMC,CAAO,EAAIF,EAAAA,SAAS,OAAO,EAClC,CAACG,EAAcC,CAAe,EAAIJ,EAAAA,SAAS,IAAI,IAAM,EAGrDK,EACHC,EAAAA,IAAA,MAAA,CAAI,MAAM,6BAA6B,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,UAAU,WAC3F,SAACA,EAAAA,IAAA,OAAA,CAAK,KAAK,eAAe,EAAE,qIAAoI,CAClK,CAAA,EAGIC,EACHD,EAAAA,IAAA,MAAA,CAAI,MAAM,6BAA6B,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,UAAU,gBAC3F,SAACA,EAAAA,IAAA,OAAA,CAAK,KAAK,eAAe,EAAE,qIAAoI,CAClK,CAAA,EAIIE,EAAgBC,cAAaX,GAAS,CACpC,MAAAY,EAAM,OAAOZ,EAAK,QAAS,CAAA,EAAE,SAAS,EAAG,GAAG,EAC5Ca,EAAQ,OAAOb,EAAK,SAAA,EAAa,CAAC,EAAE,SAAS,EAAG,GAAG,EACnDc,EAAOd,EAAK,YAAY,EAC9B,MAAO,GAAGY,CAAG,IAAIC,CAAK,IAAIC,CAAI,EAChC,EAAG,EAAE,EAGCC,EAAmBJ,cAAaX,GAAS,CACvC,MAAAgB,EAAUN,EAAcV,CAAI,EAC3B,OAAAD,EAAOiB,CAAO,GAAK,CAAC,CAAA,EAC1B,CAACjB,EAAQW,CAAa,CAAC,EAGpBO,EAAaN,EAAAA,YAAY,IAAM,CACnCV,EAAoBiB,GAAA,CACZ,MAAAC,EAAU,IAAI,KAAKD,CAAQ,EACjC,OAAIf,IAAS,QACXgB,EAAQ,SAASD,EAAS,SAAS,EAAI,CAAC,EAC/Bf,IAAS,OAClBgB,EAAQ,QAAQD,EAAS,QAAQ,EAAI,CAAC,EAC7Bf,IAAS,OAClBgB,EAAQ,QAAQD,EAAS,QAAQ,EAAI,CAAC,EAEjCC,CAAA,CACR,CAAA,EACA,CAAChB,CAAI,CAAC,EAEHiB,EAAaT,EAAAA,YAAY,IAAM,CACnCV,EAAoBiB,GAAA,CACZ,MAAAC,EAAU,IAAI,KAAKD,CAAQ,EACjC,OAAIf,IAAS,QACXgB,EAAQ,SAASD,EAAS,SAAS,EAAI,CAAC,EAC/Bf,IAAS,OAClBgB,EAAQ,QAAQD,EAAS,QAAQ,EAAI,CAAC,EAC7Bf,IAAS,OAClBgB,EAAQ,QAAQD,EAAS,QAAQ,EAAI,CAAC,EAEjCC,CAAA,CACR,CAAA,EACA,CAAChB,CAAI,CAAC,EAEHkB,EAAYV,EAAAA,YAAY,IAAM,CAC1BV,EAAA,IAAI,IAAM,EACFK,EAAA,IAAI,IAAM,CAC5B,EAAG,EAAE,EAGCgB,EAAiBX,cAAaY,GAAY,CAC9C,KAAM,CAACC,CAAK,EAAID,EAAQ,MAAM,GAAG,EAC3BE,EAAO,SAASD,EAAO,EAAE,EACzBE,EAAOD,GAAQ,GAAK,KAAO,KAE1B,MAAA,GADQA,EAAO,IAAM,EACZ,IAAIF,EAAQ,MAAM,GAAG,EAAE,CAAC,CAAC,IAAIG,CAAI,EACnD,EAAG,EAAE,EAGCC,EAAmBhB,EAAAA,YAAY,CAACiB,EAAMC,IAAM,CAChDA,EAAE,gBAAgB,EACdD,GACK,OAAA,KAAKA,EAAM,QAAQ,CAE9B,EAAG,EAAE,EAGCE,EAAeC,EAAAA,QAAQ,IAAM,CAE3B,MAAAC,EAAiB,CAAClB,EAAMD,IACrB,IAAI,KAAKC,EAAMD,EAAQ,EAAG,CAAC,EAAE,QAAQ,EAIxCoB,EAAqB,CAACnB,EAAMD,IACzB,IAAI,KAAKC,EAAMD,EAAO,CAAC,EAAE,OAAO,EAGnCC,EAAOd,EAAK,YAAY,EACxBa,EAAQb,EAAK,SAAS,EACtBkC,EAAcF,EAAelB,EAAMD,CAAK,EACxCsB,EAAWF,EAAmBnB,EAAMD,CAAK,EAGzCuB,EAAY,CAAC,EACnB,QAASX,EAAO,EAAGA,EAAO,GAAIA,IAAQ,CACpC,MAAMY,EAAUZ,EAAK,SAAW,EAAA,SAAS,EAAG,GAAG,EACzCa,EAASb,EAAO,IAAM,GACtBC,EAAOD,GAAQ,GAAK,KAAO,KACjCW,EAAU,KAAK,CAAE,KAAAX,EAAM,KAAM,GAAGY,CAAO,MAAO,OAAQ,GAAGC,CAAM,OAAOZ,CAAI,GAAI,CAAA,CAIhF,MAAMa,EAAa,CAAC,EACdC,EAAc,IAAI,KAAKxC,CAAI,EACjCwC,EAAY,QAAQxC,EAAK,QAAA,EAAYA,EAAK,QAAQ,EAClD,QAASyC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACpB,MAAAC,EAAc,IAAI,KAAKF,CAAW,EACxCE,EAAY,QAAQF,EAAY,QAAQ,EAAIC,CAAC,EAC7CF,EAAW,KAAKG,CAAW,CAAA,CAG7B,MAAO,CAAE,KAAA5B,EAAM,MAAAD,EAAO,YAAAqB,EAAa,SAAAC,EAAU,UAAAC,EAAW,WAAAG,CAAW,CAAA,EAClE,CAACvC,CAAI,CAAC,EAGH2C,EAAkBhC,EAAAA,YAAY,IAAM,CACxC,KAAM,CAAE,KAAAG,EAAM,MAAAD,EAAO,YAAAqB,EAAa,SAAAC,CAAa,EAAAL,EACzCc,EAAO,CAAC,EACRC,MAAY,KAGlB,QAASJ,EAAI,EAAGA,EAAIN,EAAUM,IACvBG,EAAA,WAAM,MAAuB,CAAA,UAAU,sBAAxB,SAASH,CAAC,EAAmC,CAAM,EAIzE,QAAS7B,EAAM,EAAGA,GAAOsB,EAAatB,IAAO,CAC3C,MAAM8B,EAAc,IAAI,KAAK5B,EAAMD,EAAOD,CAAG,EACvCkC,EAAY/B,EAAiB2B,CAAW,EAExCK,EAAeD,EAAU,MAAM,EAAG,CAAC,EACnCE,EAAkBF,EAAU,OAAS,EAAIA,EAAU,OAAS,EAAI,EAEhEG,EAAUP,EAAY,QAAc,IAAAG,EAAM,WAChCH,EAAY,SAAS,IAAMG,EAAM,YACjCH,EAAY,YAAY,IAAMG,EAAM,YAAY,EAE1DK,EAAaR,EAAY,QAAc,IAAArC,EAAa,WACvCqC,EAAY,SAAS,IAAMrC,EAAa,YACxCqC,EAAY,YAAY,IAAMrC,EAAa,YAAY,EAErEuC,EAAA,KACHO,EAAA,KAAC,MAAA,CAEC,UAAW,gBAAgBF,EAAU,QAAU,EAAE,IAAIC,EAAa,WAAa,EAAE,GACjF,QAAS,IAAM,CACb5C,EAAgB,IAAI,KAAKQ,EAAMD,EAAOD,CAAG,CAAC,EAC1CR,EAAQ,KAAK,CACf,EAEA,SAAA,CAACI,EAAAA,IAAA,MAAA,CAAI,UAAU,aACb,SAAAA,EAAA,IAAC,QAAK,UAAU,aAAc,WAAI,CACpC,CAAA,EACA2C,EAAAA,KAAC,MAAI,CAAA,UAAU,aACZ,SAAA,CAAaJ,EAAA,IAAI,CAACK,EAAOC,IACxBF,EAAA,KAAC,IAAA,CAEC,UAAU,aACV,KAAMC,EAAM,KACZ,OAAO,SACP,IAAI,sBACJ,QAAUvB,GAAMF,EAAiByB,EAAM,KAAMvB,CAAC,EAC9C,MAAO,GAAGP,EAAe8B,EAAM,IAAI,CAAC,MAAMA,EAAM,KAAK,GAEpD,SAAA,CAAA9B,EAAe8B,EAAM,IAAI,EAAE,MAAIA,EAAM,KAAA,CAAA,EARjCC,CAAA,CAUR,EACAL,EAAkB,GAChBG,OAAA,MAAA,CAAI,UAAU,aAAa,SAAA,CAAA,IACxBH,EAAgB,OAAA,CACpB,CAAA,CAAA,CAEJ,CAAA,CAAA,CAAA,EA7BK,OAAOpC,CAAG,EAAA,CA+BnB,CAAA,CAIA,OAAAuC,EAAA,KAAC,MAAI,CAAA,UAAU,aACb,SAAA,CAACA,EAAAA,KAAA,MAAA,CAAI,UAAU,iBACb,SAAA,CAAA3C,EAAAA,IAAC,OAAI,SAAM,QAAA,CAAA,EACXA,EAAAA,IAAC,OAAI,SAAM,QAAA,CAAA,EACXA,EAAAA,IAAC,OAAI,SAAO,SAAA,CAAA,EACZA,EAAAA,IAAC,OAAI,SAAS,WAAA,CAAA,EACdA,EAAAA,IAAC,OAAI,SAAQ,UAAA,CAAA,EACbA,EAAAA,IAAC,OAAI,SAAM,QAAA,CAAA,EACXA,EAAAA,IAAC,OAAI,SAAQ,UAAA,CAAA,CAAA,EACf,EACCA,EAAA,IAAA,MAAA,CAAI,UAAU,YACZ,SACHoC,CAAA,CAAA,CAAA,EACF,CAAA,EAED,CAACd,EAAcf,EAAkBV,EAAciB,EAAgBK,CAAgB,CAAC,EAG7E2B,EAAiB3C,EAAAA,YAAY,IAAM,CACjC,KAAA,CAAE,WAAA4B,GAAeT,EACjBe,MAAY,KAElB,OACGrC,EAAAA,IAAA,MAAA,CAAI,UAAU,YACb,SAACA,MAAA,MAAA,CAAI,UAAU,sBACZ,SAAW+B,EAAA,IAAI,CAAC3B,EAAK2C,IAAU,CACxB,MAAAT,EAAY/B,EAAiBH,CAAG,EAChCqC,EAAUrC,EAAI,QAAc,IAAAiC,EAAM,WAC1BjC,EAAI,SAAS,IAAMiC,EAAM,YACzBjC,EAAI,YAAY,IAAMiC,EAAM,YAAY,EAEhDK,EAAatC,EAAI,QAAc,IAAAP,EAAa,WACjCO,EAAI,SAAS,IAAMP,EAAa,YAChCO,EAAI,YAAY,IAAMP,EAAa,YAAY,EAG1D0C,EAAeD,EAAU,MAAM,EAAG,CAAC,EACnCE,EAAkBF,EAAU,OAAS,EAAIA,EAAU,OAAS,EAAI,EAGpE,OAAAK,EAAA,KAAC,MAAA,CAEC,UAAW,mBAAmBF,EAAU,QAAU,EAAE,IAAIC,EAAa,WAAa,EAAE,GACpF,QAAS,IAAM,CACG5C,EAAA,IAAI,KAAKM,CAAG,CAAC,EAC7BR,EAAQ,KAAK,CACf,EAEA,SAAA,CAAC+C,EAAAA,KAAA,MAAA,CAAI,UAAU,kBACb,SAAA,CAAC3C,EAAAA,IAAA,MAAA,CAAI,UAAU,UACZ,SAAII,EAAA,mBAAmB,QAAS,CAAE,QAAS,MAAO,CAAC,CACtD,CAAA,QACC,MAAI,CAAA,UAAU,OAAQ,SAAAA,EAAI,SAAU,CAAA,CAAA,EACvC,EACAuC,EAAAA,KAAC,MAAI,CAAA,UAAU,kBACZ,SAAA,CAAaJ,EAAA,IAAI,CAACK,EAAOC,IACxBF,EAAA,KAAC,IAAA,CAEC,UAAU,aACV,KAAMC,EAAM,KACZ,OAAO,SACP,IAAI,sBACJ,QAAUvB,GAAMF,EAAiByB,EAAM,KAAMvB,CAAC,EAC9C,MAAO,GAAGP,EAAe8B,EAAM,IAAI,CAAC,MAAMA,EAAM,KAAK,GAErD,SAAA,CAAA5C,MAAC,OAAI,UAAU,aAAc,SAAec,EAAA8B,EAAM,IAAI,EAAE,EACvD5C,EAAA,IAAA,MAAA,CAAI,UAAU,cAAe,WAAM,KAAM,CAAA,CAAA,CAAA,EATrC6C,CAAA,CAWR,EACAL,EAAkB,GAChBG,OAAA,MAAA,CAAI,UAAU,kBAAkB,SAAA,CAAA,IAC7BH,EAAgB,OAAA,CACpB,CAAA,CAAA,CAEJ,CAAA,CAAA,CAAA,EAjCKO,CAkCP,CAAA,CAEH,EACH,CACF,CAAA,CAAA,EAED,CAACzB,EAAcf,EAAkBV,EAAciB,EAAgBK,CAAgB,CAAC,EAG7E6B,EAAgB7C,EAAAA,YAAY,IAAM,CAChC,KAAA,CAAE,UAAAyB,GAAcN,EAChB2B,EAAe1C,EAAiBV,CAAY,EAGhD,OAAA8C,EAAA,KAAC,MAAI,CAAA,UAAU,WACb,SAAA,CAAA3C,EAAAA,IAAC,OAAI,UAAU,aACb,eAAC,KAAI,CAAA,SAAAH,EAAa,mBAAmB,QAAS,CAAE,QAAS,OAAQ,MAAO,OAAQ,IAAK,UAAW,KAAM,UAAW,EAAE,CACrH,CAAA,EACA8C,EAAAA,KAAC,MAAI,CAAA,UAAU,WACb,SAAA,CAAA3C,EAAAA,IAAC,OAAI,UAAU,cACZ,WAAU,IAAKkD,GACblD,EAAA,IAAA,MAAA,CAAoB,UAAU,YAC7B,SAAAA,EAAAA,IAAC,QAAM,SAAKkD,EAAA,MAAA,CAAO,GADXA,EAAK,IAEf,CACD,CACH,CAAA,QACC,MAAI,CAAA,UAAU,gBACZ,SAAUtB,EAAA,IAAKsB,GAAS,CACvB,MAAMC,EAAeF,EAAa,OAAOL,GAASA,EAAM,KAAK,WAAWM,EAAK,KAAK,SAAW,EAAA,SAAS,EAAG,GAAG,CAAC,CAAC,EAG5G,OAAAlD,MAAC,OAAoB,UAAU,gBAC5B,WAAa,IAAI,CAAC4C,EAAOQ,IACxBT,EAAA,KAAC,IAAA,CAEC,UAAU,YACV,KAAMC,EAAM,KACZ,OAAO,SACP,IAAI,sBACJ,QAAUvB,GAAMF,EAAiByB,EAAM,KAAMvB,CAAC,EAC9C,MAAO,GAAGP,EAAe8B,EAAM,IAAI,CAAC,MAAMA,EAAM,KAAK,GAErD,SAAA,CAAA5C,MAAC,OAAI,UAAU,aAAc,SAAec,EAAA8B,EAAM,IAAI,EAAE,EACvD5C,EAAA,IAAA,MAAA,CAAI,UAAU,cAAe,WAAM,KAAM,CAAA,CAAA,CAAA,EATrCoD,CAAA,CAWR,CAdO,EAAAF,EAAK,IAef,CAAA,CAEH,CACH,CAAA,CAAA,CACF,CAAA,CAAA,EACF,CAAA,EAED,CAAC5B,EAAcf,EAAkBV,EAAciB,EAAgBK,CAAgB,CAAC,EAG7EkC,EAAc9B,EAAAA,QAAQ,IAAM,CAChC,OAAO5B,EAAM,CACX,IAAK,QAAS,OAAOwC,EAAgB,EACrC,IAAK,OAAQ,OAAOW,EAAe,EACnC,IAAK,MAAO,OAAOE,EAAc,EACjC,QAAS,OAAOb,EAAgB,CAAA,GAEjC,CAACxC,EAAMwC,EAAiBW,EAAgBE,CAAa,CAAC,EAGnDM,EAAQ/B,EAAAA,QAAQ,IAAM,CAC1B,GAAI5B,IAAS,QAET,OAAAK,EAAA,IAAC,KAAI,CAAA,SAAAR,EAAK,mBAAmB,QAAS,CAAE,MAAO,OAAQ,KAAM,SAAU,CAAC,CAAE,CAAA,EAE9E,GAAWG,IAAS,OAAQ,CACpB,KAAA,CAAE,WAAAoC,GAAeT,EACvB,cACG,KACA,CAAA,SAAA,CAAWS,EAAA,CAAC,EAAE,mBAAmB,QAAS,CAAE,MAAO,QAAS,IAAK,UAAW,EAAE,MAAIA,EAAW,CAAC,EAAE,mBAAmB,QAAS,CAAE,MAAO,QAAS,IAAK,UAAW,KAAM,SAAW,CAAA,CAAA,EAChL,CAAA,SAEOpC,IAAS,MAClB,OACGK,EAAAA,IAAA,KAAA,CAAI,SAAaH,EAAA,mBAAmB,QAAS,CAAE,MAAO,OAAQ,IAAK,UAAW,KAAM,SAAW,CAAA,EAAE,GAGrG,CAACF,EAAMH,EAAMK,EAAcyB,CAAY,CAAC,EAGzC,OAAAqB,EAAA,KAAC,MAAI,CAAA,UAAU,qBACb,SAAA,CAACA,EAAAA,KAAA,MAAA,CAAI,UAAU,kBACf,SAAA,CAAC3C,EAAA,IAAA,MAAA,CAAI,MAAO,CAAE,MAAO,OAAA,EACzB,SAAAA,EAAA,IAAC,MAAI,CAAA,UAAU,iBACZ,SAAAsD,CACH,CAAA,EACF,EAEQX,EAAAA,KAAC,MAAI,CAAA,UAAU,mBACb,SAAA,CAAA3C,MAAC,SAAO,CAAA,QAASS,EAAY,UAAU,aACpC,SACHR,EAAA,QACC,SAAO,CAAA,QAASY,EAAW,UAAU,eAAe,SAErD,QAAA,QACC,SAAO,CAAA,QAASD,EAAY,UAAU,aACpC,SACHb,CAAA,CAAA,CAAA,EACF,EACA4C,EAAAA,KAAC,MAAI,CAAA,UAAU,gBACb,SAAA,CAAC3C,EAAAA,IAAA,SAAA,CAAO,QAAS,IAAMJ,EAAQ,KAAK,EAAG,UAAWD,IAAS,MAAQ,SAAW,GAAI,SAElF,KAAA,CAAA,EACCK,EAAAA,IAAA,SAAA,CAAO,QAAS,IAAMJ,EAAQ,MAAM,EAAG,UAAWD,IAAS,OAAS,SAAW,GAAI,SAEpF,MAAA,CAAA,EACCK,EAAAA,IAAA,SAAA,CAAO,QAAS,IAAMJ,EAAQ,OAAO,EAAG,UAAWD,IAAS,QAAU,SAAW,GAAI,SAEtF,OAAA,CAAA,CAAA,CACF,CAAA,CAAA,EACF,EACCK,EAAA,IAAA,MAAA,CAAI,UAAU,gBACZ,SACHqD,CAAA,CAAA,CAAA,EACF,CAEJ","x_google_ignoreList":[0,1,2]}