Browse Source

Initial project commit with basic Vaadin starter template.

master
Denis Thiessen 2 years ago
parent
commit
89c49e3cf9
  1. 37
      .gitignore
  2. 4
      .prettierrc.js
  3. 36
      frontend/themes/issuetracker/main-layout.css
  4. 3
      frontend/themes/issuetracker/styles.css
  5. 1
      frontend/themes/issuetracker/theme.json
  6. 310
      mvnw
  7. 182
      mvnw.cmd
  8. 12208
      package-lock.json
  9. 187
      package.json
  10. 264
      pom.xml
  11. 21
      src/main/java/de/denisthiessen/se/Application.java
  12. 160
      src/main/java/de/denisthiessen/se/views/MainLayout.java
  13. 32
      src/main/java/de/denisthiessen/se/views/about/AboutView.java
  14. 34
      src/main/java/de/denisthiessen/se/views/helloworld/HelloWorldView.java
  15. BIN
      src/main/resources/META-INF/resources/icons/icon.png
  16. BIN
      src/main/resources/META-INF/resources/images/empty-plant.png
  17. BIN
      src/main/resources/META-INF/resources/images/logo.png
  18. 8
      src/main/resources/application.properties
  19. 7
      src/main/resources/banner.txt
  20. 0
      src/main/resources/vaadin-featureflags.properties
  21. 41
      webpack.config.js

37
.gitignore

@ -1,25 +1,20 @@
# ---> Java
# Compiled class file
*.class
/target/
.idea/
.settings
.project
.classpath
.mvn
# Log file
*.log
/frontend/generated/
# BlueJ files
*.ctxt
*.iml
.DS_Store
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
# The following files are generated/updated by vaadin-maven-plugin
node_modules/
# Browser drivers for local integration tests
drivers/
# Error screenshots generated by TestBench for failed integration tests
error-screenshots/
webpack.generated.js

4
.prettierrc.js

@ -0,0 +1,4 @@
module.exports = {
singleQuote: true,
printWidth: 120,
};

36
frontend/themes/issuetracker/main-layout.css

@ -0,0 +1,36 @@
[slot='drawer'] {
background-image: linear-gradient(0deg, var(--lumo-shade-5pct), var(--lumo-shade-5pct));
}
[slot='drawer'] nav a {
text-decoration: none;
transition: color 140ms;
}
[slot='drawer'] nav a .la {
margin-top: calc(var(--lumo-space-xs) * 0.5);
}
[slot='drawer'] nav a::before {
border-radius: var(--lumo-border-radius);
bottom: calc(var(--lumo-space-xs) * 0.5);
content: '';
left: 0;
position: absolute;
right: 0;
top: calc(var(--lumo-space-xs) * 0.5);
transition: background-color 140ms;
}
[slot='drawer'] nav a[highlight] {
color: var(--lumo-primary-text-color);
}
[slot='drawer'] nav a[highlight]::before {
background-color: var(--lumo-primary-color-10pct);
}
[slot='drawer'] footer vaadin-context-menu {
align-items: center;
display: flex;
}

3
frontend/themes/issuetracker/styles.css

@ -0,0 +1,3 @@
@import url('./main-layout.css');
@import url('lumo-css-framework/all-classes.css');
@import url('line-awesome/dist/line-awesome/css/line-awesome.min.css');

1
frontend/themes/issuetracker/theme.json

@ -0,0 +1 @@
{"lumoImports":["typography","color","spacing","badge"]}

310
mvnw

