mirror of
https://github.com/arduino/arduino-ide.git
synced 2025-07-23 11:16:42 +00:00
New Board Selector UI: show port protocol (#1193)
* add new icons
* implement new Board Selector design
* make board selector item focusable
* fix i18n
* 💄
* re-add debug log on board config changed
* Updated themes
* use new color variables
* update arduino-icons.json
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This commit is contained in:
parent
73835eced3
commit
4f27725b35
File diff suppressed because one or more lines are too long
@ -61,6 +61,7 @@
|
||||
"atob": "^2.1.2",
|
||||
"auth0-js": "^9.14.0",
|
||||
"btoa": "^1.2.1",
|
||||
"classnames": "^2.3.1",
|
||||
"dateformat": "^3.0.3",
|
||||
"deep-equal": "^2.0.5",
|
||||
"deepmerge": "2.0.1",
|
||||
|
@ -618,6 +618,74 @@ export class ArduinoFrontendContribution
|
||||
hc: 'editor.background',
|
||||
},
|
||||
description: 'Background color of the Output view.',
|
||||
},
|
||||
{
|
||||
id: 'arduino.toolbar.dropdown.border',
|
||||
defaults: {
|
||||
dark: 'dropdown.border',
|
||||
light: 'dropdown.border',
|
||||
hc: 'dropdown.border',
|
||||
},
|
||||
description: 'Border color of the Board Selector.',
|
||||
},
|
||||
|
||||
{
|
||||
id: 'arduino.toolbar.dropdown.borderActive',
|
||||
defaults: {
|
||||
dark: 'focusBorder',
|
||||
light: 'focusBorder',
|
||||
hc: 'focusBorder',
|
||||
},
|
||||
description: "Border color of the Board Selector when it's active",
|
||||
},
|
||||
|
||||
{
|
||||
id: 'arduino.toolbar.dropdown.background',
|
||||
defaults: {
|
||||
dark: 'tab.unfocusedActiveBackground',
|
||||
light: 'tab.unfocusedActiveBackground',
|
||||
hc: 'tab.unfocusedActiveBackground',
|
||||
},
|
||||
description: 'Background color of the Board Selector.',
|
||||
},
|
||||
|
||||
{
|
||||
id: 'arduino.toolbar.dropdown.label',
|
||||
defaults: {
|
||||
dark: 'foreground',
|
||||
light: 'foreground',
|
||||
hc: 'foreground',
|
||||
},
|
||||
description: 'Font color of the Board Selector.',
|
||||
},
|
||||
{
|
||||
id: 'arduino.toolbar.dropdown.iconSelected',
|
||||
defaults: {
|
||||
dark: 'statusBar.background',
|
||||
light: 'statusBar.background',
|
||||
hc: 'statusBar.background',
|
||||
},
|
||||
description:
|
||||
'Color of the selected protocol icon in the Board Selector.',
|
||||
},
|
||||
{
|
||||
id: 'arduino.toolbar.dropdown.option.backgroundHover',
|
||||
defaults: {
|
||||
dark: 'editor.background',
|
||||
light: 'editor.background',
|
||||
hc: 'editor.background',
|
||||
},
|
||||
description: 'Background color on hover of the Board Selector options.',
|
||||
},
|
||||
{
|
||||
id: 'arduino.toolbar.dropdown.option.backgroundSelected',
|
||||
defaults: {
|
||||
dark: 'editor.background',
|
||||
light: 'editor.background',
|
||||
hc: 'editor.background',
|
||||
},
|
||||
description:
|
||||
'Background color of the selected board in the Board Selector.',
|
||||
}
|
||||
);
|
||||
}
|
||||
|
@ -270,7 +270,7 @@ export class BoardsServiceProvider implements FrontendApplicationContribution {
|
||||
}
|
||||
|
||||
protected setBoardsConfig(config: BoardsConfig.Config): void {
|
||||
this.logger.info('Board config changed: ', JSON.stringify(config));
|
||||
this.logger.debug('Board config changed: ', JSON.stringify(config));
|
||||
this._boardsConfig = config;
|
||||
this.latestBoardsConfig = this._boardsConfig;
|
||||
if (this.canUploadTo(this._boardsConfig)) {
|
||||
|
@ -3,13 +3,13 @@ import * as ReactDOM from '@theia/core/shared/react-dom';
|
||||
import { CommandRegistry } from '@theia/core/lib/common/command';
|
||||
import { DisposableCollection } from '@theia/core/lib/common/disposable';
|
||||
import { Port } from '../../common/protocol';
|
||||
import { BoardsConfig } from './boards-config';
|
||||
import { ArduinoCommands } from '../arduino-commands';
|
||||
import {
|
||||
BoardsServiceProvider,
|
||||
AvailableBoard,
|
||||
} from './boards-service-provider';
|
||||
import { nls } from '@theia/core/lib/common';
|
||||
import classNames from 'classnames';
|
||||
|
||||
export interface BoardsDropDownListCoords {
|
||||
readonly top: number;
|
||||
@ -28,10 +28,12 @@ export namespace BoardsDropDown {
|
||||
|
||||
export class BoardsDropDown extends React.Component<BoardsDropDown.Props> {
|
||||
protected dropdownElement: HTMLElement;
|
||||
private listRef: React.RefObject<HTMLDivElement>;
|
||||
|
||||
constructor(props: BoardsDropDown.Props) {
|
||||
super(props);
|
||||
|
||||
this.listRef = React.createRef();
|
||||
let list = document.getElementById('boards-dropdown-container');
|
||||
if (!list) {
|
||||
list = document.createElement('div');
|
||||
@ -41,6 +43,12 @@ export class BoardsDropDown extends React.Component<BoardsDropDown.Props> {
|
||||
}
|
||||
}
|
||||
|
||||
override componentDidUpdate(prevProps: BoardsDropDown.Props): void {
|
||||
if (prevProps.coords === 'hidden' && this.listRef.current) {
|
||||
this.listRef.current.focus();
|
||||
}
|
||||
}
|
||||
|
||||
override render(): React.ReactNode {
|
||||
return ReactDOM.createPortal(this.renderNode(), this.dropdownElement);
|
||||
}
|
||||
@ -61,21 +69,22 @@ export class BoardsDropDown extends React.Component<BoardsDropDown.Props> {
|
||||
position: 'absolute',
|
||||
...coords,
|
||||
}}
|
||||
ref={this.listRef}
|
||||
tabIndex={0}
|
||||
>
|
||||
{items
|
||||
.map(({ name, port, selected, onClick }) => ({
|
||||
label: nls.localize(
|
||||
'arduino/board/boardListItem',
|
||||
'{0} at {1}',
|
||||
name,
|
||||
Port.toString(port)
|
||||
),
|
||||
selected,
|
||||
onClick,
|
||||
}))
|
||||
.map(this.renderItem)}
|
||||
<div className="arduino-boards-dropdown-list--items-container">
|
||||
{items
|
||||
.map(({ name, port, selected, onClick }) => ({
|
||||
boardLabel: name,
|
||||
port,
|
||||
selected,
|
||||
onClick,
|
||||
}))
|
||||
.map(this.renderItem)}
|
||||
</div>
|
||||
<div
|
||||
key={footerLabel}
|
||||
tabIndex={0}
|
||||
className="arduino-boards-dropdown-item arduino-board-dropdown-footer"
|
||||
onClick={() => this.props.openBoardsConfig()}
|
||||
>
|
||||
@ -86,22 +95,49 @@ export class BoardsDropDown extends React.Component<BoardsDropDown.Props> {
|
||||
}
|
||||
|
||||
protected renderItem({
|
||||
label,
|
||||
boardLabel,
|
||||
port,
|
||||
selected,
|
||||
onClick,
|
||||
}: {
|
||||
label: string;
|
||||
boardLabel: string;
|
||||
port: Port;
|
||||
selected?: boolean;
|
||||
onClick: () => void;
|
||||
}): React.ReactNode {
|
||||
const protocolIcon = iconNameFromProtocol(port.protocol);
|
||||
const onKeyUp = (e: React.KeyboardEvent) => {
|
||||
if (e.key === 'Enter') {
|
||||
onClick();
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div
|
||||
key={label}
|
||||
className={`arduino-boards-dropdown-item ${selected ? 'selected' : ''}`}
|
||||
key={`board-item--${boardLabel}-${port.address}`}
|
||||
className={classNames('arduino-boards-dropdown-item', {
|
||||
'arduino-boards-dropdown-item--selected': selected,
|
||||
})}
|
||||
onClick={onClick}
|
||||
onKeyUp={onKeyUp}
|
||||
tabIndex={0}
|
||||
>
|
||||
<div>{label}</div>
|
||||
{selected ? <span className="fa fa-check" /> : ''}
|
||||
<div
|
||||
className={classNames(
|
||||
'arduino-boards-dropdown-item--protocol',
|
||||
'fa',
|
||||
protocolIcon
|
||||
)}
|
||||
/>
|
||||
<div className="arduino-boards-dropdown-item--label">
|
||||
<div className="arduino-boards-dropdown-item--board-label">
|
||||
{boardLabel}
|
||||
</div>
|
||||
<div className="arduino-boards-dropdown-item--port-label">
|
||||
{port.address}
|
||||
</div>
|
||||
</div>
|
||||
{selected ? <div className="fa fa-check" /> : ''}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@ -163,36 +199,43 @@ export class BoardsToolBarItem extends React.Component<
|
||||
|
||||
override render(): React.ReactNode {
|
||||
const { coords, availableBoards } = this.state;
|
||||
const boardsConfig = this.props.boardsServiceClient.boardsConfig;
|
||||
const title = BoardsConfig.Config.toString(boardsConfig, {
|
||||
default: nls.localize(
|
||||
'arduino/common/noBoardSelected',
|
||||
'No board selected'
|
||||
),
|
||||
});
|
||||
const decorator = (() => {
|
||||
const selectedBoard = availableBoards.find(({ selected }) => selected);
|
||||
if (!selectedBoard || !selectedBoard.port) {
|
||||
return 'fa fa-times notAttached';
|
||||
}
|
||||
if (selectedBoard.state === AvailableBoard.State.guessed) {
|
||||
return 'fa fa-exclamation-triangle guessed';
|
||||
}
|
||||
return '';
|
||||
})();
|
||||
const selectedBoard = availableBoards.find(({ selected }) => selected);
|
||||
|
||||
const boardLabel =
|
||||
selectedBoard?.name ||
|
||||
nls.localize('arduino/board/selectBoard', 'Select Board');
|
||||
const selectedPortLabel = portLabel(selectedBoard?.port?.address);
|
||||
|
||||
const isConnected = Boolean(
|
||||
selectedBoard && AvailableBoard.hasPort(selectedBoard)
|
||||
);
|
||||
const protocolIcon = isConnected
|
||||
? iconNameFromProtocol(selectedBoard?.port?.protocol || '')
|
||||
: null;
|
||||
const procolIconClassNames = classNames(
|
||||
'arduino-boards-toolbar-item--protocol',
|
||||
'fa',
|
||||
protocolIcon
|
||||
);
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<div className="arduino-boards-toolbar-item-container">
|
||||
<div className="arduino-boards-toolbar-item" title={title}>
|
||||
<div className="inner-container" onClick={this.show}>
|
||||
<span className={decorator} />
|
||||
<div className="label noWrapInfo">
|
||||
<div className="noWrapInfo noselect">{title}</div>
|
||||
</div>
|
||||
<span className="fa fa-caret-down caret" />
|
||||
</div>
|
||||
<div
|
||||
className="arduino-boards-toolbar-item-container"
|
||||
title={selectedPortLabel}
|
||||
onClick={this.show}
|
||||
>
|
||||
{protocolIcon && <div className={procolIconClassNames} />}
|
||||
<div
|
||||
className={classNames(
|
||||
'arduino-boards-toolbar-item--label',
|
||||
'noWrapInfo noselect',
|
||||
{ 'arduino-boards-toolbar-item--label-connected': isConnected }
|
||||
)}
|
||||
>
|
||||
{boardLabel}
|
||||
</div>
|
||||
<div className="fa fa-caret-down caret" />
|
||||
</div>
|
||||
<BoardsDropDown
|
||||
coords={coords}
|
||||
@ -212,6 +255,7 @@ export class BoardsToolBarItem extends React.Component<
|
||||
selectedPort: board.port,
|
||||
};
|
||||
}
|
||||
this.setState({ coords: 'hidden' });
|
||||
},
|
||||
}))}
|
||||
openBoardsConfig={this.openDialog}
|
||||
@ -222,7 +266,6 @@ export class BoardsToolBarItem extends React.Component<
|
||||
|
||||
protected openDialog = () => {
|
||||
this.props.commands.executeCommand(ArduinoCommands.OPEN_BOARDS_DIALOG.id);
|
||||
this.setState({ coords: 'hidden' });
|
||||
};
|
||||
}
|
||||
export namespace BoardsToolBarItem {
|
||||
@ -236,3 +279,26 @@ export namespace BoardsToolBarItem {
|
||||
coords: BoardsDropDownListCoords | 'hidden';
|
||||
}
|
||||
}
|
||||
|
||||
function iconNameFromProtocol(protocol: string): string {
|
||||
switch (protocol) {
|
||||
case 'serial':
|
||||
return 'fa-arduino-technology-usb';
|
||||
case 'network':
|
||||
return 'fa-arduino-technology-connection';
|
||||
/*
|
||||
Bluetooth ports are not listed yet from the CLI;
|
||||
Not sure about the naming ('bluetooth'); make sure it's correct before uncommenting the following lines
|
||||
*/
|
||||
// case 'bluetooth':
|
||||
// return 'fa-arduino-technology-bluetooth';
|
||||
default:
|
||||
return 'fa-arduino-technology-3dimensionscube';
|
||||
}
|
||||
}
|
||||
|
||||
function portLabel(portName?: string): string {
|
||||
return portName
|
||||
? nls.localize('arduino/board/portLabel', 'Port: {0}', portName)
|
||||
: nls.localize('arduino/board/disconnected', 'Disconnected');
|
||||
}
|
||||
|
@ -47,6 +47,13 @@
|
||||
"arduino.output.background": "#000000",
|
||||
"arduino.toolbar.button.hoverBackground": "#dae3e3",
|
||||
"arduino.toolbar.button.background": "#0ca1a6",
|
||||
"arduino.toolbar.dropdown.border": "#7fcbcd",
|
||||
"arduino.toolbar.dropdown.borderActive": "#0ca1a6",
|
||||
"arduino.toolbar.dropdown.background": "#2c353a",
|
||||
"arduino.toolbar.dropdown.label": "#dae3e3",
|
||||
"arduino.toolbar.dropdown.iconSelected": "#3fae98",
|
||||
"arduino.toolbar.dropdown.option.backgroundHover": "#374146",
|
||||
"arduino.toolbar.dropdown.option.backgroundSelected": "#4e5b61",
|
||||
"arduino.toolbar.toggleBackground": "#f1c40f",
|
||||
"sideBar.background": "#101618",
|
||||
"sideBar.foreground": "#dae3e3",
|
||||
|
@ -29,7 +29,7 @@
|
||||
"titleBar.activeForeground": "#f7f9f9",
|
||||
"terminal.background": "#000000",
|
||||
"terminal.foreground": "#e0e0e0",
|
||||
"dropdown.border": "#f7f9f9",
|
||||
"dropdown.border": "#dae3e3",
|
||||
"dropdown.background": "#ffffff",
|
||||
"dropdown.foreground": "#4e5b61",
|
||||
"activityBar.background": "#ecf1f1",
|
||||
@ -47,6 +47,13 @@
|
||||
"arduino.output.background": "#000000",
|
||||
"arduino.toolbar.button.hoverBackground": "#f7f9f9",
|
||||
"arduino.toolbar.button.background": "#7fcbcd",
|
||||
"arduino.toolbar.dropdown.border": "#dae3e3",
|
||||
"arduino.toolbar.dropdown.borderActive": "#7fcbcd",
|
||||
"arduino.toolbar.dropdown.background": "#ffffff",
|
||||
"arduino.toolbar.dropdown.label": "#4e5b61",
|
||||
"arduino.toolbar.dropdown.iconSelected": "#1da086",
|
||||
"arduino.toolbar.dropdown.option.backgroundHover": "#ecf1f1",
|
||||
"arduino.toolbar.dropdown.option.backgroundSelected": "#dae3e3",
|
||||
"arduino.toolbar.toggleBackground": "#f1c40f",
|
||||
"sideBar.background": "#f7f9f9",
|
||||
"sideBar.foreground": "#4e5b61",
|
||||
|
@ -142,96 +142,125 @@ div#select-board-dialog .selectBoardContainer .body .list .item.selected i {
|
||||
.p-Widget.dialogOverlay .dialogContent.select-board-dialog {
|
||||
width: 500px;
|
||||
}
|
||||
|
||||
.arduino-boards-toolbar-item-container {
|
||||
margin-left: 3px;
|
||||
align-items: center;
|
||||
background: var(--theia-arduino-toolbar-dropdown-background);
|
||||
border-radius: 1px;
|
||||
color: var(--theia-arduino-toolbar-dropdown-label);
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
height: 24px;
|
||||
margin: 0 6px;
|
||||
overflow: hidden;
|
||||
padding: 0 10px;
|
||||
width: 230px;
|
||||
}
|
||||
|
||||
.arduino-boards-toolbar-item--protocol,
|
||||
.arduino-boards-dropdown-item--protocol {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.arduino-boards-toolbar-item--protocol {
|
||||
color: var(--theia-arduino-toolbar-dropdown-label);
|
||||
}
|
||||
|
||||
.arduino-boards-dropdown-item--protocol {
|
||||
color: var(--theia-arduino-toolbar-dropdown-label);
|
||||
}
|
||||
|
||||
.arduino-boards-toolbar-item-container
|
||||
.arduino-boards-toolbar-item
|
||||
.inner-container {
|
||||
.arduino-boards-toolbar-item {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.arduino-boards-toolbar-item-container
|
||||
.arduino-boards-toolbar-item
|
||||
.inner-container
|
||||
.notAttached {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
color: red;
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
.arduino-boards-toolbar-item-container
|
||||
.arduino-boards-toolbar-item
|
||||
.inner-container
|
||||
.guessed {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
color: var(--theia-warningBackground);
|
||||
margin: 0 5px;
|
||||
}
|
||||
|
||||
.arduino-boards-toolbar-item-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 220px;
|
||||
}
|
||||
|
||||
.arduino-boards-toolbar-item .label {
|
||||
.arduino-boards-toolbar-item--label {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin: 0 5px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.arduino-boards-toolbar-item .caret {
|
||||
.arduino-boards-toolbar-item--label-connected {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.arduino-boards-toolbar-item-container .caret {
|
||||
width: 10px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.arduino-boards-toolbar-item {
|
||||
background: var(--theia-tab-unfocusedActiveBackground);
|
||||
color: var(--theia-foreground);
|
||||
height: 22px;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
margin: 0px 3px 0px 3px;
|
||||
border: 1px solid var(--theia-dropdown-border);
|
||||
}
|
||||
|
||||
.arduino-boards-dropdown-list {
|
||||
border: 3px solid var(--theia-activityBar-background);
|
||||
margin: -1px;
|
||||
z-index: 1;
|
||||
border: 1px solid var(--theia-dropdown-border);
|
||||
border: 1px solid var(--theia-arduino-toolbar-dropdown-border);
|
||||
}
|
||||
|
||||
.arduino-boards-dropdown-list:focus {
|
||||
border: 1px solid var(--theia-arduino-toolbar-dropdown-borderActive);
|
||||
}
|
||||
|
||||
.arduino-boards-dropdown-list--items-container {
|
||||
overflow: auto;
|
||||
max-height: 404px;
|
||||
}
|
||||
|
||||
.arduino-boards-dropdown-list--items-container::-webkit-scrollbar {
|
||||
background: var(--theia-arduino-toolbar-dropdown-background);
|
||||
}
|
||||
|
||||
.arduino-boards-dropdown-item {
|
||||
font-size: var(--theia-ui-font-size1);
|
||||
background: var(--theia-arduino-toolbar-dropdown-background);
|
||||
color: var(--theia-arduino-toolbar-dropdown-label);
|
||||
cursor: default;
|
||||
display: flex;
|
||||
font-size: var(--theia-ui-font-size1);
|
||||
gap: 10px;
|
||||
justify-content: space-between;
|
||||
padding: 10px;
|
||||
cursor: pointer;
|
||||
color: var(--theia-foreground);
|
||||
background: var(--theia-tab-unfocusedActiveBackground);
|
||||
border: 1px solid var(--theia-tab-unfocusedActiveBackground);
|
||||
}
|
||||
|
||||
.arduino-boards-dropdown-item--label {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.arduino-boards-dropdown-item--board-label {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.arduino-boards-dropdown-item--port-label {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.arduino-boards-dropdown-item:hover {
|
||||
background: var(--theia-arduino-toolbar-dropdown-option-backgroundHover);
|
||||
}
|
||||
|
||||
.arduino-boards-dropdown-item--selected,
|
||||
.arduino-boards-dropdown-item--selected:hover {
|
||||
background: var(--theia-arduino-toolbar-dropdown-option-backgroundSelected);
|
||||
border: 1px solid var(--theia-arduino-toolbar-dropdown-option-backgroundSelected);
|
||||
}
|
||||
|
||||
.arduino-boards-dropdown-item--selected
|
||||
.arduino-boards-dropdown-item--port-label {
|
||||
color: var(--theia-arduino-toolbar-dropdown-label);
|
||||
}
|
||||
|
||||
.arduino-boards-dropdown-item--selected .fa {
|
||||
color: var(--theia-arduino-toolbar-dropdown-iconSelected);
|
||||
}
|
||||
|
||||
.arduino-boards-dropdown-item .fa-check {
|
||||
color: var(--theia-arduino-branding-primary);
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.arduino-boards-dropdown-item.selected,
|
||||
.arduino-boards-dropdown-item:hover {
|
||||
border: 1px solid var(--theia-focusBorder);
|
||||
}
|
||||
|
||||
.arduino-board-dropdown-footer {
|
||||
color: var(--theia-arduino-branding-primary);
|
||||
border-top: 1px solid var(--theia-dropdown-border);
|
||||
border-top: 1px solid var(--theia-arduino-toolbar-dropdown-border);
|
||||
}
|
||||
|
@ -1,14 +1,9 @@
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
src: url('fonts/OpenSans-Bold-webfont.woff') format('woff');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'FontAwesome';
|
||||
src:
|
||||
url('fonts/FontAwesome.ttf?nuchcq') format('truetype'),
|
||||
url('fonts/FontAwesome.woff?nuchcq') format('woff'),
|
||||
url('fonts/FontAwesome.svg?nuchcq#FontAwesome') format('svg');
|
||||
url('fonts/FontAwesome.ttf?ykyvxr') format('truetype'),
|
||||
url('fonts/FontAwesome.woff?ykyvxr') format('woff'),
|
||||
url('fonts/FontAwesome.svg?ykyvxr#FontAwesome') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: block;
|
||||
@ -29,10 +24,24 @@
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.fa-fa-check:before {
|
||||
content: "\e90a";
|
||||
}
|
||||
.fa-arduino-technology-3dimensionscube:before {
|
||||
content: "\e906";
|
||||
}
|
||||
.fa-arduino-technology-usb:before {
|
||||
content: "\e907";
|
||||
}
|
||||
.fa-arduino-technology-connection:before {
|
||||
content: "\e908";
|
||||
}
|
||||
.fa-arduino-technology-bluetooth:before {
|
||||
content: "\e909";
|
||||
}
|
||||
.fa-arduino-debugger:before {
|
||||
content: "\e905";
|
||||
}
|
||||
|
||||
.fa-arduino-search:before {
|
||||
content: "\e901";
|
||||
}
|
||||
@ -93,9 +102,6 @@
|
||||
.fa-th-list:before {
|
||||
content: "\f00b";
|
||||
}
|
||||
.fa-check:before {
|
||||
content: "\f00c";
|
||||
}
|
||||
.fa-close:before {
|
||||
content: "\f00d";
|
||||
}
|
||||
@ -135,9 +141,6 @@
|
||||
.fa-clock-o:before {
|
||||
content: "\f017";
|
||||
}
|
||||
.fa-road:before {
|
||||
content: "\f018";
|
||||
}
|
||||
.fa-download:before {
|
||||
content: "\f019";
|
||||
}
|
||||
@ -168,9 +171,6 @@
|
||||
.fa-lock:before {
|
||||
content: "\f023";
|
||||
}
|
||||
.fa-flag:before {
|
||||
content: "\f024";
|
||||
}
|
||||
.fa-volume-off:before {
|
||||
content: "\f026";
|
||||
}
|
||||
@ -192,9 +192,6 @@
|
||||
.fa-book:before {
|
||||
content: "\f02d";
|
||||
}
|
||||
.fa-bookmark:before {
|
||||
content: "\f02e";
|
||||
}
|
||||
.fa-print:before {
|
||||
content: "\f02f";
|
||||
}
|
||||
@ -228,21 +225,12 @@
|
||||
.fa-indent:before {
|
||||
content: "\f03c";
|
||||
}
|
||||
.fa-video-camera:before {
|
||||
content: "\f03d";
|
||||
}
|
||||
.fa-pencil:before {
|
||||
content: "\f040";
|
||||
}
|
||||
.fa-map-marker:before {
|
||||
content: "\f041";
|
||||
}
|
||||
.fa-adjust:before {
|
||||
content: "\f042";
|
||||
}
|
||||
.fa-tint:before {
|
||||
content: "\f043";
|
||||
}
|
||||
.fa-edit:before {
|
||||
content: "\f044";
|
||||
}
|
||||
@ -393,24 +381,12 @@
|
||||
.fa-arrows-h:before {
|
||||
content: "\f07e";
|
||||
}
|
||||
.fa-bar-chart:before {
|
||||
content: "\f080";
|
||||
}
|
||||
.fa-bar-chart-o:before {
|
||||
content: "\f080";
|
||||
}
|
||||
.fa-cogs:before {
|
||||
content: "\f085";
|
||||
}
|
||||
.fa-gears:before {
|
||||
content: "\f085";
|
||||
}
|
||||
.fa-thumbs-o-up:before {
|
||||
content: "\f087";
|
||||
}
|
||||
.fa-thumbs-o-down:before {
|
||||
content: "\f088";
|
||||
}
|
||||
.fa-star-half:before {
|
||||
content: "\f089";
|
||||
}
|
||||
@ -459,9 +435,6 @@
|
||||
.fa-arrow-circle-down:before {
|
||||
content: "\f0ab";
|
||||
}
|
||||
.fa-globe:before {
|
||||
content: "\f0ac";
|
||||
}
|
||||
.fa-wrench:before {
|
||||
content: "\f0ad";
|
||||
}
|
||||
@ -582,30 +555,9 @@
|
||||
.fa-angle-down:before {
|
||||
content: "\f107";
|
||||
}
|
||||
.fa-desktop:before {
|
||||
content: "\f108";
|
||||
}
|
||||
.fa-laptop:before {
|
||||
content: "\f109";
|
||||
}
|
||||
.fa-tablet:before {
|
||||
content: "\f10a";
|
||||
}
|
||||
.fa-mobile:before {
|
||||
content: "\f10b";
|
||||
}
|
||||
.fa-mobile-phone:before {
|
||||
content: "\f10b";
|
||||
}
|
||||
.fa-circle-o:before {
|
||||
content: "\f10c";
|
||||
}
|
||||
.fa-quote-left:before {
|
||||
content: "\f10d";
|
||||
}
|
||||
.fa-quote-right:before {
|
||||
content: "\f10e";
|
||||
}
|
||||
.fa-spinner:before {
|
||||
content: "\f110";
|
||||
}
|
||||
@ -618,27 +570,15 @@
|
||||
.fa-reply:before {
|
||||
content: "\f112";
|
||||
}
|
||||
.fa-github-alt:before {
|
||||
content: "\f113";
|
||||
}
|
||||
.fa-folder-o:before {
|
||||
content: "\f114";
|
||||
}
|
||||
.fa-folder-open-o:before {
|
||||
content: "\f115";
|
||||
}
|
||||
.fa-gamepad:before {
|
||||
content: "\f11b";
|
||||
}
|
||||
.fa-keyboard-o:before {
|
||||
content: "\f11c";
|
||||
}
|
||||
.fa-flag-o:before {
|
||||
content: "\f11d";
|
||||
}
|
||||
.fa-flag-checkered:before {
|
||||
content: "\f11e";
|
||||
}
|
||||
.fa-terminal:before {
|
||||
content: "\f120";
|
||||
}
|
||||
|
@ -13,6 +13,11 @@
|
||||
<glyph unicode="" glyph-name="arduino-library" d="M1006.669 49.097l-164.271 625.707c-2.778 9.338-9.097 17.219-17.604 21.963-8.512 4.743-18.539 5.972-27.942 3.424l-135.518-33.973v220.64c0 9.901-3.934 19.397-10.935 26.399s-16.495 10.935-26.398 10.935h-149.333c-9.903 0-19.396-3.933-26.398-10.935s-10.935-16.497-10.935-26.399v-112h-149.333v74.667c0 9.901-3.933 19.397-10.935 26.399s-16.497 10.935-26.399 10.935h-186.667c-9.901 0-19.397-3.933-26.399-10.935s-10.935-16.497-10.935-26.399v-858.667c0-9.903 3.933-19.396 10.935-26.398s16.497-10.935 26.399-10.935h560c9.903 0 19.396 3.934 26.398 10.935s10.935 16.495 10.935 26.398v435.682l114.987-437.922c2.116-8.213 6.967-15.462 13.751-20.553 6.788-5.090 15.104-7.714 23.582-7.445 3.226-0.363 6.481-0.363 9.707 0l157.918 41.438c9.566 2.483 17.758 8.661 22.775 17.173 2.475 4.527 3.985 9.519 4.437 14.66 0.448 5.141-0.171 10.317-1.822 15.206zM213.333 28.19h-112v784h112v-784zM437.333 28.19h-149.333v672h149.333v-672zM586.667 28.19h-74.667v821.333h74.667v-821.333zM839.040 43.87l-145.225 553.28 85.867 22.773 145.225-554.4-85.867-21.653z" />
|
||||
<glyph unicode="" glyph-name="arduino-folder" horiz-adv-x="1252" d="M1173.333 737.523h-527.15l-184.175 184.675c-4.651 4.614-10.167 8.263-16.232 10.741s-12.559 3.733-19.11 3.695h-348.444c-13.202 0-25.863-5.244-35.198-14.58s-14.58-21.996-14.58-35.198v-895.999c0-13.204 5.244-25.862 14.58-35.197s21.997-14.581 35.198-14.581h1095.111c13.204 0 25.862 5.245 35.197 14.581s14.581 21.993 14.581 35.197v696.888c0 13.202-5.245 25.863-14.581 35.198s-21.993 14.58-35.197 14.58zM128 837.079h278.258l99.556-99.556h-377.813v99.556zM1123.556 40.635h-995.556v597.333h995.556v-597.333z" />
|
||||
<glyph unicode="" glyph-name="arduino-debugger" horiz-adv-x="1071" d="M634.224 287.761c-8.983-0.009-17.72 2.956-24.841 8.425-7.126 5.474-12.241 13.149-14.55 21.83s-1.685 17.883 1.778 26.168c3.463 8.29 9.57 15.202 17.366 19.661l304.621 173.966-488.052 278.888v-296.387c0-10.801-4.291-21.16-11.929-28.799s-17.997-11.929-28.799-11.929c-10.801 0-21.16 4.291-28.799 11.929s-11.929 17.997-11.929 28.799v366.545c-0.004 7.135 1.867 14.146 5.426 20.33s8.681 11.324 14.852 14.905c6.171 3.581 13.175 5.477 20.31 5.499s14.15-1.832 20.343-5.376l610.91-349.045c6.232-3.561 11.413-8.707 15.020-14.917 3.603-6.209 5.502-13.261 5.502-20.441s-1.899-14.232-5.502-20.441c-3.607-6.21-8.788-11.356-15.020-14.917l-366.545-209.326c-6.135-3.523-13.089-5.376-20.163-5.367zM512 153.766c10.803 0 21.16 4.291 28.798 11.93s11.93 17.994 11.93 28.798c0 10.803-4.291 21.16-11.93 28.798s-17.994 11.93-28.798 11.93h-43.176c-1.987 17.389-5.532 34.56-10.587 51.316l41.949 41.951c3.798 3.793 6.81 8.304 8.867 13.265 2.053 4.962 3.109 10.277 3.109 15.649s-1.057 10.687-3.109 15.649c-2.057 4.962-5.069 9.467-8.867 13.265s-8.304 6.81-13.265 8.867c-4.962 2.053-10.277 3.114-15.649 3.114s-10.688-1.061-15.65-3.114c-4.961-2.057-9.47-5.069-13.267-8.867l-21.585-21.583c-14.553 22.109-34.216 40.387-57.327 53.285-23.11 12.902-48.988 20.052-75.444 20.838-26.456-0.787-52.334-7.936-75.444-20.838s-42.774-31.181-57.327-53.29l-21.585 21.588c-7.669 7.671-18.070 11.976-28.915 11.976s-21.247-4.305-28.916-11.976c-7.669-7.666-11.978-18.069-11.978-28.914s4.308-21.248 11.977-28.914l41.949-41.951c-5.055-16.756-8.599-33.927-10.589-51.316h-43.171c-10.801 0-21.161-4.291-28.799-11.93s-11.929-17.994-11.929-28.798c0-10.803 4.291-21.16 11.929-28.798s17.997-11.93 28.799-11.93h43.173c1.991-17.389 5.534-34.56 10.589-51.316l-1.222-1.224-40.727-40.727c-7.631-7.685-11.913-18.078-11.913-28.914 0-10.831 4.282-21.225 11.913-28.914 7.72-7.568 18.102-11.813 28.915-11.813s21.194 4.245 28.915 11.813l21.585 21.588c14.553-22.109 34.216-40.387 57.327-53.29s48.989-20.052 75.445-20.838c26.456 0.787 52.334 7.936 75.444 20.838s42.774 31.181 57.327 53.29l21.585-21.588c7.72-7.573 18.102-11.813 28.916-11.813 10.813 0 21.192 4.24 28.914 11.813 7.629 7.689 11.911 18.083 11.911 28.914 0 10.836-4.282 21.229-11.911 28.914l-41.95 41.951c5.055 16.756 8.6 33.927 10.588 51.316h43.176zM288 357.402c37.058 0 69.644-32.991 87.564-81.455h-175.127c17.92 48.463 50.506 81.455 87.564 81.455zM288 31.584c-55.389 0-101.818 74.533-101.818 162.909h203.636c0-88.376-46.429-162.909-101.818-162.909z" />
|
||||
<glyph unicode="" glyph-name="arduino-technology-3dimensionscube" d="M864 822.857h-576c-8.484-0.062-16.618-3.385-22.72-9.28l-128-128c-5.969-6.052-9.305-14.219-9.28-22.72v-576c0.024-8.48 3.404-16.602 9.4-22.598s14.121-9.376 22.6-9.402h576c8.486 0.038 16.634 3.36 22.72 9.28l128 128c5.894 6.099 9.216 14.234 9.28 22.72v576c-0.026 8.479-3.405 16.605-9.402 22.6s-14.118 9.375-22.598 9.4zM704 118.857h-512v512h512v-512zM722.56 694.857h-485.12l63.68 64h485.44l-64-64zM832 227.977l-64-63.68v485.12l64 64v-485.44z" />
|
||||
<glyph unicode="" glyph-name="arduino-technology-usb" d="M848 726.857v-96c0-8.487-3.373-16.627-9.37-22.627-6.003-6.001-14.144-9.373-22.63-9.373h-16v-96c-0.019-5.909-1.67-11.699-4.781-16.725-3.104-5.027-7.539-9.096-12.819-11.755l-238.4-119.36v-242.88c16.845-7.354 30.644-20.282 39.079-36.608 8.435-16.333 10.989-35.066 7.233-53.056s-13.59-34.144-27.852-45.734c-14.262-11.597-32.081-17.92-50.46-17.92s-36.198 6.323-50.46 17.92c-14.262 11.59-24.097 27.744-27.852 45.734s-1.201 36.723 7.233 53.056c8.435 16.326 22.234 29.254 39.079 36.608v82.88l-238.4 119.36c-5.277 2.659-9.715 6.728-12.822 11.755s-4.76 10.816-4.778 16.725v102.72c-16.845 7.352-30.644 20.279-39.079 36.609s-10.988 35.066-7.233 53.057c3.755 17.992 13.59 34.141 27.852 45.734s32.081 17.921 50.46 17.921c18.38 0 36.198-6.328 50.46-17.921s24.097-27.743 27.852-45.734c3.756-17.992 1.201-36.727-7.233-53.057s-22.234-29.257-39.079-36.609v-82.88l192-96v524.16h-32c-6.372-0.032-12.609 1.839-17.91 5.374s-9.428 8.572-11.85 14.466c-2.41 5.858-3.028 12.3-1.775 18.509s4.321 11.907 8.815 16.371l64 64c2.975 2.999 6.514 5.38 10.413 7.005s8.083 2.461 12.307 2.461c4.225 0 8.407-0.836 12.307-2.461s7.439-4.005 10.413-7.005l64-64c4.44-4.5 7.448-10.214 8.644-16.422s0.526-12.63-1.924-18.458c-2.401-5.844-6.477-10.846-11.716-14.377s-11.406-5.432-17.724-5.463h-32v-364.16l192 96v76.16h-16c-8.486 0-16.627 3.372-22.63 9.373-5.997 6.001-9.37 14.14-9.37 22.627v96c0 8.487 3.373 16.627 9.37 22.627 6.003 6.001 14.144 9.373 22.63 9.373h96c8.486 0 16.627-3.372 22.63-9.373 5.997-6.001 9.37-14.14 9.37-22.627z" />
|
||||
<glyph unicode="" glyph-name="arduino-technology-connection" d="M512 118.857c35.346 0 64 28.653 64 64s-28.654 64-64 64c-35.346 0-64-28.653-64-64s28.654-64 64-64zM647.699 286.537c-8.442 0.122-16.493 3.571-22.401 9.6-14.863 14.9-32.519 26.721-51.957 34.787s-40.277 12.218-61.323 12.218c-21.046 0-41.884-4.152-61.323-12.218s-37.094-19.887-51.957-34.787c-5.996-5.958-14.106-9.306-22.56-9.306s-16.564 3.347-22.56 9.306c-5.96 5.997-9.306 14.106-9.306 22.559s3.345 16.564 9.306 22.56c20.801 20.803 45.495 37.304 72.673 48.563s56.308 17.053 85.727 17.053c29.418 0 58.548-5.795 85.726-17.053s51.875-27.761 72.675-48.563c4.512-4.476 7.59-10.194 8.838-16.426 1.254-6.232 0.614-12.695-1.818-18.562-2.438-5.875-6.573-10.886-11.866-14.4-5.299-3.514-11.52-5.37-17.875-5.331zM919.373 558.218c-4.269-0.195-8.538 0.47-12.55 1.954s-7.686 3.757-10.81 6.686c-101.965 101.613-240.045 158.669-383.997 158.669-143.951 0-282.035-57.056-384-158.669-6.026-5.983-14.181-9.328-22.673-9.298s-16.623 3.432-22.607 9.458c-5.983 6.026-9.327 14.181-9.298 22.673s3.432 16.623 9.458 22.607c114.009 113.924 268.588 177.918 429.76 177.918 161.175 0 315.754-63.994 429.757-177.918 3.002-2.975 5.382-6.514 7.008-10.413s2.458-8.083 2.458-12.307c0-4.225-0.832-8.407-2.458-12.307s-4.006-7.439-7.008-10.413c-3.078-2.89-6.701-5.14-10.656-6.623-3.949-1.483-8.16-2.168-12.384-2.017zM783.706 422.541c-4.211-0.024-8.384 0.783-12.288 2.375-3.898 1.592-7.443 3.939-10.432 6.905-32.691 32.703-71.501 58.646-114.221 76.346-42.715 17.7-88.501 26.81-134.74 26.81s-92.025-9.11-134.742-26.81c-42.717-17.7-81.529-43.643-114.218-76.346-6.122-5.242-13.996-7.982-22.049-7.671s-15.693 3.65-21.393 9.349c-5.699 5.699-9.037 13.338-9.348 21.392s2.428 15.928 7.67 22.050c78.009 77.968 183.788 121.767 294.080 121.767s216.072-43.799 294.081-121.767c5.958-5.996 9.306-14.106 9.306-22.56s-3.347-16.564-9.306-22.56c-5.958-5.912-14.003-9.245-22.4-9.28z" />
|
||||
<glyph unicode="" glyph-name="arduino-technology-bluetooth" d="M512.006-41.137c-4.198-0.109-8.362 0.768-12.16 2.56-5.844 2.4-10.846 6.477-14.377 11.712-3.53 5.242-5.431 11.405-5.463 17.728v370.877l-169.28-169.597c-2.984-2.989-6.525-5.35-10.424-6.97-3.898-1.613-8.077-2.445-12.296-2.445s-8.397 0.832-12.296 2.445c-3.898 1.619-7.441 3.981-10.424 6.97-2.984 2.982-5.35 6.522-6.965 10.419s-2.445 8.077-2.445 12.301c0 4.218 0.831 8.397 2.445 12.294s3.981 7.437 6.965 10.426l201.6 201.277-201.6 201.28c-6.026 6.026-9.411 14.198-9.411 22.72s3.385 16.694 9.411 22.72c6.026 6.026 14.198 9.411 22.72 9.411s16.694-3.386 22.72-9.411l169.28-169.6v370.88c0.032 6.318 1.933 12.485 5.463 17.724s8.533 9.316 14.377 11.716c5.828 2.451 12.25 3.12 18.458 1.924s11.922-4.204 16.422-8.644l224.001-224c3.002-2.975 5.382-6.514 7.002-10.413 1.626-3.9 2.464-8.082 2.464-12.307s-0.838-8.407-2.464-12.307c-1.619-3.9-4-7.439-7.002-10.413l-201.601-201.28 201.601-201.277c3.002-2.976 5.382-6.515 7.002-10.419 1.626-3.898 2.464-8.077 2.464-12.301 0-4.23-0.838-8.41-2.464-12.307-1.619-3.904-4-7.443-7.002-10.413l-224.001-224c-2.99-2.97-6.536-5.318-10.435-6.906-3.899-1.594-8.074-2.4-12.285-2.374zM544.006 361.74v-293.757l146.881 146.88-146.881 146.877zM544.006 809.74v-293.76l146.881 146.88-146.881 146.88z" />
|
||||
<glyph unicode="" glyph-name="fa-check" d="M416.006 150.857c-4.211-0.026-8.386 0.787-12.285 2.374-3.899 1.594-7.445 3.942-10.435 6.906l-224 224.002c-6.026 6.026-9.411 14.198-9.411 22.72s3.385 16.694 9.411 22.72c6.026 6.026 14.198 9.411 22.72 9.411s16.694-3.386 22.72-9.411l201.28-201.602 425.281 425.602c6.022 6.026 14.195 9.411 22.72 9.411 8.518 0 16.691-3.386 22.72-9.411 6.022-6.026 9.408-14.198 9.408-22.72s-3.386-16.694-9.408-22.72l-448.001-448.002c-2.99-2.963-6.536-5.312-10.435-6.906-3.899-1.587-8.074-2.4-12.285-2.374z" />
|
||||
<glyph unicode="" glyph-name="music" horiz-adv-x="878" d="M877.714 822.857v-640c0-80.571-120.571-109.714-182.857-109.714s-182.857 29.143-182.857 109.714 120.571 109.714 182.857 109.714c37.714 0 75.429-6.857 109.714-22.286v306.857l-438.857-135.429v-405.143c0-80.571-120.571-109.714-182.857-109.714s-182.857 29.143-182.857 109.714 120.571 109.714 182.857 109.714c37.714 0 75.429-6.857 109.714-22.286v552.571c0 24 16 45.143 38.857 52.571l475.429 146.286c5.143 1.714 10.286 2.286 16 2.286 30.286 0 54.857-24.571 54.857-54.857z" />
|
||||
<glyph unicode="" glyph-name="search" horiz-adv-x="951" d="M658.286 475.428c0 141.143-114.857 256-256 256s-256-114.857-256-256 114.857-256 256-256 256 114.857 256 256zM950.857 0c0-40-33.143-73.143-73.143-73.143-19.429 0-38.286 8-51.429 21.714l-196 195.429c-66.857-46.286-146.857-70.857-228-70.857-222.286 0-402.286 180-402.286 402.286s180 402.286 402.286 402.286 402.286-180 402.286-402.286c0-81.143-24.571-161.143-70.857-228l196-196c13.143-13.143 21.143-32 21.143-51.429z" />
|
||||
<glyph unicode="" glyph-name="envelope-o" d="M950.857 91.428v438.857c-12-13.714-25.143-26.286-39.429-37.714-81.714-62.857-164-126.857-243.429-193.143-42.857-36-96-80-155.429-80h-1.143c-59.429 0-112.571 44-155.429 80-79.429 66.286-161.714 130.286-243.429 193.143-14.286 11.429-27.429 24-39.429 37.714v-438.857c0-9.714 8.571-18.286 18.286-18.286h841.143c9.714 0 18.286 8.571 18.286 18.286zM950.857 692c0 14.286 3.429 39.429-18.286 39.429h-841.143c-9.714 0-18.286-8.571-18.286-18.286 0-65.143 32.571-121.714 84-162.286 76.571-60 153.143-120.571 229.143-181.143 30.286-24.571 85.143-77.143 125.143-77.143h1.143c40 0 94.857 52.571 125.143 77.143 76 60.571 152.571 121.143 229.143 181.143 37.143 29.143 84 92.571 84 141.143zM1024 713.143v-621.714c0-50.286-41.143-91.429-91.429-91.429h-841.143c-50.286 0-91.429 41.143-91.429 91.429v621.714c0 50.286 41.143 91.429 91.429 91.429h841.143c50.286 0 91.429-41.143 91.429-91.429z" />
|
||||
@ -24,7 +29,6 @@
|
||||
<glyph unicode="" glyph-name="th-large" horiz-adv-x="951" d="M438.857 365.714v-219.429c0-40-33.143-73.143-73.143-73.143h-292.571c-40 0-73.143 33.143-73.143 73.143v219.429c0 40 33.143 73.143 73.143 73.143h292.571c40 0 73.143-33.143 73.143-73.143zM438.857 804.571v-219.429c0-40-33.143-73.143-73.143-73.143h-292.571c-40 0-73.143 33.143-73.143 73.143v219.429c0 40 33.143 73.143 73.143 73.143h292.571c40 0 73.143-33.143 73.143-73.143zM950.857 365.714v-219.429c0-40-33.143-73.143-73.143-73.143h-292.571c-40 0-73.143 33.143-73.143 73.143v219.429c0 40 33.143 73.143 73.143 73.143h292.571c40 0 73.143-33.143 73.143-73.143zM950.857 804.571v-219.429c0-40-33.143-73.143-73.143-73.143h-292.571c-40 0-73.143 33.143-73.143 73.143v219.429c0 40 33.143 73.143 73.143 73.143h292.571c40 0 73.143-33.143 73.143-73.143z" />
|
||||
<glyph unicode="" glyph-name="th" d="M292.571 237.714v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM292.571 530.286v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM658.286 237.714v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM292.571 822.857v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM658.286 530.286v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM1024 237.714v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM658.286 822.857v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM1024 530.286v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM1024 822.857v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857z" />
|
||||
<glyph unicode="" glyph-name="th-list" d="M292.571 237.714v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM292.571 530.286v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM1024 237.714v-109.714c0-30.286-24.571-54.857-54.857-54.857h-548.571c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h548.571c30.286 0 54.857-24.571 54.857-54.857zM292.571 822.857v-109.714c0-30.286-24.571-54.857-54.857-54.857h-182.857c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h182.857c30.286 0 54.857-24.571 54.857-54.857zM1024 530.286v-109.714c0-30.286-24.571-54.857-54.857-54.857h-548.571c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h548.571c30.286 0 54.857-24.571 54.857-54.857zM1024 822.857v-109.714c0-30.286-24.571-54.857-54.857-54.857h-548.571c-30.286 0-54.857 24.571-54.857 54.857v109.714c0 30.286 24.571 54.857 54.857 54.857h548.571c30.286 0 54.857-24.571 54.857-54.857z" />
|
||||
<glyph unicode="" glyph-name="check" d="M954.857 627.428c0-14.286-5.714-28.571-16-38.857l-491.429-491.429c-10.286-10.286-24.571-16-38.857-16s-28.571 5.714-38.857 16l-284.571 284.571c-10.286 10.286-16 24.571-16 38.857s5.714 28.571 16 38.857l77.714 77.714c10.286 10.286 24.571 16 38.857 16s28.571-5.714 38.857-16l168-168.571 374.857 375.429c10.286 10.286 24.571 16 38.857 16s28.571-5.714 38.857-16l77.714-77.714c10.286-10.286 16-24.571 16-38.857z" />
|
||||
<glyph unicode="" glyph-name="close, remove, times" horiz-adv-x="805" d="M725.322 168.514c3.477-3.448 6.237-7.547 8.118-12.069 1.885-4.515 2.853-9.364 2.853-14.259s-0.967-9.744-2.853-14.266c-1.881-4.515-4.641-8.623-8.118-12.069-3.448-3.472-7.547-6.232-12.069-8.118-4.515-1.881-9.364-2.848-14.259-2.848s-9.744 0.967-14.266 2.848c-4.522 1.885-8.623 4.646-12.069 8.118l-270.371 270.375-270.372-270.375c-3.448-3.472-7.549-6.232-12.069-8.118-4.519-1.881-9.366-2.848-14.263-2.848s-9.744 0.967-14.263 2.848c-4.519 1.885-8.622 4.646-12.069 8.118-3.474 3.448-6.235 7.555-8.118 12.069-1.884 4.522-2.853 9.37-2.853 14.266s0.97 9.744 2.853 14.259c1.884 4.522 4.643 8.623 8.118 12.069l270.372 270.375-270.372 270.372c-3.456 3.456-6.201 7.565-8.072 12.082s-2.835 9.36-2.835 14.25c0 4.891 0.964 9.732 2.835 14.25s4.617 8.626 8.072 12.081c3.456 3.456 7.564 6.201 12.081 8.072s9.361 2.835 14.25 2.835c4.891 0 9.732-0.964 14.25-2.835s8.626-4.617 12.081-8.072l270.372-270.372 270.371 270.372c6.984 6.983 16.455 10.909 26.335 10.909 9.875 0 19.347-3.923 26.33-10.909s10.909-16.456 10.909-26.333c0-9.877-3.923-19.348-10.909-26.333l-270.371-270.372 270.371-270.375z" />
|
||||
<glyph unicode="" glyph-name="search-plus" horiz-adv-x="951" d="M585.143 493.714v-36.571c0-9.714-8.571-18.286-18.286-18.286h-128v-128c0-9.714-8.571-18.286-18.286-18.286h-36.571c-9.714 0-18.286 8.571-18.286 18.286v128h-128c-9.714 0-18.286 8.571-18.286 18.286v36.571c0 9.714 8.571 18.286 18.286 18.286h128v128c0 9.714 8.571 18.286 18.286 18.286h36.571c9.714 0 18.286-8.571 18.286-18.286v-128h128c9.714 0 18.286-8.571 18.286-18.286zM658.286 475.428c0 141.143-114.857 256-256 256s-256-114.857-256-256 114.857-256 256-256 256 114.857 256 256zM950.857 0c0-40.571-32.571-73.143-73.143-73.143-19.429 0-38.286 8-51.429 21.714l-196 195.429c-66.857-46.286-146.857-70.857-228-70.857-222.286 0-402.286 180-402.286 402.286s180 402.286 402.286 402.286 402.286-180 402.286-402.286c0-81.143-24.571-161.143-70.857-228l196-196c13.143-13.143 21.143-32 21.143-51.429z" />
|
||||
<glyph unicode="" glyph-name="search-minus" horiz-adv-x="951" d="M585.143 493.714v-36.571c0-9.714-8.571-18.286-18.286-18.286h-329.143c-9.714 0-18.286 8.571-18.286 18.286v36.571c0 9.714 8.571 18.286 18.286 18.286h329.143c9.714 0 18.286-8.571 18.286-18.286zM658.286 475.428c0 141.143-114.857 256-256 256s-256-114.857-256-256 114.857-256 256-256 256 114.857 256 256zM950.857 0c0-40.571-32.571-73.143-73.143-73.143-19.429 0-38.286 8-51.429 21.714l-196 195.429c-66.857-46.286-146.857-70.857-228-70.857-222.286 0-402.286 180-402.286 402.286s180 402.286 402.286 402.286 402.286-180 402.286-402.286c0-81.143-24.571-161.143-70.857-228l196-196c13.143-13.143 21.143-32 21.143-51.429z" />
|
||||
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 153 KiB |
Binary file not shown.
Binary file not shown.
@ -102,10 +102,10 @@
|
||||
#arduino-toolbar-container {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.p-TabBar-toolbar.theia-arduino-toolbar {
|
||||
flex: 1;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
@ -119,7 +119,7 @@
|
||||
|
||||
#theia-top-panel .p-TabBar-toolbar.theia-arduino-toolbar.right {
|
||||
justify-content: flex-start;
|
||||
min-width: 190px;
|
||||
min-width: 100px;
|
||||
}
|
||||
|
||||
#theia-top-panel .p-TabBar-toolbar.theia-arduino-toolbar.left {
|
||||
|
@ -5,7 +5,9 @@ import { ArduinoComponent } from './arduino-component';
|
||||
|
||||
export type AvailablePorts = Record<string, [Port, Array<Board>]>;
|
||||
export namespace AvailablePorts {
|
||||
export function byProtocol(availablePorts: AvailablePorts): Map<string, AvailablePorts> {
|
||||
export function byProtocol(
|
||||
availablePorts: AvailablePorts
|
||||
): Map<string, AvailablePorts> {
|
||||
const grouped = new Map<string, AvailablePorts>();
|
||||
for (const portID of Object.keys(availablePorts)) {
|
||||
const [port, boards] = availablePorts[portID];
|
||||
@ -42,18 +44,14 @@ export namespace AttachedBoardsChangeEvent {
|
||||
const visitedAttachedPorts: Port[] = [];
|
||||
const visitedDetachedPorts: Port[] = [];
|
||||
for (const board of attached.boards) {
|
||||
const port = board.port
|
||||
? ` on ${Port.toString(board.port)}`
|
||||
: '';
|
||||
const port = board.port ? ` on ${Port.toString(board.port)}` : '';
|
||||
rows.push(` - Attached board: ${Board.toString(board)}${port}`);
|
||||
if (board.port) {
|
||||
visitedAttachedPorts.push(board.port);
|
||||
}
|
||||
}
|
||||
for (const board of detached.boards) {
|
||||
const port = board.port
|
||||
? ` from ${Port.toString(board.port)}`
|
||||
: '';
|
||||
const port = board.port ? ` from ${Port.toString(board.port)}` : '';
|
||||
rows.push(` - Detached board: ${Board.toString(board)}${port}`);
|
||||
if (board.port) {
|
||||
visitedDetachedPorts.push(board.port);
|
||||
@ -61,16 +59,12 @@ export namespace AttachedBoardsChangeEvent {
|
||||
}
|
||||
for (const port of attached.ports) {
|
||||
if (!visitedAttachedPorts.find((p) => Port.sameAs(port, p))) {
|
||||
rows.push(
|
||||
` - New port is available on ${Port.toString(port)}`
|
||||
);
|
||||
rows.push(` - New port is available on ${Port.toString(port)}`);
|
||||
}
|
||||
}
|
||||
for (const port of detached.ports) {
|
||||
if (!visitedDetachedPorts.find((p) => Port.sameAs(port, p))) {
|
||||
rows.push(
|
||||
` - Port is no longer available on ${Port.toString(port)}`
|
||||
);
|
||||
rows.push(` - Port is no longer available on ${Port.toString(port)}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -121,7 +115,7 @@ export const BoardsServicePath = '/services/boards-service';
|
||||
export const BoardsService = Symbol('BoardsService');
|
||||
export interface BoardsService
|
||||
extends Installable<BoardsPackage>,
|
||||
Searchable<BoardsPackage> {
|
||||
Searchable<BoardsPackage> {
|
||||
/**
|
||||
* Deprecated. `getState` should be used to correctly map a board with a port.
|
||||
* @deprecated
|
||||
@ -139,7 +133,10 @@ export interface BoardsService
|
||||
fqbn: string;
|
||||
}): Promise<BoardsPackage | undefined>;
|
||||
searchBoards({ query }: { query?: string }): Promise<BoardWithPackage[]>;
|
||||
getBoardUserFields(options: { fqbn: string, protocol: string }): Promise<BoardUserField[]>;
|
||||
getBoardUserFields(options: {
|
||||
fqbn: string;
|
||||
protocol: string;
|
||||
}): Promise<BoardUserField[]>;
|
||||
}
|
||||
|
||||
export interface Port {
|
||||
@ -172,13 +169,13 @@ export namespace Port {
|
||||
// 1. Serial
|
||||
// 2. Network
|
||||
// 3. Other protocols
|
||||
if (left.protocol === "serial" && right.protocol !== "serial") {
|
||||
if (left.protocol === 'serial' && right.protocol !== 'serial') {
|
||||
return -1;
|
||||
} else if (left.protocol !== "serial" && right.protocol === "serial") {
|
||||
} else if (left.protocol !== 'serial' && right.protocol === 'serial') {
|
||||
return 1;
|
||||
} else if (left.protocol === "network" && right.protocol !== "network") {
|
||||
} else if (left.protocol === 'network' && right.protocol !== 'network') {
|
||||
return -1;
|
||||
} else if (left.protocol !== "network" && right.protocol === "network") {
|
||||
} else if (left.protocol !== 'network' && right.protocol === 'network') {
|
||||
return 1;
|
||||
}
|
||||
return naturalCompare(left.address!, right.address!);
|
||||
|
@ -7,11 +7,11 @@
|
||||
"board": {
|
||||
"board": "Board{0}",
|
||||
"boardInfo": "Board Info",
|
||||
"boardListItem": "{0} at {1}",
|
||||
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
|
||||
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.",
|
||||
"configDialogTitle": "Select Other Board & Port",
|
||||
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?",
|
||||
"disconnected": "Disconnected",
|
||||
"getBoardInfo": "Get Board Info",
|
||||
"inSketchbook": " (in Sketchbook)",
|
||||
"installManually": "Install Manually",
|
||||
@ -23,8 +23,10 @@
|
||||
"platformMissing": "The platform for the selected '{0}' board is not installed.",
|
||||
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
|
||||
"port": "Port{0}",
|
||||
"portLabel": "Port: {0}",
|
||||
"programmer": "Programmer",
|
||||
"reselectLater": "Reselect later",
|
||||
"selectBoard": "Select Board",
|
||||
"selectBoardForInfo": "Please select a board to obtain board info.",
|
||||
"selectPortForInfo": "Please select a port to obtain board info.",
|
||||
"showAllAvailablePorts": "Shows all available ports when enabled",
|
||||
|
@ -5297,6 +5297,11 @@ class-utils@^0.3.5:
|
||||
isobject "^3.0.0"
|
||||
static-extend "^0.1.1"
|
||||
|
||||
classnames@^2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
|
||||
integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
|
||||
|
||||
clean-stack@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
|
||||
|
Loading…
x
Reference in New Issue
Block a user