From 7eab2e77f944746cfb9c5640e46e8169ac186fce Mon Sep 17 00:00:00 2001 From: telamonian Date: Sun, 24 Feb 2019 14:08:21 -0500 Subject: [PATCH 01/85] first working example of a correctly imported svg --- packages/statusbar/src/components/icon.tsx | 36 +++++++++++++++++++ .../src/defaults/runningSessions.tsx | 6 ++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/packages/statusbar/src/components/icon.tsx b/packages/statusbar/src/components/icon.tsx index 74bcd444c583..7129dac9309b 100644 --- a/packages/statusbar/src/components/icon.tsx +++ b/packages/statusbar/src/components/icon.tsx @@ -33,3 +33,39 @@ export function IconItem(
); } + +// /** +// * A namespace for IconItem statics. +// */ +// export namespace SVGIconItem { +// /** +// * Props for an IconItem +// */ +// export interface IProps { +// /** +// * The inline svg +// */ +// src: string; +// } +// } +// +// export function SVGIconItem( +// props: SVGIconItem.IProps & +// React.HTMLAttributes & { +// offset: { x: number; y: number }; +// } +// ): React.ReactElement { +// const { src, className, offset } = props; +// return ( +// +// ); +// } + +// export default class SVGIcon extends Component { +// render () { +// return ; +// } +// }; diff --git a/packages/statusbar/src/defaults/runningSessions.tsx b/packages/statusbar/src/defaults/runningSessions.tsx index bb9e1d030947..8ee961e49390 100644 --- a/packages/statusbar/src/defaults/runningSessions.tsx +++ b/packages/statusbar/src/defaults/runningSessions.tsx @@ -15,6 +15,8 @@ import { import { GroupItem, IconItem, interactiveItem, TextItem } from '..'; +import KernelIcon from '../../style/kernel-icon.svg'; + /** * Half spacing between subitems in a status item. */ @@ -34,11 +36,11 @@ function RunningSessionsComponent( - + - + ); From d499b7b797cd797abb4aeddfb58c7b650fbb07b9 Mon Sep 17 00:00:00 2001 From: telamonian Date: Sun, 24 Feb 2019 14:36:14 -0500 Subject: [PATCH 02/85] added svg typings --- packages/statusbar/src/svg.d.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/statusbar/src/svg.d.ts diff --git a/packages/statusbar/src/svg.d.ts b/packages/statusbar/src/svg.d.ts new file mode 100644 index 000000000000..38313a16f560 --- /dev/null +++ b/packages/statusbar/src/svg.d.ts @@ -0,0 +1,5 @@ +declare module '*.svg' { + import { HTMLAttributes } from 'react'; + const value: React.ComponentType>; + export default value; +} From 8e6151f1e1c39a15d9183e90d674bfb37599f505 Mon Sep 17 00:00:00 2001 From: telamonian Date: Sun, 24 Feb 2019 14:38:04 -0500 Subject: [PATCH 03/85] made react-svg play nicely with the existing typestyle stuff --- packages/statusbar/src/components/icon.tsx | 59 ++++++++----------- .../src/defaults/runningSessions.tsx | 10 +++- 2 files changed, 32 insertions(+), 37 deletions(-) diff --git a/packages/statusbar/src/components/icon.tsx b/packages/statusbar/src/components/icon.tsx index 7129dac9309b..64d5104980ef 100644 --- a/packages/statusbar/src/components/icon.tsx +++ b/packages/statusbar/src/components/icon.tsx @@ -1,7 +1,7 @@ // Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. -import * as React from 'react'; +import React, { ComponentType, HTMLAttributes } from 'react'; import { classes, style } from 'typestyle/lib'; @@ -34,38 +34,27 @@ export function IconItem( ); } -// /** -// * A namespace for IconItem statics. -// */ -// export namespace SVGIconItem { -// /** -// * Props for an IconItem -// */ -// export interface IProps { -// /** -// * The inline svg -// */ -// src: string; -// } -// } -// -// export function SVGIconItem( -// props: SVGIconItem.IProps & -// React.HTMLAttributes & { -// offset: { x: number; y: number }; -// } -// ): React.ReactElement { -// const { src, className, offset } = props; -// return ( -// -// ); -// } +/** + * A namespace for IconItem statics. + */ +export namespace SVGIconItem { + /** + * Props for an IconItem + */ + export interface IProps { + /** + * The inline svg + */ + Src: ComponentType>; + } +} -// export default class SVGIcon extends Component { -// render () { -// return ; -// } -// }; +export function SVGIconItem( + props: SVGIconItem.IProps & + React.HTMLAttributes & { + offset: { x: number; y: number }; + } +): React.ReactElement { + const { Src, className, offset } = props; + return ; +} diff --git a/packages/statusbar/src/defaults/runningSessions.tsx b/packages/statusbar/src/defaults/runningSessions.tsx index 8ee961e49390..1539743e0ee1 100644 --- a/packages/statusbar/src/defaults/runningSessions.tsx +++ b/packages/statusbar/src/defaults/runningSessions.tsx @@ -13,7 +13,13 @@ import { SessionManager } from '@jupyterlab/services'; -import { GroupItem, IconItem, interactiveItem, TextItem } from '..'; +import { + GroupItem, + IconItem, + SVGIconItem, + interactiveItem, + TextItem +} from '..'; import KernelIcon from '../../style/kernel-icon.svg'; @@ -40,7 +46,7 @@ function RunningSessionsComponent( - + ); From aab64856b1a7ff7fdc65d6549859fbcbeae16cbb Mon Sep 17 00:00:00 2001 From: telamonian Date: Sun, 24 Feb 2019 21:15:27 -0500 Subject: [PATCH 04/85] added tweaks for svg imports to build system --- buildutils/src/build.ts | 5 +---- dev_mode/package.json | 1 + dev_mode/webpack.config.js | 13 ++++++++++++- jupyterlab/staging/webpack.config.js | 13 ++++++++++++- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/buildutils/src/build.ts b/buildutils/src/build.ts index 2e14db75aab3..de622b45a756 100644 --- a/buildutils/src/build.ts +++ b/buildutils/src/build.ts @@ -183,10 +183,7 @@ export namespace Build { }, { test: /\.svg/, - use: [ - { loader: 'svg-url-loader', options: {} }, - { loader: 'svgo-loader', options: { plugins: [] } } - ] + use: [{ loader: 'svg-url-loader', options: { encoding: 'none' } }] }, { test: /\.(png|jpg|gif|ttf|woff|woff2|eot)(\?v=[0-9]\.[0-9]\.[0-9])?$/, diff --git a/dev_mode/package.json b/dev_mode/package.json index ae0b22b451d3..e52bb0c8ba00 100644 --- a/dev_mode/package.json +++ b/dev_mode/package.json @@ -72,6 +72,7 @@ "sort-package-json": "~1.22.1", "source-map-loader": "~0.2.1", "style-loader": "~0.23.1", + "svg-react-loader": "~0.4.6", "svg-url-loader": "~2.3.2", "svgo": "~1.2.1", "svgo-loader": "~2.2.0", diff --git a/dev_mode/webpack.config.js b/dev_mode/webpack.config.js index 78c1769a515d..a128d73076ec 100644 --- a/dev_mode/webpack.config.js +++ b/dev_mode/webpack.config.js @@ -189,8 +189,19 @@ module.exports = [ }, { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, use: 'file-loader' }, { + // in css files, svg is loaded as a url formatted string test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, - use: 'url-loader?limit=10000&mimetype=image/svg+xml' + issuer: { test: /\.css?$/ }, + use: { + loader: 'svg-url-loader', + options: { encoding: 'none', limit: 10000 } + } + }, + { + // in react files, svg is loaded as a react component + test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, + issuer: { test: /\.jsx?$/ }, + use: 'svg-react-loader' } ] }, diff --git a/jupyterlab/staging/webpack.config.js b/jupyterlab/staging/webpack.config.js index 78c1769a515d..a128d73076ec 100644 --- a/jupyterlab/staging/webpack.config.js +++ b/jupyterlab/staging/webpack.config.js @@ -189,8 +189,19 @@ module.exports = [ }, { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, use: 'file-loader' }, { + // in css files, svg is loaded as a url formatted string test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, - use: 'url-loader?limit=10000&mimetype=image/svg+xml' + issuer: { test: /\.css?$/ }, + use: { + loader: 'svg-url-loader', + options: { encoding: 'none', limit: 10000 } + } + }, + { + // in react files, svg is loaded as a react component + test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, + issuer: { test: /\.jsx?$/ }, + use: 'svg-react-loader' } ] }, From 856e7b618fdf542b573aa7fb6294b9ce8819a3a0 Mon Sep 17 00:00:00 2001 From: telamonian Date: Mon, 25 Feb 2019 00:45:42 -0500 Subject: [PATCH 05/85] svg theming is now working, needs a bunch of fixes --- packages/application/style/images.css | 18 ++ packages/notebook/src/svg.d.ts | 5 + packages/notebook/src/truststatus.tsx | 12 +- packages/notebook/style/index.css | 271 +++++++++++++++++- .../notebook/style/not-trusted-icon-dark.svg | 5 - .../notebook/style/not-trusted-icon-light.svg | 5 - packages/notebook/style/not-trusted-icon.svg | 5 + packages/notebook/style/trusted-icon-dark.svg | 4 - .../notebook/style/trusted-icon-light.svg | 4 - packages/notebook/style/trusted-icon.svg | 4 + packages/statusbar/src/components/icon.tsx | 26 +- packages/statusbar/src/defaults/lineCol.tsx | 15 +- .../src/defaults/runningSessions.tsx | 13 +- packages/statusbar/style/kernel-icon.svg | 6 + packages/statusbar/style/line-form.svg | 2 +- packages/statusbar/style/terminal-icon.svg | 4 + 16 files changed, 345 insertions(+), 54 deletions(-) create mode 100644 packages/notebook/src/svg.d.ts delete mode 100644 packages/notebook/style/not-trusted-icon-dark.svg delete mode 100644 packages/notebook/style/not-trusted-icon-light.svg create mode 100644 packages/notebook/style/not-trusted-icon.svg delete mode 100644 packages/notebook/style/trusted-icon-dark.svg delete mode 100644 packages/notebook/style/trusted-icon-light.svg create mode 100644 packages/notebook/style/trusted-icon.svg create mode 100644 packages/statusbar/style/kernel-icon.svg create mode 100644 packages/statusbar/style/terminal-icon.svg diff --git a/packages/application/style/images.css b/packages/application/style/images.css index 6c966fe3036f..a462ba3a6393 100644 --- a/packages/application/style/images.css +++ b/packages/application/style/images.css @@ -3,6 +3,24 @@ | Distributed under the terms of the Modified BSD License. |----------------------------------------------------------------------------*/ +/* CSS for generic svg icons */ +.jp-icon { + fill: var(--jp-ui-font-color0); + stroke: var(--jp-ui-font-color0); +} + +.jp-icon-accent0 { + fill: var(--jp-layout-color0); + stroke: var(--jp-layout-color0); +} + +.jp-icon-accent1 { + fill: var(--jp-layout-color1); + stroke: var(--jp-layout-color1); +} + +/* CSS for specific icons */ + .jp-ImageJupyterLab { background-image: var(--jp-image-jupyterlab); } diff --git a/packages/notebook/src/svg.d.ts b/packages/notebook/src/svg.d.ts new file mode 100644 index 000000000000..38313a16f560 --- /dev/null +++ b/packages/notebook/src/svg.d.ts @@ -0,0 +1,5 @@ +declare module '*.svg' { + import { HTMLAttributes } from 'react'; + const value: React.ComponentType>; + export default value; +} diff --git a/packages/notebook/src/truststatus.tsx b/packages/notebook/src/truststatus.tsx index 99d7b0d0e242..b57e840f38c2 100644 --- a/packages/notebook/src/truststatus.tsx +++ b/packages/notebook/src/truststatus.tsx @@ -6,10 +6,13 @@ import { INotebookModel, Notebook } from '.'; import { Cell } from '@jupyterlab/cells'; -import { IconItem } from '@jupyterlab/statusbar'; +import { SVGIconItem } from '@jupyterlab/statusbar'; import { toArray } from '@phosphor/algorithm'; +import NotTrustedIcon from '../style/not-trusted-icon.svg'; +import TrustedIcon from '../style/trusted-icon.svg'; + /** * Determine the notebook trust status message. */ @@ -44,8 +47,11 @@ function cellTrust( function NotebookTrustComponent( props: NotebookTrustComponent.IProps ): React.ReactElement { - const source = cellTrust(props)[1]; - return ; + if (props.allCellsTrusted) { + return ; + } else { + return ; + } } /** diff --git a/packages/notebook/style/index.css b/packages/notebook/style/index.css index 9927f8adda6c..c38e4dfb0ba3 100644 --- a/packages/notebook/style/index.css +++ b/packages/notebook/style/index.css @@ -3,15 +3,262 @@ | Distributed under the terms of the Modified BSD License. |----------------------------------------------------------------------------*/ -/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */ -@import url('~@jupyterlab/ui-components/style/index.css'); -@import url('~@phosphor/widgets/style/index.css'); -@import url('~@jupyterlab/apputils/style/index.css'); -@import url('~@phosphor/dragdrop/style/index.css'); -@import url('~@jupyterlab/codeeditor/style/index.css'); -@import url('~@jupyterlab/statusbar/style/index.css'); -@import url('~@jupyterlab/rendermime/style/index.css'); -@import url('~@jupyterlab/cells/style/index.css'); -@import url('~@jupyterlab/docregistry/style/index.css'); - -@import url('./base.css'); +/*----------------------------------------------------------------------------- +| Private CSS variables +|----------------------------------------------------------------------------*/ + +:root { + --jp-private-notebook-dragImage-width: 304px; + --jp-private-notebook-dragImage-height: 36px; + --jp-private-notebook-selected-color: var(--md-blue-400); + --jp-private-notebook-active-color: var(--md-green-400); +} + +/*----------------------------------------------------------------------------- +| Imports +|----------------------------------------------------------------------------*/ + +@import './toolbar.css'; + +/*----------------------------------------------------------------------------- +| Notebook +|----------------------------------------------------------------------------*/ + +.jp-NotebookPanel { + display: block; + height: 100%; +} + +.jp-NotebookPanel.jp-Document { + min-width: 240px; + min-height: 120px; +} + +.jp-Notebook { + padding: var(--jp-notebook-padding); + outline: none; + overflow: auto; + background: var(--jp-layout-color0); +} + +.jp-Notebook.jp-mod-scrollPastEnd::after { + display: block; + content: ''; + min-height: var(--jp-notebook-scroll-padding); +} + +.jp-Notebook .jp-Cell { + overflow: visible; +} + +.jp-Notebook .jp-Cell .jp-InputPrompt { + cursor: move; +} + +/*----------------------------------------------------------------------------- +| Notebook state related styling +| +| The notebook and cells each have states, here are the possibilities: +| +| - Notebook +| - Command +| - Edit +| - Cell +| - None +| - Active (only one can be active) +| - Selected (the cells actions are applied to) +| - Multiselected (when multiple selected, the cursor) +| - No outputs +|----------------------------------------------------------------------------*/ + +/* Command or edit modes */ + +.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt { + opacity: var(--jp-cell-prompt-not-active-opacity); + color: var(--jp-cell-prompt-not-active-font-color); +} + +.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt { + opacity: var(--jp-cell-prompt-not-active-opacity); + color: var(--jp-cell-prompt-not-active-font-color); +} + +/* cell is active */ +.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser { + background: var(--jp-brand-color1); +} + +/* collapser is hovered */ +.jp-Notebook .jp-Cell .jp-Collapser:hover { + box-shadow: var(--jp-elevation-z2); + background: var(--jp-brand-color1); + opacity: var(--jp-cell-collapser-not-active-hover-opacity); +} + +/* cell is active and collapser is hovered */ +.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover { + background: var(--jp-brand-color0); + opacity: 1; +} + +/* Command mode */ + +.jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected { + background: var(--jp-notebook-multiselected-color); +} + +.jp-Notebook.jp-mod-commandMode + .jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected) { + background: transparent; +} + +/* Edit mode */ + +.jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor { + border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color); + box-shadow: var(--jp-input-box-shadow); + background-color: var(--jp-cell-editor-active-background); +} + +/*----------------------------------------------------------------------------- +| Notebook drag and drop +|----------------------------------------------------------------------------*/ + +.jp-Notebook-cell.jp-mod-dropSource { + opacity: 0.5; +} + +.jp-Notebook-cell.jp-mod-dropTarget, +.jp-Notebook.jp-mod-commandMode + .jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget { + border-top-color: var(--jp-private-notebook-selected-color); + border-top-style: solid; + border-top-width: 2px; +} + +.jp-dragImage { + display: flex; + flex-direction: row; + width: var(--jp-private-notebook-dragImage-width); + height: var(--jp-private-notebook-dragImage-height); + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + background: var(--jp-cell-editor-background); + overflow: visible; +} + +.jp-dragImage-singlePrompt { + box-shadow: 2px 2px 4px 0px rgba(0, 0, 0, 0.12); +} + +.jp-dragImage .jp-dragImage-content { + flex: 1 1 auto; + z-index: 2; + font-size: var(--jp-code-font-size); + font-family: var(--jp-code-font-family); + line-height: var(--jp-code-line-height); + padding: var(--jp-code-padding); + border: var(--jp-border-width) solid var(--jp-cell-editor-border-color); + background: var(--jp-cell-editor-background-color); + color: var(--jp-content-font-color3); + text-align: left; + margin: 4px 4px 4px 0px; +} + +.jp-dragImage .jp-dragImage-prompt { + flex: 0 0 auto; + min-width: 36px; + color: var(--jp-cell-inprompt-font-color); + padding: var(--jp-code-padding); + padding-left: 12px; + font-family: var(--jp-cell-prompt-font-family); + letter-spacing: var(--jp-cell-prompt-letter-spacing); + line-height: 1.9; + font-size: var(--jp-code-font-size); + border: var(--jp-border-width) solid transparent; +} + +.jp-dragImage-multipleBack { + z-index: -1; + position: absolute; + height: 32px; + width: 300px; + top: 8px; + left: 8px; + background: var(--jp-layout-color2); + border: var(--jp-border-width) solid var(--jp-input-border-color); + box-shadow: 2px 2px 4px 0px rgba(0, 0, 0, 0.12); +} + +/*----------------------------------------------------------------------------- +| Cell toolbar +|----------------------------------------------------------------------------*/ + +.jp-NotebookTools { + display: block; + min-width: var(--jp-sidebar-min-width); + color: var(--jp-ui-font-color1); + background: var(--jp-layout-color1); + /* This is needed so that all font sizing of children done in ems is + * relative to this base size */ + font-size: var(--jp-ui-font-size1); + overflow: auto; +} + +.jp-ActiveCellTool { + padding: 12px; + background-color: var(--jp-layout-color1); + border-top: none !important; +} + +.jp-ActiveCellTool .jp-InputArea-prompt { + flex: 0 0 auto; + padding-left: 0px; +} + +.jp-ActiveCellTool .jp-InputArea-editor { + flex: 1 1 auto; + background: var(--jp-cell-editor-background); + border-color: var(--jp-cell-editor-border-color); +} + +.jp-ActiveCellTool .jp-InputArea-editor .CodeMirror { + background: transparent; +} + +.jp-MetadataEditorTool { + flex-direction: column; + padding: 12px 0px 12px 0px; +} + +.jp-RankedPanel > :not(:first-child) { + margin-top: 12px; +} + +.jp-KeySelector { + padding: 0px 12px 0 12px; +} + +.jp-KeySelector select.jp-mod-styled { + font-size: var(--jp-ui-font-size1); + color: var(--jp-ui-font-color0); + border: var(--jp-border-width) solid var(--jp-border-color1); +} + +.jp-KeySelector label, +.jp-MetadataEditorTool label { + line-height: 1.4; +} + +/*----------------------------------------------------------------------------- +| Presentation Mode (.jp-mod-presentationMode) +|----------------------------------------------------------------------------*/ + +.jp-mod-presentationMode .jp-Notebook { + --jp-content-font-size1: var(--jp-content-presentation-font-size1); + --jp-code-font-size: var(--jp-code-presentation-font-size); +} + +.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt, +.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt { + flex: 0 0 110px; +} diff --git a/packages/notebook/style/not-trusted-icon-dark.svg b/packages/notebook/style/not-trusted-icon-dark.svg deleted file mode 100644 index 8439a93c6e70..000000000000 --- a/packages/notebook/style/not-trusted-icon-dark.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/packages/notebook/style/not-trusted-icon-light.svg b/packages/notebook/style/not-trusted-icon-light.svg deleted file mode 100644 index cb63b74c2de6..000000000000 --- a/packages/notebook/style/not-trusted-icon-light.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/packages/notebook/style/not-trusted-icon.svg b/packages/notebook/style/not-trusted-icon.svg new file mode 100644 index 000000000000..e3de1ed45dd9 --- /dev/null +++ b/packages/notebook/style/not-trusted-icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/notebook/style/trusted-icon-dark.svg b/packages/notebook/style/trusted-icon-dark.svg deleted file mode 100644 index b92040c37a58..000000000000 --- a/packages/notebook/style/trusted-icon-dark.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/packages/notebook/style/trusted-icon-light.svg b/packages/notebook/style/trusted-icon-light.svg deleted file mode 100644 index 7f4fc23bac83..000000000000 --- a/packages/notebook/style/trusted-icon-light.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/packages/notebook/style/trusted-icon.svg b/packages/notebook/style/trusted-icon.svg new file mode 100644 index 000000000000..b7ae40ec21c9 --- /dev/null +++ b/packages/notebook/style/trusted-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/statusbar/src/components/icon.tsx b/packages/statusbar/src/components/icon.tsx index 64d5104980ef..a5c9557ee170 100644 --- a/packages/statusbar/src/components/icon.tsx +++ b/packages/statusbar/src/components/icon.tsx @@ -35,26 +35,40 @@ export function IconItem( } /** - * A namespace for IconItem statics. + * A namespace for SVGIconItem statics. */ export namespace SVGIconItem { /** - * Props for an IconItem + * Props for an SVGIconItem */ export interface IProps { /** * The inline svg */ - Src: ComponentType>; + SVG: ComponentType>; } } export function SVGIconItem( props: SVGIconItem.IProps & - React.HTMLAttributes & { + React.HTMLAttributes & { offset: { x: number; y: number }; } ): React.ReactElement { - const { Src, className, offset } = props; - return ; + const { SVG, className, offset, ...rest } = props; + return ; +} + +export function SVGInputItem( + props: SVGIconItem.IProps & + React.HTMLAttributes & + React.HTMLAttributes +): React.ReactElement { + const { SVG, className, ...rest } = props; + return ( + + ); } diff --git a/packages/statusbar/src/defaults/lineCol.tsx b/packages/statusbar/src/defaults/lineCol.tsx index 2240c2da940c..68969f043d88 100644 --- a/packages/statusbar/src/defaults/lineCol.tsx +++ b/packages/statusbar/src/defaults/lineCol.tsx @@ -20,6 +20,8 @@ import { import { classes } from 'typestyle/lib'; +import LineFormIcon from '../../style/line-form.svg'; + /** * A namespace for LineFormComponent statics. */ @@ -112,11 +114,14 @@ class LineFormComponent extends React.Component< }} /> - +
+ + +