@ -0,0 +1,310 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
else
export JAVA_HOME="/Library/Java/Home"
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=`cd "$wdir/.."; pwd`
fi
# end of workaround
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
if [ -n "$MVNW_REPOURL" ]; then
jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
else
jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
fi
while IFS="=" read key value; do
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
esac
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
if [ "$MVNW_VERBOSE" = true ]; then
echo "Downloading from: $jarUrl"
fi
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
if $cygwin; then
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
fi
if command -v wget > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found wget ... using wget"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget "$jarUrl" -O "$wrapperJarPath"
else
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found curl ... using curl"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl -o "$wrapperJarPath" "$jarUrl" -f
else
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Falling back to using Java to download"
fi
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaClass=`cygpath --path --windows "$javaClass"`
fi
if [ -e "$javaClass" ]; then
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
("$JAVA_HOME/bin/javac" "$javaClass")
fi
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
# Running the downloader
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Running MavenWrapperDownloader.java ..."
fi
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
if [ "$MVNW_VERBOSE" = true ]; then
echo $MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
$MAVEN_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

182
mvnw.cmd

@ -0,0 +1,182 @@
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
if "%MVNW_VERBOSE%" == "true" (
echo Found %WRAPPER_JAR%
)
) else (
if not "%MVNW_REPOURL%" == "" (
SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %DOWNLOAD_URL%
)
powershell -Command "&{"^
"$webclient = new-object System.Net.WebClient;"^
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
"}"^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=%*
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%

12208
package-lock.json
File diff suppressed because it is too large
View File

187
package.json

@ -0,0 +1,187 @@
{
"name": "no-name",
"license": "UNLICENSED",
"dependencies": {
"@polymer/iron-a11y-announcer": "3.0.2",
"@polymer/iron-a11y-keys-behavior": "3.0.1",
"@polymer/iron-fit-behavior": "3.0.2",
"@polymer/iron-flex-layout": "3.0.1",
"@polymer/iron-icon": "3.0.1",
"@polymer/iron-iconset-svg": "3.0.1",
"@polymer/iron-list": "3.1.0",
"@polymer/iron-media-query": "3.0.1",
"@polymer/iron-meta": "3.0.1",
"@polymer/iron-overlay-behavior": "3.0.3",
"@polymer/iron-resizable-behavior": "3.0.1",
"@polymer/iron-scroll-target-behavior": "3.0.1",
"@polymer/polymer": "3.2.0",
"@vaadin/vaadin-accordion": "1.2.0",
"@vaadin/vaadin-app-layout": "2.2.0",
"@vaadin/vaadin-avatar": "1.0.4",
"@vaadin/vaadin-board": "2.2.0",
"@vaadin/vaadin-button": "2.4.0",
"@vaadin/vaadin-charts": "6.3.3",
"@vaadin/vaadin-checkbox": "2.5.1",
"@vaadin/vaadin-combo-box": "5.4.11",
"@vaadin/vaadin-confirm-dialog": "1.3.0",
"@vaadin/vaadin-context-menu": "4.6.0",
"@vaadin/vaadin-control-state-mixin": "2.2.4",
"@vaadin/vaadin-cookie-consent": "1.2.0",
"@vaadin/vaadin-core-shrinkwrap": "14.8.1",
"@vaadin/vaadin-crud": "1.3.1",
"@vaadin/vaadin-custom-field": "1.3.1",
"@vaadin/vaadin-date-picker": "4.4.1",
"@vaadin/vaadin-date-time-picker": "1.4.0",
"@vaadin/vaadin-details": "1.2.0",
"@vaadin/vaadin-development-mode-detector": "2.0.4",
"@vaadin/vaadin-dialog": "2.6.0",
"@vaadin/vaadin-element-mixin": "2.4.2",
"@vaadin/vaadin-form-layout": "2.3.0",
"@vaadin/vaadin-grid": "5.9.1",
"@vaadin/vaadin-grid-pro": "2.3.0",
"@vaadin/vaadin-icons": "4.3.2",
"@vaadin/vaadin-item": "2.3.0",
"@vaadin/vaadin-list-box": "1.4.0",
"@vaadin/vaadin-list-mixin": "2.5.1",
"@vaadin/vaadin-login": "1.2.0",
"@vaadin/vaadin-lumo-styles": "1.6.1",
"@vaadin/vaadin-material-styles": "1.3.2",
"@vaadin/vaadin-menu-bar": "1.3.0",
"@vaadin/vaadin-messages": "1.0.2",
"@vaadin/vaadin-notification": "1.6.1",
"@vaadin/vaadin-ordered-layout": "1.4.0",
"@vaadin/vaadin-overlay": "3.5.1",
"@vaadin/vaadin-progress-bar": "1.3.0",
"@vaadin/vaadin-radio-button": "1.5.4",
"@vaadin/vaadin-rich-text-editor": "1.3.1",
"@vaadin/vaadin-select": "2.4.1",
"@vaadin/vaadin-shrinkwrap": "14.8.1",
"@vaadin/vaadin-split-layout": "4.3.0",
"@vaadin/vaadin-tabs": "3.2.0",
"@vaadin/vaadin-text-field": "2.9.0",
"@vaadin/vaadin-themable-mixin": "1.6.2",
"@vaadin/vaadin-time-picker": "2.4.0",
"@vaadin/vaadin-upload": "4.4.3",
"@vaadin/vaadin-usage-statistics": "2.1.0",
"@webcomponents/shadycss": "1.8.0",
"@webcomponents/webcomponentsjs": "^2.2.10",
"construct-style-sheets-polyfill": "3.0.4",
"line-awesome": "1.3.0",
"lit-element": "2.5.1",
"lit-html": "1.4.1",
"lumo-css-framework": "^4.0.10"
},
"devDependencies": {
"babel-loader": "8.2.2",
"chokidar": "^3.5.0",
"compression-webpack-plugin": "4.0.1",
"copy-webpack-plugin": "5.1.2",
"css-loader": "4.2.1",
"extra-watch-webpack-plugin": "1.0.3",
"extract-loader": "5.1.0",
"file-loader": "6.1.0",
"html-webpack-plugin": "4.5.2",
"lit-css-loader": "0.0.4",
"raw-loader": "3.1.0",
"ts-loader": "8.0.12",
"typescript": "4.0.3",
"webpack": "4.42.0",
"webpack-babel-multi-target-plugin": "2.5.0",
"webpack-cli": "3.3.11",
"webpack-dev-server": "3.11.0",
"webpack-merge": "4.2.2"
},
"vaadin": {
"dependencies": {
"@polymer/iron-a11y-announcer": "3.0.2",
"@polymer/iron-a11y-keys-behavior": "3.0.1",
"@polymer/iron-fit-behavior": "3.0.2",
"@polymer/iron-flex-layout": "3.0.1",
"@polymer/iron-icon": "3.0.1",
"@polymer/iron-iconset-svg": "3.0.1",
"@polymer/iron-list": "3.1.0",
"@polymer/iron-media-query": "3.0.1",
"@polymer/iron-meta": "3.0.1",
"@polymer/iron-overlay-behavior": "3.0.3",
"@polymer/iron-resizable-behavior": "3.0.1",
"@polymer/iron-scroll-target-behavior": "3.0.1",
"@polymer/polymer": "3.2.0",
"@vaadin/vaadin-accordion": "1.2.0",
"@vaadin/vaadin-app-layout": "2.2.0",
"@vaadin/vaadin-avatar": "1.0.4",
"@vaadin/vaadin-board": "2.2.0",
"@vaadin/vaadin-button": "2.4.0",
"@vaadin/vaadin-charts": "6.3.3",
"@vaadin/vaadin-checkbox": "2.5.1",
"@vaadin/vaadin-combo-box": "5.4.11",
"@vaadin/vaadin-confirm-dialog": "1.3.0",
"@vaadin/vaadin-context-menu": "4.6.0",
"@vaadin/vaadin-control-state-mixin": "2.2.4",
"@vaadin/vaadin-cookie-consent": "1.2.0",
"@vaadin/vaadin-core-shrinkwrap": "14.8.1",
"@vaadin/vaadin-crud": "1.3.1",
"@vaadin/vaadin-custom-field": "1.3.1",
"@vaadin/vaadin-date-picker": "4.4.1",
"@vaadin/vaadin-date-time-picker": "1.4.0",
"@vaadin/vaadin-details": "1.2.0",
"@vaadin/vaadin-development-mode-detector": "2.0.4",
"@vaadin/vaadin-dialog": "2.6.0",
"@vaadin/vaadin-element-mixin": "2.4.2",
"@vaadin/vaadin-form-layout": "2.3.0",
"@vaadin/vaadin-grid": "5.9.1",
"@vaadin/vaadin-grid-pro": "2.3.0",
"@vaadin/vaadin-icons": "4.3.2",
"@vaadin/vaadin-item": "2.3.0",
"@vaadin/vaadin-list-box": "1.4.0",
"@vaadin/vaadin-list-mixin": "2.5.1",
"@vaadin/vaadin-login": "1.2.0",
"@vaadin/vaadin-lumo-styles": "1.6.1",
"@vaadin/vaadin-material-styles": "1.3.2",
"@vaadin/vaadin-menu-bar": "1.3.0",
"@vaadin/vaadin-messages": "1.0.2",
"@vaadin/vaadin-notification": "1.6.1",
"@vaadin/vaadin-ordered-layout": "1.4.0",
"@vaadin/vaadin-overlay": "3.5.1",
"@vaadin/vaadin-progress-bar": "1.3.0",
"@vaadin/vaadin-radio-button": "1.5.4",
"@vaadin/vaadin-rich-text-editor": "1.3.1",
"@vaadin/vaadin-select": "2.4.1",
"@vaadin/vaadin-shrinkwrap": "14.8.1",
"@vaadin/vaadin-split-layout": "4.3.0",
"@vaadin/vaadin-tabs": "3.2.0",
"@vaadin/vaadin-text-field": "2.9.0",
"@vaadin/vaadin-themable-mixin": "1.6.2",
"@vaadin/vaadin-time-picker": "2.4.0",
"@vaadin/vaadin-upload": "4.4.3",
"@vaadin/vaadin-usage-statistics": "2.1.0",
"@webcomponents/shadycss": "1.8.0",
"@webcomponents/webcomponentsjs": "^2.2.10",
"construct-style-sheets-polyfill": "3.0.4",
"line-awesome": "1.3.0",
"lit-element": "2.5.1",
"lit-html": "1.4.1",
"lumo-css-framework": "^4.0.10"
},
"devDependencies": {
"babel-loader": "8.2.2",
"chokidar": "^3.5.0",
"compression-webpack-plugin": "4.0.1",
"copy-webpack-plugin": "5.1.2",
"css-loader": "4.2.1",
"extra-watch-webpack-plugin": "1.0.3",
"extract-loader": "5.1.0",
"file-loader": "6.1.0",
"html-webpack-plugin": "4.5.2",
"lit-css-loader": "0.0.4",
"raw-loader": "3.1.0",
"ts-loader": "8.0.12",
"typescript": "4.0.3",
"webpack": "4.42.0",
"webpack-babel-multi-target-plugin": "2.5.0",
"webpack-cli": "3.3.11",
"webpack-dev-server": "3.11.0",
"webpack-merge": "4.2.2"
},
"hash": "6a8efc91a177bccea1d3b98bc9469b8d983189eb50004fe45c01908a412b5171"
}
}

264
pom.xml

@ -0,0 +1,264 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.denisthiessen.se</groupId>
<artifactId>issuetracker</artifactId>
<name>Basic Issue Tracker project created for the SE course</name>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<java.version>8</java.version>
<vaadin.version>14.8.1</vaadin.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.8</version>
</parent>
<repositories>
<!-- The order of definitions matters. Explicitly defining central here to make sure it has the highest priority. -->
<!-- Main Maven repository -->
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<!-- Repository used by many Vaadin add-ons -->
<repository>
<id>Vaadin Directory</id>
<url>https://maven.vaadin.com/vaadin-addons</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<!-- Main Maven repository -->
<pluginRepository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-bom</artifactId>
<version>${vaadin.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<!-- Replace artifactId with vaadin-core to use only free components -->
<artifactId>vaadin</artifactId>
<exclusions>
<!-- Webjars are only needed when running in Vaadin 13 compatibility mode -->
<exclusion>
<groupId>com.vaadin.webjar</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.webjars.bowergithub.insites</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.webjars.bowergithub.polymer</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.webjars.bowergithub.polymerelements</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.webjars.bowergithub.vaadin</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.webjars.bowergithub.webcomponents</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-spring-boot-starter</artifactId>
<exclusions>
<!-- Excluding so that webjars are not included. -->
<exclusion>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.vaadin.artur</groupId>
<artifactId>a-vaadin-helper</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-testbench</artifactId>
<scope>test</scope>
</dependency>
<!-- Include JUnit 4 support for TestBench and others -->
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.0.3</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<defaultGoal>spring-boot:run</defaultGoal>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- Clean build and startup time for Vaadin apps sometimes may exceed
the default Spring Boot's 30sec timeout. -->
<configuration>
<wait>500</wait>
<maxAttempts>240</maxAttempts>
</configuration>
</plugin>
<!--
Take care of synchronizing java dependencies and imports in
package.json and main.js files.
It also creates webpack.config.js if not exists yet.
-->
<plugin>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<version>${vaadin.version}</version>
<executions>
<execution>
<goals>
<goal>prepare-frontend</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<!-- Production mode is activated using -Pproduction -->
<id>production</id>
<build>
<plugins>
<plugin>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<version>${vaadin.version}</version>
<executions>
<execution>
<goals>
<goal>build-frontend</goal>
</goals>
<phase>compile</phase>
</execution>
</executions>
<configuration>
<productionMode>true</productionMode>
<pnpmEnable>false</pnpmEnable>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>it</id>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>start-spring-boot</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop-spring-boot</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Runs the integration tests (*IT) after the server is started -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
<configuration>
<trimStackTrace>false</trimStackTrace>
<enableAssertions>true</enableAssertions>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

21
src/main/java/de/denisthiessen/se/Application.java

@ -0,0 +1,21 @@
package de.denisthiessen.se;
import com.vaadin.flow.component.dependency.NpmPackage;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.vaadin.artur.helpers.LaunchUtil;
/**
* The entry point of the Spring Boot application.
*/
@SpringBootApplication
@NpmPackage(value = "lumo-css-framework", version = "^4.0.10")
@NpmPackage(value = "line-awesome", version = "1.3.0")
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
LaunchUtil.launchBrowserInDevelopmentMode(SpringApplication.run(Application.class, args));
}
}

