{"version":3,"file":"renderer.mjs","mappings":"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","sources":["webpack://electron-react-titlebar/webpack/bootstrap","webpack://electron-react-titlebar/webpack/runtime/define property getters","webpack://electron-react-titlebar/webpack/runtime/hasOwnProperty shorthand","webpack://electron-react-titlebar/webpack/runtime/make namespace object","webpack://electron-react-titlebar/external module \"react\"","webpack://electron-react-titlebar/external module \"electron\"","webpack://electron-react-titlebar/./src/renderer/window-controls.tsx","webpack://electron-react-titlebar/external module \"classnames\"","webpack://electron-react-titlebar/external module \"lodash\"","webpack://electron-react-titlebar/./src/renderer/utils.ts","webpack://electron-react-titlebar/external module \"react-window\"","webpack://electron-react-titlebar/./src/renderer/menu-list-item.tsx","webpack://electron-react-titlebar/./src/renderer/menu-list.tsx","webpack://electron-react-titlebar/./src/renderer/menu.tsx","webpack://electron-react-titlebar/./src/renderer/titlebar.tsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"default\"]: () => __WEBPACK_EXTERNAL_MODULE_react__[\"default\"], [\"useCallback\"]: () => __WEBPACK_EXTERNAL_MODULE_react__.useCallback, [\"useEffect\"]: () => __WEBPACK_EXTERNAL_MODULE_react__.useEffect, [\"useRef\"]: () => __WEBPACK_EXTERNAL_MODULE_react__.useRef, [\"useState\"]: () => __WEBPACK_EXTERNAL_MODULE_react__.useState });","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"ipcRenderer\"]: () => __WEBPACK_EXTERNAL_MODULE_electron__.ipcRenderer });","import React, { useState, useEffect, useCallback, useRef } from 'react'\nimport { ipcRenderer, IpcRendererEvent } from 'electron'\n\nexport interface WindowControlsProps {\n  disableMinimize?: boolean\n  disableMaximize?: boolean\n  disableClose?: boolean\n  browserWindowId?: number\n}\n\nexport const WindowControls: React.FC<WindowControlsProps> = ({\n  disableMaximize,\n  disableMinimize,\n  disableClose,\n  browserWindowId,\n}) => {\n  const [isMaximized, setIsMaximized] = useState(false)\n  const remoteBrowserWindowId = useRef(browserWindowId)\n\n  useEffect(() => {\n    const onMaximimizeStateChange = (\n      event: IpcRendererEvent,\n      isWindowMaximumized: boolean,\n      targetBrowserWindowId: number\n    ) => {\n      if (targetBrowserWindowId === remoteBrowserWindowId.current) {\n        setIsMaximized(isWindowMaximumized)\n      }\n    }\n\n    ipcRenderer.on('electron-react-titlebar/maximunize/change', onMaximimizeStateChange)\n\n    const updateRemoteBrowserWindowId = async () => {\n      remoteBrowserWindowId.current = (await ipcRenderer.invoke(\n        'electron-react-titlebar/initialize',\n        browserWindowId\n      )) as number\n    }\n    updateRemoteBrowserWindowId().finally(() => null)\n\n    return () => {\n      ipcRenderer.removeListener('electron-react-titlebar/maximunize/change', onMaximimizeStateChange)\n    }\n  }, [browserWindowId])\n\n  const setMaximumize = useCallback(() => {\n    ipcRenderer.send('electron-react-titlebar/maximumize/set', browserWindowId)\n  }, [browserWindowId])\n\n  const setMinimumize = useCallback(() => {\n    ipcRenderer.send('electron-react-titlebar/minimumize/set', browserWindowId)\n  }, [browserWindowId])\n\n  const setClose = useCallback(() => {\n    ipcRenderer.send('electron-react-titlebar/close', browserWindowId)\n  }, [browserWindowId])\n\n  return (\n    <div className=\"window-controls\">\n      <button\n        aria-label=\"minimize\"\n        tabIndex={-1}\n        className=\"window-control window-minimize\"\n        disabled={disableMinimize}\n        onClick={setMinimumize}\n      >\n        <svg aria-hidden=\"true\" version=\"1.1\" width=\"10\" height=\"10\">\n          <path d=\"M 0,5 10,5 10,6 0,6 Z\" />\n        </svg>\n      </button>\n      <button\n        aria-label=\"maximize\"\n        tabIndex={-1}\n        className=\"window-control window-maximize\"\n        disabled={disableMaximize}\n        onClick={setMaximumize}\n      >\n        <svg aria-hidden=\"true\" version=\"1.1\" width=\"10\" height=\"10\">\n          <path\n            d={\n              isMaximized\n                ? 'm 2,1e-5 0,2 -2,0 0,8 8,0 0,-2 2,0 0,-8 z m 1,1 6,0 0,6 -1,0 0,-5 -5,0 z m -2,2 6,0 0,6 -6,0 z'\n                : 'M 0,0 0,10 10,10 10,0 Z M 1,1 9,1 9,9 1,9 Z'\n            }\n          />\n        </svg>\n      </button>\n      <button\n        aria-label=\"close\"\n        tabIndex={-1}\n        className=\"window-control window-close\"\n        disabled={disableClose}\n        onClick={setClose}\n      >\n        <svg aria-hidden=\"true\" version=\"1.1\" width=\"10\" height=\"10\">\n          <path d=\"M 0,0 0,0.7 4.3,5 0,9.3 0,10 0.7,10 5,5.7 9.3,10 10,10 10,9.3 5.7,5 10,0.7 10,0 9.3,0 5,4.3 0.7,0 Z\" />\n        </svg>\n      </button>\n    </div>\n  )\n}\n","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"default\"]: () => __WEBPACK_EXTERNAL_MODULE_classnames__[\"default\"] });","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"isEqual\"]: () => __WEBPACK_EXTERNAL_MODULE_lodash__.isEqual });","import { isEqual } from 'lodash'\n\ntype CommonTypes = number | boolean | string\n\ntype Obj<T> = T[] | { [key: string | number]: T } | T\n\nexport function reduxSet<T>(obj: Obj<T>, path: (string | number)[], val: CommonTypes): Obj<T> | CommonTypes {\n  const [prop, ...restPath] = path\n  if (typeof prop === 'undefined') {\n    if (!isEqual(obj, val)) return val\n    else return obj\n  }\n  let before\n  if (prop in obj) {\n    before = (obj as { [key: string | number]: T })[prop]\n  } else {\n    before = {}\n  }\n  const after = reduxSet(before, restPath, val)\n  if (after !== before) {\n    let result\n    if (Array.isArray(obj)) {\n      result = [...obj.slice(0, prop as number), after, ...obj.slice((prop as number) + 1, obj.length)] as T[]\n    } else {\n      result = {\n        ...obj,\n        [prop]: after,\n      } as { [key: string | number]: T }\n    }\n    return result\n  }\n  return obj\n}\n","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"VariableSizeGrid\"]: () => __WEBPACK_EXTERNAL_MODULE_react_window_a08dba82__.VariableSizeGrid });","import React, { useCallback, useState, CSSProperties } from 'react'\nimport classnames from 'classnames'\n\nconst checked = (\n  <svg width=\"1792\" height=\"1792\" viewBox=\"0 0 1792 1792\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z\" />\n  </svg>\n)\nconst unchecked = <span />\nconst radioUnchecked = (\n  <svg width=\"1792\" height=\"1792\" viewBox=\"0 0 1792 1792\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"M896 352q-148 0-273 73t-198 198-73 273 73 273 198 198 273 73 273-73 198-198 73-273-73-273-198-198-273-73zm768 544q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z\" />\n  </svg>\n)\nconst radioChecked = (\n  <svg width=\"1792\" height=\"1792\" viewBox=\"0 0 1792 1792\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"M1152 896q0 106-75 181t-181 75-181-75-75-181 75-181 181-75 181 75 75 181zm-256-544q-148 0-273 73t-198 198-73 273 73 273 198 198 273 73 273-73 198-198 73-273-73-273-198-198-273-73zm768 544q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z\" />\n  </svg>\n)\n\nexport type MenuItemT =\n  | {\n      label?: string\n      accelerator?: string\n      type?: 'normal'\n      enabled?: boolean\n      visiable?: boolean\n      checked?: boolean\n      click: (menuItem: MenuItemT, event: React.MouseEvent) => void\n    }\n  | {\n      type: 'separator'\n      visiable?: boolean\n    }\n  | {\n      label?: string\n      accelerator?: string\n      type: 'checkbox'\n      enabled?: boolean\n      visiable?: boolean\n      checked?: boolean\n      click: (menuItem: MenuItemT, event: React.MouseEvent) => void\n    }\n  | {\n      label?: string\n      accelerator?: string\n      type: 'radio'\n      enabled?: boolean\n      visiable?: boolean\n      checked?: boolean\n      click: (menuItem: MenuItemT, event: React.MouseEvent) => void\n    }\n\nexport interface MenuListItemProps {\n  mainIndex: number\n  subIndex: number\n  curItem: MenuItemT\n  changeCheckState: (mainIndex: number, subIndex: number, check: boolean, isRadio?: boolean) => void\n  style: CSSProperties\n}\n\nexport const MenuListItem: React.FC<MenuListItemProps> = ({\n  mainIndex,\n  subIndex,\n  curItem,\n  style,\n  changeCheckState,\n}) => {\n  const [selected, setSelected] = useState(false)\n  const onMouseOver = () => setSelected(true)\n  const onMouseLeave = () => setSelected(false)\n  const handleClick = useCallback((e: React.MouseEvent) => {\n    if (curItem.type === 'separator' || curItem.enabled === false) {\n      e.stopPropagation()\n      return\n    } else if (curItem.type === 'checkbox') {\n      e.persist()\n      const nextCurItem = {\n        ...curItem,\n        checked: !curItem.checked,\n      }\n      curItem.click(nextCurItem, e)\n      changeCheckState(mainIndex, subIndex, !curItem.checked)\n    } else if (curItem.type === 'radio') {\n      const nextCurItem = {\n        ...curItem,\n        checked: true,\n      }\n      curItem.click(nextCurItem, e)\n      if (!curItem.checked) {\n        changeCheckState(mainIndex, subIndex, true, true)\n      }\n    } else {\n      e.persist()\n      curItem.click(curItem, e)\n    }\n  }, [])\n\n  if (curItem.visiable == false) {\n    return <div />\n  }\n  const listItemClass = classnames('list-item', {\n    selected: selected && curItem.type !== 'separator' && curItem.enabled !== false,\n  })\n  const menuItemClass = classnames('menu-item', {\n    disabled: curItem.type !== 'separator' && curItem.enabled === false,\n  })\n  const innerContent =\n    curItem.type === 'separator' ? (\n      <hr />\n    ) : (\n      <div className={menuItemClass} onClick={handleClick}>\n        <div className=\"status-icon\">\n          {curItem.type === 'radio'\n            ? curItem.checked\n              ? radioChecked\n              : radioUnchecked\n            : curItem.checked && curItem.type === 'checkbox'\n            ? checked\n            : unchecked}\n        </div>\n        <div className=\"menu-label\">\n          <span>{curItem.label}</span>\n        </div>\n        {curItem.accelerator && <div className=\"accelerator\">{curItem.accelerator}</div>}\n      </div>\n    )\n  return (\n    <div\n      role=\"menuitem\"\n      className={listItemClass}\n      style={style}\n      tabIndex={-1}\n      onMouseOver={onMouseOver}\n      onMouseLeave={onMouseLeave}\n    >\n      {innerContent}\n    </div>\n  )\n}\n","import React, { CSSProperties, useCallback } from 'react'\nimport { VariableSizeGrid } from 'react-window'\nimport { MenuItemT, MenuListItem } from './menu-list-item'\n\nexport interface MenuListProps {\n  rect: {\n    left: number\n    right: number\n    top: number\n    bottom: number\n  }\n  mainIndex: number\n  menulist: MenuItemT[]\n  changeCheckState: (mainIndex: number, subIndex: number, check: boolean, isRadio?: boolean) => void\n}\n\ntype RendererProps = {\n  columnIndex: number\n  rowIndex: number\n  style: CSSProperties\n}\n\nexport const MenuList: React.FC<MenuListProps> = ({ rect, mainIndex, menulist, changeCheckState }) => {\n  const getRowHeight = useCallback(\n    (index: number): number => {\n      const menuListItem = menulist[index]\n      if (menuListItem.visiable === false) {\n        return 0\n      } else if (menuListItem.type === 'separator') {\n        return 10\n      } else {\n        return 30\n      }\n    },\n    [menulist]\n  )\n\n  const renderMenuList = useCallback(\n    ({ rowIndex, style }: RendererProps) => (\n      <MenuListItem\n        curItem={menulist[rowIndex]}\n        style={style}\n        changeCheckState={changeCheckState}\n        mainIndex={mainIndex}\n        subIndex={rowIndex}\n      />\n    ),\n    [menulist, changeCheckState, mainIndex]\n  )\n\n  const menuListHeight = menulist.map((l, index) => getRowHeight(index)).reduce((a, b) => a + b, 0)\n  return (\n    <div\n      id=\"foldout-container\"\n      style={{\n        position: 'absolute',\n        top: rect.bottom,\n        left: 0,\n        width: '100%',\n        height: `calc(100% - ${rect.bottom}px)`,\n      }}\n    >\n      <div className=\"overlay\" tabIndex={-1} />\n      <div\n        className=\"foldout\"\n        style={{\n          position: 'absolute',\n          marginLeft: rect.left,\n          maxWidth: `calc(100% - ${rect.left}px)`,\n          height: '100%',\n          overflow: 'hidden',\n          top: 0,\n        }}\n      >\n        <div id=\"app-menu-foldout\">\n          <div\n            className=\"menu-pane\"\n            style={{\n              height: menuListHeight,\n              maxHeight: '100%',\n            }}\n          >\n            <div className=\"list\" role=\"menu\">\n              <VariableSizeGrid\n                columnCount={1}\n                rowCount={menulist.length}\n                columnWidth={() => 240}\n                height={menuListHeight}\n                rowHeight={getRowHeight}\n                width={240}\n              >\n                {renderMenuList}\n              </VariableSizeGrid>\n            </div>\n            <div className=\"menu-pane menu-endblock\" />\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport classnames from 'classnames'\nimport { reduxSet } from './utils'\nimport { MenuList } from './menu-list'\nimport { MenuItemT } from './menu-list-item'\n\nexport interface MenuT {\n  label: string\n  submenu: MenuItemT[]\n}\n\nexport interface MenuBarProps {\n  menu: MenuT[]\n}\n\nexport const MenuBar: React.FC<MenuBarProps> = ({ menu: propMenu }) => {\n  const [clicked, setClicked] = useState(false)\n  const [focusing, setFocusing] = useState(0)\n  const [menu, setMenu] = useState<MenuT[]>(propMenu)\n  const lock = useRef(false)\n  const menuItems = useRef<{ [i: number]: HTMLDivElement }>({})\n\n  const onButtonMouseOver = useCallback(\n    (i: number) => {\n      if (clicked) {\n        setFocusing(i)\n      }\n    },\n    [clicked]\n  )\n\n  const onButtonClick = useCallback(\n    (i) => {\n      if (lock.current) {\n        lock.current = false\n        return\n      }\n      setClicked(!(focusing === i && clicked))\n    },\n    [clicked, focusing]\n  )\n\n  const onTouchStart = useCallback(\n    (i) => {\n      if (i !== focusing && clicked) {\n        lock.current = true\n      }\n    },\n    [clicked, focusing]\n  )\n\n  const onMouseMove = (i: number) => {\n    setFocusing(i)\n  }\n\n  const setRefs = (ref: HTMLDivElement, i: number) => {\n    menuItems.current[i] = ref\n  }\n\n  useEffect(() => {\n    setMenu(propMenu)\n  }, [propMenu])\n\n  const changeCheckState = (mainIndex: number, subIndex: number, checked: boolean, isRadio = false) => {\n    if (!isRadio) {\n      setMenu(reduxSet(menu, [mainIndex, 'submenu', subIndex, 'checked'], checked) as MenuT[])\n    } else {\n      let newMenu = [...menu]\n      const menuLength = menu[mainIndex].submenu.length\n      for (let i = 0; i < menuLength; i++) {\n        if (menu[mainIndex].submenu[i].type === 'radio') {\n          newMenu = reduxSet(newMenu, [mainIndex, 'submenu', i, 'checked'], i === subIndex) as MenuT[]\n        }\n      }\n      setMenu(newMenu)\n    }\n  }\n\n  return (\n    <div id=\"app-menu-bar\" role=\"menubar\" aria-label=\"Application menu\">\n      {menu.map((menuItem, i) => {\n        return (\n          <div\n            key={i}\n            onMouseOver={() => onButtonMouseOver(i)}\n            onClick={() => onButtonClick(i)}\n            onTouchStart={() => onTouchStart(i)}\n            onMouseMove={() => onMouseMove(i)}\n            ref={(ref) => ref && setRefs(ref, i)}\n            className={classnames('toolbar-dropdown', {\n              open: clicked && i === focusing,\n              closed: !clicked || i !== focusing,\n            })}\n          >\n            {clicked && i === focusing && (\n              <MenuList\n                rect={menuItems.current[i]?.getBoundingClientRect()}\n                menulist={menuItem.submenu}\n                changeCheckState={changeCheckState}\n                mainIndex={i}\n              />\n            )}\n            <div className=\"toolbar-button\">\n              <button className=\"button-component\" type=\"button\" tabIndex={-1}>\n                <div className=\"menu-item\">\n                  <div className=\"menu-label\">\n                    <span aria-label=\"View\">\n                      <span aria-hidden=\"true\">{menuItem.label}</span>\n                    </span>\n                  </div>\n                </div>\n              </button>\n            </div>\n          </div>\n        )\n      })}\n    </div>\n  )\n}\n","import React, { PropsWithChildren } from 'react'\n\nimport { WindowControls } from './window-controls'\nimport { MenuBar, MenuT } from './menu'\n\nexport interface TitleBarProps {\n  icon?: string\n  menu?: MenuT[]\n  disableMinimize?: boolean\n  disableMaximize?: boolean\n  disableClose?: boolean\n  className?: string\n  browserWindowId?: number\n}\n\nexport const TitleBar: React.FC<PropsWithChildren<TitleBarProps>> = ({\n  children,\n  icon,\n  menu,\n  disableMinimize,\n  disableMaximize,\n  disableClose,\n  className,\n  browserWindowId,\n}) => (\n  <div id=\"electron-app-title-bar\" className={`electron-app-title-bar ${className || ''}`}>\n    <div className=\"resize-handle resize-handle-top\" />\n    <div className=\"resize-handle resize-handle-left\" />\n    {!!icon && <img className=\"icon\" src={icon} />}\n    {!!menu && <MenuBar menu={menu} />}\n    {children}\n    <WindowControls\n      disableMinimize={disableMinimize}\n      disableMaximize={disableMaximize}\n      disableClose={disableClose}\n      browserWindowId={browserWindowId}\n    />\n  </div>\n)\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","y","__WEBPACK_EXTERNAL_MODULE_react__","useCallback","useEffect","useRef","useState","x","d","__WEBPACK_EXTERNAL_MODULE_electron__","ipcRenderer","WindowControls","disableMaximize","disableMinimize","disableClose","browserWindowId","isMaximized","setIsMaximized","remoteBrowserWindowId","onMaximimizeStateChange","event","isWindowMaximumized","targetBrowserWindowId","current","async","updateRemoteBrowserWindowId","finally","setMaximumize","setMinimumize","setClose","className","tabIndex","disabled","onClick","version","width","height","__WEBPACK_EXTERNAL_MODULE_classnames__","__WEBPACK_EXTERNAL_MODULE_lodash__","isEqual","reduxSet","path","val","restPath","before","after","result","Array","isArray","slice","length","__WEBPACK_EXTERNAL_MODULE_react_window_a08dba82__","VariableSizeGrid","checked","viewBox","xmlns","unchecked","radioUnchecked","radioChecked","MenuListItem","mainIndex","subIndex","curItem","style","changeCheckState","selected","setSelected","handleClick","e","type","enabled","persist","nextCurItem","click","stopPropagation","visiable","listItemClass","classnames","menuItemClass","innerContent","label","accelerator","role","onMouseOver","onMouseLeave","MenuList","rect","menulist","getRowHeight","index","menuListItem","renderMenuList","rowIndex","menuListHeight","map","l","reduce","a","b","id","position","top","bottom","left","marginLeft","maxWidth","overflow","maxHeight","columnCount","rowCount","columnWidth","rowHeight","MenuBar","menu","propMenu","clicked","setClicked","focusing","setFocusing","setMenu","lock","menuItems","onButtonMouseOver","i","onButtonClick","onTouchStart","isRadio","newMenu","menuLength","submenu","menuItem","onMouseMove","ref","setRefs","open","closed","getBoundingClientRect","TitleBar","children","icon","src"],"sourceRoot":""}