{"version":3,"sources":["../../../libs/index.ts","../../../libs/footer/footer.module.scss","../../../libs/storage/use-storage.ts","../../../libs/footer/links/links.module.scss","app/app.module.scss","../../../libs/border/border.tsx","../../../libs/prefs/indent/indent.module.scss","app/view/tree/map/map.module.scss","../../../libs/about/about.module.scss","../../../libs/resize-div/resize-div.module.scss","../../../libs/debug/debug.ts","app/view/view.module.scss","app/view/tree/primitive.module.scss","app/view/tree/map/pipe.module.scss","../../../libs/about/about.tsx","../../../libs/use-editor/editor.module.scss","app/edit/toolbar/toolbar.module.scss","app/edit/edit.module.scss","app/view/tree/tree.module.scss","app/edit/toolbar/format/format.module.scss","../../../libs/icon/icon.ts","../../../libs/resize-div/resize-div.tsx","../../../libs/storage/storage.ts","../../../libs/use-editor/editor.tsx","../../../libs/use-editor/use-editor.ts","../../../libs/footer/privacy/privacy.tsx","../../../libs/footer/links/version/service-worker.ts","../../../libs/footer/links/version/version.tsx","../../../libs/footer/links/links.tsx","../../../libs/footer/footer.tsx","../../../libs/prefs/theme/theme.tsx","../../../libs/prefs/indent/indent.tsx","../../../libs/about/logo.png","../../../libs/border/border.module.scss","../../../libs/footer/privacy/privacy.module.scss","../../../libs/footer/links/version/version.module.scss","app/edit/toolbar/save/save.module.scss","app/edit/toolbar/more/more.module.scss","app/view/toolbar/toolbar.module.scss","app/view/tree/map/more.module.scss","app/edit/toolbar/format/format.tsx","app/edit/toolbar/save/save.tsx","app/edit/toolbar/more/more.tsx","app/edit/toolbar/toolbar.tsx","app/edit/edit.tsx","app/view/toolbar/toolbar.tsx","app/view/tree/primitive.tsx","app/view/tree/map/pipe.tsx","app/view/tree/map/more.tsx","app/view/tree/map/map.tsx","app/view/tree/node.tsx","app/view/tree/tree.tsx","app/view/view.tsx","app/sample.tsx","app/app.tsx","prefs/prefs.ts","index.tsx"],"names":["module","exports","StorageContext","React","createContext","self","s","useStorage","key","fallback","parse","JSON","stringify","storage","useContext","Error","initial","useMemo","existed","getItem","e","state","useState","setItem","fn","bind","throttle","leading","value","useEffect","Border","props","className","borderColor","color","border","join","debugLog","message","Team","link","href","target","rel","Body","body","size","Logo","logo","alt","src","width","height","About","reverse","container","icon","trash","smallMinus","arrowRight","minus","cross","plus","move","edit","more","add","remove","keyCommand","keyControl","keyEnter","menuOpen","chevronRight","chevronLeft","doubleChevronRight","doubleChevronLeft","selection","locate","circle","blank","table","presentation","dataLineage","zoomToFit","zoomOut","zoomIn","undo","redo","layoutAuto","sDisable","disable","undefined","root","document","documentElement","maxX","clientWidth","ResizeDiv","setWidth","isDragging","setIsDragging","doDrag","useCallback","clientX","input","x","Math","min","max","normalizeX","stopDrag","classList","removeEventListener","startDrag","addEventListener","drag","noDrag","onMouseDown","onDoubleClick","line","AppStorage","appID","this","localStorage","clear","Editor","editor","ref","refBody","params","statusVisible","status","refStatus","baseConfig","showInvisibles","displayIndentGuides","printMargin","keyboardHandler","wrap","useEditor","useRef","setEditor","current","config","_editor","ace","StatusBar","element","textContent","focus","removeCommands","forEach","command","commands","removeCommand","onChange","listener","cb","getValue","on","off","addCommand","aceCommand","bindKey","name","exec","ops","setValue","navigateFileEnd","window","setTimeout","scrollToRow","Infinity","setIndent","indent","session","setUseSoftTabs","tab","setTabSize","refs","Privacy","dataText","isLocalhost","Boolean","location","hostname","match","register","navigator","URL","process","origin","swUrl","fetch","headers","then","response","contentType","get","indexOf","serviceWorker","ready","registration","unregister","reload","registerValidSW","console","log","checkValidServiceWorker","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","onSuccess","error","Version","enabled","outdated","setOutdated","update","waiting","postMessage","type","forceUpdate","content","onClick","TPLink","Links","offlineMode","tptop","space","tpbot","nobreak","Footer","privacy","grow","links","about","defaultProps","themeOptions","label","html","useTheme","theme","setTheme","ThemeSelect","options","getIndentString","kind","repeat","custom","useIndent","setKind","kindOptions","widthOptions","IndentSelect","fullWidth","full","auto","isApple","platform","startsWith","Shortcut","path","Format","format","highlight","blobOptions","targets","disabled","SaveMenu","clipboard","alert","blob","Blob","FileSaver","saveAs","MorePane","prefs","DesktopToolbar","uglify","desktop","MobileToolbar","moreVis","setMoreVis","mobile","primary","selected","Toolbar","workerUrl","require","setModuleUrl","jsonFormat","obj","Edit","mode","editorSetValue","getEditorIndent","mac","win","toolbar","background","secondary","getCls","PrimitiveNode","node","toString","getString","Hor","hor","Ver","last","verLast","verMid","Pipe","pipe","MoreButton","setFoo","copy","expand","collapse","sMap","ToggleButton","setExpand","children","toggle","renderItem","item","index","arr","length","FooContext","MapNode","items","foo","fooContext","Provider","map","ObjectNode","Object","keys","ArrayNode","Array","isArray","NodeBody","includes","Node","role","aria-label","Tree","setError","setNode","useNode","View","tree","samples","floor","random","App","usePrefs","style","flexGrow","resize","view","app","scrollbar","footer","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.9b7edeaa.chunk.js","sourcesContent":["export * from \"./about/about\";\nexport * from \"./border/border\";\nexport * from \"./debug/debug\";\nexport * from \"./footer/footer\";\nexport * from \"./icon/icon\";\nexport * from \"./prefs/prefs\";\nexport * from \"./resize-div/resize-div\";\nexport * from \"./storage/storage\";\nexport * from \"./types/types\";\nexport * from \"./use-editor/editor\";\nexport * from \"./use-editor/use-editor\";\nexport * from \"./use-resize-observer/use-resize-observer\";\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"footer_container__lONVT\",\"line\":\"footer_line__B8fLy\",\"grow\":\"footer_grow__IzUpL\",\"about\":\"footer_about__2iXRq\",\"space\":\"footer_space__1xsp6\"};","import React from \"react\";\nimport throttle from \"lodash.throttle\";\n\nimport { AppStorage } from \"./storage\";\n\nexport const StorageContext = React.createContext(null);\n\nconst self = (s: string): string => s;\n\nexport const useStorage = (key: string, fallback: T) => {\n const parse = typeof fallback === \"string\" ? self : JSON.parse;\n const stringify = typeof fallback === \"string\" ? self : JSON.stringify;\n\n const storage = React.useContext(StorageContext);\n if (storage === null) throw Error(\"storage context not found\");\n\n // get\n const initial: T = React.useMemo(() => {\n const existed = storage.getItem(key);\n if (existed === null) return fallback;\n try {\n return parse(existed);\n } catch (e) {\n return fallback;\n }\n }, [key, fallback, parse]);\n const state = React.useState(initial);\n\n // set\n const setItem = React.useMemo(() => {\n const fn = storage.setItem.bind(storage);\n return throttle(fn, 2000, { leading: true });\n }, [storage]);\n const [value] = state;\n React.useEffect(() => {\n setItem(key, stringify(value));\n }, [key, value, stringify, setItem]);\n\n // return\n return state;\n};\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"links_container__2n3RN\",\"tptop\":\"links_tptop__191dn\",\"tpbot\":\"links_tpbot__1kdbp\",\"nobreak\":\"links_nobreak__3Piom\",\"space\":\"links_space__uM8hc\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"app\":\"app_app__1ZWe8\",\"resize\":\"app_resize__2Kzcv\",\"line\":\"app_line__1sNXQ\",\"body\":\"app_body__1DfIV\",\"footer\":\"app_footer__1B34Y\",\"edit\":\"app_edit__3X8FM\",\"view\":\"app_view__2TwIj\"};","import React from \"react\";\n\nimport s from \"./border.module.scss\";\nimport { borderColor } from \"@moai/core\";\n\ninterface Props {\n color: keyof typeof borderColor;\n}\n\nexport const Border = (props: Props) => {\n return
;\n};\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"indent_container__J1Fg7\",\"full\":\"indent_full__3ePWF\",\"kind\":\"indent_kind__2MX6E\",\"width\":\"indent_width__3NDAa\",\"custom\":\"indent_custom__mVUtK\",\"auto\":\"indent_auto__Hxc5f\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"item\":\"map_item__HhR5m\",\"toggle\":\"map_toggle__BST4Z\",\"more\":\"map_more__3BPAU\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"reverse\":\"about_reverse__3b8SN\",\"container\":\"about_container__5Uz_w\",\"logo\":\"about_logo__mIO1X\",\"body\":\"about_body__3Eo99\",\"link\":\"about_link__3rU_E\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"resize-div_container__c1aOp\",\"line\":\"resize-div_line__3JQcI\",\"noDrag\":\"resize-div_noDrag__1QeEx\",\"drag\":\"resize-div_drag__3f1kO\",\"disable\":\"resize-div_disable__2hz1r\"};","import React from \"react\";\n\nexport const debugLog = (message: any, ...others: any) => {\n // console.log(message, ...others);\n};\n\n// Hook\nexport const useDebugWhyDidYouUpdate = (\n name: string,\n props: { [index: string]: any }\n) => {\n // Get a mutable ref object where we can store props ...\n // ... for comparison next time this hook runs.\n const previousProps = React.useRef<{ [index: string]: any }>({});\n\n React.useEffect(() => {\n if (previousProps.current) {\n // Get all keys from previous and current props\n const allKeys = Object.keys({ ...previousProps.current, ...props });\n // Use this object to keep track of changed props\n const changesObj: { [index: string]: any } = {};\n // Iterate through keys\n allKeys.forEach((key) => {\n // If previous is different from current\n if (previousProps.current[key] !== props[key]) {\n // Add to changesObj\n changesObj[key] = {\n from: previousProps.current[key],\n to: props[key],\n };\n }\n });\n\n // If changesObj not empty then output to console\n if (Object.keys(changesObj).length) {\n console.log(\"[why-did-you-update]\", name, changesObj);\n }\n }\n\n // Finally update previousProps with current props for next hook call\n previousProps.current = props;\n });\n};\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"view_container__2oDm-\",\"tree\":\"view_tree__1hvcL\",\"line\":\"view_line__22x2f\",\"toolbar\":\"view_toolbar__2Z_Iz\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"primitive_container__3aTV0\",\"string\":\"primitive_string__3yb39\",\"number\":\"primitive_number__CYVL1\",\"null\":\"primitive_null__3Rk0r\",\"boolean\":\"primitive_boolean__2nkMk\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"pipe\":\"pipe_pipe__1cSYm\",\"verLast\":\"pipe_verLast__1AeuP\",\"verMid\":\"pipe_verMid__ustVz\",\"hor\":\"pipe_hor__1hDBA\"};","import React from \"react\";\n\nimport s from \"./about.module.scss\";\nimport logo from \"./logo.png\";\nimport { DivPx } from \"@moai/core\";\n\nconst Team = () => (\n \n TablePlus Team\n \n);\n\nconst Body = () => (\n
\n
Developed and maintained
\n \n
\n by \n \n
\n
\n);\n\nconst Logo = () => (\n \n \"tableplus\n \n);\n\ninterface Props {\n reverse?: boolean;\n}\n\nexport const About: React.FC = ({ reverse }) => (\n
\n
\n \n \n \n
\n
\n);\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"editor_container__1ca_f\",\"body\":\"editor_body__1rMcG\",\"status\":\"editor_status__7RtXv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"desktop\":\"toolbar_desktop__3wUEd\",\"mobile\":\"toolbar_mobile__1m38T\",\"primary\":\"toolbar_primary__1Ravm\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"edit_container__3DSS2\",\"editor\":\"edit_editor__2-vuA\",\"toolbar\":\"edit_toolbar__18Xk0\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"tree_container__2LYmq\",\"node\":\"tree_node__333ca\",\"error\":\"tree_error__l405Q\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"icon\":\"format_icon__C5mfs\",\"label\":\"format_label__3-CDl\",\"text\":\"format_text__LmTYn\"};","// prettier-ignore\nexport const icon = {\n trash: \"M14.49 3.99h-13c-.28 0-.5.22-.5.5s.22.5.5.5h.5v10c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-10h.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5zm-8.5 9c0 .55-.45 1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm3 0c0 .55-.45 1-1 1s-1-.45-1-1v-6c0-.55.45-1 1-1s1 .45 1 1v6zm2-12h-4c0-.55-.45-1-1-1h-2c-.55 0-1 .45-1 1h-4c-.55 0-1 .45-1 1v1h14v-1c0-.55-.45-1-1-1z\",\n key: \"M11 0C8.24 0 6 2.24 6 5c0 1.02.31 1.96.83 2.75L.29 14.29a1.003 1.003 0 001.42 1.42L3 14.41l1.29 1.29c.18.19.43.3.71.3s.53-.11.71-.29l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71L6.41 11l1.83-1.83c.8.52 1.74.83 2.76.83 2.76 0 5-2.24 5-5s-2.24-5-5-5zm0 8c-.23 0-.45-.03-.66-.08-.01 0-.02-.01-.03-.01-.21-.05-.41-.12-.6-.21a3.014 3.014 0 01-1.62-2c0-.01-.01-.02-.01-.03C8.03 5.45 8 5.23 8 5c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3z\",\n smallMinus: \"M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z\",\n arrowRight: \"M14.7 7.29l-5-5a.965.965 0 00-.71-.3 1.003 1.003 0 00-.71 1.71l3.29 3.29H1.99c-.55 0-1 .45-1 1s.45 1 1 1h9.59l-3.29 3.29a1.003 1.003 0 001.42 1.42l5-5c.18-.18.29-.43.29-.71s-.12-.52-.3-.7z\",\n minus: \"M13 7H3c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1z\",\n cross: \"M9.41 8l3.29-3.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71L8 6.59l-3.29-3.3a1.003 1.003 0 00-1.42 1.42L6.59 8 3.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L8 9.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L9.41 8z\",\n plus: \"M13 7H9V3c0-.55-.45-1-1-1s-1 .45-1 1v4H3c-.55 0-1 .45-1 1s.45 1 1 1h4v4c0 .55.45 1 1 1s1-.45 1-1V9h4c.55 0 1-.45 1-1s-.45-1-1-1z\",\n move: \"M15.71 7.29l-2-2a1.003 1.003 0 00-1.42 1.42l.3.29H9V3.41l.29.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-2-2C8.53.11 8.28 0 8 0s-.53.11-.71.29l-2 2a1.003 1.003 0 001.42 1.42l.29-.3V7H3.41l.29-.29c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-2 2C.11 7.47 0 7.72 0 8c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L3.41 9H7v3.59l-.29-.29A.965.965 0 006 12a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2a1.003 1.003 0 00-1.42-1.42l-.29.3V9h3.59l-.29.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z\",\n edit: \"M3.25 10.26l2.47 2.47 6.69-6.69-2.46-2.48-6.7 6.7zM.99 14.99l3.86-1.39-2.46-2.44-1.4 3.83zm12.25-14c-.48 0-.92.2-1.24.51l-1.44 1.44 2.47 2.47 1.44-1.44c.32-.32.51-.75.51-1.24.01-.95-.77-1.74-1.74-1.74z\",\n more: \"M2 10.03a2 2 0 100-4 2 2 0 000 4zM14 10.03a2 2 0 100-4 2 2 0 000 4zM8 10.03a2 2 0 100-4 2 2 0 000 4z\",\n add: \"M10.99 6.99h-2v-2c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1zm-3-7c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.68 6-6 6z\",\n remove: \"M10.99 6.99h-6c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1zm-3-7a8 8 0 100 16 8 8 0 000-16zm0 14A6 6 0 118 1.98a6 6 0 01-.01 12.01z\",\n keyCommand: \"M12 9h-1V7h1c1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3v1H7V4c0-1.66-1.34-3-3-3S1 2.34 1 4s1.34 3 3 3h1v2H4c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3v-1h2v1c0 1.66 1.34 3 3 3s3-1.34 3-3-1.34-3-3-3zm0-6c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM4 13c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm0-8c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm5 4H7V7h2v2zm3 4c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z\",\n keyControl: \"M12.71 5.29l-4-4C8.53 1.11 8.28 1 8 1s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L8 3.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z\",\n keyEnter: \"M14 2c-.55 0-1 .45-1 1v3c0 1.66-1.34 3-3 3H4.41L5.7 7.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L4.41 11H10c2.76 0 5-2.24 5-5V3c0-.55-.45-1-1-1z\",\n menuOpen: \"M9.99 11.99h-9c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1zm0-5h-9c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1zm0-5h-9c-.55 0-1 .45-1 1s.45 1 1 1h9c.55 0 1-.45 1-1s-.45-1-1-1zm5.71 5.3l-2-2a1.003 1.003 0 00-1.71.71v4a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71s-.11-.53-.29-.71z\",\n chevronRight: \"M10.71 7.29l-4-4a1 1 0 00-1.42 1.42L8.59 8 5.3 11.29A.97.97 0 005 12a1 1 0 001.71.71l4-4A1 1 0 0011 8a1 1 0 00-.29-.71z\",\n chevronLeft: \"M7.41 8l3.29-3.29c.19-.18.3-.43.3-.71a1 1 0 00-1.71-.71l-4 4A1 1 0 005 8a1 1 0 00.29.71l4 4a1 1 0 001.42-1.42L7.41 8z\",\n doubleChevronRight: \"M9 8a1 1 0 00-.29-.71l-4-4a1 1 0 00-1.42 1.42L6.59 8 3.3 11.29A.97.97 0 003 12a1 1 0 001.71.71l4-4A1 1 0 009 8zm4.71-.71l-4-4a1 1 0 00-1.42 1.42L11.59 8 8.3 11.29A.97.97 0 008 12a1 1 0 001.71.71l4-4A1 1 0 0014 8a1 1 0 00-.29-.71z\",\n doubleChevronLeft: \"M4.41 8L7.7 4.71c.19-.18.3-.43.3-.71a1 1 0 00-1.71-.71l-4 4A1 1 0 002 8a1 1 0 00.29.71l4 4a1 1 0 001.42-1.42L4.41 8zm5 0l3.29-3.29c.19-.18.3-.43.3-.71a1 1 0 00-1.71-.71l-4 4A1 1 0 007 8a1 1 0 00.29.71l4 4a1 1 0 001.42-1.42L9.41 8z\",\n selection: \"M8 0a8 8 0 100 16A8 8 0 008 0zm0 14a6 6 0 11.01-12.01A6 6 0 018 14zm0-9a3 3 0 100 6 3 3 0 000-6z\",\n locate: \"M15 7h-.09A6.98 6.98 0 009 1.1V1c0-.55-.45-1-1-1S7 .45 7 1v.09A6.98 6.98 0 001.1 7H1a1 1 0 00-1 1 1 1 0 001 1h.1A6.97 6.97 0 007 14.91V15c0 .55.45 1 1 1s1-.45 1-1v-.09A6.98 6.98 0 0014.9 9h.1a1 1 0 001-1 1 1 0 00-1-1zm-6.02 5.9c-.05-.5-.46-.9-.98-.9s-.93.4-.98.9A5.02 5.02 0 013.1 8.98c.5-.05.9-.46.9-.98s-.4-.93-.9-.98A5.02 5.02 0 017.02 3.1c.05.5.46.9.98.9s.93-.4.98-.9a5.02 5.02 0 013.92 3.92c-.5.05-.9.46-.9.98s.4.93.9.98a5.02 5.02 0 01-3.92 3.92zM8 6a2 2 0 00-2 2c0 1.1.9 2 2 2s2-.9 2-2a2 2 0 00-2-2z\",\n circle: \"M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z\",\n blank: \"\",\n table: \"M15 1H1c-.6 0-1 .5-1 1v12c0 .6.4 1 1 1h14c.6 0 1-.4 1-1V2c0-.5-.4-1-1-1zM6 13H2v-2h4v2zm0-3H2V8h4v2zm0-3H2V5h4v2zm8 6H7v-2h7v2zm0-3H7V8h7v2zm0-3H7V5h7v2z\",\n presentation: \"M15 1H9c0-.55-.45-1-1-1S7 .45 7 1H1c-.55 0-1 .45-1 1s.45 1 1 1v8c0 .55.45 1 1 1h3.59L3.3 14.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71L7 13.41V15c0 .55.45 1 1 1s1-.45 1-1v-1.59l2.29 2.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71L10.41 12H14c.55 0 1-.45 1-1V3c.55 0 1-.45 1-1s-.45-1-1-1zm-2 9H3V3h10v7z\",\n dataLineage: \"M1.067 0C.477 0 0 .478 0 1.067V3.2c0 .59.478 1.067 1.067 1.067h2.24a5.342 5.342 0 002.9 3.734 5.337 5.337 0 00-2.9 3.733h-2.24C.477 11.733 0 12.21 0 12.8v2.133C0 15.523.478 16 1.067 16H6.4c.59 0 1.067-.478 1.067-1.067V12.8c0-.59-.478-1.067-1.067-1.067H4.401a4.27 4.27 0 013.92-3.194l.212-.006V9.6c0 .59.478 1.067 1.067 1.067h5.333c.59 0 1.067-.478 1.067-1.067V6.4c0-.59-.478-1.067-1.067-1.067H9.6c-.59 0-1.067.478-1.067 1.067v1.067a4.268 4.268 0 01-4.132-3.2H6.4c.59 0 1.067-.478 1.067-1.067V1.067C7.467.477 6.989 0 6.4 0H1.067z\",\n zoomToFit: \"M11 10a1.003 1.003 0 001.71.71l2-2c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71l-2-2a1.003 1.003 0 00-1.42 1.42L12.59 8 11.3 9.29c-.19.18-.3.43-.3.71zM1 5c.55 0 1-.45 1-1V2h2c.55 0 1-.45 1-1s-.45-1-1-1H1C.45 0 0 .45 0 1v3c0 .55.45 1 1 1zm4 1a1.003 1.003 0 00-1.71-.71l-2 2C1.11 7.47 1 7.72 1 8c0 .28.11.53.29.71l2 2a1.003 1.003 0 001.42-1.42L3.41 8 4.7 6.71c.19-.18.3-.43.3-.71zm1-1c.28 0 .53-.11.71-.29L8 3.41 9.29 4.7c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71l-2-2C8.53 1.11 8.28 1 8 1s-.53.11-.71.29l-2 2A1.003 1.003 0 006 5zm9 6c-.55 0-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1zm0-11h-3c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V1c0-.55-.45-1-1-1zM4 14H2v-2c0-.55-.45-1-1-1s-1 .45-1 1v3c0 .55.45 1 1 1h3c.55 0 1-.45 1-1s-.45-1-1-1zm6-3c-.28 0-.53.11-.71.29L8 12.59 6.71 11.3A.965.965 0 006 11a1.003 1.003 0 00-.71 1.71l2 2c.18.18.43.29.71.29s.53-.11.71-.29l2-2A1.003 1.003 0 0010 11z\",\n zoomOut: \"M3.99 5.99c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1h-6zm11.56 7.44l-2.67-2.68a6.94 6.94 0 001.11-3.76c0-3.87-3.13-7-7-7s-7 3.13-7 7 3.13 7 7 7c1.39 0 2.68-.42 3.76-1.11l2.68 2.67a1.498 1.498 0 102.12-2.12zm-8.56-1.44c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\",\n zoomIn: \"M7.99 5.99v-2c0-.55-.45-1-1-1s-1 .45-1 1v2h-2c-.55 0-1 .45-1 1s.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1v-2h2c.55 0 1-.45 1-1s-.45-1-1-1h-2zm7.56 7.44l-2.67-2.68a6.94 6.94 0 001.11-3.76c0-3.87-3.13-7-7-7s-7 3.13-7 7 3.13 7 7 7c1.39 0 2.68-.42 3.76-1.11l2.68 2.67a1.498 1.498 0 102.12-2.12zm-8.56-1.44c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z\",\n undo: \"M4 11c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm7-7H3.41L4.7 2.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3C.11 4.47 0 4.72 0 5c0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L3.41 6H11c1.66 0 3 1.34 3 3s-1.34 3-3 3H7v2h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\",\n redo: \"M12 11c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm3.71-6.71l-3-3a1.003 1.003 0 00-1.42 1.42L12.59 4H5C2.24 4 0 6.24 0 9s2.24 5 5 5h4v-2H5c-1.66 0-3-1.34-3-3s1.34-3 3-3h7.59L11.3 7.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l3-3c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z\",\n layoutAuto: \"M14 9.5c-.56 0-1.06.23-1.42.59L8.99 8l3.59-2.09A2.002 2.002 0 0016 4.5c0-1.1-.9-2-2-2s-2 .9-2 2c0 .19.03.37.08.54L8.5 7.13v-3.2c.86-.22 1.5-1 1.5-1.93 0-1.1-.9-2-2-2S6 .9 6 2c0 .93.64 1.71 1.5 1.93v3.2L3.92 5.04c.05-.17.08-.35.08-.54 0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2c.56 0 1.06-.23 1.42-.59L7.01 8l-3.59 2.09A2.002 2.002 0 000 11.5c0 1.1.9 2 2 2s2-.9 2-2c0-.19-.03-.37-.08-.54L7.5 8.87v3.2c-.86.22-1.5 1-1.5 1.93 0 1.1.9 2 2 2s2-.9 2-2c0-.93-.64-1.71-1.5-1.93v-3.2l3.58 2.09c-.05.17-.08.35-.08.54 0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2z\",\n};\n","import React from \"react\";\n\nimport s from \"./resize-div.module.scss\";\n\nconst sDisable = s.disable;\nif (sDisable === undefined) throw Error(\"disable class is not defined\");\n\nconst root = document.documentElement;\nconst maxX = root.clientWidth - 320;\nconst minX = 320;\n\nconst normalizeX = (input: number) => {\n let x = input;\n x = Math.min(x, maxX);\n x = Math.max(x, minX);\n return x;\n};\n\ninterface Props {\n setWidth: (width: number) => void;\n}\n\nexport const ResizeDiv: React.FC = ({ setWidth }) => {\n const [isDragging, setIsDragging] = React.useState(false);\n\n const doDrag = React.useCallback(\n (e: MouseEvent) => {\n const clientX = normalizeX(e.clientX);\n setWidth(clientX / root.clientWidth);\n },\n [setWidth]\n );\n\n const stopDrag = React.useCallback(() => {\n root.classList.remove(sDisable);\n root.removeEventListener(\"mousemove\", doDrag);\n root.removeEventListener(\"mouseup\", stopDrag);\n setIsDragging(false);\n }, [doDrag, setWidth]);\n\n const startDrag = React.useCallback(() => {\n root.classList.add(sDisable);\n root.addEventListener(\"mousemove\", doDrag);\n root.addEventListener(\"mouseup\", stopDrag);\n setIsDragging(true);\n }, [doDrag, stopDrag]);\n\n return (\n setWidth(0.5)}\n >\n
\n
\n );\n};\n","import { debugLog } from \"../debug/debug\";\n\nexport class AppStorage {\n appID: string;\n constructor(appID: string) {\n this.appID = appID;\n }\n clear() {\n return localStorage.clear();\n }\n getItem(key: string) {\n debugLog(\"storage get\", key);\n return localStorage.getItem(`${this.appID}@${key}`);\n }\n setItem(key: string, value: string) {\n debugLog(\"storage set\", key);\n return localStorage.setItem(`${this.appID}@${key}`, value);\n }\n}\n\nexport * from \"./use-storage\";\n","import React from \"react\";\n\nimport { EditorManager } from \"./use-editor\";\nimport s from \"./editor.module.scss\";\nimport { MutedDiv, DivPx } from \"@moai/core\";\nimport { Border } from \"../border/border\";\n\ninterface Props {\n editor: EditorManager;\n}\n\nexport const Editor: React.FC = ({ editor }) => (\n
\n
\n
\n
\n {editor.params.statusVisible && (\n <>\n \n \n
\n \n
\n \n
\n \n \n )}\n
\n);\n","import React from \"react\";\n\nimport ace from \"ace-builds\";\nimport \"ace-builds/src-noconflict/keybinding-sublime\";\nimport \"ace-builds/src-noconflict/ext-prompt\";\nimport \"ace-builds/src-noconflict/ext-searchbox\";\nimport { StatusBar } from \"ace-builds/src-noconflict/ext-statusbar\";\n\nimport \"./use-editor.scss\";\n\ntype RemoveListenerFn = () => void;\ntype ListenerFn

