From a8b3f5dcf70bd2191aa5511e643a760f87fa07ad Mon Sep 17 00:00:00 2001 From: David Lechner Date: Mon, 1 Feb 2021 10:59:56 -0600 Subject: [PATCH 1/6] use env for app name --- .env | 1 + public/index.html | 2 +- src/app/constants.ts | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.env b/.env index 0454adfc..60826396 100644 --- a/.env +++ b/.env @@ -1 +1,2 @@ +REACT_APP_NAME="Pybricks Code" REACT_APP_VERSION=$npm_package_version diff --git a/public/index.html b/public/index.html index d466af9b..1080111b 100644 --- a/public/index.html +++ b/public/index.html @@ -24,7 +24,7 @@ work correctly both with client-side routing and a non-root public URL. Learn how to configure a non-root public URL by running `npm run build`. --> - Pybricks Code + %REACT_APP_NAME% diff --git a/src/app/constants.ts b/src/app/constants.ts index 148891f3..62987140 100644 --- a/src/app/constants.ts +++ b/src/app/constants.ts @@ -7,7 +7,7 @@ export const tooltipDelay = 1000; /** Official name of the app. */ -export const appName = 'Pybricks Code'; +export const appName = process.env.REACT_APP_NAME || 'REACT_APP_NAME is undefined'; /** URL to main Pybricks website. */ export const pybricksWebsiteUrl = 'https://pybricks.com'; From 1e5d25086b0da01775742c57dfe64abe339201d3 Mon Sep 17 00:00:00 2001 From: David Lechner Date: Mon, 1 Feb 2021 11:05:27 -0600 Subject: [PATCH 2/6] move app version to constants --- src/about/AboutDialog.tsx | 5 ++--- src/app/constants.ts | 4 ++++ src/index.tsx | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/about/AboutDialog.tsx b/src/about/AboutDialog.tsx index 8eab2970..cd880f1d 100644 --- a/src/about/AboutDialog.tsx +++ b/src/about/AboutDialog.tsx @@ -9,6 +9,7 @@ import React from 'react'; import { connect } from 'react-redux'; import { appName, + appVersion, legoDisclaimer, pybricksCopyright, pybricksWebsiteUrl, @@ -20,8 +21,6 @@ import en from './i18n.en.json'; import './about.scss'; -const version = process.env.REACT_APP_VERSION; - type OwnProps = { isOpen: boolean; onClose: () => void }; type AboutDialogProps = OwnProps & WithI18nProps; @@ -35,7 +34,7 @@ class AboutDialog extends React.Component { const { isOpen, onClose, i18n } = this.props; return ( onClose()} > diff --git a/src/app/constants.ts b/src/app/constants.ts index 62987140..c0c849e4 100644 --- a/src/app/constants.ts +++ b/src/app/constants.ts @@ -9,6 +9,10 @@ export const tooltipDelay = 1000; /** Official name of the app. */ export const appName = process.env.REACT_APP_NAME || 'REACT_APP_NAME is undefined'; +/** The version of the app (without the "v" prefix). */ +export const appVersion = + process.env.REACT_APP_VERSION || 'REACT_APP_VERSION is undefined'; + /** URL to main Pybricks website. */ export const pybricksWebsiteUrl = 'https://pybricks.com'; diff --git a/src/index.tsx b/src/index.tsx index b1158128..778710fc 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -11,6 +11,7 @@ import { createLogger } from 'redux-logger'; import createSagaMiddleware from 'redux-saga'; import './index.scss'; import App from './app/App'; +import { appVersion } from './app/constants'; import { i18nManager } from './i18n'; import * as I18nToaster from './notifications/I18nToaster'; import { rootReducer } from './reducers'; @@ -65,7 +66,7 @@ store.subscribe(() => { }); // special styling for beta versions -if (process.env.REACT_APP_VERSION?.match(/beta/)) { +if (appVersion.match(/beta/)) { document.body.classList.add('pb-beta'); } From 0ee80ba0e86ba4831950c8378ebec4e1c1d2c432 Mon Sep 17 00:00:00 2001 From: David Lechner Date: Mon, 1 Feb 2021 11:16:57 -0600 Subject: [PATCH 3/6] manifest: add default orientation --- public/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/public/manifest.json b/public/manifest.json index 2a9da332..4be45a08 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -20,6 +20,7 @@ ], "start_url": ".", "display": "fullscreen", + "orientation": "landscape", "theme_color": "#000000", "background_color": "#ffffff" } From 82438a811d72d2db32a0eee3cdd8292880df9854 Mon Sep 17 00:00:00 2001 From: David Lechner Date: Mon, 1 Feb 2021 11:42:04 -0600 Subject: [PATCH 4/6] add maskable icon https://web.dev/maskable-icon also round corners in same sized non-maskable icon --- public/logo192.png | Bin 8600 -> 15719 bytes public/logo192m.png | Bin 0 -> 14603 bytes public/manifest.json | 9 ++++++++- 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 public/logo192m.png diff --git a/public/logo192.png b/public/logo192.png index 3906c86a170f24f1199aa17ace50717627597c8d..c3cf1e0e0cbc9f8adf2493be34ecac5ed56b5c45 100644 GIT binary patch literal 15719 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∾ydmdt7KTMQ)p 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 literal 8600 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 diff --git a/public/logo192m.png b/public/logo192m.png new file mode 100644 index 0000000000000000000000000000000000000000..bb5af6bcbe5f30c535a5f1c06d5a922690bb2f30 GIT binary patch literal 14603 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 HMj`(T=bh>^ literal 0 HcmV?d00001 diff --git a/public/manifest.json b/public/manifest.json index 4be45a08..68d5832f 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -10,7 +10,14 @@ { "src": "logo192.png", "type": "image/png", - "sizes": "192x192" + "sizes": "192x192", + "purpose": "any" + }, + { + "src": "logo192m.png", + "type": "image/png", + "sizes": "192x192", + "purpose": "maskable" }, { "src": "logo512.png", From cdd74706c57785a1b96d0749356888abc49b9723 Mon Sep 17 00:00:00 2001 From: David Lechner Date: Mon, 1 Feb 2021 12:34:17 -0600 Subject: [PATCH 5/6] toolbar is not a navbar This adds custom styling for the toolbar (inspired by blueprintsjs navbar). But this lets us use the correct role and not fight the navbar styling so much. --- src/app/app.scss | 2 +- src/toolbar/Toolbar.tsx | 65 +++++++++++++++++----------------------- src/toolbar/toolbar.scss | 30 +++++++++++++++++-- src/variables.scss | 5 +--- 4 files changed, 57 insertions(+), 45 deletions(-) diff --git a/src/app/app.scss b/src/app/app.scss index b8f24411..ad0510f6 100644 --- a/src/app/app.scss +++ b/src/app/app.scss @@ -8,7 +8,7 @@ .pb-app-body { // height makes everything fit without scrolling height: calc( - var(--pb-vh, 100vh) - #{$pt-navbar-height} - #{$pb-status-bar-height} + var(--pb-vh, 100vh) - #{$pb-toolbar-height} - #{$pb-status-bar-height} ) !important; } diff --git a/src/toolbar/Toolbar.tsx b/src/toolbar/Toolbar.tsx index 951538a6..20365166 100644 --- a/src/toolbar/Toolbar.tsx +++ b/src/toolbar/Toolbar.tsx @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT // Copyright (c) 2020 The Pybricks Authors -import { Alignment, ButtonGroup, Navbar } from '@blueprintjs/core'; +import { ButtonGroup } from '@blueprintjs/core'; import React from 'react'; import OpenButton from '../editor/OpenButton'; import SaveAsButton from '../editor/SaveAsButton'; @@ -22,44 +22,35 @@ class Toolbar extends React.Component { render(): JSX.Element { return ( - e.preventDefault()} - className="no-box-shadow" + className="pb-toolbar no-box-shadow" > - - - - - - - - - - - - - - - - - - - - - this.setState({ settingsDrawerIsOpen: true }) - } - /> - - this.setState({ settingsDrawerIsOpen: false }) - } - /> - - - + + + + + + + + + + + + + + + this.setState({ settingsDrawerIsOpen: true })} + /> + this.setState({ settingsDrawerIsOpen: false })} + /> + + ); } } diff --git a/src/toolbar/toolbar.scss b/src/toolbar/toolbar.scss index 02a29f4a..7f2ae0e4 100644 --- a/src/toolbar/toolbar.scss +++ b/src/toolbar/toolbar.scss @@ -5,7 +5,31 @@ @import '../variables.scss'; -.#{$ns}-navbar-divider { - // don't draw vertical line since we are just using button groups - border-left: unset; +.#{$ns}-dark .pb-toolbar { + background-color: $pt-dark-app-background-color; +} + +.pb-toolbar { + height: $pb-toolbar-height; + background-color: $pt-app-background-color; + padding: 0 $pt-grid-size * 1.5; + position: relative; + width: 100%; + z-index: $pt-z-index-content; +} + +.pb-toolbar-group { + align-items: center; + display: flex; + height: $pb-toolbar-height; + + &.pb-align-left { + float: left; + margin-right: $pt-grid-size * 2; + } + + &.pb-align-right { + float: right; + margin-left: $pt-grid-size * 2; + } } diff --git a/src/variables.scss b/src/variables.scss index d94d51f5..b6b0f9da 100644 --- a/src/variables.scss +++ b/src/variables.scss @@ -10,13 +10,10 @@ $pt-font-size: $pt-grid-size * 1.6; $pt-font-size-large: $pt-grid-size * 1.8; $pt-font-size-small: $pt-grid-size * 1.4; -$pt-navbar-height: 72px; +$pb-toolbar-height: 72px; $pb-status-bar-height: 24px; $pb-pybricks-blue: #0088ce; $pt-app-background-color: #e8e8e8; $pt-intent-primary: $pb-pybricks-blue; $pt-outline-color: rgba($pb-pybricks-blue, 0.6); - -$navbar-background-color: $pt-app-background-color; -$dark-navbar-background-color: $pt-dark-app-background-color; From 0399c0693e232bc573d2f3bf02d23cd8741c9c75 Mon Sep 17 00:00:00 2001 From: David Lechner Date: Mon, 1 Feb 2021 14:21:17 -0600 Subject: [PATCH 6/6] v1.0.0-beta.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 83c4b367..360d6703 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@pybricks/pybricks-code", - "version": "1.0.0-beta.5", + "version": "1.0.0-beta.6", "license": "MIT", "author": "The Pybricks Authors", "repository": {