aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSophie Zhang <sophie_zhang@brown.edu>2023-07-27 13:23:42 -0400
committerSophie Zhang <sophie_zhang@brown.edu>2023-07-27 13:23:42 -0400
commitfec79d2b5b8feb361e489c9ee41ee720507d0806 (patch)
treefcb4378efe4fda3e05322561f25641c57d1f19d4
parent0ca5a86e6f9ff85a32de109105b241d613aae326 (diff)
changes
-rw-r--r--report.20230720.011057.28881.0.001.json1269
-rw-r--r--src/client/apis/gpt/GPT.ts28
-rw-r--r--src/client/util/DragManager.ts4
-rw-r--r--src/client/views/collections/TabDocView.tsx6
-rw-r--r--src/client/views/collections/collectionFreeForm/CollectionFreeFormLinkView.tsx8
-rw-r--r--src/client/views/global/globalScripts.ts50
-rw-r--r--src/client/views/nodes/WebBox.tsx5
-rw-r--r--src/client/views/nodes/formattedText/FormattedTextBox.tsx89
-rw-r--r--src/client/views/pdf/AnchorMenu.tsx21
-rw-r--r--src/client/views/pdf/GPTPopup/GPTPopup.scss52
-rw-r--r--src/client/views/pdf/GPTPopup/GPTPopup.tsx129
-rw-r--r--src/client/views/pdf/PDFViewer.tsx3
12 files changed, 1530 insertions, 134 deletions
diff --git a/report.20230720.011057.28881.0.001.json b/report.20230720.011057.28881.0.001.json
new file mode 100644
index 000000000..5c72c0c91
--- /dev/null
+++ b/report.20230720.011057.28881.0.001.json
@@ -0,0 +1,1269 @@
+
+{
+ "header": {
+ "reportVersion": 1,
+ "event": "Allocation failed - JavaScript heap out of memory",
+ "trigger": "FatalError",
+ "filename": "report.20230720.011057.28881.0.001.json",
+ "dumpEventTime": "2023-07-20T01:10:57Z",
+ "dumpEventTimeStamp": "1689829857721",
+ "processId": 28881,
+ "cwd": "/Users/smallwhale/Desktop/Projects/Dash-Web",
+ "commandLine": [
+ "/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node",
+ "--max-old-space-size=2048",
+ "/Users/smallwhale/Desktop/Projects/Dash-Web/node_modules/ts-node-dev/lib/wrap.js",
+ "/Users/smallwhale/Desktop/Projects/Dash-Web/node_modules/fork-ts-checker-webpack-plugin/lib/service.js"
+ ],
+ "nodejsVersion": "v12.16.0",
+ "wordSize": 64,
+ "arch": "x64",
+ "platform": "darwin",
+ "componentVersions": {
+ "node": "12.16.0",
+ "v8": "7.8.279.23-node.31",
+ "uv": "1.34.0",
+ "zlib": "1.2.11",
+ "brotli": "1.0.7",
+ "ares": "1.15.0",
+ "modules": "72",
+ "nghttp2": "1.40.0",
+ "napi": "5",
+ "llhttp": "2.0.4",
+ "http_parser": "2.9.3",
+ "openssl": "1.1.1d",
+ "cldr": "35.1",
+ "icu": "64.2",
+ "tz": "2019c",
+ "unicode": "12.1"
+ },
+ "release": {
+ "name": "node",
+ "lts": "Erbium",
+ "headersUrl": "https://nodejs.org/download/release/v12.16.0/node-v12.16.0-headers.tar.gz",
+ "sourceUrl": "https://nodejs.org/download/release/v12.16.0/node-v12.16.0.tar.gz"
+ },
+ "osName": "Darwin",
+ "osRelease": "22.4.0",
+ "osVersion": "Darwin Kernel Version 22.4.0: Mon Mar 6 21:01:02 PST 2023; root:xnu-8796.101.5~3/RELEASE_ARM64_T8112",
+ "osMachine": "x86_64",
+ "cpus": [
+ {
+ "model": "Apple M2",
+ "speed": 2400,
+ "user": 40342390,
+ "nice": 0,
+ "sys": 32818540,
+ "idle": 263532590,
+ "irq": 0
+ },
+ {
+ "model": "Apple M2",
+ "speed": 2400,
+ "user": 37882510,
+ "nice": 0,
+ "sys": 28750670,
+ "idle": 270292020,
+ "irq": 0
+ },
+ {
+ "model": "Apple M2",
+ "speed": 2400,
+ "user": 32806560,
+ "nice": 0,
+ "sys": 24772270,
+ "idle": 279705870,
+ "irq": 0
+ },
+ {
+ "model": "Apple M2",
+ "speed": 2400,
+ "user": 28917140,
+ "nice": 0,
+ "sys": 21505900,
+ "idle": 287180070,
+ "irq": 0
+ },
+ {
+ "model": "Apple M2",
+ "speed": 2400,
+ "user": 52175300,
+ "nice": 0,
+ "sys": 11670040,
+ "idle": 274363170,
+ "irq": 0
+ },
+ {
+ "model": "Apple M2",
+ "speed": 2400,
+ "user": 30406640,
+ "nice": 0,
+ "sys": 8969580,
+ "idle": 298959950,
+ "irq": 0
+ },
+ {
+ "model": "Apple M2",
+ "speed": 2400,
+ "user": 21936370,
+ "nice": 0,
+ "sys": 6476860,
+ "idle": 310114030,
+ "irq": 0
+ },
+ {
+ "model": "Apple M2",
+ "speed": 2400,
+ "user": 16048180,
+ "nice": 0,
+ "sys": 4956530,
+ "idle": 317649610,
+ "irq": 0
+ }
+ ],
+ "networkInterfaces": [
+ {
+ "name": "lo0",
+ "internal": true,
+ "mac": "00:00:00:00:00:00",
+ "address": "127.0.0.1",
+ "netmask": "255.0.0.0",
+ "family": "IPv4"
+ },
+ {
+ "name": "lo0",
+ "internal": true,
+ "mac": "00:00:00:00:00:00",
+ "address": "::1",
+ "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
+ "family": "IPv6",
+ "scopeid": 0
+ },
+ {
+ "name": "lo0",
+ "internal": true,
+ "mac": "00:00:00:00:00:00",
+ "address": "fe80::1",
+ "netmask": "ffff:ffff:ffff:ffff::",
+ "family": "IPv6",
+ "scopeid": 1
+ },
+ {
+ "name": "anpi0",
+ "internal": false,
+ "mac": "42:10:d5:5b:93:9e",
+ "address": "fe80::4010:d5ff:fe5b:939e",
+ "netmask": "ffff:ffff:ffff:ffff::",
+ "family": "IPv6",
+ "scopeid": 4
+ },
+ {
+ "name": "anpi1",
+ "internal": false,
+ "mac": "42:10:d5:5b:93:9f",
+ "address": "fe80::4010:d5ff:fe5b:939f",
+ "netmask": "ffff:ffff:ffff:ffff::",
+ "family": "IPv6",
+ "scopeid": 5
+ },
+ {
+ "name": "en0",
+ "internal": false,
+ "mac": "9c:3e:53:8e:59:0e",
+ "address": "fe80::2b:dde:e859:46b8",
+ "netmask": "ffff:ffff:ffff:ffff::",
+ "family": "IPv6",
+ "scopeid": 12
+ },
+ {
+ "name": "en0",
+ "internal": false,
+ "mac": "9c:3e:53:8e:59:0e",
+ "address": "192.168.1.154",
+ "netmask": "255.255.255.0",
+ "family": "IPv4"
+ },
+ {
+ "name": "en0",
+ "internal": false,
+ "mac": "9c:3e:53:8e:59:0e",
+ "address": "2600:4040:572e:2f00:18fe:e894:e23c:f4c2",
+ "netmask": "ffff:ffff:ffff:ffff::",
+ "family": "IPv6",
+ "scopeid": 0
+ },
+ {
+ "name": "en0",
+ "internal": false,
+ "mac": "9c:3e:53:8e:59:0e",
+ "address": "2600:4040:572e:2f00:c182:d0ad:6e64:1fae",
+ "netmask": "ffff:ffff:ffff:ffff::",
+ "family": "IPv6",
+ "scopeid": 0
+ },
+ {
+ "name": "awdl0",
+ "internal": false,
+ "mac": "b6:6c:9a:3c:a7:93",
+ "address": "fe80::b46c:9aff:fe3c:a793",
+ "netmask": "ffff:ffff:ffff:ffff::",
+ "family": "IPv6",
+ "scopeid": 13
+ },
+ {
+ "name": "llw0",
+ "internal": false,
+ "mac": "b6:6c:9a:3c:a7:93",
+ "address": "fe80::b46c:9aff:fe3c:a793",
+ "netmask": "ffff:ffff:ffff:ffff::",
+ "family": "IPv6",
+ "scopeid": 14
+ },
+ {
+ "name": "utun0",
+ "internal": false,
+ "mac": "00:00:00:00:00:00",
+ "address": "fe80::be27:76ec:8f11:5429",
+ "netmask": "ffff:ffff:ffff:ffff::",
+ "family": "IPv6",
+ "scopeid": 15
+ },
+ {
+ "name": "utun1",
+ "internal": false,
+ "mac": "00:00:00:00:00:00",
+ "address": "fe80::ce81:b1c:bd2c:69e",
+ "netmask": "ffff:ffff:ffff:ffff::",
+ "family": "IPv6",
+ "scopeid": 16
+ },
+ {
+ "name": "utun2",
+ "internal": false,
+ "mac": "00:00:00:00:00:00",
+ "address": "fe80::7707:8801:aef4:1907",
+ "netmask": "ffff:ffff:ffff:ffff::",
+ "family": "IPv6",
+ "scopeid": 17
+ },
+ {
+ "name": "utun3",
+ "internal": false,
+ "mac": "00:00:00:00:00:00",
+ "address": "fe80::a4f8:a3ce:851e:23dd",
+ "netmask": "ffff:ffff:ffff:ffff::",
+ "family": "IPv6",
+ "scopeid": 18
+ },
+ {
+ "name": "utun4",
+ "internal": false,
+ "mac": "00:00:00:00:00:00",
+ "address": "fe80::8d47:6641:b300:bde8",
+ "netmask": "ffff:ffff:ffff:ffff::",
+ "family": "IPv6",
+ "scopeid": 19
+ },
+ {
+ "name": "utun5",
+ "internal": false,
+ "mac": "00:00:00:00:00:00",
+ "address": "fe80::7c36:c665:d5f7:49d7",
+ "netmask": "ffff:ffff:ffff:ffff::",
+ "family": "IPv6",
+ "scopeid": 20
+ },
+ {
+ "name": "utun6",
+ "internal": false,
+ "mac": "00:00:00:00:00:00",
+ "address": "fe80::10d8:db7a:d714:7746",
+ "netmask": "ffff:ffff:ffff:ffff::",
+ "family": "IPv6",
+ "scopeid": 21
+ }
+ ],
+ "host": "Sophies-MBP"
+ },
+ "javascriptStack": {
+ "message": "No stack.",
+ "stack": [
+ "Unavailable."
+ ]
+ },
+ "nativeStack": [
+ {
+ "pc": "0x000000010015c8ca",
+ "symbol": "report::TriggerNodeReport(v8::Isolate*, node::Environment*, char const*, char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, v8::Local<v8::String>) [/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node]"
+ },
+ {
+ "pc": "0x0000000100080f3e",
+ "symbol": "node::OnFatalError(char const*, char const*) [/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node]"
+ },
+ {
+ "pc": "0x0000000100185467",
+ "symbol": "v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node]"
+ },
+ {
+ "pc": "0x0000000100185403",
+ "symbol": "v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node]"
+ },
+ {
+ "pc": "0x000000010030b5f5",
+ "symbol": "v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node]"
+ },
+ {
+ "pc": "0x000000010030ccc4",
+ "symbol": "v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node]"
+ },
+ {
+ "pc": "0x0000000100309b37",
+ "symbol": "v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node]"
+ },
+ {
+ "pc": "0x0000000100307afd",
+ "symbol": "v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node]"
+ },
+ {
+ "pc": "0x00000001003132ba",
+ "symbol": "v8::internal::Heap::AllocateRawWithLightRetry(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node]"
+ },
+ {
+ "pc": "0x0000000100313341",
+ "symbol": "v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node]"
+ },
+ {
+ "pc": "0x00000001002e065b",
+ "symbol": "v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationType, v8::internal::AllocationOrigin) [/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node]"
+ },
+ {
+ "pc": "0x0000000100618a18",
+ "symbol": "v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node]"
+ },
+ {
+ "pc": "0x0000000100950c19",
+ "symbol": "Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit [/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node]"
+ },
+ {
+ "pc": "0x00000001008d2291",
+ "symbol": "Builtins_FastNewObject [/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node]"
+ }
+ ],
+ "javascriptHeap": {
+ "totalMemory": 2152435712,
+ "totalCommittedMemory": 2150538320,
+ "usedMemory": 2139294040,
+ "availableMemory": 47735856,
+ "memoryLimit": 2197815296,
+ "heapSpaces": {
+ "read_only_space": {
+ "memorySize": 262144,
+ "committedMemory": 33088,
+ "capacity": 32808,
+ "used": 32808,
+ "available": 0
+ },
+ "new_space": {
+ "memorySize": 2097152,
+ "committedMemory": 1236968,
+ "capacity": 1047456,
+ "used": 203328,
+ "available": 844128
+ },
+ "old_space": {
+ "memorySize": 1956003840,
+ "committedMemory": 1955767472,
+ "capacity": 1948209048,
+ "used": 1947744360,
+ "available": 464688
+ },
+ "code_space": {
+ "memorySize": 14061568,
+ "committedMemory": 13610624,
+ "capacity": 12121760,
+ "used": 12121760,
+ "available": 0
+ },
+ "map_space": {
+ "memorySize": 1576960,
+ "committedMemory": 1456120,
+ "capacity": 1257120,
+ "used": 1257120,
+ "available": 0
+ },
+ "large_object_space": {
+ "memorySize": 178384896,
+ "committedMemory": 178384896,
+ "capacity": 177931880,
+ "used": 177931880,
+ "available": 0
+ },
+ "code_large_object_space": {
+ "memorySize": 49152,
+ "committedMemory": 49152,
+ "capacity": 2784,
+ "used": 2784,
+ "available": 0
+ },
+ "new_large_object_space": {
+ "memorySize": 0,
+ "committedMemory": 0,
+ "capacity": 1047456,
+ "used": 0,
+ "available": 1047456
+ }
+ }
+ },
+ "resourceUsage": {
+ "userCpuSeconds": 312.946,
+ "kernelCpuSeconds": 137.981,
+ "cpuConsumptionPercent": 62.0257,
+ "maxRss": 2062897119232,
+ "pageFaults": {
+ "IORequired": 658,
+ "IONotRequired": 43579208
+ },
+ "fsActivity": {
+ "reads": 0,
+ "writes": 0
+ }
+ },
+ "libuv": [
+ ],
+ "environmentVariables": {
+ "npm_config_save_dev": "",
+ "npm_config_legacy_bundling": "",
+ "npm_config_dry_run": "",
+ "npm_package_dependencies_translate_google_api": "^1.0.4",
+ "npm_package_dependencies_request": "^2.88.2",
+ "npm_package_dependencies_express_flash": "0.0.2",
+ "npm_package_dependencies__fortawesome_fontawesome_svg_core": "^6.3.0",
+ "NVM_INC": "/Users/smallwhale/.nvm/versions/node/v12.16.0/include/node",
+ "npm_config_viewer": "man",
+ "npm_config_only": "",
+ "npm_config_commit_hooks": "true",
+ "npm_config_browser": "",
+ "npm_package_gitHead": "e11aa60b774d457cb016bb0f375ce092f0a733af",
+ "npm_package_dependencies_webpack_dev_middleware": "^5.3.1",
+ "npm_package_dependencies_webpack_cli": "^4.10.0",
+ "npm_package_devDependencies_prettier": "^2.7.1",
+ "npm_package_devDependencies_awesome_typescript_loader": "^5.2.1",
+ "npm_package_devDependencies__types_archiver": "^3.1.1",
+ "MANPATH": "/Users/smallwhale/.nvm/versions/node/v12.16.0/share/man:/Users/smallwhale/.nvm/versions/node/v18.16.0/share/man:/opt/homebrew/share/man:/usr/share/man:/usr/local/share/man:/Users/smallwhale/.nvm/versions/node/v18.16.0/share/man:/opt/homebrew/share/man::",
+ "npm_config_also": "",
+ "npm_package_dependencies_react_jsx_parser": "^1.29.0",
+ "npm_package_dependencies_mongoose": "^5.13.14",
+ "npm_package_dependencies_connect_flash": "^0.1.1",
+ "npm_package_browser_child_process": "false",
+ "npm_config_sign_git_commit": "",
+ "npm_config_rollback": "true",
+ "npm_package_dependencies_material_ui": "^0.20.2",
+ "npm_package_devDependencies__types_sharp": "^0.23.1",
+ "npm_package_devDependencies__types_passport_local": "^1.0.34",
+ "npm_package_devDependencies__types_dotenv": "^6.1.1",
+ "npm_package_devDependencies__types_cookie_parser": "^1.4.2",
+ "TERM_PROGRAM": "vscode",
+ "NODE": "/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node",
+ "npm_config_usage": "",
+ "npm_config_audit": "true",
+ "npm_package_dependencies_reveal_js": "^4.3.0",
+ "npm_package_dependencies_process": "^0.11.10",
+ "npm_package_dependencies_pdfjs": "^2.4.7",
+ "npm_package_dependencies_html_to_image": "^0.1.3",
+ "npm_package_devDependencies_file_loader": "^3.0.1",
+ "npm_package_devDependencies__types_express_flash": "0.0.0",
+ "npm_package_scripts_monitor": "cross-env MONITORED=true NODE_OPTIONS=--max_old_space_size=4096 ts-node src/server/index.ts",
+ "INIT_CWD": "/Users/smallwhale/Desktop/Projects/Dash-Web",
+ "npm_package_dependencies_rehype_raw": "^6.1.1",
+ "npm_package_dependencies_react_audio_waveform": "0.0.5",
+ "npm_package_dependencies_path_browserify": "^1.0.1",
+ "npm_package_dependencies_nodemailer": "^5.1.1",
+ "npm_package_dependencies_axios": "^0.19.2",
+ "npm_package_devDependencies_typescript": "^4.7.4",
+ "NVM_CD_FLAGS": "-q",
+ "npm_config_globalignorefile": "/Users/smallwhale/.nvm/versions/node/v12.16.0/etc/npmignore",
+ "npm_package_dependencies_react_grid_layout": "^1.3.4",
+ "npm_package_dependencies_prosemirror_find_replace": "^0.9.0",
+ "npm_package_dependencies_normalize_css": "^8.0.1",
+ "npm_package_devDependencies_mocha": "^5.2.0",
+ "npm_package_devDependencies__types_express_session": "^1.17.5",
+ "TERM": "xterm-256color",
+ "SHELL": "/bin/zsh",
+ "npm_config_shell": "/bin/zsh",
+ "npm_config_maxsockets": "50",
+ "npm_config_init_author_url": "",
+ "npm_package_dependencies_prosemirror_dev_tools": "^3.1.0",
+ "npm_package_dependencies_p_limit": "^2.2.0",
+ "npm_package_dependencies_bson": "^4.6.1",
+ "npm_package_dependencies__types_dom_speech_recognition": "0.0.1",
+ "npm_package_dependencies__emotion_styled": "^11.11.0",
+ "npm_package_devDependencies_style_loader": "^0.23.1",
+ "npm_package_devDependencies__types_react_datepicker": "^3.1.8",
+ "npm_config_shrinkwrap": "true",
+ "npm_config_parseable": "",
+ "npm_config_metrics_registry": "https://registry.npmjs.org/",
+ "npm_package_dependencies_xregexp": "^4.4.1",
+ "npm_package_dependencies_shelljs": "^0.8.5",
+ "npm_package_dependencies_bezier_curve": "^1.0.0",
+ "npm_package_dependencies__mui_icons_material": "^5.11.16",
+ "npm_package_devDependencies_tslint": "^5.20.1",
+ "npm_package_devDependencies__types_react_transition_group": "^4.4.5",
+ "npm_package_scripts_tsc": "tsc",
+ "HOMEBREW_REPOSITORY": "/opt/homebrew",
+ "TMPDIR": "/var/folders/bv/1xck6d7j7bz14bvhgdsllbj40000gn/T/",
+ "npm_config_timing": "",
+ "npm_config_init_license": "ISC",
+ "npm_package_dependencies_socket_io": "^2.5.0",
+ "npm_package_dependencies_probe_image_size": "^4.0.0",
+ "npm_package_dependencies_canvas": "^2.9.3",
+ "npm_package_dependencies__hig_theme_data": "^2.23.1",
+ "npm_package_devDependencies__types_react_select": "^3.1.2",
+ "npm_package_devDependencies__types_prosemirror_model": "^1.16.1",
+ "npm_config_if_present": "",
+ "npm_package_dependencies_typescript_collections": "^1.3.3",
+ "npm_package_dependencies_rimraf": "^3.0.0",
+ "npm_package_dependencies_react_autosuggest": "^9.4.3",
+ "npm_package_dependencies_flexlayout_react": "^0.3.11",
+ "npm_package_dependencies_find_in_files": "^0.5.0",
+ "npm_package_devDependencies__types_chai": "^4.3.0",
+ "TERM_PROGRAM_VERSION": "1.79.2",
+ "npm_package_dependencies_prosemirror_inputrules": "^1.1.3",
+ "npm_package_dependencies_bcrypt_nodejs": "0.0.3",
+ "npm_package_dependencies_async": "^2.6.2",
+ "npm_config_sign_git_tag": "",
+ "npm_config_init_author_email": "",
+ "npm_config_cache_max": "Infinity",
+ "npm_package_dependencies_uuid": "^3.4.0",
+ "npm_package_dependencies_supercluster": "^7.1.4",
+ "npm_package_dependencies_remark_gfm": "^3.0.1",
+ "npm_package_dependencies_connect_mongo": "^2.0.3",
+ "npm_package_dependencies_browser_assert": "^1.2.1",
+ "npm_package_devDependencies_sass_loader": "^7.3.1",
+ "ZDOTDIR": "/Users/smallwhale",
+ "ORIGINAL_XDG_CURRENT_DESKTOP": "undefined",
+ "MallocNanoZone": "0",
+ "npm_config_preid": "",
+ "npm_config_long": "",
+ "npm_config_local_address": "",
+ "npm_config_git_tag_version": "true",
+ "npm_config_cert": "",
+ "npm_package_dependencies_js_datepicker": "^4.6.6",
+ "npm_package_devDependencies__types_webpack_hot_middleware": "^2.25.6",
+ "npm_package_devDependencies__types_mongodb": "^3.6.20",
+ "npm_package_devDependencies__types_mocha": "^5.2.6",
+ "TERM_SESSION_ID": "F2049B14-CDC7-4078-A2C4-82A8C869F43E",
+ "npm_config_registry": "https://registry.npmjs.org/",
+ "npm_config_noproxy": "",
+ "npm_config_fetch_retries": "2",
+ "npm_package_dependencies_react_compound_slider": "^2.5.0",
+ "npm_package_dependencies_prosemirror_history": "^1.2.0",
+ "npm_package_devDependencies__types_react_color": "^2.17.6",
+ "npm_package_devDependencies__types_google_maps_react": "^2.0.5",
+ "npm_package_devDependencies__types_color": "^3.0.3",
+ "npm_package_dependencies_react_dom": "^18.2.0",
+ "npm_package_dependencies_passport_local": "^1.0.0",
+ "npm_package_dependencies__octokit_core": "^4.0.4",
+ "npm_package_devDependencies__types_async": "^2.4.1",
+ "npm_package_scripts_debug": "cross-env NODE_OPTIONS=--max_old_space_size=8192 ts-node-dev --transpile-only --inspect -- src/server/index.ts",
+ "npm_package_scripts_oldstart": "cross-env NODE_OPTIONS=--max_old_space_size=4096 ts-node-dev --debug -- src/server/index.ts",
+ "npm_config_versions": "",
+ "npm_config_message": "%s",
+ "npm_config_key": "",
+ "npm_package_readmeFilename": "README.md",
+ "npm_package_dependencies_react_refresh_typescript": "^2.0.7",
+ "npm_package_dependencies_image_size": "^0.7.5",
+ "npm_package_dependencies_html_to_text": "^5.1.1",
+ "npm_package_dependencies_express_validator": "^5.3.1",
+ "npm_package_devDependencies_eslint_plugin_jsx_a11y": "^6.6.0",
+ "npm_package_node_child_process": "empty",
+ "npm_package_dependencies_react_resizable_rotatable_draggable": "^0.2.0",
+ "npm_package_dependencies_got": "^12.0.1",
+ "npm_package_dependencies__types_d3_color": "^2.0.3",
+ "npm_package_devDependencies_webpack": "^5.69.1",
+ "npm_package_devDependencies__types_nodemailer": "^4.6.6",
+ "npm_package_description": "Install Node.js, then, from the project directory, run",
+ "NVM_DIR": "/Users/smallwhale/.nvm",
+ "USER": "smallwhale",
+ "npm_package_dependencies__types_d3_scale": "^3.3.2",
+ "npm_package_devDependencies_dotenv": "^8.6.0",
+ "npm_package_devDependencies__types_react": "^18.0.15",
+ "npm_package_devDependencies__types_prosemirror_transform": "^1.1.5",
+ "npm_package_devDependencies__types_prosemirror_history": "^1.0.3",
+ "npm_package_dependencies_readline": "^1.3.0",
+ "npm_package_dependencies__types_supercluster": "^7.1.0",
+ "COMMAND_MODE": "unix2003",
+ "npm_config_globalconfig": "/Users/smallwhale/.nvm/versions/node/v12.16.0/etc/npmrc",
+ "npm_package_dependencies_depcheck": "^0.9.2",
+ "npm_package_dependencies__types_web": "0.0.53",
+ "npm_config_prefer_online": "",
+ "npm_config_logs_max": "10",
+ "npm_config_always_auth": "",
+ "npm_package_dependencies_react_icons": "^4.3.1",
+ "npm_package_dependencies_passport_google_oauth20": "^2.0.0",
+ "npm_package_devDependencies_webpack_dev_server": "^3.11.3",
+ "npm_package_devDependencies__types_brotli": "^1.3.1",
+ "npm_package_dependencies_url_loader": "^1.1.2",
+ "npm_package_dependencies_stream_browserify": "^3.0.0",
+ "npm_package_dependencies_prosemirror_transform": "^1.3.4",
+ "npm_package_dependencies_lodash": "^4.17.21",
+ "npm_package_dependencies_i": "^0.3.7",
+ "npm_package_devDependencies_tslint_loader": "^3.6.0",
+ "SSH_AUTH_SOCK": "/private/tmp/com.apple.launchd.iMTrb4REX6/Listeners",
+ "npm_package_dependencies_words_to_numbers": "^1.5.1",
+ "npm_package_dependencies_valid_url": "^1.0.9",
+ "npm_package_dependencies_styled_components": "^4.4.1",
+ "npm_package_dependencies_csv_parser": "^3.0.0",
+ "npm_package_dependencies_class_transformer": "^0.2.0",
+ "npm_package_devDependencies_eslint": "^8.36.0",
+ "npm_package_devDependencies__types_prosemirror_inputrules": "^1.0.4",
+ "npm_package_devDependencies__types_express": "^4.17.13",
+ "__CF_USER_TEXT_ENCODING": "0x1F5:0x0:0x0",
+ "npm_execpath": "/Users/smallwhale/.nvm/versions/node/v12.16.0/lib/node_modules/npm/bin/npm-cli.js",
+ "npm_config_global_style": "",
+ "npm_config_cache_lock_retries": "10",
+ "npm_package_dependencies_wikijs": "^6.3.3",
+ "npm_package_dependencies_bluebird": "^3.7.2",
+ "npm_package_devDependencies__types_react_typist": "^2.0.3",
+ "npm_config_update_notifier": "true",
+ "npm_config_cafile": "",
+ "npm_package_dependencies_util": "^0.12.4",
+ "npm_package_dependencies_raw_loader": "^1.0.0",
+ "npm_package_dependencies_https_browserify": "^1.0.0",
+ "npm_package_dependencies_brotli": "^1.3.3",
+ "npm_package_dependencies__mui_material": "^5.13.1",
+ "npm_package_dependencies__fortawesome_react_fontawesome": "^0.2.0",
+ "npm_package_devDependencies__types_passport_google_oauth20": "^2.0.11",
+ "npm_package_dependencies_cors": "^2.8.5",
+ "npm_package_dependencies_bezier_js": "^4.1.1",
+ "npm_package_dependencies__fortawesome_free_brands_svg_icons": "^6.3.0",
+ "npm_config_heading": "npm",
+ "npm_config_audit_level": "low",
+ "npm_package_dependencies_chrome": "^0.1.0",
+ "npm_package_dependencies__react_three_fiber": "^6.2.3",
+ "npm_package_devDependencies_eslint_plugin_prettier": "^4.2.1",
+ "npm_package_devDependencies_copy_webpack_plugin": "^4.6.0",
+ "npm_package_devDependencies__types_react_measure": "^2.0.8",
+ "npm_package_devDependencies__types_react_dom": "^18.0.6",
+ "npm_package_devDependencies__types_mobile_detect": "^1.3.4",
+ "npm_config_searchlimit": "20",
+ "npm_config_read_only": "",
+ "npm_config_offline": "",
+ "npm_config_fetch_retry_mintimeout": "10000",
+ "npm_package_dependencies_react_typist": "^2.0.5",
+ "npm_package_dependencies_mobx_react_devtools": "^6.1.1",
+ "npm_package_dependencies_md5_file": "^5.0.0",
+ "npm_package_dependencies_forever_agent": "^0.6.1",
+ "npm_package_devDependencies__types_xregexp": "^4.4.0",
+ "npm_package_devDependencies__types_typescript": "^2.0.0",
+ "npm_package_devDependencies__types_request": "^2.48.8",
+ "npm_package_devDependencies__types_prosemirror_commands": "^1.0.4",
+ "npm_config_json": "",
+ "npm_config_access": "",
+ "npm_config_argv": "{\"remain\":[],\"cooked\":[\"start\"],\"original\":[\"start\"]}",
+ "npm_package_dependencies__fortawesome_free_solid_svg_icons": "^6.3.0",
+ "npm_package_devDependencies__types_socket_io": "^2.1.13",
+ "PATH": "/Users/smallwhale/.nvm/versions/node/v12.16.0/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/Users/smallwhale/Desktop/Projects/Dash-Web/node_modules/.bin:/Users/smallwhale/.nvm/versions/node/v12.16.0/bin:/Users/smallwhale/.nvm/versions/node/v18.16.0/bin:/Library/Frameworks/Python.framework/Versions/3.11/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Users/smallwhale/.nvm/versions/node/v18.16.0/bin:/Library/Frameworks/Python.framework/Versions/3.11/bin:/opt/homebrew/bin:/opt/homebrew/sbin",
+ "npm_config_allow_same_version": "",
+ "npm_package_dependencies_webrtc_adapter": "^7.7.1",
+ "npm_package_dependencies_react_reveal": "^1.2.2",
+ "npm_package_dependencies_prosemirror_schema_list": "^1.1.6",
+ "npm_package_dependencies__material_ui_core": "^4.12.3",
+ "npm_package_devDependencies__types_rimraf": "^2.0.5",
+ "npm_package_devDependencies__types_connect_flash": "0.0.34",
+ "npm_config_https_proxy": "",
+ "npm_config_engine_strict": "",
+ "npm_config_description": "true",
+ "npm_package_dependencies_pug": "^2.0.4",
+ "npm_package_dependencies_prosemirror_keymap": "^1.1.5",
+ "npm_package_dependencies_pdfjs_dist": "^2.14.305",
+ "npm_package_dependencies_mobile_detect": "^1.4.5",
+ "npm_package_dependencies_image_size_stream": "^1.1.0",
+ "npm_package_dependencies_golden_layout": "^1.5.9",
+ "npm_package_dependencies_child_process": "^1.0.2",
+ "npm_package_dependencies__types_d3_axis": "^2.1.3",
+ "_": "/Users/smallwhale/Desktop/Projects/Dash-Web/node_modules/.bin/cross-env",
+ "LaunchInstanceID": "57D8446D-0E37-4DF2-8110-E0AA2FF019D8",
+ "npm_config_userconfig": "/Users/smallwhale/.npmrc",
+ "npm_config_init_module": "/Users/smallwhale/.npm-init.js",
+ "npm_package_dependencies__react_google_maps_api": "^2.7.0",
+ "USER_ZDOTDIR": "/Users/smallwhale",
+ "__CFBundleIdentifier": "com.microsoft.VSCode",
+ "npm_config_cidr": "",
+ "npm_package_dependencies_puppeteer": "^3.3.0",
+ "npm_package_dependencies_prosemirror_view": "^1.26.5",
+ "npm_package_dependencies_mongodb": "^3.7.3",
+ "npm_package_dependencies_google_auth_library": "^4.2.4",
+ "npm_package_dependencies_bootstrap": "^4.6.1",
+ "npm_package_devDependencies_eslint_config_airbnb": "^19.0.4",
+ "PWD": "/Users/smallwhale/Desktop/Projects/Dash-Web",
+ "npm_config_user": "501",
+ "npm_config_node_version": "12.16.0",
+ "npm_package_dependencies_node_sass": "^4.14.1",
+ "npm_package_dependencies_howler": "^2.2.3",
+ "npm_package_dependencies_expressjs": "^1.0.1",
+ "npm_package_dependencies_core_js": "^3.28.0",
+ "npm_package_dependencies_browndash_components": "0.0.82",
+ "npm_package_devDependencies_eslint_plugin_react_hooks": "^4.6.0",
+ "npm_package_devDependencies__types_lodash": "^4.14.179",
+ "npm_lifecycle_event": "start",
+ "npm_package_dependencies_react_table": "^6.11.5",
+ "npm_package_dependencies_react_loading": "^2.0.3",
+ "npm_package_dependencies_mobx": "^5.15.7",
+ "npm_package_dependencies_babel": "^6.23.0",
+ "npm_package_devDependencies_jsdom": "^15.2.1",
+ "npm_package_devDependencies_chai": "^4.3.6",
+ "npm_config_save": "true",
+ "npm_config_ignore_prepublish": "",
+ "npm_config_editor": "vi",
+ "npm_config_auth_type": "legacy",
+ "npm_package_dependencies_npm": "^6.14.18",
+ "npm_package_dependencies_node_stream_zip": "^1.15.0",
+ "npm_package_dependencies_image_data_uri": "^2.0.1",
+ "npm_package_scripts_start_release": "cross-env RELEASE=true NODE_OPTIONS=--max_old_space_size=4096 ts-node-dev -- src/server/index.ts",
+ "npm_package_name": "dash",
+ "LANG": "en_US.UTF-8",
+ "npm_config_tag": "latest",
+ "npm_config_script_shell": "",
+ "npm_package_dependencies_query_string": "^6.14.1",
+ "npm_package_dependencies_mobx_utils": "^5.6.2",
+ "npm_package_dependencies_file_saver": "^2.0.5",
+ "npm_package_dependencies_body_parser": "^1.19.2",
+ "npm_package_dependencies__types_reveal": "^3.3.33",
+ "npm_package_devDependencies_eslint_plugin_import": "^2.26.0",
+ "npm_package_devDependencies__types_prosemirror_view": "^1.23.1",
+ "npm_config_progress": "true",
+ "npm_config_global": "",
+ "npm_config_before": "",
+ "npm_package_dependencies_xoauth2": "^1.2.0",
+ "npm_package_dependencies_standard_http_error": "^2.0.1",
+ "npm_package_dependencies_react_loader_spinner": "^5.3.4",
+ "npm_package_dependencies_http_browserify": "^1.7.0",
+ "npm_package_dependencies__types_d3_selection": "^2.0.1",
+ "npm_package_dependencies__hig_flyout": "^1.3.1",
+ "npm_package_devDependencies_fork_ts_checker_webpack_plugin": "^1.6.0",
+ "npm_package_scripts_build": "cross-env NODE_OPTIONS=--max_old_space_size=8192 webpack --env production",
+ "npm_package_scripts_start": "cross-env NODE_OPTIONS=--max_old_space_size=4096 ts-node-dev --debug --transpile-only -- src/server/index.ts",
+ "npm_config_searchstaleness": "900",
+ "npm_config_optional": "true",
+ "npm_config_ham_it_up": "",
+ "npm_package_dependencies_sharp": "^0.23.4",
+ "npm_package_dependencies_rc_switch": "^1.9.2",
+ "npm_package_dependencies_googlephotos": "^0.2.5",
+ "npm_package_dependencies_exifr": "^7.1.3",
+ "npm_package_dependencies__types_google_maps": "^3.2.3",
+ "npm_package_dependencies__types_bezier_js": "^4.1.0",
+ "npm_package_dependencies__ffmpeg_core": "0.10.0",
+ "npm_package_devDependencies_ts_loader": "^5.3.3",
+ "npm_package_devDependencies__types_bcrypt_nodejs": "0.0.30",
+ "VSCODE_GIT_ASKPASS_EXTRA_ARGS": "--ms-enable-electron-run-as-node",
+ "XPC_FLAGS": "0x0",
+ "npm_config_save_prod": "",
+ "npm_config_force": "",
+ "npm_config_bin_links": "true",
+ "npm_package_devDependencies__types_youtube": "0.0.39",
+ "npm_config_searchopts": "",
+ "npm_package_dependencies_react_beautiful_dnd": "^13.1.0",
+ "npm_package_dependencies_jszip": "^3.7.1",
+ "npm_package_dependencies_csv_stringify": "^6.3.0",
+ "npm_package_devDependencies__types_react_icons": "^3.0.0",
+ "npm_config_node_gyp": "/Users/smallwhale/.nvm/versions/node/v12.16.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js",
+ "npm_config_depth": "Infinity",
+ "npm_package_dependencies_google_maps_react": "^2.0.6",
+ "npm_package_dependencies_express_session": "^1.17.2",
+ "npm_package_devDependencies_eslint_plugin_node": "^11.1.0",
+ "npm_package_devDependencies_eslint_config_prettier": "^8.5.0",
+ "npm_package_main": "index.js",
+ "npm_config_sso_poll_frequency": "500",
+ "npm_config_rebuild_bundle": "true",
+ "npm_package_dependencies_chart_js": "^3.8.0",
+ "npm_package_dependencies__emotion_react": "^11.11.0",
+ "npm_package_devDependencies__types_prosemirror_menu": "^1.0.6",
+ "npm_package_devDependencies__types_prosemirror_keymap": "^1.0.4",
+ "npm_package_devDependencies__types_pdfjs_dist": "^2.10.378",
+ "npm_package_devDependencies__types_exif": "^0.6.3",
+ "npm_package_version": "1.0.0",
+ "XPC_SERVICE_NAME": "0",
+ "npm_config_unicode": "true",
+ "VSCODE_INJECTION": "1",
+ "npm_package_dependencies_typescript_language_server": "^0.4.0",
+ "npm_package_dependencies_prosemirror_model": "^1.18.1",
+ "npm_package_dependencies__ffmpeg_ffmpeg": "0.10.0",
+ "SHLVL": "4",
+ "HOME": "/Users/smallwhale",
+ "npm_config_fetch_retry_maxtimeout": "60000",
+ "npm_package_dependencies_request_promise": "^4.2.6",
+ "npm_package_dependencies_react_markdown": "^8.0.3",
+ "npm_package_dependencies__hig_theme_context": "^2.1.3",
+ "npm_package_devDependencies__types_react_autosuggest": "^9.3.14",
+ "npm_package_devDependencies__types_mongoose": "^5.11.97",
+ "npm_package_devDependencies__types_d3": "^7.4.0",
+ "npm_package_devDependencies__types_animejs": "^2.0.2",
+ "npm_package_scripts_test": "mocha -r ts-node/register test/**/*.ts",
+ "VSCODE_GIT_ASKPASS_MAIN": "/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass-main.js",
+ "npm_config_tag_version_prefix": "v",
+ "npm_config_strict_ssl": "true",
+ "npm_config_sso_type": "oauth",
+ "npm_config_scripts_prepend_node_path": "warn-only",
+ "npm_config_save_prefix": "^",
+ "npm_config_loglevel": "notice",
+ "npm_config_ca": "",
+ "npm_package_dependencies_three": "^0.127.0",
+ "npm_package_dependencies_openai": "^3.2.1",
+ "npm_package_dependencies_mobx_react": "^5.4.4",
+ "npm_package_dependencies_cookie_parser": "^1.4.6",
+ "npm_package_dependencies_adm_zip": "^0.4.16",
+ "npm_package_devDependencies_eslint_config_node": "^4.1.0",
+ "npm_config_save_exact": "",
+ "npm_config_group": "20",
+ "npm_config_fetch_retry_factor": "10",
+ "npm_config_dev": "",
+ "npm_package_devDependencies_webpack_hot_middleware": "^2.25.1",
+ "npm_package_devDependencies_cross_env": "^5.2.1",
+ "HOMEBREW_PREFIX": "/opt/homebrew",
+ "npm_config_version": "",
+ "npm_config_prefer_offline": "",
+ "npm_config_cache_lock_stale": "60000",
+ "npm_package_devDependencies__types_prosemirror_state": "^1.2.8",
+ "npm_package_devDependencies__types_body_parser": "^1.19.2",
+ "npm_config_otp": "",
+ "npm_config_cache_min": "10",
+ "npm_package_dependencies_react_color": "^2.19.3",
+ "npm_package_dependencies_d3": "^7.6.1",
+ "npm_package_devDependencies_ts_node": "^10.9.1",
+ "npm_package_devDependencies__types_react_grid_layout": "^1.3.2",
+ "npm_config_searchexclude": "",
+ "npm_config_cache": "/Users/smallwhale/.npm",
+ "npm_package_dependencies_tough_cookie": "^4.0.0",
+ "npm_package_dependencies_googleapis": "^40.0.0",
+ "npm_package_devDependencies__types_valid_url": "^1.0.3",
+ "npm_package_devDependencies__types_passport": "^1.0.9",
+ "npm_package_devDependencies__types_adm_zip": "^0.4.34",
+ "LOGNAME": "smallwhale",
+ "npm_lifecycle_script": "cross-env NODE_OPTIONS=--max_old_space_size=4096 ts-node-dev --debug --transpile-only -- src/server/index.ts",
+ "npm_config_color": "true",
+ "npm_package_dependencies_solr_node": "^1.2.1",
+ "npm_package_dependencies_react_transition_group": "^4.4.2",
+ "npm_package_dependencies_iink_js": "^1.5.4",
+ "npm_package_dependencies_html_webpack_plugin": "^5.5.0",
+ "npm_config_proxy": "",
+ "npm_config_package_lock": "true",
+ "npm_package_dependencies_prosemirror_state": "^1.4.1",
+ "npm_package_dependencies_nodemon": "^1.19.4",
+ "npm_package_dependencies_function_plot": "^1.22.8",
+ "npm_package_dependencies_equation_editor_react": "github:bobzel/equation-editor-react#useLocally",
+ "npm_package_devDependencies__types_socket_io_parser": "^3.0.0",
+ "VSCODE_GIT_IPC_HANDLE": "/var/folders/bv/1xck6d7j7bz14bvhgdsllbj40000gn/T/vscode-git-b8c8318074.sock",
+ "npm_config_package_lock_only": "",
+ "npm_config_fund": "true",
+ "npm_package_dependencies_react": "^18.2.0",
+ "npm_package_dependencies_bingmaps_react": "^1.2.10",
+ "npm_package_devDependencies_scss_loader": "0.0.1",
+ "npm_package_devDependencies__types_cookie_session": "^2.0.44",
+ "npm_config_save_optional": "",
+ "npm_package_dependencies_textarea_caret": "^3.1.0",
+ "npm_package_dependencies_react_measure": "^2.5.2",
+ "npm_package_dependencies_exif": "^0.6.0",
+ "NVM_BIN": "/Users/smallwhale/.nvm/versions/node/v12.16.0/bin",
+ "npm_config_ignore_scripts": "",
+ "npm_config_user_agent": "npm/6.13.4 node/v12.16.0 darwin x64",
+ "npm_package_dependencies_react_resizable": "^1.11.1",
+ "npm_package_dependencies_prosemirror_commands": "^1.2.1",
+ "npm_package_dependencies_memorystream": "^0.3.1",
+ "npm_package_dependencies_formidable": "1.2.1",
+ "npm_package_devDependencies__types_uuid": "^3.4.10",
+ "npm_config_cache_lock_wait": "10000",
+ "npm_package_dependencies_socket_io_client": "^2.5.0",
+ "npm_package_dependencies_recharts": "^2.1.12",
+ "npm_package_dependencies_react_chartjs_2": "^4.3.0",
+ "npm_package_dependencies_fluent_ffmpeg": "^2.1.2",
+ "npm_package_dependencies__types_cors": "^2.8.12",
+ "npm_package_devDependencies__types_node": "^10.17.60",
+ "npm_package_devDependencies__types_file_saver": "^2.0.5",
+ "VSCODE_GIT_ASKPASS_NODE": "/Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Plugin).app/Contents/MacOS/Code Helper (Plugin)",
+ "GIT_ASKPASS": "/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/git/dist/askpass.sh",
+ "HOMEBREW_CELLAR": "/opt/homebrew/Cellar",
+ "INFOPATH": "/opt/homebrew/share/info:/opt/homebrew/share/info:",
+ "npm_config_production": "",
+ "npm_package_dependencies_jsonschema": "^1.4.0",
+ "npm_package_dependencies_ffmpeg": "0.0.4",
+ "npm_package_dependencies_cookie_session": "^2.0.0",
+ "npm_package_dependencies_color": "^3.2.1",
+ "npm_package_devDependencies__types_webpack": "^4.41.32",
+ "npm_package_devDependencies__types_request_promise": "^4.1.48",
+ "npm_package_devDependencies__types_prosemirror_schema_list": "^1.0.3",
+ "npm_config_send_metrics": "",
+ "npm_config_save_bundle": "",
+ "npm_package_dependencies_web_request": "^1.0.7",
+ "npm_package_dependencies_react_datepicker": "^3.8.0",
+ "npm_package_dependencies_express": "^4.17.3",
+ "npm_package_dependencies_D": "^1.0.0",
+ "npm_package_dependencies__types_formidable": "1.0.31",
+ "npm_package_devDependencies__types_rc_switch": "^1.9.2",
+ "npm_package_devDependencies__types_prosemirror_dev_tools": "^2.1.0",
+ "npm_package_devDependencies__types_jquery": "^3.5.14",
+ "npm_config_umask": "0022",
+ "npm_config_node_options": "",
+ "npm_config_init_version": "1.0.0",
+ "npm_package_dependencies_https": "^1.0.0",
+ "npm_package_dependencies_array_batcher": "^1.2.3",
+ "npm_package_dependencies__fortawesome_free_regular_svg_icons": "^6.3.0",
+ "npm_package_devDependencies__types_shelljs": "^0.8.11",
+ "npm_package_devDependencies__types_libxmljs": "^0.18.7",
+ "npm_package_devDependencies__types_express_validator": "^3.0.0",
+ "npm_package_devDependencies__types_bluebird": "^3.5.36",
+ "npm_config_init_author_name": "",
+ "npm_config_git": "git",
+ "npm_config_scope": "",
+ "npm_package_dependencies_react_select": "^3.2.0",
+ "npm_package_dependencies_pdf_parse": "^1.1.1",
+ "npm_package_dependencies_colors": "^1.4.0",
+ "npm_package_dependencies_archiver": "^3.1.1",
+ "npm_package_devDependencies_css_loader": "^2.1.1",
+ "npm_package_devDependencies__types_socket_io_client": "^1.4.36",
+ "SECURITYSESSIONID": "186a4",
+ "npm_config_unsafe_perm": "true",
+ "npm_config_tmp": "/var/folders/bv/1xck6d7j7bz14bvhgdsllbj40000gn/T",
+ "npm_config_onload_script": "",
+ "npm_package_dependencies_serializr": "^1.5.4",
+ "npm_package_dependencies_fit_curve": "^0.1.7",
+ "npm_package_dependencies__webscopeio_react_textarea_autocomplete": "^4.9.1",
+ "npm_package_dependencies__types_three": "^0.126.2",
+ "npm_package_devDependencies_ts_node_dev": "^2.0.0",
+ "npm_node_execpath": "/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node",
+ "npm_config_prefix": "/Users/smallwhale/.nvm/versions/node/v12.16.0",
+ "npm_config_link": "",
+ "npm_config_format_package_lock": "true",
+ "npm_package_dependencies_passport": "^0.4.0",
+ "npm_package_devDependencies_eslint_plugin_react": "^7.30.1",
+ "npm_package_devDependencies__types_react_table": "^6.8.9",
+ "npm_package_devDependencies__types_react_reconciler": "^0.26.4",
+ "COLORTERM": "truecolor",
+ "NODE_OPTIONS": "--max_old_space_size=4096",
+ "TS_NODE_DEV": "true",
+ "_CLIENT_OPENAI_KEY": "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",
+ "_CLIENT_GITHUB_ACCESS_TOKEN": "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",
+ "VIPSHOME": "/usr/local/Cellar/vips/8.8.1",
+ "TYPESCRIPT_PATH": "/Users/smallwhale/Desktop/Projects/Dash-Web/node_modules/typescript/lib/typescript.js",
+ "TSCONFIG": "/Users/smallwhale/Desktop/Projects/Dash-Web/tsconfig.json",
+ "COMPILER_OPTIONS": "{}",
+ "TSLINT": "true",
+ "CONTEXT": "/Users/smallwhale/Desktop/Projects/Dash-Web",
+ "TSLINTAUTOFIX": "false",
+ "ESLINT": "false",
+ "ESLINT_OPTIONS": "{}",
+ "WATCH": "",
+ "WORK_DIVISION": "1",
+ "MEMORY_LIMIT": "2048",
+ "CHECK_SYNTACTIC_ERRORS": "false",
+ "USE_INCREMENTAL_API": "true",
+ "VUE": "false"
+ },
+ "userLimits": {
+ "core_file_size_blocks": {
+ "soft": 0,
+ "hard": "unlimited"
+ },
+ "data_seg_size_kbytes": {
+ "soft": "unlimited",
+ "hard": "unlimited"
+ },
+ "file_size_blocks": {
+ "soft": "unlimited",
+ "hard": "unlimited"
+ },
+ "max_locked_memory_bytes": {
+ "soft": "unlimited",
+ "hard": "unlimited"
+ },
+ "max_memory_size_kbytes": {
+ "soft": "unlimited",
+ "hard": "unlimited"
+ },
+ "open_files": {
+ "soft": 1048575,
+ "hard": "unlimited"
+ },
+ "stack_size_bytes": {
+ "soft": 8372224,
+ "hard": 67092480
+ },
+ "cpu_time_seconds": {
+ "soft": "unlimited",
+ "hard": "unlimited"
+ },
+ "max_user_processes": {
+ "soft": 1333,
+ "hard": 2000
+ },
+ "virtual_memory_kbytes": {
+ "soft": "unlimited",
+ "hard": "unlimited"
+ }
+ },
+ "sharedObjects": [
+ "/Users/smallwhale/.nvm/versions/node/v12.16.0/bin/node",
+ "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation",
+ "/usr/lib/libobjc.A.dylib",
+ "/System/Library/PrivateFrameworks/CoreServicesInternal.framework/Versions/A/CoreServicesInternal",
+ "/usr/lib/liboah.dylib",
+ "/usr/lib/libfakelink.dylib",
+ "/usr/lib/libicucore.A.dylib",
+ "/usr/lib/libSystem.B.dylib",
+ "/System/Library/PrivateFrameworks/SoftLinking.framework/Versions/A/SoftLinking",
+ "/usr/lib/libc++abi.dylib",
+ "/usr/lib/libc++.1.dylib",
+ "/usr/lib/system/libcache.dylib",
+ "/usr/lib/system/libcommonCrypto.dylib",
+ "/usr/lib/system/libcompiler_rt.dylib",
+ "/usr/lib/system/libcopyfile.dylib",
+ "/usr/lib/system/libcorecrypto.dylib",
+ "/usr/lib/system/libdispatch.dylib",
+ "/usr/lib/system/libdyld.dylib",
+ "/usr/lib/system/libkeymgr.dylib",
+ "/usr/lib/system/libmacho.dylib",
+ "/usr/lib/system/libquarantine.dylib",
+ "/usr/lib/system/libremovefile.dylib",
+ "/usr/lib/system/libsystem_asl.dylib",
+ "/usr/lib/system/libsystem_blocks.dylib",
+ "/usr/lib/system/libsystem_c.dylib",
+ "/usr/lib/system/libsystem_collections.dylib",
+ "/usr/lib/system/libsystem_configuration.dylib",
+ "/usr/lib/system/libsystem_containermanager.dylib",
+ "/usr/lib/system/libsystem_coreservices.dylib",
+ "/usr/lib/system/libsystem_darwin.dylib",
+ "/usr/lib/system/libsystem_dnssd.dylib",
+ "/usr/lib/system/libsystem_featureflags.dylib",
+ "/usr/lib/system/libsystem_info.dylib",
+ "/usr/lib/system/libsystem_m.dylib",
+ "/usr/lib/system/libsystem_malloc.dylib",
+ "/usr/lib/system/libsystem_networkextension.dylib",
+ "/usr/lib/system/libsystem_notify.dylib",
+ "/usr/lib/system/libsystem_sandbox.dylib",
+ "/usr/lib/system/libsystem_secinit.dylib",
+ "/usr/lib/system/libsystem_kernel.dylib",
+ "/usr/lib/system/libsystem_platform.dylib",
+ "/usr/lib/system/libsystem_pthread.dylib",
+ "/usr/lib/system/libsystem_symptoms.dylib",
+ "/usr/lib/system/libsystem_trace.dylib",
+ "/usr/lib/system/libunwind.dylib",
+ "/usr/lib/system/libxpc.dylib",
+ "/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit",
+ "/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices",
+ "/usr/lib/libDiagnosticMessagesClient.dylib",
+ "/usr/lib/libenergytrace.dylib",
+ "/usr/lib/libbsm.0.dylib",
+ "/usr/lib/libz.1.dylib",
+ "/usr/lib/system/libkxld.dylib",
+ "/System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork",
+ "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents",
+ "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore",
+ "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata",
+ "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices",
+ "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit",
+ "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE",
+ "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices",
+ "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices",
+ "/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList",
+ "/System/Library/Frameworks/Security.framework/Versions/A/Security",
+ "/System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration",
+ "/usr/lib/libapple_nghttp2.dylib",
+ "/usr/lib/libcompression.dylib",
+ "/usr/lib/libnetwork.dylib",
+ "/usr/lib/libsqlite3.dylib",
+ "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation",
+ "/System/Library/Frameworks/Network.framework/Versions/A/Network",
+ "/usr/lib/libCoreEntitlements.dylib",
+ "/System/Library/PrivateFrameworks/MessageSecurity.framework/Versions/A/MessageSecurity",
+ "/System/Library/PrivateFrameworks/ProtocolBuffer.framework/Versions/A/ProtocolBuffer",
+ "/usr/lib/libMobileGestalt.dylib",
+ "/System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression",
+ "/usr/lib/libcoretls.dylib",
+ "/usr/lib/libcoretls_cfhelpers.dylib",
+ "/usr/lib/libpam.2.dylib",
+ "/usr/lib/libxar.1.dylib",
+ "/System/Library/PrivateFrameworks/CoreAutoLayout.framework/Versions/A/CoreAutoLayout",
+ "/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration",
+ "/usr/lib/libarchive.2.dylib",
+ "/usr/lib/libxml2.2.dylib",
+ "/usr/lib/liblangid.dylib",
+ "/System/Library/Frameworks/Combine.framework/Versions/A/Combine",
+ "/usr/lib/swift/libswiftCore.dylib",
+ "/usr/lib/swift/libswiftCoreFoundation.dylib",
+ "/usr/lib/swift/libswiftDarwin.dylib",
+ "/usr/lib/swift/libswiftDispatch.dylib",
+ "/usr/lib/swift/libswiftIOKit.dylib",
+ "/usr/lib/swift/libswiftObjectiveC.dylib",
+ "/usr/lib/swift/libswiftXPC.dylib",
+ "/usr/lib/swift/libswift_Concurrency.dylib",
+ "/usr/lib/swift/libswift_StringProcessing.dylib",
+ "/usr/lib/swift/libswiftos.dylib",
+ "/System/Library/PrivateFrameworks/AppleSystemInfo.framework/Versions/A/AppleSystemInfo",
+ "/System/Library/PrivateFrameworks/IOMobileFramebuffer.framework/Versions/A/IOMobileFramebuffer",
+ "/System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface",
+ "/usr/lib/libpcap.A.dylib",
+ "/usr/lib/libdns_services.dylib",
+ "/usr/lib/liblzma.5.dylib",
+ "/usr/lib/libbz2.1.0.dylib",
+ "/usr/lib/libiconv.2.dylib",
+ "/usr/lib/libcharset.1.dylib",
+ "/usr/lib/swift/libswift_RegexParser.dylib",
+ "/usr/lib/libheimdal-asn1.dylib",
+ "/usr/lib/libCheckFix.dylib",
+ "/System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC",
+ "/System/Library/PrivateFrameworks/CoreNLP.framework/Versions/A/CoreNLP",
+ "/System/Library/PrivateFrameworks/MetadataUtilities.framework/Versions/A/MetadataUtilities",
+ "/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate",
+ "/usr/lib/libmecab.dylib",
+ "/usr/lib/libCRFSuite.dylib",
+ "/usr/lib/libgermantok.dylib",
+ "/usr/lib/libThaiTokenizer.dylib",
+ "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage",
+ "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib",
+ "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib",
+ "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib",
+ "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib",
+ "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib",
+ "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib",
+ "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib",
+ "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libQuadrature.dylib",
+ "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBNNS.dylib",
+ "/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparse.dylib",
+ "/System/Library/PrivateFrameworks/MIL.framework/Versions/A/MIL",
+ "/System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory",
+ "/System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory",
+ "/System/Library/PrivateFrameworks/APFS.framework/Versions/A/APFS",
+ "/System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation",
+ "/usr/lib/libutil.dylib",
+ "/System/Library/PrivateFrameworks/InstalledContentLibrary.framework/Versions/A/InstalledContentLibrary",
+ "/System/Library/PrivateFrameworks/CoreServicesStore.framework/Versions/A/CoreServicesStore",
+ "/usr/lib/libapp_launch_measurement.dylib",
+ "/System/Library/PrivateFrameworks/AppleMobileFileIntegrity.framework/Versions/A/AppleMobileFileIntegrity",
+ "/usr/lib/libmis.dylib",
+ "/System/Library/PrivateFrameworks/MobileSystemServices.framework/Versions/A/MobileSystemServices",
+ "/System/Library/PrivateFrameworks/ConfigProfileHelper.framework/Versions/A/ConfigProfileHelper",
+ "/System/Library/PrivateFrameworks/CoreAnalytics.framework/Versions/A/CoreAnalytics",
+ "/System/Library/PrivateFrameworks/AppleSauce.framework/Versions/A/AppleSauce",
+ "/System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling",
+ "/usr/lib/libxslt.1.dylib",
+ "/usr/lib/libcmph.dylib",
+ "/System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji",
+ "/System/Library/PrivateFrameworks/LinguisticData.framework/Versions/A/LinguisticData",
+ "/System/Library/PrivateFrameworks/Lexicon.framework/Versions/A/Lexicon",
+ "/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/BackgroundTaskManagement",
+ "/usr/lib/libTLE.dylib",
+ "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices",
+ "/System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics",
+ "/System/Library/Frameworks/CoreText.framework/Versions/A/CoreText",
+ "/System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO",
+ "/System/Library/Frameworks/ColorSync.framework/Versions/A/ColorSync",
+ "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS",
+ "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices",
+ "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore",
+ "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD",
+ "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSyncLegacy.framework/Versions/A/ColorSyncLegacy",
+ "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis",
+ "/System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight",
+ "/System/Library/PrivateFrameworks/FontServices.framework/libFontParser.dylib",
+ "/System/Library/PrivateFrameworks/RunningBoardServices.framework/Versions/A/RunningBoardServices",
+ "/System/Library/PrivateFrameworks/IOSurfaceAccelerator.framework/Versions/A/IOSurfaceAccelerator",
+ "/System/Library/PrivateFrameworks/WatchdogClient.framework/Versions/A/WatchdogClient",
+ "/System/Library/Frameworks/CoreDisplay.framework/Versions/A/CoreDisplay",
+ "/System/Library/Frameworks/CoreMedia.framework/Versions/A/CoreMedia",
+ "/System/Library/PrivateFrameworks/IOAccelerator.framework/Versions/A/IOAccelerator",
+ "/System/Library/Frameworks/Metal.framework/Versions/A/Metal",
+ "/System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo",
+ "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/MetalPerformanceShaders",
+ "/System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport",
+ "/System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore",
+ "/System/Library/Frameworks/VideoToolbox.framework/Versions/A/VideoToolbox",
+ "/System/Library/PrivateFrameworks/BaseBoard.framework/Versions/A/BaseBoard",
+ "/System/Library/PrivateFrameworks/AppleJPEG.framework/Versions/A/AppleJPEG",
+ "/usr/lib/libexpat.1.dylib",
+ "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib",
+ "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib",
+ "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib",
+ "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib",
+ "/usr/lib/libate.dylib",
+ "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib",
+ "/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib",
+ "/System/Library/PrivateFrameworks/GPUWrangler.framework/Versions/A/GPUWrangler",
+ "/System/Library/PrivateFrameworks/IOPresentment.framework/Versions/A/IOPresentment",
+ "/System/Library/PrivateFrameworks/DSExternalDisplay.framework/Versions/A/DSExternalDisplay",
+ "/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/libllvm-flatbuffers.dylib",
+ "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreFSCache.dylib",
+ "/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/libGPUCompilerUtils.dylib",
+ "/System/Library/PrivateFrameworks/CMCaptureCore.framework/Versions/A/CMCaptureCore",
+ "/usr/lib/libspindump.dylib",
+ "/System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio",
+ "/System/Library/Frameworks/ExtensionFoundation.framework/Versions/A/ExtensionFoundation",
+ "/System/Library/PrivateFrameworks/CoreTime.framework/Versions/A/CoreTime",
+ "/System/Library/PrivateFrameworks/AppServerSupport.framework/Versions/A/AppServerSupport",
+ "/System/Library/PrivateFrameworks/perfdata.framework/Versions/A/perfdata",
+ "/System/Library/PrivateFrameworks/AudioToolboxCore.framework/Versions/A/AudioToolboxCore",
+ "/System/Library/PrivateFrameworks/caulk.framework/Versions/A/caulk",
+ "/usr/lib/libAudioStatistics.dylib",
+ "/System/Library/PrivateFrameworks/SystemPolicy.framework/Versions/A/SystemPolicy",
+ "/usr/lib/libSMC.dylib",
+ "/System/Library/Frameworks/CoreMIDI.framework/Versions/A/CoreMIDI",
+ "/usr/lib/libAudioToolboxUtility.dylib",
+ "/System/Library/PrivateFrameworks/OSAServicesClient.framework/Versions/A/OSAServicesClient",
+ "/usr/lib/libperfcheck.dylib",
+ "/System/Library/PrivateFrameworks/PlugInKit.framework/Versions/A/PlugInKit",
+ "/System/Library/PrivateFrameworks/AssertionServices.framework/Versions/A/AssertionServices",
+ "/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL",
+ "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib",
+ "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib",
+ "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib",
+ "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib",
+ "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib",
+ "/usr/lib/libRosetta.dylib",
+ "/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib",
+ "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSCore.framework/Versions/A/MPSCore",
+ "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSImage.framework/Versions/A/MPSImage",
+ "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSNeuralNetwork.framework/Versions/A/MPSNeuralNetwork",
+ "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSMatrix.framework/Versions/A/MPSMatrix",
+ "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSRayIntersector.framework/Versions/A/MPSRayIntersector",
+ "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSNDArray.framework/Versions/A/MPSNDArray",
+ "/System/Library/Frameworks/MetalPerformanceShaders.framework/Versions/A/Frameworks/MPSFunctions.framework/Versions/A/MPSFunctions",
+ "/System/Library/PrivateFrameworks/MetalTools.framework/Versions/A/MetalTools",
+ "/System/Library/PrivateFrameworks/AggregateDictionary.framework/Versions/A/AggregateDictionary",
+ "/usr/lib/libIOReport.dylib",
+ "/System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage",
+ "/System/Library/PrivateFrameworks/PhotosensitivityProcessing.framework/Versions/A/PhotosensitivityProcessing",
+ "/System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL",
+ "/System/Library/PrivateFrameworks/GraphVisualizer.framework/Versions/A/GraphVisualizer",
+ "/System/Library/PrivateFrameworks/FontServices.framework/Versions/A/FontServices",
+ "/System/Library/Frameworks/UniformTypeIdentifiers.framework/Versions/A/UniformTypeIdentifiers",
+ "/System/Library/PrivateFrameworks/OTSVG.framework/Versions/A/OTSVG",
+ "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib",
+ "/System/Library/PrivateFrameworks/FontServices.framework/libhvf.dylib",
+ "/System/Library/PrivateFrameworks/FontServices.framework/libXTFontStaticRegistryData.dylib",
+ "/System/Library/PrivateFrameworks/VideoToolboxParavirtualizationSupport.framework/Versions/A/VideoToolboxParavirtualizationSupport",
+ "/System/Library/PrivateFrameworks/AppleVA.framework/Versions/A/AppleVA",
+ "/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATSUI.framework/Versions/A/ATSUI",
+ "/usr/lib/libcups.2.dylib",
+ "/System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos",
+ "/System/Library/Frameworks/GSS.framework/Versions/A/GSS",
+ "/usr/lib/libresolv.9.dylib",
+ "/System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal",
+ "/System/Library/Frameworks/Kerberos.framework/Versions/A/Libraries/libHeimdalProxy.dylib",
+ "/System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth",
+ "/System/Library/Frameworks/AVFAudio.framework/Versions/A/AVFAudio",
+ "/System/Library/PrivateFrameworks/AXCoreUtilities.framework/Versions/A/AXCoreUtilities",
+ "/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox",
+ "/System/Library/PrivateFrameworks/AudioSession.framework/Versions/A/AudioSession",
+ "/System/Library/Frameworks/IOBluetooth.framework/Versions/A/IOBluetooth",
+ "/System/Library/PrivateFrameworks/MediaExperience.framework/Versions/A/MediaExperience",
+ "/System/Library/PrivateFrameworks/AudioSession.framework/libSessionUtility.dylib",
+ "/System/Library/PrivateFrameworks/AudioResourceArbitration.framework/Versions/A/AudioResourceArbitration",
+ "/System/Library/PrivateFrameworks/PowerLog.framework/Versions/A/PowerLog",
+ "/System/Library/Frameworks/CoreData.framework/Versions/A/CoreData",
+ "/System/Library/Frameworks/CoreBluetooth.framework/Versions/A/CoreBluetooth",
+ "/System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit",
+ "/System/Library/PrivateFrameworks/CoreUtils.framework/Versions/A/CoreUtils",
+ "/System/Library/PrivateFrameworks/CoreUtilsExtras.framework/Versions/A/CoreUtilsExtras",
+ "/System/Library/PrivateFrameworks/IO80211.framework/Versions/A/IO80211",
+ "/System/Library/PrivateFrameworks/MobileKeyBag.framework/Versions/A/MobileKeyBag",
+ "/System/Library/PrivateFrameworks/MallocStackLogging.framework/Versions/A/MallocStackLogging"
+ ]
+} \ No newline at end of file
diff --git a/src/client/apis/gpt/GPT.ts b/src/client/apis/gpt/GPT.ts
index 18222b32a..6b4106f56 100644
--- a/src/client/apis/gpt/GPT.ts
+++ b/src/client/apis/gpt/GPT.ts
@@ -14,7 +14,7 @@ type GPTCallOpts = {
};
const callTypeMap: { [type: string]: GPTCallOpts } = {
- summary: { model: 'text-davinci-003', maxTokens: 256, temp: 0.5, prompt: 'Summarize this text briefly: ' },
+ summary: { model: 'text-davinci-003', maxTokens: 256, temp: 0.5, prompt: 'Summarize this text in simpler terms: ' },
edit: { model: 'text-davinci-003', maxTokens: 256, temp: 0.5, prompt: 'Reword this: ' },
completion: { model: 'text-davinci-003', maxTokens: 256, temp: 0.5, prompt: '' },
};
@@ -47,7 +47,7 @@ const gptAPICall = async (inputText: string, callType: GPTCallType) => {
}
};
-const gptImageCall = async (prompt: string) => {
+const gptImageCall = async (prompt: string, n?: number) => {
try {
const configuration = new Configuration({
apiKey: process.env.OPENAI_KEY,
@@ -55,33 +55,15 @@ const gptImageCall = async (prompt: string) => {
const openai = new OpenAIApi(configuration);
const response = await openai.createImage({
prompt: prompt,
- n: 1,
+ n: n ?? 1,
size: '1024x1024',
});
- return response.data.data[0].url;
+ return response.data.data.map(data => data.url);
+ // return response.data.data[0].url;
} catch (err) {
console.error(err);
return;
}
};
-// const gptEditCall = async (selectedText: string, fullText: string) => {
-// try {
-// const configuration = new Configuration({
-// apiKey: process.env.OPENAI_KEY,
-// });
-// const openai = new OpenAIApi(configuration);
-// const response = await openai.createCompletion({
-// model: 'text-davinci-003',
-// max_tokens: 256,
-// temperature: 0.1,
-// prompt: `Replace the phrase ${selectedText} inside of ${fullText}.`,
-// });
-// return response.data.choices[0].text.trim();
-// } catch (err) {
-// console.log(err);
-// return 'Error connecting with API.';
-// }
-// };
-
export { gptAPICall, gptImageCall, GPTCallType };
diff --git a/src/client/util/DragManager.ts b/src/client/util/DragManager.ts
index 85101fcab..ac948c7c7 100644
--- a/src/client/util/DragManager.ts
+++ b/src/client/util/DragManager.ts
@@ -195,7 +195,7 @@ export namespace DragManager {
}
// drag a document and drop it (or make an embed/copy on drop)
- export function StartDocumentDrag(eles: HTMLElement[], dragData: DocumentDragData, downX: number, downY: number, options?: DragOptions, dropEvent?: () => any) {
+ export function StartDocumentDrag(eles: HTMLElement[], dragData: DocumentDragData, downX: number, downY: number, options?: DragOptions, onDropCompleted?: (e?: DragCompleteEvent) => any) {
const addAudioTag = (dropDoc: any) => {
dropDoc && !dropDoc.author_date && (dropDoc.author_date = new DateField());
dropDoc instanceof Doc && DocUtils.MakeLinkToActiveAudio(() => dropDoc);
@@ -203,7 +203,7 @@ export namespace DragManager {
};
const finishDrag = async (e: DragCompleteEvent) => {
const docDragData = e.docDragData;
- dropEvent?.(); // glr: optional additional function to be called - in this case with presentation trails
+ onDropCompleted?.(e); // glr: optional additional function to be called - in this case with presentation trails
if (docDragData && !docDragData.droppedDocuments.length) {
docDragData.dropAction = dragData.userDropAction || dragData.dropAction;
docDragData.droppedDocuments = (
diff --git a/src/client/views/collections/TabDocView.tsx b/src/client/views/collections/TabDocView.tsx
index 67b7b39dd..1ff5688f9 100644
--- a/src/client/views/collections/TabDocView.tsx
+++ b/src/client/views/collections/TabDocView.tsx
@@ -137,7 +137,11 @@ export class TabDocView extends React.Component<TabDocViewProps> {
setupMoveUpEvents(
this,
e,
- e => !e.defaultPrevented && DragManager.StartDocumentDrag([iconWrap], new DragManager.DocumentDragData([doc], doc.dropAction as dropActionType), e.clientX, e.clientY),
+ e =>
+ !e.defaultPrevented &&
+ DragManager.StartDocumentDrag([iconWrap], new DragManager.DocumentDragData([doc], doc.dropAction as dropActionType), e.clientX, e.clientY, undefined, () => {
+ CollectionDockingView.CloseSplit(doc);
+ }),
returnFalse,
action(e => {
if (this.view) {
diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinkView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinkView.tsx
index db000d5de..747ab9249 100644
--- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinkView.tsx
+++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormLinkView.tsx
@@ -238,11 +238,11 @@ export class CollectionFreeFormLinkView extends React.Component<CollectionFreeFo
textX,
textY,
// fully connected
- // pt1,
- // pt2,
+ pt1,
+ pt2,
// this code adds space between links
- pt1: [pt1[0] + pt1normalized[0] * 13, pt1[1] + pt1normalized[1] * 13],
- pt2: [pt2[0] + pt2normalized[0] * 13, pt2[1] + pt2normalized[1] * 13],
+ // pt1: [pt1[0] + pt1normalized[0] * 13, pt1[1] + pt1normalized[1] * 13],
+ // pt2: [pt2[0] + pt2normalized[0] * 13, pt2[1] + pt2normalized[1] * 13],
};
}
diff --git a/src/client/views/global/globalScripts.ts b/src/client/views/global/globalScripts.ts
index b906065a0..2ea8a7846 100644
--- a/src/client/views/global/globalScripts.ts
+++ b/src/client/views/global/globalScripts.ts
@@ -1,26 +1,28 @@
-import { Colors } from "browndash-components";
-import { runInAction, action } from "mobx";
-import { aggregateBounds } from "../../../Utils";
-import { Doc } from "../../../fields/Doc";
-import { Width, Height } from "../../../fields/DocSymbols";
-import { InkTool } from "../../../fields/InkField";
-import { Cast, StrCast, NumCast, BoolCast } from "../../../fields/Types";
-import { WebField } from "../../../fields/URLField";
-import { GestureUtils } from "../../../pen-gestures/GestureUtils";
-import { LinkManager } from "../../util/LinkManager";
-import { ScriptingGlobals } from "../../util/ScriptingGlobals";
-import { SelectionManager } from "../../util/SelectionManager";
-import { UndoManager } from "../../util/UndoManager";
-import { GestureOverlay } from "../GestureOverlay";
-import { InkTranscription } from "../InkTranscription";
-import { ActiveFillColor, SetActiveFillColor, ActiveIsInkMask, SetActiveIsInkMask, ActiveInkWidth, SetActiveInkWidth, ActiveInkColor, SetActiveInkColor } from "../InkingStroke";
-import { CollectionFreeFormView } from "../collections/collectionFreeForm";
-import { CollectionFreeFormDocumentView } from "../nodes/CollectionFreeFormDocumentView";
-import { WebBox } from "../nodes/WebBox";
-import { RichTextMenu } from "../nodes/formattedText/RichTextMenu";
-import { DocumentType } from "../../documents/DocumentTypes";
+import { Colors } from 'browndash-components';
+import { runInAction, action } from 'mobx';
+import { aggregateBounds } from '../../../Utils';
+import { Doc } from '../../../fields/Doc';
+import { Width, Height } from '../../../fields/DocSymbols';
+import { InkTool } from '../../../fields/InkField';
+import { Cast, StrCast, NumCast, BoolCast } from '../../../fields/Types';
+import { WebField } from '../../../fields/URLField';
+import { GestureUtils } from '../../../pen-gestures/GestureUtils';
+import { LinkManager } from '../../util/LinkManager';
+import { ScriptingGlobals } from '../../util/ScriptingGlobals';
+import { SelectionManager } from '../../util/SelectionManager';
+import { UndoManager } from '../../util/UndoManager';
+import { GestureOverlay } from '../GestureOverlay';
+import { InkTranscription } from '../InkTranscription';
+import { ActiveFillColor, SetActiveFillColor, ActiveIsInkMask, SetActiveIsInkMask, ActiveInkWidth, SetActiveInkWidth, ActiveInkColor, SetActiveInkColor } from '../InkingStroke';
+import { CollectionFreeFormView } from '../collections/collectionFreeForm';
+import { CollectionFreeFormDocumentView } from '../nodes/CollectionFreeFormDocumentView';
+import { WebBox } from '../nodes/WebBox';
+import { RichTextMenu } from '../nodes/formattedText/RichTextMenu';
+import { DocumentType } from '../../documents/DocumentTypes';
-ScriptingGlobals.add(function IsNoneSelected() { return SelectionManager.Views().length <= 0; }, "are no document selected");
+ScriptingGlobals.add(function IsNoneSelected() {
+ return SelectionManager.Views().length <= 0;
+}, 'are no document selected');
// toggle: Set overlay status of selected document
ScriptingGlobals.add(function setView(view: string) {
@@ -52,7 +54,7 @@ ScriptingGlobals.add(function setBackgroundColor(color?: string, checkResult?: b
if (contentFrameNumber !== undefined) {
CollectionFreeFormDocumentView.setStringValues(contentFrameNumber, dv.rootDoc, { fieldKey: color });
} else {
- console.log('setting color to: ', color)
+ console.log('setting color to: ', color);
dv.rootDoc['_' + fieldKey] = color;
}
});
@@ -119,7 +121,7 @@ ScriptingGlobals.add(function showFreeform(attr: 'flashcards' | 'grid' | 'snapli
]);
if (checkResult) {
- console.log(attr, map.get(attr)?.checkResult(selected))
+ console.log(attr, map.get(attr)?.checkResult(selected));
return map.get(attr)?.checkResult(selected);
}
const batch = map.get(attr)?.waitForRender ? UndoManager.StartBatch('set freeform attribute') : { end: () => {} };
diff --git a/src/client/views/nodes/WebBox.tsx b/src/client/views/nodes/WebBox.tsx
index 34a1229ba..5cdd6b5f2 100644
--- a/src/client/views/nodes/WebBox.tsx
+++ b/src/client/views/nodes/WebBox.tsx
@@ -354,6 +354,11 @@ export class WebBox extends ViewBoxAnnotatableComponent<ViewBoxAnnotatableProps
AnchorMenu.Instance.jumpTo(e.clientX * scale + mainContBounds.translateX, e.clientY * scale + mainContBounds.translateY - NumCast(this.layoutDoc._layout_scrollTop) * scale);
// Changing which document to add the annotation to (the currently selected WebBox)
GPTPopup.Instance.setSidebarId(`${this.props.fieldKey}_${this._urlHash}_sidebar`);
+ const anchor = this._getAnchor(undefined, false);
+ if (anchor) {
+ console.log(anchor);
+ GPTPopup.Instance.setTargetAnchor(anchor);
+ }
GPTPopup.Instance.addDoc = this.sidebarAddDocument;
}
}
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index 212d24165..9f4483e8d 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -70,6 +70,7 @@ import { schema } from './schema_rts';
import { SummaryView } from './SummaryView';
import applyDevTools = require('prosemirror-dev-tools');
import React = require('react');
+import { GPTPopup, GPTPopupMode } from '../../pdf/GPTPopup/GPTPopup';
const translateGoogleApi = require('translate-google-api');
export const GoogleRef = 'googleDocId';
type PullHandler = (exportState: Opt<GoogleApiClientUtils.Docs.ImportResult>, dataDoc: Doc) => void;
@@ -896,12 +897,13 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
this._downX = this._downY = Number.NaN;
};
- animateRes = (resIndex: number) => {
- console.log(this.dataDoc.text);
- if (resIndex < this.gptRes.length) {
- this.dataDoc.text = (this.dataDoc.text as RichTextField)?.Text + this.gptRes[resIndex];
+ animateRes = (resIndex: number, newText: string) => {
+ if (resIndex < newText.length) {
+ const marks = this._editorView?.state.storedMarks ?? [];
+ // if (!marks) return;
+ this._editorView?.dispatch(this._editorView.state.tr.setStoredMarks(marks).insertText(newText[resIndex]).setStoredMarks(marks));
setTimeout(() => {
- this.animateRes(resIndex + 1);
+ this.animateRes(resIndex + 1, newText);
}, 20);
}
};
@@ -912,47 +914,68 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
// the._editorView.dispatch(state.tr.setSelection(updated).insertText('\n, to))
askGPT = action(async () => {
+ // const state = this._editorView?.state;
+ // if (!state) return;
+ // const to = state.selection.to;
+ // const updated = TextSelection.create(state.doc, to, to);
+ // this._editorView?.dispatch(state.tr.setSelection(updated).insertText('\n', to));
+ // this._editorView?.dispatch(this._editorView.state.tr.setStoredMarks(marks).insertText('\nTesting').setStoredMarks(marks));
+ // console.log('After ', this._editorView?.state.storedMarks);
try {
let res = await gptAPICall((this.dataDoc.text as RichTextField)?.Text, GPTCallType.COMPLETION);
- if (res) {
- this.gptRes = res;
- this.animateRes(0);
+ if (!res) {
+ console.error('GPT call failed');
+ this.animateRes(0, 'Something went wrong.');
+ } else {
+ this.animateRes(0, res);
}
} catch (err) {
- console.log(err);
- this.dataDoc.text = (this.dataDoc.text as RichTextField)?.Text + 'Something went wrong';
+ console.error('GPT call failed');
+ this.animateRes(0, 'Something went wrong.');
}
});
generateImage = async () => {
console.log('Generate image from text: ', (this.dataDoc.text as RichTextField)?.Text);
+ GPTPopup.Instance?.setImgTargetDoc(this.rootDoc);
+ GPTPopup.Instance.setImgUrls([]);
+ GPTPopup.Instance.setMode(GPTPopupMode.IMAGE);
+ GPTPopup.Instance.setVisible(true);
+ GPTPopup.Instance.addToCollection = this.props.addDocument;
+ GPTPopup.Instance.setLoading(true);
+
try {
- let image_url = await gptImageCall((this.dataDoc.text as RichTextField)?.Text);
- if (image_url) {
- const [result] = await Networking.PostToServer('/uploadRemoteImage', { sources: [image_url] });
+ // make this support multiple images
+ let image_urls = await gptImageCall((this.dataDoc.text as RichTextField)?.Text);
+ console.log(image_urls);
+ if (image_urls) {
+ const [result] = await Networking.PostToServer('/uploadRemoteImage', { sources: [image_urls[0]] });
const source = Utils.prepend(result.accessPaths.agnostic.client);
- const newDoc = Docs.Create.ImageDocument(source, {
- x: NumCast(this.rootDoc.x) + NumCast(this.layoutDoc._width) + 10,
- y: NumCast(this.rootDoc.y),
- _height: 200,
- _width: 200,
- data_nativeWidth: result.nativeWidth,
- data_nativeHeight: result.nativeHeight,
- });
- if (Doc.IsInMyOverlay(this.rootDoc)) {
- newDoc.overlayX = this.rootDoc.x;
- newDoc.overlayY = NumCast(this.rootDoc.y) + NumCast(this.rootDoc._height);
- Doc.AddToMyOverlay(newDoc);
- } else {
- this.props.addDocument?.(newDoc);
- }
- // Create link between prompt and image
- DocUtils.MakeLink(this.rootDoc, newDoc, { link_relationship: 'Image Prompt' });
+ GPTPopup.Instance.setImgUrls([source]);
+
+ // const newDoc = Docs.Create.ImageDocument(source, {
+ // x: NumCast(this.rootDoc.x) + NumCast(this.layoutDoc._width) + 10,
+ // y: NumCast(this.rootDoc.y),
+ // _height: 200,
+ // _width: 200,
+ // data_nativeWidth: result.nativeWidth,
+ // data_nativeHeight: result.nativeHeight,
+ // });
+ // if (Doc.IsInMyOverlay(this.rootDoc)) {
+ // newDoc.overlayX = this.rootDoc.x;
+ // newDoc.overlayY = NumCast(this.rootDoc.y) + NumCast(this.rootDoc._height);
+ // Doc.AddToMyOverlay(newDoc);
+ // } else {
+ // this.props.addDocument?.(newDoc);
+ // }
+ // // Create link between prompt and image
+ // DocUtils.MakeLink(this.rootDoc, newDoc, { link_relationship: 'Image Prompt' });
}
} catch (err) {
console.log(err);
return '';
}
+ GPTPopup.Instance.setLoading(false);
};
breakupDictation = () => {
@@ -1249,8 +1272,10 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
}
// Accessing editor and text doc for gpt assisted text edits
if (this._editorView && selected) {
- AnchorMenu.Instance?.setEditorView(this._editorView);
- AnchorMenu.Instance?.setTextDoc(this.dataDoc);
+ console.log('Setting');
+ GPTPopup.Instance?.setTextAnchor(this.getAnchor(false));
+ // AnchorMenu.Instance?.setEditorView(this._editorView);
+ // AnchorMenu.Instance?.setTextDoc(this.dataDoc);
}
}),
{ fireImmediately: true }
diff --git a/src/client/views/pdf/AnchorMenu.tsx b/src/client/views/pdf/AnchorMenu.tsx
index e6b9cb382..dd8cf7002 100644
--- a/src/client/views/pdf/AnchorMenu.tsx
+++ b/src/client/views/pdf/AnchorMenu.tsx
@@ -131,7 +131,7 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
gptSummarize = async (e: React.PointerEvent) => {
GPTPopup.Instance.setVisible(true);
this.setHighlightRange(undefined);
- this.setGPTMode(GPTPopupMode.SUMMARY);
+ GPTPopup.Instance.setMode(GPTPopupMode.SUMMARY);
GPTPopup.Instance.setLoading(true);
try {
@@ -183,6 +183,10 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
GPTPopup.Instance.setLoading(false);
};
+ gptImage = async () => {
+ console.log(this.GetAnchor(undefined, false));
+ };
+
/**
* Replaces text suggestions from GPT.
*/
@@ -293,21 +297,12 @@ export class AnchorMenu extends AntimodeMenu<AntimodeMenuProps> {
</button>
</Tooltip>
)}
- {/* <GPTPopup
- key="gptpopup"
- visible={this.showGPTPopup}
- text={this.GPTpopupText}
- highlightRange={this.highlightRange}
- loading={this.loadingGPT}
- callSummaryApi={this.gptSummarize}
- callEditApi={this.gptEdit}
- replaceText={this.replaceText}
- mode={this.GPTMode}
- /> */}
{AnchorMenu.Instance.OnAudio === unimplementedFunction ? null : (
<IconButton tooltip={'Click to Record Annotation'} onPointerDown={this.audioDown} icon={<FontAwesomeIcon icon="microphone" />} color={StrCast(Doc.UserDoc().userColor)} />
)}
- {this.canEdit() && <IconButton tooltip={'AI edit suggestions'} onPointerDown={this.gptEdit} icon={<FontAwesomeIcon icon="pencil-alt" />} color={StrCast(Doc.UserDoc().userColor)} />}
+ {/* Removed text editing for now, not quite ready */}
+ {/* {this.canEdit() && <IconButton tooltip={'AI edit suggestions'} onPointerDown={this.gptEdit} icon={<FontAwesomeIcon icon="pencil-alt" />} color={StrCast(Doc.UserDoc().userColor)} />} */}
+ {<IconButton tooltip={'Generate DALL-E Image'} onPointerDown={this.gptImage} icon={<FontAwesomeIcon icon="image" />} color={StrCast(Doc.UserDoc().userColor)} />}
<Popup tooltip="Find document to link to selected text" type={Type.PRIM} icon={<FontAwesomeIcon icon={'search'} />} popup={<LinkPopup key="popup" linkCreateAnchor={this.onMakeAnchor} />} color={StrCast(Doc.UserDoc().userColor)} />
{AnchorMenu.Instance.StartCropDrag === unimplementedFunction ? null : (
<IconButton tooltip={'Click/Drag to create cropped image'} onPointerDown={this.cropDown} icon={<FontAwesomeIcon icon="image" />} color={StrCast(Doc.UserDoc().userColor)} />
diff --git a/src/client/views/pdf/GPTPopup/GPTPopup.scss b/src/client/views/pdf/GPTPopup/GPTPopup.scss
index 2f0ff83e2..478b7d4ba 100644
--- a/src/client/views/pdf/GPTPopup/GPTPopup.scss
+++ b/src/client/views/pdf/GPTPopup/GPTPopup.scss
@@ -24,6 +24,7 @@ $highlightedText: #82e0ff;
.summary-heading {
display: flex;
+ justify-content: space-between;
align-items: center;
border-bottom: 1px solid $greyborder;
padding-bottom: 5px;
@@ -110,6 +111,57 @@ $highlightedText: #82e0ff;
}
}
+.image-content-wrapper {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 8px;
+ padding-bottom: 16px;
+
+ .img-wrapper {
+ position: relative;
+ cursor: pointer;
+
+ .img-container {
+ position: relative;
+
+ img {
+ position: relative;
+ }
+ }
+
+ .img-container::after {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.5);
+ opacity: 0;
+ transition: opacity 0.3s ease;
+ }
+
+ .btn-container {
+ position: absolute;
+ right: 8px;
+ bottom: 8px;
+ opacity: 0;
+ transition: opacity 0.3s ease;
+ }
+
+ &:hover {
+ .img-container::after {
+ opacity: 1;
+ }
+
+ .btn-container {
+ opacity: 1;
+ }
+ }
+ }
+}
+
// Typist CSS
.Typist .Cursor {
display: inline-block;
diff --git a/src/client/views/pdf/GPTPopup/GPTPopup.tsx b/src/client/views/pdf/GPTPopup/GPTPopup.tsx
index 9f28cb5d1..aeee90d16 100644
--- a/src/client/views/pdf/GPTPopup/GPTPopup.tsx
+++ b/src/client/views/pdf/GPTPopup/GPTPopup.tsx
@@ -1,4 +1,5 @@
import React = require('react');
+import './GPTPopup.scss';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { action, observable } from 'mobx';
import { observer } from 'mobx-react';
@@ -6,13 +7,14 @@ import ReactLoading from 'react-loading';
import Typist from 'react-typist';
import { Doc } from '../../../../fields/Doc';
import { DocUtils, Docs } from '../../../documents/Documents';
-import './GPTPopup.scss';
-import { Button, IconButton } from 'browndash-components';
-import { StrCast } from '../../../../fields/Types';
+import { Button, IconButton, Type } from 'browndash-components';
+import { NumCast, StrCast } from '../../../../fields/Types';
+import { CgClose } from 'react-icons/cg';
export enum GPTPopupMode {
SUMMARY,
EDIT,
+ IMAGE,
}
interface GPTPopupProps {}
@@ -39,6 +41,14 @@ export class GPTPopup extends React.Component<GPTPopupProps> {
public setText = (text: string) => {
this.text = text;
};
+
+ @observable
+ public imageUrls: string[] = [];
+ @action
+ public setImgUrls = (imgs: string[]) => {
+ this.imageUrls = imgs;
+ };
+
@observable
public mode: GPTPopupMode = GPTPopupMode.SUMMARY;
@action
@@ -58,6 +68,8 @@ export class GPTPopup extends React.Component<GPTPopupProps> {
public setDone = (done: boolean) => {
this.done = done;
};
+
+ // change what can be a ref into a ref
@observable
private sidebarId: string = '';
@action
@@ -65,19 +77,30 @@ export class GPTPopup extends React.Component<GPTPopupProps> {
this.sidebarId = id;
};
- // reference
- // if (focusNode) {
- // const anchor = srcWeb?.ComponentView?.getAnchor?.(true);
- // anchor && DocUtils.MakeLink(htmlDoc, anchor, {});
- // }
+ // pdfs and webpages
+ @observable
+ private targetAnchor: Doc | undefined;
+ @action
+ public setTargetAnchor = (anchor: Doc) => {
+ this.targetAnchor = anchor;
+ };
+
@observable
- private pdfAnchor: Doc | undefined;
+ private imgTargetDoc: Doc | undefined;
@action
- public setPdfAnchor = (anchor: Doc) => {
- this.pdfAnchor = anchor;
+ public setImgTargetDoc = (anchor: Doc) => {
+ this.imgTargetDoc = anchor;
+ };
+
+ @observable
+ private textAnchor: Doc | undefined;
+ @action
+ public setTextAnchor = (anchor: Doc) => {
+ this.textAnchor = anchor;
};
public addDoc: (doc: Doc | Doc[], sidebarKey?: string | undefined) => boolean = () => false;
+ public addToCollection: ((doc: Doc | Doc[], annotationKey?: string | undefined) => boolean) | undefined;
/**
* Transfers the summarization text to a sidebar annotation text document.
@@ -90,13 +113,42 @@ export class GPTPopup extends React.Component<GPTPopupProps> {
_layout_autoHeight: true,
});
this.addDoc(newDoc, this.sidebarId);
- if (this.pdfAnchor) {
- DocUtils.MakeLink(newDoc, this.pdfAnchor, {
+ if (this.targetAnchor) {
+ DocUtils.MakeLink(newDoc, this.targetAnchor, {
link_relationship: 'GPT Summary',
});
}
};
+ /**
+ * Transfers the image urls to actual image docs
+ */
+ private transferToImage = (source: string) => {
+ console.log('Text Anchor', this.textAnchor);
+ console.log('Whole doc anchor', this.imgTargetDoc);
+ const textAnchor = this.textAnchor ?? this.imgTargetDoc;
+ if (!textAnchor) return;
+ const newDoc = Docs.Create.ImageDocument(source, {
+ x: NumCast(textAnchor.x) + NumCast(textAnchor._width) + 10,
+ y: NumCast(textAnchor.y),
+ _height: 200,
+ _width: 200,
+ data_nativeWidth: 1024,
+ data_nativeHeight: 1024,
+ });
+ if (Doc.IsInMyOverlay(textAnchor)) {
+ newDoc.overlayX = textAnchor.x;
+ newDoc.overlayY = NumCast(textAnchor.y) + NumCast(textAnchor._height);
+ Doc.AddToMyOverlay(newDoc);
+ } else {
+ this.addToCollection?.(newDoc);
+ }
+ // Create link between prompt and image
+ DocUtils.MakeLink(textAnchor, newDoc, { link_relationship: 'Image Prompt' });
+ };
+
+ private getPreviewUrl = (source: string) => source.split('.').join('_m.');
+
constructor(props: GPTPopupProps) {
super(props);
GPTPopup.Instance = this;
@@ -108,6 +160,26 @@ export class GPTPopup extends React.Component<GPTPopupProps> {
}
};
+ imageBox = () => {
+ return (
+ <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>
+ {this.heading('GENERATED IMAGE')}
+ <div className="image-content-wrapper">
+ {this.imageUrls.map(rawSrc => (
+ <div className="img-wrapper">
+ <div className="img-container">
+ <img key={rawSrc} src={this.getPreviewUrl(rawSrc)} width={150} height={150} alt="dalle generation" />
+ </div>
+ <div className="btn-container">
+ <Button text="Save Image" onClick={() => this.transferToImage(rawSrc)} color={StrCast(Doc.UserDoc().userColor)} type={Type.TERT} />
+ </div>
+ </div>
+ ))}
+ </div>
+ </div>
+ );
+ };
+
summaryBox = () => (
<>
<div>
@@ -135,30 +207,21 @@ export class GPTPopup extends React.Component<GPTPopupProps> {
<div className="btns-wrapper">
{this.done ? (
<>
- {/* <button className="icon-btn" onClick={this.callSummaryApi}>
- <FontAwesomeIcon icon="redo-alt" size="lg" />
- </button>
- <button
- className="text-btn"
- onClick={e => {
- this.transferToText();
- }}>
- Transfer to Text
- </button> */}
- <IconButton onClick={this.callSummaryApi} icon={<FontAwesomeIcon icon="redo-alt" size="lg" />} color={StrCast(Doc.UserDoc().userVariantColor)} />
- <Button text="Transfer To Text" onClick={this.transferToText} color={StrCast(Doc.UserDoc().userVariantColor)} />
+ <IconButton tooltip="Generate Again" onClick={this.callSummaryApi} icon={<FontAwesomeIcon icon="redo-alt" size="lg" />} color={StrCast(Doc.UserDoc().userVariantColor)} />
+ <Button tooltip="Transfer to text" text="Transfer To Text" onClick={this.transferToText} color={StrCast(Doc.UserDoc().userVariantColor)} type={Type.TERT} />
</>
) : (
<div className="summarizing">
<span>Summarizing</span>
<ReactLoading type="bubbles" color="#bcbcbc" width={20} height={20} />
- <button
- className="btn-secondary"
- onClick={e => {
+ <Button
+ text="Stop Animation"
+ onClick={() => {
this.setDone(true);
- }}>
- Stop Animation
- </button>
+ }}
+ color={StrCast(Doc.UserDoc().userVariantColor)}
+ type={Type.TERT}
+ />
</div>
)}
</div>
@@ -216,14 +279,14 @@ export class GPTPopup extends React.Component<GPTPopupProps> {
heading = (headingText: string) => (
<div className="summary-heading">
<label className="summary-text">{headingText}</label>
- {this.loading && <ReactLoading type="spin" color="#bcbcbc" width={14} height={14} />}
+ {this.loading ? <ReactLoading type="spin" color="#bcbcbc" width={14} height={14} /> : <IconButton color={StrCast(Doc.UserDoc().userColor)} tooltip="close" icon={<CgClose size="16px" />} onClick={() => this.setVisible(false)} />}
</div>
);
render() {
return (
<div className="summary-box" style={{ display: this.visible ? 'flex' : 'none' }}>
- {this.mode === GPTPopupMode.SUMMARY ? this.summaryBox() : this.editBox()}
+ {this.mode === GPTPopupMode.SUMMARY ? this.summaryBox() : this.mode === GPTPopupMode.IMAGE ? this.imageBox() : this.editBox()}
</div>
);
}
diff --git a/src/client/views/pdf/PDFViewer.tsx b/src/client/views/pdf/PDFViewer.tsx
index 4fc31ffe3..1d1c34f4f 100644
--- a/src/client/views/pdf/PDFViewer.tsx
+++ b/src/client/views/pdf/PDFViewer.tsx
@@ -425,8 +425,7 @@ export class PDFViewer extends React.Component<IViewerProps> {
GPTPopup.Instance.setSidebarId('data_sidebar');
const anchor = this._getAnchor(undefined, false);
if (anchor) {
- console.log(anchor);
- GPTPopup.Instance.setPdfAnchor(anchor);
+ GPTPopup.Instance.setTargetAnchor(anchor);
}
GPTPopup.Instance.addDoc = this.props.sidebarAddDoc;
};