= (params: P) => void;\ntype AddListenerFn

= (listener: ListenerFn

) => RemoveListenerFn;\n\ntype OnChange = AddListenerFn<{ value: string }>;\n\nexport interface EditorIndent {\n tab: boolean;\n width: number;\n}\n\nexport interface EditorCommand {\n name: string;\n key: { mac: string; win: string };\n fn: () => void;\n}\n\ntype AddCommand = (command: EditorCommand) => () => void;\n\ninterface EditorParams {\n config: Partial;\n removeCommands: string[];\n statusVisible?: boolean;\n}\n\nexport interface EditorManager {\n params: EditorParams;\n getValue: () => string | null;\n setValue: (value: string) => void;\n setIndent: (indent: EditorIndent) => void;\n onChange: OnChange;\n addCommand: AddCommand;\n refBody: React.RefObject;\n refStatus: React.RefObject;\n}\n\ntype UseEditor = (params: EditorParams) => EditorManager;\n\nconst baseConfig: Partial = {\n showInvisibles: true,\n displayIndentGuides: false,\n printMargin: false,\n keyboardHandler: \"ace/keyboard/sublime\",\n wrap: false as any, // https://github.com/ajaxorg/ace/pull/4292\n};\n\nexport const useEditor: UseEditor = (params) => {\n const refBody = React.useRef(null);\n const refStatus = React.useRef(null);\n const [editor, setEditor] = React.useState(null);\n\n // init ace\n React.useEffect(() => {\n if (editor !== null) return;\n\n if (refBody.current === null) throw Error(\"Body is not defined.\");\n const config = { ...baseConfig, ...params.config };\n const _editor = ace.edit(refBody.current, config);\n\n if (params.statusVisible) {\n const statusElm = refStatus.current;\n if (statusElm === null) throw Error(\"Status is not defined\");\n const statusBar = new StatusBar(_editor, refStatus.current);\n statusBar.element.textContent = \"0:0\";\n }\n\n _editor.focus();\n setEditor(_editor);\n }, [editor, params.config]);\n\n React.useEffect(() => {\n if (editor === null) return;\n params.removeCommands.forEach((command) => {\n // https://github.com/ajaxorg/ace/pull/4293\n editor.commands.removeCommand(command as any);\n });\n }, [editor, params.removeCommands]);\n\n // event listeners\n const onChange: OnChange = React.useCallback(\n (listener) => {\n if (editor === null) return () => {};\n const cb = () => listener({ value: editor.getValue() });\n editor.on(\"change\", cb);\n return () => editor.off(\"change\", cb);\n },\n [editor]\n );\n\n const addCommand: AddCommand = React.useCallback(\n (command) => {\n if (editor === null) return () => {};\n const aceCommand: ace.Ace.Command = {\n bindKey: command.key,\n name: command.name,\n exec: command.fn,\n };\n editor.commands.addCommand(aceCommand);\n return () => editor.commands.removeCommand(aceCommand);\n },\n [editor]\n );\n\n const getValue = React.useCallback(() => {\n return editor?.getValue() ?? null;\n }, [editor]);\n\n const setValue = React.useCallback(\n (value: string) => {\n if (editor === null) return;\n editor.setValue(value);\n editor.navigateFileEnd();\n window.setTimeout(() => editor.scrollToRow(Infinity), 0);\n },\n [editor]\n );\n\n const setIndent = React.useCallback(\n (indent: EditorIndent) => {\n if (editor === null) return;\n editor.session.setUseSoftTabs(!indent.tab);\n editor.session.setTabSize(indent.width);\n },\n [editor]\n );\n\n const ops = { getValue, setValue, setIndent, onChange, addCommand };\n const refs = { refBody, refStatus };\n return { params, ...ops, ...refs };\n};\n","import React from \"react\";\n\nimport { Paragraph, Strong } from \"@moai/core\";\nimport s from \"./privacy.module.scss\";\n\ninterface Props {\n dataText: string;\n}\n\nexport const Privacy: React.FC = ({ dataText }) => (\n

\n \n Your data are safe here. \n \n We process your {dataText} right in the browser, so no data\n shall leave this device.\n \n \n
\n);\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n \"This web app is being served cache-first by a service \" +\n \"worker. To learn more, visit https://bit.ly/CRA-PWA\"\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n \"New content is available and will be used when all \" +\n \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\"\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\");\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { \"Service-Worker\": \"script\" },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get(\"content-type\");\n if (\n response.status === 404 ||\n (contentType != null &&\n contentType.indexOf(\"javascript\") === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n \"No internet connection found. App is running in offline mode.\"\n );\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","import React from \"react\";\n\nimport { Pop, DivEm } from \"@moai/core\";\nimport s from \"./version.module.scss\";\n\nimport { register, unregister } from \"./service-worker\";\n\nconst msg = `A new version will be updated on your next visit,\nor click to reload and update now`;\n\nconst forceUpdate = (registration: ServiceWorkerRegistration) => {\n console.log(\"sw debug\", registration);\n if (!registration || !registration.waiting) return;\n registration.waiting.postMessage({ type: \"SKIP_WAITING\" });\n window.location.reload();\n};\n\ninterface Props {\n enabled: boolean;\n}\n\nexport const Version = ({ enabled }: Props) => {\n const [outdated, setOutdated] = React.useState(false);\n const update = React.useRef<() => void>(() => {});\n\n React.useEffect(() => {\n if (enabled === false) {\n unregister();\n } else {\n register({\n onUpdate: (registration) => {\n update.current = () => forceUpdate(registration);\n setOutdated(true);\n },\n });\n }\n }, [enabled]);\n\n if (!outdated) return null;\n\n return (\n \n \n \n \n \n \n );\n};\n","import React from \"react\";\n\nimport s from \"./links.module.scss\";\nimport { MutedDiv, Paragraph, DivEm, DivPx } from \"@moai/core\";\nimport { Version } from \"./version/version\";\n\nconst TPLink = () => (\n \n © 2022 \n \n TablePlus Inc.\n \n \n);\n\ninterface Props {\n offlineMode: boolean;\n}\n\nexport const Links = (props: Props) => (\n \n
\n \n Email us\n \n \n Issue tracker\n \n {/* There's an Em inside Version */}\n \n \n \n \n \n \n
\n \n
\n \n \n \n \n \n 1100-1959 Upper Water Street\n \n Halifax NS Canada.\n \n All rights reserved\n \n
\n
\n);\n","import React from \"react\";\n\nimport { DivPx } from \"@moai/core\";\nimport { Privacy } from \"./privacy/privacy\";\nimport { Links } from \"./links/links\";\nimport s from \"./footer.module.scss\";\nimport { About } from \"../about/about\";\nimport { Border } from \"../border/border\";\n\ninterface Props {\n dataText: string;\n offlineMode: boolean;\n}\n\nexport const Footer = ({ dataText, offlineMode }: Props) => (\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n);\n\nFooter.defaultProps = {\n offlineMode: true,\n};\n","import React from \"react\";\n\nimport { Switcher } from \"@moai/core\";\nimport { useStorage } from \"../../storage/use-storage\";\nimport { SetState } from \"../../types/types\";\n\nexport type Theme = string;\nexport type SetTheme = React.Dispatch>;\n\nexport const themeOptions = [\n { label: \"Light\", value: \"theme-light\" },\n { label: \"Dark\", value: \"theme-dark\" },\n { label: \"System\", value: \"theme-auto\" },\n];\n\nconst html = document.documentElement;\n\nexport const useTheme = () => {\n const [value, setValue] = useStorage(\"pref-theme\", \"theme-auto\");\n\n React.useEffect(() => {\n html.classList.add(value);\n return () => html.classList.remove(value);\n }, [value]);\n\n return { theme: value, setTheme: setValue };\n};\n\ninterface Props {\n theme: string;\n setTheme: SetState;\n}\n\nexport const ThemeSelect: React.FC = ({ theme, setTheme }) => (\n \n);\n","import React from \"react\";\n\nimport { DivPx, Input, Select, SelectOption } from \"@moai/core\";\nimport { useStorage } from \"../../storage/use-storage\";\nimport s from \"./indent.module.scss\";\n\ntype SetState = React.Dispatch>;\n\nexport interface Indent {\n kind: string;\n width: number | null;\n custom: number;\n}\n\nexport interface SetIndent {\n kind: SetState;\n width: SetState;\n custom: SetState;\n}\n\nexport const getIndentString = (indent: Indent) => {\n if (indent.kind === \"tab\") return \"\\t\";\n return \" \".repeat(indent.width ?? indent.custom);\n};\n\nexport interface IndentState {\n indent: Indent;\n setIndent: SetIndent;\n}\n\nexport const useIndent = (): IndentState => {\n const [kind, setKind] = useStorage(\"pref-indent-type\", \"tab\");\n const [width, setWidth] = useStorage(\"pref-indent-width\", 4);\n const [custom, setCustom] = useStorage(\"pref-indent-custom\", 3);\n\n return {\n indent: { kind, width, custom },\n setIndent: { kind: setKind, width: setWidth, custom: setCustom },\n };\n};\n\ninterface Props extends IndentState {\n fullWidth?: boolean;\n}\n\nconst kindOptions: SelectOption[] = [\n { value: \"tab\", label: \"Tabs\" },\n { value: \"space\", label: \"Spaces\" },\n];\n\nconst widthOptions: SelectOption[] = [\n { value: 2, label: \"2 spaces\" },\n { value: 4, label: \"4 spaces\" },\n { value: 8, label: \"8 spaces\" },\n { value: null, label: \"Custom\" },\n];\n\nexport const IndentSelect: React.FC = ({\n fullWidth,\n indent,\n setIndent,\n}) => (\n
\n
\n \n
\n \n
\n \n
\n {indent.width === null && (\n <>\n \n
\n \n
\n \n )}\n
\n);\n","module.exports = \"data:image/png;base64,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\"","// extracted by mini-css-extract-plugin\nmodule.exports = {\"border\":\"border_border__1-fpc\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"privacy_container__3CqYN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"update\":\"version_update__1tJbk\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"save_container__eISZW\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"actions\":\"more_actions__-zzqn\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"toolbar\":\"toolbar_toolbar__3fQnA\",\"space\":\"toolbar_space__1N-I-\",\"about\":\"toolbar_about__2xFGQ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"more\":\"more_more__1Gzcw\"};","import React from \"react\";\nimport { Button, DivPx } from \"@moai/core\";\nimport { Icon } from \"@moai/core\";\nimport s from \"./format.module.scss\";\n\nconst cmd =\n \"M12 9h-1V7h1c1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3v1H7V4c0-1.66-1.34-3-3-3S1 2.34 1 4s1.34 3 3 3h1v2H4c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3v-1h2v1c0 1.66 1.34 3 3 3s3-1.34 3-3-1.34-3-3-3zm0-6c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM4 13c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm0-8c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm5 4H7V7h2v2zm3 4c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z\";\nconst ctrl =\n \"M12.71 5.29l-4-4C8.53 1.11 8.28 1 8 1s-.53.11-.71.29l-4 4a1.003 1.003 0 001.42 1.42L8 3.41l3.29 3.29c.18.19.43.3.71.3a1.003 1.003 0 00.71-1.71z\";\nconst enter =\n \"M14 2c-.55 0-1 .45-1 1v3c0 1.66-1.34 3-3 3H4.41L5.7 7.71c.19-.18.3-.43.3-.71a1.003 1.003 0 00-1.71-.71l-3 3c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l3 3a1.003 1.003 0 001.42-1.42L4.41 11H10c2.76 0 5-2.24 5-5V3c0-.55-.45-1-1-1z\";\n\nconst isApple =\n navigator.platform &&\n (navigator.platform.startsWith(\"Mac\") ||\n navigator.platform.startsWith(\"iPad\") ||\n navigator.platform.startsWith(\"iPhone\"));\n\nconst Shortcut = () => (\n \n \n \n \n \n);\n\ninterface Props {\n format: () => void;\n}\n\nexport const Format: React.FC = ({ format }) => (\n \n);\n","import React from \"react\";\nimport { Select, SelectOption } from \"@moai/core\";\nimport * as clipboard from \"clipboard-polyfill\";\nimport FileSaver from \"file-saver\";\nimport s from \"./save.module.scss\";\n\ninterface Props {\n getValue: () => string | null;\n}\n\ntype Target = \"none\" | \"clipboard\" | \"file\";\n\nconst blobOptions: BlobPropertyBag = {\n type: \"text/json;charset=utf-8\",\n};\n\nconst targets: SelectOption[] = [\n { value: \"none\", label: \"Save\", disabled: true },\n { value: \"clipboard\", label: \"Copy to clipboard\" },\n { value: \"file\", label: 'Download as file' },\n];\n\nexport const SaveMenu: React.FC = ({ getValue }) => {\n const setTarget = (target: Target) => {\n const value = getValue() || \"\";\n switch (target) {\n case \"clipboard\":\n clipboard.writeText(value).catch((e) => {\n window.alert(`Cannot copy: ${e.message}`);\n });\n break;\n case \"file\":\n const blob = new Blob([value], blobOptions);\n FileSaver.saveAs(blob, \"untitled.json\");\n break;\n case \"none\":\n throw Error('Should not reach \"none\"');\n }\n };\n\n return (\n
\n \n
\n );\n};\n","import React from \"react\";\n\nimport { Border, ThemeSelect, IndentSelect } from \"@tableplus/toolkit\";\nimport { Prefs } from \"prefs/prefs\";\nimport { DivPx } from \"@moai/core\";\nimport { SaveMenu } from \"../save/save\";\n\nimport s from \"./more.module.scss\";\n\ninterface Props {\n getValue: () => string | null;\n prefs: Prefs;\n}\n\nexport const MorePane: React.FC = (props) => {\n const { prefs, getValue } = props;\n const { indent, theme, setIndent, setTheme } = prefs;\n return (\n
\n \n \n \n \n \n \n \n \n
\n );\n};\n","import React from \"react\";\n\nimport { Button, DivGrow, DivPx } from \"@moai/core\";\nimport { IndentSelect, icon } from \"@tableplus/toolkit\";\nimport { Prefs } from \"prefs/prefs\";\n\nimport { Format } from \"./format/format\";\nimport { SaveMenu } from \"./save/save\";\nimport { MorePane } from \"./more/more\";\nimport s from \"./toolbar.module.scss\";\n\ninterface Props {\n getValue: () => string | null;\n format: () => void;\n uglify: () => void;\n prefs: Prefs;\n}\n\nconst DesktopToolbar: React.FC = (props) => {\n const { format, uglify, getValue, prefs } = props;\n const { indent, setIndent } = prefs;\n return (\n
\n \n \n \n \n \n \n \n
\n );\n};\n\nconst MobileToolbar: React.FC = (props) => {\n const { format, uglify, getValue, prefs } = props;\n const [moreVis, setMoreVis] = React.useState(false);\n return (\n
\n
\n \n \n \n \n setMoreVis(!moreVis)}\n icon={icon.more}\n />\n
\n {moreVis && }\n
\n );\n};\n\nexport const Toolbar: React.FC = (props) => (\n
\n \n \n
\n);\n","import React from \"react\";\n\nimport ace from \"ace-builds\";\nimport \"ace-builds/src-noconflict/mode-json\";\n\nimport { Indent, getIndentString, Editor } from \"@tableplus/toolkit\";\nimport { useEditor, EditorIndent, Border } from \"@tableplus/toolkit\";\nimport { Toolbar } from \"./toolbar/toolbar\";\nimport s from \"./edit.module.scss\";\nimport { DivPx, background } from \"@moai/core\";\nimport { Prefs } from \"prefs/prefs\";\n\n// https://github.com/ajaxorg/ace/issues/3913\n// eslint-disable-next-line\nconst workerUrl = require(\"file-loader!ace-builds/src-noconflict/worker-json.js\");\nace.config.setModuleUrl(\"ace/mode/json_worker\", workerUrl);\n\ninterface Props {\n prefs: Prefs;\n value: string;\n setValue: React.Dispatch>;\n}\n\nconst jsonFormat = (value: string, indent?: Indent): string | null => {\n let obj = {};\n try {\n obj = JSON.parse(value);\n } catch (e) {\n console.log(e); // @TODO: should we tell?\n return null;\n }\n const space = indent ? getIndentString(indent) : undefined;\n return JSON.stringify(obj, undefined, space);\n};\n\nconst removeCommands = [\n \"addLineAfter\", // ctrl-enter ---> conflict with \"format\"\n \"expandtoline\", // ctrl-l ---> browser's default\n];\n\nconst getEditorIndent = (indent: Indent): EditorIndent => ({\n tab: indent.kind === \"tab\",\n width: indent.width ?? indent.custom,\n});\n\nexport const Edit: React.FC = ({ prefs, value, setValue }) => {\n const config = { value, mode: \"ace/mode/json\" };\n const editor = useEditor({ config, removeCommands });\n\n const { onChange } = editor;\n React.useEffect(() => {\n return onChange((params) => setValue(params.value));\n }, [onChange, setValue]);\n\n const { setIndent, getValue, setValue: editorSetValue } = editor;\n const { indent } = prefs;\n const format = React.useCallback(() => {\n const value = jsonFormat(getValue() ?? \"\", indent);\n if (value !== null) {\n editorSetValue(value);\n setIndent(getEditorIndent(indent));\n }\n }, [getValue, indent, setIndent, editorSetValue]);\n\n const { addCommand } = editor;\n React.useEffect(() => {\n const key = { mac: \"cmd-enter\", win: \"ctrl-enter\" };\n return addCommand({ key, name: \"format\", fn: format });\n }, [addCommand, format]);\n\n const uglify = React.useCallback(() => {\n const value = jsonFormat(getValue() ?? \"\");\n if (value !== null) editorSetValue(value);\n }, [getValue, editorSetValue]);\n\n const toolbar = (\n \n );\n return (\n
\n \n
{toolbar}
\n \n
\n \n
\n
\n );\n};\n","import React from \"react\";\n\nimport { ThemeSelect, About } from \"@tableplus/toolkit\";\nimport { DivGrow } from \"@moai/core\";\nimport { Prefs } from \"prefs/prefs\";\n\nimport s from \"./toolbar.module.scss\";\n\ninterface Props {\n prefs: Prefs;\n}\n\nexport const Toolbar: React.FC = ({ prefs }) => (\n
\n \n \n \n
\n);\n","import React from \"react\";\n\nimport s from \"./primitive.module.scss\";\nimport { DivPx } from \"@moai/core\";\n\ntype Value = boolean | number | string | null;\n\ninterface Props {\n name?: string;\n node: Value;\n}\n\nexport const isPrimitive = (value: any): value is Value => {\n if (value === null) return true;\n return [\"boolean\", \"number\", \"string\"].includes(typeof value);\n};\n\nconst getCls = (value: Value) => (value === null ? s.null : s[typeof value]);\n\nconst getString = (value: Value): string => {\n if (value === null) return \"null\";\n switch (typeof value) {\n case \"boolean\":\n return value ? \"true\" : \"false\";\n case \"number\":\n return value.toString();\n case \"string\":\n return `\"${value}\"`;\n }\n};\n\nexport const PrimitiveNode: React.FC = ({ name, node: value }) => (\n
\n {name && (\n <>\n
{name}:
\n \n \n )}\n
{getString(value)}
\n
\n);\n","import React from \"react\";\n\nimport { DivPx } from \"@moai/core\";\nimport s from \"./pipe.module.scss\";\nimport { Border } from \"@tableplus/toolkit\";\n\nconst Hor = () => (\n
\n \n
\n);\n\nconst Ver: React.FC<{ last: boolean }> = ({ last }) => (\n
\n \n \n
\n);\n\nexport const Pipe: React.FC<{ last: boolean }> = ({ last }) => (\n
\n \n \n
\n);\n","import React from \"react\";\nimport * as clipboard from \"clipboard-polyfill\";\n\nimport { MapNode } from \"./map\";\nimport s from \"./more.module.scss\";\nimport sMap from \"./map.module.scss\";\nimport { background } from \"@moai/core\";\n\ninterface Props {\n node: MapNode;\n setFoo: (foo: null | boolean) => void;\n}\n\nexport const MoreButton: React.FC = ({ node, setFoo }) => {\n const copy = React.useCallback(() => {\n clipboard.writeText(JSON.stringify(node)).catch((e) => {\n window.alert(`Cannot copy: ${e.message}`);\n });\n }, [node]);\n\n const expand = React.useCallback(() => {\n setFoo(true);\n window.setTimeout(() => setFoo(null), 500);\n }, [setFoo]);\n\n const collapse = React.useCallback(() => {\n setFoo(false);\n window.setTimeout(() => setFoo(null), 500);\n }, [setFoo]);\n\n const onChange = React.useCallback(\n (e: React.ChangeEvent) => {\n switch (e.target.value) {\n case \"copy\":\n return copy();\n case \"expand\":\n return expand();\n case \"collapse\":\n return collapse();\n default:\n throw Error(`Unknown target: ${e.target.value}`);\n }\n },\n [copy, expand, collapse]\n );\n\n return (\n \n \n \n \n \n \n );\n};\n","import React from \"react\";\n\nimport s from \"./map.module.scss\";\nimport { Node } from \"../node\";\nimport { Pipe } from \"./pipe\";\nimport { MoreButton } from \"./more\";\n\ninterface Item {\n name: string;\n node: any;\n}\n\nexport type MapNode = any[] | { [key: string]: any };\n\nexport type MapChildExpand = \"default\" | \"expand\" | \"collapse\";\n\ninterface Props {\n name: string;\n items: Item[];\n node: MapNode;\n}\n\nconst ToggleButton: React.FC<{\n expand: boolean;\n setExpand: (expand: boolean) => void;\n children: string;\n}> = ({ expand, setExpand, children }) => (\n \n);\n\nconst renderItem = (item: Item, index: number, arr: Item[]) => (\n
  • \n \n \n
  • \n);\n\n// Using object here on purpose so we can expand a previously expanded tree\nconst FooContext = React.createContext(null);\n\nexport const MapNode: React.FC = ({ node, name, items }) => {\n const [expand, setExpand] = React.useState(items.length < 4);\n const [foo, setFoo] = React.useState(null);\n const fooContext = React.useContext(FooContext);\n\n React.useEffect(() => {\n setFoo(fooContext);\n if (fooContext !== null) setExpand(fooContext);\n }, [fooContext]);\n\n React.useEffect(() => {\n if (foo !== null) setExpand(foo);\n }, [foo])\n\n return (\n \n
    \n
    \n \n {name}\n \n \n
    \n {expand &&
      {items.map(renderItem)}
    }\n
    \n
    \n );\n};\n","import React from \"react\";\n\nimport { PrimitiveNode, isPrimitive } from \"./primitive\";\nimport s from \"./node.module.scss\";\nimport { MapNode } from \"./map/map\";\n\ninterface Props {\n name: string;\n node: any;\n}\n\nconst ObjectNode: React.FC = (props) => {\n const items = Object.keys(props.node).map((key) => ({\n name: key,\n node: props.node[key],\n }));\n return ;\n};\n\nconst ArrayNode: React.FC = (props) => {\n if (!Array.isArray(props.node)) throw Error(\"nodes must be an array\");\n const items = props.node.map((node, index) => ({\n name: index.toString(),\n node,\n }));\n return ;\n};\n\nconst NodeBody: React.FC = (props) => {\n if (isPrimitive(props.node)) return ;\n if (Array.isArray(props.node)) return ;\n return ;\n};\n\nexport const Node: React.FC = (props) => (\n
    \n \n
    \n);\n","import React from \"react\";\n\nimport { Node } from \"./node\";\nimport s from \"./tree.module.scss\";\nimport { Paragraph, DivPx } from \"@moai/core\";\n\ninterface Props {\n value: string;\n}\n\nconst useNode = (value: string) => {\n const [error, setError] = React.useState(null);\n const [node, setNode] = React.useState({});\n\n React.useEffect(() => {\n try {\n const obj = JSON.parse(value);\n setError(null);\n setNode(obj);\n } catch (error) {\n setError(error.message);\n }\n }, [value]);\n\n return { error, node };\n};\n\nconst Error: React.FC<{ error: string }> = ({ error }) => (\n <>\n
    \n \n \n ❗\n \n {error}\n \n
    \n \n \n);\n\nexport const Tree: React.FC = ({ value }) => {\n const { node, error } = useNode(value);\n\n return (\n
    \n {error && }\n
    \n \n
    \n
    \n );\n};\n","import React from \"react\";\n\nimport { Toolbar } from \"./toolbar/toolbar\";\nimport s from \"./view.module.scss\";\nimport { DivPx } from \"@moai/core\";\nimport { Prefs } from \"prefs/prefs\";\nimport { Tree } from \"./tree/tree\";\nimport { Border } from \"@tableplus/toolkit\";\n\ninterface Props {\n prefs: Prefs;\n value: string;\n}\n\nexport const View: React.FC = ({ prefs, value }) => {\n return (\n
    \n
    \n \n
    \n
    \n {\" \"}\n \n
    \n
    \n \n
    \n
    \n );\n};\n","const samples = [\n `{\"squadName\": \"Super Hero Squad\",\"homeTown\": \"Metro City\",\n\"formed\": 2016, \"secretBase\": \"Super tower\",\"active\": true,\n\"members\": [\n{\"name\": \"Molecule Man\",\"age\": 29, \"secretIdentity\": \"Dan Jukes\",\"powers\": [ \"Radiation resistance\",\"Turning tiny\",\"Radiation blast\"]},\n{\"name\": \"Madame Uppercut\",\"age\": 39, \"secretIdentity\": \"Jane Wilson\",\"powers\": [ \"Million tonne punch\",\"Damage resistance\",\"Superhuman reflexes\"]},\n{\"name\": \"Eternal Flame\",\"age\": 1000000, \"secretIdentity\": \"Unknown\",\"powers\": [ \"Immortality\",\"Heat Immunity\",\"Inferno\",\"Teleportation\",\"Interdimensional travel\"]}\n]}`,\n];\n\nexport const getRandomSample: () => string = () =>\n samples[Math.floor(Math.random() * samples.length)];\n","import React from \"react\";\n\nimport { useStorage, Border } from \"@tableplus/toolkit\";\nimport { Footer, ResizeDiv } from \"@tableplus/toolkit\";\nimport { scrollbar } from \"@moai/core\";\nimport { Edit } from \"./edit/edit\";\nimport { View } from \"./view/view\";\nimport { usePrefs } from \"../prefs/prefs\";\nimport { getRandomSample } from \"./sample\";\nimport s from \"./app.module.scss\";\n\nconst fallback = getRandomSample();\n\nexport const App = () => {\n const prefs = usePrefs();\n const [value, setValue] = useStorage(\"value\", fallback);\n const [width, setWidth] = useStorage(\"width\", 0.5);\n\n const body = (\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n );\n\n return (\n
    \n {body}\n \n
    \n
    \n
    \n
    \n );\n};\n","import { IndentState, useIndent, useTheme, SetState } from \"@tableplus/toolkit\";\n\nexport interface Prefs extends IndentState {\n theme: string;\n setTheme: SetState;\n}\n\nexport const usePrefs = (): Prefs => {\n const indent = useIndent();\n const { theme, setTheme } = useTheme();\n return { theme, setTheme, ...indent };\n};\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\n\nimport { AppStorage, StorageContext } from \"@tableplus/toolkit\";\nimport { App } from \"./app/app\";\n\nconst storage = new AppStorage(\"json\");\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n"],"sourceRoot":""}