├── 1_hello_world ├── .gitignore ├── README.md ├── package.json ├── src │ └── index.ts ├── style │ └── index.css └── tsconfig.json ├── 2_commands_and_menus ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── src │ └── index.ts ├── style │ └── index.css ├── tsconfig.json └── yarn.lock ├── 3a_widgets ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── src │ └── index.ts ├── style │ └── index.css ├── tsconfig.json └── yarn.lock ├── 3b_datagrid ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── src │ └── index.ts ├── style │ └── index.css ├── tsconfig.json └── yarn.lock ├── 4a_kernel_output ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── src │ ├── index.ts │ └── panel.ts ├── style │ └── index.css ├── tsconfig.json └── yarn.lock ├── 4b_jupyterwidgets ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── src │ ├── index.ts │ └── panel.ts ├── style │ └── index.css ├── tsconfig.json └── yarn.lock ├── 5_signals_and_buttons ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── src │ ├── index.ts │ ├── panel.ts │ └── widget.tsx ├── style │ └── index.css ├── tsconfig.json └── yarn.lock ├── 6_kernel_messaging ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── src │ ├── index.ts │ ├── model.ts │ ├── panel.ts │ └── widget.tsx ├── style │ └── index.css ├── tsconfig.json └── yarn.lock ├── 7_serving_files ├── serving_files_labextension │ ├── README.md │ ├── package-lock.json │ ├── package.json │ ├── src │ │ └── index.ts │ ├── style │ │ └── index.css │ └── tsconfig.json ├── serving_files_nbserverextension │ └── __init__.py └── setup.py ├── LICENSE ├── README.md └── images ├── button_null.png ├── button_with_signal.png ├── command_registry.png ├── custom_tab.png ├── datagrid.png ├── kernel_extension.gif ├── new_command.png ├── new_menu.png ├── outputarea.gif └── qgrid_widget.gif /1_hello_world/.gitignore: -------------------------------------------------------------------------------- 1 | *.bundle.* 2 | lib/ 3 | node_modules/ 4 | *.egg-info/ 5 | .ipynb_checkpoints 6 | -------------------------------------------------------------------------------- /1_hello_world/README.md: -------------------------------------------------------------------------------- 1 | # 1_hello_world 2 | 3 | Minimal lab extension that prints to the console 4 | 5 | ## Prerequisites 6 | 7 | * JupyterLab 8 | 9 | ## Installation 10 | 11 | ```bash 12 | jupyter labextension install 1_hello_world 13 | ``` 14 | 15 | ## Development 16 | 17 | For a development install (requires npm version 4 or later), do the following in the repository directory: 18 | 19 | ```bash 20 | npm install 21 | npm run build 22 | jupyter labextension link . 23 | ``` 24 | 25 | To rebuild the package and the JupyterLab app: 26 | 27 | ```bash 28 | npm run build 29 | jupyter lab build 30 | ``` 31 | 32 | -------------------------------------------------------------------------------- /1_hello_world/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "1_hello_world", 3 | "version": "0.1.0", 4 | "description": "minimal lab example", 5 | "keywords": [ 6 | "jupyter", 7 | "jupyterlab", 8 | "jupyterlab-extension" 9 | ], 10 | "homepage": "https://github.com/my_name/jupyterlab_myextension", 11 | "bugs": { 12 | "url": "https://github.com/my_name/jupyterlab_myextension/issues" 13 | }, 14 | "license": "BSD-3-Clause", 15 | "author": "tuto", 16 | "files": [ 17 | "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", 18 | "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}" 19 | ], 20 | "main": "lib/index.js", 21 | "types": "lib/index.d.ts", 22 | "repository": { 23 | "type": "git", 24 | "url": "https://github.com/my_name/jupyterlab_myextension.git" 25 | }, 26 | "scripts": { 27 | "build": "tsc", 28 | "clean": "rimraf lib", 29 | "watch": "tsc -w" 30 | }, 31 | "dependencies": { 32 | "@jupyterlab/application": "^0.16.0" 33 | }, 34 | "devDependencies": { 35 | "rimraf": "^2.6.1", 36 | "typescript": "~2.6.0" 37 | }, 38 | "jupyterlab": { 39 | "extension": true 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /1_hello_world/src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | JupyterLab, JupyterLabPlugin 3 | } from '@jupyterlab/application'; 4 | 5 | import '../style/index.css'; 6 | 7 | 8 | /** 9 | * Initialization data for the 1_hello_world extension. 10 | */ 11 | const extension: JupyterLabPlugin = { 12 | id: '1_hello_world', 13 | autoStart: true, 14 | activate: (app: JupyterLab) => { 15 | console.log('the JupyterLab main application:'); 16 | console.log(app); 17 | } 18 | }; 19 | 20 | export default extension; 21 | -------------------------------------------------------------------------------- /1_hello_world/style/index.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMesch/labextension_tutorial/fb854165fab8b16e70b22f05e32aa7e30df53c5a/1_hello_world/style/index.css -------------------------------------------------------------------------------- /1_hello_world/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "noImplicitAny": true, 5 | "noEmitOnError": true, 6 | "noUnusedLocals": true, 7 | "module": "commonjs", 8 | "moduleResolution": "node", 9 | "target": "ES5", 10 | "outDir": "./lib", 11 | "lib": ["ES5", "ES2015.Promise", "DOM"], 12 | "types": [] 13 | }, 14 | "include": ["src/*"] 15 | } 16 | -------------------------------------------------------------------------------- /2_commands_and_menus/.gitignore: -------------------------------------------------------------------------------- 1 | *.bundle.* 2 | lib/ 3 | node_modules/ 4 | *.egg-info/ 5 | .ipynb_checkpoints 6 | -------------------------------------------------------------------------------- /2_commands_and_menus/README.md: -------------------------------------------------------------------------------- 1 | # 2_commands_and_menus 2 | 3 | minimal lab example 4 | 5 | 6 | ## Prerequisites 7 | 8 | * JupyterLab 9 | 10 | ## Installation 11 | 12 | ```bash 13 | jupyter labextension install extension1 14 | ``` 15 | 16 | ## Development 17 | 18 | For a development install (requires npm version 4 or later), do the following in the repository directory: 19 | 20 | ```bash 21 | npm install 22 | npm run build 23 | jupyter labextension link . 24 | ``` 25 | 26 | To rebuild the package and the JupyterLab app: 27 | 28 | ```bash 29 | npm run build 30 | jupyter lab build 31 | ``` 32 | 33 | -------------------------------------------------------------------------------- /2_commands_and_menus/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "2_commands_and_menus", 3 | "version": "0.1.0", 4 | "description": "minimal lab example", 5 | "keywords": [ 6 | "jupyter", 7 | "jupyterlab", 8 | "jupyterlab-extension" 9 | ], 10 | "homepage": "https://github.com/my_name/jupyterlab_myextension", 11 | "bugs": { 12 | "url": "https://github.com/my_name/jupyterlab_myextension/issues" 13 | }, 14 | "license": "BSD-3-Clause", 15 | "author": "tuto", 16 | "files": [ 17 | "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", 18 | "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}" 19 | ], 20 | "main": "lib/index.js", 21 | "types": "lib/index.d.ts", 22 | "repository": { 23 | "type": "git", 24 | "url": "https://github.com/my_name/jupyterlab_myextension.git" 25 | }, 26 | "scripts": { 27 | "build": "tsc", 28 | "clean": "rimraf lib", 29 | "watch": "tsc -w" 30 | }, 31 | "dependencies": { 32 | "@jupyterlab/application": "^0.16.0", 33 | "@jupyterlab/mainmenu": "*" 34 | }, 35 | "devDependencies": { 36 | "rimraf": "^2.6.1", 37 | "typescript": "~2.6.0" 38 | }, 39 | "jupyterlab": { 40 | "extension": true 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /2_commands_and_menus/src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | JupyterLab, JupyterLabPlugin 3 | } from '@jupyterlab/application'; 4 | 5 | import '../style/index.css'; 6 | 7 | import { 8 | IMainMenu 9 | } from '@jupyterlab/mainmenu'; 10 | 11 | import { 12 | Menu 13 | } from '@phosphor/widgets'; 14 | 15 | import { 16 | ICommandPalette 17 | } from '@jupyterlab/apputils'; 18 | 19 | /** 20 | * Initialization data for the extension1 extension. 21 | */ 22 | const extension: JupyterLabPlugin = { 23 | id: '2_commands_and_menus', 24 | autoStart: true, 25 | requires: [ICommandPalette, IMainMenu], 26 | activate: ( 27 | app: JupyterLab, 28 | palette: ICommandPalette, 29 | mainMenu: IMainMenu) => 30 | { 31 | const { commands } = app; 32 | let command = 'ex2:tutorial'; 33 | let category = 'Tutorial'; 34 | commands.addCommand(command, { 35 | label: 'ex2:tutorial', 36 | caption: 'Open the Labtutorial', 37 | execute: (args) => {console.log('Hey')}}); 38 | palette.addItem({command, category}); 39 | 40 | 41 | let tutorialMenu: Menu = new Menu({commands}); 42 | 43 | tutorialMenu.title.label = 'Tutorial'; 44 | mainMenu.addMenu(tutorialMenu, {rank: 80}); 45 | tutorialMenu.addItem({ command }); 46 | } 47 | }; 48 | 49 | export default extension; 50 | -------------------------------------------------------------------------------- /2_commands_and_menus/style/index.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMesch/labextension_tutorial/fb854165fab8b16e70b22f05e32aa7e30df53c5a/2_commands_and_menus/style/index.css -------------------------------------------------------------------------------- /2_commands_and_menus/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "noImplicitAny": true, 5 | "noEmitOnError": true, 6 | "noUnusedLocals": true, 7 | "module": "commonjs", 8 | "moduleResolution": "node", 9 | "target": "ES6", 10 | "outDir": "./lib", 11 | "lib": ["ES6", "ES2015.Promise", "DOM"], 12 | "types": [] 13 | }, 14 | "include": ["src/*"] 15 | } 16 | -------------------------------------------------------------------------------- /2_commands_and_menus/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@jupyterlab/application@^0.16.0": 6 | version "0.16.3" 7 | resolved "https://registry.yarnpkg.com/@jupyterlab/application/-/application-0.16.3.tgz#e72ffe71d823525f4411e035d66bc7f202e5bb76" 8 | dependencies: 9 | "@jupyterlab/apputils" "^0.16.4" 10 | "@jupyterlab/coreutils" "^1.1.3" 11 | "@jupyterlab/docregistry" "^0.16.3" 12 | "@jupyterlab/rendermime" "^0.16.3" 13 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 14 | "@jupyterlab/services" "^2.0.3" 15 | "@phosphor/algorithm" "^1.1.2" 16 | "@phosphor/application" "^1.5.0" 17 | "@phosphor/commands" "^1.4.0" 18 | "@phosphor/coreutils" "^1.3.0" 19 | "@phosphor/disposable" "^1.1.2" 20 | "@phosphor/messaging" "^1.2.2" 21 | "@phosphor/properties" "^1.1.2" 22 | "@phosphor/signaling" "^1.2.2" 23 | "@phosphor/widgets" "^1.5.0" 24 | 25 | "@jupyterlab/apputils@^0.16.4": 26 | version "0.16.4" 27 | resolved "https://registry.yarnpkg.com/@jupyterlab/apputils/-/apputils-0.16.4.tgz#e4a1c143d3b085a921ae36f8bad339bbdbeb35fa" 28 | dependencies: 29 | "@jupyterlab/coreutils" "^1.1.3" 30 | "@jupyterlab/services" "^2.0.3" 31 | "@phosphor/algorithm" "^1.1.2" 32 | "@phosphor/commands" "^1.4.0" 33 | "@phosphor/coreutils" "^1.3.0" 34 | "@phosphor/disposable" "^1.1.2" 35 | "@phosphor/domutils" "^1.1.2" 36 | "@phosphor/messaging" "^1.2.2" 37 | "@phosphor/properties" "^1.1.2" 38 | "@phosphor/signaling" "^1.2.2" 39 | "@phosphor/virtualdom" "^1.1.2" 40 | "@phosphor/widgets" "^1.5.0" 41 | "@types/react" "~16.0.19" 42 | react "~16.2.0" 43 | react-dom "~16.2.0" 44 | sanitize-html "~1.14.3" 45 | 46 | "@jupyterlab/codeeditor@^0.16.2": 47 | version "0.16.2" 48 | resolved "https://registry.yarnpkg.com/@jupyterlab/codeeditor/-/codeeditor-0.16.2.tgz#16d436975dc9f5940b07f0d81dc2da3348276c84" 49 | dependencies: 50 | "@jupyterlab/coreutils" "^1.1.3" 51 | "@jupyterlab/observables" "^1.0.10" 52 | "@phosphor/coreutils" "^1.3.0" 53 | "@phosphor/disposable" "^1.1.2" 54 | "@phosphor/messaging" "^1.2.2" 55 | "@phosphor/signaling" "^1.2.2" 56 | "@phosphor/widgets" "^1.5.0" 57 | react "~16.2.0" 58 | react-dom "~16.2.0" 59 | 60 | "@jupyterlab/codemirror@^0.16.3": 61 | version "0.16.3" 62 | resolved "https://registry.yarnpkg.com/@jupyterlab/codemirror/-/codemirror-0.16.3.tgz#50a05d4663478b8b41587c7bea7c8c9b2431e2c7" 63 | dependencies: 64 | "@jupyterlab/apputils" "^0.16.4" 65 | "@jupyterlab/codeeditor" "^0.16.2" 66 | "@jupyterlab/coreutils" "^1.1.3" 67 | "@jupyterlab/observables" "^1.0.10" 68 | "@phosphor/algorithm" "^1.1.2" 69 | "@phosphor/coreutils" "^1.3.0" 70 | "@phosphor/disposable" "^1.1.2" 71 | "@phosphor/signaling" "^1.2.2" 72 | codemirror "~5.35.0" 73 | 74 | "@jupyterlab/coreutils@^1.1.3": 75 | version "1.1.3" 76 | resolved "https://registry.yarnpkg.com/@jupyterlab/coreutils/-/coreutils-1.1.3.tgz#079ff19faeaffcb6cb243c3fb0c737f6ea661b5a" 77 | dependencies: 78 | "@phosphor/algorithm" "^1.1.2" 79 | "@phosphor/coreutils" "^1.3.0" 80 | "@phosphor/disposable" "^1.1.2" 81 | "@phosphor/signaling" "^1.2.2" 82 | ajv "~5.1.6" 83 | comment-json "^1.1.3" 84 | minimist "~1.2.0" 85 | moment "~2.21.0" 86 | path-posix "~1.0.0" 87 | url-parse "~1.1.9" 88 | 89 | "@jupyterlab/docregistry@^0.16.3": 90 | version "0.16.3" 91 | resolved "https://registry.yarnpkg.com/@jupyterlab/docregistry/-/docregistry-0.16.3.tgz#f6f9b0df65724cc3fecc9e62bf8e1b4c92b6639f" 92 | dependencies: 93 | "@jupyterlab/apputils" "^0.16.4" 94 | "@jupyterlab/codeeditor" "^0.16.2" 95 | "@jupyterlab/codemirror" "^0.16.3" 96 | "@jupyterlab/coreutils" "^1.1.3" 97 | "@jupyterlab/observables" "^1.0.10" 98 | "@jupyterlab/rendermime" "^0.16.3" 99 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 100 | "@jupyterlab/services" "^2.0.3" 101 | "@phosphor/algorithm" "^1.1.2" 102 | "@phosphor/coreutils" "^1.3.0" 103 | "@phosphor/disposable" "^1.1.2" 104 | "@phosphor/messaging" "^1.2.2" 105 | "@phosphor/signaling" "^1.2.2" 106 | "@phosphor/widgets" "^1.5.0" 107 | 108 | "@jupyterlab/observables@^1.0.10": 109 | version "1.0.10" 110 | resolved "https://registry.yarnpkg.com/@jupyterlab/observables/-/observables-1.0.10.tgz#dbc9da5988ebf3acc35effd24a1c598b13592fb5" 111 | dependencies: 112 | "@phosphor/algorithm" "^1.1.2" 113 | "@phosphor/coreutils" "^1.3.0" 114 | "@phosphor/disposable" "^1.1.2" 115 | "@phosphor/messaging" "^1.2.2" 116 | "@phosphor/signaling" "^1.2.2" 117 | 118 | "@jupyterlab/rendermime-interfaces@^1.0.10": 119 | version "1.0.10" 120 | resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-1.0.10.tgz#91c088a3e67edbd65a49b115845e0ba02b39c655" 121 | dependencies: 122 | "@phosphor/coreutils" "^1.3.0" 123 | "@phosphor/widgets" "^1.5.0" 124 | 125 | "@jupyterlab/rendermime@^0.16.3": 126 | version "0.16.3" 127 | resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime/-/rendermime-0.16.3.tgz#790949413358b6b148c48993747106c31de8de07" 128 | dependencies: 129 | "@jupyterlab/apputils" "^0.16.4" 130 | "@jupyterlab/codemirror" "^0.16.3" 131 | "@jupyterlab/coreutils" "^1.1.3" 132 | "@jupyterlab/observables" "^1.0.10" 133 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 134 | "@jupyterlab/services" "^2.0.3" 135 | "@phosphor/coreutils" "^1.3.0" 136 | "@phosphor/messaging" "^1.2.2" 137 | "@phosphor/signaling" "^1.2.2" 138 | "@phosphor/widgets" "^1.5.0" 139 | ansi_up "^3.0.0" 140 | marked "~0.3.9" 141 | 142 | "@jupyterlab/services@^2.0.3": 143 | version "2.0.3" 144 | resolved "https://registry.yarnpkg.com/@jupyterlab/services/-/services-2.0.3.tgz#376f06093b693e7d1037d01b5a542ec27a84a052" 145 | dependencies: 146 | "@jupyterlab/coreutils" "^1.1.3" 147 | "@jupyterlab/observables" "^1.0.10" 148 | "@phosphor/algorithm" "^1.1.2" 149 | "@phosphor/coreutils" "^1.3.0" 150 | "@phosphor/disposable" "^1.1.2" 151 | "@phosphor/signaling" "^1.2.2" 152 | node-fetch "~1.7.3" 153 | ws "~1.1.4" 154 | 155 | "@phosphor/algorithm@^1.1.2": 156 | version "1.1.2" 157 | resolved "https://registry.yarnpkg.com/@phosphor/algorithm/-/algorithm-1.1.2.tgz#fd1de9104c9a7f34e92864586ddf2e7f2e7779e8" 158 | 159 | "@phosphor/application@^1.5.0": 160 | version "1.6.0" 161 | resolved "https://registry.yarnpkg.com/@phosphor/application/-/application-1.6.0.tgz#e1f1bf300680f982881d222a77b24ba8589d3fa2" 162 | dependencies: 163 | "@phosphor/commands" "^1.5.0" 164 | "@phosphor/coreutils" "^1.3.0" 165 | "@phosphor/widgets" "^1.6.0" 166 | 167 | "@phosphor/collections@^1.1.2": 168 | version "1.1.2" 169 | resolved "https://registry.yarnpkg.com/@phosphor/collections/-/collections-1.1.2.tgz#c4c0b8b91129905fb36a9f243f2dbbde462dab8d" 170 | dependencies: 171 | "@phosphor/algorithm" "^1.1.2" 172 | 173 | "@phosphor/commands@^1.4.0", "@phosphor/commands@^1.5.0": 174 | version "1.5.0" 175 | resolved "https://registry.yarnpkg.com/@phosphor/commands/-/commands-1.5.0.tgz#68c137008e2d536828405fd4ebab43675d65d42b" 176 | dependencies: 177 | "@phosphor/algorithm" "^1.1.2" 178 | "@phosphor/coreutils" "^1.3.0" 179 | "@phosphor/disposable" "^1.1.2" 180 | "@phosphor/domutils" "^1.1.2" 181 | "@phosphor/keyboard" "^1.1.2" 182 | "@phosphor/signaling" "^1.2.2" 183 | 184 | "@phosphor/coreutils@^1.3.0": 185 | version "1.3.0" 186 | resolved "https://registry.yarnpkg.com/@phosphor/coreutils/-/coreutils-1.3.0.tgz#63292d381c012c5ab0d0196e83ced829b7e04a42" 187 | 188 | "@phosphor/disposable@^1.1.2": 189 | version "1.1.2" 190 | resolved "https://registry.yarnpkg.com/@phosphor/disposable/-/disposable-1.1.2.tgz#a192dd6a2e6c69d5d09d39ecf334dab93778060e" 191 | dependencies: 192 | "@phosphor/algorithm" "^1.1.2" 193 | 194 | "@phosphor/domutils@^1.1.2": 195 | version "1.1.2" 196 | resolved "https://registry.yarnpkg.com/@phosphor/domutils/-/domutils-1.1.2.tgz#e2efeb052f398c42b93b89e9bab26af15cc00514" 197 | 198 | "@phosphor/dragdrop@^1.3.0": 199 | version "1.3.0" 200 | resolved "https://registry.yarnpkg.com/@phosphor/dragdrop/-/dragdrop-1.3.0.tgz#7ce6ad39d6ca216d62a56f78104d02a77ae67307" 201 | dependencies: 202 | "@phosphor/coreutils" "^1.3.0" 203 | "@phosphor/disposable" "^1.1.2" 204 | 205 | "@phosphor/keyboard@^1.1.2": 206 | version "1.1.2" 207 | resolved "https://registry.yarnpkg.com/@phosphor/keyboard/-/keyboard-1.1.2.tgz#3e32234451764240a98e148034d5a8797422dd1f" 208 | 209 | "@phosphor/messaging@^1.2.2": 210 | version "1.2.2" 211 | resolved "https://registry.yarnpkg.com/@phosphor/messaging/-/messaging-1.2.2.tgz#7d896ddd3797b94a347708ded13da5783db75c14" 212 | dependencies: 213 | "@phosphor/algorithm" "^1.1.2" 214 | "@phosphor/collections" "^1.1.2" 215 | 216 | "@phosphor/properties@^1.1.2": 217 | version "1.1.2" 218 | resolved "https://registry.yarnpkg.com/@phosphor/properties/-/properties-1.1.2.tgz#78cc77eff452839da02255de48e814946cc09a28" 219 | 220 | "@phosphor/signaling@^1.2.2": 221 | version "1.2.2" 222 | resolved "https://registry.yarnpkg.com/@phosphor/signaling/-/signaling-1.2.2.tgz#3fcf97ca88e38bfb357fe8fe6bf7513347a514a9" 223 | dependencies: 224 | "@phosphor/algorithm" "^1.1.2" 225 | 226 | "@phosphor/virtualdom@^1.1.2": 227 | version "1.1.2" 228 | resolved "https://registry.yarnpkg.com/@phosphor/virtualdom/-/virtualdom-1.1.2.tgz#ce55c86eef31e5d0e26b1dc96ea32bd684458f41" 229 | dependencies: 230 | "@phosphor/algorithm" "^1.1.2" 231 | 232 | "@phosphor/widgets@^1.5.0", "@phosphor/widgets@^1.6.0": 233 | version "1.6.0" 234 | resolved "https://registry.yarnpkg.com/@phosphor/widgets/-/widgets-1.6.0.tgz#ebba8008b6b13247d03e73e5f3872c90d2c9c78f" 235 | dependencies: 236 | "@phosphor/algorithm" "^1.1.2" 237 | "@phosphor/commands" "^1.5.0" 238 | "@phosphor/coreutils" "^1.3.0" 239 | "@phosphor/disposable" "^1.1.2" 240 | "@phosphor/domutils" "^1.1.2" 241 | "@phosphor/dragdrop" "^1.3.0" 242 | "@phosphor/keyboard" "^1.1.2" 243 | "@phosphor/messaging" "^1.2.2" 244 | "@phosphor/properties" "^1.1.2" 245 | "@phosphor/signaling" "^1.2.2" 246 | "@phosphor/virtualdom" "^1.1.2" 247 | 248 | "@types/react@~16.0.19": 249 | version "16.0.41" 250 | resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.41.tgz#72146737f4d439dc95a53315de4bfb43ac8542ca" 251 | 252 | ajv@~5.1.6: 253 | version "5.1.6" 254 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.1.6.tgz#4b2f1a19dece93d57ac216037e3e9791c7dd1564" 255 | dependencies: 256 | co "^4.6.0" 257 | json-schema-traverse "^0.3.0" 258 | json-stable-stringify "^1.0.1" 259 | 260 | ansi_up@^3.0.0: 261 | version "3.0.0" 262 | resolved "https://registry.yarnpkg.com/ansi_up/-/ansi_up-3.0.0.tgz#27f45d8f457d9ceff59e4ea03c8e6f13c1a303e8" 263 | 264 | asap@~2.0.3: 265 | version "2.0.6" 266 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 267 | 268 | balanced-match@^1.0.0: 269 | version "1.0.0" 270 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 271 | 272 | brace-expansion@^1.1.7: 273 | version "1.1.11" 274 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 275 | dependencies: 276 | balanced-match "^1.0.0" 277 | concat-map "0.0.1" 278 | 279 | co@^4.6.0: 280 | version "4.6.0" 281 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 282 | 283 | codemirror@~5.35.0: 284 | version "5.35.0" 285 | resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.35.0.tgz#280653d495455bc66aa87e6284292b02775ba878" 286 | 287 | comment-json@^1.1.3: 288 | version "1.1.3" 289 | resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-1.1.3.tgz#6986c3330fee0c4c9e00c2398cd61afa5d8f239e" 290 | dependencies: 291 | json-parser "^1.0.0" 292 | 293 | concat-map@0.0.1: 294 | version "0.0.1" 295 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 296 | 297 | core-js@^1.0.0: 298 | version "1.2.7" 299 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" 300 | 301 | core-util-is@~1.0.0: 302 | version "1.0.2" 303 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 304 | 305 | dom-serializer@0: 306 | version "0.1.0" 307 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" 308 | dependencies: 309 | domelementtype "~1.1.1" 310 | entities "~1.1.1" 311 | 312 | domelementtype@1, domelementtype@^1.3.0: 313 | version "1.3.0" 314 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" 315 | 316 | domelementtype@~1.1.1: 317 | version "1.1.3" 318 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" 319 | 320 | domhandler@^2.3.0: 321 | version "2.4.2" 322 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" 323 | dependencies: 324 | domelementtype "1" 325 | 326 | domutils@^1.5.1: 327 | version "1.7.0" 328 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" 329 | dependencies: 330 | dom-serializer "0" 331 | domelementtype "1" 332 | 333 | encoding@^0.1.11: 334 | version "0.1.12" 335 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" 336 | dependencies: 337 | iconv-lite "~0.4.13" 338 | 339 | entities@^1.1.1, entities@~1.1.1: 340 | version "1.1.1" 341 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" 342 | 343 | esprima@^2.7.0: 344 | version "2.7.3" 345 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 346 | 347 | fbjs@^0.8.16: 348 | version "0.8.16" 349 | resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" 350 | dependencies: 351 | core-js "^1.0.0" 352 | isomorphic-fetch "^2.1.1" 353 | loose-envify "^1.0.0" 354 | object-assign "^4.1.0" 355 | promise "^7.1.1" 356 | setimmediate "^1.0.5" 357 | ua-parser-js "^0.7.9" 358 | 359 | fs.realpath@^1.0.0: 360 | version "1.0.0" 361 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 362 | 363 | glob@^7.0.5: 364 | version "7.1.2" 365 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 366 | dependencies: 367 | fs.realpath "^1.0.0" 368 | inflight "^1.0.4" 369 | inherits "2" 370 | minimatch "^3.0.4" 371 | once "^1.3.0" 372 | path-is-absolute "^1.0.0" 373 | 374 | htmlparser2@^3.9.0: 375 | version "3.9.2" 376 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" 377 | dependencies: 378 | domelementtype "^1.3.0" 379 | domhandler "^2.3.0" 380 | domutils "^1.5.1" 381 | entities "^1.1.1" 382 | inherits "^2.0.1" 383 | readable-stream "^2.0.2" 384 | 385 | iconv-lite@~0.4.13: 386 | version "0.4.23" 387 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" 388 | dependencies: 389 | safer-buffer ">= 2.1.2 < 3" 390 | 391 | inflight@^1.0.4: 392 | version "1.0.6" 393 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 394 | dependencies: 395 | once "^1.3.0" 396 | wrappy "1" 397 | 398 | inherits@2, inherits@^2.0.1, inherits@~2.0.3: 399 | version "2.0.3" 400 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 401 | 402 | is-stream@^1.0.1: 403 | version "1.1.0" 404 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 405 | 406 | isarray@~1.0.0: 407 | version "1.0.0" 408 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 409 | 410 | isomorphic-fetch@^2.1.1: 411 | version "2.2.1" 412 | resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" 413 | dependencies: 414 | node-fetch "^1.0.1" 415 | whatwg-fetch ">=0.10.0" 416 | 417 | js-tokens@^3.0.0: 418 | version "3.0.2" 419 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 420 | 421 | json-parser@^1.0.0: 422 | version "1.1.5" 423 | resolved "https://registry.yarnpkg.com/json-parser/-/json-parser-1.1.5.tgz#e62ec5261d1a6a5fc20e812a320740c6d9005677" 424 | dependencies: 425 | esprima "^2.7.0" 426 | 427 | json-schema-traverse@^0.3.0: 428 | version "0.3.1" 429 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 430 | 431 | json-stable-stringify@^1.0.1: 432 | version "1.0.1" 433 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 434 | dependencies: 435 | jsonify "~0.0.0" 436 | 437 | jsonify@~0.0.0: 438 | version "0.0.0" 439 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 440 | 441 | lodash.escaperegexp@^4.1.2: 442 | version "4.1.2" 443 | resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" 444 | 445 | loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: 446 | version "1.3.1" 447 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 448 | dependencies: 449 | js-tokens "^3.0.0" 450 | 451 | marked@~0.3.9: 452 | version "0.3.19" 453 | resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" 454 | 455 | minimatch@^3.0.4: 456 | version "3.0.4" 457 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 458 | dependencies: 459 | brace-expansion "^1.1.7" 460 | 461 | minimist@~1.2.0: 462 | version "1.2.0" 463 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 464 | 465 | moment@~2.21.0: 466 | version "2.21.0" 467 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" 468 | 469 | node-fetch@^1.0.1, node-fetch@~1.7.3: 470 | version "1.7.3" 471 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" 472 | dependencies: 473 | encoding "^0.1.11" 474 | is-stream "^1.0.1" 475 | 476 | object-assign@^4.1.0, object-assign@^4.1.1: 477 | version "4.1.1" 478 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 479 | 480 | once@^1.3.0: 481 | version "1.4.0" 482 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 483 | dependencies: 484 | wrappy "1" 485 | 486 | options@>=0.0.5: 487 | version "0.0.6" 488 | resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" 489 | 490 | path-is-absolute@^1.0.0: 491 | version "1.0.1" 492 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 493 | 494 | path-posix@~1.0.0: 495 | version "1.0.0" 496 | resolved "https://registry.yarnpkg.com/path-posix/-/path-posix-1.0.0.tgz#06b26113f56beab042545a23bfa88003ccac260f" 497 | 498 | process-nextick-args@~2.0.0: 499 | version "2.0.0" 500 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 501 | 502 | promise@^7.1.1: 503 | version "7.3.1" 504 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" 505 | dependencies: 506 | asap "~2.0.3" 507 | 508 | prop-types@^15.6.0: 509 | version "15.6.1" 510 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" 511 | dependencies: 512 | fbjs "^0.8.16" 513 | loose-envify "^1.3.1" 514 | object-assign "^4.1.1" 515 | 516 | querystringify@~1.0.0: 517 | version "1.0.0" 518 | resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" 519 | 520 | react-dom@~16.2.0: 521 | version "16.2.0" 522 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" 523 | dependencies: 524 | fbjs "^0.8.16" 525 | loose-envify "^1.1.0" 526 | object-assign "^4.1.1" 527 | prop-types "^15.6.0" 528 | 529 | react@~16.2.0: 530 | version "16.2.0" 531 | resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" 532 | dependencies: 533 | fbjs "^0.8.16" 534 | loose-envify "^1.1.0" 535 | object-assign "^4.1.1" 536 | prop-types "^15.6.0" 537 | 538 | readable-stream@^2.0.2: 539 | version "2.3.6" 540 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 541 | dependencies: 542 | core-util-is "~1.0.0" 543 | inherits "~2.0.3" 544 | isarray "~1.0.0" 545 | process-nextick-args "~2.0.0" 546 | safe-buffer "~5.1.1" 547 | string_decoder "~1.1.1" 548 | util-deprecate "~1.0.1" 549 | 550 | requires-port@1.0.x: 551 | version "1.0.0" 552 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 553 | 554 | rimraf@^2.6.1: 555 | version "2.6.2" 556 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 557 | dependencies: 558 | glob "^7.0.5" 559 | 560 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 561 | version "5.1.2" 562 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 563 | 564 | "safer-buffer@>= 2.1.2 < 3": 565 | version "2.1.2" 566 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 567 | 568 | sanitize-html@~1.14.3: 569 | version "1.14.3" 570 | resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.14.3.tgz#62afd7c2d44ffd604599121d49e25b934e7a5514" 571 | dependencies: 572 | htmlparser2 "^3.9.0" 573 | lodash.escaperegexp "^4.1.2" 574 | xtend "^4.0.0" 575 | 576 | setimmediate@^1.0.5: 577 | version "1.0.5" 578 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 579 | 580 | string_decoder@~1.1.1: 581 | version "1.1.1" 582 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 583 | dependencies: 584 | safe-buffer "~5.1.0" 585 | 586 | typescript@~2.6.0: 587 | version "2.6.2" 588 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" 589 | 590 | ua-parser-js@^0.7.9: 591 | version "0.7.18" 592 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" 593 | 594 | ultron@1.0.x: 595 | version "1.0.2" 596 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" 597 | 598 | url-parse@~1.1.9: 599 | version "1.1.9" 600 | resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.9.tgz#c67f1d775d51f0a18911dd7b3ffad27bb9e5bd19" 601 | dependencies: 602 | querystringify "~1.0.0" 603 | requires-port "1.0.x" 604 | 605 | util-deprecate@~1.0.1: 606 | version "1.0.2" 607 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 608 | 609 | whatwg-fetch@>=0.10.0: 610 | version "2.0.4" 611 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" 612 | 613 | wrappy@1: 614 | version "1.0.2" 615 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 616 | 617 | ws@~1.1.4: 618 | version "1.1.5" 619 | resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" 620 | dependencies: 621 | options ">=0.0.5" 622 | ultron "1.0.x" 623 | 624 | xtend@^4.0.0: 625 | version "4.0.1" 626 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 627 | -------------------------------------------------------------------------------- /3a_widgets/.gitignore: -------------------------------------------------------------------------------- 1 | *.bundle.* 2 | lib/ 3 | node_modules/ 4 | *.egg-info/ 5 | .ipynb_checkpoints 6 | -------------------------------------------------------------------------------- /3a_widgets/README.md: -------------------------------------------------------------------------------- 1 | # extension1 2 | 3 | minimal lab example 4 | 5 | 6 | ## Prerequisites 7 | 8 | * JupyterLab 9 | 10 | ## Installation 11 | 12 | ```bash 13 | jupyter labextension install extension1 14 | ``` 15 | 16 | ## Development 17 | 18 | For a development install (requires npm version 4 or later), do the following in the repository directory: 19 | 20 | ```bash 21 | npm install 22 | npm run build 23 | jupyter labextension link . 24 | ``` 25 | 26 | To rebuild the package and the JupyterLab app: 27 | 28 | ```bash 29 | npm run build 30 | jupyter lab build 31 | ``` 32 | 33 | -------------------------------------------------------------------------------- /3a_widgets/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "3a_widgets", 3 | "version": "0.1.0", 4 | "description": "minimal lab example", 5 | "keywords": [ 6 | "jupyter", 7 | "jupyterlab", 8 | "jupyterlab-extension" 9 | ], 10 | "homepage": "https://github.com/my_name/jupyterlab_myextension", 11 | "bugs": { 12 | "url": "https://github.com/my_name/jupyterlab_myextension/issues" 13 | }, 14 | "license": "BSD-3-Clause", 15 | "author": "tuto", 16 | "files": [ 17 | "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", 18 | "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}" 19 | ], 20 | "main": "lib/index.js", 21 | "types": "lib/index.d.ts", 22 | "repository": { 23 | "type": "git", 24 | "url": "https://github.com/my_name/jupyterlab_myextension.git" 25 | }, 26 | "scripts": { 27 | "build": "tsc", 28 | "clean": "rimraf lib", 29 | "watch": "tsc -w" 30 | }, 31 | "dependencies": { 32 | "@jupyterlab/application": "^0.16.0", 33 | "@jupyterlab/mainmenu": "*", 34 | "@phosphor/algorithm": "^1.1.2", 35 | "@phosphor/coreutils": "^1.3.0", 36 | "@phosphor/disposable": "^1.1.2" 37 | }, 38 | "devDependencies": { 39 | "rimraf": "^2.6.1", 40 | "typescript": "~2.6.0" 41 | }, 42 | "jupyterlab": { 43 | "extension": true 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /3a_widgets/src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | JupyterLab, JupyterLabPlugin 3 | } from '@jupyterlab/application'; 4 | 5 | import '../style/index.css'; 6 | 7 | import { 8 | IMainMenu 9 | } from '@jupyterlab/mainmenu'; 10 | 11 | import { 12 | Menu 13 | } from '@phosphor/widgets'; 14 | 15 | import { 16 | ICommandPalette 17 | } from '@jupyterlab/apputils'; 18 | 19 | import { 20 | Widget 21 | } from '@phosphor/widgets'; 22 | 23 | 24 | /** 25 | * Initialization data for the extension1 extension. 26 | */ 27 | const extension: JupyterLabPlugin = { 28 | id: '3a_widgets', 29 | autoStart: true, 30 | requires: [ICommandPalette, IMainMenu], 31 | activate: ( 32 | app: JupyterLab, 33 | palette: ICommandPalette, 34 | mainMenu: IMainMenu) => 35 | { 36 | const { commands, shell } = app; 37 | let command = 'ex3:labtutorial'; 38 | let category = 'Tutorial'; 39 | commands.addCommand(command, { 40 | label: 'Ex3 command', 41 | caption: 'Open the Labtutorial', 42 | execute: (args) => { 43 | const widget = new TutorialView(); 44 | shell.addToMainArea(widget); 45 | }}); 46 | palette.addItem({command, category}); 47 | 48 | let tutorialMenu: Menu = new Menu({commands}); 49 | 50 | tutorialMenu.title.label = 'Tutorial'; 51 | mainMenu.addMenu(tutorialMenu, {rank: 80}); 52 | tutorialMenu.addItem({ command }); 53 | } 54 | }; 55 | 56 | export default extension; 57 | 58 | 59 | class TutorialView extends Widget { 60 | constructor() { 61 | super(); 62 | this.addClass('jp-tutorial-view') 63 | this.id = 'tutorial' 64 | this.title.label = 'Tutorial View' 65 | this.title.closable = true; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /3a_widgets/style/index.css: -------------------------------------------------------------------------------- 1 | .jp-tutorial-view { 2 | background-color: AliceBlue; 3 | } 4 | -------------------------------------------------------------------------------- /3a_widgets/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "noImplicitAny": true, 5 | "noEmitOnError": true, 6 | "noUnusedLocals": true, 7 | "module": "commonjs", 8 | "moduleResolution": "node", 9 | "target": "ES6", 10 | "outDir": "./lib", 11 | "lib": ["ES6", "ES2015.Promise", "DOM"], 12 | "types": [] 13 | }, 14 | "include": ["src/*"] 15 | } 16 | -------------------------------------------------------------------------------- /3a_widgets/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@jupyterlab/application@^0.16.0": 6 | version "0.16.3" 7 | resolved "https://registry.yarnpkg.com/@jupyterlab/application/-/application-0.16.3.tgz#e72ffe71d823525f4411e035d66bc7f202e5bb76" 8 | dependencies: 9 | "@jupyterlab/apputils" "^0.16.4" 10 | "@jupyterlab/coreutils" "^1.1.3" 11 | "@jupyterlab/docregistry" "^0.16.3" 12 | "@jupyterlab/rendermime" "^0.16.3" 13 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 14 | "@jupyterlab/services" "^2.0.3" 15 | "@phosphor/algorithm" "^1.1.2" 16 | "@phosphor/application" "^1.5.0" 17 | "@phosphor/commands" "^1.4.0" 18 | "@phosphor/coreutils" "^1.3.0" 19 | "@phosphor/disposable" "^1.1.2" 20 | "@phosphor/messaging" "^1.2.2" 21 | "@phosphor/properties" "^1.1.2" 22 | "@phosphor/signaling" "^1.2.2" 23 | "@phosphor/widgets" "^1.5.0" 24 | 25 | "@jupyterlab/apputils@^0.16.4": 26 | version "0.16.4" 27 | resolved "https://registry.yarnpkg.com/@jupyterlab/apputils/-/apputils-0.16.4.tgz#e4a1c143d3b085a921ae36f8bad339bbdbeb35fa" 28 | dependencies: 29 | "@jupyterlab/coreutils" "^1.1.3" 30 | "@jupyterlab/services" "^2.0.3" 31 | "@phosphor/algorithm" "^1.1.2" 32 | "@phosphor/commands" "^1.4.0" 33 | "@phosphor/coreutils" "^1.3.0" 34 | "@phosphor/disposable" "^1.1.2" 35 | "@phosphor/domutils" "^1.1.2" 36 | "@phosphor/messaging" "^1.2.2" 37 | "@phosphor/properties" "^1.1.2" 38 | "@phosphor/signaling" "^1.2.2" 39 | "@phosphor/virtualdom" "^1.1.2" 40 | "@phosphor/widgets" "^1.5.0" 41 | "@types/react" "~16.0.19" 42 | react "~16.2.0" 43 | react-dom "~16.2.0" 44 | sanitize-html "~1.14.3" 45 | 46 | "@jupyterlab/codeeditor@^0.16.2": 47 | version "0.16.2" 48 | resolved "https://registry.yarnpkg.com/@jupyterlab/codeeditor/-/codeeditor-0.16.2.tgz#16d436975dc9f5940b07f0d81dc2da3348276c84" 49 | dependencies: 50 | "@jupyterlab/coreutils" "^1.1.3" 51 | "@jupyterlab/observables" "^1.0.10" 52 | "@phosphor/coreutils" "^1.3.0" 53 | "@phosphor/disposable" "^1.1.2" 54 | "@phosphor/messaging" "^1.2.2" 55 | "@phosphor/signaling" "^1.2.2" 56 | "@phosphor/widgets" "^1.5.0" 57 | react "~16.2.0" 58 | react-dom "~16.2.0" 59 | 60 | "@jupyterlab/codemirror@^0.16.3": 61 | version "0.16.3" 62 | resolved "https://registry.yarnpkg.com/@jupyterlab/codemirror/-/codemirror-0.16.3.tgz#50a05d4663478b8b41587c7bea7c8c9b2431e2c7" 63 | dependencies: 64 | "@jupyterlab/apputils" "^0.16.4" 65 | "@jupyterlab/codeeditor" "^0.16.2" 66 | "@jupyterlab/coreutils" "^1.1.3" 67 | "@jupyterlab/observables" "^1.0.10" 68 | "@phosphor/algorithm" "^1.1.2" 69 | "@phosphor/coreutils" "^1.3.0" 70 | "@phosphor/disposable" "^1.1.2" 71 | "@phosphor/signaling" "^1.2.2" 72 | codemirror "~5.35.0" 73 | 74 | "@jupyterlab/coreutils@^1.1.3": 75 | version "1.1.3" 76 | resolved "https://registry.yarnpkg.com/@jupyterlab/coreutils/-/coreutils-1.1.3.tgz#079ff19faeaffcb6cb243c3fb0c737f6ea661b5a" 77 | dependencies: 78 | "@phosphor/algorithm" "^1.1.2" 79 | "@phosphor/coreutils" "^1.3.0" 80 | "@phosphor/disposable" "^1.1.2" 81 | "@phosphor/signaling" "^1.2.2" 82 | ajv "~5.1.6" 83 | comment-json "^1.1.3" 84 | minimist "~1.2.0" 85 | moment "~2.21.0" 86 | path-posix "~1.0.0" 87 | url-parse "~1.1.9" 88 | 89 | "@jupyterlab/docregistry@^0.16.3": 90 | version "0.16.3" 91 | resolved "https://registry.yarnpkg.com/@jupyterlab/docregistry/-/docregistry-0.16.3.tgz#f6f9b0df65724cc3fecc9e62bf8e1b4c92b6639f" 92 | dependencies: 93 | "@jupyterlab/apputils" "^0.16.4" 94 | "@jupyterlab/codeeditor" "^0.16.2" 95 | "@jupyterlab/codemirror" "^0.16.3" 96 | "@jupyterlab/coreutils" "^1.1.3" 97 | "@jupyterlab/observables" "^1.0.10" 98 | "@jupyterlab/rendermime" "^0.16.3" 99 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 100 | "@jupyterlab/services" "^2.0.3" 101 | "@phosphor/algorithm" "^1.1.2" 102 | "@phosphor/coreutils" "^1.3.0" 103 | "@phosphor/disposable" "^1.1.2" 104 | "@phosphor/messaging" "^1.2.2" 105 | "@phosphor/signaling" "^1.2.2" 106 | "@phosphor/widgets" "^1.5.0" 107 | 108 | "@jupyterlab/observables@^1.0.10": 109 | version "1.0.10" 110 | resolved "https://registry.yarnpkg.com/@jupyterlab/observables/-/observables-1.0.10.tgz#dbc9da5988ebf3acc35effd24a1c598b13592fb5" 111 | dependencies: 112 | "@phosphor/algorithm" "^1.1.2" 113 | "@phosphor/coreutils" "^1.3.0" 114 | "@phosphor/disposable" "^1.1.2" 115 | "@phosphor/messaging" "^1.2.2" 116 | "@phosphor/signaling" "^1.2.2" 117 | 118 | "@jupyterlab/rendermime-interfaces@^1.0.10": 119 | version "1.0.10" 120 | resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-1.0.10.tgz#91c088a3e67edbd65a49b115845e0ba02b39c655" 121 | dependencies: 122 | "@phosphor/coreutils" "^1.3.0" 123 | "@phosphor/widgets" "^1.5.0" 124 | 125 | "@jupyterlab/rendermime@^0.16.3": 126 | version "0.16.3" 127 | resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime/-/rendermime-0.16.3.tgz#790949413358b6b148c48993747106c31de8de07" 128 | dependencies: 129 | "@jupyterlab/apputils" "^0.16.4" 130 | "@jupyterlab/codemirror" "^0.16.3" 131 | "@jupyterlab/coreutils" "^1.1.3" 132 | "@jupyterlab/observables" "^1.0.10" 133 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 134 | "@jupyterlab/services" "^2.0.3" 135 | "@phosphor/coreutils" "^1.3.0" 136 | "@phosphor/messaging" "^1.2.2" 137 | "@phosphor/signaling" "^1.2.2" 138 | "@phosphor/widgets" "^1.5.0" 139 | ansi_up "^3.0.0" 140 | marked "~0.3.9" 141 | 142 | "@jupyterlab/services@^2.0.3": 143 | version "2.0.3" 144 | resolved "https://registry.yarnpkg.com/@jupyterlab/services/-/services-2.0.3.tgz#376f06093b693e7d1037d01b5a542ec27a84a052" 145 | dependencies: 146 | "@jupyterlab/coreutils" "^1.1.3" 147 | "@jupyterlab/observables" "^1.0.10" 148 | "@phosphor/algorithm" "^1.1.2" 149 | "@phosphor/coreutils" "^1.3.0" 150 | "@phosphor/disposable" "^1.1.2" 151 | "@phosphor/signaling" "^1.2.2" 152 | node-fetch "~1.7.3" 153 | ws "~1.1.4" 154 | 155 | "@phosphor/algorithm@^1.1.2": 156 | version "1.1.2" 157 | resolved "https://registry.yarnpkg.com/@phosphor/algorithm/-/algorithm-1.1.2.tgz#fd1de9104c9a7f34e92864586ddf2e7f2e7779e8" 158 | 159 | "@phosphor/application@^1.5.0": 160 | version "1.6.0" 161 | resolved "https://registry.yarnpkg.com/@phosphor/application/-/application-1.6.0.tgz#e1f1bf300680f982881d222a77b24ba8589d3fa2" 162 | dependencies: 163 | "@phosphor/commands" "^1.5.0" 164 | "@phosphor/coreutils" "^1.3.0" 165 | "@phosphor/widgets" "^1.6.0" 166 | 167 | "@phosphor/collections@^1.1.2": 168 | version "1.1.2" 169 | resolved "https://registry.yarnpkg.com/@phosphor/collections/-/collections-1.1.2.tgz#c4c0b8b91129905fb36a9f243f2dbbde462dab8d" 170 | dependencies: 171 | "@phosphor/algorithm" "^1.1.2" 172 | 173 | "@phosphor/commands@^1.4.0", "@phosphor/commands@^1.5.0": 174 | version "1.5.0" 175 | resolved "https://registry.yarnpkg.com/@phosphor/commands/-/commands-1.5.0.tgz#68c137008e2d536828405fd4ebab43675d65d42b" 176 | dependencies: 177 | "@phosphor/algorithm" "^1.1.2" 178 | "@phosphor/coreutils" "^1.3.0" 179 | "@phosphor/disposable" "^1.1.2" 180 | "@phosphor/domutils" "^1.1.2" 181 | "@phosphor/keyboard" "^1.1.2" 182 | "@phosphor/signaling" "^1.2.2" 183 | 184 | "@phosphor/coreutils@^1.3.0": 185 | version "1.3.0" 186 | resolved "https://registry.yarnpkg.com/@phosphor/coreutils/-/coreutils-1.3.0.tgz#63292d381c012c5ab0d0196e83ced829b7e04a42" 187 | 188 | "@phosphor/disposable@^1.1.2": 189 | version "1.1.2" 190 | resolved "https://registry.yarnpkg.com/@phosphor/disposable/-/disposable-1.1.2.tgz#a192dd6a2e6c69d5d09d39ecf334dab93778060e" 191 | dependencies: 192 | "@phosphor/algorithm" "^1.1.2" 193 | 194 | "@phosphor/domutils@^1.1.2": 195 | version "1.1.2" 196 | resolved "https://registry.yarnpkg.com/@phosphor/domutils/-/domutils-1.1.2.tgz#e2efeb052f398c42b93b89e9bab26af15cc00514" 197 | 198 | "@phosphor/dragdrop@^1.3.0": 199 | version "1.3.0" 200 | resolved "https://registry.yarnpkg.com/@phosphor/dragdrop/-/dragdrop-1.3.0.tgz#7ce6ad39d6ca216d62a56f78104d02a77ae67307" 201 | dependencies: 202 | "@phosphor/coreutils" "^1.3.0" 203 | "@phosphor/disposable" "^1.1.2" 204 | 205 | "@phosphor/keyboard@^1.1.2": 206 | version "1.1.2" 207 | resolved "https://registry.yarnpkg.com/@phosphor/keyboard/-/keyboard-1.1.2.tgz#3e32234451764240a98e148034d5a8797422dd1f" 208 | 209 | "@phosphor/messaging@^1.2.2": 210 | version "1.2.2" 211 | resolved "https://registry.yarnpkg.com/@phosphor/messaging/-/messaging-1.2.2.tgz#7d896ddd3797b94a347708ded13da5783db75c14" 212 | dependencies: 213 | "@phosphor/algorithm" "^1.1.2" 214 | "@phosphor/collections" "^1.1.2" 215 | 216 | "@phosphor/properties@^1.1.2": 217 | version "1.1.2" 218 | resolved "https://registry.yarnpkg.com/@phosphor/properties/-/properties-1.1.2.tgz#78cc77eff452839da02255de48e814946cc09a28" 219 | 220 | "@phosphor/signaling@^1.2.2": 221 | version "1.2.2" 222 | resolved "https://registry.yarnpkg.com/@phosphor/signaling/-/signaling-1.2.2.tgz#3fcf97ca88e38bfb357fe8fe6bf7513347a514a9" 223 | dependencies: 224 | "@phosphor/algorithm" "^1.1.2" 225 | 226 | "@phosphor/virtualdom@^1.1.2": 227 | version "1.1.2" 228 | resolved "https://registry.yarnpkg.com/@phosphor/virtualdom/-/virtualdom-1.1.2.tgz#ce55c86eef31e5d0e26b1dc96ea32bd684458f41" 229 | dependencies: 230 | "@phosphor/algorithm" "^1.1.2" 231 | 232 | "@phosphor/widgets@^1.5.0", "@phosphor/widgets@^1.6.0": 233 | version "1.6.0" 234 | resolved "https://registry.yarnpkg.com/@phosphor/widgets/-/widgets-1.6.0.tgz#ebba8008b6b13247d03e73e5f3872c90d2c9c78f" 235 | dependencies: 236 | "@phosphor/algorithm" "^1.1.2" 237 | "@phosphor/commands" "^1.5.0" 238 | "@phosphor/coreutils" "^1.3.0" 239 | "@phosphor/disposable" "^1.1.2" 240 | "@phosphor/domutils" "^1.1.2" 241 | "@phosphor/dragdrop" "^1.3.0" 242 | "@phosphor/keyboard" "^1.1.2" 243 | "@phosphor/messaging" "^1.2.2" 244 | "@phosphor/properties" "^1.1.2" 245 | "@phosphor/signaling" "^1.2.2" 246 | "@phosphor/virtualdom" "^1.1.2" 247 | 248 | "@types/react@~16.0.19": 249 | version "16.0.41" 250 | resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.41.tgz#72146737f4d439dc95a53315de4bfb43ac8542ca" 251 | 252 | ajv@~5.1.6: 253 | version "5.1.6" 254 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.1.6.tgz#4b2f1a19dece93d57ac216037e3e9791c7dd1564" 255 | dependencies: 256 | co "^4.6.0" 257 | json-schema-traverse "^0.3.0" 258 | json-stable-stringify "^1.0.1" 259 | 260 | ansi_up@^3.0.0: 261 | version "3.0.0" 262 | resolved "https://registry.yarnpkg.com/ansi_up/-/ansi_up-3.0.0.tgz#27f45d8f457d9ceff59e4ea03c8e6f13c1a303e8" 263 | 264 | asap@~2.0.3: 265 | version "2.0.6" 266 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 267 | 268 | balanced-match@^1.0.0: 269 | version "1.0.0" 270 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 271 | 272 | brace-expansion@^1.1.7: 273 | version "1.1.11" 274 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 275 | dependencies: 276 | balanced-match "^1.0.0" 277 | concat-map "0.0.1" 278 | 279 | co@^4.6.0: 280 | version "4.6.0" 281 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 282 | 283 | codemirror@~5.35.0: 284 | version "5.35.0" 285 | resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.35.0.tgz#280653d495455bc66aa87e6284292b02775ba878" 286 | 287 | comment-json@^1.1.3: 288 | version "1.1.3" 289 | resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-1.1.3.tgz#6986c3330fee0c4c9e00c2398cd61afa5d8f239e" 290 | dependencies: 291 | json-parser "^1.0.0" 292 | 293 | concat-map@0.0.1: 294 | version "0.0.1" 295 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 296 | 297 | core-js@^1.0.0: 298 | version "1.2.7" 299 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" 300 | 301 | core-util-is@~1.0.0: 302 | version "1.0.2" 303 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 304 | 305 | dom-serializer@0: 306 | version "0.1.0" 307 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" 308 | dependencies: 309 | domelementtype "~1.1.1" 310 | entities "~1.1.1" 311 | 312 | domelementtype@1, domelementtype@^1.3.0: 313 | version "1.3.0" 314 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" 315 | 316 | domelementtype@~1.1.1: 317 | version "1.1.3" 318 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" 319 | 320 | domhandler@^2.3.0: 321 | version "2.4.2" 322 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" 323 | dependencies: 324 | domelementtype "1" 325 | 326 | domutils@^1.5.1: 327 | version "1.7.0" 328 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" 329 | dependencies: 330 | dom-serializer "0" 331 | domelementtype "1" 332 | 333 | encoding@^0.1.11: 334 | version "0.1.12" 335 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" 336 | dependencies: 337 | iconv-lite "~0.4.13" 338 | 339 | entities@^1.1.1, entities@~1.1.1: 340 | version "1.1.1" 341 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" 342 | 343 | esprima@^2.7.0: 344 | version "2.7.3" 345 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 346 | 347 | fbjs@^0.8.16: 348 | version "0.8.16" 349 | resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" 350 | dependencies: 351 | core-js "^1.0.0" 352 | isomorphic-fetch "^2.1.1" 353 | loose-envify "^1.0.0" 354 | object-assign "^4.1.0" 355 | promise "^7.1.1" 356 | setimmediate "^1.0.5" 357 | ua-parser-js "^0.7.9" 358 | 359 | fs.realpath@^1.0.0: 360 | version "1.0.0" 361 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 362 | 363 | glob@^7.0.5: 364 | version "7.1.2" 365 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 366 | dependencies: 367 | fs.realpath "^1.0.0" 368 | inflight "^1.0.4" 369 | inherits "2" 370 | minimatch "^3.0.4" 371 | once "^1.3.0" 372 | path-is-absolute "^1.0.0" 373 | 374 | htmlparser2@^3.9.0: 375 | version "3.9.2" 376 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" 377 | dependencies: 378 | domelementtype "^1.3.0" 379 | domhandler "^2.3.0" 380 | domutils "^1.5.1" 381 | entities "^1.1.1" 382 | inherits "^2.0.1" 383 | readable-stream "^2.0.2" 384 | 385 | iconv-lite@~0.4.13: 386 | version "0.4.23" 387 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" 388 | dependencies: 389 | safer-buffer ">= 2.1.2 < 3" 390 | 391 | inflight@^1.0.4: 392 | version "1.0.6" 393 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 394 | dependencies: 395 | once "^1.3.0" 396 | wrappy "1" 397 | 398 | inherits@2, inherits@^2.0.1, inherits@~2.0.3: 399 | version "2.0.3" 400 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 401 | 402 | is-stream@^1.0.1: 403 | version "1.1.0" 404 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 405 | 406 | isarray@~1.0.0: 407 | version "1.0.0" 408 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 409 | 410 | isomorphic-fetch@^2.1.1: 411 | version "2.2.1" 412 | resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" 413 | dependencies: 414 | node-fetch "^1.0.1" 415 | whatwg-fetch ">=0.10.0" 416 | 417 | js-tokens@^3.0.0: 418 | version "3.0.2" 419 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 420 | 421 | json-parser@^1.0.0: 422 | version "1.1.5" 423 | resolved "https://registry.yarnpkg.com/json-parser/-/json-parser-1.1.5.tgz#e62ec5261d1a6a5fc20e812a320740c6d9005677" 424 | dependencies: 425 | esprima "^2.7.0" 426 | 427 | json-schema-traverse@^0.3.0: 428 | version "0.3.1" 429 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 430 | 431 | json-stable-stringify@^1.0.1: 432 | version "1.0.1" 433 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 434 | dependencies: 435 | jsonify "~0.0.0" 436 | 437 | jsonify@~0.0.0: 438 | version "0.0.0" 439 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 440 | 441 | lodash.escaperegexp@^4.1.2: 442 | version "4.1.2" 443 | resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" 444 | 445 | loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: 446 | version "1.3.1" 447 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 448 | dependencies: 449 | js-tokens "^3.0.0" 450 | 451 | marked@~0.3.9: 452 | version "0.3.19" 453 | resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" 454 | 455 | minimatch@^3.0.4: 456 | version "3.0.4" 457 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 458 | dependencies: 459 | brace-expansion "^1.1.7" 460 | 461 | minimist@~1.2.0: 462 | version "1.2.0" 463 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 464 | 465 | moment@~2.21.0: 466 | version "2.21.0" 467 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" 468 | 469 | node-fetch@^1.0.1, node-fetch@~1.7.3: 470 | version "1.7.3" 471 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" 472 | dependencies: 473 | encoding "^0.1.11" 474 | is-stream "^1.0.1" 475 | 476 | object-assign@^4.1.0, object-assign@^4.1.1: 477 | version "4.1.1" 478 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 479 | 480 | once@^1.3.0: 481 | version "1.4.0" 482 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 483 | dependencies: 484 | wrappy "1" 485 | 486 | options@>=0.0.5: 487 | version "0.0.6" 488 | resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" 489 | 490 | path-is-absolute@^1.0.0: 491 | version "1.0.1" 492 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 493 | 494 | path-posix@~1.0.0: 495 | version "1.0.0" 496 | resolved "https://registry.yarnpkg.com/path-posix/-/path-posix-1.0.0.tgz#06b26113f56beab042545a23bfa88003ccac260f" 497 | 498 | process-nextick-args@~2.0.0: 499 | version "2.0.0" 500 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 501 | 502 | promise@^7.1.1: 503 | version "7.3.1" 504 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" 505 | dependencies: 506 | asap "~2.0.3" 507 | 508 | prop-types@^15.6.0: 509 | version "15.6.1" 510 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" 511 | dependencies: 512 | fbjs "^0.8.16" 513 | loose-envify "^1.3.1" 514 | object-assign "^4.1.1" 515 | 516 | querystringify@~1.0.0: 517 | version "1.0.0" 518 | resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" 519 | 520 | react-dom@~16.2.0: 521 | version "16.2.0" 522 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" 523 | dependencies: 524 | fbjs "^0.8.16" 525 | loose-envify "^1.1.0" 526 | object-assign "^4.1.1" 527 | prop-types "^15.6.0" 528 | 529 | react@~16.2.0: 530 | version "16.2.0" 531 | resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" 532 | dependencies: 533 | fbjs "^0.8.16" 534 | loose-envify "^1.1.0" 535 | object-assign "^4.1.1" 536 | prop-types "^15.6.0" 537 | 538 | readable-stream@^2.0.2: 539 | version "2.3.6" 540 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 541 | dependencies: 542 | core-util-is "~1.0.0" 543 | inherits "~2.0.3" 544 | isarray "~1.0.0" 545 | process-nextick-args "~2.0.0" 546 | safe-buffer "~5.1.1" 547 | string_decoder "~1.1.1" 548 | util-deprecate "~1.0.1" 549 | 550 | requires-port@1.0.x: 551 | version "1.0.0" 552 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 553 | 554 | rimraf@^2.6.1: 555 | version "2.6.2" 556 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 557 | dependencies: 558 | glob "^7.0.5" 559 | 560 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 561 | version "5.1.2" 562 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 563 | 564 | "safer-buffer@>= 2.1.2 < 3": 565 | version "2.1.2" 566 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 567 | 568 | sanitize-html@~1.14.3: 569 | version "1.14.3" 570 | resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.14.3.tgz#62afd7c2d44ffd604599121d49e25b934e7a5514" 571 | dependencies: 572 | htmlparser2 "^3.9.0" 573 | lodash.escaperegexp "^4.1.2" 574 | xtend "^4.0.0" 575 | 576 | setimmediate@^1.0.5: 577 | version "1.0.5" 578 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 579 | 580 | string_decoder@~1.1.1: 581 | version "1.1.1" 582 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 583 | dependencies: 584 | safe-buffer "~5.1.0" 585 | 586 | typescript@~2.6.0: 587 | version "2.6.2" 588 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" 589 | 590 | ua-parser-js@^0.7.9: 591 | version "0.7.18" 592 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" 593 | 594 | ultron@1.0.x: 595 | version "1.0.2" 596 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" 597 | 598 | url-parse@~1.1.9: 599 | version "1.1.9" 600 | resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.9.tgz#c67f1d775d51f0a18911dd7b3ffad27bb9e5bd19" 601 | dependencies: 602 | querystringify "~1.0.0" 603 | requires-port "1.0.x" 604 | 605 | util-deprecate@~1.0.1: 606 | version "1.0.2" 607 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 608 | 609 | whatwg-fetch@>=0.10.0: 610 | version "2.0.4" 611 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" 612 | 613 | wrappy@1: 614 | version "1.0.2" 615 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 616 | 617 | ws@~1.1.4: 618 | version "1.1.5" 619 | resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" 620 | dependencies: 621 | options ">=0.0.5" 622 | ultron "1.0.x" 623 | 624 | xtend@^4.0.0: 625 | version "4.0.1" 626 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 627 | -------------------------------------------------------------------------------- /3b_datagrid/.gitignore: -------------------------------------------------------------------------------- 1 | *.bundle.* 2 | lib/ 3 | node_modules/ 4 | *.egg-info/ 5 | .ipynb_checkpoints 6 | -------------------------------------------------------------------------------- /3b_datagrid/README.md: -------------------------------------------------------------------------------- 1 | # 3b_datagrid 2 | 3 | minimal lab example 4 | 5 | 6 | ## Prerequisites 7 | 8 | * JupyterLab 9 | 10 | ## Installation 11 | 12 | ```bash 13 | jupyter labextension install extension1 14 | ``` 15 | 16 | ## Development 17 | 18 | For a development install (requires npm version 4 or later), do the following in the repository directory: 19 | 20 | ```bash 21 | npm install 22 | npm run build 23 | jupyter labextension link . 24 | ``` 25 | 26 | To rebuild the package and the JupyterLab app: 27 | 28 | ```bash 29 | npm run build 30 | jupyter lab build 31 | ``` 32 | 33 | -------------------------------------------------------------------------------- /3b_datagrid/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "3b_datagrid", 3 | "version": "0.1.0", 4 | "description": "minimal lab example", 5 | "keywords": [ 6 | "jupyter", 7 | "jupyterlab", 8 | "jupyterlab-extension" 9 | ], 10 | "homepage": "https://github.com/my_name/jupyterlab_myextension", 11 | "bugs": { 12 | "url": "https://github.com/my_name/jupyterlab_myextension/issues" 13 | }, 14 | "license": "BSD-3-Clause", 15 | "author": "tuto", 16 | "files": [ 17 | "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", 18 | "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}" 19 | ], 20 | "main": "lib/index.js", 21 | "types": "lib/index.d.ts", 22 | "repository": { 23 | "type": "git", 24 | "url": "https://github.com/my_name/jupyterlab_myextension.git" 25 | }, 26 | "scripts": { 27 | "build": "tsc", 28 | "clean": "rimraf lib", 29 | "watch": "tsc -w" 30 | }, 31 | "dependencies": { 32 | "@jupyterlab/application": "^0.16.0", 33 | "@jupyterlab/mainmenu": "*", 34 | "@phosphor/algorithm": "^1.1.2", 35 | "@phosphor/coreutils": "^1.3.0", 36 | "@phosphor/datagrid": "*", 37 | "@phosphor/disposable": "^1.1.2" 38 | }, 39 | "devDependencies": { 40 | "rimraf": "^2.6.1", 41 | "typescript": "~2.6.0" 42 | }, 43 | "jupyterlab": { 44 | "extension": true 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /3b_datagrid/src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | JupyterLab, JupyterLabPlugin 3 | } from '@jupyterlab/application'; 4 | 5 | import '../style/index.css'; 6 | 7 | import { 8 | IMainMenu 9 | } from '@jupyterlab/mainmenu'; 10 | 11 | import { 12 | Menu 13 | } from '@phosphor/widgets'; 14 | 15 | import { 16 | ICommandPalette 17 | } from '@jupyterlab/apputils'; 18 | 19 | import { 20 | StackedPanel 21 | } from '@phosphor/widgets'; 22 | 23 | import { 24 | DataGrid, DataModel 25 | } from '@phosphor/datagrid'; 26 | 27 | /** 28 | * Initialization data for the extension1 extension. 29 | */ 30 | const extension: JupyterLabPlugin = { 31 | id: '3b_datagrid', 32 | autoStart: true, 33 | requires: [ICommandPalette, IMainMenu], 34 | activate: ( 35 | app: JupyterLab, 36 | palette: ICommandPalette, 37 | mainMenu: IMainMenu) => 38 | { 39 | const { commands, shell } = app; 40 | let command = 'ex4:datagrid'; 41 | let category = 'Tutorial'; 42 | commands.addCommand(command, { 43 | label: 'Ex4 datagrid', 44 | caption: 'Open a datagrid panel', 45 | execute: (args) => { 46 | const widget = new TutorialView(); 47 | shell.addToMainArea(widget); 48 | }}); 49 | palette.addItem({command, category}); 50 | 51 | let tutorialMenu: Menu = new Menu({commands}); 52 | 53 | tutorialMenu.title.label = 'Tutorial'; 54 | mainMenu.addMenu(tutorialMenu, {rank: 80}); 55 | tutorialMenu.addItem({ command }); 56 | } 57 | }; 58 | 59 | export default extension; 60 | 61 | 62 | class TutorialView extends StackedPanel { 63 | constructor() { 64 | super(); 65 | this.addClass('jp-tutorial-view') 66 | this.id = 'tutorial' 67 | this.title.label = 'Tutorial View' 68 | this.title.closable = true; 69 | 70 | let model = new LargeDataModel(); 71 | let grid = new DataGrid(); 72 | grid.model = model; 73 | 74 | this.addWidget(grid); 75 | } 76 | } 77 | 78 | class LargeDataModel extends DataModel { 79 | 80 | rowCount(region: DataModel.RowRegion): number { 81 | return region === 'body' ? 1000000000000 : 2; 82 | } 83 | 84 | columnCount(region: DataModel.ColumnRegion): number { 85 | return region === 'body' ? 1000000000000 : 3; 86 | } 87 | 88 | data(region: DataModel.CellRegion, row: number, column: number): any { 89 | if (region === 'row-header') { 90 | return `R: ${row}, ${column}`; 91 | } 92 | if (region === 'column-header') { 93 | return `C: ${row}, ${column}`; 94 | } 95 | if (region === 'corner-header') { 96 | return `N: ${row}, ${column}`; 97 | } 98 | return `(${row}, ${column})`; 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /3b_datagrid/style/index.css: -------------------------------------------------------------------------------- 1 | .jp-tutorial-view { 2 | background-color: AliceBlue; 3 | } 4 | -------------------------------------------------------------------------------- /3b_datagrid/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "noImplicitAny": true, 5 | "noEmitOnError": true, 6 | "noUnusedLocals": true, 7 | "module": "commonjs", 8 | "moduleResolution": "node", 9 | "target": "ES6", 10 | "outDir": "./lib", 11 | "lib": ["ES6", "ES2015.Promise", "DOM"], 12 | "types": [] 13 | }, 14 | "include": ["src/*"] 15 | } 16 | -------------------------------------------------------------------------------- /3b_datagrid/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@jupyterlab/application@^0.16.0": 6 | version "0.16.3" 7 | resolved "https://registry.yarnpkg.com/@jupyterlab/application/-/application-0.16.3.tgz#e72ffe71d823525f4411e035d66bc7f202e5bb76" 8 | dependencies: 9 | "@jupyterlab/apputils" "^0.16.4" 10 | "@jupyterlab/coreutils" "^1.1.3" 11 | "@jupyterlab/docregistry" "^0.16.3" 12 | "@jupyterlab/rendermime" "^0.16.3" 13 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 14 | "@jupyterlab/services" "^2.0.3" 15 | "@phosphor/algorithm" "^1.1.2" 16 | "@phosphor/application" "^1.5.0" 17 | "@phosphor/commands" "^1.4.0" 18 | "@phosphor/coreutils" "^1.3.0" 19 | "@phosphor/disposable" "^1.1.2" 20 | "@phosphor/messaging" "^1.2.2" 21 | "@phosphor/properties" "^1.1.2" 22 | "@phosphor/signaling" "^1.2.2" 23 | "@phosphor/widgets" "^1.5.0" 24 | 25 | "@jupyterlab/apputils@^0.16.4": 26 | version "0.16.4" 27 | resolved "https://registry.yarnpkg.com/@jupyterlab/apputils/-/apputils-0.16.4.tgz#e4a1c143d3b085a921ae36f8bad339bbdbeb35fa" 28 | dependencies: 29 | "@jupyterlab/coreutils" "^1.1.3" 30 | "@jupyterlab/services" "^2.0.3" 31 | "@phosphor/algorithm" "^1.1.2" 32 | "@phosphor/commands" "^1.4.0" 33 | "@phosphor/coreutils" "^1.3.0" 34 | "@phosphor/disposable" "^1.1.2" 35 | "@phosphor/domutils" "^1.1.2" 36 | "@phosphor/messaging" "^1.2.2" 37 | "@phosphor/properties" "^1.1.2" 38 | "@phosphor/signaling" "^1.2.2" 39 | "@phosphor/virtualdom" "^1.1.2" 40 | "@phosphor/widgets" "^1.5.0" 41 | "@types/react" "~16.0.19" 42 | react "~16.2.0" 43 | react-dom "~16.2.0" 44 | sanitize-html "~1.14.3" 45 | 46 | "@jupyterlab/codeeditor@^0.16.2": 47 | version "0.16.2" 48 | resolved "https://registry.yarnpkg.com/@jupyterlab/codeeditor/-/codeeditor-0.16.2.tgz#16d436975dc9f5940b07f0d81dc2da3348276c84" 49 | dependencies: 50 | "@jupyterlab/coreutils" "^1.1.3" 51 | "@jupyterlab/observables" "^1.0.10" 52 | "@phosphor/coreutils" "^1.3.0" 53 | "@phosphor/disposable" "^1.1.2" 54 | "@phosphor/messaging" "^1.2.2" 55 | "@phosphor/signaling" "^1.2.2" 56 | "@phosphor/widgets" "^1.5.0" 57 | react "~16.2.0" 58 | react-dom "~16.2.0" 59 | 60 | "@jupyterlab/codemirror@^0.16.3": 61 | version "0.16.3" 62 | resolved "https://registry.yarnpkg.com/@jupyterlab/codemirror/-/codemirror-0.16.3.tgz#50a05d4663478b8b41587c7bea7c8c9b2431e2c7" 63 | dependencies: 64 | "@jupyterlab/apputils" "^0.16.4" 65 | "@jupyterlab/codeeditor" "^0.16.2" 66 | "@jupyterlab/coreutils" "^1.1.3" 67 | "@jupyterlab/observables" "^1.0.10" 68 | "@phosphor/algorithm" "^1.1.2" 69 | "@phosphor/coreutils" "^1.3.0" 70 | "@phosphor/disposable" "^1.1.2" 71 | "@phosphor/signaling" "^1.2.2" 72 | codemirror "~5.35.0" 73 | 74 | "@jupyterlab/coreutils@^1.1.3": 75 | version "1.1.3" 76 | resolved "https://registry.yarnpkg.com/@jupyterlab/coreutils/-/coreutils-1.1.3.tgz#079ff19faeaffcb6cb243c3fb0c737f6ea661b5a" 77 | dependencies: 78 | "@phosphor/algorithm" "^1.1.2" 79 | "@phosphor/coreutils" "^1.3.0" 80 | "@phosphor/disposable" "^1.1.2" 81 | "@phosphor/signaling" "^1.2.2" 82 | ajv "~5.1.6" 83 | comment-json "^1.1.3" 84 | minimist "~1.2.0" 85 | moment "~2.21.0" 86 | path-posix "~1.0.0" 87 | url-parse "~1.1.9" 88 | 89 | "@jupyterlab/docregistry@^0.16.3": 90 | version "0.16.3" 91 | resolved "https://registry.yarnpkg.com/@jupyterlab/docregistry/-/docregistry-0.16.3.tgz#f6f9b0df65724cc3fecc9e62bf8e1b4c92b6639f" 92 | dependencies: 93 | "@jupyterlab/apputils" "^0.16.4" 94 | "@jupyterlab/codeeditor" "^0.16.2" 95 | "@jupyterlab/codemirror" "^0.16.3" 96 | "@jupyterlab/coreutils" "^1.1.3" 97 | "@jupyterlab/observables" "^1.0.10" 98 | "@jupyterlab/rendermime" "^0.16.3" 99 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 100 | "@jupyterlab/services" "^2.0.3" 101 | "@phosphor/algorithm" "^1.1.2" 102 | "@phosphor/coreutils" "^1.3.0" 103 | "@phosphor/disposable" "^1.1.2" 104 | "@phosphor/messaging" "^1.2.2" 105 | "@phosphor/signaling" "^1.2.2" 106 | "@phosphor/widgets" "^1.5.0" 107 | 108 | "@jupyterlab/observables@^1.0.10": 109 | version "1.0.10" 110 | resolved "https://registry.yarnpkg.com/@jupyterlab/observables/-/observables-1.0.10.tgz#dbc9da5988ebf3acc35effd24a1c598b13592fb5" 111 | dependencies: 112 | "@phosphor/algorithm" "^1.1.2" 113 | "@phosphor/coreutils" "^1.3.0" 114 | "@phosphor/disposable" "^1.1.2" 115 | "@phosphor/messaging" "^1.2.2" 116 | "@phosphor/signaling" "^1.2.2" 117 | 118 | "@jupyterlab/rendermime-interfaces@^1.0.10": 119 | version "1.0.10" 120 | resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-1.0.10.tgz#91c088a3e67edbd65a49b115845e0ba02b39c655" 121 | dependencies: 122 | "@phosphor/coreutils" "^1.3.0" 123 | "@phosphor/widgets" "^1.5.0" 124 | 125 | "@jupyterlab/rendermime@^0.16.3": 126 | version "0.16.3" 127 | resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime/-/rendermime-0.16.3.tgz#790949413358b6b148c48993747106c31de8de07" 128 | dependencies: 129 | "@jupyterlab/apputils" "^0.16.4" 130 | "@jupyterlab/codemirror" "^0.16.3" 131 | "@jupyterlab/coreutils" "^1.1.3" 132 | "@jupyterlab/observables" "^1.0.10" 133 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 134 | "@jupyterlab/services" "^2.0.3" 135 | "@phosphor/coreutils" "^1.3.0" 136 | "@phosphor/messaging" "^1.2.2" 137 | "@phosphor/signaling" "^1.2.2" 138 | "@phosphor/widgets" "^1.5.0" 139 | ansi_up "^3.0.0" 140 | marked "~0.3.9" 141 | 142 | "@jupyterlab/services@^2.0.3": 143 | version "2.0.3" 144 | resolved "https://registry.yarnpkg.com/@jupyterlab/services/-/services-2.0.3.tgz#376f06093b693e7d1037d01b5a542ec27a84a052" 145 | dependencies: 146 | "@jupyterlab/coreutils" "^1.1.3" 147 | "@jupyterlab/observables" "^1.0.10" 148 | "@phosphor/algorithm" "^1.1.2" 149 | "@phosphor/coreutils" "^1.3.0" 150 | "@phosphor/disposable" "^1.1.2" 151 | "@phosphor/signaling" "^1.2.2" 152 | node-fetch "~1.7.3" 153 | ws "~1.1.4" 154 | 155 | "@phosphor/algorithm@^1.1.2": 156 | version "1.1.2" 157 | resolved "https://registry.yarnpkg.com/@phosphor/algorithm/-/algorithm-1.1.2.tgz#fd1de9104c9a7f34e92864586ddf2e7f2e7779e8" 158 | 159 | "@phosphor/application@^1.5.0": 160 | version "1.6.0" 161 | resolved "https://registry.yarnpkg.com/@phosphor/application/-/application-1.6.0.tgz#e1f1bf300680f982881d222a77b24ba8589d3fa2" 162 | dependencies: 163 | "@phosphor/commands" "^1.5.0" 164 | "@phosphor/coreutils" "^1.3.0" 165 | "@phosphor/widgets" "^1.6.0" 166 | 167 | "@phosphor/collections@^1.1.2": 168 | version "1.1.2" 169 | resolved "https://registry.yarnpkg.com/@phosphor/collections/-/collections-1.1.2.tgz#c4c0b8b91129905fb36a9f243f2dbbde462dab8d" 170 | dependencies: 171 | "@phosphor/algorithm" "^1.1.2" 172 | 173 | "@phosphor/commands@^1.4.0", "@phosphor/commands@^1.5.0": 174 | version "1.5.0" 175 | resolved "https://registry.yarnpkg.com/@phosphor/commands/-/commands-1.5.0.tgz#68c137008e2d536828405fd4ebab43675d65d42b" 176 | dependencies: 177 | "@phosphor/algorithm" "^1.1.2" 178 | "@phosphor/coreutils" "^1.3.0" 179 | "@phosphor/disposable" "^1.1.2" 180 | "@phosphor/domutils" "^1.1.2" 181 | "@phosphor/keyboard" "^1.1.2" 182 | "@phosphor/signaling" "^1.2.2" 183 | 184 | "@phosphor/coreutils@^1.3.0": 185 | version "1.3.0" 186 | resolved "https://registry.yarnpkg.com/@phosphor/coreutils/-/coreutils-1.3.0.tgz#63292d381c012c5ab0d0196e83ced829b7e04a42" 187 | 188 | "@phosphor/disposable@^1.1.2": 189 | version "1.1.2" 190 | resolved "https://registry.yarnpkg.com/@phosphor/disposable/-/disposable-1.1.2.tgz#a192dd6a2e6c69d5d09d39ecf334dab93778060e" 191 | dependencies: 192 | "@phosphor/algorithm" "^1.1.2" 193 | 194 | "@phosphor/domutils@^1.1.2": 195 | version "1.1.2" 196 | resolved "https://registry.yarnpkg.com/@phosphor/domutils/-/domutils-1.1.2.tgz#e2efeb052f398c42b93b89e9bab26af15cc00514" 197 | 198 | "@phosphor/dragdrop@^1.3.0": 199 | version "1.3.0" 200 | resolved "https://registry.yarnpkg.com/@phosphor/dragdrop/-/dragdrop-1.3.0.tgz#7ce6ad39d6ca216d62a56f78104d02a77ae67307" 201 | dependencies: 202 | "@phosphor/coreutils" "^1.3.0" 203 | "@phosphor/disposable" "^1.1.2" 204 | 205 | "@phosphor/keyboard@^1.1.2": 206 | version "1.1.2" 207 | resolved "https://registry.yarnpkg.com/@phosphor/keyboard/-/keyboard-1.1.2.tgz#3e32234451764240a98e148034d5a8797422dd1f" 208 | 209 | "@phosphor/messaging@^1.2.2": 210 | version "1.2.2" 211 | resolved "https://registry.yarnpkg.com/@phosphor/messaging/-/messaging-1.2.2.tgz#7d896ddd3797b94a347708ded13da5783db75c14" 212 | dependencies: 213 | "@phosphor/algorithm" "^1.1.2" 214 | "@phosphor/collections" "^1.1.2" 215 | 216 | "@phosphor/properties@^1.1.2": 217 | version "1.1.2" 218 | resolved "https://registry.yarnpkg.com/@phosphor/properties/-/properties-1.1.2.tgz#78cc77eff452839da02255de48e814946cc09a28" 219 | 220 | "@phosphor/signaling@^1.2.2": 221 | version "1.2.2" 222 | resolved "https://registry.yarnpkg.com/@phosphor/signaling/-/signaling-1.2.2.tgz#3fcf97ca88e38bfb357fe8fe6bf7513347a514a9" 223 | dependencies: 224 | "@phosphor/algorithm" "^1.1.2" 225 | 226 | "@phosphor/virtualdom@^1.1.2": 227 | version "1.1.2" 228 | resolved "https://registry.yarnpkg.com/@phosphor/virtualdom/-/virtualdom-1.1.2.tgz#ce55c86eef31e5d0e26b1dc96ea32bd684458f41" 229 | dependencies: 230 | "@phosphor/algorithm" "^1.1.2" 231 | 232 | "@phosphor/widgets@^1.5.0", "@phosphor/widgets@^1.6.0": 233 | version "1.6.0" 234 | resolved "https://registry.yarnpkg.com/@phosphor/widgets/-/widgets-1.6.0.tgz#ebba8008b6b13247d03e73e5f3872c90d2c9c78f" 235 | dependencies: 236 | "@phosphor/algorithm" "^1.1.2" 237 | "@phosphor/commands" "^1.5.0" 238 | "@phosphor/coreutils" "^1.3.0" 239 | "@phosphor/disposable" "^1.1.2" 240 | "@phosphor/domutils" "^1.1.2" 241 | "@phosphor/dragdrop" "^1.3.0" 242 | "@phosphor/keyboard" "^1.1.2" 243 | "@phosphor/messaging" "^1.2.2" 244 | "@phosphor/properties" "^1.1.2" 245 | "@phosphor/signaling" "^1.2.2" 246 | "@phosphor/virtualdom" "^1.1.2" 247 | 248 | "@types/react@~16.0.19": 249 | version "16.0.41" 250 | resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.41.tgz#72146737f4d439dc95a53315de4bfb43ac8542ca" 251 | 252 | ajv@~5.1.6: 253 | version "5.1.6" 254 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.1.6.tgz#4b2f1a19dece93d57ac216037e3e9791c7dd1564" 255 | dependencies: 256 | co "^4.6.0" 257 | json-schema-traverse "^0.3.0" 258 | json-stable-stringify "^1.0.1" 259 | 260 | ansi_up@^3.0.0: 261 | version "3.0.0" 262 | resolved "https://registry.yarnpkg.com/ansi_up/-/ansi_up-3.0.0.tgz#27f45d8f457d9ceff59e4ea03c8e6f13c1a303e8" 263 | 264 | asap@~2.0.3: 265 | version "2.0.6" 266 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 267 | 268 | balanced-match@^1.0.0: 269 | version "1.0.0" 270 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 271 | 272 | brace-expansion@^1.1.7: 273 | version "1.1.11" 274 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 275 | dependencies: 276 | balanced-match "^1.0.0" 277 | concat-map "0.0.1" 278 | 279 | co@^4.6.0: 280 | version "4.6.0" 281 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 282 | 283 | codemirror@~5.35.0: 284 | version "5.35.0" 285 | resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.35.0.tgz#280653d495455bc66aa87e6284292b02775ba878" 286 | 287 | comment-json@^1.1.3: 288 | version "1.1.3" 289 | resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-1.1.3.tgz#6986c3330fee0c4c9e00c2398cd61afa5d8f239e" 290 | dependencies: 291 | json-parser "^1.0.0" 292 | 293 | concat-map@0.0.1: 294 | version "0.0.1" 295 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 296 | 297 | core-js@^1.0.0: 298 | version "1.2.7" 299 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" 300 | 301 | core-util-is@~1.0.0: 302 | version "1.0.2" 303 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 304 | 305 | dom-serializer@0: 306 | version "0.1.0" 307 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" 308 | dependencies: 309 | domelementtype "~1.1.1" 310 | entities "~1.1.1" 311 | 312 | domelementtype@1, domelementtype@^1.3.0: 313 | version "1.3.0" 314 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" 315 | 316 | domelementtype@~1.1.1: 317 | version "1.1.3" 318 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" 319 | 320 | domhandler@^2.3.0: 321 | version "2.4.2" 322 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" 323 | dependencies: 324 | domelementtype "1" 325 | 326 | domutils@^1.5.1: 327 | version "1.7.0" 328 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" 329 | dependencies: 330 | dom-serializer "0" 331 | domelementtype "1" 332 | 333 | encoding@^0.1.11: 334 | version "0.1.12" 335 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" 336 | dependencies: 337 | iconv-lite "~0.4.13" 338 | 339 | entities@^1.1.1, entities@~1.1.1: 340 | version "1.1.1" 341 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" 342 | 343 | esprima@^2.7.0: 344 | version "2.7.3" 345 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 346 | 347 | fbjs@^0.8.16: 348 | version "0.8.16" 349 | resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" 350 | dependencies: 351 | core-js "^1.0.0" 352 | isomorphic-fetch "^2.1.1" 353 | loose-envify "^1.0.0" 354 | object-assign "^4.1.0" 355 | promise "^7.1.1" 356 | setimmediate "^1.0.5" 357 | ua-parser-js "^0.7.9" 358 | 359 | fs.realpath@^1.0.0: 360 | version "1.0.0" 361 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 362 | 363 | glob@^7.0.5: 364 | version "7.1.2" 365 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 366 | dependencies: 367 | fs.realpath "^1.0.0" 368 | inflight "^1.0.4" 369 | inherits "2" 370 | minimatch "^3.0.4" 371 | once "^1.3.0" 372 | path-is-absolute "^1.0.0" 373 | 374 | htmlparser2@^3.9.0: 375 | version "3.9.2" 376 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" 377 | dependencies: 378 | domelementtype "^1.3.0" 379 | domhandler "^2.3.0" 380 | domutils "^1.5.1" 381 | entities "^1.1.1" 382 | inherits "^2.0.1" 383 | readable-stream "^2.0.2" 384 | 385 | iconv-lite@~0.4.13: 386 | version "0.4.23" 387 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" 388 | dependencies: 389 | safer-buffer ">= 2.1.2 < 3" 390 | 391 | inflight@^1.0.4: 392 | version "1.0.6" 393 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 394 | dependencies: 395 | once "^1.3.0" 396 | wrappy "1" 397 | 398 | inherits@2, inherits@^2.0.1, inherits@~2.0.3: 399 | version "2.0.3" 400 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 401 | 402 | is-stream@^1.0.1: 403 | version "1.1.0" 404 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 405 | 406 | isarray@~1.0.0: 407 | version "1.0.0" 408 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 409 | 410 | isomorphic-fetch@^2.1.1: 411 | version "2.2.1" 412 | resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" 413 | dependencies: 414 | node-fetch "^1.0.1" 415 | whatwg-fetch ">=0.10.0" 416 | 417 | js-tokens@^3.0.0: 418 | version "3.0.2" 419 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 420 | 421 | json-parser@^1.0.0: 422 | version "1.1.5" 423 | resolved "https://registry.yarnpkg.com/json-parser/-/json-parser-1.1.5.tgz#e62ec5261d1a6a5fc20e812a320740c6d9005677" 424 | dependencies: 425 | esprima "^2.7.0" 426 | 427 | json-schema-traverse@^0.3.0: 428 | version "0.3.1" 429 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 430 | 431 | json-stable-stringify@^1.0.1: 432 | version "1.0.1" 433 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 434 | dependencies: 435 | jsonify "~0.0.0" 436 | 437 | jsonify@~0.0.0: 438 | version "0.0.0" 439 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 440 | 441 | lodash.escaperegexp@^4.1.2: 442 | version "4.1.2" 443 | resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" 444 | 445 | loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: 446 | version "1.3.1" 447 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 448 | dependencies: 449 | js-tokens "^3.0.0" 450 | 451 | marked@~0.3.9: 452 | version "0.3.19" 453 | resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" 454 | 455 | minimatch@^3.0.4: 456 | version "3.0.4" 457 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 458 | dependencies: 459 | brace-expansion "^1.1.7" 460 | 461 | minimist@~1.2.0: 462 | version "1.2.0" 463 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 464 | 465 | moment@~2.21.0: 466 | version "2.21.0" 467 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" 468 | 469 | node-fetch@^1.0.1, node-fetch@~1.7.3: 470 | version "1.7.3" 471 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" 472 | dependencies: 473 | encoding "^0.1.11" 474 | is-stream "^1.0.1" 475 | 476 | object-assign@^4.1.0, object-assign@^4.1.1: 477 | version "4.1.1" 478 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 479 | 480 | once@^1.3.0: 481 | version "1.4.0" 482 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 483 | dependencies: 484 | wrappy "1" 485 | 486 | options@>=0.0.5: 487 | version "0.0.6" 488 | resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" 489 | 490 | path-is-absolute@^1.0.0: 491 | version "1.0.1" 492 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 493 | 494 | path-posix@~1.0.0: 495 | version "1.0.0" 496 | resolved "https://registry.yarnpkg.com/path-posix/-/path-posix-1.0.0.tgz#06b26113f56beab042545a23bfa88003ccac260f" 497 | 498 | process-nextick-args@~2.0.0: 499 | version "2.0.0" 500 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 501 | 502 | promise@^7.1.1: 503 | version "7.3.1" 504 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" 505 | dependencies: 506 | asap "~2.0.3" 507 | 508 | prop-types@^15.6.0: 509 | version "15.6.1" 510 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" 511 | dependencies: 512 | fbjs "^0.8.16" 513 | loose-envify "^1.3.1" 514 | object-assign "^4.1.1" 515 | 516 | querystringify@~1.0.0: 517 | version "1.0.0" 518 | resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" 519 | 520 | react-dom@~16.2.0: 521 | version "16.2.0" 522 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" 523 | dependencies: 524 | fbjs "^0.8.16" 525 | loose-envify "^1.1.0" 526 | object-assign "^4.1.1" 527 | prop-types "^15.6.0" 528 | 529 | react@~16.2.0: 530 | version "16.2.0" 531 | resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" 532 | dependencies: 533 | fbjs "^0.8.16" 534 | loose-envify "^1.1.0" 535 | object-assign "^4.1.1" 536 | prop-types "^15.6.0" 537 | 538 | readable-stream@^2.0.2: 539 | version "2.3.6" 540 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 541 | dependencies: 542 | core-util-is "~1.0.0" 543 | inherits "~2.0.3" 544 | isarray "~1.0.0" 545 | process-nextick-args "~2.0.0" 546 | safe-buffer "~5.1.1" 547 | string_decoder "~1.1.1" 548 | util-deprecate "~1.0.1" 549 | 550 | requires-port@1.0.x: 551 | version "1.0.0" 552 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 553 | 554 | rimraf@^2.6.1: 555 | version "2.6.2" 556 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 557 | dependencies: 558 | glob "^7.0.5" 559 | 560 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 561 | version "5.1.2" 562 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 563 | 564 | "safer-buffer@>= 2.1.2 < 3": 565 | version "2.1.2" 566 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 567 | 568 | sanitize-html@~1.14.3: 569 | version "1.14.3" 570 | resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.14.3.tgz#62afd7c2d44ffd604599121d49e25b934e7a5514" 571 | dependencies: 572 | htmlparser2 "^3.9.0" 573 | lodash.escaperegexp "^4.1.2" 574 | xtend "^4.0.0" 575 | 576 | setimmediate@^1.0.5: 577 | version "1.0.5" 578 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 579 | 580 | string_decoder@~1.1.1: 581 | version "1.1.1" 582 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 583 | dependencies: 584 | safe-buffer "~5.1.0" 585 | 586 | typescript@~2.6.0: 587 | version "2.6.2" 588 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" 589 | 590 | ua-parser-js@^0.7.9: 591 | version "0.7.18" 592 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" 593 | 594 | ultron@1.0.x: 595 | version "1.0.2" 596 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" 597 | 598 | url-parse@~1.1.9: 599 | version "1.1.9" 600 | resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.9.tgz#c67f1d775d51f0a18911dd7b3ffad27bb9e5bd19" 601 | dependencies: 602 | querystringify "~1.0.0" 603 | requires-port "1.0.x" 604 | 605 | util-deprecate@~1.0.1: 606 | version "1.0.2" 607 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 608 | 609 | whatwg-fetch@>=0.10.0: 610 | version "2.0.4" 611 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" 612 | 613 | wrappy@1: 614 | version "1.0.2" 615 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 616 | 617 | ws@~1.1.4: 618 | version "1.1.5" 619 | resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" 620 | dependencies: 621 | options ">=0.0.5" 622 | ultron "1.0.x" 623 | 624 | xtend@^4.0.0: 625 | version "4.0.1" 626 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 627 | -------------------------------------------------------------------------------- /4a_kernel_output/.gitignore: -------------------------------------------------------------------------------- 1 | *.bundle.* 2 | lib/ 3 | node_modules/ 4 | *.egg-info/ 5 | .ipynb_checkpoints 6 | -------------------------------------------------------------------------------- /4a_kernel_output/README.md: -------------------------------------------------------------------------------- 1 | # 4a_kernel_output 2 | 3 | minimal lab example 4 | 5 | 6 | ## Prerequisites 7 | 8 | * JupyterLab 9 | 10 | ## Installation 11 | 12 | ```bash 13 | jupyter labextension install 4a_kernel_output 14 | ``` 15 | 16 | ## Development 17 | 18 | For a development install (requires npm version 4 or later), do the following in the repository directory: 19 | 20 | ```bash 21 | npm install 22 | npm run build 23 | jupyter labextension link . 24 | ``` 25 | 26 | To rebuild the package and the JupyterLab app: 27 | 28 | ```bash 29 | npm run build 30 | jupyter lab build 31 | ``` 32 | 33 | -------------------------------------------------------------------------------- /4a_kernel_output/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "4a_kernel_output", 3 | "version": "0.1.0", 4 | "description": "minimal lab example", 5 | "keywords": [ 6 | "jupyter", 7 | "jupyterlab", 8 | "jupyterlab-extension" 9 | ], 10 | "homepage": "https://github.com/my_name/jupyterlab_myextension", 11 | "bugs": { 12 | "url": "https://github.com/my_name/jupyterlab_myextension/issues" 13 | }, 14 | "license": "BSD-3-Clause", 15 | "author": "tuto", 16 | "files": [ 17 | "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", 18 | "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}" 19 | ], 20 | "main": "lib/index.js", 21 | "types": "lib/index.d.ts", 22 | "repository": { 23 | "type": "git", 24 | "url": "https://github.com/my_name/jupyterlab_myextension.git" 25 | }, 26 | "scripts": { 27 | "build": "tsc", 28 | "clean": "rimraf lib", 29 | "watch": "tsc -w" 30 | }, 31 | "dependencies": { 32 | "@jupyterlab/application": "^0.16.0", 33 | "@jupyterlab/outputarea": "*", 34 | "@jupyterlab/mainmenu": "*", 35 | "@jupyterlab/launcher": "*", 36 | "@phosphor/algorithm": "^1.1.2", 37 | "@phosphor/coreutils": "^1.3.0", 38 | "@phosphor/datagrid": "*", 39 | "@phosphor/disposable": "^1.1.2" 40 | }, 41 | "devDependencies": { 42 | "rimraf": "^2.6.1", 43 | "typescript": "~2.6.0" 44 | }, 45 | "jupyterlab": { 46 | "extension": true 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /4a_kernel_output/src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | JupyterLab, JupyterLabPlugin 3 | } from '@jupyterlab/application'; 4 | 5 | import '../style/index.css'; 6 | 7 | import { 8 | ILauncher 9 | } from '@jupyterlab/launcher'; 10 | 11 | import { 12 | IMainMenu 13 | } from '@jupyterlab/mainmenu'; 14 | 15 | import { 16 | Menu 17 | } from '@phosphor/widgets'; 18 | 19 | import { 20 | ICommandPalette 21 | } from '@jupyterlab/apputils'; 22 | 23 | import { 24 | IRenderMimeRegistry 25 | } from '@jupyterlab/rendermime'; 26 | 27 | import { 28 | TutorialPanel 29 | } from './panel' 30 | 31 | 32 | /** 33 | * The command IDs used by the console plugin. 34 | */ 35 | namespace CommandIDs { 36 | export 37 | const create = 'Ex7:create'; 38 | 39 | export 40 | const execute = 'Ex7:execute'; 41 | } 42 | 43 | 44 | /** 45 | * Initialization data for the extension. 46 | */ 47 | const extension: JupyterLabPlugin = { 48 | id: '4a_kernel_output', 49 | autoStart: true, 50 | requires: [ICommandPalette, ILauncher, IMainMenu, IRenderMimeRegistry], 51 | activate: activate 52 | }; 53 | 54 | 55 | function activate( 56 | app: JupyterLab, 57 | palette: ICommandPalette, 58 | launcher: ILauncher, 59 | mainMenu: IMainMenu, 60 | rendermime: IRenderMimeRegistry) 61 | { 62 | const manager = app.serviceManager; 63 | const { commands, shell } = app; 64 | let category = 'Tutorial'; 65 | 66 | // Add launcher 67 | launcher.add({ 68 | displayName: 'launch', 69 | category: category, 70 | callback: createPanel}); 71 | 72 | let panel: TutorialPanel; 73 | 74 | function createPanel() { 75 | return manager.ready 76 | .then(() => { 77 | panel = new TutorialPanel(manager, rendermime); 78 | return panel.session.ready}) 79 | .then(() => { 80 | shell.addToMainArea(panel); 81 | return panel}); 82 | } 83 | 84 | // add menu tab 85 | let tutorialMenu: Menu = new Menu({commands}); 86 | tutorialMenu.title.label = 'Tutorial'; 87 | mainMenu.addMenu(tutorialMenu); 88 | 89 | // add commands to registry 90 | let command = CommandIDs.create 91 | commands.addCommand(command, { 92 | label: 'Ex7: open Panel', 93 | caption: 'Open the Labtutorial Extension', 94 | execute: createPanel}); 95 | 96 | command = CommandIDs.execute 97 | commands.addCommand(command, { 98 | label: 'Ex7: show dataframe', 99 | caption: 'show dataframe', 100 | execute: () => {panel.execute('df')}}); 101 | 102 | // add items in command palette and menu 103 | [ 104 | CommandIDs.create, 105 | CommandIDs.execute 106 | ].forEach(command => { 107 | palette.addItem({ command, category }); 108 | tutorialMenu.addItem({ command }); 109 | }); 110 | } 111 | 112 | export default extension; 113 | -------------------------------------------------------------------------------- /4a_kernel_output/src/panel.ts: -------------------------------------------------------------------------------- 1 | import { 2 | StackedPanel 3 | } from '@phosphor/widgets'; 4 | 5 | import { 6 | ClientSession, IClientSession 7 | } from '@jupyterlab/apputils'; 8 | 9 | import { 10 | KernelMessage 11 | } from '@jupyterlab/services'; 12 | 13 | import { 14 | ServiceManager 15 | } from '@jupyterlab/services'; 16 | 17 | import { 18 | Message 19 | } from '@phosphor/messaging'; 20 | 21 | import { 22 | SimplifiedOutputArea, OutputAreaModel 23 | } from '@jupyterlab/outputarea'; 24 | 25 | import { 26 | RenderMimeRegistry 27 | } from '@jupyterlab/rendermime'; 28 | 29 | /** 30 | * The class name added to console panels. 31 | */ 32 | const PANEL_CLASS = 'jp-RovaPanel'; 33 | 34 | /** 35 | * A panel which contains a console and the ability to add other children. 36 | */ 37 | export 38 | class TutorialPanel extends StackedPanel { 39 | constructor(manager: ServiceManager.IManager, rendermime: RenderMimeRegistry) { 40 | super(); 41 | this.addClass(PANEL_CLASS); 42 | this.id = 'TutorialPanel'; 43 | this.title.label = 'Tutorial View' 44 | this.title.closable = true; 45 | 46 | let path = './console'; 47 | 48 | this._session = new ClientSession({ 49 | manager: manager.sessions, 50 | path, 51 | name: 'Tutorial', 52 | }); 53 | 54 | this._outputareamodel = new OutputAreaModel(); 55 | this._outputarea = new SimplifiedOutputArea({ model: this._outputareamodel, rendermime: rendermime }); 56 | 57 | this.addWidget(this._outputarea); 58 | this._session.initialize(); 59 | } 60 | 61 | dispose(): void { 62 | this._session.dispose(); 63 | super.dispose(); 64 | } 65 | 66 | public execute(code: string) { 67 | SimplifiedOutputArea.execute(code, this._outputarea, this._session) 68 | .then((msg: KernelMessage.IExecuteReplyMsg) => {console.log(msg); }) 69 | } 70 | 71 | protected onCloseRequest(msg: Message): void { 72 | super.onCloseRequest(msg); 73 | this.dispose(); 74 | } 75 | 76 | get session(): IClientSession { 77 | return this._session; 78 | } 79 | 80 | private _session: ClientSession; 81 | private _outputarea: SimplifiedOutputArea; 82 | private _outputareamodel: OutputAreaModel; 83 | } 84 | -------------------------------------------------------------------------------- /4a_kernel_output/style/index.css: -------------------------------------------------------------------------------- 1 | .jp-tutorial-view { 2 | background-color: AliceBlue; 3 | } 4 | 5 | .jp-tutorial-button { 6 | background-color: red; 7 | border-radius: 12px; 8 | border: none; 9 | color: white; 10 | padding: 15px 32px; 11 | margin: 30px; 12 | text-align: center; 13 | text-decoration: none; 14 | display: inline-block; 15 | font-size: 16px; 16 | } 17 | -------------------------------------------------------------------------------- /4a_kernel_output/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "noImplicitAny": true, 5 | "noEmitOnError": true, 6 | "noUnusedLocals": true, 7 | "module": "commonjs", 8 | "jsx": "react", 9 | "moduleResolution": "node", 10 | "target": "ES6", 11 | "outDir": "./lib", 12 | "lib": ["ES6", "ES2015.Promise", "DOM"], 13 | "types": [] 14 | }, 15 | "include": ["src/*"] 16 | } 17 | -------------------------------------------------------------------------------- /4a_kernel_output/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@jupyterlab/application@^0.16.0": 6 | version "0.16.3" 7 | resolved "https://registry.yarnpkg.com/@jupyterlab/application/-/application-0.16.3.tgz#e72ffe71d823525f4411e035d66bc7f202e5bb76" 8 | dependencies: 9 | "@jupyterlab/apputils" "^0.16.4" 10 | "@jupyterlab/coreutils" "^1.1.3" 11 | "@jupyterlab/docregistry" "^0.16.3" 12 | "@jupyterlab/rendermime" "^0.16.3" 13 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 14 | "@jupyterlab/services" "^2.0.3" 15 | "@phosphor/algorithm" "^1.1.2" 16 | "@phosphor/application" "^1.5.0" 17 | "@phosphor/commands" "^1.4.0" 18 | "@phosphor/coreutils" "^1.3.0" 19 | "@phosphor/disposable" "^1.1.2" 20 | "@phosphor/messaging" "^1.2.2" 21 | "@phosphor/properties" "^1.1.2" 22 | "@phosphor/signaling" "^1.2.2" 23 | "@phosphor/widgets" "^1.5.0" 24 | 25 | "@jupyterlab/apputils@^0.16.4": 26 | version "0.16.4" 27 | resolved "https://registry.yarnpkg.com/@jupyterlab/apputils/-/apputils-0.16.4.tgz#e4a1c143d3b085a921ae36f8bad339bbdbeb35fa" 28 | dependencies: 29 | "@jupyterlab/coreutils" "^1.1.3" 30 | "@jupyterlab/services" "^2.0.3" 31 | "@phosphor/algorithm" "^1.1.2" 32 | "@phosphor/commands" "^1.4.0" 33 | "@phosphor/coreutils" "^1.3.0" 34 | "@phosphor/disposable" "^1.1.2" 35 | "@phosphor/domutils" "^1.1.2" 36 | "@phosphor/messaging" "^1.2.2" 37 | "@phosphor/properties" "^1.1.2" 38 | "@phosphor/signaling" "^1.2.2" 39 | "@phosphor/virtualdom" "^1.1.2" 40 | "@phosphor/widgets" "^1.5.0" 41 | "@types/react" "~16.0.19" 42 | react "~16.2.0" 43 | react-dom "~16.2.0" 44 | sanitize-html "~1.14.3" 45 | 46 | "@jupyterlab/codeeditor@^0.16.2": 47 | version "0.16.2" 48 | resolved "https://registry.yarnpkg.com/@jupyterlab/codeeditor/-/codeeditor-0.16.2.tgz#16d436975dc9f5940b07f0d81dc2da3348276c84" 49 | dependencies: 50 | "@jupyterlab/coreutils" "^1.1.3" 51 | "@jupyterlab/observables" "^1.0.10" 52 | "@phosphor/coreutils" "^1.3.0" 53 | "@phosphor/disposable" "^1.1.2" 54 | "@phosphor/messaging" "^1.2.2" 55 | "@phosphor/signaling" "^1.2.2" 56 | "@phosphor/widgets" "^1.5.0" 57 | react "~16.2.0" 58 | react-dom "~16.2.0" 59 | 60 | "@jupyterlab/codemirror@^0.16.3": 61 | version "0.16.3" 62 | resolved "https://registry.yarnpkg.com/@jupyterlab/codemirror/-/codemirror-0.16.3.tgz#50a05d4663478b8b41587c7bea7c8c9b2431e2c7" 63 | dependencies: 64 | "@jupyterlab/apputils" "^0.16.4" 65 | "@jupyterlab/codeeditor" "^0.16.2" 66 | "@jupyterlab/coreutils" "^1.1.3" 67 | "@jupyterlab/observables" "^1.0.10" 68 | "@phosphor/algorithm" "^1.1.2" 69 | "@phosphor/coreutils" "^1.3.0" 70 | "@phosphor/disposable" "^1.1.2" 71 | "@phosphor/signaling" "^1.2.2" 72 | codemirror "~5.35.0" 73 | 74 | "@jupyterlab/coreutils@^1.1.3": 75 | version "1.1.3" 76 | resolved "https://registry.yarnpkg.com/@jupyterlab/coreutils/-/coreutils-1.1.3.tgz#079ff19faeaffcb6cb243c3fb0c737f6ea661b5a" 77 | dependencies: 78 | "@phosphor/algorithm" "^1.1.2" 79 | "@phosphor/coreutils" "^1.3.0" 80 | "@phosphor/disposable" "^1.1.2" 81 | "@phosphor/signaling" "^1.2.2" 82 | ajv "~5.1.6" 83 | comment-json "^1.1.3" 84 | minimist "~1.2.0" 85 | moment "~2.21.0" 86 | path-posix "~1.0.0" 87 | url-parse "~1.1.9" 88 | 89 | "@jupyterlab/docregistry@^0.16.3": 90 | version "0.16.3" 91 | resolved "https://registry.yarnpkg.com/@jupyterlab/docregistry/-/docregistry-0.16.3.tgz#f6f9b0df65724cc3fecc9e62bf8e1b4c92b6639f" 92 | dependencies: 93 | "@jupyterlab/apputils" "^0.16.4" 94 | "@jupyterlab/codeeditor" "^0.16.2" 95 | "@jupyterlab/codemirror" "^0.16.3" 96 | "@jupyterlab/coreutils" "^1.1.3" 97 | "@jupyterlab/observables" "^1.0.10" 98 | "@jupyterlab/rendermime" "^0.16.3" 99 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 100 | "@jupyterlab/services" "^2.0.3" 101 | "@phosphor/algorithm" "^1.1.2" 102 | "@phosphor/coreutils" "^1.3.0" 103 | "@phosphor/disposable" "^1.1.2" 104 | "@phosphor/messaging" "^1.2.2" 105 | "@phosphor/signaling" "^1.2.2" 106 | "@phosphor/widgets" "^1.5.0" 107 | 108 | "@jupyterlab/observables@^1.0.10": 109 | version "1.0.10" 110 | resolved "https://registry.yarnpkg.com/@jupyterlab/observables/-/observables-1.0.10.tgz#dbc9da5988ebf3acc35effd24a1c598b13592fb5" 111 | dependencies: 112 | "@phosphor/algorithm" "^1.1.2" 113 | "@phosphor/coreutils" "^1.3.0" 114 | "@phosphor/disposable" "^1.1.2" 115 | "@phosphor/messaging" "^1.2.2" 116 | "@phosphor/signaling" "^1.2.2" 117 | 118 | "@jupyterlab/rendermime-interfaces@^1.0.10": 119 | version "1.0.10" 120 | resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-1.0.10.tgz#91c088a3e67edbd65a49b115845e0ba02b39c655" 121 | dependencies: 122 | "@phosphor/coreutils" "^1.3.0" 123 | "@phosphor/widgets" "^1.5.0" 124 | 125 | "@jupyterlab/rendermime@^0.16.3": 126 | version "0.16.3" 127 | resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime/-/rendermime-0.16.3.tgz#790949413358b6b148c48993747106c31de8de07" 128 | dependencies: 129 | "@jupyterlab/apputils" "^0.16.4" 130 | "@jupyterlab/codemirror" "^0.16.3" 131 | "@jupyterlab/coreutils" "^1.1.3" 132 | "@jupyterlab/observables" "^1.0.10" 133 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 134 | "@jupyterlab/services" "^2.0.3" 135 | "@phosphor/coreutils" "^1.3.0" 136 | "@phosphor/messaging" "^1.2.2" 137 | "@phosphor/signaling" "^1.2.2" 138 | "@phosphor/widgets" "^1.5.0" 139 | ansi_up "^3.0.0" 140 | marked "~0.3.9" 141 | 142 | "@jupyterlab/services@^2.0.3": 143 | version "2.0.3" 144 | resolved "https://registry.yarnpkg.com/@jupyterlab/services/-/services-2.0.3.tgz#376f06093b693e7d1037d01b5a542ec27a84a052" 145 | dependencies: 146 | "@jupyterlab/coreutils" "^1.1.3" 147 | "@jupyterlab/observables" "^1.0.10" 148 | "@phosphor/algorithm" "^1.1.2" 149 | "@phosphor/coreutils" "^1.3.0" 150 | "@phosphor/disposable" "^1.1.2" 151 | "@phosphor/signaling" "^1.2.2" 152 | node-fetch "~1.7.3" 153 | ws "~1.1.4" 154 | 155 | "@phosphor/algorithm@^1.1.2": 156 | version "1.1.2" 157 | resolved "https://registry.yarnpkg.com/@phosphor/algorithm/-/algorithm-1.1.2.tgz#fd1de9104c9a7f34e92864586ddf2e7f2e7779e8" 158 | 159 | "@phosphor/application@^1.5.0": 160 | version "1.6.0" 161 | resolved "https://registry.yarnpkg.com/@phosphor/application/-/application-1.6.0.tgz#e1f1bf300680f982881d222a77b24ba8589d3fa2" 162 | dependencies: 163 | "@phosphor/commands" "^1.5.0" 164 | "@phosphor/coreutils" "^1.3.0" 165 | "@phosphor/widgets" "^1.6.0" 166 | 167 | "@phosphor/collections@^1.1.2": 168 | version "1.1.2" 169 | resolved "https://registry.yarnpkg.com/@phosphor/collections/-/collections-1.1.2.tgz#c4c0b8b91129905fb36a9f243f2dbbde462dab8d" 170 | dependencies: 171 | "@phosphor/algorithm" "^1.1.2" 172 | 173 | "@phosphor/commands@^1.4.0", "@phosphor/commands@^1.5.0": 174 | version "1.5.0" 175 | resolved "https://registry.yarnpkg.com/@phosphor/commands/-/commands-1.5.0.tgz#68c137008e2d536828405fd4ebab43675d65d42b" 176 | dependencies: 177 | "@phosphor/algorithm" "^1.1.2" 178 | "@phosphor/coreutils" "^1.3.0" 179 | "@phosphor/disposable" "^1.1.2" 180 | "@phosphor/domutils" "^1.1.2" 181 | "@phosphor/keyboard" "^1.1.2" 182 | "@phosphor/signaling" "^1.2.2" 183 | 184 | "@phosphor/coreutils@^1.3.0": 185 | version "1.3.0" 186 | resolved "https://registry.yarnpkg.com/@phosphor/coreutils/-/coreutils-1.3.0.tgz#63292d381c012c5ab0d0196e83ced829b7e04a42" 187 | 188 | "@phosphor/disposable@^1.1.2": 189 | version "1.1.2" 190 | resolved "https://registry.yarnpkg.com/@phosphor/disposable/-/disposable-1.1.2.tgz#a192dd6a2e6c69d5d09d39ecf334dab93778060e" 191 | dependencies: 192 | "@phosphor/algorithm" "^1.1.2" 193 | 194 | "@phosphor/domutils@^1.1.2": 195 | version "1.1.2" 196 | resolved "https://registry.yarnpkg.com/@phosphor/domutils/-/domutils-1.1.2.tgz#e2efeb052f398c42b93b89e9bab26af15cc00514" 197 | 198 | "@phosphor/dragdrop@^1.3.0": 199 | version "1.3.0" 200 | resolved "https://registry.yarnpkg.com/@phosphor/dragdrop/-/dragdrop-1.3.0.tgz#7ce6ad39d6ca216d62a56f78104d02a77ae67307" 201 | dependencies: 202 | "@phosphor/coreutils" "^1.3.0" 203 | "@phosphor/disposable" "^1.1.2" 204 | 205 | "@phosphor/keyboard@^1.1.2": 206 | version "1.1.2" 207 | resolved "https://registry.yarnpkg.com/@phosphor/keyboard/-/keyboard-1.1.2.tgz#3e32234451764240a98e148034d5a8797422dd1f" 208 | 209 | "@phosphor/messaging@^1.2.2": 210 | version "1.2.2" 211 | resolved "https://registry.yarnpkg.com/@phosphor/messaging/-/messaging-1.2.2.tgz#7d896ddd3797b94a347708ded13da5783db75c14" 212 | dependencies: 213 | "@phosphor/algorithm" "^1.1.2" 214 | "@phosphor/collections" "^1.1.2" 215 | 216 | "@phosphor/properties@^1.1.2": 217 | version "1.1.2" 218 | resolved "https://registry.yarnpkg.com/@phosphor/properties/-/properties-1.1.2.tgz#78cc77eff452839da02255de48e814946cc09a28" 219 | 220 | "@phosphor/signaling@^1.2.2": 221 | version "1.2.2" 222 | resolved "https://registry.yarnpkg.com/@phosphor/signaling/-/signaling-1.2.2.tgz#3fcf97ca88e38bfb357fe8fe6bf7513347a514a9" 223 | dependencies: 224 | "@phosphor/algorithm" "^1.1.2" 225 | 226 | "@phosphor/virtualdom@^1.1.2": 227 | version "1.1.2" 228 | resolved "https://registry.yarnpkg.com/@phosphor/virtualdom/-/virtualdom-1.1.2.tgz#ce55c86eef31e5d0e26b1dc96ea32bd684458f41" 229 | dependencies: 230 | "@phosphor/algorithm" "^1.1.2" 231 | 232 | "@phosphor/widgets@^1.5.0", "@phosphor/widgets@^1.6.0": 233 | version "1.6.0" 234 | resolved "https://registry.yarnpkg.com/@phosphor/widgets/-/widgets-1.6.0.tgz#ebba8008b6b13247d03e73e5f3872c90d2c9c78f" 235 | dependencies: 236 | "@phosphor/algorithm" "^1.1.2" 237 | "@phosphor/commands" "^1.5.0" 238 | "@phosphor/coreutils" "^1.3.0" 239 | "@phosphor/disposable" "^1.1.2" 240 | "@phosphor/domutils" "^1.1.2" 241 | "@phosphor/dragdrop" "^1.3.0" 242 | "@phosphor/keyboard" "^1.1.2" 243 | "@phosphor/messaging" "^1.2.2" 244 | "@phosphor/properties" "^1.1.2" 245 | "@phosphor/signaling" "^1.2.2" 246 | "@phosphor/virtualdom" "^1.1.2" 247 | 248 | "@types/react@~16.0.19": 249 | version "16.0.41" 250 | resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.41.tgz#72146737f4d439dc95a53315de4bfb43ac8542ca" 251 | 252 | ajv@~5.1.6: 253 | version "5.1.6" 254 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.1.6.tgz#4b2f1a19dece93d57ac216037e3e9791c7dd1564" 255 | dependencies: 256 | co "^4.6.0" 257 | json-schema-traverse "^0.3.0" 258 | json-stable-stringify "^1.0.1" 259 | 260 | ansi_up@^3.0.0: 261 | version "3.0.0" 262 | resolved "https://registry.yarnpkg.com/ansi_up/-/ansi_up-3.0.0.tgz#27f45d8f457d9ceff59e4ea03c8e6f13c1a303e8" 263 | 264 | asap@~2.0.3: 265 | version "2.0.6" 266 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 267 | 268 | balanced-match@^1.0.0: 269 | version "1.0.0" 270 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 271 | 272 | brace-expansion@^1.1.7: 273 | version "1.1.11" 274 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 275 | dependencies: 276 | balanced-match "^1.0.0" 277 | concat-map "0.0.1" 278 | 279 | co@^4.6.0: 280 | version "4.6.0" 281 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 282 | 283 | codemirror@~5.35.0: 284 | version "5.35.0" 285 | resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.35.0.tgz#280653d495455bc66aa87e6284292b02775ba878" 286 | 287 | comment-json@^1.1.3: 288 | version "1.1.3" 289 | resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-1.1.3.tgz#6986c3330fee0c4c9e00c2398cd61afa5d8f239e" 290 | dependencies: 291 | json-parser "^1.0.0" 292 | 293 | concat-map@0.0.1: 294 | version "0.0.1" 295 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 296 | 297 | core-js@^1.0.0: 298 | version "1.2.7" 299 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" 300 | 301 | core-util-is@~1.0.0: 302 | version "1.0.2" 303 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 304 | 305 | dom-serializer@0: 306 | version "0.1.0" 307 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" 308 | dependencies: 309 | domelementtype "~1.1.1" 310 | entities "~1.1.1" 311 | 312 | domelementtype@1, domelementtype@^1.3.0: 313 | version "1.3.0" 314 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" 315 | 316 | domelementtype@~1.1.1: 317 | version "1.1.3" 318 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" 319 | 320 | domhandler@^2.3.0: 321 | version "2.4.2" 322 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" 323 | dependencies: 324 | domelementtype "1" 325 | 326 | domutils@^1.5.1: 327 | version "1.7.0" 328 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" 329 | dependencies: 330 | dom-serializer "0" 331 | domelementtype "1" 332 | 333 | encoding@^0.1.11: 334 | version "0.1.12" 335 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" 336 | dependencies: 337 | iconv-lite "~0.4.13" 338 | 339 | entities@^1.1.1, entities@~1.1.1: 340 | version "1.1.1" 341 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" 342 | 343 | esprima@^2.7.0: 344 | version "2.7.3" 345 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 346 | 347 | fbjs@^0.8.16: 348 | version "0.8.16" 349 | resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" 350 | dependencies: 351 | core-js "^1.0.0" 352 | isomorphic-fetch "^2.1.1" 353 | loose-envify "^1.0.0" 354 | object-assign "^4.1.0" 355 | promise "^7.1.1" 356 | setimmediate "^1.0.5" 357 | ua-parser-js "^0.7.9" 358 | 359 | fs.realpath@^1.0.0: 360 | version "1.0.0" 361 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 362 | 363 | glob@^7.0.5: 364 | version "7.1.2" 365 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 366 | dependencies: 367 | fs.realpath "^1.0.0" 368 | inflight "^1.0.4" 369 | inherits "2" 370 | minimatch "^3.0.4" 371 | once "^1.3.0" 372 | path-is-absolute "^1.0.0" 373 | 374 | htmlparser2@^3.9.0: 375 | version "3.9.2" 376 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" 377 | dependencies: 378 | domelementtype "^1.3.0" 379 | domhandler "^2.3.0" 380 | domutils "^1.5.1" 381 | entities "^1.1.1" 382 | inherits "^2.0.1" 383 | readable-stream "^2.0.2" 384 | 385 | iconv-lite@~0.4.13: 386 | version "0.4.23" 387 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" 388 | dependencies: 389 | safer-buffer ">= 2.1.2 < 3" 390 | 391 | inflight@^1.0.4: 392 | version "1.0.6" 393 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 394 | dependencies: 395 | once "^1.3.0" 396 | wrappy "1" 397 | 398 | inherits@2, inherits@^2.0.1, inherits@~2.0.3: 399 | version "2.0.3" 400 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 401 | 402 | is-stream@^1.0.1: 403 | version "1.1.0" 404 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 405 | 406 | isarray@~1.0.0: 407 | version "1.0.0" 408 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 409 | 410 | isomorphic-fetch@^2.1.1: 411 | version "2.2.1" 412 | resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" 413 | dependencies: 414 | node-fetch "^1.0.1" 415 | whatwg-fetch ">=0.10.0" 416 | 417 | js-tokens@^3.0.0: 418 | version "3.0.2" 419 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 420 | 421 | json-parser@^1.0.0: 422 | version "1.1.5" 423 | resolved "https://registry.yarnpkg.com/json-parser/-/json-parser-1.1.5.tgz#e62ec5261d1a6a5fc20e812a320740c6d9005677" 424 | dependencies: 425 | esprima "^2.7.0" 426 | 427 | json-schema-traverse@^0.3.0: 428 | version "0.3.1" 429 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 430 | 431 | json-stable-stringify@^1.0.1: 432 | version "1.0.1" 433 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 434 | dependencies: 435 | jsonify "~0.0.0" 436 | 437 | jsonify@~0.0.0: 438 | version "0.0.0" 439 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 440 | 441 | lodash.escaperegexp@^4.1.2: 442 | version "4.1.2" 443 | resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" 444 | 445 | loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: 446 | version "1.3.1" 447 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 448 | dependencies: 449 | js-tokens "^3.0.0" 450 | 451 | marked@~0.3.9: 452 | version "0.3.19" 453 | resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" 454 | 455 | minimatch@^3.0.4: 456 | version "3.0.4" 457 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 458 | dependencies: 459 | brace-expansion "^1.1.7" 460 | 461 | minimist@~1.2.0: 462 | version "1.2.0" 463 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 464 | 465 | moment@~2.21.0: 466 | version "2.21.0" 467 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" 468 | 469 | node-fetch@^1.0.1, node-fetch@~1.7.3: 470 | version "1.7.3" 471 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" 472 | dependencies: 473 | encoding "^0.1.11" 474 | is-stream "^1.0.1" 475 | 476 | object-assign@^4.1.0, object-assign@^4.1.1: 477 | version "4.1.1" 478 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 479 | 480 | once@^1.3.0: 481 | version "1.4.0" 482 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 483 | dependencies: 484 | wrappy "1" 485 | 486 | options@>=0.0.5: 487 | version "0.0.6" 488 | resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" 489 | 490 | path-is-absolute@^1.0.0: 491 | version "1.0.1" 492 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 493 | 494 | path-posix@~1.0.0: 495 | version "1.0.0" 496 | resolved "https://registry.yarnpkg.com/path-posix/-/path-posix-1.0.0.tgz#06b26113f56beab042545a23bfa88003ccac260f" 497 | 498 | process-nextick-args@~2.0.0: 499 | version "2.0.0" 500 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 501 | 502 | promise@^7.1.1: 503 | version "7.3.1" 504 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" 505 | dependencies: 506 | asap "~2.0.3" 507 | 508 | prop-types@^15.6.0: 509 | version "15.6.1" 510 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" 511 | dependencies: 512 | fbjs "^0.8.16" 513 | loose-envify "^1.3.1" 514 | object-assign "^4.1.1" 515 | 516 | querystringify@~1.0.0: 517 | version "1.0.0" 518 | resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" 519 | 520 | react-dom@~16.2.0: 521 | version "16.2.0" 522 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" 523 | dependencies: 524 | fbjs "^0.8.16" 525 | loose-envify "^1.1.0" 526 | object-assign "^4.1.1" 527 | prop-types "^15.6.0" 528 | 529 | react@~16.2.0: 530 | version "16.2.0" 531 | resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" 532 | dependencies: 533 | fbjs "^0.8.16" 534 | loose-envify "^1.1.0" 535 | object-assign "^4.1.1" 536 | prop-types "^15.6.0" 537 | 538 | readable-stream@^2.0.2: 539 | version "2.3.6" 540 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 541 | dependencies: 542 | core-util-is "~1.0.0" 543 | inherits "~2.0.3" 544 | isarray "~1.0.0" 545 | process-nextick-args "~2.0.0" 546 | safe-buffer "~5.1.1" 547 | string_decoder "~1.1.1" 548 | util-deprecate "~1.0.1" 549 | 550 | requires-port@1.0.x: 551 | version "1.0.0" 552 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 553 | 554 | rimraf@^2.6.1: 555 | version "2.6.2" 556 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 557 | dependencies: 558 | glob "^7.0.5" 559 | 560 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 561 | version "5.1.2" 562 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 563 | 564 | "safer-buffer@>= 2.1.2 < 3": 565 | version "2.1.2" 566 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 567 | 568 | sanitize-html@~1.14.3: 569 | version "1.14.3" 570 | resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.14.3.tgz#62afd7c2d44ffd604599121d49e25b934e7a5514" 571 | dependencies: 572 | htmlparser2 "^3.9.0" 573 | lodash.escaperegexp "^4.1.2" 574 | xtend "^4.0.0" 575 | 576 | setimmediate@^1.0.5: 577 | version "1.0.5" 578 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 579 | 580 | string_decoder@~1.1.1: 581 | version "1.1.1" 582 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 583 | dependencies: 584 | safe-buffer "~5.1.0" 585 | 586 | typescript@~2.6.0: 587 | version "2.6.2" 588 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" 589 | 590 | ua-parser-js@^0.7.9: 591 | version "0.7.18" 592 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" 593 | 594 | ultron@1.0.x: 595 | version "1.0.2" 596 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" 597 | 598 | url-parse@~1.1.9: 599 | version "1.1.9" 600 | resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.9.tgz#c67f1d775d51f0a18911dd7b3ffad27bb9e5bd19" 601 | dependencies: 602 | querystringify "~1.0.0" 603 | requires-port "1.0.x" 604 | 605 | util-deprecate@~1.0.1: 606 | version "1.0.2" 607 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 608 | 609 | whatwg-fetch@>=0.10.0: 610 | version "2.0.4" 611 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" 612 | 613 | wrappy@1: 614 | version "1.0.2" 615 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 616 | 617 | ws@~1.1.4: 618 | version "1.1.5" 619 | resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" 620 | dependencies: 621 | options ">=0.0.5" 622 | ultron "1.0.x" 623 | 624 | xtend@^4.0.0: 625 | version "4.0.1" 626 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 627 | -------------------------------------------------------------------------------- /4b_jupyterwidgets/.gitignore: -------------------------------------------------------------------------------- 1 | *.bundle.* 2 | lib/ 3 | node_modules/ 4 | *.egg-info/ 5 | .ipynb_checkpoints 6 | -------------------------------------------------------------------------------- /4b_jupyterwidgets/README.md: -------------------------------------------------------------------------------- 1 | # 4b_jupyterwidgets 2 | 3 | minimal lab example 4 | 5 | 6 | ## Prerequisites 7 | 8 | * JupyterLab 9 | 10 | ## Installation 11 | 12 | ```bash 13 | jupyter labextension install 4b_jupyterwidgets 14 | ``` 15 | 16 | ## Development 17 | 18 | For a development install (requires npm version 4 or later), do the following in the repository directory: 19 | 20 | ```bash 21 | npm install 22 | npm run build 23 | jupyter labextension link . 24 | ``` 25 | 26 | To rebuild the package and the JupyterLab app: 27 | 28 | ```bash 29 | npm run build 30 | jupyter lab build 31 | ``` 32 | -------------------------------------------------------------------------------- /4b_jupyterwidgets/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "4b_jupyterwidgets", 3 | "version": "0.1.0", 4 | "description": "minimal lab example", 5 | "keywords": [ 6 | "jupyter", 7 | "jupyterlab", 8 | "jupyterlab-extension" 9 | ], 10 | "homepage": "https://github.com/my_name/jupyterlab_myextension", 11 | "bugs": { 12 | "url": "https://github.com/my_name/jupyterlab_myextension/issues" 13 | }, 14 | "license": "BSD-3-Clause", 15 | "author": "tuto", 16 | "files": [ 17 | "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", 18 | "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}" 19 | ], 20 | "main": "lib/index.js", 21 | "types": "lib/index.d.ts", 22 | "repository": { 23 | "type": "git", 24 | "url": "https://github.com/my_name/jupyterlab_myextension.git" 25 | }, 26 | "scripts": { 27 | "build": "tsc", 28 | "clean": "rimraf lib", 29 | "watch": "tsc -w" 30 | }, 31 | "dependencies": { 32 | "@jupyterlab/application": "^0.16.0", 33 | "@jupyterlab/outputarea": "*", 34 | "@jupyterlab/notebook": "*", 35 | "@jupyterlab/mainmenu": "*", 36 | "@jupyterlab/launcher": "*" 37 | }, 38 | "devDependencies": { 39 | "rimraf": "^2.6.1", 40 | "typescript": "~2.6.0" 41 | }, 42 | "jupyterlab": { 43 | "extension": true 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /4b_jupyterwidgets/src/index.ts: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | import { 4 | JupyterLab, JupyterLabPlugin 5 | } from '@jupyterlab/application'; 6 | 7 | import '../style/index.css'; 8 | 9 | import { 10 | ILauncher 11 | } from '@jupyterlab/launcher'; 12 | 13 | import { 14 | IMainMenu 15 | } from '@jupyterlab/mainmenu'; 16 | 17 | import { 18 | Menu 19 | } from '@phosphor/widgets'; 20 | 21 | import { 22 | ICommandPalette 23 | } from '@jupyterlab/apputils'; 24 | 25 | import { 26 | INotebookTracker 27 | } from '@jupyterlab/notebook'; 28 | 29 | import { 30 | TutorialPanel 31 | } from './panel' 32 | 33 | /** 34 | * The command IDs used by the console plugin. 35 | */ 36 | namespace CommandIDs { 37 | export 38 | const create = 'Ex8:create'; 39 | 40 | export 41 | const execute = 'Ex8:execute'; 42 | } 43 | 44 | 45 | /** 46 | * Initialization data for the extension. 47 | */ 48 | const extension: JupyterLabPlugin = { 49 | id: '4b_jupyterwidgets', 50 | autoStart: true, 51 | requires: [ICommandPalette, INotebookTracker, ILauncher, IMainMenu], 52 | activate: activate 53 | }; 54 | 55 | 56 | function activate( 57 | app: JupyterLab, 58 | palette: ICommandPalette, 59 | tracker: INotebookTracker, 60 | launcher: ILauncher, 61 | mainMenu: IMainMenu) 62 | { 63 | const manager = app.serviceManager; 64 | const { commands, shell } = app; 65 | let category = 'Tutorial'; 66 | 67 | // Add launcher 68 | launcher.add({ 69 | displayName: 'launch', 70 | category: category, 71 | callback: createPanel}); 72 | 73 | // build panel 74 | let panel: TutorialPanel; 75 | function createPanel() { 76 | let current = tracker.currentWidget; 77 | console.log(current.rendermime); 78 | 79 | return manager.ready 80 | .then(() => { 81 | panel = new TutorialPanel(manager, current.rendermime); 82 | return panel.session.ready}) 83 | .then(() => { 84 | shell.addToMainArea(panel); 85 | return panel}); 86 | } 87 | 88 | // add menu tab 89 | let tutorialMenu: Menu = new Menu({commands}); 90 | tutorialMenu.title.label = 'Tutorial'; 91 | mainMenu.addMenu(tutorialMenu); 92 | 93 | // add commands to registry 94 | let command = CommandIDs.create 95 | commands.addCommand(command, { 96 | label: 'Ex8: open Panel', 97 | caption: 'Open the Labtutorial Extension', 98 | execute: createPanel}); 99 | 100 | let code = 'widget' 101 | command = CommandIDs.execute 102 | commands.addCommand(command, { 103 | label: 'Ex8: show widget', 104 | caption: 'show ipython widget', 105 | execute: () => {panel.execute(code)}}); 106 | 107 | // add items in command palette and menu 108 | [ 109 | CommandIDs.create, 110 | CommandIDs.execute 111 | ].forEach(command => { 112 | palette.addItem({ command, category }); 113 | tutorialMenu.addItem({ command }); 114 | }); 115 | } 116 | 117 | export default extension; 118 | -------------------------------------------------------------------------------- /4b_jupyterwidgets/src/panel.ts: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | import { 4 | StackedPanel 5 | } from '@phosphor/widgets'; 6 | 7 | import { 8 | ClientSession, IClientSession 9 | } from '@jupyterlab/apputils'; 10 | 11 | import { 12 | KernelMessage 13 | } from '@jupyterlab/services'; 14 | 15 | import { 16 | ServiceManager 17 | } from '@jupyterlab/services'; 18 | 19 | import { 20 | Message 21 | } from '@phosphor/messaging'; 22 | 23 | import { 24 | OutputAreaModel, SimplifiedOutputArea, 25 | } from '@jupyterlab/outputarea'; 26 | 27 | import { 28 | RenderMimeRegistry 29 | } from '@jupyterlab/rendermime'; 30 | 31 | /** 32 | * The class name added to console panels. 33 | */ 34 | const PANEL_CLASS = 'jp-RovaPanel'; 35 | 36 | /** 37 | * A panel which contains a console and the ability to add other children. 38 | */ 39 | export 40 | class TutorialPanel extends StackedPanel { 41 | constructor(manager: ServiceManager.IManager, rendermime: RenderMimeRegistry) { 42 | super(); 43 | this.addClass(PANEL_CLASS); 44 | this.id = 'TutorialPanel'; 45 | this.title.label = 'Tutorial View' 46 | this.title.closable = true; 47 | 48 | let path = './console'; 49 | 50 | this._session = new ClientSession({ 51 | manager: manager.sessions, 52 | path, 53 | name: 'Tutorial', 54 | }); 55 | 56 | this._outputareamodel = new OutputAreaModel({ trusted: true }); 57 | this._outputarea = new SimplifiedOutputArea({ model: this._outputareamodel, rendermime: rendermime }); 58 | console.log(rendermime); 59 | this.addWidget(this._outputarea); 60 | this._session.initialize(); 61 | } 62 | 63 | dispose(): void { 64 | this._session.dispose(); 65 | super.dispose(); 66 | } 67 | 68 | public execute(code: string) { 69 | SimplifiedOutputArea.execute(code, this._outputarea, this._session) 70 | .then((msg: KernelMessage.IExecuteReplyMsg) => {console.log(msg); }) 71 | } 72 | 73 | protected onCloseRequest(msg: Message): void { 74 | super.onCloseRequest(msg); 75 | this.dispose(); 76 | } 77 | 78 | get session(): IClientSession { 79 | return this._session; 80 | } 81 | 82 | private _session: ClientSession; 83 | private _outputarea: SimplifiedOutputArea; 84 | private _outputareamodel: OutputAreaModel; 85 | } 86 | -------------------------------------------------------------------------------- /4b_jupyterwidgets/style/index.css: -------------------------------------------------------------------------------- 1 | .jp-tutorial-view { 2 | background-color: AliceBlue; 3 | } 4 | 5 | .jp-tutorial-button { 6 | background-color: red; 7 | border-radius: 12px; 8 | border: none; 9 | color: white; 10 | padding: 15px 32px; 11 | margin: 30px; 12 | text-align: center; 13 | text-decoration: none; 14 | display: inline-block; 15 | font-size: 16px; 16 | } 17 | -------------------------------------------------------------------------------- /4b_jupyterwidgets/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "noImplicitAny": true, 5 | "noEmitOnError": true, 6 | "noUnusedLocals": true, 7 | "module": "commonjs", 8 | "jsx": "react", 9 | "moduleResolution": "node", 10 | "target": "ES6", 11 | "outDir": "./lib", 12 | "lib": ["ES6", "ES2015.Promise", "DOM"], 13 | "types": [] 14 | }, 15 | "include": ["src/*"] 16 | } 17 | -------------------------------------------------------------------------------- /4b_jupyterwidgets/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@jupyterlab/application@^0.16.0": 6 | version "0.16.3" 7 | resolved "https://registry.yarnpkg.com/@jupyterlab/application/-/application-0.16.3.tgz#e72ffe71d823525f4411e035d66bc7f202e5bb76" 8 | dependencies: 9 | "@jupyterlab/apputils" "^0.16.4" 10 | "@jupyterlab/coreutils" "^1.1.3" 11 | "@jupyterlab/docregistry" "^0.16.3" 12 | "@jupyterlab/rendermime" "^0.16.3" 13 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 14 | "@jupyterlab/services" "^2.0.3" 15 | "@phosphor/algorithm" "^1.1.2" 16 | "@phosphor/application" "^1.5.0" 17 | "@phosphor/commands" "^1.4.0" 18 | "@phosphor/coreutils" "^1.3.0" 19 | "@phosphor/disposable" "^1.1.2" 20 | "@phosphor/messaging" "^1.2.2" 21 | "@phosphor/properties" "^1.1.2" 22 | "@phosphor/signaling" "^1.2.2" 23 | "@phosphor/widgets" "^1.5.0" 24 | 25 | "@jupyterlab/apputils@^0.16.4": 26 | version "0.16.4" 27 | resolved "https://registry.yarnpkg.com/@jupyterlab/apputils/-/apputils-0.16.4.tgz#e4a1c143d3b085a921ae36f8bad339bbdbeb35fa" 28 | dependencies: 29 | "@jupyterlab/coreutils" "^1.1.3" 30 | "@jupyterlab/services" "^2.0.3" 31 | "@phosphor/algorithm" "^1.1.2" 32 | "@phosphor/commands" "^1.4.0" 33 | "@phosphor/coreutils" "^1.3.0" 34 | "@phosphor/disposable" "^1.1.2" 35 | "@phosphor/domutils" "^1.1.2" 36 | "@phosphor/messaging" "^1.2.2" 37 | "@phosphor/properties" "^1.1.2" 38 | "@phosphor/signaling" "^1.2.2" 39 | "@phosphor/virtualdom" "^1.1.2" 40 | "@phosphor/widgets" "^1.5.0" 41 | "@types/react" "~16.0.19" 42 | react "~16.2.0" 43 | react-dom "~16.2.0" 44 | sanitize-html "~1.14.3" 45 | 46 | "@jupyterlab/codeeditor@^0.16.2": 47 | version "0.16.2" 48 | resolved "https://registry.yarnpkg.com/@jupyterlab/codeeditor/-/codeeditor-0.16.2.tgz#16d436975dc9f5940b07f0d81dc2da3348276c84" 49 | dependencies: 50 | "@jupyterlab/coreutils" "^1.1.3" 51 | "@jupyterlab/observables" "^1.0.10" 52 | "@phosphor/coreutils" "^1.3.0" 53 | "@phosphor/disposable" "^1.1.2" 54 | "@phosphor/messaging" "^1.2.2" 55 | "@phosphor/signaling" "^1.2.2" 56 | "@phosphor/widgets" "^1.5.0" 57 | react "~16.2.0" 58 | react-dom "~16.2.0" 59 | 60 | "@jupyterlab/codemirror@^0.16.3": 61 | version "0.16.3" 62 | resolved "https://registry.yarnpkg.com/@jupyterlab/codemirror/-/codemirror-0.16.3.tgz#50a05d4663478b8b41587c7bea7c8c9b2431e2c7" 63 | dependencies: 64 | "@jupyterlab/apputils" "^0.16.4" 65 | "@jupyterlab/codeeditor" "^0.16.2" 66 | "@jupyterlab/coreutils" "^1.1.3" 67 | "@jupyterlab/observables" "^1.0.10" 68 | "@phosphor/algorithm" "^1.1.2" 69 | "@phosphor/coreutils" "^1.3.0" 70 | "@phosphor/disposable" "^1.1.2" 71 | "@phosphor/signaling" "^1.2.2" 72 | codemirror "~5.35.0" 73 | 74 | "@jupyterlab/coreutils@^1.1.3": 75 | version "1.1.3" 76 | resolved "https://registry.yarnpkg.com/@jupyterlab/coreutils/-/coreutils-1.1.3.tgz#079ff19faeaffcb6cb243c3fb0c737f6ea661b5a" 77 | dependencies: 78 | "@phosphor/algorithm" "^1.1.2" 79 | "@phosphor/coreutils" "^1.3.0" 80 | "@phosphor/disposable" "^1.1.2" 81 | "@phosphor/signaling" "^1.2.2" 82 | ajv "~5.1.6" 83 | comment-json "^1.1.3" 84 | minimist "~1.2.0" 85 | moment "~2.21.0" 86 | path-posix "~1.0.0" 87 | url-parse "~1.1.9" 88 | 89 | "@jupyterlab/docregistry@^0.16.3": 90 | version "0.16.3" 91 | resolved "https://registry.yarnpkg.com/@jupyterlab/docregistry/-/docregistry-0.16.3.tgz#f6f9b0df65724cc3fecc9e62bf8e1b4c92b6639f" 92 | dependencies: 93 | "@jupyterlab/apputils" "^0.16.4" 94 | "@jupyterlab/codeeditor" "^0.16.2" 95 | "@jupyterlab/codemirror" "^0.16.3" 96 | "@jupyterlab/coreutils" "^1.1.3" 97 | "@jupyterlab/observables" "^1.0.10" 98 | "@jupyterlab/rendermime" "^0.16.3" 99 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 100 | "@jupyterlab/services" "^2.0.3" 101 | "@phosphor/algorithm" "^1.1.2" 102 | "@phosphor/coreutils" "^1.3.0" 103 | "@phosphor/disposable" "^1.1.2" 104 | "@phosphor/messaging" "^1.2.2" 105 | "@phosphor/signaling" "^1.2.2" 106 | "@phosphor/widgets" "^1.5.0" 107 | 108 | "@jupyterlab/observables@^1.0.10": 109 | version "1.0.10" 110 | resolved "https://registry.yarnpkg.com/@jupyterlab/observables/-/observables-1.0.10.tgz#dbc9da5988ebf3acc35effd24a1c598b13592fb5" 111 | dependencies: 112 | "@phosphor/algorithm" "^1.1.2" 113 | "@phosphor/coreutils" "^1.3.0" 114 | "@phosphor/disposable" "^1.1.2" 115 | "@phosphor/messaging" "^1.2.2" 116 | "@phosphor/signaling" "^1.2.2" 117 | 118 | "@jupyterlab/rendermime-interfaces@^1.0.10": 119 | version "1.0.10" 120 | resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-1.0.10.tgz#91c088a3e67edbd65a49b115845e0ba02b39c655" 121 | dependencies: 122 | "@phosphor/coreutils" "^1.3.0" 123 | "@phosphor/widgets" "^1.5.0" 124 | 125 | "@jupyterlab/rendermime@^0.16.3": 126 | version "0.16.3" 127 | resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime/-/rendermime-0.16.3.tgz#790949413358b6b148c48993747106c31de8de07" 128 | dependencies: 129 | "@jupyterlab/apputils" "^0.16.4" 130 | "@jupyterlab/codemirror" "^0.16.3" 131 | "@jupyterlab/coreutils" "^1.1.3" 132 | "@jupyterlab/observables" "^1.0.10" 133 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 134 | "@jupyterlab/services" "^2.0.3" 135 | "@phosphor/coreutils" "^1.3.0" 136 | "@phosphor/messaging" "^1.2.2" 137 | "@phosphor/signaling" "^1.2.2" 138 | "@phosphor/widgets" "^1.5.0" 139 | ansi_up "^3.0.0" 140 | marked "~0.3.9" 141 | 142 | "@jupyterlab/services@^2.0.3": 143 | version "2.0.3" 144 | resolved "https://registry.yarnpkg.com/@jupyterlab/services/-/services-2.0.3.tgz#376f06093b693e7d1037d01b5a542ec27a84a052" 145 | dependencies: 146 | "@jupyterlab/coreutils" "^1.1.3" 147 | "@jupyterlab/observables" "^1.0.10" 148 | "@phosphor/algorithm" "^1.1.2" 149 | "@phosphor/coreutils" "^1.3.0" 150 | "@phosphor/disposable" "^1.1.2" 151 | "@phosphor/signaling" "^1.2.2" 152 | node-fetch "~1.7.3" 153 | ws "~1.1.4" 154 | 155 | "@phosphor/algorithm@^1.1.2": 156 | version "1.1.2" 157 | resolved "https://registry.yarnpkg.com/@phosphor/algorithm/-/algorithm-1.1.2.tgz#fd1de9104c9a7f34e92864586ddf2e7f2e7779e8" 158 | 159 | "@phosphor/application@^1.5.0": 160 | version "1.6.0" 161 | resolved "https://registry.yarnpkg.com/@phosphor/application/-/application-1.6.0.tgz#e1f1bf300680f982881d222a77b24ba8589d3fa2" 162 | dependencies: 163 | "@phosphor/commands" "^1.5.0" 164 | "@phosphor/coreutils" "^1.3.0" 165 | "@phosphor/widgets" "^1.6.0" 166 | 167 | "@phosphor/collections@^1.1.2": 168 | version "1.1.2" 169 | resolved "https://registry.yarnpkg.com/@phosphor/collections/-/collections-1.1.2.tgz#c4c0b8b91129905fb36a9f243f2dbbde462dab8d" 170 | dependencies: 171 | "@phosphor/algorithm" "^1.1.2" 172 | 173 | "@phosphor/commands@^1.4.0", "@phosphor/commands@^1.5.0": 174 | version "1.5.0" 175 | resolved "https://registry.yarnpkg.com/@phosphor/commands/-/commands-1.5.0.tgz#68c137008e2d536828405fd4ebab43675d65d42b" 176 | dependencies: 177 | "@phosphor/algorithm" "^1.1.2" 178 | "@phosphor/coreutils" "^1.3.0" 179 | "@phosphor/disposable" "^1.1.2" 180 | "@phosphor/domutils" "^1.1.2" 181 | "@phosphor/keyboard" "^1.1.2" 182 | "@phosphor/signaling" "^1.2.2" 183 | 184 | "@phosphor/coreutils@^1.3.0": 185 | version "1.3.0" 186 | resolved "https://registry.yarnpkg.com/@phosphor/coreutils/-/coreutils-1.3.0.tgz#63292d381c012c5ab0d0196e83ced829b7e04a42" 187 | 188 | "@phosphor/disposable@^1.1.2": 189 | version "1.1.2" 190 | resolved "https://registry.yarnpkg.com/@phosphor/disposable/-/disposable-1.1.2.tgz#a192dd6a2e6c69d5d09d39ecf334dab93778060e" 191 | dependencies: 192 | "@phosphor/algorithm" "^1.1.2" 193 | 194 | "@phosphor/domutils@^1.1.2": 195 | version "1.1.2" 196 | resolved "https://registry.yarnpkg.com/@phosphor/domutils/-/domutils-1.1.2.tgz#e2efeb052f398c42b93b89e9bab26af15cc00514" 197 | 198 | "@phosphor/dragdrop@^1.3.0": 199 | version "1.3.0" 200 | resolved "https://registry.yarnpkg.com/@phosphor/dragdrop/-/dragdrop-1.3.0.tgz#7ce6ad39d6ca216d62a56f78104d02a77ae67307" 201 | dependencies: 202 | "@phosphor/coreutils" "^1.3.0" 203 | "@phosphor/disposable" "^1.1.2" 204 | 205 | "@phosphor/keyboard@^1.1.2": 206 | version "1.1.2" 207 | resolved "https://registry.yarnpkg.com/@phosphor/keyboard/-/keyboard-1.1.2.tgz#3e32234451764240a98e148034d5a8797422dd1f" 208 | 209 | "@phosphor/messaging@^1.2.2": 210 | version "1.2.2" 211 | resolved "https://registry.yarnpkg.com/@phosphor/messaging/-/messaging-1.2.2.tgz#7d896ddd3797b94a347708ded13da5783db75c14" 212 | dependencies: 213 | "@phosphor/algorithm" "^1.1.2" 214 | "@phosphor/collections" "^1.1.2" 215 | 216 | "@phosphor/properties@^1.1.2": 217 | version "1.1.2" 218 | resolved "https://registry.yarnpkg.com/@phosphor/properties/-/properties-1.1.2.tgz#78cc77eff452839da02255de48e814946cc09a28" 219 | 220 | "@phosphor/signaling@^1.2.2": 221 | version "1.2.2" 222 | resolved "https://registry.yarnpkg.com/@phosphor/signaling/-/signaling-1.2.2.tgz#3fcf97ca88e38bfb357fe8fe6bf7513347a514a9" 223 | dependencies: 224 | "@phosphor/algorithm" "^1.1.2" 225 | 226 | "@phosphor/virtualdom@^1.1.2": 227 | version "1.1.2" 228 | resolved "https://registry.yarnpkg.com/@phosphor/virtualdom/-/virtualdom-1.1.2.tgz#ce55c86eef31e5d0e26b1dc96ea32bd684458f41" 229 | dependencies: 230 | "@phosphor/algorithm" "^1.1.2" 231 | 232 | "@phosphor/widgets@^1.5.0", "@phosphor/widgets@^1.6.0": 233 | version "1.6.0" 234 | resolved "https://registry.yarnpkg.com/@phosphor/widgets/-/widgets-1.6.0.tgz#ebba8008b6b13247d03e73e5f3872c90d2c9c78f" 235 | dependencies: 236 | "@phosphor/algorithm" "^1.1.2" 237 | "@phosphor/commands" "^1.5.0" 238 | "@phosphor/coreutils" "^1.3.0" 239 | "@phosphor/disposable" "^1.1.2" 240 | "@phosphor/domutils" "^1.1.2" 241 | "@phosphor/dragdrop" "^1.3.0" 242 | "@phosphor/keyboard" "^1.1.2" 243 | "@phosphor/messaging" "^1.2.2" 244 | "@phosphor/properties" "^1.1.2" 245 | "@phosphor/signaling" "^1.2.2" 246 | "@phosphor/virtualdom" "^1.1.2" 247 | 248 | "@types/react@~16.0.19": 249 | version "16.0.41" 250 | resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.41.tgz#72146737f4d439dc95a53315de4bfb43ac8542ca" 251 | 252 | ajv@~5.1.6: 253 | version "5.1.6" 254 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.1.6.tgz#4b2f1a19dece93d57ac216037e3e9791c7dd1564" 255 | dependencies: 256 | co "^4.6.0" 257 | json-schema-traverse "^0.3.0" 258 | json-stable-stringify "^1.0.1" 259 | 260 | ansi_up@^3.0.0: 261 | version "3.0.0" 262 | resolved "https://registry.yarnpkg.com/ansi_up/-/ansi_up-3.0.0.tgz#27f45d8f457d9ceff59e4ea03c8e6f13c1a303e8" 263 | 264 | asap@~2.0.3: 265 | version "2.0.6" 266 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 267 | 268 | balanced-match@^1.0.0: 269 | version "1.0.0" 270 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 271 | 272 | brace-expansion@^1.1.7: 273 | version "1.1.11" 274 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 275 | dependencies: 276 | balanced-match "^1.0.0" 277 | concat-map "0.0.1" 278 | 279 | co@^4.6.0: 280 | version "4.6.0" 281 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 282 | 283 | codemirror@~5.35.0: 284 | version "5.35.0" 285 | resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.35.0.tgz#280653d495455bc66aa87e6284292b02775ba878" 286 | 287 | comment-json@^1.1.3: 288 | version "1.1.3" 289 | resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-1.1.3.tgz#6986c3330fee0c4c9e00c2398cd61afa5d8f239e" 290 | dependencies: 291 | json-parser "^1.0.0" 292 | 293 | concat-map@0.0.1: 294 | version "0.0.1" 295 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 296 | 297 | core-js@^1.0.0: 298 | version "1.2.7" 299 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" 300 | 301 | core-util-is@~1.0.0: 302 | version "1.0.2" 303 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 304 | 305 | dom-serializer@0: 306 | version "0.1.0" 307 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" 308 | dependencies: 309 | domelementtype "~1.1.1" 310 | entities "~1.1.1" 311 | 312 | domelementtype@1, domelementtype@^1.3.0: 313 | version "1.3.0" 314 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" 315 | 316 | domelementtype@~1.1.1: 317 | version "1.1.3" 318 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" 319 | 320 | domhandler@^2.3.0: 321 | version "2.4.2" 322 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" 323 | dependencies: 324 | domelementtype "1" 325 | 326 | domutils@^1.5.1: 327 | version "1.7.0" 328 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" 329 | dependencies: 330 | dom-serializer "0" 331 | domelementtype "1" 332 | 333 | encoding@^0.1.11: 334 | version "0.1.12" 335 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" 336 | dependencies: 337 | iconv-lite "~0.4.13" 338 | 339 | entities@^1.1.1, entities@~1.1.1: 340 | version "1.1.1" 341 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" 342 | 343 | esprima@^2.7.0: 344 | version "2.7.3" 345 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 346 | 347 | fbjs@^0.8.16: 348 | version "0.8.16" 349 | resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" 350 | dependencies: 351 | core-js "^1.0.0" 352 | isomorphic-fetch "^2.1.1" 353 | loose-envify "^1.0.0" 354 | object-assign "^4.1.0" 355 | promise "^7.1.1" 356 | setimmediate "^1.0.5" 357 | ua-parser-js "^0.7.9" 358 | 359 | fs.realpath@^1.0.0: 360 | version "1.0.0" 361 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 362 | 363 | glob@^7.0.5: 364 | version "7.1.2" 365 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 366 | dependencies: 367 | fs.realpath "^1.0.0" 368 | inflight "^1.0.4" 369 | inherits "2" 370 | minimatch "^3.0.4" 371 | once "^1.3.0" 372 | path-is-absolute "^1.0.0" 373 | 374 | htmlparser2@^3.9.0: 375 | version "3.9.2" 376 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" 377 | dependencies: 378 | domelementtype "^1.3.0" 379 | domhandler "^2.3.0" 380 | domutils "^1.5.1" 381 | entities "^1.1.1" 382 | inherits "^2.0.1" 383 | readable-stream "^2.0.2" 384 | 385 | iconv-lite@~0.4.13: 386 | version "0.4.23" 387 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" 388 | dependencies: 389 | safer-buffer ">= 2.1.2 < 3" 390 | 391 | inflight@^1.0.4: 392 | version "1.0.6" 393 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 394 | dependencies: 395 | once "^1.3.0" 396 | wrappy "1" 397 | 398 | inherits@2, inherits@^2.0.1, inherits@~2.0.3: 399 | version "2.0.3" 400 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 401 | 402 | is-stream@^1.0.1: 403 | version "1.1.0" 404 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 405 | 406 | isarray@~1.0.0: 407 | version "1.0.0" 408 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 409 | 410 | isomorphic-fetch@^2.1.1: 411 | version "2.2.1" 412 | resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" 413 | dependencies: 414 | node-fetch "^1.0.1" 415 | whatwg-fetch ">=0.10.0" 416 | 417 | js-tokens@^3.0.0: 418 | version "3.0.2" 419 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 420 | 421 | json-parser@^1.0.0: 422 | version "1.1.5" 423 | resolved "https://registry.yarnpkg.com/json-parser/-/json-parser-1.1.5.tgz#e62ec5261d1a6a5fc20e812a320740c6d9005677" 424 | dependencies: 425 | esprima "^2.7.0" 426 | 427 | json-schema-traverse@^0.3.0: 428 | version "0.3.1" 429 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 430 | 431 | json-stable-stringify@^1.0.1: 432 | version "1.0.1" 433 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 434 | dependencies: 435 | jsonify "~0.0.0" 436 | 437 | jsonify@~0.0.0: 438 | version "0.0.0" 439 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 440 | 441 | lodash.escaperegexp@^4.1.2: 442 | version "4.1.2" 443 | resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" 444 | 445 | loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: 446 | version "1.3.1" 447 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 448 | dependencies: 449 | js-tokens "^3.0.0" 450 | 451 | marked@~0.3.9: 452 | version "0.3.19" 453 | resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" 454 | 455 | minimatch@^3.0.4: 456 | version "3.0.4" 457 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 458 | dependencies: 459 | brace-expansion "^1.1.7" 460 | 461 | minimist@~1.2.0: 462 | version "1.2.0" 463 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 464 | 465 | moment@~2.21.0: 466 | version "2.21.0" 467 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" 468 | 469 | node-fetch@^1.0.1, node-fetch@~1.7.3: 470 | version "1.7.3" 471 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" 472 | dependencies: 473 | encoding "^0.1.11" 474 | is-stream "^1.0.1" 475 | 476 | object-assign@^4.1.0, object-assign@^4.1.1: 477 | version "4.1.1" 478 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 479 | 480 | once@^1.3.0: 481 | version "1.4.0" 482 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 483 | dependencies: 484 | wrappy "1" 485 | 486 | options@>=0.0.5: 487 | version "0.0.6" 488 | resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" 489 | 490 | path-is-absolute@^1.0.0: 491 | version "1.0.1" 492 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 493 | 494 | path-posix@~1.0.0: 495 | version "1.0.0" 496 | resolved "https://registry.yarnpkg.com/path-posix/-/path-posix-1.0.0.tgz#06b26113f56beab042545a23bfa88003ccac260f" 497 | 498 | process-nextick-args@~2.0.0: 499 | version "2.0.0" 500 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 501 | 502 | promise@^7.1.1: 503 | version "7.3.1" 504 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" 505 | dependencies: 506 | asap "~2.0.3" 507 | 508 | prop-types@^15.6.0: 509 | version "15.6.1" 510 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" 511 | dependencies: 512 | fbjs "^0.8.16" 513 | loose-envify "^1.3.1" 514 | object-assign "^4.1.1" 515 | 516 | querystringify@~1.0.0: 517 | version "1.0.0" 518 | resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" 519 | 520 | react-dom@~16.2.0: 521 | version "16.2.0" 522 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" 523 | dependencies: 524 | fbjs "^0.8.16" 525 | loose-envify "^1.1.0" 526 | object-assign "^4.1.1" 527 | prop-types "^15.6.0" 528 | 529 | react@~16.2.0: 530 | version "16.2.0" 531 | resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" 532 | dependencies: 533 | fbjs "^0.8.16" 534 | loose-envify "^1.1.0" 535 | object-assign "^4.1.1" 536 | prop-types "^15.6.0" 537 | 538 | readable-stream@^2.0.2: 539 | version "2.3.6" 540 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 541 | dependencies: 542 | core-util-is "~1.0.0" 543 | inherits "~2.0.3" 544 | isarray "~1.0.0" 545 | process-nextick-args "~2.0.0" 546 | safe-buffer "~5.1.1" 547 | string_decoder "~1.1.1" 548 | util-deprecate "~1.0.1" 549 | 550 | requires-port@1.0.x: 551 | version "1.0.0" 552 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 553 | 554 | rimraf@^2.6.1: 555 | version "2.6.2" 556 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 557 | dependencies: 558 | glob "^7.0.5" 559 | 560 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 561 | version "5.1.2" 562 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 563 | 564 | "safer-buffer@>= 2.1.2 < 3": 565 | version "2.1.2" 566 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 567 | 568 | sanitize-html@~1.14.3: 569 | version "1.14.3" 570 | resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.14.3.tgz#62afd7c2d44ffd604599121d49e25b934e7a5514" 571 | dependencies: 572 | htmlparser2 "^3.9.0" 573 | lodash.escaperegexp "^4.1.2" 574 | xtend "^4.0.0" 575 | 576 | setimmediate@^1.0.5: 577 | version "1.0.5" 578 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 579 | 580 | string_decoder@~1.1.1: 581 | version "1.1.1" 582 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 583 | dependencies: 584 | safe-buffer "~5.1.0" 585 | 586 | typescript@~2.6.0: 587 | version "2.6.2" 588 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" 589 | 590 | ua-parser-js@^0.7.9: 591 | version "0.7.18" 592 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" 593 | 594 | ultron@1.0.x: 595 | version "1.0.2" 596 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" 597 | 598 | url-parse@~1.1.9: 599 | version "1.1.9" 600 | resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.9.tgz#c67f1d775d51f0a18911dd7b3ffad27bb9e5bd19" 601 | dependencies: 602 | querystringify "~1.0.0" 603 | requires-port "1.0.x" 604 | 605 | util-deprecate@~1.0.1: 606 | version "1.0.2" 607 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 608 | 609 | whatwg-fetch@>=0.10.0: 610 | version "2.0.4" 611 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" 612 | 613 | wrappy@1: 614 | version "1.0.2" 615 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 616 | 617 | ws@~1.1.4: 618 | version "1.1.5" 619 | resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" 620 | dependencies: 621 | options ">=0.0.5" 622 | ultron "1.0.x" 623 | 624 | xtend@^4.0.0: 625 | version "4.0.1" 626 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 627 | -------------------------------------------------------------------------------- /5_signals_and_buttons/.gitignore: -------------------------------------------------------------------------------- 1 | *.bundle.* 2 | lib/ 3 | node_modules/ 4 | *.egg-info/ 5 | .ipynb_checkpoints 6 | -------------------------------------------------------------------------------- /5_signals_and_buttons/README.md: -------------------------------------------------------------------------------- 1 | # 5_signals_and_buttons 2 | 3 | minimal lab example 4 | 5 | 6 | ## Prerequisites 7 | 8 | * JupyterLab 9 | 10 | ## Installation 11 | 12 | ```bash 13 | jupyter labextension install 5_signals_and_buttons 14 | ``` 15 | 16 | ## Development 17 | 18 | For a development install (requires npm version 4 or later), do the following in the repository directory: 19 | 20 | ```bash 21 | npm install 22 | npm run build 23 | jupyter labextension link . 24 | ``` 25 | 26 | To rebuild the package and the JupyterLab app: 27 | 28 | ```bash 29 | npm run build 30 | jupyter lab build 31 | ``` 32 | 33 | -------------------------------------------------------------------------------- /5_signals_and_buttons/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "5_signals_and_buttons", 3 | "version": "0.1.0", 4 | "description": "minimal lab example", 5 | "keywords": [ 6 | "jupyter", 7 | "jupyterlab", 8 | "jupyterlab-extension" 9 | ], 10 | "homepage": "https://github.com/my_name/jupyterlab_myextension", 11 | "bugs": { 12 | "url": "https://github.com/my_name/jupyterlab_myextension/issues" 13 | }, 14 | "license": "BSD-3-Clause", 15 | "author": "tuto", 16 | "files": [ 17 | "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", 18 | "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}" 19 | ], 20 | "main": "lib/index.js", 21 | "types": "lib/index.d.ts", 22 | "repository": { 23 | "type": "git", 24 | "url": "https://github.com/my_name/jupyterlab_myextension.git" 25 | }, 26 | "scripts": { 27 | "build": "tsc", 28 | "clean": "rimraf lib", 29 | "watch": "tsc -w" 30 | }, 31 | "dependencies": { 32 | "@jupyterlab/application": "^0.16.0", 33 | "@jupyterlab/mainmenu": "*", 34 | "@jupyterlab/launcher": "*", 35 | "@phosphor/algorithm": "^1.1.2", 36 | "@phosphor/coreutils": "^1.3.0", 37 | "@phosphor/datagrid": "*", 38 | "@phosphor/disposable": "^1.1.2" 39 | }, 40 | "devDependencies": { 41 | "rimraf": "^2.6.1", 42 | "typescript": "~2.6.0" 43 | }, 44 | "jupyterlab": { 45 | "extension": true 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /5_signals_and_buttons/src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | JupyterLab, JupyterLabPlugin 3 | } from '@jupyterlab/application'; 4 | 5 | import '../style/index.css'; 6 | 7 | import { 8 | ILauncher 9 | } from '@jupyterlab/launcher'; 10 | 11 | import { 12 | IMainMenu 13 | } from '@jupyterlab/mainmenu'; 14 | 15 | import { 16 | Menu 17 | } from '@phosphor/widgets'; 18 | 19 | import { 20 | ICommandPalette 21 | } from '@jupyterlab/apputils'; 22 | 23 | import { 24 | TutorialPanel 25 | } from './panel' 26 | 27 | 28 | /** 29 | * The command IDs used by the console plugin. 30 | */ 31 | namespace CommandIDs { 32 | export 33 | const create = 'Ex5:create'; 34 | 35 | export 36 | const closeAndShutdown = 'Ex5:close-and-shutdown'; 37 | } 38 | 39 | /** 40 | * Initialization data for the extension. 41 | */ 42 | const extension: JupyterLabPlugin = { 43 | id: '5_signals_and_buttons', 44 | autoStart: true, 45 | requires: [ICommandPalette, ILauncher, IMainMenu], 46 | activate: activate 47 | }; 48 | 49 | 50 | function activate( 51 | app: JupyterLab, 52 | palette: ICommandPalette, 53 | launcher: ILauncher, 54 | mainMenu: IMainMenu) 55 | { 56 | const manager = app.serviceManager; 57 | const { commands, shell } = app; 58 | let category = 'Tutorial'; 59 | 60 | // Add launcher 61 | launcher.add({ 62 | displayName: 'launch', 63 | category: category, 64 | callback: createPanel}); 65 | 66 | function createPanel() { 67 | let panel: TutorialPanel; 68 | return manager.ready 69 | .then(() => { 70 | panel = new TutorialPanel(); 71 | shell.addToMainArea(panel); 72 | return panel}); 73 | } 74 | 75 | // add menu tab 76 | let tutorialMenu: Menu = new Menu({commands}); 77 | tutorialMenu.title.label = 'Tutorial'; 78 | mainMenu.addMenu(tutorialMenu); 79 | 80 | // add commands to registry 81 | let command = CommandIDs.create 82 | commands.addCommand(command, { 83 | label: 'Ex5: open Panel', 84 | caption: 'Open the Labtutorial Extension', 85 | execute: createPanel}); 86 | 87 | command = CommandIDs.closeAndShutdown 88 | commands.addCommand(command, { 89 | label: 'Ex5: close Panel', 90 | caption: 'Close the Labtutorial Extension', 91 | execute: (args) => {console.log('not implemented')}}); 92 | 93 | // add items in command palette and menu 94 | [ 95 | CommandIDs.create, 96 | CommandIDs.closeAndShutdown 97 | ].forEach(command => { 98 | palette.addItem({ command, category }); 99 | tutorialMenu.addItem({ command }); 100 | }); 101 | } 102 | 103 | export default extension; 104 | -------------------------------------------------------------------------------- /5_signals_and_buttons/src/panel.ts: -------------------------------------------------------------------------------- 1 | import { 2 | StackedPanel 3 | } from '@phosphor/widgets'; 4 | 5 | import { 6 | TutorialView 7 | } from './widget'; 8 | /** 9 | * The class name added to console panels. 10 | */ 11 | const PANEL_CLASS = 'jp-RovaPanel'; 12 | 13 | /** 14 | * A panel which contains a console and the ability to add other children. 15 | */ 16 | export 17 | class TutorialPanel extends StackedPanel { 18 | constructor() { 19 | super(); 20 | this.addClass(PANEL_CLASS); 21 | this.id = 'TutorialPanel'; 22 | this.title.label = 'Tutorial View' 23 | this.title.closable = true; 24 | 25 | this.tutorial = new TutorialView(); 26 | this.addWidget(this.tutorial); 27 | this.tutorial.stateChanged.connect(() => { console.log('changed'); }); 28 | } 29 | 30 | private tutorial: TutorialView; 31 | } 32 | -------------------------------------------------------------------------------- /5_signals_and_buttons/src/widget.tsx: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | import * as React from 'react'; 4 | 5 | import { 6 | VDomRenderer 7 | } from '@jupyterlab/apputils'; 8 | 9 | import { 10 | ISignal, Signal 11 | } from '@phosphor/signaling'; 12 | 13 | 14 | export 15 | class TutorialView extends VDomRenderer { 16 | constructor() { 17 | super(); 18 | this.id = `TutorialVDOM` 19 | } 20 | 21 | protected render(): React.ReactElement[] { 22 | const elements: React.ReactElement[] = []; 23 | elements.push( 24 | ); 28 | return elements; 29 | } 30 | 31 | get stateChanged(): ISignal { 32 | return this._stateChanged; 33 | } 34 | 35 | private _stateChanged = new Signal(this); 36 | } 37 | -------------------------------------------------------------------------------- /5_signals_and_buttons/style/index.css: -------------------------------------------------------------------------------- 1 | .jp-tutorial-view { 2 | background-color: AliceBlue; 3 | } 4 | 5 | .jp-tutorial-button { 6 | background-color: red; 7 | border-radius: 12px; 8 | border: none; 9 | color: white; 10 | padding: 15px 32px; 11 | margin: 30px; 12 | text-align: center; 13 | text-decoration: none; 14 | display: inline-block; 15 | font-size: 16px; 16 | } 17 | -------------------------------------------------------------------------------- /5_signals_and_buttons/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "noImplicitAny": true, 5 | "noEmitOnError": true, 6 | "noUnusedLocals": true, 7 | "module": "commonjs", 8 | "jsx": "react", 9 | "moduleResolution": "node", 10 | "target": "ES6", 11 | "outDir": "./lib", 12 | "lib": ["ES6", "ES2015.Promise", "DOM"], 13 | "types": [] 14 | }, 15 | "include": ["src/*"] 16 | } 17 | -------------------------------------------------------------------------------- /6_kernel_messaging/.gitignore: -------------------------------------------------------------------------------- 1 | *.bundle.* 2 | lib/ 3 | node_modules/ 4 | *.egg-info/ 5 | .ipynb_checkpoints 6 | -------------------------------------------------------------------------------- /6_kernel_messaging/README.md: -------------------------------------------------------------------------------- 1 | # 6_kernel_messaging 2 | 3 | minimal lab example 4 | 5 | 6 | ## Prerequisites 7 | 8 | * JupyterLab 9 | 10 | ## Installation 11 | 12 | ```bash 13 | jupyter labextension install 6_kernel_messaging 14 | ``` 15 | 16 | ## Development 17 | 18 | For a development install (requires npm version 4 or later), do the following in the repository directory: 19 | 20 | ```bash 21 | npm install 22 | npm run build 23 | jupyter labextension link . 24 | ``` 25 | 26 | To rebuild the package and the JupyterLab app: 27 | 28 | ```bash 29 | npm run build 30 | jupyter lab build 31 | ``` 32 | 33 | -------------------------------------------------------------------------------- /6_kernel_messaging/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "6_kernel_messaging", 3 | "version": "0.1.0", 4 | "description": "minimal lab example", 5 | "keywords": [ 6 | "jupyter", 7 | "jupyterlab", 8 | "jupyterlab-extension" 9 | ], 10 | "homepage": "https://github.com/my_name/jupyterlab_myextension", 11 | "bugs": { 12 | "url": "https://github.com/my_name/jupyterlab_myextension/issues" 13 | }, 14 | "license": "BSD-3-Clause", 15 | "author": "tuto", 16 | "files": [ 17 | "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", 18 | "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}" 19 | ], 20 | "main": "lib/index.js", 21 | "types": "lib/index.d.ts", 22 | "repository": { 23 | "type": "git", 24 | "url": "https://github.com/my_name/jupyterlab_myextension.git" 25 | }, 26 | "scripts": { 27 | "build": "tsc", 28 | "clean": "rimraf lib", 29 | "watch": "tsc -w" 30 | }, 31 | "dependencies": { 32 | "@jupyterlab/application": "^0.16.0", 33 | "@jupyterlab/mainmenu": "*", 34 | "@jupyterlab/launcher": "*", 35 | "@phosphor/algorithm": "^1.1.2", 36 | "@phosphor/coreutils": "^1.3.0", 37 | "@phosphor/datagrid": "*", 38 | "@phosphor/disposable": "^1.1.2" 39 | }, 40 | "devDependencies": { 41 | "rimraf": "^2.6.1", 42 | "typescript": "~2.6.0" 43 | }, 44 | "jupyterlab": { 45 | "extension": true 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /6_kernel_messaging/src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | JupyterLab, JupyterLabPlugin 3 | } from '@jupyterlab/application'; 4 | 5 | import '../style/index.css'; 6 | 7 | import { 8 | ILauncher 9 | } from '@jupyterlab/launcher'; 10 | 11 | import { 12 | IMainMenu 13 | } from '@jupyterlab/mainmenu'; 14 | 15 | import { 16 | Menu 17 | } from '@phosphor/widgets'; 18 | 19 | import { 20 | ICommandPalette 21 | } from '@jupyterlab/apputils'; 22 | 23 | import { 24 | TutorialPanel 25 | } from './panel' 26 | 27 | 28 | /** 29 | * The command IDs used by the console plugin. 30 | */ 31 | namespace CommandIDs { 32 | export 33 | const create = 'Ex6:create'; 34 | 35 | export 36 | const closeAndShutdown = 'Ex6:close-and-shutdown'; 37 | } 38 | 39 | 40 | /** 41 | * Initialization data for the extension. 42 | */ 43 | const extension: JupyterLabPlugin = { 44 | id: '6_kernel_messaging', 45 | autoStart: true, 46 | requires: [ICommandPalette, ILauncher, IMainMenu], 47 | activate: activate 48 | }; 49 | 50 | 51 | function activate( 52 | app: JupyterLab, 53 | palette: ICommandPalette, 54 | launcher: ILauncher, 55 | mainMenu: IMainMenu) 56 | { 57 | const manager = app.serviceManager; 58 | const { commands, shell } = app; 59 | let category = 'Tutorial'; 60 | 61 | // Add launcher 62 | launcher.add({ 63 | displayName: 'launch', 64 | category: category, 65 | callback: createPanel}); 66 | 67 | function createPanel() { 68 | let panel: TutorialPanel; 69 | return manager.ready 70 | .then(() => { 71 | panel = new TutorialPanel(manager); 72 | return panel.session.ready}) 73 | .then(() => { 74 | shell.addToMainArea(panel); 75 | return panel}); 76 | } 77 | 78 | // add menu tab 79 | let tutorialMenu: Menu = new Menu({commands}); 80 | tutorialMenu.title.label = 'Tutorial'; 81 | mainMenu.addMenu(tutorialMenu); 82 | 83 | // add commands to registry 84 | let command = CommandIDs.create 85 | commands.addCommand(command, { 86 | label: 'Ex6: open Panel', 87 | caption: 'Open the Labtutorial Extension', 88 | execute: createPanel}); 89 | 90 | command = CommandIDs.closeAndShutdown 91 | commands.addCommand(command, { 92 | label: 'Ex6: close Panel', 93 | caption: 'Close the Labtutorial Extension', 94 | execute: (args) => {console.log('not implemented')}}); 95 | 96 | // add items in command palette and menu 97 | [ 98 | CommandIDs.create, 99 | CommandIDs.closeAndShutdown 100 | ].forEach(command => { 101 | palette.addItem({ command, category }); 102 | tutorialMenu.addItem({ command }); 103 | }); 104 | } 105 | 106 | export default extension; 107 | -------------------------------------------------------------------------------- /6_kernel_messaging/src/model.ts: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | import { 4 | VDomModel 5 | } from '@jupyterlab/apputils'; 6 | 7 | import { 8 | Kernel, KernelMessage 9 | } from '@jupyterlab/services'; 10 | 11 | import { 12 | nbformat 13 | } from '@jupyterlab/coreutils'; 14 | 15 | import { 16 | IClientSession 17 | } from '@jupyterlab/apputils'; 18 | 19 | 20 | export 21 | class KernelModel extends VDomModel { 22 | constructor(session: IClientSession) { 23 | super(); 24 | this._session = session; 25 | } 26 | 27 | public execute(code: string) { 28 | this.future = this._session.kernel.requestExecute({ code }); 29 | } 30 | 31 | private _onIOPub = (msg: KernelMessage.IIOPubMessage) => { 32 | let msgType = msg.header.msg_type; 33 | switch (msgType) { 34 | case 'execute_result': 35 | case 'display_data': 36 | case 'update_display_data': 37 | this._output = msg.content as nbformat.IOutput; 38 | console.log(this._output); 39 | this.stateChanged.emit(undefined); 40 | default: 41 | break; 42 | } 43 | return true 44 | } 45 | 46 | get output(): nbformat.IOutput { 47 | return this._output; 48 | } 49 | 50 | get future(): Kernel.IFuture { 51 | return this._future; 52 | } 53 | 54 | set future(value: Kernel.IFuture) { 55 | this._future = value; 56 | value.onIOPub = this._onIOPub; 57 | } 58 | 59 | private _output: nbformat.IOutput = null; 60 | private _future: Kernel.IFuture = null; 61 | private _session: IClientSession; 62 | } 63 | -------------------------------------------------------------------------------- /6_kernel_messaging/src/panel.ts: -------------------------------------------------------------------------------- 1 | import { 2 | StackedPanel 3 | } from '@phosphor/widgets'; 4 | 5 | import { 6 | ClientSession, IClientSession 7 | } from '@jupyterlab/apputils'; 8 | 9 | import { 10 | ServiceManager 11 | } from '@jupyterlab/services'; 12 | 13 | import { 14 | Message 15 | } from '@phosphor/messaging'; 16 | 17 | import { 18 | KernelView 19 | } from './widget'; 20 | 21 | import { 22 | KernelModel 23 | } from './model' 24 | 25 | /** 26 | * The class name added to console panels. 27 | */ 28 | const PANEL_CLASS = 'jp-RovaPanel'; 29 | 30 | /** 31 | * A panel which contains a console and the ability to add other children. 32 | */ 33 | export 34 | class TutorialPanel extends StackedPanel { 35 | constructor(manager: ServiceManager.IManager) { 36 | super(); 37 | this.addClass(PANEL_CLASS); 38 | this.id = 'TutorialPanel'; 39 | this.title.label = 'Tutorial View' 40 | this.title.closable = true; 41 | 42 | let path = './console'; 43 | 44 | this._session = new ClientSession({ 45 | manager: manager.sessions, 46 | path, 47 | name: 'Tutorial', 48 | }); 49 | 50 | this._model = new KernelModel(this._session); 51 | this._tutorial = new KernelView(this._model); 52 | 53 | this.addWidget(this._tutorial); 54 | this._session.initialize(); 55 | } 56 | 57 | dispose(): void { 58 | this._session.dispose(); 59 | super.dispose(); 60 | } 61 | 62 | protected onCloseRequest(msg: Message): void { 63 | super.onCloseRequest(msg); 64 | this.dispose(); 65 | } 66 | 67 | get session(): IClientSession { 68 | return this._session; 69 | } 70 | 71 | private _model: KernelModel; 72 | private _session: ClientSession; 73 | private _tutorial: KernelView; 74 | } 75 | -------------------------------------------------------------------------------- /6_kernel_messaging/src/widget.tsx: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | import * as React from 'react'; 4 | 5 | import { 6 | VDomRenderer 7 | } from '@jupyterlab/apputils'; 8 | 9 | import { 10 | KernelModel 11 | } from './model' 12 | 13 | 14 | export 15 | class KernelView extends VDomRenderer { 16 | constructor(model: KernelModel) { 17 | super(); 18 | this.id = `TutorialVDOM` 19 | this.model = model 20 | } 21 | 22 | protected render(): React.ReactElement[] { 23 | console.log('render'); 24 | const elements: React.ReactElement[] = []; 25 | elements.push( 26 | , 30 | 31 | {JSON.stringify(this.model.output)} 32 | ); 33 | return elements; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /6_kernel_messaging/style/index.css: -------------------------------------------------------------------------------- 1 | .jp-tutorial-view { 2 | background-color: AliceBlue; 3 | } 4 | 5 | .jp-tutorial-button { 6 | background-color: red; 7 | border-radius: 12px; 8 | border: none; 9 | color: white; 10 | padding: 15px 32px; 11 | margin: 30px; 12 | text-align: center; 13 | text-decoration: none; 14 | display: inline-block; 15 | font-size: 16px; 16 | } 17 | -------------------------------------------------------------------------------- /6_kernel_messaging/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "noImplicitAny": true, 5 | "noEmitOnError": true, 6 | "noUnusedLocals": true, 7 | "module": "commonjs", 8 | "jsx": "react", 9 | "moduleResolution": "node", 10 | "target": "ES6", 11 | "outDir": "./lib", 12 | "lib": ["ES6", "ES2015.Promise", "DOM"], 13 | "types": [] 14 | }, 15 | "include": ["src/*"] 16 | } 17 | -------------------------------------------------------------------------------- /6_kernel_messaging/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@jupyterlab/application@^0.16.0": 6 | version "0.16.3" 7 | resolved "https://registry.yarnpkg.com/@jupyterlab/application/-/application-0.16.3.tgz#e72ffe71d823525f4411e035d66bc7f202e5bb76" 8 | dependencies: 9 | "@jupyterlab/apputils" "^0.16.4" 10 | "@jupyterlab/coreutils" "^1.1.3" 11 | "@jupyterlab/docregistry" "^0.16.3" 12 | "@jupyterlab/rendermime" "^0.16.3" 13 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 14 | "@jupyterlab/services" "^2.0.3" 15 | "@phosphor/algorithm" "^1.1.2" 16 | "@phosphor/application" "^1.5.0" 17 | "@phosphor/commands" "^1.4.0" 18 | "@phosphor/coreutils" "^1.3.0" 19 | "@phosphor/disposable" "^1.1.2" 20 | "@phosphor/messaging" "^1.2.2" 21 | "@phosphor/properties" "^1.1.2" 22 | "@phosphor/signaling" "^1.2.2" 23 | "@phosphor/widgets" "^1.5.0" 24 | 25 | "@jupyterlab/apputils@^0.16.4": 26 | version "0.16.4" 27 | resolved "https://registry.yarnpkg.com/@jupyterlab/apputils/-/apputils-0.16.4.tgz#e4a1c143d3b085a921ae36f8bad339bbdbeb35fa" 28 | dependencies: 29 | "@jupyterlab/coreutils" "^1.1.3" 30 | "@jupyterlab/services" "^2.0.3" 31 | "@phosphor/algorithm" "^1.1.2" 32 | "@phosphor/commands" "^1.4.0" 33 | "@phosphor/coreutils" "^1.3.0" 34 | "@phosphor/disposable" "^1.1.2" 35 | "@phosphor/domutils" "^1.1.2" 36 | "@phosphor/messaging" "^1.2.2" 37 | "@phosphor/properties" "^1.1.2" 38 | "@phosphor/signaling" "^1.2.2" 39 | "@phosphor/virtualdom" "^1.1.2" 40 | "@phosphor/widgets" "^1.5.0" 41 | "@types/react" "~16.0.19" 42 | react "~16.2.0" 43 | react-dom "~16.2.0" 44 | sanitize-html "~1.14.3" 45 | 46 | "@jupyterlab/codeeditor@^0.16.2": 47 | version "0.16.2" 48 | resolved "https://registry.yarnpkg.com/@jupyterlab/codeeditor/-/codeeditor-0.16.2.tgz#16d436975dc9f5940b07f0d81dc2da3348276c84" 49 | dependencies: 50 | "@jupyterlab/coreutils" "^1.1.3" 51 | "@jupyterlab/observables" "^1.0.10" 52 | "@phosphor/coreutils" "^1.3.0" 53 | "@phosphor/disposable" "^1.1.2" 54 | "@phosphor/messaging" "^1.2.2" 55 | "@phosphor/signaling" "^1.2.2" 56 | "@phosphor/widgets" "^1.5.0" 57 | react "~16.2.0" 58 | react-dom "~16.2.0" 59 | 60 | "@jupyterlab/codemirror@^0.16.3": 61 | version "0.16.3" 62 | resolved "https://registry.yarnpkg.com/@jupyterlab/codemirror/-/codemirror-0.16.3.tgz#50a05d4663478b8b41587c7bea7c8c9b2431e2c7" 63 | dependencies: 64 | "@jupyterlab/apputils" "^0.16.4" 65 | "@jupyterlab/codeeditor" "^0.16.2" 66 | "@jupyterlab/coreutils" "^1.1.3" 67 | "@jupyterlab/observables" "^1.0.10" 68 | "@phosphor/algorithm" "^1.1.2" 69 | "@phosphor/coreutils" "^1.3.0" 70 | "@phosphor/disposable" "^1.1.2" 71 | "@phosphor/signaling" "^1.2.2" 72 | codemirror "~5.35.0" 73 | 74 | "@jupyterlab/coreutils@^1.1.3": 75 | version "1.1.3" 76 | resolved "https://registry.yarnpkg.com/@jupyterlab/coreutils/-/coreutils-1.1.3.tgz#079ff19faeaffcb6cb243c3fb0c737f6ea661b5a" 77 | dependencies: 78 | "@phosphor/algorithm" "^1.1.2" 79 | "@phosphor/coreutils" "^1.3.0" 80 | "@phosphor/disposable" "^1.1.2" 81 | "@phosphor/signaling" "^1.2.2" 82 | ajv "~5.1.6" 83 | comment-json "^1.1.3" 84 | minimist "~1.2.0" 85 | moment "~2.21.0" 86 | path-posix "~1.0.0" 87 | url-parse "~1.1.9" 88 | 89 | "@jupyterlab/docregistry@^0.16.3": 90 | version "0.16.3" 91 | resolved "https://registry.yarnpkg.com/@jupyterlab/docregistry/-/docregistry-0.16.3.tgz#f6f9b0df65724cc3fecc9e62bf8e1b4c92b6639f" 92 | dependencies: 93 | "@jupyterlab/apputils" "^0.16.4" 94 | "@jupyterlab/codeeditor" "^0.16.2" 95 | "@jupyterlab/codemirror" "^0.16.3" 96 | "@jupyterlab/coreutils" "^1.1.3" 97 | "@jupyterlab/observables" "^1.0.10" 98 | "@jupyterlab/rendermime" "^0.16.3" 99 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 100 | "@jupyterlab/services" "^2.0.3" 101 | "@phosphor/algorithm" "^1.1.2" 102 | "@phosphor/coreutils" "^1.3.0" 103 | "@phosphor/disposable" "^1.1.2" 104 | "@phosphor/messaging" "^1.2.2" 105 | "@phosphor/signaling" "^1.2.2" 106 | "@phosphor/widgets" "^1.5.0" 107 | 108 | "@jupyterlab/observables@^1.0.10": 109 | version "1.0.10" 110 | resolved "https://registry.yarnpkg.com/@jupyterlab/observables/-/observables-1.0.10.tgz#dbc9da5988ebf3acc35effd24a1c598b13592fb5" 111 | dependencies: 112 | "@phosphor/algorithm" "^1.1.2" 113 | "@phosphor/coreutils" "^1.3.0" 114 | "@phosphor/disposable" "^1.1.2" 115 | "@phosphor/messaging" "^1.2.2" 116 | "@phosphor/signaling" "^1.2.2" 117 | 118 | "@jupyterlab/rendermime-interfaces@^1.0.10": 119 | version "1.0.10" 120 | resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-1.0.10.tgz#91c088a3e67edbd65a49b115845e0ba02b39c655" 121 | dependencies: 122 | "@phosphor/coreutils" "^1.3.0" 123 | "@phosphor/widgets" "^1.5.0" 124 | 125 | "@jupyterlab/rendermime@^0.16.3": 126 | version "0.16.3" 127 | resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime/-/rendermime-0.16.3.tgz#790949413358b6b148c48993747106c31de8de07" 128 | dependencies: 129 | "@jupyterlab/apputils" "^0.16.4" 130 | "@jupyterlab/codemirror" "^0.16.3" 131 | "@jupyterlab/coreutils" "^1.1.3" 132 | "@jupyterlab/observables" "^1.0.10" 133 | "@jupyterlab/rendermime-interfaces" "^1.0.10" 134 | "@jupyterlab/services" "^2.0.3" 135 | "@phosphor/coreutils" "^1.3.0" 136 | "@phosphor/messaging" "^1.2.2" 137 | "@phosphor/signaling" "^1.2.2" 138 | "@phosphor/widgets" "^1.5.0" 139 | ansi_up "^3.0.0" 140 | marked "~0.3.9" 141 | 142 | "@jupyterlab/services@^2.0.3": 143 | version "2.0.3" 144 | resolved "https://registry.yarnpkg.com/@jupyterlab/services/-/services-2.0.3.tgz#376f06093b693e7d1037d01b5a542ec27a84a052" 145 | dependencies: 146 | "@jupyterlab/coreutils" "^1.1.3" 147 | "@jupyterlab/observables" "^1.0.10" 148 | "@phosphor/algorithm" "^1.1.2" 149 | "@phosphor/coreutils" "^1.3.0" 150 | "@phosphor/disposable" "^1.1.2" 151 | "@phosphor/signaling" "^1.2.2" 152 | node-fetch "~1.7.3" 153 | ws "~1.1.4" 154 | 155 | "@phosphor/algorithm@^1.1.2": 156 | version "1.1.2" 157 | resolved "https://registry.yarnpkg.com/@phosphor/algorithm/-/algorithm-1.1.2.tgz#fd1de9104c9a7f34e92864586ddf2e7f2e7779e8" 158 | 159 | "@phosphor/application@^1.5.0": 160 | version "1.6.0" 161 | resolved "https://registry.yarnpkg.com/@phosphor/application/-/application-1.6.0.tgz#e1f1bf300680f982881d222a77b24ba8589d3fa2" 162 | dependencies: 163 | "@phosphor/commands" "^1.5.0" 164 | "@phosphor/coreutils" "^1.3.0" 165 | "@phosphor/widgets" "^1.6.0" 166 | 167 | "@phosphor/collections@^1.1.2": 168 | version "1.1.2" 169 | resolved "https://registry.yarnpkg.com/@phosphor/collections/-/collections-1.1.2.tgz#c4c0b8b91129905fb36a9f243f2dbbde462dab8d" 170 | dependencies: 171 | "@phosphor/algorithm" "^1.1.2" 172 | 173 | "@phosphor/commands@^1.4.0", "@phosphor/commands@^1.5.0": 174 | version "1.5.0" 175 | resolved "https://registry.yarnpkg.com/@phosphor/commands/-/commands-1.5.0.tgz#68c137008e2d536828405fd4ebab43675d65d42b" 176 | dependencies: 177 | "@phosphor/algorithm" "^1.1.2" 178 | "@phosphor/coreutils" "^1.3.0" 179 | "@phosphor/disposable" "^1.1.2" 180 | "@phosphor/domutils" "^1.1.2" 181 | "@phosphor/keyboard" "^1.1.2" 182 | "@phosphor/signaling" "^1.2.2" 183 | 184 | "@phosphor/coreutils@^1.3.0": 185 | version "1.3.0" 186 | resolved "https://registry.yarnpkg.com/@phosphor/coreutils/-/coreutils-1.3.0.tgz#63292d381c012c5ab0d0196e83ced829b7e04a42" 187 | 188 | "@phosphor/disposable@^1.1.2": 189 | version "1.1.2" 190 | resolved "https://registry.yarnpkg.com/@phosphor/disposable/-/disposable-1.1.2.tgz#a192dd6a2e6c69d5d09d39ecf334dab93778060e" 191 | dependencies: 192 | "@phosphor/algorithm" "^1.1.2" 193 | 194 | "@phosphor/domutils@^1.1.2": 195 | version "1.1.2" 196 | resolved "https://registry.yarnpkg.com/@phosphor/domutils/-/domutils-1.1.2.tgz#e2efeb052f398c42b93b89e9bab26af15cc00514" 197 | 198 | "@phosphor/dragdrop@^1.3.0": 199 | version "1.3.0" 200 | resolved "https://registry.yarnpkg.com/@phosphor/dragdrop/-/dragdrop-1.3.0.tgz#7ce6ad39d6ca216d62a56f78104d02a77ae67307" 201 | dependencies: 202 | "@phosphor/coreutils" "^1.3.0" 203 | "@phosphor/disposable" "^1.1.2" 204 | 205 | "@phosphor/keyboard@^1.1.2": 206 | version "1.1.2" 207 | resolved "https://registry.yarnpkg.com/@phosphor/keyboard/-/keyboard-1.1.2.tgz#3e32234451764240a98e148034d5a8797422dd1f" 208 | 209 | "@phosphor/messaging@^1.2.2": 210 | version "1.2.2" 211 | resolved "https://registry.yarnpkg.com/@phosphor/messaging/-/messaging-1.2.2.tgz#7d896ddd3797b94a347708ded13da5783db75c14" 212 | dependencies: 213 | "@phosphor/algorithm" "^1.1.2" 214 | "@phosphor/collections" "^1.1.2" 215 | 216 | "@phosphor/properties@^1.1.2": 217 | version "1.1.2" 218 | resolved "https://registry.yarnpkg.com/@phosphor/properties/-/properties-1.1.2.tgz#78cc77eff452839da02255de48e814946cc09a28" 219 | 220 | "@phosphor/signaling@^1.2.2": 221 | version "1.2.2" 222 | resolved "https://registry.yarnpkg.com/@phosphor/signaling/-/signaling-1.2.2.tgz#3fcf97ca88e38bfb357fe8fe6bf7513347a514a9" 223 | dependencies: 224 | "@phosphor/algorithm" "^1.1.2" 225 | 226 | "@phosphor/virtualdom@^1.1.2": 227 | version "1.1.2" 228 | resolved "https://registry.yarnpkg.com/@phosphor/virtualdom/-/virtualdom-1.1.2.tgz#ce55c86eef31e5d0e26b1dc96ea32bd684458f41" 229 | dependencies: 230 | "@phosphor/algorithm" "^1.1.2" 231 | 232 | "@phosphor/widgets@^1.5.0", "@phosphor/widgets@^1.6.0": 233 | version "1.6.0" 234 | resolved "https://registry.yarnpkg.com/@phosphor/widgets/-/widgets-1.6.0.tgz#ebba8008b6b13247d03e73e5f3872c90d2c9c78f" 235 | dependencies: 236 | "@phosphor/algorithm" "^1.1.2" 237 | "@phosphor/commands" "^1.5.0" 238 | "@phosphor/coreutils" "^1.3.0" 239 | "@phosphor/disposable" "^1.1.2" 240 | "@phosphor/domutils" "^1.1.2" 241 | "@phosphor/dragdrop" "^1.3.0" 242 | "@phosphor/keyboard" "^1.1.2" 243 | "@phosphor/messaging" "^1.2.2" 244 | "@phosphor/properties" "^1.1.2" 245 | "@phosphor/signaling" "^1.2.2" 246 | "@phosphor/virtualdom" "^1.1.2" 247 | 248 | "@types/react@~16.0.19": 249 | version "16.0.41" 250 | resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.41.tgz#72146737f4d439dc95a53315de4bfb43ac8542ca" 251 | 252 | ajv@~5.1.6: 253 | version "5.1.6" 254 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.1.6.tgz#4b2f1a19dece93d57ac216037e3e9791c7dd1564" 255 | dependencies: 256 | co "^4.6.0" 257 | json-schema-traverse "^0.3.0" 258 | json-stable-stringify "^1.0.1" 259 | 260 | ansi_up@^3.0.0: 261 | version "3.0.0" 262 | resolved "https://registry.yarnpkg.com/ansi_up/-/ansi_up-3.0.0.tgz#27f45d8f457d9ceff59e4ea03c8e6f13c1a303e8" 263 | 264 | asap@~2.0.3: 265 | version "2.0.6" 266 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 267 | 268 | balanced-match@^1.0.0: 269 | version "1.0.0" 270 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 271 | 272 | brace-expansion@^1.1.7: 273 | version "1.1.11" 274 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 275 | dependencies: 276 | balanced-match "^1.0.0" 277 | concat-map "0.0.1" 278 | 279 | co@^4.6.0: 280 | version "4.6.0" 281 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 282 | 283 | codemirror@~5.35.0: 284 | version "5.35.0" 285 | resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.35.0.tgz#280653d495455bc66aa87e6284292b02775ba878" 286 | 287 | comment-json@^1.1.3: 288 | version "1.1.3" 289 | resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-1.1.3.tgz#6986c3330fee0c4c9e00c2398cd61afa5d8f239e" 290 | dependencies: 291 | json-parser "^1.0.0" 292 | 293 | concat-map@0.0.1: 294 | version "0.0.1" 295 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 296 | 297 | core-js@^1.0.0: 298 | version "1.2.7" 299 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" 300 | 301 | core-util-is@~1.0.0: 302 | version "1.0.2" 303 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 304 | 305 | dom-serializer@0: 306 | version "0.1.0" 307 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" 308 | dependencies: 309 | domelementtype "~1.1.1" 310 | entities "~1.1.1" 311 | 312 | domelementtype@1, domelementtype@^1.3.0: 313 | version "1.3.0" 314 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" 315 | 316 | domelementtype@~1.1.1: 317 | version "1.1.3" 318 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" 319 | 320 | domhandler@^2.3.0: 321 | version "2.4.2" 322 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" 323 | dependencies: 324 | domelementtype "1" 325 | 326 | domutils@^1.5.1: 327 | version "1.7.0" 328 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" 329 | dependencies: 330 | dom-serializer "0" 331 | domelementtype "1" 332 | 333 | encoding@^0.1.11: 334 | version "0.1.12" 335 | resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" 336 | dependencies: 337 | iconv-lite "~0.4.13" 338 | 339 | entities@^1.1.1, entities@~1.1.1: 340 | version "1.1.1" 341 | resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" 342 | 343 | esprima@^2.7.0: 344 | version "2.7.3" 345 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 346 | 347 | fbjs@^0.8.16: 348 | version "0.8.16" 349 | resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" 350 | dependencies: 351 | core-js "^1.0.0" 352 | isomorphic-fetch "^2.1.1" 353 | loose-envify "^1.0.0" 354 | object-assign "^4.1.0" 355 | promise "^7.1.1" 356 | setimmediate "^1.0.5" 357 | ua-parser-js "^0.7.9" 358 | 359 | fs.realpath@^1.0.0: 360 | version "1.0.0" 361 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 362 | 363 | glob@^7.0.5: 364 | version "7.1.2" 365 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 366 | dependencies: 367 | fs.realpath "^1.0.0" 368 | inflight "^1.0.4" 369 | inherits "2" 370 | minimatch "^3.0.4" 371 | once "^1.3.0" 372 | path-is-absolute "^1.0.0" 373 | 374 | htmlparser2@^3.9.0: 375 | version "3.9.2" 376 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" 377 | dependencies: 378 | domelementtype "^1.3.0" 379 | domhandler "^2.3.0" 380 | domutils "^1.5.1" 381 | entities "^1.1.1" 382 | inherits "^2.0.1" 383 | readable-stream "^2.0.2" 384 | 385 | iconv-lite@~0.4.13: 386 | version "0.4.23" 387 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" 388 | dependencies: 389 | safer-buffer ">= 2.1.2 < 3" 390 | 391 | inflight@^1.0.4: 392 | version "1.0.6" 393 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 394 | dependencies: 395 | once "^1.3.0" 396 | wrappy "1" 397 | 398 | inherits@2, inherits@^2.0.1, inherits@~2.0.3: 399 | version "2.0.3" 400 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 401 | 402 | is-stream@^1.0.1: 403 | version "1.1.0" 404 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 405 | 406 | isarray@~1.0.0: 407 | version "1.0.0" 408 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 409 | 410 | isomorphic-fetch@^2.1.1: 411 | version "2.2.1" 412 | resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" 413 | dependencies: 414 | node-fetch "^1.0.1" 415 | whatwg-fetch ">=0.10.0" 416 | 417 | js-tokens@^3.0.0: 418 | version "3.0.2" 419 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 420 | 421 | json-parser@^1.0.0: 422 | version "1.1.5" 423 | resolved "https://registry.yarnpkg.com/json-parser/-/json-parser-1.1.5.tgz#e62ec5261d1a6a5fc20e812a320740c6d9005677" 424 | dependencies: 425 | esprima "^2.7.0" 426 | 427 | json-schema-traverse@^0.3.0: 428 | version "0.3.1" 429 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 430 | 431 | json-stable-stringify@^1.0.1: 432 | version "1.0.1" 433 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 434 | dependencies: 435 | jsonify "~0.0.0" 436 | 437 | jsonify@~0.0.0: 438 | version "0.0.0" 439 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 440 | 441 | lodash.escaperegexp@^4.1.2: 442 | version "4.1.2" 443 | resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" 444 | 445 | loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: 446 | version "1.3.1" 447 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 448 | dependencies: 449 | js-tokens "^3.0.0" 450 | 451 | marked@~0.3.9: 452 | version "0.3.19" 453 | resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" 454 | 455 | minimatch@^3.0.4: 456 | version "3.0.4" 457 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 458 | dependencies: 459 | brace-expansion "^1.1.7" 460 | 461 | minimist@~1.2.0: 462 | version "1.2.0" 463 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 464 | 465 | moment@~2.21.0: 466 | version "2.21.0" 467 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" 468 | 469 | node-fetch@^1.0.1, node-fetch@~1.7.3: 470 | version "1.7.3" 471 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" 472 | dependencies: 473 | encoding "^0.1.11" 474 | is-stream "^1.0.1" 475 | 476 | object-assign@^4.1.0, object-assign@^4.1.1: 477 | version "4.1.1" 478 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 479 | 480 | once@^1.3.0: 481 | version "1.4.0" 482 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 483 | dependencies: 484 | wrappy "1" 485 | 486 | options@>=0.0.5: 487 | version "0.0.6" 488 | resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" 489 | 490 | path-is-absolute@^1.0.0: 491 | version "1.0.1" 492 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 493 | 494 | path-posix@~1.0.0: 495 | version "1.0.0" 496 | resolved "https://registry.yarnpkg.com/path-posix/-/path-posix-1.0.0.tgz#06b26113f56beab042545a23bfa88003ccac260f" 497 | 498 | process-nextick-args@~2.0.0: 499 | version "2.0.0" 500 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 501 | 502 | promise@^7.1.1: 503 | version "7.3.1" 504 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" 505 | dependencies: 506 | asap "~2.0.3" 507 | 508 | prop-types@^15.6.0: 509 | version "15.6.1" 510 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" 511 | dependencies: 512 | fbjs "^0.8.16" 513 | loose-envify "^1.3.1" 514 | object-assign "^4.1.1" 515 | 516 | querystringify@~1.0.0: 517 | version "1.0.0" 518 | resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" 519 | 520 | react-dom@~16.2.0: 521 | version "16.2.0" 522 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" 523 | dependencies: 524 | fbjs "^0.8.16" 525 | loose-envify "^1.1.0" 526 | object-assign "^4.1.1" 527 | prop-types "^15.6.0" 528 | 529 | react@~16.2.0: 530 | version "16.2.0" 531 | resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" 532 | dependencies: 533 | fbjs "^0.8.16" 534 | loose-envify "^1.1.0" 535 | object-assign "^4.1.1" 536 | prop-types "^15.6.0" 537 | 538 | readable-stream@^2.0.2: 539 | version "2.3.6" 540 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 541 | dependencies: 542 | core-util-is "~1.0.0" 543 | inherits "~2.0.3" 544 | isarray "~1.0.0" 545 | process-nextick-args "~2.0.0" 546 | safe-buffer "~5.1.1" 547 | string_decoder "~1.1.1" 548 | util-deprecate "~1.0.1" 549 | 550 | requires-port@1.0.x: 551 | version "1.0.0" 552 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 553 | 554 | rimraf@^2.6.1: 555 | version "2.6.2" 556 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 557 | dependencies: 558 | glob "^7.0.5" 559 | 560 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 561 | version "5.1.2" 562 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 563 | 564 | "safer-buffer@>= 2.1.2 < 3": 565 | version "2.1.2" 566 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 567 | 568 | sanitize-html@~1.14.3: 569 | version "1.14.3" 570 | resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.14.3.tgz#62afd7c2d44ffd604599121d49e25b934e7a5514" 571 | dependencies: 572 | htmlparser2 "^3.9.0" 573 | lodash.escaperegexp "^4.1.2" 574 | xtend "^4.0.0" 575 | 576 | setimmediate@^1.0.5: 577 | version "1.0.5" 578 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 579 | 580 | string_decoder@~1.1.1: 581 | version "1.1.1" 582 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 583 | dependencies: 584 | safe-buffer "~5.1.0" 585 | 586 | typescript@~2.6.0: 587 | version "2.6.2" 588 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" 589 | 590 | ua-parser-js@^0.7.9: 591 | version "0.7.18" 592 | resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" 593 | 594 | ultron@1.0.x: 595 | version "1.0.2" 596 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" 597 | 598 | url-parse@~1.1.9: 599 | version "1.1.9" 600 | resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.9.tgz#c67f1d775d51f0a18911dd7b3ffad27bb9e5bd19" 601 | dependencies: 602 | querystringify "~1.0.0" 603 | requires-port "1.0.x" 604 | 605 | util-deprecate@~1.0.1: 606 | version "1.0.2" 607 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 608 | 609 | whatwg-fetch@>=0.10.0: 610 | version "2.0.4" 611 | resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" 612 | 613 | wrappy@1: 614 | version "1.0.2" 615 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 616 | 617 | ws@~1.1.4: 618 | version "1.1.5" 619 | resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" 620 | dependencies: 621 | options ">=0.0.5" 622 | ultron "1.0.x" 623 | 624 | xtend@^4.0.0: 625 | version "4.0.1" 626 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 627 | -------------------------------------------------------------------------------- /7_serving_files/serving_files_labextension/README.md: -------------------------------------------------------------------------------- 1 | # 1_hello_world 2 | 3 | Minimal lab extension that prints to the console 4 | 5 | ## Prerequisites 6 | 7 | * JupyterLab 8 | 9 | ## Installation 10 | 11 | ```bash 12 | jupyter labextension install 1_hello_world 13 | ``` 14 | 15 | ## Development 16 | 17 | For a development install (requires npm version 4 or later), do the following in the repository directory: 18 | 19 | ```bash 20 | npm install 21 | npm run build 22 | jupyter labextension link . 23 | ``` 24 | 25 | To rebuild the package and the JupyterLab app: 26 | 27 | ```bash 28 | npm run build 29 | jupyter lab build 30 | ``` 31 | 32 | -------------------------------------------------------------------------------- /7_serving_files/serving_files_labextension/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "1_hello_world", 3 | "version": "0.1.0", 4 | "description": "minimal lab example", 5 | "keywords": [ 6 | "jupyter", 7 | "jupyterlab", 8 | "jupyterlab-extension" 9 | ], 10 | "homepage": "https://github.com/my_name/jupyterlab_myextension", 11 | "bugs": { 12 | "url": "https://github.com/my_name/jupyterlab_myextension/issues" 13 | }, 14 | "license": "BSD-3-Clause", 15 | "author": "tuto", 16 | "files": [ 17 | "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", 18 | "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}" 19 | ], 20 | "main": "lib/index.js", 21 | "types": "lib/index.d.ts", 22 | "repository": { 23 | "type": "git", 24 | "url": "https://github.com/my_name/jupyterlab_myextension.git" 25 | }, 26 | "scripts": { 27 | "build": "tsc", 28 | "clean": "rimraf lib", 29 | "watch": "tsc -w" 30 | }, 31 | "dependencies": { 32 | "@jupyterlab/application": "^0.16.0", 33 | "@jupyterlab/apputils": "*", 34 | "@jupyterlab/coreutils": "*", 35 | "@jupyterlab/launcher": "*" 36 | }, 37 | "devDependencies": { 38 | "rimraf": "^2.6.1", 39 | "typescript": "~2.6.0" 40 | }, 41 | "jupyterlab": { 42 | "extension": true 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /7_serving_files/serving_files_labextension/src/index.ts: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | import { 4 | JupyterLab, JupyterLabPlugin 5 | } from '@jupyterlab/application'; 6 | 7 | import { 8 | IFrame 9 | } from '@jupyterlab/apputils'; 10 | 11 | import { 12 | ILauncher 13 | } from '@jupyterlab/launcher'; 14 | 15 | import { 16 | PageConfig 17 | } from '@jupyterlab/coreutils'; 18 | 19 | 20 | const extension: JupyterLabPlugin = { 21 | id: '4b_jupyterwidgets', 22 | autoStart: true, 23 | requires: [ILauncher], 24 | activate: activate 25 | }; 26 | 27 | 28 | function activate( 29 | app: JupyterLab, 30 | launcher: ILauncher) 31 | { 32 | // Add launcher 33 | launcher.add({ 34 | displayName: 'launch', 35 | category: 'Documentation', 36 | callback: createDocumentation}); 37 | 38 | // build panel 39 | function createDocumentation(): IFrame { 40 | let baseUrl = PageConfig.getBaseUrl(); 41 | let iframe = new IFrame(); 42 | iframe.url = baseUrl + 'my_doc/index.html'; 43 | iframe.id = 'Mydoc'; 44 | iframe.title.label = 'My documentation'; 45 | iframe.title.closable = true; 46 | iframe.node.style.overflowY = 'auto'; 47 | app.shell.addToMainArea(iframe); 48 | return iframe 49 | } 50 | } 51 | 52 | export default extension; 53 | -------------------------------------------------------------------------------- /7_serving_files/serving_files_labextension/style/index.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMesch/labextension_tutorial/fb854165fab8b16e70b22f05e32aa7e30df53c5a/7_serving_files/serving_files_labextension/style/index.css -------------------------------------------------------------------------------- /7_serving_files/serving_files_labextension/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "noImplicitAny": true, 5 | "noEmitOnError": true, 6 | "noUnusedLocals": true, 7 | "module": "commonjs", 8 | "moduleResolution": "node", 9 | "target": "ES5", 10 | "outDir": "./lib", 11 | "lib": ["ES5", "ES2015.Promise", "DOM"], 12 | "types": [] 13 | }, 14 | "include": ["src/*"] 15 | } 16 | -------------------------------------------------------------------------------- /7_serving_files/serving_files_nbserverextension/__init__.py: -------------------------------------------------------------------------------- 1 | from notebook.utils import url_path_join 2 | 3 | import os 4 | from tornado.web import StaticFileHandler 5 | 6 | 7 | def _jupyter_server_extension_paths(): 8 | return [{'module': 'jupyterlab_MyDoc'}] 9 | 10 | def load_jupyter_server_extension(nb_server_app): 11 | """ 12 | Called when the extension is loaded. 13 | Args: 14 | nb_server_app (NotebookApp): handle to the Notebook webserver instance. 15 | """ 16 | web_app = nb_server_app.web_app 17 | # Prepend the base_url so that it works in a jupyterhub setting 18 | base_url = web_app.settings['base_url'] 19 | doc_url = url_path_join(base_url, 'my_doc') 20 | 21 | doc_dir = os.path.join(os.path.dirname(__file__), 'static', 'doc', 'html') 22 | 23 | handlers = [(f'{doc_url}/(.*)', 24 | StaticFileHandler, 25 | {'path': doc_dir})] 26 | web_app.add_handlers('.*$', handlers) 27 | -------------------------------------------------------------------------------- /7_serving_files/setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | from setuptools import setup 5 | 6 | PACKAGE_NAME = 'serving_files_nbserverextension' 7 | 8 | setup(name=PACKAGE_NAME, 9 | packages=[PACKAGE_NAME]) 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /images/button_null.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMesch/labextension_tutorial/fb854165fab8b16e70b22f05e32aa7e30df53c5a/images/button_null.png -------------------------------------------------------------------------------- /images/button_with_signal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMesch/labextension_tutorial/fb854165fab8b16e70b22f05e32aa7e30df53c5a/images/button_with_signal.png -------------------------------------------------------------------------------- /images/command_registry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMesch/labextension_tutorial/fb854165fab8b16e70b22f05e32aa7e30df53c5a/images/command_registry.png -------------------------------------------------------------------------------- /images/custom_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMesch/labextension_tutorial/fb854165fab8b16e70b22f05e32aa7e30df53c5a/images/custom_tab.png -------------------------------------------------------------------------------- /images/datagrid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMesch/labextension_tutorial/fb854165fab8b16e70b22f05e32aa7e30df53c5a/images/datagrid.png -------------------------------------------------------------------------------- /images/kernel_extension.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMesch/labextension_tutorial/fb854165fab8b16e70b22f05e32aa7e30df53c5a/images/kernel_extension.gif -------------------------------------------------------------------------------- /images/new_command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMesch/labextension_tutorial/fb854165fab8b16e70b22f05e32aa7e30df53c5a/images/new_command.png -------------------------------------------------------------------------------- /images/new_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMesch/labextension_tutorial/fb854165fab8b16e70b22f05e32aa7e30df53c5a/images/new_menu.png -------------------------------------------------------------------------------- /images/outputarea.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMesch/labextension_tutorial/fb854165fab8b16e70b22f05e32aa7e30df53c5a/images/outputarea.gif -------------------------------------------------------------------------------- /images/qgrid_widget.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MMesch/labextension_tutorial/fb854165fab8b16e70b22f05e32aa7e30df53c5a/images/qgrid_widget.gif --------------------------------------------------------------------------------