{"version":3,"sources":["../src/timeline.tsx","../src/components/time-bar.tsx","../src/hooks/use-generate-blocks.tsx","../src/helpers/get-month-name.ts","../src/helpers/get-week-day-name.ts","../src/hooks/use-get-block-properties.ts","../src/components/rows-header.tsx","../src/components/row-header.tsx","../src/contexts/row-height-context.ts","../src/components/content.tsx","../src/components/lines-canvas.tsx","../src/hooks/use-produce-content.tsx","../src/components/static-event.tsx","../src/components/row-content.tsx","../node_modules/immer/src/utils/env.ts","../node_modules/immer/src/utils/errors.ts","../node_modules/immer/src/utils/common.ts","../node_modules/immer/src/utils/plugins.ts","../node_modules/immer/src/core/scope.ts","../node_modules/immer/src/core/finalize.ts","../node_modules/immer/src/core/proxy.ts","../node_modules/immer/src/core/immerClass.ts","../node_modules/immer/src/core/current.ts","../node_modules/immer/src/plugins/patches.ts","../node_modules/immer/src/plugins/mapset.ts","../node_modules/immer/src/immer.ts","../src/contexts/drag-started-context.ts","../src/contexts/external-properties-context.ts","../src/helpers/sort-events.ts","../src/components/event.tsx","../src/components/resize-icon.tsx","../src/hooks/use-intersection-observer.ts","../src/hooks/use-resize-observer.ts","../src/components/rt-indicator.tsx","../src/components/event-prompt.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport {\r\n  EventPromptActionsType,\r\n  EventType,\r\n  RowsHeightType,\r\n  TimelineType,\r\n} from \"./types\";\r\nimport \"./style.css\";\r\nimport TimeBar from \"./components/time-bar\";\r\nimport RowsHeader from \"./components/rows-header\";\r\nimport Content from \"./components/content\";\r\nimport { RowsHeightContext } from \"./contexts/row-height-context\";\r\nimport { DragStartedContext } from \"./contexts/drag-started-context\";\r\nimport useResizeObserver from \"./hooks/use-resize-observer\";\r\nimport { ExternalPropertiesContext } from \"./contexts/external-properties-context\";\r\nimport sortEvents from \"./helpers/sort-events\";\r\nimport RTIndicator from \"./components/rt-indicator\";\r\nimport EventPrompt from \"./components/event-prompt\";\r\n\r\nexport const Timeline = ({\r\n  rows,\r\n  events,\r\n  staticEvents,\r\n  onDrop,\r\n  onResize,\r\n  startDate,\r\n  endDate,\r\n  additionalClassNames,\r\n  showRTIndicator = true,\r\n  eventsResize = true,\r\n  eventPromptTemplate,\r\n  showEventPrompt = true,\r\n}: TimelineType) => {\r\n  const [windowTime, setWindowTime] = useState([\r\n    new Date(\r\n      startDate.getFullYear(),\r\n      startDate.getMonth(),\r\n      startDate.getDate(),\r\n      startDate.getHours(),\r\n      0,\r\n      0\r\n    ).getTime() / 1000,\r\n    new Date(\r\n      endDate.getFullYear(),\r\n      endDate.getMonth(),\r\n      endDate.getDate(),\r\n      endDate.getHours(),\r\n      0,\r\n      0\r\n    ).getTime() / 1000,\r\n  ]);\r\n\r\n  // cellWidth is in px\r\n  const [cellWidth, setCellWidth] = useState(0);\r\n\r\n  const [internalEvents, setInternalEvents] = useState<EventType[]>([]);\r\n\r\n  const contentRef = useRef<HTMLDivElement | null>(null);\r\n\r\n  const mainRef = useRef<HTMLDivElement | null>(null);\r\n\r\n  const bodyRef = useRef<HTMLDivElement | null>(null);\r\n\r\n  // tick is represent how many seconds is a one pixel\r\n  const [tick, setTick] = useState<number | null>(null);\r\n\r\n  const [scrollWidth, setScrollWidth] = useState(0);\r\n\r\n  const [rowsHeight, setRowsHeight] = useState<Record<\r\n    string,\r\n    RowsHeightType\r\n  > | null>(null);\r\n\r\n  const [allRowsHeight, setAllRowsHeight] = useState<number>(0);\r\n\r\n  const eventPromptRef = useRef<EventPromptActionsType | null>(null);\r\n\r\n  useEffect(() => {\r\n    if (contentRef.current) {\r\n      const windowDuration = windowTime[1] - windowTime[0];\r\n      const numberOfHourBlocks = windowDuration / 3600;\r\n      setTick(\r\n        windowDuration / contentRef.current.getBoundingClientRect().width\r\n      );\r\n      setCellWidth(\r\n        contentRef.current.getBoundingClientRect().width / numberOfHourBlocks\r\n      );\r\n    }\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    if (bodyRef.current) {\r\n      setScrollWidth(\r\n        bodyRef.current.getBoundingClientRect().width -\r\n          bodyRef.current.scrollWidth\r\n      );\r\n    }\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    setInternalEvents(events.sort(sortEvents));\r\n  }, [events]);\r\n\r\n  const [dragStarted, setDragStarted] = useState<boolean>(false);\r\n\r\n  useEffect(() => {\r\n    let tempRowsHeight: Record<string, RowsHeightType> | null = null;\r\n    rows.forEach((row) => {\r\n      if (tempRowsHeight === null) {\r\n        tempRowsHeight = { [row.id]: { minHeight: 40 } };\r\n      } else {\r\n        tempRowsHeight[row.id] = { minHeight: 40 };\r\n      }\r\n    });\r\n    setRowsHeight(tempRowsHeight);\r\n  }, [rows]);\r\n\r\n  useResizeObserver({ contentRef, setCellWidth, setTick, windowTime });\r\n\r\n  const eventPrompt = useMemo(\r\n    () => (\r\n      <EventPrompt\r\n        ref={eventPromptRef}\r\n        template={eventPromptTemplate}\r\n      ></EventPrompt>\r\n    ),\r\n    [eventPromptTemplate]\r\n  );\r\n\r\n  return (\r\n    <div className=\"main-wrapper\" ref={mainRef}>\r\n      {showRTIndicator && (\r\n        <RTIndicator tick={tick} windowTime={windowTime}></RTIndicator>\r\n      )}\r\n      <TimeBar\r\n        windowTime={windowTime}\r\n        tick={tick}\r\n        contentWidth={\r\n          contentRef.current\r\n            ? contentRef.current.getBoundingClientRect().width\r\n            : null\r\n        }\r\n        scrollWidth={scrollWidth}\r\n      />\r\n\r\n      <div className=\"body-wrapper\" ref={bodyRef}>\r\n        <RowsHeightContext.Provider\r\n          value={{ rowsHeight, setRowsHeight, allRowsHeight, setAllRowsHeight }}\r\n        >\r\n          <RowsHeader\r\n            rows={rows}\r\n            className={additionalClassNames?.rowsHeader}\r\n          />\r\n          <DragStartedContext.Provider value={{ dragStarted, setDragStarted }}>\r\n            <ExternalPropertiesContext.Provider\r\n              value={{ onDrop, onResize, eventsResize, eventPromptRef }}\r\n            >\r\n              <Content\r\n                events={internalEvents}\r\n                staticEvents={staticEvents}\r\n                rows={rows}\r\n                setEvents={setInternalEvents}\r\n                tick={tick}\r\n                windowTime={windowTime}\r\n                cellWidth={cellWidth}\r\n                setWindowTime={setWindowTime}\r\n                ref={contentRef}\r\n                setCellWidth={setCellWidth}\r\n                contentWidth={\r\n                  contentRef.current\r\n                    ? contentRef.current.getBoundingClientRect().width\r\n                    : null\r\n                }\r\n                bodyRef={bodyRef}\r\n                lineClassName={additionalClassNames?.gridLine}\r\n              />\r\n              {showEventPrompt && eventPrompt}\r\n            </ExternalPropertiesContext.Provider>\r\n          </DragStartedContext.Provider>\r\n        </RowsHeightContext.Provider>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n","import React, { useRef } from \"react\";\r\nimport useGenerateBlocks from \"../hooks/use-generate-blocks\";\r\nimport useGetBlockProperties from \"../hooks/use-get-block-properties\";\r\nimport { PartialRecord, ModifableElements } from \"../types\";\r\n\r\nconst TimeBar = ({\r\n  windowTime,\r\n  tick,\r\n  contentWidth,\r\n  scrollWidth,\r\n  additionalClassNames,\r\n}: {\r\n  windowTime: number[];\r\n  tick: number | null;\r\n  contentWidth: number | null;\r\n  scrollWidth: number;\r\n  additionalClassNames?: PartialRecord<keyof ModifableElements, string>;\r\n}) => {\r\n  const timeContentRef = useRef<HTMLDivElement | null>(null);\r\n\r\n  const { blockWidth } = useGetBlockProperties({\r\n    windowTime,\r\n    contentWidth,\r\n  });\r\n\r\n  const { dayBlocks, hourBlocks } = useGenerateBlocks({\r\n    windowTime,\r\n    tick,\r\n    contentWidth,\r\n    blockWidth,\r\n  });\r\n\r\n  const timeBarClassNames = additionalClassNames?.timeBar\r\n    ? \"time-bar \" + additionalClassNames.timeBar\r\n    : \"time-bar\";\r\n\r\n  const dayRowClassNames = additionalClassNames?.dayRow\r\n    ? \"day-row \" + additionalClassNames.dayRow\r\n    : \"day-row\";\r\n\r\n  const hourRowClassNames = additionalClassNames?.hourRow\r\n    ? \"hour-row \" + additionalClassNames.hourRow\r\n    : \"hour-row\";\r\n  return (\r\n    <div className={timeBarClassNames}>\r\n      <div className=\"empty-block\"></div>\r\n      <div\r\n        className=\"time-content\"\r\n        ref={timeContentRef}\r\n        style={{ minWidth: contentWidth ? contentWidth : 0 }}\r\n      >\r\n        <div\r\n          className={dayRowClassNames}\r\n          style={{\r\n            gridTemplateColumns: `repeat(auto-fill, minmax(${blockWidth}px, 1fr))`,\r\n          }}\r\n        >\r\n          {dayBlocks.map((block) => block)}\r\n        </div>\r\n        <div\r\n          className={hourRowClassNames}\r\n          style={{\r\n            gridTemplateColumns: `repeat(auto-fill, minmax(${blockWidth}px, 1fr))`,\r\n          }}\r\n        >\r\n          {hourBlocks.map((block) => block)}\r\n        </div>\r\n      </div>\r\n      {scrollWidth ? (\r\n        <div\r\n          style={{\r\n            width: scrollWidth,\r\n            height: \"100%\",\r\n            boxSizing: \"border-box\",\r\n            borderLeft: \"1px solid yellow\",\r\n          }}\r\n        ></div>\r\n      ) : null}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default TimeBar;\r\n","import React from \"react\";\r\nimport { useMemo } from \"react\";\r\nimport getMonthName from \"../helpers/get-month-name\";\r\nimport getWeekDayName from \"../helpers/get-week-day-name\";\r\n\r\nconst useGenerateBlocks = ({\r\n  windowTime,\r\n  tick,\r\n  contentWidth,\r\n  blockWidth,\r\n}: {\r\n  windowTime: number[];\r\n  tick: number | null;\r\n  contentWidth: number | null;\r\n  blockWidth: number;\r\n}) => {\r\n  const { dayBlocks, hourBlocks } = useMemo(() => {\r\n    let timePoint = windowTime[0];\r\n    const dayBlocks: JSX.Element[] = [];\r\n    const hourBlocks: JSX.Element[] = [];\r\n    if (tick === null || contentWidth === null) {\r\n      return { dayBlocks: [], hourBlocks: [] };\r\n    }\r\n\r\n    let widthLeft = contentWidth;\r\n\r\n    let prevNumBlocks = 1;\r\n\r\n    while (1) {\r\n      let datePoint = new Date(timePoint * 1000);\r\n      const endDatePoint = new Date(\r\n        datePoint.getFullYear(),\r\n        datePoint.getMonth(),\r\n        datePoint.getDate(),\r\n        23,\r\n        59,\r\n        59\r\n      );\r\n      const dateDuration = endDatePoint.getTime() - datePoint.getTime();\r\n      const dateWidth = dateDuration / 1000 / tick;\r\n\r\n      widthLeft -= dateWidth;\r\n\r\n      if (Math.round(widthLeft) < 0) {\r\n        const numBlocks = Math.round((dateWidth + widthLeft) / blockWidth);\r\n\r\n        for (let i = 0; i < numBlocks; i++) {\r\n          hourBlocks.push(\r\n            <div\r\n              className=\"hour-block\"\r\n              key={`${datePoint.getDate()}_hour_${i}`}\r\n            >\r\n              {i < 10 ? `0${i}:00` : `${i}:00`}\r\n            </div>\r\n          );\r\n        }\r\n\r\n        dayBlocks.push(\r\n          <div\r\n            className=\"day-block\"\r\n            key={`${datePoint.getDate()} ${datePoint.getMonth()}`}\r\n            style={{\r\n              gridColumn: `${prevNumBlocks} / ${prevNumBlocks + numBlocks}`,\r\n              // width: dateWidth + widthLeft,\r\n              // minWidth: dateWidth + widthLeft,\r\n            }}\r\n          >\r\n            {getWeekDayName(datePoint.getDay())} {datePoint.getDate()}{\" \"}\r\n            {getMonthName(datePoint.getMonth())}\r\n          </div>\r\n        );\r\n        prevNumBlocks += numBlocks;\r\n        break;\r\n      }\r\n\r\n      const numBlocks = Math.round(dateWidth / blockWidth);\r\n\r\n      for (let i = 24 - numBlocks; i < 24; i++) {\r\n        hourBlocks.push(\r\n          <div className=\"hour-block\" key={`${datePoint.getDate()}_hour_${i}`}>\r\n            {i < 10 ? `0${i}:00` : `${i}:00`}\r\n          </div>\r\n        );\r\n      }\r\n\r\n      dayBlocks.push(\r\n        <div\r\n          className=\"day-block\"\r\n          key={`${datePoint.getDate()} ${datePoint.getMonth()}`}\r\n          style={{\r\n            gridColumn: `${prevNumBlocks} / ${prevNumBlocks + numBlocks}`,\r\n            // width: dateWidth,\r\n            // minWidth: dateWidth,\r\n          }}\r\n        >\r\n          {getWeekDayName(datePoint.getDay())} {datePoint.getDate()}{\" \"}\r\n          {getMonthName(datePoint.getMonth())}\r\n        </div>\r\n      );\r\n      prevNumBlocks += numBlocks;\r\n      if (Math.round(widthLeft) === 0) {\r\n        break;\r\n      }\r\n      timePoint = (endDatePoint.getTime() + 1000) / 1000;\r\n    }\r\n\r\n    return { dayBlocks, hourBlocks };\r\n  }, [tick, windowTime, contentWidth]);\r\n  return { dayBlocks, hourBlocks };\r\n};\r\n\r\nexport default useGenerateBlocks;\r\n","const getMonthName = (monthIndex: number) => {\r\n  let monthName: string | null = null;\r\n  switch (monthIndex) {\r\n    case 0:\r\n      monthName = \"Jan\";\r\n      break;\r\n    case 1:\r\n      monthName = \"Feb\";\r\n      break;\r\n    case 2:\r\n      monthName = \"Mar\";\r\n      break;\r\n    case 3:\r\n      monthName = \"Apr\";\r\n      break;\r\n    case 4:\r\n      monthName = \"May\";\r\n      break;\r\n    case 5:\r\n      monthName = \"Jun\";\r\n      break;\r\n    case 6:\r\n      monthName = \"Jul\";\r\n      break;\r\n    case 7:\r\n      monthName = \"Aug\";\r\n      break;\r\n    case 8:\r\n      monthName = \"Sep\";\r\n      break;\r\n    case 9:\r\n      monthName = \"Oct\";\r\n      break;\r\n    case 10:\r\n      monthName = \"Nov\";\r\n      break;\r\n    case 11:\r\n      monthName = \"Dec\";\r\n      break;\r\n    default:\r\n      monthName = \"Jan\";\r\n  }\r\n\r\n  return monthName;\r\n};\r\n\r\nexport default getMonthName;\r\n","const getWeekDayName = (dayIndex: number) => {\r\n  let dayName: string | null = null;\r\n  switch (dayIndex) {\r\n    case 0:\r\n      dayName = \"Mon\";\r\n      break;\r\n    case 1:\r\n      dayName = \"Tue\";\r\n      break;\r\n    case 2:\r\n      dayName = \"Wed\";\r\n      break;\r\n    case 3:\r\n      dayName = \"Thu\";\r\n      break;\r\n    case 4:\r\n      dayName = \"Fri\";\r\n      break;\r\n    case 5:\r\n      dayName = \"Sat\";\r\n      break;\r\n    case 6:\r\n      dayName = \"Sun\";\r\n      break;\r\n    default:\r\n      dayName = \"Mon\";\r\n  }\r\n\r\n  return dayName;\r\n};\r\n\r\nexport default getWeekDayName;\r\n","import { useMemo } from \"react\";\r\n\r\nconst useGetBlockProperties = ({\r\n  windowTime,\r\n  contentWidth,\r\n}: {\r\n  windowTime: number[];\r\n  contentWidth: number | null;\r\n}) => {\r\n  const numberOfHourBlocks = useMemo(\r\n    () => (windowTime[1] - windowTime[0]) / 3600,\r\n    [windowTime]\r\n  );\r\n\r\n  const blockWidth = contentWidth ? contentWidth / numberOfHourBlocks : 0;\r\n\r\n  return { numberOfHourBlocks, blockWidth };\r\n};\r\n\r\nexport default useGetBlockProperties;\r\n","import React from \"react\";\r\nimport RowHeader from \"./row-header\";\r\nimport { RowType } from \"../types\";\r\n\r\nconst RowsHeader = ({\r\n  rows,\r\n  className,\r\n}: {\r\n  rows: RowType[];\r\n  className?: string;\r\n}) => {\r\n  const classNames = className\r\n    ? \"rows-header-wrapper \" + className\r\n    : \"rows-header-wrapper\";\r\n  return (\r\n    <div className={classNames}>\r\n      {rows.map((row) => (\r\n        <RowHeader\r\n          key={`row_header_${row.id}`}\r\n          id={row.id}\r\n          name={row.name}\r\n        ></RowHeader>\r\n      ))}\r\n    </div>\r\n  );\r\n};\r\nexport default RowsHeader;\r\n","import React, { useContext } from \"react\";\r\nimport \"./style.css\";\r\nimport { RowsHeightContext } from \"../contexts/row-height-context\";\r\n\r\nconst RowHeader = ({ name, id }: { name: string; id: string }) => {\r\n  const rowsHeightContext = useContext(RowsHeightContext);\r\n\r\n  const minHeight =\r\n    rowsHeightContext &&\r\n    rowsHeightContext.rowsHeight &&\r\n    rowsHeightContext.rowsHeight[id]\r\n      ? rowsHeightContext.rowsHeight[id].minHeight\r\n      : 40;\r\n\r\n  return (\r\n    <div className=\"row-header\" style={{ minHeight: minHeight }}>\r\n      {name}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default RowHeader;\r\n","import { createContext } from \"react\";\r\nimport { RowsHeightType } from \"../types\";\r\n\r\ntype RowsHeightContextType = {\r\n  rowsHeight: Record<string, RowsHeightType> | null;\r\n  setRowsHeight: React.Dispatch<\r\n    React.SetStateAction<Record<string, RowsHeightType> | null>\r\n  >;\r\n  allRowsHeight: number;\r\n  setAllRowsHeight: React.Dispatch<React.SetStateAction<number>>;\r\n};\r\n\r\nexport const RowsHeightContext = createContext<RowsHeightContextType | null>(\r\n  null\r\n);\r\n","import React, {\r\n  forwardRef,\r\n  useCallback,\r\n  useContext,\r\n  useEffect,\r\n  useRef,\r\n  useState,\r\n} from \"react\";\r\nimport { EventType, RowType } from \"../types\";\r\nimport LinesCanvas from \"./lines-canvas\";\r\nimport useProduceContent from \"../hooks/use-produce-content\";\r\nimport useGetBlockProperties from \"../hooks/use-get-block-properties\";\r\nimport { RowsHeightContext } from \"../contexts/row-height-context\";\r\n\r\ntype ContentType = {\r\n  rows: RowType[];\r\n  events: EventType[];\r\n  staticEvents?: EventType[];\r\n  setEvents: React.Dispatch<React.SetStateAction<EventType[]>>;\r\n  tick: number | null;\r\n  windowTime: number[];\r\n  cellWidth: number;\r\n  setWindowTime: React.Dispatch<React.SetStateAction<number[]>>;\r\n  contentWidth: number | null;\r\n  setCellWidth: React.Dispatch<React.SetStateAction<number>>;\r\n  bodyRef: React.MutableRefObject<HTMLDivElement | null>;\r\n  lineClassName?: string;\r\n};\r\n\r\nconst Content = forwardRef<HTMLDivElement, ContentType>(\r\n  (\r\n    {\r\n      rows,\r\n      events,\r\n      staticEvents,\r\n      setEvents,\r\n      tick,\r\n      windowTime,\r\n      cellWidth,\r\n      setWindowTime,\r\n      contentWidth,\r\n      setCellWidth,\r\n      bodyRef,\r\n      lineClassName,\r\n    },\r\n    ref\r\n  ) => {\r\n    const [mouseDown, setMouseDown] = useState(false);\r\n    const startMovePosition = useRef<number | null>(null);\r\n\r\n    const [changeGrid, setChangeGrid] = useState(false);\r\n\r\n    const { blockWidth } = useGetBlockProperties({ windowTime, contentWidth });\r\n\r\n    const rowsHeightContext = useContext(RowsHeightContext);\r\n\r\n    const handleOnMouseMove = useCallback(\r\n      (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\r\n        event.preventDefault();\r\n        if (!mouseDown) {\r\n          return;\r\n        }\r\n        const element = event.target as HTMLElement;\r\n        const { left } = element.getBoundingClientRect();\r\n        const movePosition = event.clientX - left;\r\n\r\n        const moveTimestamp = tick ? Math.floor(tick * blockWidth) : 0;\r\n\r\n        if (\r\n          startMovePosition.current &&\r\n          startMovePosition.current - movePosition >= blockWidth\r\n        ) {\r\n          startMovePosition.current = movePosition;\r\n          setWindowTime((prev) => [\r\n            prev[0] + moveTimestamp,\r\n            prev[1] + moveTimestamp,\r\n          ]);\r\n        } else if (\r\n          startMovePosition.current &&\r\n          movePosition - startMovePosition.current >= blockWidth\r\n        ) {\r\n          startMovePosition.current = movePosition;\r\n          setWindowTime((prev) => [\r\n            prev[0] - moveTimestamp,\r\n            prev[1] - moveTimestamp,\r\n          ]);\r\n        }\r\n      },\r\n      [blockWidth, setWindowTime, mouseDown]\r\n    );\r\n\r\n    const handleOnMouseDown = useCallback(\r\n      (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\r\n        setMouseDown(true);\r\n        // disable auto-scroll when adjusting the grid granulation by wheeling\r\n        if (event.button === 1) {\r\n          event.preventDefault();\r\n        }\r\n        const element = event.target as HTMLElement;\r\n        const { left } = element.getBoundingClientRect();\r\n        startMovePosition.current = event.clientX - left;\r\n      },\r\n      [setMouseDown]\r\n    );\r\n\r\n    const handleOnMouseUp = useCallback(() => {\r\n      setMouseDown(false);\r\n    }, [setMouseDown]);\r\n\r\n    const handleOnMouseLeave = useCallback(\r\n      () => setMouseDown(false),\r\n      [setMouseDown]\r\n    );\r\n\r\n    const content = useProduceContent({\r\n      rows,\r\n      windowTime,\r\n      tick,\r\n      events,\r\n      staticEvents,\r\n      cellWidth,\r\n      setEvents,\r\n      bodyRef,\r\n    });\r\n\r\n    const handleAuxClick = useCallback(\r\n      (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\r\n        event.preventDefault();\r\n        if (event.button === 1) {\r\n          setChangeGrid((prev) => !prev);\r\n        }\r\n      },\r\n      []\r\n    );\r\n\r\n    const handleOnWheel = useCallback(\r\n      (event: React.WheelEvent<HTMLDivElement>) => {\r\n        const pixelsToCalculate = tick ? 900 / tick : 0;\r\n        if (changeGrid) {\r\n          setCellWidth((cellWidth) => {\r\n            const newCellWidth =\r\n              event.deltaY > 0\r\n                ? cellWidth + pixelsToCalculate\r\n                : cellWidth - pixelsToCalculate;\r\n\r\n            if (\r\n              newCellWidth < pixelsToCalculate ||\r\n              newCellWidth > pixelsToCalculate * 12\r\n            ) {\r\n              return cellWidth;\r\n            }\r\n\r\n            return newCellWidth;\r\n          });\r\n        }\r\n      },\r\n      [changeGrid, cellWidth, tick]\r\n    );\r\n\r\n    useEffect(() => {\r\n      if (bodyRef.current) {\r\n        bodyRef.current.style.overflow = changeGrid ? \"hidden\" : \"auto\";\r\n      }\r\n    }, [changeGrid]);\r\n\r\n    return (\r\n      <div\r\n        key=\"content\"\r\n        ref={ref}\r\n        className=\"content-wrapper\"\r\n        onMouseDown={handleOnMouseDown}\r\n        onMouseUp={handleOnMouseUp}\r\n        onMouseMove={handleOnMouseMove}\r\n        onMouseLeave={handleOnMouseLeave}\r\n        onAuxClick={handleAuxClick}\r\n        onWheel={handleOnWheel}\r\n        style={{\r\n          cursor: mouseDown ? \"grabbing\" : \"grab\",\r\n          height: rowsHeightContext?.allRowsHeight,\r\n        }}\r\n      >\r\n        <LinesCanvas\r\n          contentWidth={contentWidth}\r\n          cellWidth={cellWidth}\r\n          lineClassName={lineClassName}\r\n        ></LinesCanvas>\r\n        {content}\r\n      </div>\r\n    );\r\n  }\r\n);\r\n\r\nexport default Content;\r\n","import React from \"react\";\r\nimport { useMemo } from \"react\";\r\n\r\nconst LinesCanvas = ({\r\n  contentWidth,\r\n  cellWidth,\r\n  lineClassName,\r\n}: {\r\n  contentWidth: number | null;\r\n  cellWidth: number;\r\n  lineClassName?: string;\r\n}) => {\r\n  const lines = useMemo(() => {\r\n    const lines: JSX.Element[] = [];\r\n    const classNames = lineClassName ? \"line \" + lineClassName : \"line\";\r\n    if (contentWidth) {\r\n      for (let i = cellWidth; i < contentWidth; i = i + cellWidth) {\r\n        lines.push(<div key={`line_${i}`} className={classNames}></div>);\r\n      }\r\n    }\r\n    return lines;\r\n  }, [cellWidth, contentWidth]);\r\n\r\n  const minWidth = useMemo(() => {\r\n    return contentWidth ? contentWidth - lines.length * cellWidth : 0;\r\n  }, [contentWidth, cellWidth, lines]);\r\n\r\n  return (\r\n    <div\r\n      className={minWidth < 1 ? \"lines-canvas hide-last-line\" : \"lines-canvas\"}\r\n      style={\r\n        minWidth < 1\r\n          ? {\r\n              gridTemplateColumns: `repeat(auto-fill, minmax(${cellWidth}px, 1fr))`,\r\n            }\r\n          : {\r\n              gridTemplateColumns: `repeat(auto-fill, minmax(${minWidth}px, ${cellWidth}px))`,\r\n            }\r\n      }\r\n    >\r\n      {lines}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default LinesCanvas;\r\n","import { useContext, useEffect, useMemo, useRef } from \"react\";\r\nimport { EventType, RowsHeightType, RowType } from \"../types\";\r\nimport React from \"react\";\r\nimport StaticEvent from \"../components/static-event\";\r\nimport RowContent from \"../components/row-content\";\r\nimport Event from \"../components/event\";\r\nimport { RowsHeightContext } from \"../contexts/row-height-context\";\r\nimport useIntersectionObserver from \"./use-intersection-observer\";\r\n\r\ntype ProduceContentType = {\r\n  rows: RowType[];\r\n  events: EventType[];\r\n  staticEvents?: EventType[];\r\n  setEvents: React.Dispatch<React.SetStateAction<EventType[]>>;\r\n  tick: number | null;\r\n  windowTime: number[];\r\n  cellWidth: number;\r\n  bodyRef: React.MutableRefObject<HTMLDivElement | null>;\r\n};\r\n\r\nconst useProduceContent = ({\r\n  rows,\r\n  windowTime,\r\n  tick,\r\n  events,\r\n  staticEvents,\r\n  cellWidth,\r\n  setEvents,\r\n  bodyRef,\r\n}: ProduceContentType) => {\r\n  const rowsHeightContext = useContext(RowsHeightContext);\r\n\r\n  const tempRowsHeightRef = useRef<Record<string, RowsHeightType> | null>(null);\r\n\r\n  const rowsContentRef = useRef<HTMLDivElement[]>([]);\r\n\r\n  const [content, internalAllRowsHeight] = useMemo(() => {\r\n    let internalAllRowsHeight = 0;\r\n    return [\r\n      rows.map((row, i) => {\r\n        let eventOrder = 0;\r\n        let prevEvent: EventType[] = [];\r\n        let highestEventOrder = 0;\r\n        const rowEvents = tick\r\n          ? events\r\n              .filter((event) => event.rowId === row.id)\r\n              .map((event) => {\r\n                if (\r\n                  event.endTime >= windowTime[0] &&\r\n                  event.startTime <= windowTime[1]\r\n                ) {\r\n                  let tempEventOrder = 0;\r\n                  let assignEventOrder = true;\r\n                  for (let i = 0; i <= eventOrder; i++) {\r\n                    if (\r\n                      prevEvent &&\r\n                      prevEvent[i] &&\r\n                      prevEvent[i].endTime > event.startTime\r\n                    ) {\r\n                      tempEventOrder += 1;\r\n                    } else {\r\n                      if (eventOrder > highestEventOrder) {\r\n                        highestEventOrder = eventOrder;\r\n                      }\r\n                      eventOrder = 0;\r\n                      assignEventOrder = false;\r\n                      break;\r\n                    }\r\n                  }\r\n\r\n                  if (assignEventOrder) {\r\n                    eventOrder = tempEventOrder;\r\n                  }\r\n\r\n                  prevEvent[tempEventOrder] = event;\r\n                  return (\r\n                    <Event\r\n                      key={`event_${event.id}`}\r\n                      eventData={event}\r\n                      startPosition={(event.startTime - windowTime[0]) / tick}\r\n                      width={(event.endTime - event.startTime) / tick}\r\n                      top={10 + 22 * tempEventOrder}\r\n                      setEvents={setEvents}\r\n                      tick={tick}\r\n                    ></Event>\r\n                  );\r\n                }\r\n              })\r\n          : null;\r\n\r\n        if (eventOrder > highestEventOrder) {\r\n          highestEventOrder = eventOrder;\r\n        }\r\n\r\n        if (tempRowsHeightRef.current === null) {\r\n          tempRowsHeightRef.current = {\r\n            [row.id]: { minHeight: 40 + highestEventOrder * 22 },\r\n          };\r\n        } else {\r\n          tempRowsHeightRef.current[row.id] = {\r\n            minHeight: 40 + highestEventOrder * 22,\r\n          };\r\n        }\r\n        internalAllRowsHeight += 40 + highestEventOrder * 22;\r\n\r\n        const rowStaticEvents =\r\n          tick && staticEvents\r\n            ? staticEvents\r\n                .filter((event) => event.rowId === row.id)\r\n                .map((event) => {\r\n                  if (\r\n                    event.endTime >= windowTime[0] &&\r\n                    event.startTime <= windowTime[1]\r\n                  ) {\r\n                    return (\r\n                      <StaticEvent\r\n                        key={`static_event_${event.id}`}\r\n                        id={event.id}\r\n                        startPosition={(event.startTime - windowTime[0]) / tick}\r\n                        width={(event.endTime - event.startTime) / tick}\r\n                        top={10}\r\n                        height={20 + highestEventOrder * 22}\r\n                      ></StaticEvent>\r\n                    );\r\n                  }\r\n                })\r\n            : null;\r\n\r\n        return (\r\n          <React.Fragment key={`row_content_${row.id}`}>\r\n            <RowContent\r\n              id={row.id}\r\n              ref={(el) => {\r\n                if (rowsContentRef.current && rowsContentRef.current[i] && el) {\r\n                  rowsContentRef.current[i] = el;\r\n                } else if (rowsContentRef.current && el) {\r\n                  rowsContentRef.current.push(el);\r\n                }\r\n              }}\r\n              setEvents={setEvents}\r\n              tick={tick}\r\n              windowTime={windowTime}\r\n              cellWidth={cellWidth}\r\n            >\r\n              {rowEvents}\r\n              {rowStaticEvents}\r\n            </RowContent>\r\n          </React.Fragment>\r\n        );\r\n      }),\r\n      internalAllRowsHeight,\r\n    ];\r\n  }, [rows, events, tick, windowTime, cellWidth]);\r\n\r\n  useIntersectionObserver({\r\n    rowsContentRef,\r\n    bodyRef,\r\n  });\r\n\r\n  useEffect(() => {\r\n    if (rowsHeightContext) {\r\n      rowsHeightContext.setRowsHeight(tempRowsHeightRef.current);\r\n      rowsHeightContext.setAllRowsHeight(internalAllRowsHeight);\r\n    }\r\n  }, [content, internalAllRowsHeight]);\r\n\r\n  return content;\r\n};\r\n\r\nexport default useProduceContent;\r\n","import React, { CSSProperties, useCallback, useContext } from \"react\";\r\nimport { DragStartedContext } from \"../contexts/drag-started-context\";\r\n\r\nconst StaticEvent = ({\r\n  id,\r\n  startPosition,\r\n  width,\r\n  top,\r\n  height,\r\n}: {\r\n  id: string;\r\n  startPosition: CSSProperties[\"left\"];\r\n  width: CSSProperties[\"width\"];\r\n  top: CSSProperties[\"top\"];\r\n  height: CSSProperties[\"height\"];\r\n}) => {\r\n  return (\r\n    <div\r\n      id={`static_event_${id}`}\r\n      key={`static_event_${id}`}\r\n      className=\"static-event\"\r\n      onDrop={(event) => event.stopPropagation()}\r\n      style={{\r\n        left: startPosition,\r\n        width: width,\r\n        top: top,\r\n        minHeight: height,\r\n      }}\r\n    ></div>\r\n  );\r\n};\r\nexport default StaticEvent;\r\n","import React, {\r\n  forwardRef,\r\n  PropsWithChildren,\r\n  useCallback,\r\n  useContext,\r\n} from \"react\";\r\nimport { EventType } from \"../types\";\r\nimport { produce } from \"immer\";\r\nimport { RowsHeightContext } from \"../contexts/row-height-context\";\r\nimport { DragStartedContext } from \"../contexts/drag-started-context\";\r\nimport { ExternalPropertiesContext } from \"../contexts/external-properties-context\";\r\nimport sortEvents from \"../helpers/sort-events\";\r\n\r\ntype RowContentProps = {\r\n  id: string;\r\n  setEvents: React.Dispatch<React.SetStateAction<EventType[]>>;\r\n  tick: number | null;\r\n  windowTime: number[];\r\n  cellWidth: number;\r\n};\r\n\r\nconst RowContent = forwardRef<\r\n  HTMLDivElement,\r\n  PropsWithChildren<RowContentProps>\r\n>((props: PropsWithChildren<RowContentProps>, ref) => {\r\n  const { setEvents, tick, id, windowTime, cellWidth, children } = props;\r\n\r\n  const { dragStarted, setDragStarted } = useContext(DragStartedContext);\r\n\r\n  const { onDrop } = useContext(ExternalPropertiesContext);\r\n\r\n  const handleOnDrop = useCallback(\r\n    (event: React.DragEvent<HTMLDivElement>) => {\r\n      event.preventDefault();\r\n      const element = event.target as HTMLElement;\r\n      const { left } = element.getBoundingClientRect();\r\n      const draggedEventId = event.dataTransfer.getData(\"eventId\");\r\n      //new position in px within container\r\n      const closestCell = Math.round((event.clientX - left) / cellWidth);\r\n      const newPosition = cellWidth * closestCell;\r\n      setEvents(\r\n        produce((draft) => {\r\n          const event = draft.find((event) => event.id === draggedEventId);\r\n\r\n          if (event && tick) {\r\n            const newStartTime = windowTime[0] + newPosition * tick;\r\n            const eventDuration = event.endTime - event.startTime;\r\n            const newEndTime =\r\n              windowTime[0] + eventDuration + newPosition * tick;\r\n\r\n            if (onDrop) {\r\n              onDrop({\r\n                eventId: event.id,\r\n                oldRowId: event.rowId,\r\n                newRowId: props.id,\r\n                startTime: newStartTime,\r\n                endTime: newEndTime,\r\n              });\r\n            }\r\n\r\n            event.startTime = newStartTime;\r\n            event.endTime = newEndTime;\r\n            event.rowId = props.id;\r\n          }\r\n          draft.sort(sortEvents);\r\n        })\r\n      );\r\n      setDragStarted(false);\r\n    },\r\n    [setEvents, tick, windowTime, cellWidth]\r\n  );\r\n\r\n  const rowsHeightContext = useContext(RowsHeightContext);\r\n\r\n  const minHeight =\r\n    rowsHeightContext &&\r\n    rowsHeightContext.rowsHeight &&\r\n    rowsHeightContext.rowsHeight[id]\r\n      ? rowsHeightContext.rowsHeight[id].minHeight\r\n      : 40;\r\n\r\n  return (\r\n    <div\r\n      id={`row_${id}`}\r\n      ref={ref}\r\n      onDragOver={(event) => event.preventDefault()}\r\n      onDrop={handleOnDrop}\r\n      className={dragStarted ? \"row-content not-clickable\" : \"row-content\"}\r\n      data-index={id}\r\n      style={{\r\n        minHeight: minHeight,\r\n      }}\r\n    >\r\n      {children}\r\n    </div>\r\n  );\r\n});\r\n\r\nexport default RowContent;\r\n","// Should be no imports here!\n\n/**\n * The sentinel value returned by producers to replace the draft with undefined.\n */\nexport const NOTHING: unique symbol = Symbol.for(\"immer-nothing\")\n\n/**\n * To let Immer treat your class instances as plain immutable objects\n * (albeit with a custom prototype), you must define either an instance property\n * or a static property on each of your custom classes.\n *\n * Otherwise, your class instance will never be drafted, which means it won't be\n * safe to mutate in a produce callback.\n */\nexport const DRAFTABLE: unique symbol = Symbol.for(\"immer-draftable\")\n\nexport const DRAFT_STATE: unique symbol = Symbol.for(\"immer-state\")\n","export const errors =\n\tprocess.env.NODE_ENV !== \"production\"\n\t\t? [\n\t\t\t\t// All error codes, starting by 0:\n\t\t\t\tfunction(plugin: string) {\n\t\t\t\t\treturn `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`\n\t\t\t\t},\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`\n\t\t\t\t},\n\t\t\t\t\"This object has been frozen and should not be mutated\",\n\t\t\t\tfunction(data: any) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" +\n\t\t\t\t\t\tdata\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\t\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n\t\t\t\t\"Immer forbids circular references\",\n\t\t\t\t\"The first or second argument to `produce` must be a function\",\n\t\t\t\t\"The third argument to `produce` must be a function or undefined\",\n\t\t\t\t\"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n\t\t\t\t\"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'current' expects a draft, got: ${thing}`\n\t\t\t\t},\n\t\t\t\t\"Object.defineProperty() cannot be used on an Immer draft\",\n\t\t\t\t\"Object.setPrototypeOf() cannot be used on an Immer draft\",\n\t\t\t\t\"Immer only supports deleting array indices\",\n\t\t\t\t\"Immer only supports setting array indices and the 'length' property\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'original' expects a draft, got: ${thing}`\n\t\t\t\t}\n\t\t\t\t// Note: if more errors are added, the errorOffset in Patches.ts should be increased\n\t\t\t\t// See Patches.ts for additional errors\n\t\t  ]\n\t\t: []\n\nexport function die(error: number, ...args: any[]): never {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst e = errors[error]\n\t\tconst msg = typeof e === \"function\" ? e.apply(null, args as any) : e\n\t\tthrow new Error(`[Immer] ${msg}`)\n\t}\n\tthrow new Error(\n\t\t`[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n\t)\n}\n","import {\n\tDRAFT_STATE,\n\tDRAFTABLE,\n\tObjectish,\n\tDrafted,\n\tAnyObject,\n\tAnyMap,\n\tAnySet,\n\tImmerState,\n\tArchType,\n\tdie,\n\tStrictMode\n} from \"../internal\"\n\nexport const getPrototypeOf = Object.getPrototypeOf\n\n/** Returns true if the given value is an Immer draft */\n/*#__PURE__*/\nexport function isDraft(value: any): boolean {\n\treturn !!value && !!value[DRAFT_STATE]\n}\n\n/** Returns true if the given value can be drafted by Immer */\n/*#__PURE__*/\nexport function isDraftable(value: any): boolean {\n\tif (!value) return false\n\treturn (\n\t\tisPlainObject(value) ||\n\t\tArray.isArray(value) ||\n\t\t!!value[DRAFTABLE] ||\n\t\t!!value.constructor?.[DRAFTABLE] ||\n\t\tisMap(value) ||\n\t\tisSet(value)\n\t)\n}\n\nconst objectCtorString = Object.prototype.constructor.toString()\n/*#__PURE__*/\nexport function isPlainObject(value: any): boolean {\n\tif (!value || typeof value !== \"object\") return false\n\tconst proto = getPrototypeOf(value)\n\tif (proto === null) {\n\t\treturn true\n\t}\n\tconst Ctor =\n\t\tObject.hasOwnProperty.call(proto, \"constructor\") && proto.constructor\n\n\tif (Ctor === Object) return true\n\n\treturn (\n\t\ttypeof Ctor == \"function\" &&\n\t\tFunction.toString.call(Ctor) === objectCtorString\n\t)\n}\n\n/** Get the underlying object that is represented by the given draft */\n/*#__PURE__*/\nexport function original<T>(value: T): T | undefined\nexport function original(value: Drafted<any>): any {\n\tif (!isDraft(value)) die(15, value)\n\treturn value[DRAFT_STATE].base_\n}\n\n/**\n * Each iterates a map, set or array.\n * Or, if any other kind of object, all of its own properties.\n * Regardless whether they are enumerable or symbols\n */\nexport function each<T extends Objectish>(\n\tobj: T,\n\titer: (key: string | number, value: any, source: T) => void\n): void\nexport function each(obj: any, iter: any) {\n\tif (getArchtype(obj) === ArchType.Object) {\n\t\tReflect.ownKeys(obj).forEach(key => {\n\t\t\titer(key, obj[key], obj)\n\t\t})\n\t} else {\n\t\tobj.forEach((entry: any, index: any) => iter(index, entry, obj))\n\t}\n}\n\n/*#__PURE__*/\nexport function getArchtype(thing: any): ArchType {\n\tconst state: undefined | ImmerState = thing[DRAFT_STATE]\n\treturn state\n\t\t? state.type_\n\t\t: Array.isArray(thing)\n\t\t? ArchType.Array\n\t\t: isMap(thing)\n\t\t? ArchType.Map\n\t\t: isSet(thing)\n\t\t? ArchType.Set\n\t\t: ArchType.Object\n}\n\n/*#__PURE__*/\nexport function has(thing: any, prop: PropertyKey): boolean {\n\treturn getArchtype(thing) === ArchType.Map\n\t\t? thing.has(prop)\n\t\t: Object.prototype.hasOwnProperty.call(thing, prop)\n}\n\n/*#__PURE__*/\nexport function get(thing: AnyMap | AnyObject, prop: PropertyKey): any {\n\t// @ts-ignore\n\treturn getArchtype(thing) === ArchType.Map ? thing.get(prop) : thing[prop]\n}\n\n/*#__PURE__*/\nexport function set(thing: any, propOrOldValue: PropertyKey, value: any) {\n\tconst t = getArchtype(thing)\n\tif (t === ArchType.Map) thing.set(propOrOldValue, value)\n\telse if (t === ArchType.Set) {\n\t\tthing.add(value)\n\t} else thing[propOrOldValue] = value\n}\n\n/*#__PURE__*/\nexport function is(x: any, y: any): boolean {\n\t// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n\tif (x === y) {\n\t\treturn x !== 0 || 1 / x === 1 / y\n\t} else {\n\t\treturn x !== x && y !== y\n\t}\n}\n\n/*#__PURE__*/\nexport function isMap(target: any): target is AnyMap {\n\treturn target instanceof Map\n}\n\n/*#__PURE__*/\nexport function isSet(target: any): target is AnySet {\n\treturn target instanceof Set\n}\n/*#__PURE__*/\nexport function latest(state: ImmerState): any {\n\treturn state.copy_ || state.base_\n}\n\n/*#__PURE__*/\nexport function shallowCopy(base: any, strict: StrictMode) {\n\tif (isMap(base)) {\n\t\treturn new Map(base)\n\t}\n\tif (isSet(base)) {\n\t\treturn new Set(base)\n\t}\n\tif (Array.isArray(base)) return Array.prototype.slice.call(base)\n\n\tconst isPlain = isPlainObject(base)\n\n\tif (strict === true || (strict === \"class_only\" && !isPlain)) {\n\t\t// Perform a strict copy\n\t\tconst descriptors = Object.getOwnPropertyDescriptors(base)\n\t\tdelete descriptors[DRAFT_STATE as any]\n\t\tlet keys = Reflect.ownKeys(descriptors)\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key: any = keys[i]\n\t\t\tconst desc = descriptors[key]\n\t\t\tif (desc.writable === false) {\n\t\t\t\tdesc.writable = true\n\t\t\t\tdesc.configurable = true\n\t\t\t}\n\t\t\t// like object.assign, we will read any _own_, get/set accessors. This helps in dealing\n\t\t\t// with libraries that trap values, like mobx or vue\n\t\t\t// unlike object.assign, non-enumerables will be copied as well\n\t\t\tif (desc.get || desc.set)\n\t\t\t\tdescriptors[key] = {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true, // could live with !!desc.set as well here...\n\t\t\t\t\tenumerable: desc.enumerable,\n\t\t\t\t\tvalue: base[key]\n\t\t\t\t}\n\t\t}\n\t\treturn Object.create(getPrototypeOf(base), descriptors)\n\t} else {\n\t\t// perform a sloppy copy\n\t\tconst proto = getPrototypeOf(base)\n\t\tif (proto !== null && isPlain) {\n\t\t\treturn {...base} // assumption: better inner class optimization than the assign below\n\t\t}\n\t\tconst obj = Object.create(proto)\n\t\treturn Object.assign(obj, base)\n\t}\n}\n\n/**\n * Freezes draftable objects. Returns the original object.\n * By default freezes shallowly, but if the second argument is `true` it will freeze recursively.\n *\n * @param obj\n * @param deep\n */\nexport function freeze<T>(obj: T, deep?: boolean): T\nexport function freeze<T>(obj: any, deep: boolean = false): T {\n\tif (isFrozen(obj) || isDraft(obj) || !isDraftable(obj)) return obj\n\tif (getArchtype(obj) > 1 /* Map or Set */) {\n\t\tobj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections as any\n\t}\n\tObject.freeze(obj)\n\tif (deep)\n\t\t// See #590, don't recurse into non-enumerable / Symbol properties when freezing\n\t\t// So use Object.entries (only string-like, enumerables) instead of each()\n\t\tObject.entries(obj).forEach(([key, value]) => freeze(value, true))\n\treturn obj\n}\n\nfunction dontMutateFrozenCollections() {\n\tdie(2)\n}\n\nexport function isFrozen(obj: any): boolean {\n\treturn Object.isFrozen(obj)\n}\n","import {\n\tImmerState,\n\tPatch,\n\tDrafted,\n\tImmerBaseState,\n\tAnyMap,\n\tAnySet,\n\tArchType,\n\tdie\n} from \"../internal\"\n\n/** Plugin utilities */\nconst plugins: {\n\tPatches?: {\n\t\tgeneratePatches_(\n\t\t\tstate: ImmerState,\n\t\t\tbasePath: PatchPath,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tgenerateReplacementPatches_(\n\t\t\tbase: any,\n\t\t\treplacement: any,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tapplyPatches_<T>(draft: T, patches: readonly Patch[]): T\n\t}\n\tMapSet?: {\n\t\tproxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T\n\t\tproxySet_<T extends AnySet>(target: T, parent?: ImmerState): T\n\t}\n} = {}\n\ntype Plugins = typeof plugins\n\nexport function getPlugin<K extends keyof Plugins>(\n\tpluginKey: K\n): Exclude<Plugins[K], undefined> {\n\tconst plugin = plugins[pluginKey]\n\tif (!plugin) {\n\t\tdie(0, pluginKey)\n\t}\n\t// @ts-ignore\n\treturn plugin\n}\n\nexport function loadPlugin<K extends keyof Plugins>(\n\tpluginKey: K,\n\timplementation: Plugins[K]\n): void {\n\tif (!plugins[pluginKey]) plugins[pluginKey] = implementation\n}\n/** Map / Set plugin */\n\nexport interface MapState extends ImmerBaseState {\n\ttype_: ArchType.Map\n\tcopy_: AnyMap | undefined\n\tassigned_: Map<any, boolean> | undefined\n\tbase_: AnyMap\n\trevoked_: boolean\n\tdraft_: Drafted<AnyMap, MapState>\n}\n\nexport interface SetState extends ImmerBaseState {\n\ttype_: ArchType.Set\n\tcopy_: AnySet | undefined\n\tbase_: AnySet\n\tdrafts_: Map<any, Drafted> // maps the original value to the draft value in the new set\n\trevoked_: boolean\n\tdraft_: Drafted<AnySet, SetState>\n}\n\n/** Patches plugin */\n\nexport type PatchPath = (string | number)[]\n","import {\n\tPatch,\n\tPatchListener,\n\tDrafted,\n\tImmer,\n\tDRAFT_STATE,\n\tImmerState,\n\tArchType,\n\tgetPlugin\n} from \"../internal\"\n\n/** Each scope represents a `produce` call. */\n\nexport interface ImmerScope {\n\tpatches_?: Patch[]\n\tinversePatches_?: Patch[]\n\tcanAutoFreeze_: boolean\n\tdrafts_: any[]\n\tparent_?: ImmerScope\n\tpatchListener_?: PatchListener\n\timmer_: Immer\n\tunfinalizedDrafts_: number\n}\n\nlet currentScope: ImmerScope | undefined\n\nexport function getCurrentScope() {\n\treturn currentScope!\n}\n\nfunction createScope(\n\tparent_: ImmerScope | undefined,\n\timmer_: Immer\n): ImmerScope {\n\treturn {\n\t\tdrafts_: [],\n\t\tparent_,\n\t\timmer_,\n\t\t// Whenever the modified draft contains a draft from another scope, we\n\t\t// need to prevent auto-freezing so the unowned draft can be finalized.\n\t\tcanAutoFreeze_: true,\n\t\tunfinalizedDrafts_: 0\n\t}\n}\n\nexport function usePatchesInScope(\n\tscope: ImmerScope,\n\tpatchListener?: PatchListener\n) {\n\tif (patchListener) {\n\t\tgetPlugin(\"Patches\") // assert we have the plugin\n\t\tscope.patches_ = []\n\t\tscope.inversePatches_ = []\n\t\tscope.patchListener_ = patchListener\n\t}\n}\n\nexport function revokeScope(scope: ImmerScope) {\n\tleaveScope(scope)\n\tscope.drafts_.forEach(revokeDraft)\n\t// @ts-ignore\n\tscope.drafts_ = null\n}\n\nexport function leaveScope(scope: ImmerScope) {\n\tif (scope === currentScope) {\n\t\tcurrentScope = scope.parent_\n\t}\n}\n\nexport function enterScope(immer: Immer) {\n\treturn (currentScope = createScope(currentScope, immer))\n}\n\nfunction revokeDraft(draft: Drafted) {\n\tconst state: ImmerState = draft[DRAFT_STATE]\n\tif (state.type_ === ArchType.Object || state.type_ === ArchType.Array)\n\t\tstate.revoke_()\n\telse state.revoked_ = true\n}\n","import {\n\tImmerScope,\n\tDRAFT_STATE,\n\tisDraftable,\n\tNOTHING,\n\tPatchPath,\n\teach,\n\thas,\n\tfreeze,\n\tImmerState,\n\tisDraft,\n\tSetState,\n\tset,\n\tArchType,\n\tgetPlugin,\n\tdie,\n\trevokeScope,\n\tisFrozen\n} from \"../internal\"\n\nexport function processResult(result: any, scope: ImmerScope) {\n\tscope.unfinalizedDrafts_ = scope.drafts_.length\n\tconst baseDraft = scope.drafts_![0]\n\tconst isReplaced = result !== undefined && result !== baseDraft\n\tif (isReplaced) {\n\t\tif (baseDraft[DRAFT_STATE].modified_) {\n\t\t\trevokeScope(scope)\n\t\t\tdie(4)\n\t\t}\n\t\tif (isDraftable(result)) {\n\t\t\t// Finalize the result in case it contains (or is) a subset of the draft.\n\t\t\tresult = finalize(scope, result)\n\t\t\tif (!scope.parent_) maybeFreeze(scope, result)\n\t\t}\n\t\tif (scope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(\n\t\t\t\tbaseDraft[DRAFT_STATE].base_,\n\t\t\t\tresult,\n\t\t\t\tscope.patches_,\n\t\t\t\tscope.inversePatches_!\n\t\t\t)\n\t\t}\n\t} else {\n\t\t// Finalize the base draft.\n\t\tresult = finalize(scope, baseDraft, [])\n\t}\n\trevokeScope(scope)\n\tif (scope.patches_) {\n\t\tscope.patchListener_!(scope.patches_, scope.inversePatches_!)\n\t}\n\treturn result !== NOTHING ? result : undefined\n}\n\nfunction finalize(rootScope: ImmerScope, value: any, path?: PatchPath) {\n\t// Don't recurse in tho recursive data structures\n\tif (isFrozen(value)) return value\n\n\tconst state: ImmerState = value[DRAFT_STATE]\n\t// A plain object, might need freezing, might contain drafts\n\tif (!state) {\n\t\teach(value, (key, childValue) =>\n\t\t\tfinalizeProperty(rootScope, state, value, key, childValue, path)\n\t\t)\n\t\treturn value\n\t}\n\t// Never finalize drafts owned by another scope.\n\tif (state.scope_ !== rootScope) return value\n\t// Unmodified draft, return the (frozen) original\n\tif (!state.modified_) {\n\t\tmaybeFreeze(rootScope, state.base_, true)\n\t\treturn state.base_\n\t}\n\t// Not finalized yet, let's do that now\n\tif (!state.finalized_) {\n\t\tstate.finalized_ = true\n\t\tstate.scope_.unfinalizedDrafts_--\n\t\tconst result = state.copy_\n\t\t// Finalize all children of the copy\n\t\t// For sets we clone before iterating, otherwise we can get in endless loop due to modifying during iteration, see #628\n\t\t// To preserve insertion order in all cases we then clear the set\n\t\t// And we let finalizeProperty know it needs to re-add non-draft children back to the target\n\t\tlet resultEach = result\n\t\tlet isSet = false\n\t\tif (state.type_ === ArchType.Set) {\n\t\t\tresultEach = new Set(result)\n\t\t\tresult.clear()\n\t\t\tisSet = true\n\t\t}\n\t\teach(resultEach, (key, childValue) =>\n\t\t\tfinalizeProperty(rootScope, state, result, key, childValue, path, isSet)\n\t\t)\n\t\t// everything inside is frozen, we can freeze here\n\t\tmaybeFreeze(rootScope, result, false)\n\t\t// first time finalizing, let's create those patches\n\t\tif (path && rootScope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generatePatches_(\n\t\t\t\tstate,\n\t\t\t\tpath,\n\t\t\t\trootScope.patches_,\n\t\t\t\trootScope.inversePatches_!\n\t\t\t)\n\t\t}\n\t}\n\treturn state.copy_\n}\n\nfunction finalizeProperty(\n\trootScope: ImmerScope,\n\tparentState: undefined | ImmerState,\n\ttargetObject: any,\n\tprop: string | number,\n\tchildValue: any,\n\trootPath?: PatchPath,\n\ttargetIsSet?: boolean\n) {\n\tif (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n\t\tdie(5)\n\tif (isDraft(childValue)) {\n\t\tconst path =\n\t\t\trootPath &&\n\t\t\tparentState &&\n\t\t\tparentState!.type_ !== ArchType.Set && // Set objects are atomic since they have no keys.\n\t\t\t!has((parentState as Exclude<ImmerState, SetState>).assigned_!, prop) // Skip deep patches for assigned keys.\n\t\t\t\t? rootPath!.concat(prop)\n\t\t\t\t: undefined\n\t\t// Drafts owned by `scope` are finalized here.\n\t\tconst res = finalize(rootScope, childValue, path)\n\t\tset(targetObject, prop, res)\n\t\t// Drafts from another scope must prevented to be frozen\n\t\t// if we got a draft back from finalize, we're in a nested produce and shouldn't freeze\n\t\tif (isDraft(res)) {\n\t\t\trootScope.canAutoFreeze_ = false\n\t\t} else return\n\t} else if (targetIsSet) {\n\t\ttargetObject.add(childValue)\n\t}\n\t// Search new objects for unfinalized drafts. Frozen objects should never contain drafts.\n\tif (isDraftable(childValue) && !isFrozen(childValue)) {\n\t\tif (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n\t\t\t// optimization: if an object is not a draft, and we don't have to\n\t\t\t// deepfreeze everything, and we are sure that no drafts are left in the remaining object\n\t\t\t// cause we saw and finalized all drafts already; we can stop visiting the rest of the tree.\n\t\t\t// This benefits especially adding large data tree's without further processing.\n\t\t\t// See add-data.js perf test\n\t\t\treturn\n\t\t}\n\t\tfinalize(rootScope, childValue)\n\t\t// Immer deep freezes plain objects, so if there is no parent state, we freeze as well\n\t\t// Per #590, we never freeze symbolic properties. Just to make sure don't accidentally interfere\n\t\t// with other frameworks.\n\t\tif (\n\t\t\t(!parentState || !parentState.scope_.parent_) &&\n\t\t\ttypeof prop !== \"symbol\" &&\n\t\t\tObject.prototype.propertyIsEnumerable.call(targetObject, prop)\n\t\t)\n\t\t\tmaybeFreeze(rootScope, childValue)\n\t}\n}\n\nfunction maybeFreeze(scope: ImmerScope, value: any, deep = false) {\n\t// we never freeze for a non-root scope; as it would prevent pruning for drafts inside wrapping objects\n\tif (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n\t\tfreeze(value, deep)\n\t}\n}\n","import {\n\teach,\n\thas,\n\tis,\n\tisDraftable,\n\tshallowCopy,\n\tlatest,\n\tImmerBaseState,\n\tImmerState,\n\tDrafted,\n\tAnyObject,\n\tAnyArray,\n\tObjectish,\n\tgetCurrentScope,\n\tgetPrototypeOf,\n\tDRAFT_STATE,\n\tdie,\n\tcreateProxy,\n\tArchType,\n\tImmerScope\n} from \"../internal\"\n\ninterface ProxyBaseState extends ImmerBaseState {\n\tassigned_: {\n\t\t[property: string]: boolean\n\t}\n\tparent_?: ImmerState\n\trevoke_(): void\n}\n\nexport interface ProxyObjectState extends ProxyBaseState {\n\ttype_: ArchType.Object\n\tbase_: any\n\tcopy_: any\n\tdraft_: Drafted<AnyObject, ProxyObjectState>\n}\n\nexport interface ProxyArrayState extends ProxyBaseState {\n\ttype_: ArchType.Array\n\tbase_: AnyArray\n\tcopy_: AnyArray | null\n\tdraft_: Drafted<AnyArray, ProxyArrayState>\n}\n\ntype ProxyState = ProxyObjectState | ProxyArrayState\n\n/**\n * Returns a new draft of the `base` object.\n *\n * The second argument is the parent draft-state (used internally).\n */\nexport function createProxyProxy<T extends Objectish>(\n\tbase: T,\n\tparent?: ImmerState\n): Drafted<T, ProxyState> {\n\tconst isArray = Array.isArray(base)\n\tconst state: ProxyState = {\n\t\ttype_: isArray ? ArchType.Array : (ArchType.Object as any),\n\t\t// Track which produce call this is associated with.\n\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t// True for both shallow and deep changes.\n\t\tmodified_: false,\n\t\t// Used during finalization.\n\t\tfinalized_: false,\n\t\t// Track which properties have been assigned (true) or deleted (false).\n\t\tassigned_: {},\n\t\t// The parent draft state.\n\t\tparent_: parent,\n\t\t// The base state.\n\t\tbase_: base,\n\t\t// The base proxy.\n\t\tdraft_: null as any, // set below\n\t\t// The base copy with any updated values.\n\t\tcopy_: null,\n\t\t// Called by the `produce` function.\n\t\trevoke_: null as any,\n\t\tisManual_: false\n\t}\n\n\t// the traps must target something, a bit like the 'real' base.\n\t// but also, we need to be able to determine from the target what the relevant state is\n\t// (to avoid creating traps per instance to capture the state in closure,\n\t// and to avoid creating weird hidden properties as well)\n\t// So the trick is to use 'state' as the actual 'target'! (and make sure we intercept everything)\n\t// Note that in the case of an array, we put the state in an array to have better Reflect defaults ootb\n\tlet target: T = state as any\n\tlet traps: ProxyHandler<object | Array<any>> = objectTraps\n\tif (isArray) {\n\t\ttarget = [state] as any\n\t\ttraps = arrayTraps\n\t}\n\n\tconst {revoke, proxy} = Proxy.revocable(target, traps)\n\tstate.draft_ = proxy as any\n\tstate.revoke_ = revoke\n\treturn proxy as any\n}\n\n/**\n * Object drafts\n */\nexport const objectTraps: ProxyHandler<ProxyState> = {\n\tget(state, prop) {\n\t\tif (prop === DRAFT_STATE) return state\n\n\t\tconst source = latest(state)\n\t\tif (!has(source, prop)) {\n\t\t\t// non-existing or non-own property...\n\t\t\treturn readPropFromProto(state, source, prop)\n\t\t}\n\t\tconst value = source[prop]\n\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\treturn value\n\t\t}\n\t\t// Check for existing draft in modified state.\n\t\t// Assigned values are never drafted. This catches any drafts we created, too.\n\t\tif (value === peek(state.base_, prop)) {\n\t\t\tprepareCopy(state)\n\t\t\treturn (state.copy_![prop as any] = createProxy(value, state))\n\t\t}\n\t\treturn value\n\t},\n\thas(state, prop) {\n\t\treturn prop in latest(state)\n\t},\n\townKeys(state) {\n\t\treturn Reflect.ownKeys(latest(state))\n\t},\n\tset(\n\t\tstate: ProxyObjectState,\n\t\tprop: string /* strictly not, but helps TS */,\n\t\tvalue\n\t) {\n\t\tconst desc = getDescriptorFromProto(latest(state), prop)\n\t\tif (desc?.set) {\n\t\t\t// special case: if this write is captured by a setter, we have\n\t\t\t// to trigger it with the correct context\n\t\t\tdesc.set.call(state.draft_, value)\n\t\t\treturn true\n\t\t}\n\t\tif (!state.modified_) {\n\t\t\t// the last check is because we need to be able to distinguish setting a non-existing to undefined (which is a change)\n\t\t\t// from setting an existing property with value undefined to undefined (which is not a change)\n\t\t\tconst current = peek(latest(state), prop)\n\t\t\t// special case, if we assigning the original value to a draft, we can ignore the assignment\n\t\t\tconst currentState: ProxyObjectState = current?.[DRAFT_STATE]\n\t\t\tif (currentState && currentState.base_ === value) {\n\t\t\t\tstate.copy_![prop] = value\n\t\t\t\tstate.assigned_[prop] = false\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (is(value, current) && (value !== undefined || has(state.base_, prop)))\n\t\t\t\treturn true\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t}\n\n\t\tif (\n\t\t\t(state.copy_![prop] === value &&\n\t\t\t\t// special case: handle new props with value 'undefined'\n\t\t\t\t(value !== undefined || prop in state.copy_)) ||\n\t\t\t// special case: NaN\n\t\t\t(Number.isNaN(value) && Number.isNaN(state.copy_![prop]))\n\t\t)\n\t\t\treturn true\n\n\t\t// @ts-ignore\n\t\tstate.copy_![prop] = value\n\t\tstate.assigned_[prop] = true\n\t\treturn true\n\t},\n\tdeleteProperty(state, prop: string) {\n\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\tif (peek(state.base_, prop) !== undefined || prop in state.base_) {\n\t\t\tstate.assigned_[prop] = false\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t} else {\n\t\t\t// if an originally not assigned property was deleted\n\t\t\tdelete state.assigned_[prop]\n\t\t}\n\t\tif (state.copy_) {\n\t\t\tdelete state.copy_[prop]\n\t\t}\n\t\treturn true\n\t},\n\t// Note: We never coerce `desc.value` into an Immer draft, because we can't make\n\t// the same guarantee in ES5 mode.\n\tgetOwnPropertyDescriptor(state, prop) {\n\t\tconst owner = latest(state)\n\t\tconst desc = Reflect.getOwnPropertyDescriptor(owner, prop)\n\t\tif (!desc) return desc\n\t\treturn {\n\t\t\twritable: true,\n\t\t\tconfigurable: state.type_ !== ArchType.Array || prop !== \"length\",\n\t\t\tenumerable: desc.enumerable,\n\t\t\tvalue: owner[prop]\n\t\t}\n\t},\n\tdefineProperty() {\n\t\tdie(11)\n\t},\n\tgetPrototypeOf(state) {\n\t\treturn getPrototypeOf(state.base_)\n\t},\n\tsetPrototypeOf() {\n\t\tdie(12)\n\t}\n}\n\n/**\n * Array drafts\n */\n\nconst arrayTraps: ProxyHandler<[ProxyArrayState]> = {}\neach(objectTraps, (key, fn) => {\n\t// @ts-ignore\n\tarrayTraps[key] = function() {\n\t\targuments[0] = arguments[0][0]\n\t\treturn fn.apply(this, arguments)\n\t}\n})\narrayTraps.deleteProperty = function(state, prop) {\n\tif (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop as any)))\n\t\tdie(13)\n\t// @ts-ignore\n\treturn arrayTraps.set!.call(this, state, prop, undefined)\n}\narrayTraps.set = function(state, prop, value) {\n\tif (\n\t\tprocess.env.NODE_ENV !== \"production\" &&\n\t\tprop !== \"length\" &&\n\t\tisNaN(parseInt(prop as any))\n\t)\n\t\tdie(14)\n\treturn objectTraps.set!.call(this, state[0], prop, value, state[0])\n}\n\n// Access a property without creating an Immer draft.\nfunction peek(draft: Drafted, prop: PropertyKey) {\n\tconst state = draft[DRAFT_STATE]\n\tconst source = state ? latest(state) : draft\n\treturn source[prop]\n}\n\nfunction readPropFromProto(state: ImmerState, source: any, prop: PropertyKey) {\n\tconst desc = getDescriptorFromProto(source, prop)\n\treturn desc\n\t\t? `value` in desc\n\t\t\t? desc.value\n\t\t\t: // This is a very special case, if the prop is a getter defined by the\n\t\t\t  // prototype, we should invoke it with the draft as context!\n\t\t\t  desc.get?.call(state.draft_)\n\t\t: undefined\n}\n\nfunction getDescriptorFromProto(\n\tsource: any,\n\tprop: PropertyKey\n): PropertyDescriptor | undefined {\n\t// 'in' checks proto!\n\tif (!(prop in source)) return undefined\n\tlet proto = getPrototypeOf(source)\n\twhile (proto) {\n\t\tconst desc = Object.getOwnPropertyDescriptor(proto, prop)\n\t\tif (desc) return desc\n\t\tproto = getPrototypeOf(proto)\n\t}\n\treturn undefined\n}\n\nexport function markChanged(state: ImmerState) {\n\tif (!state.modified_) {\n\t\tstate.modified_ = true\n\t\tif (state.parent_) {\n\t\t\tmarkChanged(state.parent_)\n\t\t}\n\t}\n}\n\nexport function prepareCopy(state: {\n\tbase_: any\n\tcopy_: any\n\tscope_: ImmerScope\n}) {\n\tif (!state.copy_) {\n\t\tstate.copy_ = shallowCopy(\n\t\t\tstate.base_,\n\t\t\tstate.scope_.immer_.useStrictShallowCopy_\n\t\t)\n\t}\n}\n","import {\n\tIProduceWithPatches,\n\tIProduce,\n\tImmerState,\n\tDrafted,\n\tisDraftable,\n\tprocessResult,\n\tPatch,\n\tObjectish,\n\tDRAFT_STATE,\n\tDraft,\n\tPatchListener,\n\tisDraft,\n\tisMap,\n\tisSet,\n\tcreateProxyProxy,\n\tgetPlugin,\n\tdie,\n\tenterScope,\n\trevokeScope,\n\tleaveScope,\n\tusePatchesInScope,\n\tgetCurrentScope,\n\tNOTHING,\n\tfreeze,\n\tcurrent\n} from \"../internal\"\n\ninterface ProducersFns {\n\tproduce: IProduce\n\tproduceWithPatches: IProduceWithPatches\n}\n\nexport type StrictMode = boolean | \"class_only\";\n\nexport class Immer implements ProducersFns {\n\tautoFreeze_: boolean = true\n\tuseStrictShallowCopy_: StrictMode = false\n\n\tconstructor(config?: {\n\t\tautoFreeze?: boolean\n\t\tuseStrictShallowCopy?: StrictMode\n\t}) {\n\t\tif (typeof config?.autoFreeze === \"boolean\")\n\t\t\tthis.setAutoFreeze(config!.autoFreeze)\n\t\tif (typeof config?.useStrictShallowCopy === \"boolean\")\n\t\t\tthis.setUseStrictShallowCopy(config!.useStrictShallowCopy)\n\t}\n\n\t/**\n\t * The `produce` function takes a value and a \"recipe function\" (whose\n\t * return value often depends on the base state). The recipe function is\n\t * free to mutate its first argument however it wants. All mutations are\n\t * only ever applied to a __copy__ of the base state.\n\t *\n\t * Pass only a function to create a \"curried producer\" which relieves you\n\t * from passing the recipe function every time.\n\t *\n\t * Only plain objects and arrays are made mutable. All other objects are\n\t * considered uncopyable.\n\t *\n\t * Note: This function is __bound__ to its `Immer` instance.\n\t *\n\t * @param {any} base - the initial state\n\t * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n\t * @param {Function} patchListener - optional function that will be called with all the patches produced here\n\t * @returns {any} a new state, or the initial state if nothing was modified\n\t */\n\tproduce: IProduce = (base: any, recipe?: any, patchListener?: any) => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\" && typeof recipe !== \"function\") {\n\t\t\tconst defaultBase = recipe\n\t\t\trecipe = base\n\n\t\t\tconst self = this\n\t\t\treturn function curriedProduce(\n\t\t\t\tthis: any,\n\t\t\t\tbase = defaultBase,\n\t\t\t\t...args: any[]\n\t\t\t) {\n\t\t\t\treturn self.produce(base, (draft: Drafted) => recipe.call(this, draft, ...args)) // prettier-ignore\n\t\t\t}\n\t\t}\n\n\t\tif (typeof recipe !== \"function\") die(6)\n\t\tif (patchListener !== undefined && typeof patchListener !== \"function\")\n\t\t\tdie(7)\n\n\t\tlet result\n\n\t\t// Only plain objects, arrays, and \"immerable classes\" are drafted.\n\t\tif (isDraftable(base)) {\n\t\t\tconst scope = enterScope(this)\n\t\t\tconst proxy = createProxy(base, undefined)\n\t\t\tlet hasError = true\n\t\t\ttry {\n\t\t\t\tresult = recipe(proxy)\n\t\t\t\thasError = false\n\t\t\t} finally {\n\t\t\t\t// finally instead of catch + rethrow better preserves original stack\n\t\t\t\tif (hasError) revokeScope(scope)\n\t\t\t\telse leaveScope(scope)\n\t\t\t}\n\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\treturn processResult(result, scope)\n\t\t} else if (!base || typeof base !== \"object\") {\n\t\t\tresult = recipe(base)\n\t\t\tif (result === undefined) result = base\n\t\t\tif (result === NOTHING) result = undefined\n\t\t\tif (this.autoFreeze_) freeze(result, true)\n\t\t\tif (patchListener) {\n\t\t\t\tconst p: Patch[] = []\n\t\t\t\tconst ip: Patch[] = []\n\t\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip)\n\t\t\t\tpatchListener(p, ip)\n\t\t\t}\n\t\t\treturn result\n\t\t} else die(1, base)\n\t}\n\n\tproduceWithPatches: IProduceWithPatches = (base: any, recipe?: any): any => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\") {\n\t\t\treturn (state: any, ...args: any[]) =>\n\t\t\t\tthis.produceWithPatches(state, (draft: any) => base(draft, ...args))\n\t\t}\n\n\t\tlet patches: Patch[], inversePatches: Patch[]\n\t\tconst result = this.produce(base, recipe, (p: Patch[], ip: Patch[]) => {\n\t\t\tpatches = p\n\t\t\tinversePatches = ip\n\t\t})\n\t\treturn [result, patches!, inversePatches!]\n\t}\n\n\tcreateDraft<T extends Objectish>(base: T): Draft<T> {\n\t\tif (!isDraftable(base)) die(8)\n\t\tif (isDraft(base)) base = current(base)\n\t\tconst scope = enterScope(this)\n\t\tconst proxy = createProxy(base, undefined)\n\t\tproxy[DRAFT_STATE].isManual_ = true\n\t\tleaveScope(scope)\n\t\treturn proxy as any\n\t}\n\n\tfinishDraft<D extends Draft<any>>(\n\t\tdraft: D,\n\t\tpatchListener?: PatchListener\n\t): D extends Draft<infer T> ? T : never {\n\t\tconst state: ImmerState = draft && (draft as any)[DRAFT_STATE]\n\t\tif (!state || !state.isManual_) die(9)\n\t\tconst {scope_: scope} = state\n\t\tusePatchesInScope(scope, patchListener)\n\t\treturn processResult(undefined, scope)\n\t}\n\n\t/**\n\t * Pass true to automatically freeze all copies created by Immer.\n\t *\n\t * By default, auto-freezing is enabled.\n\t */\n\tsetAutoFreeze(value: boolean) {\n\t\tthis.autoFreeze_ = value\n\t}\n\n\t/**\n\t * Pass true to enable strict shallow copy.\n\t *\n\t * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n\t */\n\tsetUseStrictShallowCopy(value: StrictMode) {\n\t\tthis.useStrictShallowCopy_ = value\n\t}\n\n\tapplyPatches<T extends Objectish>(base: T, patches: readonly Patch[]): T {\n\t\t// If a patch replaces the entire state, take that replacement as base\n\t\t// before applying patches\n\t\tlet i: number\n\t\tfor (i = patches.length - 1; i >= 0; i--) {\n\t\t\tconst patch = patches[i]\n\t\t\tif (patch.path.length === 0 && patch.op === \"replace\") {\n\t\t\t\tbase = patch.value\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// If there was a patch that replaced the entire state, start from the\n\t\t// patch after that.\n\t\tif (i > -1) {\n\t\t\tpatches = patches.slice(i + 1)\n\t\t}\n\n\t\tconst applyPatchesImpl = getPlugin(\"Patches\").applyPatches_\n\t\tif (isDraft(base)) {\n\t\t\t// N.B: never hits if some patch a replacement, patches are never drafts\n\t\t\treturn applyPatchesImpl(base, patches)\n\t\t}\n\t\t// Otherwise, produce a copy of the base state.\n\t\treturn this.produce(base, (draft: Drafted) =>\n\t\t\tapplyPatchesImpl(draft, patches)\n\t\t)\n\t}\n}\n\nexport function createProxy<T extends Objectish>(\n\tvalue: T,\n\tparent?: ImmerState\n): Drafted<T, ImmerState> {\n\t// precondition: createProxy should be guarded by isDraftable, so we know we can safely draft\n\tconst draft: Drafted = isMap(value)\n\t\t? getPlugin(\"MapSet\").proxyMap_(value, parent)\n\t\t: isSet(value)\n\t\t? getPlugin(\"MapSet\").proxySet_(value, parent)\n\t\t: createProxyProxy(value, parent)\n\n\tconst scope = parent ? parent.scope_ : getCurrentScope()\n\tscope.drafts_.push(draft)\n\treturn draft\n}\n","import {\n\tdie,\n\tisDraft,\n\tshallowCopy,\n\teach,\n\tDRAFT_STATE,\n\tset,\n\tImmerState,\n\tisDraftable,\n\tisFrozen\n} from \"../internal\"\n\n/** Takes a snapshot of the current state of a draft and finalizes it (but without freezing). This is a great utility to print the current state during debugging (no Proxies in the way). The output of current can also be safely leaked outside the producer. */\nexport function current<T>(value: T): T\nexport function current(value: any): any {\n\tif (!isDraft(value)) die(10, value)\n\treturn currentImpl(value)\n}\n\nfunction currentImpl(value: any): any {\n\tif (!isDraftable(value) || isFrozen(value)) return value\n\tconst state: ImmerState | undefined = value[DRAFT_STATE]\n\tlet copy: any\n\tif (state) {\n\t\tif (!state.modified_) return state.base_\n\t\t// Optimization: avoid generating new drafts during copying\n\t\tstate.finalized_ = true\n\t\tcopy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_)\n\t} else {\n\t\tcopy = shallowCopy(value, true)\n\t}\n\t// recurse\n\teach(copy, (key, childValue) => {\n\t\tset(copy, key, currentImpl(childValue))\n\t})\n\tif (state) {\n\t\tstate.finalized_ = false\n\t}\n\treturn copy\n}\n","import {immerable} from \"../immer\"\nimport {\n\tImmerState,\n\tPatch,\n\tSetState,\n\tProxyArrayState,\n\tMapState,\n\tProxyObjectState,\n\tPatchPath,\n\tget,\n\teach,\n\thas,\n\tgetArchtype,\n\tgetPrototypeOf,\n\tisSet,\n\tisMap,\n\tloadPlugin,\n\tArchType,\n\tdie,\n\tisDraft,\n\tisDraftable,\n\tNOTHING,\n\terrors\n} from \"../internal\"\n\nexport function enablePatches() {\n\tconst errorOffset = 16\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\terrors.push(\n\t\t\t'Sets cannot have \"replace\" patches.',\n\t\t\tfunction(op: string) {\n\t\t\t\treturn \"Unsupported patch operation: \" + op\n\t\t\t},\n\t\t\tfunction(path: string) {\n\t\t\t\treturn \"Cannot apply patch, path doesn't resolve: \" + path\n\t\t\t},\n\t\t\t\"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n\t\t)\n\t}\n\n\tconst REPLACE = \"replace\"\n\tconst ADD = \"add\"\n\tconst REMOVE = \"remove\"\n\n\tfunction generatePatches_(\n\t\tstate: ImmerState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tswitch (state.type_) {\n\t\t\tcase ArchType.Object:\n\t\t\tcase ArchType.Map:\n\t\t\t\treturn generatePatchesFromAssigned(\n\t\t\t\t\tstate,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t\tcase ArchType.Array:\n\t\t\t\treturn generateArrayPatches(state, basePath, patches, inversePatches)\n\t\t\tcase ArchType.Set:\n\t\t\t\treturn generateSetPatches(\n\t\t\t\t\t(state as any) as SetState,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t}\n\t}\n\n\tfunction generateArrayPatches(\n\t\tstate: ProxyArrayState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, assigned_} = state\n\t\tlet copy_ = state.copy_!\n\n\t\t// Reduce complexity by ensuring `base` is never longer.\n\t\tif (copy_.length < base_.length) {\n\t\t\t// @ts-ignore\n\t\t\t;[base_, copy_] = [copy_, base_]\n\t\t\t;[patches, inversePatches] = [inversePatches, patches]\n\t\t}\n\n\t\t// Process replaced indices.\n\t\tfor (let i = 0; i < base_.length; i++) {\n\t\t\tif (assigned_[i] && copy_[i] !== base_[i]) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t\t})\n\t\t\t\tinversePatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(base_[i])\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\t// Process added indices.\n\t\tfor (let i = base_.length; i < copy_.length; i++) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tpatches.push({\n\t\t\t\top: ADD,\n\t\t\t\tpath,\n\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t})\n\t\t}\n\t\tfor (let i = copy_.length - 1; base_.length <= i; --i) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tinversePatches.push({\n\t\t\t\top: REMOVE,\n\t\t\t\tpath\n\t\t\t})\n\t\t}\n\t}\n\n\t// This is used for both Map objects and normal objects.\n\tfunction generatePatchesFromAssigned(\n\t\tstate: MapState | ProxyObjectState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tconst {base_, copy_} = state\n\t\teach(state.assigned_!, (key, assignedValue) => {\n\t\t\tconst origValue = get(base_, key)\n\t\t\tconst value = get(copy_!, key)\n\t\t\tconst op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD\n\t\t\tif (origValue === value && op === REPLACE) return\n\t\t\tconst path = basePath.concat(key as any)\n\t\t\tpatches.push(op === REMOVE ? {op, path} : {op, path, value})\n\t\t\tinversePatches.push(\n\t\t\t\top === ADD\n\t\t\t\t\t? {op: REMOVE, path}\n\t\t\t\t\t: op === REMOVE\n\t\t\t\t\t? {op: ADD, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t\t\t: {op: REPLACE, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t)\n\t\t})\n\t}\n\n\tfunction generateSetPatches(\n\t\tstate: SetState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, copy_} = state\n\n\t\tlet i = 0\n\t\tbase_.forEach((value: any) => {\n\t\t\tif (!copy_!.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t\ti = 0\n\t\tcopy_!.forEach((value: any) => {\n\t\t\tif (!base_.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t}\n\n\tfunction generateReplacementPatches_(\n\t\tbaseValue: any,\n\t\treplacement: any,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tpatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: replacement === NOTHING ? undefined : replacement\n\t\t})\n\t\tinversePatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: baseValue\n\t\t})\n\t}\n\n\tfunction applyPatches_<T>(draft: T, patches: readonly Patch[]): T {\n\t\tpatches.forEach(patch => {\n\t\t\tconst {path, op} = patch\n\n\t\t\tlet base: any = draft\n\t\t\tfor (let i = 0; i < path.length - 1; i++) {\n\t\t\t\tconst parentType = getArchtype(base)\n\t\t\t\tlet p = path[i]\n\t\t\t\tif (typeof p !== \"string\" && typeof p !== \"number\") {\n\t\t\t\t\tp = \"\" + p\n\t\t\t\t}\n\n\t\t\t\t// See #738, avoid prototype pollution\n\t\t\t\tif (\n\t\t\t\t\t(parentType === ArchType.Object || parentType === ArchType.Array) &&\n\t\t\t\t\t(p === \"__proto__\" || p === \"constructor\")\n\t\t\t\t)\n\t\t\t\t\tdie(errorOffset + 3)\n\t\t\t\tif (typeof base === \"function\" && p === \"prototype\")\n\t\t\t\t\tdie(errorOffset + 3)\n\t\t\t\tbase = get(base, p)\n\t\t\t\tif (typeof base !== \"object\") die(errorOffset + 2, path.join(\"/\"))\n\t\t\t}\n\n\t\t\tconst type = getArchtype(base)\n\t\t\tconst value = deepClonePatchValue(patch.value) // used to clone patch to ensure original patch is not modified, see #411\n\t\t\tconst key = path[path.length - 1]\n\t\t\tswitch (op) {\n\t\t\t\tcase REPLACE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\tdie(errorOffset)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// if value is an object, then it's assigned by reference\n\t\t\t\t\t\t\t// in the following add or remove ops, the value field inside the patch will also be modifyed\n\t\t\t\t\t\t\t// so we use value from the cloned patch\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase ADD:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Array:\n\t\t\t\t\t\t\treturn key === \"-\"\n\t\t\t\t\t\t\t\t? base.push(value)\n\t\t\t\t\t\t\t\t: base.splice(key as any, 0, value)\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\treturn base.add(value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase REMOVE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Array:\n\t\t\t\t\t\t\treturn base.splice(key as any, 1)\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.delete(key)\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\treturn base.delete(patch.value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn delete base[key]\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tdie(errorOffset + 1, op)\n\t\t\t}\n\t\t})\n\n\t\treturn draft\n\t}\n\n\t// optimize: this is quite a performance hit, can we detect intelligently when it is needed?\n\t// E.g. auto-draft when new objects from outside are assigned and modified?\n\t// (See failing test when deepClone just returns obj)\n\tfunction deepClonePatchValue<T>(obj: T): T\n\tfunction deepClonePatchValue(obj: any) {\n\t\tif (!isDraftable(obj)) return obj\n\t\tif (Array.isArray(obj)) return obj.map(deepClonePatchValue)\n\t\tif (isMap(obj))\n\t\t\treturn new Map(\n\t\t\t\tArray.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n\t\t\t)\n\t\tif (isSet(obj)) return new Set(Array.from(obj).map(deepClonePatchValue))\n\t\tconst cloned = Object.create(getPrototypeOf(obj))\n\t\tfor (const key in obj) cloned[key] = deepClonePatchValue(obj[key])\n\t\tif (has(obj, immerable)) cloned[immerable] = obj[immerable]\n\t\treturn cloned\n\t}\n\n\tfunction clonePatchValueIfNeeded<T>(obj: T): T {\n\t\tif (isDraft(obj)) {\n\t\t\treturn deepClonePatchValue(obj)\n\t\t} else return obj\n\t}\n\n\tloadPlugin(\"Patches\", {\n\t\tapplyPatches_,\n\t\tgeneratePatches_,\n\t\tgenerateReplacementPatches_\n\t})\n}\n","// types only!\nimport {\n\tImmerState,\n\tAnyMap,\n\tAnySet,\n\tMapState,\n\tSetState,\n\tDRAFT_STATE,\n\tgetCurrentScope,\n\tlatest,\n\tisDraftable,\n\tcreateProxy,\n\tloadPlugin,\n\tmarkChanged,\n\tdie,\n\tArchType,\n\teach\n} from \"../internal\"\n\nexport function enableMapSet() {\n\tclass DraftMap extends Map {\n\t\t[DRAFT_STATE]: MapState\n\n\t\tconstructor(target: AnyMap, parent?: ImmerState) {\n\t\t\tsuper()\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ArchType.Map,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tassigned_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this as any,\n\t\t\t\tisManual_: false,\n\t\t\t\trevoked_: false\n\t\t\t}\n\t\t}\n\n\t\tget size(): number {\n\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t}\n\n\t\thas(key: any): boolean {\n\t\t\treturn latest(this[DRAFT_STATE]).has(key)\n\t\t}\n\n\t\tset(key: any, value: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!latest(state).has(key) || latest(state).get(key) !== value) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t\tstate.copy_!.set(key, value)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tdelete(key: any): boolean {\n\t\t\tif (!this.has(key)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareMapCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\tif (state.base_.has(key)) {\n\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t} else {\n\t\t\t\tstate.assigned_!.delete(key)\n\t\t\t}\n\t\t\tstate.copy_!.delete(key)\n\t\t\treturn true\n\t\t}\n\n\t\tclear() {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_ = new Map()\n\t\t\t\teach(state.base_, key => {\n\t\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t\t})\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tforEach(cb: (value: any, key: any, self: any) => void, thisArg?: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tlatest(state).forEach((_value: any, key: any, _map: any) => {\n\t\t\t\tcb.call(thisArg, this.get(key), key, this)\n\t\t\t})\n\t\t}\n\n\t\tget(key: any): any {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tconst value = latest(state).get(key)\n\t\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\tif (value !== state.base_.get(key)) {\n\t\t\t\treturn value // either already drafted or reassigned\n\t\t\t}\n\t\t\t// despite what it looks, this creates a draft only once, see above condition\n\t\t\tconst draft = createProxy(value, state)\n\t\t\tprepareMapCopy(state)\n\t\t\tstate.copy_!.set(key, draft)\n\t\t\treturn draft\n\t\t}\n\n\t\tkeys(): IterableIterator<any> {\n\t\t\treturn latest(this[DRAFT_STATE]).keys()\n\t\t}\n\n\t\tvalues(): IterableIterator<any> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[Symbol.iterator]: () => this.values(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\tentries(): IterableIterator<[any, any]> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[Symbol.iterator]: () => this.entries(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue: [r.value, value]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\treturn this.entries()\n\t\t}\n\t}\n\n\tfunction proxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftMap(target, parent)\n\t}\n\n\tfunction prepareMapCopy(state: MapState) {\n\t\tif (!state.copy_) {\n\t\t\tstate.assigned_ = new Map()\n\t\t\tstate.copy_ = new Map(state.base_)\n\t\t}\n\t}\n\n\tclass DraftSet extends Set {\n\t\t[DRAFT_STATE]: SetState\n\t\tconstructor(target: AnySet, parent?: ImmerState) {\n\t\t\tsuper()\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ArchType.Set,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this,\n\t\t\t\tdrafts_: new Map(),\n\t\t\t\trevoked_: false,\n\t\t\t\tisManual_: false\n\t\t\t}\n\t\t}\n\n\t\tget size(): number {\n\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t}\n\n\t\thas(value: any): boolean {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\t// bit of trickery here, to be able to recognize both the value, and the draft of its value\n\t\t\tif (!state.copy_) {\n\t\t\t\treturn state.base_.has(value)\n\t\t\t}\n\t\t\tif (state.copy_.has(value)) return true\n\t\t\tif (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n\t\t\t\treturn true\n\t\t\treturn false\n\t\t}\n\n\t\tadd(value: any): any {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!this.has(value)) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.add(value)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tdelete(value: any): any {\n\t\t\tif (!this.has(value)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\treturn (\n\t\t\t\tstate.copy_!.delete(value) ||\n\t\t\t\t(state.drafts_.has(value)\n\t\t\t\t\t? state.copy_!.delete(state.drafts_.get(value))\n\t\t\t\t\t: /* istanbul ignore next */ false)\n\t\t\t)\n\t\t}\n\n\t\tclear() {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tvalues(): IterableIterator<any> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.values()\n\t\t}\n\n\t\tentries(): IterableIterator<[any, any]> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.entries()\n\t\t}\n\n\t\tkeys(): IterableIterator<any> {\n\t\t\treturn this.values()\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\treturn this.values()\n\t\t}\n\n\t\tforEach(cb: any, thisArg?: any) {\n\t\t\tconst iterator = this.values()\n\t\t\tlet result = iterator.next()\n\t\t\twhile (!result.done) {\n\t\t\t\tcb.call(thisArg, result.value, result.value, this)\n\t\t\t\tresult = iterator.next()\n\t\t\t}\n\t\t}\n\t}\n\tfunction proxySet_<T extends AnySet>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftSet(target, parent)\n\t}\n\n\tfunction prepareSetCopy(state: SetState) {\n\t\tif (!state.copy_) {\n\t\t\t// create drafts for all entries to preserve insertion order\n\t\t\tstate.copy_ = new Set()\n\t\t\tstate.base_.forEach(value => {\n\t\t\t\tif (isDraftable(value)) {\n\t\t\t\t\tconst draft = createProxy(value, state)\n\t\t\t\t\tstate.drafts_.set(value, draft)\n\t\t\t\t\tstate.copy_!.add(draft)\n\t\t\t\t} else {\n\t\t\t\t\tstate.copy_!.add(value)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tfunction assertUnrevoked(state: any /*ES5State | MapState | SetState*/) {\n\t\tif (state.revoked_) die(3, JSON.stringify(latest(state)))\n\t}\n\n\tloadPlugin(\"MapSet\", {proxyMap_, proxySet_})\n}\n","import {\n\tIProduce,\n\tIProduceWithPatches,\n\tImmer,\n\tDraft,\n\tImmutable\n} from \"./internal\"\n\nexport {\n\tDraft,\n\tWritableDraft,\n\tImmutable,\n\tPatch,\n\tPatchListener,\n\tProducer,\n\toriginal,\n\tcurrent,\n\tisDraft,\n\tisDraftable,\n\tNOTHING as nothing,\n\tDRAFTABLE as immerable,\n\tfreeze,\n\tObjectish,\n\tStrictMode\n} from \"./internal\"\n\nconst immer = new Immer()\n\n/**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\nexport const produce: IProduce = immer.produce\n\n/**\n * Like `produce`, but `produceWithPatches` always returns a tuple\n * [nextState, patches, inversePatches] (instead of just the next state)\n */\nexport const produceWithPatches: IProduceWithPatches = immer.produceWithPatches.bind(\n\timmer\n)\n\n/**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * Always freeze by default, even in production mode\n */\nexport const setAutoFreeze = immer.setAutoFreeze.bind(immer)\n\n/**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\nexport const setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer)\n\n/**\n * Apply an array of Immer patches to the first argument.\n *\n * This function is a producer, which means copy-on-write is in effect.\n */\nexport const applyPatches = immer.applyPatches.bind(immer)\n\n/**\n * Create an Immer draft from the given base state, which may be a draft itself.\n * The draft can be modified until you finalize it with the `finishDraft` function.\n */\nexport const createDraft = immer.createDraft.bind(immer)\n\n/**\n * Finalize an Immer draft from a `createDraft` call, returning the base state\n * (if no changes were made) or a modified copy. The draft must *not* be\n * mutated afterwards.\n *\n * Pass a function as the 2nd argument to generate Immer patches based on the\n * changes that were made.\n */\nexport const finishDraft = immer.finishDraft.bind(immer)\n\n/**\n * This function is actually a no-op, but can be used to cast an immutable type\n * to an draft type and make TypeScript happy\n *\n * @param value\n */\nexport function castDraft<T>(value: T): Draft<T> {\n\treturn value as any\n}\n\n/**\n * This function is actually a no-op, but can be used to cast a mutable type\n * to an immutable type and make TypeScript happy\n * @param value\n */\nexport function castImmutable<T>(value: T): Immutable<T> {\n\treturn value as any\n}\n\nexport {Immer}\n\nexport {enablePatches} from \"./plugins/patches\"\nexport {enableMapSet} from \"./plugins/mapset\"\n","import { createContext } from \"react\";\r\n\r\ntype DragStartedContext = {\r\n  dragStarted: boolean;\r\n  setDragStarted: React.Dispatch<React.SetStateAction<boolean>>;\r\n};\r\n\r\nexport const DragStartedContext = createContext<DragStartedContext>({\r\n  dragStarted: false,\r\n  setDragStarted: () => {},\r\n});\r\n","import { createContext } from \"react\";\r\nimport { EventPromptActionsType, OnDropProps, OnResizeProps } from \"../types\";\r\n\r\ntype ExternalPropertiesType = {\r\n  onDrop?: (props: OnDropProps) => void;\r\n  onResize?: (props: OnResizeProps) => void;\r\n  eventsResize?: boolean;\r\n  eventPromptRef?: React.MutableRefObject<EventPromptActionsType | null>;\r\n};\r\n\r\nexport const ExternalPropertiesContext = createContext<ExternalPropertiesType>(\r\n  {}\r\n);\r\n","import { EventType } from \"../types\";\r\n\r\nconst sortEvents = (eventA: EventType, eventB: EventType) => {\r\n  if (eventA.startTime - eventB.startTime < 0) return -1;\r\n  if (eventA.startTime === eventB.startTime) {\r\n    if (eventA.endTime < eventB.endTime) {\r\n      return -1;\r\n    } else {\r\n      return 1;\r\n    }\r\n  } else {\r\n    return 1;\r\n  }\r\n};\r\nexport default sortEvents;\r\n","import React, {\r\n  CSSProperties,\r\n  useCallback,\r\n  useContext,\r\n  useRef,\r\n  useState,\r\n} from \"react\";\r\nimport { DragStartedContext } from \"../contexts/drag-started-context\";\r\nimport { EventPropsType, EventType } from \"../types\";\r\n// import { ReactComponent as Resize Icon } from \"../assets/grip-lines-vertical-solid.svg\";\r\nimport { produce } from \"immer\";\r\nimport sortEvents from \"../helpers/sort-events\";\r\nimport { ExternalPropertiesContext } from \"../contexts/external-properties-context\";\r\nimport ResizeIcon from \"./resize-icon\";\r\n\r\nconst Event = ({\r\n  eventData,\r\n  startPosition,\r\n  width,\r\n  top,\r\n  setEvents,\r\n  tick,\r\n}: {\r\n  eventData: EventType;\r\n  startPosition: number;\r\n  width: number;\r\n  top: CSSProperties[\"top\"];\r\n  setEvents: React.Dispatch<React.SetStateAction<EventType[]>>;\r\n  tick: number | null;\r\n}) => {\r\n  const { setDragStarted } = useContext(DragStartedContext);\r\n\r\n  const { onResize, eventsResize, eventPromptRef } = useContext(\r\n    ExternalPropertiesContext\r\n  );\r\n\r\n  const initialPositionForResizeRef = useRef(0);\r\n\r\n  const handleOnDragStart = useCallback(\r\n    (event: React.DragEvent<HTMLDivElement>) => {\r\n      event.stopPropagation();\r\n      event.dataTransfer.setData(\"eventId\", eventData.id);\r\n\r\n      setTimeout(() => setDragStarted(true), 0);\r\n      const target = event.target as HTMLElement;\r\n      target.style.opacity = \"50%\";\r\n      if (eventPromptRef?.current) {\r\n        eventPromptRef.current.setDisplay(\"none\");\r\n      }\r\n    },\r\n    [setDragStarted]\r\n  );\r\n\r\n  const handleOnDragEnd = useCallback(\r\n    (event: React.DragEvent<HTMLDivElement>) => {\r\n      event.stopPropagation();\r\n      setDragStarted(false);\r\n      const target = event.target as HTMLElement;\r\n      target.style.opacity = \"100%\";\r\n    },\r\n    [setDragStarted]\r\n  );\r\n\r\n  const classNames = eventData.props?.classNames\r\n    ? \"event \" + eventData.props.classNames.join(\" \")\r\n    : \"event\";\r\n\r\n  const [draggableEvent, setDraggableEvent] = useState(true);\r\n\r\n  const [resizeOffset, setResizeOffset] = useState(0);\r\n\r\n  const resizeOffsetRef = useRef(0);\r\n\r\n  const [resizeStarted, setResizeStarted] = useState(false);\r\n\r\n  const resizeDirectionRef = useRef<\"left\" | \"right\" | null>(null);\r\n\r\n  const handleDocumentOnMouseMoveResize = useCallback(\r\n    (event: MouseEvent) => {\r\n      const offset = event.clientX - initialPositionForResizeRef.current;\r\n      let internalResizeOffset =\r\n        resizeDirectionRef.current === \"left\" ? offset * -1 : offset;\r\n      setResizeOffset(internalResizeOffset);\r\n      resizeOffsetRef.current = offset;\r\n    },\r\n    [setResizeOffset]\r\n  );\r\n\r\n  const handleDocumentOnMouseUp = useCallback(\r\n    (event: MouseEvent, resizeDirection: \"left\" | \"right\") => {\r\n      initialPositionForResizeRef.current = 0;\r\n      setResizeStarted(false);\r\n      document.removeEventListener(\r\n        \"mousemove\",\r\n        handleDocumentOnMouseMoveResize\r\n      );\r\n      const lockedStyle = document.getElementById(\"lock-cursor\");\r\n      if (lockedStyle) {\r\n        lockedStyle.remove();\r\n      }\r\n      setEvents(\r\n        produce((draft) => {\r\n          const event = draft.find((event) => event.id === eventData.id);\r\n          if (event && tick) {\r\n            if (resizeDirection === \"left\") {\r\n              const newStartTime = Math.round(\r\n                event.startTime + resizeOffsetRef.current * tick\r\n              );\r\n              if (event.endTime - newStartTime > 0) {\r\n                event.startTime = newStartTime;\r\n              }\r\n            } else {\r\n              const newEndTime = Math.round(\r\n                event.endTime + resizeOffsetRef.current * tick\r\n              );\r\n              if (newEndTime - event.startTime > 0) {\r\n                event.endTime = newEndTime;\r\n              }\r\n            }\r\n            if (onResize) {\r\n              onResize({\r\n                eventId: event.id,\r\n                startTime: event.startTime,\r\n                endTime: event.endTime,\r\n              });\r\n            }\r\n          }\r\n          draft.sort(sortEvents);\r\n          resizeOffsetRef.current = 0;\r\n          setResizeOffset(0);\r\n        })\r\n      );\r\n    },\r\n    [\r\n      handleDocumentOnMouseMoveResize,\r\n      setEvents,\r\n      tick,\r\n      setResizeOffset,\r\n      sortEvents,\r\n    ]\r\n  );\r\n\r\n  const handleOnMouseDownEventResizer = useCallback(\r\n    (\r\n      event: React.MouseEvent<HTMLDivElement>,\r\n      resizeDirection: \"left\" | \"right\"\r\n    ) => {\r\n      event.stopPropagation();\r\n      resizeDirectionRef.current = resizeDirection;\r\n      setResizeStarted(true);\r\n      // Create a style element\r\n      const style = document.createElement(\"style\");\r\n      style.id = \"lock-cursor\";\r\n      style.innerHTML = \"* { cursor: e-resize !important; }\";\r\n\r\n      // Append it to the head\r\n      document.head.appendChild(style);\r\n      document.addEventListener(\"mousemove\", handleDocumentOnMouseMoveResize);\r\n      document.addEventListener(\r\n        \"mouseup\",\r\n        (event) => handleDocumentOnMouseUp(event, resizeDirection),\r\n        { once: true }\r\n      );\r\n      initialPositionForResizeRef.current = event.clientX;\r\n    },\r\n    [handleDocumentOnMouseMoveResize, handleDocumentOnMouseUp]\r\n  );\r\n\r\n  const handleOnMouseMove = useCallback(\r\n    (event: React.MouseEvent<HTMLDivElement>) => {\r\n      if (!resizeStarted) {\r\n        event.stopPropagation();\r\n      }\r\n    },\r\n    [resizeStarted]\r\n  );\r\n\r\n  const handleOnMouseOver = useCallback(\r\n    (event: React.MouseEvent<HTMLDivElement>) => {\r\n      event.stopPropagation();\r\n      if (\r\n        eventData.props?.showPrompt ||\r\n        eventData.props?.showPrompt === undefined\r\n      ) {\r\n        const target = event.target as HTMLElement;\r\n        if (eventPromptRef?.current) {\r\n          eventPromptRef.current.setDisplay(\"block\");\r\n          eventPromptRef.current.setRight(\r\n            `calc(100% - ${target.getBoundingClientRect().left}px + 60px)`\r\n          );\r\n          eventPromptRef.current.setBottom(\r\n            `calc(100% - ${target.getBoundingClientRect().top}px + 60px)`\r\n          );\r\n          eventPromptRef.current.setEvent(eventData);\r\n        }\r\n      }\r\n    },\r\n    [eventData]\r\n  );\r\n\r\n  const handleOnMouseOut = useCallback(() => {\r\n    if (eventPromptRef?.current) {\r\n      eventPromptRef.current.setDisplay(\"none\");\r\n    }\r\n  }, []);\r\n\r\n  return (\r\n    <div\r\n      id={`event_${eventData.id}`}\r\n      key={`event_${eventData.id}`}\r\n      className={classNames}\r\n      draggable={eventData.props?.isLocked ? false : draggableEvent}\r\n      onDragStart={handleOnDragStart}\r\n      onDragEnd={handleOnDragEnd}\r\n      onMouseDown={(event) => event.stopPropagation()}\r\n      onMouseMove={handleOnMouseMove}\r\n      onMouseOut={handleOnMouseOut}\r\n      onDrop={(event) => event.stopPropagation()}\r\n      style={{\r\n        left:\r\n          resizeDirectionRef.current === \"left\"\r\n            ? startPosition - resizeOffset\r\n            : startPosition,\r\n        width: width + resizeOffset,\r\n        top: top,\r\n        cursor: eventData.props?.isLocked ? \"not-allowed\" : \"pointer\",\r\n      }}\r\n    >\r\n      {!eventData.props?.isLocked &&\r\n        ((eventsResize &&\r\n          (eventData.props?.isResizable === true ||\r\n            eventData.props?.isResizable === undefined)) ||\r\n          (!eventsResize && eventData.props?.isResizable)) && (\r\n          <div\r\n            className=\"event-resize\"\r\n            style={resizeStarted ? { opacity: \"100%\" } : undefined}\r\n            draggable={false}\r\n            onMouseEnter={() => setDraggableEvent(false)}\r\n            onMouseLeave={() => setDraggableEvent(true)}\r\n            onMouseDown={(event) =>\r\n              handleOnMouseDownEventResizer(event, \"left\")\r\n            }\r\n            onMouseOver={(event) => event.stopPropagation()}\r\n          >\r\n            <ResizeIcon></ResizeIcon>\r\n          </div>\r\n        )}\r\n      <div className=\"event-content\" onMouseOver={handleOnMouseOver}>\r\n        {eventData.props?.content ? eventData.props.content : null}\r\n      </div>\r\n      {!eventData.props?.isLocked &&\r\n        ((eventsResize &&\r\n          (eventData.props?.isResizable === true ||\r\n            eventData.props?.isResizable === undefined)) ||\r\n          (!eventsResize && eventData.props?.isResizable)) && (\r\n          <div\r\n            className=\"event-resize\"\r\n            style={resizeStarted ? { opacity: \"100%\" } : undefined}\r\n            draggable={false}\r\n            onMouseEnter={() => setDraggableEvent(false)}\r\n            onMouseLeave={() => setDraggableEvent(true)}\r\n            onMouseDown={(event) =>\r\n              handleOnMouseDownEventResizer(event, \"right\")\r\n            }\r\n            onMouseOver={(event) => event.stopPropagation()}\r\n          >\r\n            <ResizeIcon></ResizeIcon>\r\n          </div>\r\n        )}\r\n    </div>\r\n  );\r\n};\r\nexport default Event;\r\n","import React from \"react\";\r\n\r\nconst ResizeIcon = () => {\r\n  return (\r\n    <div style={{ display: \"flex\", gap: \"1px\" }}>\r\n      <div className=\"resize-bar\"></div>\r\n      <div className=\"resize-bar\"></div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default ResizeIcon;\r\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\r\n\r\nconst useIntersectionObserver = ({\r\n  bodyRef,\r\n  rowsContentRef,\r\n}: {\r\n  bodyRef: React.MutableRefObject<HTMLDivElement | null>;\r\n  rowsContentRef: React.MutableRefObject<HTMLDivElement[] | null>;\r\n}) => {\r\n  // In the future it should be extended to cover the display: none property instead of visibility: hidden for better performance\r\n  const callback: IntersectionObserverCallback = useCallback((entries) => {\r\n    entries.forEach((entry) => {\r\n      if (entry.isIntersecting) {\r\n        entry.target.classList.remove(\"row-hidden\");\r\n      } else {\r\n        entry.target.classList.add(\"row-hidden\");\r\n      }\r\n    });\r\n  }, []);\r\n\r\n  const observer = new IntersectionObserver(callback, {\r\n    root: bodyRef.current,\r\n  });\r\n\r\n  useEffect(() => {\r\n    if (rowsContentRef.current) {\r\n      rowsContentRef.current.forEach((row) => {\r\n        observer.observe(row);\r\n      });\r\n    }\r\n\r\n    return () => observer.disconnect();\r\n  }, [observer]);\r\n};\r\n\r\nexport default useIntersectionObserver;\r\n","import { useEffect, useMemo, useRef } from \"react\";\r\n\r\nconst useResizeObserver = ({\r\n  windowTime,\r\n  setTick,\r\n  setCellWidth,\r\n  contentRef,\r\n}: {\r\n  windowTime: number[];\r\n  setTick: React.Dispatch<React.SetStateAction<number | null>>;\r\n  setCellWidth: React.Dispatch<React.SetStateAction<number>>;\r\n  contentRef: React.MutableRefObject<HTMLDivElement | null>;\r\n}) => {\r\n  const prevWidthRef = useRef(0);\r\n\r\n  const resizeObserver = useMemo(() => {\r\n    return new ResizeObserver((entries) => {\r\n      for (const entry of entries) {\r\n        const width = entry.borderBoxSize?.[0].inlineSize;\r\n        if (typeof width === \"number\" && width !== prevWidthRef.current) {\r\n          prevWidthRef.current = width;\r\n          const windowDuration = windowTime[1] - windowTime[0];\r\n          const numberOfHourBlocks = windowDuration / 3600;\r\n          setTick(windowDuration / entry.contentRect.width);\r\n          setCellWidth(entry.contentRect.width / numberOfHourBlocks);\r\n        }\r\n      }\r\n    });\r\n  }, [windowTime]);\r\n\r\n  useEffect(() => {\r\n    if (contentRef.current) {\r\n      resizeObserver.observe(contentRef.current, { box: \"border-box\" });\r\n    }\r\n    return () => resizeObserver.disconnect();\r\n  }, [resizeObserver]);\r\n};\r\n\r\nexport default useResizeObserver;\r\n","import React, { useEffect, useRef, useState } from \"react\";\r\n\r\nconst RTIndicator = ({\r\n  tick,\r\n  windowTime,\r\n}: {\r\n  tick: number | null;\r\n  windowTime: number[];\r\n}) => {\r\n  const [currentTime, setCurrentTime] = useState(new Date().getTime() / 1000);\r\n  const [leftOffset, setLeftOffset] = useState(0);\r\n  const intervalIdRef = useRef<NodeJS.Timeout | null>(null);\r\n\r\n  useEffect(() => {\r\n    if (tick) {\r\n      const leftOffsetTime = currentTime - windowTime[0];\r\n      setLeftOffset(Math.round(leftOffsetTime / tick));\r\n      if (intervalIdRef.current !== null) {\r\n        clearInterval(intervalIdRef.current);\r\n      }\r\n      const intervalId = setInterval(() => {\r\n        setCurrentTime(new Date().getTime() / 1000);\r\n      }, tick * 1000);\r\n      intervalIdRef.current = intervalId;\r\n    }\r\n  }, [tick, windowTime, currentTime]);\r\n\r\n  return (\r\n    <>\r\n      {windowTime[0] <= currentTime && currentTime <= windowTime[1] && (\r\n        <>\r\n          <div className=\"rt-arrow\" style={{ left: 86 + leftOffset }}></div>\r\n          <div className=\"rt-line\" style={{ left: 100 + leftOffset }}></div>\r\n        </>\r\n      )}\r\n    </>\r\n  );\r\n};\r\n\r\nexport default RTIndicator;\r\n","import React, {\r\n  forwardRef,\r\n  useImperativeHandle,\r\n  useRef,\r\n  useState,\r\n} from \"react\";\r\nimport { EventPromptActionsType, EventType } from \"../types\";\r\n\r\ntype EventPromptType = {\r\n  template?: (event: EventType) => JSX.Element;\r\n};\r\n\r\nconst EventPrompt = forwardRef<EventPromptActionsType, EventPromptType>(\r\n  ({ template }, ref) => {\r\n    const eventRef = useRef<HTMLDivElement | null>(null);\r\n    const [hoveredEvent, setHoveredEvent] = useState<EventType>();\r\n\r\n    useImperativeHandle(ref, () => {\r\n      return {\r\n        setDisplay(value: string) {\r\n          if (eventRef.current) {\r\n            eventRef.current.style.display = value;\r\n          }\r\n        },\r\n        setRight(value: string) {\r\n          if (eventRef.current) {\r\n            eventRef.current.style.right = value;\r\n          }\r\n        },\r\n        setBottom(value: string) {\r\n          if (eventRef.current) {\r\n            eventRef.current.style.bottom = value;\r\n          }\r\n        },\r\n        setEvent(event: EventType) {\r\n          setHoveredEvent(event);\r\n        },\r\n      };\r\n    });\r\n\r\n    return (\r\n      <div className=\"event-prompt\" ref={eventRef}>\r\n        {template && hoveredEvent && template(hoveredEvent)}\r\n      </div>\r\n    );\r\n  }\r\n);\r\n\r\nexport default EventPrompt;\r\n"],"mappings":"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","names":["React","useEffect","useMemo","useRef","useState","React","dayBlocks","hourBlocks","numBlocks","useMemo","React","React","React","React","React","React","forwardRef","useCallback","useContext","useEffect","useRef","useState","React","useMemo","lines","useContext","useEffect","useMemo","useRef","React","React","React","useCallback","useContext","immer","isSet","current","Immer","base","Immer","createContext","createContext","useContext","useCallback","event","React","React","useCallback","useContext","useRef","React","useContext","useRef","useCallback","event","_a","_b","React","useCallback","useContext","useRef","useMemo","internalAllRowsHeight","i","React","useEffect","forwardRef","useState","useRef","useContext","useCallback","cellWidth","useEffect","React","useEffect","useMemo","useRef","React","useEffect","useRef","useState","React","forwardRef","useRef","useState","useState","useRef","useEffect","useMemo","React"]}