160
src/main/java/de/denisthiessen/se/views/MainLayout.java

@ -0,0 +1,160 @@
package de.denisthiessen.se.views;
import java.util.ArrayList;
import java.util.List;
import com.vaadin.flow.component.Component;
import com.vaadin.flow.component.applayout.AppLayout;
import com.vaadin.flow.component.applayout.DrawerToggle;
import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.html.Footer;
import com.vaadin.flow.component.html.H1;
import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.html.Header;
import com.vaadin.flow.component.html.ListItem;
import com.vaadin.flow.component.html.Nav;
import com.vaadin.flow.component.html.Span;
import com.vaadin.flow.component.html.UnorderedList;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.RouterLink;
import com.vaadin.flow.server.PWA;
import com.vaadin.flow.theme.Theme;
import de.denisthiessen.se.views.about.AboutView;
import de.denisthiessen.se.views.helloworld.HelloWorldView;
/**
* The main view is a top-level placeholder for other views.
*/
@PWA(name = "Issue Tracker", shortName = "Issue Tracker", enableInstallPrompt = false)
@Theme(themeFolder = "issuetracker")
@PageTitle("Main")
public class MainLayout extends AppLayout {
public static class MenuItemInfo {
private String text;
private String iconClass;
private Class<? extends Component> view;
public MenuItemInfo(String text, String iconClass, Class<? extends Component> view) {
this.text = text;
this.iconClass = iconClass;
this.view = view;
}
public String getText() {
return text;
}
public String getIconClass() {
return iconClass;
}
public Class<? extends Component> getView() {
return view;
}
}
private H1 viewTitle;
public MainLayout() {
setPrimarySection(Section.DRAWER);
addToNavbar(true, createHeaderContent());
addToDrawer(createDrawerContent());
}
private Component createHeaderContent() {
DrawerToggle toggle = new DrawerToggle();
toggle.addClassName("text-secondary");
toggle.addThemeVariants(ButtonVariant.LUMO_CONTRAST);
toggle.getElement().setAttribute("aria-label", "Menu toggle");
viewTitle = new H1();
viewTitle.addClassNames("m-0", "text-l");
Header header = new Header(toggle, viewTitle);
header.addClassNames("bg-base", "border-b", "border-contrast-10", "box-border", "flex", "h-xl", "items-center",
"w-full");
return header;
}
private Component createDrawerContent() {
H2 appName = new H2("My App");
appName.addClassNames("flex", "items-center", "h-xl", "m-0", "px-m", "text-m");
com.vaadin.flow.component.html.Section section = new com.vaadin.flow.component.html.Section(appName,
createNavigation(), createFooter());
section.addClassNames("flex", "flex-col", "items-stretch", "max-h-full", "min-h-full");
return section;
}
private Nav createNavigation() {
Nav nav = new Nav();
nav.addClassNames("border-b", "border-contrast-10", "flex-grow", "overflow-auto");
nav.getElement().setAttribute("aria-labelledby", "views");
// Wrap the links in a list; improves accessibility
UnorderedList list = new UnorderedList();
list.addClassNames("list-none", "m-0", "p-0");
nav.add(list);
for (RouterLink link : createLinks()) {
ListItem item = new ListItem(link);
list.add(item);
}
return nav;
}
private List<RouterLink> createLinks() {
MenuItemInfo[] menuItems = new MenuItemInfo[]{ //
new MenuItemInfo("Hello World", "la la-globe", HelloWorldView.class), //
new MenuItemInfo("About", "la la-file", AboutView.class), //
};
List<RouterLink> links = new ArrayList<>();
for (MenuItemInfo menuItemInfo : menuItems) {
links.add(createLink(menuItemInfo));
}
return links;
}
private static RouterLink createLink(MenuItemInfo menuItemInfo) {
RouterLink link = new RouterLink();
link.addClassNames("flex", "mx-s", "p-s", "relative", "text-secondary");
link.setRoute(menuItemInfo.getView());
Span icon = new Span();
icon.addClassNames("me-s", "text-l");
if (!menuItemInfo.getIconClass().isEmpty()) {
icon.addClassNames(menuItemInfo.getIconClass());
}
Span text = new Span(menuItemInfo.getText());
text.addClassNames("font-medium", "text-s");
link.add(icon, text);
return link;
}
private Footer createFooter() {
Footer layout = new Footer();
layout.addClassNames("flex", "items-center", "my-s", "px-m", "py-xs");
return layout;
}
@Override
protected void afterNavigation() {
super.afterNavigation();
viewTitle.setText(getCurrentPageTitle());
}
private String getCurrentPageTitle() {
PageTitle title = getContent().getClass().getAnnotation(PageTitle.class);
return title == null ? "" : title.value();
}
}

