diff --git a/src/mol-plugin-ui/base.tsx b/src/mol-plugin-ui/base.tsx index 38d3977f1b6eecf3d819ab8e038ef5ea36cf048c..28fe002390df11d8ef0589df2b27ed5fc3047216 100644 --- a/src/mol-plugin-ui/base.tsx +++ b/src/mol-plugin-ui/base.tsx @@ -8,6 +8,7 @@ import * as React from 'react'; import { Observable, Subscription } from 'rxjs'; import { PluginContext } from '../mol-plugin/context'; +import { Icon } from './controls/icons'; export const PluginReactContext = React.createContext(void 0 as any as PluginContext); @@ -86,7 +87,7 @@ export abstract class CollapsableControls<P = {}, S = {}, SS = {}> extends Plugi return <div className={wrapClass}> <div className='msp-transform-header'> <button className='msp-btn msp-btn-block msp-btn-collapse' onClick={this.toggleCollapsed}> - <span className={`msp-icon msp-icon-${this.state.isCollapsed ? 'expand' : 'collapse'}`} /> + <Icon name={this.state.isCollapsed ? 'expand' : 'collapse'} /> {this.state.header} </button> </div> diff --git a/src/mol-plugin-ui/camera.tsx b/src/mol-plugin-ui/camera.tsx index e41f9819e9de99208ba442b0d62925d9fd50c9c6..db0d87d70d8335bdc0a5418ba85dfcdf0d68d387 100644 --- a/src/mol-plugin-ui/camera.tsx +++ b/src/mol-plugin-ui/camera.tsx @@ -9,7 +9,7 @@ import * as React from 'react'; import { PluginUIComponent } from './base'; import { ParamDefinition as PD } from '../mol-util/param-definition'; import { ParameterControls } from './controls/parameters'; -import { Icon } from './controls/common'; +import { Icon } from './controls/icons'; export class CameraSnapshots extends PluginUIComponent<{ }, { }> { render() { @@ -69,7 +69,7 @@ class CameraSnapshotList extends PluginUIComponent<{ }, { }> { {this.plugin.state.cameraSnapshots.state.entries.valueSeq().map(e =><li key={e!.id}> <button className='msp-btn msp-btn-block msp-form-control' onClick={this.apply(e!.id)}>{e!.name || e!.timestamp} <small>{e!.description}</small></button> <button onClick={this.remove(e!.id)} className='msp-btn msp-btn-link msp-state-list-remove-button'> - <span className='msp-icon msp-icon-remove' /> + <Icon name='remove' /> </button> </li>)} </ul>; diff --git a/src/mol-plugin-ui/controls.tsx b/src/mol-plugin-ui/controls.tsx index 1fffb09ab8c891e704d9c3cdbe1863529a112885..52b70126004ff7f58e2ea49735b8aaa7ccedb256 100644 --- a/src/mol-plugin-ui/controls.tsx +++ b/src/mol-plugin-ui/controls.tsx @@ -10,7 +10,7 @@ import { PluginCommands } from '../mol-plugin/commands'; import { UpdateTrajectory } from '../mol-plugin-state/actions/structure'; import { PluginUIComponent } from './base'; import { LociLabelEntry } from '../mol-plugin/util/loci-label-manager'; -import { IconButton, Icon } from './controls/common'; +import { IconButton } from './controls/common'; import { PluginStateObject } from '../mol-plugin-state/objects'; import { StateTransforms } from '../mol-plugin-state/transforms'; import { StateTransformer } from '../mol-state'; @@ -19,6 +19,7 @@ import { AnimationControls } from './state/animation'; import { StructureRepresentationControls } from './structure/representation'; import { StructureSelectionControls } from './structure/selection'; import { StructureMeasurementsControls } from './structure/measurements'; +import { Icon } from './controls/icons'; export class TrajectoryViewportControls extends PluginUIComponent<{}, { show: boolean, label: string }> { state = { show: false, label: '' } diff --git a/src/mol-plugin-ui/controls/action-menu.tsx b/src/mol-plugin-ui/controls/action-menu.tsx index 016a4db71cf127f89be927c5dd5ec53885aa457f..bcc8aa9bae5c55367e348750b7905c9a5cb4ba2a 100644 --- a/src/mol-plugin-ui/controls/action-menu.tsx +++ b/src/mol-plugin-ui/controls/action-menu.tsx @@ -5,7 +5,7 @@ */ import * as React from 'react' -import { Icon } from './common'; +import { Icon, IconName } from './icons'; import { ParamDefinition } from '../../mol-util/param-definition'; export class ActionMenu extends React.PureComponent<ActionMenu.Props> { @@ -32,7 +32,7 @@ export namespace ActionMenu { export type OnSelect = (item: Item | undefined) => void export type Items = string | Item | [Items] - export type Item = { label: string, icon?: string, value: unknown } + export type Item = { label: string, icon?: IconName, value: unknown } export function Item(label: string, value: unknown): Item export function Item(label: string, icon: string, value: unknown): Item @@ -126,7 +126,7 @@ class Section extends React.PureComponent<SectionProps, SectionState> { return <div> {header && <div className='msp-control-group-header' style={{ marginTop: '1px' }}> <button className='msp-btn msp-btn-block' onClick={this.toggleExpanded}> - <span className={`msp-icon msp-icon-${this.state.isExpanded ? 'collapse' : 'expand'}`} /> + <Icon name={this.state.isExpanded ? 'collapse' : 'expand'} /> {hasCurrent ? <b>{header}</b> : header} </button> </div>} diff --git a/src/mol-plugin-ui/controls/common.tsx b/src/mol-plugin-ui/controls/common.tsx index cf38ffba999f07d46977d4d1aee69c4060b3fa06..575c3e98d4ceb8850d01839b067634a0dbccd08d 100644 --- a/src/mol-plugin-ui/controls/common.tsx +++ b/src/mol-plugin-ui/controls/common.tsx @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2018-2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ @@ -7,13 +7,14 @@ import * as React from 'react'; import { Color } from '../../mol-util/color'; import { PurePluginUIComponent } from '../base'; +import { IconName, Icon } from './icons'; export class ControlGroup extends React.Component<{ header: string, initialExpanded?: boolean, hideExpander?: boolean, hideOffset?: boolean, - topRightIcon?: string, + topRightIcon?: IconName, onHeaderClick?: () => void }, { isExpanded: boolean }> { state = { isExpanded: !!this.props.initialExpanded } @@ -222,33 +223,6 @@ export class NumericInput extends React.PureComponent<{ } } -export function Icon(props: { - name: string, - style?: React.CSSProperties -}) { - return <span className={`msp-icon msp-icon-${props.name}`} style={props.style} />; -} - -export function IconButton(props: { - icon: string, - isSmall?: boolean, - onClick: (e: React.MouseEvent<HTMLButtonElement>) => void, - title?: string, - toggleState?: boolean, - disabled?: boolean, - customClass?: string, - style?: React.CSSProperties, - 'data-id'?: string, - extraContent?: JSX.Element -}) { - let className = `msp-btn-link msp-btn-icon${props.isSmall ? '-small' : ''}${props.customClass ? ' ' + props.customClass : ''}`; - if (typeof props.toggleState !== 'undefined') className += ` msp-btn-link-toggle-${props.toggleState ? 'on' : 'off'}` - return <button className={className} onClick={props.onClick} title={props.title} disabled={props.disabled} data-id={props['data-id']} style={props.style}> - <span className={`msp-icon msp-icon-${props.icon}`}/> - {props.extraContent} - </button>; -} - export class ExpandableGroup extends React.Component<{ label: string, colorStripe?: Color, @@ -268,7 +242,7 @@ export class ExpandableGroup extends React.Component<{ {label} <button className='msp-btn-link msp-btn-icon msp-control-group-expander' onClick={this.toggleExpanded} title={`${this.state.isExpanded ? 'Less' : 'More'} options`} style={{ background: 'transparent', textAlign: 'left', padding: '0' }}> - <span className={`msp-icon msp-icon-${this.state.isExpanded ? 'minus' : 'plus'}`} style={{ display: 'inline-block' }} /> + <Icon name={this.state.isExpanded ? 'minus' : 'plus'} style={{ display: 'inline-block' }} /> </button> </span> <div>{pivot}</div> @@ -281,6 +255,26 @@ export class ExpandableGroup extends React.Component<{ } } +export function IconButton(props: { + icon: IconName, + isSmall?: boolean, + onClick: (e: React.MouseEvent<HTMLButtonElement>) => void, + title?: string, + toggleState?: boolean, + disabled?: boolean, + customClass?: string, + style?: React.CSSProperties, + 'data-id'?: string, + extraContent?: JSX.Element +}) { + let className = `msp-btn-link msp-btn-icon${props.isSmall ? '-small' : ''}${props.customClass ? ' ' + props.customClass : ''}`; + if (typeof props.toggleState !== 'undefined') className += ` msp-btn-link-toggle-${props.toggleState ? 'on' : 'off'}` + return <button className={className} onClick={props.onClick} title={props.title} disabled={props.disabled} data-id={props['data-id']} style={props.style}> + <Icon name={props.icon} /> + {props.extraContent} + </button>; +} + export class ButtonSelect extends React.PureComponent<{ label: string, onChange: (value: string) => void, disabled?: boolean }> { onChange = (e: React.ChangeEvent<HTMLSelectElement>) => { @@ -301,7 +295,7 @@ export function Options(options: [string, string][]) { return options.map(([value, label]) => <option key={value} value={value}>{label}</option>) } -export function SectionHeader(props: { icon?: string, title: string | JSX.Element, desc?: string}) { +export function SectionHeader(props: { icon?: IconName, title: string | JSX.Element, desc?: string}) { return <div className='msp-section-header'> {props.icon && <Icon name={props.icon} />} {props.title} <small>{props.desc}</small> @@ -314,7 +308,7 @@ export type ToggleButtonProps = { disabled?: boolean, label: string | JSX.Element, title?: string, - icon?: string, + icon?: IconName, isSelected?: boolean, toggle: () => void } @@ -330,7 +324,7 @@ export class ToggleButton extends React.PureComponent<ToggleButtonProps> { const label = props.label; return <button onClick={this.onClick} title={this.props.title} disabled={props.disabled} style={props.style} className={props.className}> - {this.props.icon ? <span className={`msp-icon msp-icon-${this.props.icon}`} /> : ''} + <Icon name={this.props.icon} /> {this.props.isSelected ? <b>{label}</b> : label} </button>; } diff --git a/src/mol-plugin-ui/controls/icons.tsx b/src/mol-plugin-ui/controls/icons.tsx new file mode 100644 index 0000000000000000000000000000000000000000..4ee957fd03dc1d64a56d70e0f38c644d9c6732f1 --- /dev/null +++ b/src/mol-plugin-ui/controls/icons.tsx @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info. + * + * @author David Sehnal <david.sehnal@gmail.com> + */ + +import * as React from 'react'; + +export type IconName = + | '' | 'expand-layout' | 'plus' | 'minus' | 'reset-scene' | 'ok' | 'back' | 'block' | 'off' | 'expand' | 'collapse' | 'visual-visibility' + | 'abort' | 'focus-on-visual' | 'settings' | 'tools' | 'log' | 'remove' | 'help' | 'help-circle' | 'info' | 'left-open-big' | 'right-open-big' + | 'left-open' | 'right-open' | 'screenshot' | 'model-prev' | 'model-next' | 'model-first' | 'down-thin' | 'up-thin' | 'left-thin' | 'right-thin' + | 'switch' | 'play' | 'stop' | 'pause' | 'cw' | 'database' | 'upload' | 'record' | 'code' | 'floppy' | 'tape' | 'flow-cascade' | 'flow-tree' + | 'home' | 'address' | 'download' | 'export' | 'palette' | 'search' | 'flashlight' | 'mail' | 'heart' | 'heart-empty' | 'star' | 'star-empty' + | 'user' | 'users' | 'user-add' | 'video' | 'picture' | 'camera' | 'layout' | 'menu' | 'check' | 'cancel' | 'cancel-circled' | 'cancel-squared' + | 'plus-circled' | 'plus-squared' | 'minus-circled' | 'minus-squared' | 'help-circled' | 'info-circled' | 'link' | 'attach' | 'lock' | 'lock-open' + | 'eye' | 'tag' | 'bookmark' | 'bookmarks' | 'flag' | 'thumbs-up' | 'thumbs-down' | 'upload-cloud' | 'reply' | 'reply-all' | 'forward' | 'quote' + | 'pencil' | 'feather' | 'print' | 'retweet' | 'keyboard' | 'comment' | 'chat' | 'bell' | 'attention' | 'alert' | 'vcard' | 'location' | 'map' + | 'direction' | 'compass' | 'cup' | 'trash' | 'doc' | 'docs' | 'doc-landscape' | 'doc-text' | 'doc-text-inv' | 'newspaper' | 'book-open' | 'book' + | 'folder' | 'archive' | 'box' | 'rss' | 'phone' | 'cog' | 'share' | 'shareable' | 'basket' | 'bag' | 'calendar' | 'login' | 'logout' | 'mic' + | 'mute' | 'sound' | 'volume' | 'clock' | 'hourglass' | 'lamp' | 'light-down' | 'light-up' | 'adjust' | 'resize-full' | 'resize-small' | 'popup' + | 'publish' | 'window' | 'arrow-combo' | 'down-circled' | 'left-circled' | 'right-circled' | 'up-circled' | 'down-open' | 'up-open' | 'down-open-mini' + | 'left-open-mini' | 'right-open-mini' | 'up-open-mini' | 'down-open-big' | 'up-open-big' | 'down' | 'left' | 'right' | 'up' | 'down-dir' | 'left-dir' + | 'right-dir' | 'up-dir' | 'down-bold' | 'left-bold' | 'right-bold' | 'up-bold' | 'ccw' | 'arrows-ccw' | 'level-down' | 'level-up' | 'shuffle' + | 'loop' | 'to-end' | 'to-start' | 'fast-forward' | 'fast-backward' | 'progress-0' | 'progress-1' | 'progress-2' | 'progress-3' | 'target' | 'list' + | 'list-add' | 'battery' | 'back-in-time' | 'monitor' | 'mobile' | 'cd' | 'inbox' | 'install' | 'globe' | 'cloud' | 'cloud-thunder' | 'flash' + | 'moon' | 'flight' | 'paper-plane' | 'leaf' | 'lifebuoy' | 'mouse' | 'briefcase' | 'suitcase' | 'dot' | 'dot-2' | 'dot-3' | 'brush' | 'infinity' + | 'erase' | 'chart-pie' | 'chart-line' | 'chart-bar' | 'chart-area' | 'graduation-cap' | 'language' | 'ticket' | 'water' | 'droplet' | 'air' + | 'credit-card' | 'clipboard' | 'megaphone' | 'drive' | 'bucket' | 'thermometer' | 'key' | 'flow-branch' | 'flow-line' | 'flow-parallel' | 'rocket' + | 'gauge' | 'help-circle-collapse' | 'help-circle-expand' + +export function Icon(props: { + name: IconName | undefined, + style?: React.CSSProperties, + title?: string +}) { + if (!props.name) return null; + return <span className={`msp-icon msp-icon-${props.name}`} style={props.style} title={props.title} />; +} \ No newline at end of file diff --git a/src/mol-plugin-ui/controls/parameters.tsx b/src/mol-plugin-ui/controls/parameters.tsx index 4605597c4ce7b82212e20e6e47a304b1bf7d0540..66fecd1f3dcac4f6e0c1a135aae353d14a000946 100644 --- a/src/mol-plugin-ui/controls/parameters.tsx +++ b/src/mol-plugin-ui/controls/parameters.tsx @@ -23,6 +23,7 @@ import { getPrecision } from '../../mol-util/number'; import { ParamMapping } from '../../mol-util/param-mapping'; import { PluginContext } from '../../mol-plugin/context'; import { ActionMenu } from './action-menu'; +import { Icon } from './icons'; export type ParameterControlsCategoryFilter = string | null | (string | null)[] @@ -122,7 +123,7 @@ class ExpandGroup extends React.PureComponent<{ header: string, initiallyExpande return <> <div className='msp-control-group-header' style={{ marginTop: '1px' }}> <button className='msp-btn msp-btn-block' onClick={this.toggleExpanded}> - <span className={`msp-icon msp-icon-${this.state.isExpanded ? 'collapse' : 'expand'}`} /> + <Icon name={this.state.isExpanded ? 'collapse' : 'expand'} /> {this.props.header} </button> </div> @@ -218,7 +219,7 @@ export class ParamHelp<L extends LegendData> extends React.PureComponent<{ legen return <div className='msp-control-row msp-help-text'> <div> - <div className='msp-help-description'><span className={`msp-icon msp-icon-help-circle`} />{description}</div> + <div className='msp-help-description'><Icon name='help-circle' />{description}</div> {Legend && <div className='msp-help-legend'><Legend legend={legend} /></div>} </div> </div> @@ -259,7 +260,7 @@ function renderSimple(options: { props: ParamProps<any>, state: { showHelp: bool <button className='msp-help msp-btn-link msp-btn-icon msp-control-group-expander' onClick={toggleHelp} title={desc || `${state.showHelp ? 'Hide' : 'Show'} help`} style={{ background: 'transparent', textAlign: 'left', padding: '0' }}> - <span className={`msp-icon msp-icon-help-circle-${state.showHelp ? 'collapse' : 'expand'}`} /> + <Icon name={state.showHelp ? 'help-circle-collapse' : 'help-circle-expand'} /> </button> } </span> @@ -301,7 +302,7 @@ export class BoolControl extends SimpleParam<PD.BooleanParam> { onClick = (e: React.MouseEvent<HTMLButtonElement>) => { this.update(!this.props.value); e.currentTarget.blur(); } renderControl() { return <button onClick={this.onClick} disabled={this.props.isDisabled}> - <span className={`msp-icon msp-icon-${this.props.value ? 'ok' : 'off'}`} /> + <Icon name={this.props.value ? 'ok' : 'off'} /> {this.props.value ? 'On' : 'Off'} </button>; } @@ -799,7 +800,7 @@ export class GroupControl extends React.PureComponent<ParamProps<PD.Group<any>> return <div className='msp-control-group-wrapper'> <div className='msp-control-group-header'> <button className='msp-btn msp-btn-block' onClick={this.toggleExpanded}> - <span className={`msp-icon msp-icon-${this.state.isExpanded ? 'collapse' : 'expand'}`} /> + <Icon name={this.state.isExpanded ? 'collapse' : 'expand'} /> {label} </button> </div> diff --git a/src/mol-plugin-ui/left-panel.tsx b/src/mol-plugin-ui/left-panel.tsx index 6534de339e0e60b070185dc3a9f674804485fdb1..52a6df2a911cda2e101780c19059407a1e291a24 100644 --- a/src/mol-plugin-ui/left-panel.tsx +++ b/src/mol-plugin-ui/left-panel.tsx @@ -17,6 +17,7 @@ import { ParamDefinition as PD } from '../mol-util/param-definition'; import { StateSnapshots, RemoteStateSnapshots } from './state/snapshots'; import { HelpContent } from './viewport/help'; import { LeftPanelTabName } from '../mol-plugin/layout'; +import { IconName } from './controls/icons'; export class LeftPanelControls extends PluginUIComponent<{}, { tab: LeftPanelTabName }> { state = { tab: this.plugin.behaviors.layout.leftPanelTabName.value }; @@ -130,7 +131,7 @@ class FullSettings extends PluginUIComponent { this.subscribe(this.plugin.events.interactivity.propsUpdated, () => this.forceUpdate()); } - icon(name: string, onClick: (e: React.MouseEvent<HTMLButtonElement>) => void, title: string, isOn = true) { + icon(name: IconName, onClick: (e: React.MouseEvent<HTMLButtonElement>) => void, title: string, isOn = true) { return <IconButton icon={name} toggleState={isOn} onClick={onClick} title={title} />; } diff --git a/src/mol-plugin-ui/sequence.tsx b/src/mol-plugin-ui/sequence.tsx index 43ad47c02725f32061a4705dae4a3cd6332df22c..bff40d0b0f8ed5a78d857d1a781042cc8c1e2bc8 100644 --- a/src/mol-plugin-ui/sequence.tsx +++ b/src/mol-plugin-ui/sequence.tsx @@ -21,6 +21,7 @@ import { State, StateSelection } from '../mol-state'; import { ChainSequenceWrapper } from './sequence/chain'; import { ElementSequenceWrapper } from './sequence/element'; import { elementLabel } from '../mol-theme/label'; +import { Icon } from './controls/icons'; const MaxDisplaySequenceLength = 5000 @@ -292,8 +293,8 @@ export class SequenceView extends PluginUIComponent<{ }, SequenceViewState> { if (this.getStructure(this.state.structureRef) === Structure.Empty) { return <div className='msp-sequence'> <div className='msp-sequence-select'> - <span className={`msp-icon msp-icon-help-circle`} style={{ cursor: 'help', position: 'absolute', right: 0, top: 0 }} - title='This shows a single sequence. Use the controls to show a different sequence.' /> + <Icon name='help-circle' style={{ cursor: 'help', position: 'absolute', right: 0, top: 0 }} + title='This shows a single sequence. Use the controls to show a different sequence.'/> <span>Sequence</span><span style={{ fontWeight: 'normal' }}>No structure available</span> </div> @@ -307,7 +308,7 @@ export class SequenceView extends PluginUIComponent<{ }, SequenceViewState> { return <div className='msp-sequence'> <div className='msp-sequence-select'> - <span className={`msp-icon msp-icon-help-circle`} style={{ cursor: 'help', position: 'absolute', right: 0, top: 0 }} + <Icon name='help-circle' style={{ cursor: 'help', position: 'absolute', right: 0, top: 0 }} title='This shows a single sequence. Use the controls to show a different sequence.' /> <span>Sequence of</span> diff --git a/src/mol-plugin-ui/sequence/sequence.tsx b/src/mol-plugin-ui/sequence/sequence.tsx index 3ff18fdcefbbfa270195d2cc2cb1a4059e0ca239..c8b4a47cc26c3832f8515175544d7d19a4f47646 100644 --- a/src/mol-plugin-ui/sequence/sequence.tsx +++ b/src/mol-plugin-ui/sequence/sequence.tsx @@ -290,8 +290,6 @@ export class Sequence<P extends SequenceProps> extends PluginUIComponent<P> { // residue spans are updated as react won't update them this.updateMarker() - // <span className={`msp-icon msp-icon-help`} style={{ cursor: 'help' }} title='This shows a single sequence. Use the menu on the left to show a different sequence.' /> - return <div className='msp-sequence-wrapper msp-sequence-wrapper-non-empty' onContextMenu={this.contextMenu} diff --git a/src/mol-plugin-ui/skin/base/icons.scss b/src/mol-plugin-ui/skin/base/icons.scss index af699e798c948a0b4931531374eabfa9ef18ab33..c95386ed1488b8eda578fa0a151f67248b74e808 100644 --- a/src/mol-plugin-ui/skin/base/icons.scss +++ b/src/mol-plugin-ui/skin/base/icons.scss @@ -25,194 +25,12 @@ -moz-osx-font-smoothing: grayscale; } -.msp-icon-expand-layout:before { - content: "\e84a"; -} - -.msp-icon-plus:before { - content: "\e816"; -} - -.msp-icon-minus:before { - content: "\e819"; -} - -.msp-icon-reset-scene:before { - content: "\e891"; -} - -.msp-icon-ok:before { - content: "\e812"; -} - -.msp-icon-back:before { - content: "\e820"; -} - -.msp-icon-block:before { - content: "\e868"; -} - -.msp-icon-off:before { - content: "\e813"; -} - -.msp-icon-expand:before { - content: "\e885"; -} - -.msp-icon-collapse:before { - content: "\e883"; -} - -.msp-icon-visual-visibility:before { - content: "\e826"; -} - -.msp-icon-abort:before { - content: "\e814"; -} - -.msp-icon-focus-on-visual:before { - content: "\e8a3"; -} - -.msp-icon-settings:before { - content: "\e855"; -} - -.msp-icon-tools:before { - content: "\e856"; -} - -.msp-icon-log:before { - content: "\e8a5"; -} - -.msp-icon-remove:before { - content: "\e847"; -} - -.msp-icon-help:before { - content: "\e81c"; -} - -.msp-icon-help-circle:before { - content: "\e81d"; -} - -.msp-icon-info:before { - content: "\e81e"; -} - -.msp-icon-left-open-big:before { - content: "\e87c"; -} - -.msp-icon-right-open-big:before { - content: "\e87d"; -} - -.msp-icon-left-open:before { - content: "\e874"; -} - -.msp-icon-right-open:before { - content: "\e875"; -} - -.msp-icon-screenshot:before { - content: "\e80f"; -} - -.msp-icon-model-prev:before { - content: "\e884"; -} - -.msp-icon-model-next:before { - content: "\e885"; -} - -.msp-icon-model-first:before { - content: "\e89c"; -} - -.msp-icon-down-thin:before { - content: "\e88b"; -} - -.msp-icon-up-thin:before { - content: "\e88e"; -} - -.msp-icon-left-thin:before { - content: "\e88c"; -} - -.msp-icon-right-thin:before { - content: "\e88d"; -} - -.msp-icon-switch:before { - content: "\e896"; -} - -.msp-icon-play:before { - content: "\e897"; -} - -.msp-icon-stop:before { - content: "\e898"; -} - -.msp-icon-pause:before { - content: "\e899"; -} - -.msp-icon-left-open:before { - content: "\e87c"; -} - -.msp-icon-right-open:before { - content: "\e87d"; -} - -.msp-icon-cw:before { - content: "\e890"; -} - -.msp-icon-database:before { - content: "\e8d3"; -} - -.msp-icon-upload:before { - content: "\e82e"; -} - -.msp-icon-record:before { - content: "\e89a"; -} - -.msp-icon-code:before { - content: "\e834"; -} - -.msp-icon-floppy:before { - content: "\e8d0"; -} - -.msp-icon-tape:before { - content: "\e8c8"; -} - .msp-icon-help-circle-expand { width: 2.5em !important; } .msp-icon-help-circle-expand:before { width: 2.5em !important; - content: "\e81d\0020\e885"; -} - + content: "\e81d\0020\e885"; } .msp-icon-help-circle-collapse { width: 2.5em !important; } @@ -221,26 +39,236 @@ content: "\e81d\0020\e883"; } -.msp-icon-flow-cascade:before { - content: "\e8d8"; -} - -.msp-icon-flow-tree:before { - content: "\e8da"; -} - -.msp-icon-home:before { - content: "\e821"; -} - -.msp-icon-address:before { - content: "\e841"; -} - -.msp-icon-download:before { - content: "\e82d"; -} - -.msp-icon-export:before { - content: "\e835"; -} \ No newline at end of file +.msp-icon-expand-layout:before { content: "\e84a"; } +.msp-icon-plus:before { content: "\e816"; } +.msp-icon-minus:before { content: "\e819"; } +.msp-icon-reset-scene:before { content: "\e891"; } +.msp-icon-ok:before { content: "\e812"; } +.msp-icon-back:before { content: "\e820"; } +.msp-icon-block:before { content: "\e868"; } +.msp-icon-off:before { content: "\e813"; } +.msp-icon-expand:before { content: "\e885"; } +.msp-icon-collapse:before { content: "\e883"; } +.msp-icon-visual-visibility:before { content: "\e826"; } +.msp-icon-abort:before { content: "\e814"; } +.msp-icon-focus-on-visual:before { content: "\e8a3"; } +.msp-icon-settings:before { content: "\e855"; } +.msp-icon-tools:before { content: "\e856"; } +.msp-icon-log:before { content: "\e8a5"; } +.msp-icon-remove:before { content: "\e847"; } +.msp-icon-help:before { content: "\e81c"; } +.msp-icon-help-circle:before { content: "\e81d"; } +.msp-icon-info:before { content: "\e81e"; } +.msp-icon-left-open-big:before { content: "\e87c"; } +.msp-icon-right-open-big:before { content: "\e87d"; } +.msp-icon-left-open:before { content: "\e87c"; } +.msp-icon-right-open:before { content: "\e87d"; } +.msp-icon-screenshot:before { content: "\e80f"; } +.msp-icon-model-prev:before { content: "\e884"; } +.msp-icon-model-next:before { content: "\e885"; } +.msp-icon-model-first:before { content: "\e89c"; } +.msp-icon-down-thin:before { content: "\e88b"; } +.msp-icon-up-thin:before { content: "\e88e"; } +.msp-icon-left-thin:before { content: "\e88c"; } +.msp-icon-right-thin:before { content: "\e88d"; } +.msp-icon-switch:before { content: "\e896"; } +.msp-icon-play:before { content: "\e897"; } +.msp-icon-stop:before { content: "\e898"; } +.msp-icon-pause:before { content: "\e899"; } +.msp-icon-cw:before { content: "\e890"; } +.msp-icon-database:before { content: "\e8d3"; } +.msp-icon-upload:before { content: "\e82e"; } +.msp-icon-record:before { content: "\e89a"; } +.msp-icon-code:before { content: "\e834"; } +.msp-icon-floppy:before { content: "\e8d0"; } +.msp-icon-tape:before { content: "\e8c8"; } +.msp-icon-flow-cascade:before { content: "\e8d8"; } +.msp-icon-flow-tree:before { content: "\e8da"; } +.msp-icon-home:before { content: "\e821"; } +.msp-icon-address:before { content: "\e841"; } +.msp-icon-download:before { content: "\e82d"; } +.msp-icon-export:before { content: "\e835"; } +.msp-icon-palette:before { content: "\e800"; } +.msp-icon-search:before { content: "\e803"; } +.msp-icon-flashlight:before { content: "\e804"; } +.msp-icon-mail:before { content: "\e805"; } +.msp-icon-heart:before { content: "\e806"; } +.msp-icon-heart-empty:before { content: "\e807"; } +.msp-icon-star:before { content: "\e808"; } +.msp-icon-star-empty:before { content: "\e809"; } +.msp-icon-user:before { content: "\e80a"; } +.msp-icon-users:before { content: "\e80b"; } +.msp-icon-user-add:before { content: "\e80c"; } +.msp-icon-video:before { content: "\e80d"; } +.msp-icon-picture:before { content: "\e80e"; } +.msp-icon-camera:before { content: "\e80f"; } +.msp-icon-layout:before { content: "\e810"; } +.msp-icon-menu:before { content: "\e811"; } +.msp-icon-check:before { content: "\e812"; } +.msp-icon-cancel:before { content: "\e813"; } +.msp-icon-cancel-circled:before { content: "\e814"; } +.msp-icon-cancel-squared:before { content: "\e815"; } +.msp-icon-plus-circled:before { content: "\e817"; } +.msp-icon-plus-squared:before { content: "\e818"; } +.msp-icon-minus-circled:before { content: "\e81a"; } +.msp-icon-minus-squared:before { content: "\e81b"; } +.msp-icon-help-circled:before { content: "\e81d"; } +.msp-icon-info-circled:before { content: "\e81f"; } +.msp-icon-link:before { content: "\e822"; } +.msp-icon-attach:before { content: "\e823"; } +.msp-icon-lock:before { content: "\e824"; } +.msp-icon-lock-open:before { content: "\e825"; } +.msp-icon-eye:before { content: "\e826"; } +.msp-icon-tag:before { content: "\e827"; } +.msp-icon-bookmark:before { content: "\e828"; } +.msp-icon-bookmarks:before { content: "\e829"; } +.msp-icon-flag:before { content: "\e82a"; } +.msp-icon-thumbs-up:before { content: "\e82b"; } +.msp-icon-thumbs-down:before { content: "\e82c"; } +.msp-icon-upload-cloud:before { content: "\e82f"; } +.msp-icon-reply:before { content: "\e830"; } +.msp-icon-reply-all:before { content: "\e831"; } +.msp-icon-forward:before { content: "\e832"; } +.msp-icon-quote:before { content: "\e833"; } +.msp-icon-pencil:before { content: "\e836"; } +.msp-icon-feather:before { content: "\e837"; } +.msp-icon-print:before { content: "\e838"; } +.msp-icon-retweet:before { content: "\e839"; } +.msp-icon-keyboard:before { content: "\e83a"; } +.msp-icon-comment:before { content: "\e83b"; } +.msp-icon-chat:before { content: "\e83c"; } +.msp-icon-bell:before { content: "\e83d"; } +.msp-icon-attention:before { content: "\e83e"; } +.msp-icon-alert:before { content: "\e83f"; } +.msp-icon-vcard:before { content: "\e840"; } +.msp-icon-location:before { content: "\e842"; } +.msp-icon-map:before { content: "\e843"; } +.msp-icon-direction:before { content: "\e844"; } +.msp-icon-compass:before { content: "\e845"; } +.msp-icon-cup:before { content: "\e846"; } +.msp-icon-trash:before { content: "\e847"; } +.msp-icon-doc:before { content: "\e848"; } +.msp-icon-docs:before { content: "\e849"; } +.msp-icon-doc-landscape:before { content: "\e84a"; } +.msp-icon-doc-text:before { content: "\e84b"; } +.msp-icon-doc-text-inv:before { content: "\e84c"; } +.msp-icon-newspaper:before { content: "\e84d"; } +.msp-icon-book-open:before { content: "\e84e"; } +.msp-icon-book:before { content: "\e84f"; } +.msp-icon-folder:before { content: "\e850"; } +.msp-icon-archive:before { content: "\e851"; } +.msp-icon-box:before { content: "\e852"; } +.msp-icon-rss:before { content: "\e853"; } +.msp-icon-phone:before { content: "\e854"; } +.msp-icon-cog:before { content: "\e855"; } +.msp-icon-share:before { content: "\e857"; } +.msp-icon-shareable:before { content: "\e858"; } +.msp-icon-basket:before { content: "\e859"; } +.msp-icon-bag:before { content: "\e85a"; } +.msp-icon-calendar:before { content: "\e85b"; } +.msp-icon-login:before { content: "\e85c"; } +.msp-icon-logout:before { content: "\e85d"; } +.msp-icon-mic:before { content: "\e85e"; } +.msp-icon-mute:before { content: "\e85f"; } +.msp-icon-sound:before { content: "\e860"; } +.msp-icon-volume:before { content: "\e861"; } +.msp-icon-clock:before { content: "\e862"; } +.msp-icon-hourglass:before { content: "\e863"; } +.msp-icon-lamp:before { content: "\e864"; } +.msp-icon-light-down:before { content: "\e865"; } +.msp-icon-light-up:before { content: "\e866"; } +.msp-icon-adjust:before { content: "\e867"; } +.msp-icon-resize-full:before { content: "\e869"; } +.msp-icon-resize-small:before { content: "\e86a"; } +.msp-icon-popup:before { content: "\e86b"; } +.msp-icon-publish:before { content: "\e86c"; } +.msp-icon-window:before { content: "\e86d"; } +.msp-icon-arrow-combo:before { content: "\e86e"; } +.msp-icon-down-circled:before { content: "\e86f"; } +.msp-icon-left-circled:before { content: "\e870"; } +.msp-icon-right-circled:before { content: "\e871"; } +.msp-icon-up-circled:before { content: "\e872"; } +.msp-icon-down-open:before { content: "\e873"; } +.msp-icon-up-open:before { content: "\e876"; } +.msp-icon-down-open-mini:before { content: "\e877"; } +.msp-icon-left-open-mini:before { content: "\e878"; } +.msp-icon-right-open-mini:before { content: "\e879"; } +.msp-icon-up-open-mini:before { content: "\e87a"; } +.msp-icon-down-open-big:before { content: "\e87b"; } +.msp-icon-up-open-big:before { content: "\e87e"; } +.msp-icon-down:before { content: "\e87f"; } +.msp-icon-left:before { content: "\e880"; } +.msp-icon-right:before { content: "\e881"; } +.msp-icon-up:before { content: "\e882"; } +.msp-icon-down-dir:before { content: "\e883"; } +.msp-icon-left-dir:before { content: "\e884"; } +.msp-icon-right-dir:before { content: "\e885"; } +.msp-icon-up-dir:before { content: "\e886"; } +.msp-icon-down-bold:before { content: "\e887"; } +.msp-icon-left-bold:before { content: "\e888"; } +.msp-icon-right-bold:before { content: "\e889"; } +.msp-icon-up-bold:before { content: "\e88a"; } +.msp-icon-ccw:before { content: "\e88f"; } +.msp-icon-arrows-ccw:before { content: "\e891"; } +.msp-icon-level-down:before { content: "\e892"; } +.msp-icon-level-up:before { content: "\e893"; } +.msp-icon-shuffle:before { content: "\e894"; } +.msp-icon-loop:before { content: "\e895"; } +.msp-icon-to-end:before { content: "\e89b"; } +.msp-icon-to-start:before { content: "\e89c"; } +.msp-icon-fast-forward:before { content: "\e89d"; } +.msp-icon-fast-backward:before { content: "\e89e"; } +.msp-icon-progress-0:before { content: "\e89f"; } +.msp-icon-progress-1:before { content: "\e8a0"; } +.msp-icon-progress-2:before { content: "\e8a1"; } +.msp-icon-progress-3:before { content: "\e8a2"; } +.msp-icon-target:before { content: "\e8a3"; } +.msp-icon-list:before { content: "\e8a5"; } +.msp-icon-list-add:before { content: "\e8a6"; } +.msp-icon-battery:before { content: "\e8a9"; } +.msp-icon-back-in-time:before { content: "\e8aa"; } +.msp-icon-monitor:before { content: "\e8ab"; } +.msp-icon-mobile:before { content: "\e8ac"; } +.msp-icon-cd:before { content: "\e8ae"; } +.msp-icon-inbox:before { content: "\e8af"; } +.msp-icon-install:before { content: "\e8b0"; } +.msp-icon-globe:before { content: "\e8b1"; } +.msp-icon-cloud:before { content: "\e8b2"; } +.msp-icon-cloud-thunder:before { content: "\e8b3"; } +.msp-icon-flash:before { content: "\e8b4"; } +.msp-icon-moon:before { content: "\e8b5"; } +.msp-icon-flight:before { content: "\e8b6"; } +.msp-icon-paper-plane:before { content: "\e8b7"; } +.msp-icon-leaf:before { content: "\e8b8"; } +.msp-icon-lifebuoy:before { content: "\e8b9"; } +.msp-icon-mouse:before { content: "\e8ba"; } +.msp-icon-briefcase:before { content: "\e8bb"; } +.msp-icon-suitcase:before { content: "\e8bc"; } +.msp-icon-dot:before { content: "\e8bd"; } +.msp-icon-dot-2:before { content: "\e8be"; } +.msp-icon-dot-3:before { content: "\e8bf"; } +.msp-icon-brush:before { content: "\e8c0"; } +.msp-icon-infinity:before { content: "\e8c2"; } +.msp-icon-erase:before { content: "\e8c3"; } +.msp-icon-chart-pie:before { content: "\e8c4"; } +.msp-icon-chart-line:before { content: "\e8c5"; } +.msp-icon-chart-bar:before { content: "\e8c6"; } +.msp-icon-chart-area:before { content: "\e8c7"; } +.msp-icon-graduation-cap:before { content: "\e8c9"; } +.msp-icon-language:before { content: "\e8ca"; } +.msp-icon-ticket:before { content: "\e8cb"; } +.msp-icon-water:before { content: "\e8cc"; } +.msp-icon-droplet:before { content: "\e8cd"; } +.msp-icon-air:before { content: "\e8ce"; } +.msp-icon-credit-card:before { content: "\e8cf"; } +.msp-icon-clipboard:before { content: "\e8d1"; } +.msp-icon-megaphone:before { content: "\e8d2"; } +.msp-icon-drive:before { content: "\e8d4"; } +.msp-icon-bucket:before { content: "\e8d5"; } +.msp-icon-thermometer:before { content: "\e8d6"; } +.msp-icon-key:before { content: "\e8d7"; } +.msp-icon-flow-branch:before { content: "\e8d9"; } +.msp-icon-flow-line:before { content: "\e8db"; } +.msp-icon-flow-parallel:before { content: "\e8dc"; } +.msp-icon-rocket:before { content: "\e8dd"; } +.msp-icon-gauge:before { content: "\e8de"; } \ No newline at end of file diff --git a/src/mol-plugin-ui/skin/fonts/fontello.html b/src/mol-plugin-ui/skin/fonts/fontello.html new file mode 100644 index 0000000000000000000000000000000000000000..e748ada4bde69e2df30450424b0a2d4b92f03e52 --- /dev/null +++ b/src/mol-plugin-ui/skin/fonts/fontello.html @@ -0,0 +1,627 @@ +<!DOCTYPE html> +<html> + <head><!--[if lt IE 9]><script language="javascript" type="text/javascript" src="//html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]--> + <meta charset="UTF-8"><style>/* + * Bootstrap v2.2.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ +.clearfix { + *zoom: 1; +} +.clearfix:before, +.clearfix:after { + display: table; + content: ""; + line-height: 0; +} +.clearfix:after { + clear: both; +} +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +a:hover, +a:active { + outline: 0; +} +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} +button, +input { + *overflow: visible; + line-height: normal; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333; + background-color: #fff; +} +a { + color: #08c; + text-decoration: none; +} +a:hover { + color: #005580; + text-decoration: underline; +} +.row { + margin-left: -20px; + *zoom: 1; +} +.row:before, +.row:after { + display: table; + content: ""; + line-height: 0; +} +.row:after { + clear: both; +} +[class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; +} +.container, +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} +.span12 { + width: 940px; +} +.span11 { + width: 860px; +} +.span10 { + width: 780px; +} +.span9 { + width: 700px; +} +.span8 { + width: 620px; +} +.span7 { + width: 540px; +} +.span6 { + width: 460px; +} +.span5 { + width: 380px; +} +.span4 { + width: 300px; +} +.span3 { + width: 220px; +} +.span2 { + width: 140px; +} +.span1 { + width: 60px; +} +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} +.container:before, +.container:after { + display: table; + content: ""; + line-height: 0; +} +.container:after { + clear: both; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; +} +small { + font-size: 85%; +} +h1 { + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 20px; + color: inherit; + text-rendering: optimizelegibility; +} +h1 small { + font-weight: normal; + line-height: 1; + color: #999; +} +h1 { + line-height: 40px; +} +h1 { + font-size: 38.5px; +} +h1 small { + font-size: 24.5px; +} +body { + margin-top: 90px; +} +.header { + position: fixed; + top: 0; + left: 50%; + margin-left: -480px; + background-color: #fff; + border-bottom: 1px solid #ddd; + padding-top: 10px; + z-index: 10; +} +.footer { + color: #ddd; + font-size: 12px; + text-align: center; + margin-top: 20px; +} +.footer a { + color: #ccc; + text-decoration: underline; +} +.the-icons { + font-size: 14px; + line-height: 24px; +} +.switch { + position: absolute; + right: 0; + bottom: 10px; + color: #666; +} +.switch input { + margin-right: 0.3em; +} +.codesOn .i-name { + display: none; +} +.codesOn .i-code { + display: inline; +} +.i-code { + display: none; +} +@font-face { + font-family: 'fontello'; + src: url('./fontello.eot?15936540'); + src: url('./fontello.eot?15936540#iefix') format('embedded-opentype'), + url('./fontello.woff?15936540') format('woff'), + url('./fontello.ttf?15936540') format('truetype'), + url('./fontello.svg?15936540#fontello') format('svg'); + font-weight: normal; + font-style: normal; + } + + + .demo-icon + { + font-family: "fontello"; + font-style: normal; + font-weight: normal; + + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + + /* You can be more comfortable with increased icons size */ + /* font-size: 120%; */ + + /* Font smoothing. That was taken from TWBS */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ + } + </style> + <script> + function toggleCodes(on) { + var obj = document.getElementById('icons'); + + if (on) { + obj.className += ' codesOn'; + } else { + obj.className = obj.className.replace(' codesOn', ''); + } + } + + </script> + </head> + <body> + <div class="container header"> + <h1> + Icons + </h1> + <label class="switch"> + <input type="checkbox" onclick="toggleCodes(this.checked)">show codes + </label> + </div> + <div id="icons" class="container"> + <div class="row"> + <div title="Code: 0xe800" class="the-icons span3"><i class="demo-icon icon-palette"></i> <span class="i-name">icon-palette</span><span class="i-code">0xe800</span></div> + <div title="Code: 0xe803" class="the-icons span3"><i class="demo-icon icon-search"></i> <span class="i-name">icon-search</span><span class="i-code">0xe803</span></div> + <div title="Code: 0xe804" class="the-icons span3"><i class="demo-icon icon-flashlight"></i> <span class="i-name">icon-flashlight</span><span class="i-code">0xe804</span></div> + <div title="Code: 0xe805" class="the-icons span3"><i class="demo-icon icon-mail"></i> <span class="i-name">icon-mail</span><span class="i-code">0xe805</span></div> + </div> + <div class="row"> + <div title="Code: 0xe806" class="the-icons span3"><i class="demo-icon icon-heart"></i> <span class="i-name">icon-heart</span><span class="i-code">0xe806</span></div> + <div title="Code: 0xe807" class="the-icons span3"><i class="demo-icon icon-heart-empty"></i> <span class="i-name">icon-heart-empty</span><span class="i-code">0xe807</span></div> + <div title="Code: 0xe808" class="the-icons span3"><i class="demo-icon icon-star"></i> <span class="i-name">icon-star</span><span class="i-code">0xe808</span></div> + <div title="Code: 0xe809" class="the-icons span3"><i class="demo-icon icon-star-empty"></i> <span class="i-name">icon-star-empty</span><span class="i-code">0xe809</span></div> + </div> + <div class="row"> + <div title="Code: 0xe80a" class="the-icons span3"><i class="demo-icon icon-user"></i> <span class="i-name">icon-user</span><span class="i-code">0xe80a</span></div> + <div title="Code: 0xe80b" class="the-icons span3"><i class="demo-icon icon-users"></i> <span class="i-name">icon-users</span><span class="i-code">0xe80b</span></div> + <div title="Code: 0xe80c" class="the-icons span3"><i class="demo-icon icon-user-add"></i> <span class="i-name">icon-user-add</span><span class="i-code">0xe80c</span></div> + <div title="Code: 0xe80d" class="the-icons span3"><i class="demo-icon icon-video"></i> <span class="i-name">icon-video</span><span class="i-code">0xe80d</span></div> + </div> + <div class="row"> + <div title="Code: 0xe80e" class="the-icons span3"><i class="demo-icon icon-picture"></i> <span class="i-name">icon-picture</span><span class="i-code">0xe80e</span></div> + <div title="Code: 0xe80f" class="the-icons span3"><i class="demo-icon icon-camera"></i> <span class="i-name">icon-camera</span><span class="i-code">0xe80f</span></div> + <div title="Code: 0xe810" class="the-icons span3"><i class="demo-icon icon-layout"></i> <span class="i-name">icon-layout</span><span class="i-code">0xe810</span></div> + <div title="Code: 0xe811" class="the-icons span3"><i class="demo-icon icon-menu"></i> <span class="i-name">icon-menu</span><span class="i-code">0xe811</span></div> + </div> + <div class="row"> + <div title="Code: 0xe812" class="the-icons span3"><i class="demo-icon icon-check"></i> <span class="i-name">icon-check</span><span class="i-code">0xe812</span></div> + <div title="Code: 0xe813" class="the-icons span3"><i class="demo-icon icon-cancel"></i> <span class="i-name">icon-cancel</span><span class="i-code">0xe813</span></div> + <div title="Code: 0xe814" class="the-icons span3"><i class="demo-icon icon-cancel-circled"></i> <span class="i-name">icon-cancel-circled</span><span class="i-code">0xe814</span></div> + <div title="Code: 0xe815" class="the-icons span3"><i class="demo-icon icon-cancel-squared"></i> <span class="i-name">icon-cancel-squared</span><span class="i-code">0xe815</span></div> + </div> + <div class="row"> + <div title="Code: 0xe816" class="the-icons span3"><i class="demo-icon icon-plus"></i> <span class="i-name">icon-plus</span><span class="i-code">0xe816</span></div> + <div title="Code: 0xe817" class="the-icons span3"><i class="demo-icon icon-plus-circled"></i> <span class="i-name">icon-plus-circled</span><span class="i-code">0xe817</span></div> + <div title="Code: 0xe818" class="the-icons span3"><i class="demo-icon icon-plus-squared"></i> <span class="i-name">icon-plus-squared</span><span class="i-code">0xe818</span></div> + <div title="Code: 0xe819" class="the-icons span3"><i class="demo-icon icon-minus"></i> <span class="i-name">icon-minus</span><span class="i-code">0xe819</span></div> + </div> + <div class="row"> + <div title="Code: 0xe81a" class="the-icons span3"><i class="demo-icon icon-minus-circled"></i> <span class="i-name">icon-minus-circled</span><span class="i-code">0xe81a</span></div> + <div title="Code: 0xe81b" class="the-icons span3"><i class="demo-icon icon-minus-squared"></i> <span class="i-name">icon-minus-squared</span><span class="i-code">0xe81b</span></div> + <div title="Code: 0xe81c" class="the-icons span3"><i class="demo-icon icon-help"></i> <span class="i-name">icon-help</span><span class="i-code">0xe81c</span></div> + <div title="Code: 0xe81d" class="the-icons span3"><i class="demo-icon icon-help-circled"></i> <span class="i-name">icon-help-circled</span><span class="i-code">0xe81d</span></div> + </div> + <div class="row"> + <div title="Code: 0xe81e" class="the-icons span3"><i class="demo-icon icon-info"></i> <span class="i-name">icon-info</span><span class="i-code">0xe81e</span></div> + <div title="Code: 0xe81f" class="the-icons span3"><i class="demo-icon icon-info-circled"></i> <span class="i-name">icon-info-circled</span><span class="i-code">0xe81f</span></div> + <div title="Code: 0xe820" class="the-icons span3"><i class="demo-icon icon-back"></i> <span class="i-name">icon-back</span><span class="i-code">0xe820</span></div> + <div title="Code: 0xe821" class="the-icons span3"><i class="demo-icon icon-home"></i> <span class="i-name">icon-home</span><span class="i-code">0xe821</span></div> + </div> + <div class="row"> + <div title="Code: 0xe822" class="the-icons span3"><i class="demo-icon icon-link"></i> <span class="i-name">icon-link</span><span class="i-code">0xe822</span></div> + <div title="Code: 0xe823" class="the-icons span3"><i class="demo-icon icon-attach"></i> <span class="i-name">icon-attach</span><span class="i-code">0xe823</span></div> + <div title="Code: 0xe824" class="the-icons span3"><i class="demo-icon icon-lock"></i> <span class="i-name">icon-lock</span><span class="i-code">0xe824</span></div> + <div title="Code: 0xe825" class="the-icons span3"><i class="demo-icon icon-lock-open"></i> <span class="i-name">icon-lock-open</span><span class="i-code">0xe825</span></div> + </div> + <div class="row"> + <div title="Code: 0xe826" class="the-icons span3"><i class="demo-icon icon-eye"></i> <span class="i-name">icon-eye</span><span class="i-code">0xe826</span></div> + <div title="Code: 0xe827" class="the-icons span3"><i class="demo-icon icon-tag"></i> <span class="i-name">icon-tag</span><span class="i-code">0xe827</span></div> + <div title="Code: 0xe828" class="the-icons span3"><i class="demo-icon icon-bookmark"></i> <span class="i-name">icon-bookmark</span><span class="i-code">0xe828</span></div> + <div title="Code: 0xe829" class="the-icons span3"><i class="demo-icon icon-bookmarks"></i> <span class="i-name">icon-bookmarks</span><span class="i-code">0xe829</span></div> + </div> + <div class="row"> + <div title="Code: 0xe82a" class="the-icons span3"><i class="demo-icon icon-flag"></i> <span class="i-name">icon-flag</span><span class="i-code">0xe82a</span></div> + <div title="Code: 0xe82b" class="the-icons span3"><i class="demo-icon icon-thumbs-up"></i> <span class="i-name">icon-thumbs-up</span><span class="i-code">0xe82b</span></div> + <div title="Code: 0xe82c" class="the-icons span3"><i class="demo-icon icon-thumbs-down"></i> <span class="i-name">icon-thumbs-down</span><span class="i-code">0xe82c</span></div> + <div title="Code: 0xe82d" class="the-icons span3"><i class="demo-icon icon-download"></i> <span class="i-name">icon-download</span><span class="i-code">0xe82d</span></div> + </div> + <div class="row"> + <div title="Code: 0xe82e" class="the-icons span3"><i class="demo-icon icon-upload"></i> <span class="i-name">icon-upload</span><span class="i-code">0xe82e</span></div> + <div title="Code: 0xe82f" class="the-icons span3"><i class="demo-icon icon-upload-cloud"></i> <span class="i-name">icon-upload-cloud</span><span class="i-code">0xe82f</span></div> + <div title="Code: 0xe830" class="the-icons span3"><i class="demo-icon icon-reply"></i> <span class="i-name">icon-reply</span><span class="i-code">0xe830</span></div> + <div title="Code: 0xe831" class="the-icons span3"><i class="demo-icon icon-reply-all"></i> <span class="i-name">icon-reply-all</span><span class="i-code">0xe831</span></div> + </div> + <div class="row"> + <div title="Code: 0xe832" class="the-icons span3"><i class="demo-icon icon-forward"></i> <span class="i-name">icon-forward</span><span class="i-code">0xe832</span></div> + <div title="Code: 0xe833" class="the-icons span3"><i class="demo-icon icon-quote"></i> <span class="i-name">icon-quote</span><span class="i-code">0xe833</span></div> + <div title="Code: 0xe834" class="the-icons span3"><i class="demo-icon icon-code"></i> <span class="i-name">icon-code</span><span class="i-code">0xe834</span></div> + <div title="Code: 0xe835" class="the-icons span3"><i class="demo-icon icon-export"></i> <span class="i-name">icon-export</span><span class="i-code">0xe835</span></div> + </div> + <div class="row"> + <div title="Code: 0xe836" class="the-icons span3"><i class="demo-icon icon-pencil"></i> <span class="i-name">icon-pencil</span><span class="i-code">0xe836</span></div> + <div title="Code: 0xe837" class="the-icons span3"><i class="demo-icon icon-feather"></i> <span class="i-name">icon-feather</span><span class="i-code">0xe837</span></div> + <div title="Code: 0xe838" class="the-icons span3"><i class="demo-icon icon-print"></i> <span class="i-name">icon-print</span><span class="i-code">0xe838</span></div> + <div title="Code: 0xe839" class="the-icons span3"><i class="demo-icon icon-retweet"></i> <span class="i-name">icon-retweet</span><span class="i-code">0xe839</span></div> + </div> + <div class="row"> + <div title="Code: 0xe83a" class="the-icons span3"><i class="demo-icon icon-keyboard"></i> <span class="i-name">icon-keyboard</span><span class="i-code">0xe83a</span></div> + <div title="Code: 0xe83b" class="the-icons span3"><i class="demo-icon icon-comment"></i> <span class="i-name">icon-comment</span><span class="i-code">0xe83b</span></div> + <div title="Code: 0xe83c" class="the-icons span3"><i class="demo-icon icon-chat"></i> <span class="i-name">icon-chat</span><span class="i-code">0xe83c</span></div> + <div title="Code: 0xe83d" class="the-icons span3"><i class="demo-icon icon-bell"></i> <span class="i-name">icon-bell</span><span class="i-code">0xe83d</span></div> + </div> + <div class="row"> + <div title="Code: 0xe83e" class="the-icons span3"><i class="demo-icon icon-attention"></i> <span class="i-name">icon-attention</span><span class="i-code">0xe83e</span></div> + <div title="Code: 0xe83f" class="the-icons span3"><i class="demo-icon icon-alert"></i> <span class="i-name">icon-alert</span><span class="i-code">0xe83f</span></div> + <div title="Code: 0xe840" class="the-icons span3"><i class="demo-icon icon-vcard"></i> <span class="i-name">icon-vcard</span><span class="i-code">0xe840</span></div> + <div title="Code: 0xe841" class="the-icons span3"><i class="demo-icon icon-address"></i> <span class="i-name">icon-address</span><span class="i-code">0xe841</span></div> + </div> + <div class="row"> + <div title="Code: 0xe842" class="the-icons span3"><i class="demo-icon icon-location"></i> <span class="i-name">icon-location</span><span class="i-code">0xe842</span></div> + <div title="Code: 0xe843" class="the-icons span3"><i class="demo-icon icon-map"></i> <span class="i-name">icon-map</span><span class="i-code">0xe843</span></div> + <div title="Code: 0xe844" class="the-icons span3"><i class="demo-icon icon-direction"></i> <span class="i-name">icon-direction</span><span class="i-code">0xe844</span></div> + <div title="Code: 0xe845" class="the-icons span3"><i class="demo-icon icon-compass"></i> <span class="i-name">icon-compass</span><span class="i-code">0xe845</span></div> + </div> + <div class="row"> + <div title="Code: 0xe846" class="the-icons span3"><i class="demo-icon icon-cup"></i> <span class="i-name">icon-cup</span><span class="i-code">0xe846</span></div> + <div title="Code: 0xe847" class="the-icons span3"><i class="demo-icon icon-trash"></i> <span class="i-name">icon-trash</span><span class="i-code">0xe847</span></div> + <div title="Code: 0xe848" class="the-icons span3"><i class="demo-icon icon-doc"></i> <span class="i-name">icon-doc</span><span class="i-code">0xe848</span></div> + <div title="Code: 0xe849" class="the-icons span3"><i class="demo-icon icon-docs"></i> <span class="i-name">icon-docs</span><span class="i-code">0xe849</span></div> + </div> + <div class="row"> + <div title="Code: 0xe84a" class="the-icons span3"><i class="demo-icon icon-doc-landscape"></i> <span class="i-name">icon-doc-landscape</span><span class="i-code">0xe84a</span></div> + <div title="Code: 0xe84b" class="the-icons span3"><i class="demo-icon icon-doc-text"></i> <span class="i-name">icon-doc-text</span><span class="i-code">0xe84b</span></div> + <div title="Code: 0xe84c" class="the-icons span3"><i class="demo-icon icon-doc-text-inv"></i> <span class="i-name">icon-doc-text-inv</span><span class="i-code">0xe84c</span></div> + <div title="Code: 0xe84d" class="the-icons span3"><i class="demo-icon icon-newspaper"></i> <span class="i-name">icon-newspaper</span><span class="i-code">0xe84d</span></div> + </div> + <div class="row"> + <div title="Code: 0xe84e" class="the-icons span3"><i class="demo-icon icon-book-open"></i> <span class="i-name">icon-book-open</span><span class="i-code">0xe84e</span></div> + <div title="Code: 0xe84f" class="the-icons span3"><i class="demo-icon icon-book"></i> <span class="i-name">icon-book</span><span class="i-code">0xe84f</span></div> + <div title="Code: 0xe850" class="the-icons span3"><i class="demo-icon icon-folder"></i> <span class="i-name">icon-folder</span><span class="i-code">0xe850</span></div> + <div title="Code: 0xe851" class="the-icons span3"><i class="demo-icon icon-archive"></i> <span class="i-name">icon-archive</span><span class="i-code">0xe851</span></div> + </div> + <div class="row"> + <div title="Code: 0xe852" class="the-icons span3"><i class="demo-icon icon-box"></i> <span class="i-name">icon-box</span><span class="i-code">0xe852</span></div> + <div title="Code: 0xe853" class="the-icons span3"><i class="demo-icon icon-rss"></i> <span class="i-name">icon-rss</span><span class="i-code">0xe853</span></div> + <div title="Code: 0xe854" class="the-icons span3"><i class="demo-icon icon-phone"></i> <span class="i-name">icon-phone</span><span class="i-code">0xe854</span></div> + <div title="Code: 0xe855" class="the-icons span3"><i class="demo-icon icon-cog"></i> <span class="i-name">icon-cog</span><span class="i-code">0xe855</span></div> + </div> + <div class="row"> + <div title="Code: 0xe856" class="the-icons span3"><i class="demo-icon icon-tools"></i> <span class="i-name">icon-tools</span><span class="i-code">0xe856</span></div> + <div title="Code: 0xe857" class="the-icons span3"><i class="demo-icon icon-share"></i> <span class="i-name">icon-share</span><span class="i-code">0xe857</span></div> + <div title="Code: 0xe858" class="the-icons span3"><i class="demo-icon icon-shareable"></i> <span class="i-name">icon-shareable</span><span class="i-code">0xe858</span></div> + <div title="Code: 0xe859" class="the-icons span3"><i class="demo-icon icon-basket"></i> <span class="i-name">icon-basket</span><span class="i-code">0xe859</span></div> + </div> + <div class="row"> + <div title="Code: 0xe85a" class="the-icons span3"><i class="demo-icon icon-bag"></i> <span class="i-name">icon-bag</span><span class="i-code">0xe85a</span></div> + <div title="Code: 0xe85b" class="the-icons span3"><i class="demo-icon icon-calendar"></i> <span class="i-name">icon-calendar</span><span class="i-code">0xe85b</span></div> + <div title="Code: 0xe85c" class="the-icons span3"><i class="demo-icon icon-login"></i> <span class="i-name">icon-login</span><span class="i-code">0xe85c</span></div> + <div title="Code: 0xe85d" class="the-icons span3"><i class="demo-icon icon-logout"></i> <span class="i-name">icon-logout</span><span class="i-code">0xe85d</span></div> + </div> + <div class="row"> + <div title="Code: 0xe85e" class="the-icons span3"><i class="demo-icon icon-mic"></i> <span class="i-name">icon-mic</span><span class="i-code">0xe85e</span></div> + <div title="Code: 0xe85f" class="the-icons span3"><i class="demo-icon icon-mute"></i> <span class="i-name">icon-mute</span><span class="i-code">0xe85f</span></div> + <div title="Code: 0xe860" class="the-icons span3"><i class="demo-icon icon-sound"></i> <span class="i-name">icon-sound</span><span class="i-code">0xe860</span></div> + <div title="Code: 0xe861" class="the-icons span3"><i class="demo-icon icon-volume"></i> <span class="i-name">icon-volume</span><span class="i-code">0xe861</span></div> + </div> + <div class="row"> + <div title="Code: 0xe862" class="the-icons span3"><i class="demo-icon icon-clock"></i> <span class="i-name">icon-clock</span><span class="i-code">0xe862</span></div> + <div title="Code: 0xe863" class="the-icons span3"><i class="demo-icon icon-hourglass"></i> <span class="i-name">icon-hourglass</span><span class="i-code">0xe863</span></div> + <div title="Code: 0xe864" class="the-icons span3"><i class="demo-icon icon-lamp"></i> <span class="i-name">icon-lamp</span><span class="i-code">0xe864</span></div> + <div title="Code: 0xe865" class="the-icons span3"><i class="demo-icon icon-light-down"></i> <span class="i-name">icon-light-down</span><span class="i-code">0xe865</span></div> + </div> + <div class="row"> + <div title="Code: 0xe866" class="the-icons span3"><i class="demo-icon icon-light-up"></i> <span class="i-name">icon-light-up</span><span class="i-code">0xe866</span></div> + <div title="Code: 0xe867" class="the-icons span3"><i class="demo-icon icon-adjust"></i> <span class="i-name">icon-adjust</span><span class="i-code">0xe867</span></div> + <div title="Code: 0xe868" class="the-icons span3"><i class="demo-icon icon-block"></i> <span class="i-name">icon-block</span><span class="i-code">0xe868</span></div> + <div title="Code: 0xe869" class="the-icons span3"><i class="demo-icon icon-resize-full"></i> <span class="i-name">icon-resize-full</span><span class="i-code">0xe869</span></div> + </div> + <div class="row"> + <div title="Code: 0xe86a" class="the-icons span3"><i class="demo-icon icon-resize-small"></i> <span class="i-name">icon-resize-small</span><span class="i-code">0xe86a</span></div> + <div title="Code: 0xe86b" class="the-icons span3"><i class="demo-icon icon-popup"></i> <span class="i-name">icon-popup</span><span class="i-code">0xe86b</span></div> + <div title="Code: 0xe86c" class="the-icons span3"><i class="demo-icon icon-publish"></i> <span class="i-name">icon-publish</span><span class="i-code">0xe86c</span></div> + <div title="Code: 0xe86d" class="the-icons span3"><i class="demo-icon icon-window"></i> <span class="i-name">icon-window</span><span class="i-code">0xe86d</span></div> + </div> + <div class="row"> + <div title="Code: 0xe86e" class="the-icons span3"><i class="demo-icon icon-arrow-combo"></i> <span class="i-name">icon-arrow-combo</span><span class="i-code">0xe86e</span></div> + <div title="Code: 0xe86f" class="the-icons span3"><i class="demo-icon icon-down-circled"></i> <span class="i-name">icon-down-circled</span><span class="i-code">0xe86f</span></div> + <div title="Code: 0xe870" class="the-icons span3"><i class="demo-icon icon-left-circled"></i> <span class="i-name">icon-left-circled</span><span class="i-code">0xe870</span></div> + <div title="Code: 0xe871" class="the-icons span3"><i class="demo-icon icon-right-circled"></i> <span class="i-name">icon-right-circled</span><span class="i-code">0xe871</span></div> + </div> + <div class="row"> + <div title="Code: 0xe872" class="the-icons span3"><i class="demo-icon icon-up-circled"></i> <span class="i-name">icon-up-circled</span><span class="i-code">0xe872</span></div> + <div title="Code: 0xe873" class="the-icons span3"><i class="demo-icon icon-down-open"></i> <span class="i-name">icon-down-open</span><span class="i-code">0xe873</span></div> + <div title="Code: 0xe874" class="the-icons span3"><i class="demo-icon icon-left-open"></i> <span class="i-name">icon-left-open</span><span class="i-code">0xe874</span></div> + <div title="Code: 0xe875" class="the-icons span3"><i class="demo-icon icon-right-open"></i> <span class="i-name">icon-right-open</span><span class="i-code">0xe875</span></div> + </div> + <div class="row"> + <div title="Code: 0xe876" class="the-icons span3"><i class="demo-icon icon-up-open"></i> <span class="i-name">icon-up-open</span><span class="i-code">0xe876</span></div> + <div title="Code: 0xe877" class="the-icons span3"><i class="demo-icon icon-down-open-mini"></i> <span class="i-name">icon-down-open-mini</span><span class="i-code">0xe877</span></div> + <div title="Code: 0xe878" class="the-icons span3"><i class="demo-icon icon-left-open-mini"></i> <span class="i-name">icon-left-open-mini</span><span class="i-code">0xe878</span></div> + <div title="Code: 0xe879" class="the-icons span3"><i class="demo-icon icon-right-open-mini"></i> <span class="i-name">icon-right-open-mini</span><span class="i-code">0xe879</span></div> + </div> + <div class="row"> + <div title="Code: 0xe87a" class="the-icons span3"><i class="demo-icon icon-up-open-mini"></i> <span class="i-name">icon-up-open-mini</span><span class="i-code">0xe87a</span></div> + <div title="Code: 0xe87b" class="the-icons span3"><i class="demo-icon icon-down-open-big"></i> <span class="i-name">icon-down-open-big</span><span class="i-code">0xe87b</span></div> + <div title="Code: 0xe87c" class="the-icons span3"><i class="demo-icon icon-left-open-big"></i> <span class="i-name">icon-left-open-big</span><span class="i-code">0xe87c</span></div> + <div title="Code: 0xe87d" class="the-icons span3"><i class="demo-icon icon-right-open-big"></i> <span class="i-name">icon-right-open-big</span><span class="i-code">0xe87d</span></div> + </div> + <div class="row"> + <div title="Code: 0xe87e" class="the-icons span3"><i class="demo-icon icon-up-open-big"></i> <span class="i-name">icon-up-open-big</span><span class="i-code">0xe87e</span></div> + <div title="Code: 0xe87f" class="the-icons span3"><i class="demo-icon icon-down"></i> <span class="i-name">icon-down</span><span class="i-code">0xe87f</span></div> + <div title="Code: 0xe880" class="the-icons span3"><i class="demo-icon icon-left"></i> <span class="i-name">icon-left</span><span class="i-code">0xe880</span></div> + <div title="Code: 0xe881" class="the-icons span3"><i class="demo-icon icon-right"></i> <span class="i-name">icon-right</span><span class="i-code">0xe881</span></div> + </div> + <div class="row"> + <div title="Code: 0xe882" class="the-icons span3"><i class="demo-icon icon-up"></i> <span class="i-name">icon-up</span><span class="i-code">0xe882</span></div> + <div title="Code: 0xe883" class="the-icons span3"><i class="demo-icon icon-down-dir"></i> <span class="i-name">icon-down-dir</span><span class="i-code">0xe883</span></div> + <div title="Code: 0xe884" class="the-icons span3"><i class="demo-icon icon-left-dir"></i> <span class="i-name">icon-left-dir</span><span class="i-code">0xe884</span></div> + <div title="Code: 0xe885" class="the-icons span3"><i class="demo-icon icon-right-dir"></i> <span class="i-name">icon-right-dir</span><span class="i-code">0xe885</span></div> + </div> + <div class="row"> + <div title="Code: 0xe886" class="the-icons span3"><i class="demo-icon icon-up-dir"></i> <span class="i-name">icon-up-dir</span><span class="i-code">0xe886</span></div> + <div title="Code: 0xe887" class="the-icons span3"><i class="demo-icon icon-down-bold"></i> <span class="i-name">icon-down-bold</span><span class="i-code">0xe887</span></div> + <div title="Code: 0xe888" class="the-icons span3"><i class="demo-icon icon-left-bold"></i> <span class="i-name">icon-left-bold</span><span class="i-code">0xe888</span></div> + <div title="Code: 0xe889" class="the-icons span3"><i class="demo-icon icon-right-bold"></i> <span class="i-name">icon-right-bold</span><span class="i-code">0xe889</span></div> + </div> + <div class="row"> + <div title="Code: 0xe88a" class="the-icons span3"><i class="demo-icon icon-up-bold"></i> <span class="i-name">icon-up-bold</span><span class="i-code">0xe88a</span></div> + <div title="Code: 0xe88b" class="the-icons span3"><i class="demo-icon icon-down-thin"></i> <span class="i-name">icon-down-thin</span><span class="i-code">0xe88b</span></div> + <div title="Code: 0xe88c" class="the-icons span3"><i class="demo-icon icon-left-thin"></i> <span class="i-name">icon-left-thin</span><span class="i-code">0xe88c</span></div> + <div title="Code: 0xe88d" class="the-icons span3"><i class="demo-icon icon-right-thin"></i> <span class="i-name">icon-right-thin</span><span class="i-code">0xe88d</span></div> + </div> + <div class="row"> + <div title="Code: 0xe88e" class="the-icons span3"><i class="demo-icon icon-up-thin"></i> <span class="i-name">icon-up-thin</span><span class="i-code">0xe88e</span></div> + <div title="Code: 0xe88f" class="the-icons span3"><i class="demo-icon icon-ccw"></i> <span class="i-name">icon-ccw</span><span class="i-code">0xe88f</span></div> + <div title="Code: 0xe890" class="the-icons span3"><i class="demo-icon icon-cw"></i> <span class="i-name">icon-cw</span><span class="i-code">0xe890</span></div> + <div title="Code: 0xe891" class="the-icons span3"><i class="demo-icon icon-arrows-ccw"></i> <span class="i-name">icon-arrows-ccw</span><span class="i-code">0xe891</span></div> + </div> + <div class="row"> + <div title="Code: 0xe892" class="the-icons span3"><i class="demo-icon icon-level-down"></i> <span class="i-name">icon-level-down</span><span class="i-code">0xe892</span></div> + <div title="Code: 0xe893" class="the-icons span3"><i class="demo-icon icon-level-up"></i> <span class="i-name">icon-level-up</span><span class="i-code">0xe893</span></div> + <div title="Code: 0xe894" class="the-icons span3"><i class="demo-icon icon-shuffle"></i> <span class="i-name">icon-shuffle</span><span class="i-code">0xe894</span></div> + <div title="Code: 0xe895" class="the-icons span3"><i class="demo-icon icon-loop"></i> <span class="i-name">icon-loop</span><span class="i-code">0xe895</span></div> + </div> + <div class="row"> + <div title="Code: 0xe896" class="the-icons span3"><i class="demo-icon icon-switch"></i> <span class="i-name">icon-switch</span><span class="i-code">0xe896</span></div> + <div title="Code: 0xe897" class="the-icons span3"><i class="demo-icon icon-play"></i> <span class="i-name">icon-play</span><span class="i-code">0xe897</span></div> + <div title="Code: 0xe898" class="the-icons span3"><i class="demo-icon icon-stop"></i> <span class="i-name">icon-stop</span><span class="i-code">0xe898</span></div> + <div title="Code: 0xe899" class="the-icons span3"><i class="demo-icon icon-pause"></i> <span class="i-name">icon-pause</span><span class="i-code">0xe899</span></div> + </div> + <div class="row"> + <div title="Code: 0xe89a" class="the-icons span3"><i class="demo-icon icon-record"></i> <span class="i-name">icon-record</span><span class="i-code">0xe89a</span></div> + <div title="Code: 0xe89b" class="the-icons span3"><i class="demo-icon icon-to-end"></i> <span class="i-name">icon-to-end</span><span class="i-code">0xe89b</span></div> + <div title="Code: 0xe89c" class="the-icons span3"><i class="demo-icon icon-to-start"></i> <span class="i-name">icon-to-start</span><span class="i-code">0xe89c</span></div> + <div title="Code: 0xe89d" class="the-icons span3"><i class="demo-icon icon-fast-forward"></i> <span class="i-name">icon-fast-forward</span><span class="i-code">0xe89d</span></div> + </div> + <div class="row"> + <div title="Code: 0xe89e" class="the-icons span3"><i class="demo-icon icon-fast-backward"></i> <span class="i-name">icon-fast-backward</span><span class="i-code">0xe89e</span></div> + <div title="Code: 0xe89f" class="the-icons span3"><i class="demo-icon icon-progress-0"></i> <span class="i-name">icon-progress-0</span><span class="i-code">0xe89f</span></div> + <div title="Code: 0xe8a0" class="the-icons span3"><i class="demo-icon icon-progress-1"></i> <span class="i-name">icon-progress-1</span><span class="i-code">0xe8a0</span></div> + <div title="Code: 0xe8a1" class="the-icons span3"><i class="demo-icon icon-progress-2"></i> <span class="i-name">icon-progress-2</span><span class="i-code">0xe8a1</span></div> + </div> + <div class="row"> + <div title="Code: 0xe8a2" class="the-icons span3"><i class="demo-icon icon-progress-3"></i> <span class="i-name">icon-progress-3</span><span class="i-code">0xe8a2</span></div> + <div title="Code: 0xe8a3" class="the-icons span3"><i class="demo-icon icon-target"></i> <span class="i-name">icon-target</span><span class="i-code">0xe8a3</span></div> + <div title="Code: 0xe8a5" class="the-icons span3"><i class="demo-icon icon-list"></i> <span class="i-name">icon-list</span><span class="i-code">0xe8a5</span></div> + <div title="Code: 0xe8a6" class="the-icons span3"><i class="demo-icon icon-list-add"></i> <span class="i-name">icon-list-add</span><span class="i-code">0xe8a6</span></div> + </div> + <div class="row"> + <div title="Code: 0xe8a9" class="the-icons span3"><i class="demo-icon icon-battery"></i> <span class="i-name">icon-battery</span><span class="i-code">0xe8a9</span></div> + <div title="Code: 0xe8aa" class="the-icons span3"><i class="demo-icon icon-back-in-time"></i> <span class="i-name">icon-back-in-time</span><span class="i-code">0xe8aa</span></div> + <div title="Code: 0xe8ab" class="the-icons span3"><i class="demo-icon icon-monitor"></i> <span class="i-name">icon-monitor</span><span class="i-code">0xe8ab</span></div> + <div title="Code: 0xe8ac" class="the-icons span3"><i class="demo-icon icon-mobile"></i> <span class="i-name">icon-mobile</span><span class="i-code">0xe8ac</span></div> + </div> + <div class="row"> + <div title="Code: 0xe8ae" class="the-icons span3"><i class="demo-icon icon-cd"></i> <span class="i-name">icon-cd</span><span class="i-code">0xe8ae</span></div> + <div title="Code: 0xe8af" class="the-icons span3"><i class="demo-icon icon-inbox"></i> <span class="i-name">icon-inbox</span><span class="i-code">0xe8af</span></div> + <div title="Code: 0xe8b0" class="the-icons span3"><i class="demo-icon icon-install"></i> <span class="i-name">icon-install</span><span class="i-code">0xe8b0</span></div> + <div title="Code: 0xe8b1" class="the-icons span3"><i class="demo-icon icon-globe"></i> <span class="i-name">icon-globe</span><span class="i-code">0xe8b1</span></div> + </div> + <div class="row"> + <div title="Code: 0xe8b2" class="the-icons span3"><i class="demo-icon icon-cloud"></i> <span class="i-name">icon-cloud</span><span class="i-code">0xe8b2</span></div> + <div title="Code: 0xe8b3" class="the-icons span3"><i class="demo-icon icon-cloud-thunder"></i> <span class="i-name">icon-cloud-thunder</span><span class="i-code">0xe8b3</span></div> + <div title="Code: 0xe8b4" class="the-icons span3"><i class="demo-icon icon-flash"></i> <span class="i-name">icon-flash</span><span class="i-code">0xe8b4</span></div> + <div title="Code: 0xe8b5" class="the-icons span3"><i class="demo-icon icon-moon"></i> <span class="i-name">icon-moon</span><span class="i-code">0xe8b5</span></div> + </div> + <div class="row"> + <div title="Code: 0xe8b6" class="the-icons span3"><i class="demo-icon icon-flight"></i> <span class="i-name">icon-flight</span><span class="i-code">0xe8b6</span></div> + <div title="Code: 0xe8b7" class="the-icons span3"><i class="demo-icon icon-paper-plane"></i> <span class="i-name">icon-paper-plane</span><span class="i-code">0xe8b7</span></div> + <div title="Code: 0xe8b8" class="the-icons span3"><i class="demo-icon icon-leaf"></i> <span class="i-name">icon-leaf</span><span class="i-code">0xe8b8</span></div> + <div title="Code: 0xe8b9" class="the-icons span3"><i class="demo-icon icon-lifebuoy"></i> <span class="i-name">icon-lifebuoy</span><span class="i-code">0xe8b9</span></div> + </div> + <div class="row"> + <div title="Code: 0xe8ba" class="the-icons span3"><i class="demo-icon icon-mouse"></i> <span class="i-name">icon-mouse</span><span class="i-code">0xe8ba</span></div> + <div title="Code: 0xe8bb" class="the-icons span3"><i class="demo-icon icon-briefcase"></i> <span class="i-name">icon-briefcase</span><span class="i-code">0xe8bb</span></div> + <div title="Code: 0xe8bc" class="the-icons span3"><i class="demo-icon icon-suitcase"></i> <span class="i-name">icon-suitcase</span><span class="i-code">0xe8bc</span></div> + <div title="Code: 0xe8bd" class="the-icons span3"><i class="demo-icon icon-dot"></i> <span class="i-name">icon-dot</span><span class="i-code">0xe8bd</span></div> + </div> + <div class="row"> + <div title="Code: 0xe8be" class="the-icons span3"><i class="demo-icon icon-dot-2"></i> <span class="i-name">icon-dot-2</span><span class="i-code">0xe8be</span></div> + <div title="Code: 0xe8bf" class="the-icons span3"><i class="demo-icon icon-dot-3"></i> <span class="i-name">icon-dot-3</span><span class="i-code">0xe8bf</span></div> + <div title="Code: 0xe8c0" class="the-icons span3"><i class="demo-icon icon-brush"></i> <span class="i-name">icon-brush</span><span class="i-code">0xe8c0</span></div> + <div title="Code: 0xe8c2" class="the-icons span3"><i class="demo-icon icon-infinity"></i> <span class="i-name">icon-infinity</span><span class="i-code">0xe8c2</span></div> + </div> + <div class="row"> + <div title="Code: 0xe8c3" class="the-icons span3"><i class="demo-icon icon-erase"></i> <span class="i-name">icon-erase</span><span class="i-code">0xe8c3</span></div> + <div title="Code: 0xe8c4" class="the-icons span3"><i class="demo-icon icon-chart-pie"></i> <span class="i-name">icon-chart-pie</span><span class="i-code">0xe8c4</span></div> + <div title="Code: 0xe8c5" class="the-icons span3"><i class="demo-icon icon-chart-line"></i> <span class="i-name">icon-chart-line</span><span class="i-code">0xe8c5</span></div> + <div title="Code: 0xe8c6" class="the-icons span3"><i class="demo-icon icon-chart-bar"></i> <span class="i-name">icon-chart-bar</span><span class="i-code">0xe8c6</span></div> + </div> + <div class="row"> + <div title="Code: 0xe8c7" class="the-icons span3"><i class="demo-icon icon-chart-area"></i> <span class="i-name">icon-chart-area</span><span class="i-code">0xe8c7</span></div> + <div title="Code: 0xe8c8" class="the-icons span3"><i class="demo-icon icon-tape"></i> <span class="i-name">icon-tape</span><span class="i-code">0xe8c8</span></div> + <div title="Code: 0xe8c9" class="the-icons span3"><i class="demo-icon icon-graduation-cap"></i> <span class="i-name">icon-graduation-cap</span><span class="i-code">0xe8c9</span></div> + <div title="Code: 0xe8ca" class="the-icons span3"><i class="demo-icon icon-language"></i> <span class="i-name">icon-language</span><span class="i-code">0xe8ca</span></div> + </div> + <div class="row"> + <div title="Code: 0xe8cb" class="the-icons span3"><i class="demo-icon icon-ticket"></i> <span class="i-name">icon-ticket</span><span class="i-code">0xe8cb</span></div> + <div title="Code: 0xe8cc" class="the-icons span3"><i class="demo-icon icon-water"></i> <span class="i-name">icon-water</span><span class="i-code">0xe8cc</span></div> + <div title="Code: 0xe8cd" class="the-icons span3"><i class="demo-icon icon-droplet"></i> <span class="i-name">icon-droplet</span><span class="i-code">0xe8cd</span></div> + <div title="Code: 0xe8ce" class="the-icons span3"><i class="demo-icon icon-air"></i> <span class="i-name">icon-air</span><span class="i-code">0xe8ce</span></div> + </div> + <div class="row"> + <div title="Code: 0xe8cf" class="the-icons span3"><i class="demo-icon icon-credit-card"></i> <span class="i-name">icon-credit-card</span><span class="i-code">0xe8cf</span></div> + <div title="Code: 0xe8d0" class="the-icons span3"><i class="demo-icon icon-floppy"></i> <span class="i-name">icon-floppy</span><span class="i-code">0xe8d0</span></div> + <div title="Code: 0xe8d1" class="the-icons span3"><i class="demo-icon icon-clipboard"></i> <span class="i-name">icon-clipboard</span><span class="i-code">0xe8d1</span></div> + <div title="Code: 0xe8d2" class="the-icons span3"><i class="demo-icon icon-megaphone"></i> <span class="i-name">icon-megaphone</span><span class="i-code">0xe8d2</span></div> + </div> + <div class="row"> + <div title="Code: 0xe8d3" class="the-icons span3"><i class="demo-icon icon-database"></i> <span class="i-name">icon-database</span><span class="i-code">0xe8d3</span></div> + <div title="Code: 0xe8d4" class="the-icons span3"><i class="demo-icon icon-drive"></i> <span class="i-name">icon-drive</span><span class="i-code">0xe8d4</span></div> + <div title="Code: 0xe8d5" class="the-icons span3"><i class="demo-icon icon-bucket"></i> <span class="i-name">icon-bucket</span><span class="i-code">0xe8d5</span></div> + <div title="Code: 0xe8d6" class="the-icons span3"><i class="demo-icon icon-thermometer"></i> <span class="i-name">icon-thermometer</span><span class="i-code">0xe8d6</span></div> + </div> + <div class="row"> + <div title="Code: 0xe8d7" class="the-icons span3"><i class="demo-icon icon-key"></i> <span class="i-name">icon-key</span><span class="i-code">0xe8d7</span></div> + <div title="Code: 0xe8d8" class="the-icons span3"><i class="demo-icon icon-flow-cascade"></i> <span class="i-name">icon-flow-cascade</span><span class="i-code">0xe8d8</span></div> + <div title="Code: 0xe8d9" class="the-icons span3"><i class="demo-icon icon-flow-branch"></i> <span class="i-name">icon-flow-branch</span><span class="i-code">0xe8d9</span></div> + <div title="Code: 0xe8da" class="the-icons span3"><i class="demo-icon icon-flow-tree"></i> <span class="i-name">icon-flow-tree</span><span class="i-code">0xe8da</span></div> + </div> + <div class="row"> + <div title="Code: 0xe8db" class="the-icons span3"><i class="demo-icon icon-flow-line"></i> <span class="i-name">icon-flow-line</span><span class="i-code">0xe8db</span></div> + <div title="Code: 0xe8dc" class="the-icons span3"><i class="demo-icon icon-flow-parallel"></i> <span class="i-name">icon-flow-parallel</span><span class="i-code">0xe8dc</span></div> + <div title="Code: 0xe8dd" class="the-icons span3"><i class="demo-icon icon-rocket"></i> <span class="i-name">icon-rocket</span><span class="i-code">0xe8dd</span></div> + <div title="Code: 0xe8de" class="the-icons span3"><i class="demo-icon icon-gauge"></i> <span class="i-name">icon-gauge</span><span class="i-code">0xe8de</span></div> + </div> + </div> + <div class="container footer">Generated by <a href="http://fontello.com">fontello.com</a></div> + </body> +</html> \ No newline at end of file diff --git a/src/mol-plugin-ui/state/actions.tsx b/src/mol-plugin-ui/state/actions.tsx index 7ec479d73d4663024b5521c3c16f4f3e4884c8b3..b0d554766bd931172a4e91100dfc57f260ebd852 100644 --- a/src/mol-plugin-ui/state/actions.tsx +++ b/src/mol-plugin-ui/state/actions.tsx @@ -8,7 +8,7 @@ import * as React from 'react'; import { PluginUIComponent } from '../base'; import { ApplyActionControl } from './apply-action'; import { State, StateAction } from '../../mol-state'; -import { Icon } from '../controls/common'; +import { Icon } from '../controls/icons'; import { PluginContext } from '../../mol-plugin/context'; export class StateObjectActions extends PluginUIComponent<{ state: State, nodeRef: string, hideHeader?: boolean, initiallyCollapsed?: boolean, alwaysExpandFirst?: boolean }> { diff --git a/src/mol-plugin-ui/state/animation.tsx b/src/mol-plugin-ui/state/animation.tsx index aa0f25ce13d397f327ebbe12a1ae5f2263b59b74..fbd19e6bc52e964054e736dbffffc279d8682343 100644 --- a/src/mol-plugin-ui/state/animation.tsx +++ b/src/mol-plugin-ui/state/animation.tsx @@ -7,7 +7,7 @@ import * as React from 'react'; import { PluginUIComponent } from '../base'; import { ParameterControls, ParamOnChange } from '../controls/parameters'; -import { Icon } from '../controls/common'; +import { Icon } from '../controls/icons'; export class AnimationControlsWrapper extends PluginUIComponent<{ }> { render() { diff --git a/src/mol-plugin-ui/state/common.tsx b/src/mol-plugin-ui/state/common.tsx index e4b96078e0c480d6fac39bce04fa22cf5f279a52..640e611d2b6495ada923c44ac0417530f81809da 100644 --- a/src/mol-plugin-ui/state/common.tsx +++ b/src/mol-plugin-ui/state/common.tsx @@ -11,7 +11,7 @@ import { ParameterControls, ParamOnChange } from '../controls/parameters'; import { PluginContext } from '../../mol-plugin/context'; import { ParamDefinition as PD } from '../../mol-util/param-definition'; import { Subject } from 'rxjs'; -import { Icon } from '../controls/common'; +import { Icon } from '../controls/icons'; export { StateTransformParameters, TransformControlBase }; @@ -193,7 +193,7 @@ abstract class TransformControlBase<P, S extends TransformControlBase.ComponentS return <div className={wrapClass}> {display !== 'none' && <div className='msp-transform-header'> <button className={`msp-btn msp-btn-block${isEmpty ? '' : ' msp-btn-collapse'}`} onClick={this.toggleExpanded} title={display.description}> - {!isEmpty && <span className={`msp-icon msp-icon-${this.state.isCollapsed ? 'expand' : 'collapse'}`} />} + {!isEmpty && <Icon name={this.state.isCollapsed ? 'expand' : 'collapse'} />} {display.name} </button> </div>} diff --git a/src/mol-plugin-ui/state/snapshots.tsx b/src/mol-plugin-ui/state/snapshots.tsx index 19fa456ddbfc9a9f3948bf3638b9f181e28b901d..006556f8ff7134c0d34327c8a47bcb28ee9462d2 100644 --- a/src/mol-plugin-ui/state/snapshots.tsx +++ b/src/mol-plugin-ui/state/snapshots.tsx @@ -13,9 +13,10 @@ import { ParameterControls } from '../controls/parameters'; import { ParamDefinition as PD} from '../../mol-util/param-definition'; import { PluginState } from '../../mol-plugin/state'; import { urlCombine } from '../../mol-util/url'; -import { IconButton, Icon, SectionHeader } from '../controls/common'; +import { IconButton, SectionHeader } from '../controls/common'; import { formatTimespan } from '../../mol-util/now'; import { PluginConfig } from '../../mol-plugin/config'; +import { Icon } from '../controls/icons'; export class StateSnapshots extends PluginUIComponent<{ }> { downloadToFile = () => { diff --git a/src/mol-plugin-ui/state/tree.tsx b/src/mol-plugin-ui/state/tree.tsx index ea2cd27125454ac852c3407c895ad67cd38a4ecc..9c7a88d2539bf93e085dcf11c68184a5c0f5fe18 100644 --- a/src/mol-plugin-ui/state/tree.tsx +++ b/src/mol-plugin-ui/state/tree.tsx @@ -9,7 +9,7 @@ import { PluginStateObject } from '../../mol-plugin-state/objects'; import { State, StateObject, StateTransform, StateObjectCell } from '../../mol-state' import { PluginCommands } from '../../mol-plugin/commands'; import { PluginUIComponent, _Props, _State } from '../base'; -import { Icon } from '../controls/common'; +import { Icon } from '../controls/icons'; export class StateTree extends PluginUIComponent<{ state: State }, { showActions: boolean }> { state = { showActions: true }; @@ -235,7 +235,7 @@ class StateTreeNodeLabel extends PluginUIComponent< const cellState = cell.state; const visibility = <button onClick={this.toggleVisible} className={`msp-btn msp-btn-link msp-tree-visibility${cellState.isHidden ? ' msp-tree-visibility-hidden' : ''}`}> - <span className='msp-icon msp-icon-visual-visibility' /> + <Icon name='visual-visibility' /> </button>; const style: React.HTMLAttributes<HTMLDivElement>['style'] = { @@ -247,10 +247,10 @@ class StateTreeNodeLabel extends PluginUIComponent< const row = <div className={`msp-tree-row${isCurrent ? ' msp-tree-row-current' : ''}`} onMouseEnter={this.highlight} onMouseLeave={this.clearHighlight} style={style}> {label} {children.size > 0 && <button onClick={this.toggleExpanded} className='msp-btn msp-btn-link msp-tree-toggle-exp-button'> - <span className={`msp-icon msp-icon-${cellState.isCollapsed ? 'expand' : 'collapse'}`} /> + <Icon name={cellState.isCollapsed ? 'expand' : 'collapse'} /> </button>} {!cell.state.isLocked && <button onClick={this.remove} className='msp-btn msp-btn-link msp-tree-remove-button'> - <span className='msp-icon msp-icon-remove' /> + <Icon name='remove' /> </button>}{visibility} </div>; diff --git a/src/mol-plugin-ui/structure/selection.tsx b/src/mol-plugin-ui/structure/selection.tsx index 88e6e480242b122bbbc4fcc4bc6e25daab27c590..5b03582ddd604b5af5266d5ab46f121f4ea7b3f7 100644 --- a/src/mol-plugin-ui/structure/selection.tsx +++ b/src/mol-plugin-ui/structure/selection.tsx @@ -16,6 +16,7 @@ import { stripTags } from '../../mol-util/string'; import { StructureElement } from '../../mol-model/structure'; import { ActionMenu } from '../controls/action-menu'; import { ToggleButton } from '../controls/common'; +import { Icon } from '../controls/icons'; export const DefaultQueries = ActionMenu.createItems(StructureSelectionQueryList, { label: q => q.label, @@ -191,7 +192,7 @@ export class StructureSelectionControls<P, S extends StructureSelectionControlsS return <div> <div className='msp-control-row msp-row-text'> <button className='msp-btn msp-btn-block' onClick={this.focus}> - <span className={`msp-icon msp-icon-focus-on-visual`} style={{ position: 'absolute', left: '5px' }} /> + <Icon name='focus-on-visual' style={{ position: 'absolute', left: '5px' }} /> {this.stats} </button> </div> diff --git a/src/mol-plugin-ui/viewport.tsx b/src/mol-plugin-ui/viewport.tsx index eb61eebb4247952359da55c66d30af207f6e8f22..f45e1773a1eeb1392bdc59cb537099c038f04335 100644 --- a/src/mol-plugin-ui/viewport.tsx +++ b/src/mol-plugin-ui/viewport.tsx @@ -13,6 +13,7 @@ import { PluginUIComponent } from './base'; import { ControlGroup, IconButton } from './controls/common'; import { SimpleSettingsControl } from './viewport/simple-settings'; import { DownloadScreenshotControls } from './viewport/screenshot'; +import { IconName } from './controls/icons'; interface ViewportControlsState { isSettingsExpanded: boolean, @@ -74,7 +75,7 @@ export class ViewportControls extends PluginUIComponent<ViewportControlsProps, V this.subscribe(this.plugin.events.interactivity.propsUpdated, () => this.forceUpdate()); } - icon(name: string, onClick: (e: React.MouseEvent<HTMLButtonElement>) => void, title: string, isOn = true) { + icon(name: IconName, onClick: (e: React.MouseEvent<HTMLButtonElement>) => void, title: string, isOn = true) { return <IconButton icon={name} toggleState={isOn} onClick={onClick} title={title} />; } diff --git a/src/mol-plugin-ui/viewport/help.tsx b/src/mol-plugin-ui/viewport/help.tsx index 1bb93108d41b1761a0fcb90262a2de2029f86dc0..65bc947521b9e74c8309de3928e4a6d597fb3275 100644 --- a/src/mol-plugin-ui/viewport/help.tsx +++ b/src/mol-plugin-ui/viewport/help.tsx @@ -10,7 +10,7 @@ import { PluginUIComponent } from '../base'; import { StateTransformer, StateSelection } from '../../mol-state'; import { SelectLoci } from '../../mol-plugin/behavior/dynamic/representation'; import { StructureRepresentationInteraction } from '../../mol-plugin/behavior/dynamic/selection/structure-representation-interaction'; -import { Icon } from '../controls/common'; +import { Icon } from '../controls/icons'; function getBindingsList(bindings: { [k: string]: Binding }) { return Object.keys(bindings).map(k => [k, bindings[k]] as [string, Binding]) @@ -54,7 +54,7 @@ class HelpGroup extends React.Component<{ header: string, initiallyExpanded?: bo return <div className='msp-control-group-wrapper'> <div className='msp-control-group-header'> <button className='msp-btn msp-btn-block' onClick={this.toggleExpanded}> - <span className={`msp-icon msp-icon-${this.state.isExpanded ? 'collapse' : 'expand'}`} /> + <Icon name={this.state.isExpanded ? 'collapse' : 'expand'} /> {this.props.header} </button> </div> diff --git a/src/mol-plugin-ui/viewport/screenshot.tsx b/src/mol-plugin-ui/viewport/screenshot.tsx index ad22766a3fba63a08ebe43d28c9949a817fce1d3..94198156f97a27a01c2522c57fdf59047a6c9207 100644 --- a/src/mol-plugin-ui/viewport/screenshot.tsx +++ b/src/mol-plugin-ui/viewport/screenshot.tsx @@ -9,7 +9,7 @@ import * as React from 'react'; import { ParamDefinition as PD } from '../../mol-util/param-definition'; import { ParameterControls } from '../controls/parameters'; import { PluginUIComponent } from '../base'; -import { Icon } from '../controls/common'; +import { Icon } from '../controls/icons'; import { debounceTime } from 'rxjs/operators'; import { Subject } from 'rxjs'; import { ViewportScreenshotHelper } from '../../mol-plugin/util/viewport-screenshot';