32
src/main/java/de/denisthiessen/se/views/about/AboutView.java

@ -0,0 +1,32 @@
package de.denisthiessen.se.views.about;
import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.html.Image;
import com.vaadin.flow.component.html.Paragraph;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;
import de.denisthiessen.se.views.MainLayout;
@PageTitle("About")
@Route(value = "about", layout = MainLayout.class)
public class AboutView extends VerticalLayout {
public AboutView() {
setSpacing(false);
Image img = new Image("images/empty-plant.png", "placeholder plant");
img.setWidth("200px");
add(img);
add(new H2("This place intentionally left empty"));
add(new Paragraph("It’s a place where you can grow your own UI 🤗"));
setSizeFull();
setJustifyContentMode(JustifyContentMode.CENTER);
setDefaultHorizontalComponentAlignment(Alignment.CENTER);
getStyle().set("text-align", "center");
}
}

34
src/main/java/de/denisthiessen/se/views/helloworld/HelloWorldView.java

@ -0,0 +1,34 @@
package de.denisthiessen.se.views.helloworld;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.notification.Notification;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;
import com.vaadin.flow.router.RouteAlias;
import de.denisthiessen.se.views.MainLayout;
@PageTitle("Hello World")
@Route(value = "hello", layout = MainLayout.class)
@RouteAlias(value = "", layout = MainLayout.class)
public class HelloWorldView extends HorizontalLayout {
private TextField name;
private Button sayHello;
public HelloWorldView() {
name = new TextField("Your name");
sayHello = new Button("Say hello");
sayHello.addClickListener(e -> {
Notification.show("Hello " + name.getValue());
});
setMargin(true);
setVerticalComponentAlignment(Alignment.END, name, sayHello);
add(name, sayHello);
}
}

BIN
src/main/resources/META-INF/resources/icons/icon.png

After

Width: 512  |  Height: 512  |  Size: 16 KiB

BIN
src/main/resources/META-INF/resources/images/empty-plant.png

After

Width: 336  |  Height: 335  |  Size: 69 KiB

BIN
src/main/resources/META-INF/resources/images/logo.png

After

Width: 225  |  Height: 225  |  Size: 16 KiB

8
src/main/resources/application.properties

@ -0,0 +1,8 @@
server.port=${PORT:8080}
# Ensure application is run in Vaadin 14/npm mode
vaadin.compatibilityMode = false
logging.level.org.atmosphere = warn
# To improve the performance during development.
# For more information https://vaadin.com/docs/flow/spring/tutorial-spring-configuration.html#special-configuration-parameters
vaadin.whitelisted-packages = com.vaadin,org.vaadin,de.denisthiessen.se
vaadin.pnpm.enable = false

7
src/main/resources/banner.txt

@ -0,0 +1,7 @@
_____ _______ _
|_ _| |__ __| | |
| | ___ ___ _ _ ___| |_ __ __ _ ___| | _____ _ __
| | / __/ __| | | |/ _ \ | '__/ _` |/ __| |/ / _ \ '__|
_| |_\__ \__ \ |_| | __/ | | | (_| | (__| < __/ |
|_____|___/___/\__,_|\___|_|_| \__,_|\___|_|\_\___|_|

0
src/main/resources/vaadin-featureflags.properties

41
webpack.config.js

@ -0,0 +1,41 @@
/**
* This file contains project specific customizations for the webpack build.
* It is autogenerated if it didn't exist or if it was made for an older
* incompatible version.
*
* Defaults are provided in an autogenerated webpack.generated.js file and used by this file.
* The webpack.generated.js file is overwritten on each build and no customization can be done there.
*/
const merge = require('webpack-merge');
const flowDefaults = require('./webpack.generated.js');
module.exports = merge(flowDefaults, {
});
/**
* This file can be used to configure the flow plugin defaults.
* <code>
* // Add a custom plugin
* flowDefaults.plugins.push(new MyPlugin());
*
* // Update the rules to also transpile `.mjs` files
* if (!flowDefaults.module.rules[0].test) {
* throw "Unexpected structure in generated webpack config";
* }
* flowDefaults.module.rules[0].test = /\.m?js$/
*
* // Include a custom JS in the entry point in addition to generated-flow-imports.js
* if (typeof flowDefaults.entry.index != "string") {
* throw "Unexpected structure in generated webpack config";
* }
* flowDefaults.entry.index = [flowDefaults.entry.index, "myCustomFile.js"];
* </code>
* or add new configuration in the merge block.
* <code>
* module.exports = merge(flowDefaults, {
* mode: 'development',
* devtool: 'inline-source-map'
* });
* </code>
*/
Loading…
Cancel
Save