From 1631d3764e750491d75b1a393ede0cdb70a22b18 Mon Sep 17 00:00:00 2001 From: Sami Ekblad Date: Wed, 24 May 2023 11:03:44 +0000 Subject: [PATCH] Added demo app code --- .gitignore | 21 +- {frontend => demo/frontend}/index.html | 2 +- demo/frontend/themes/myapp/styles.css | 0 demo/frontend/themes/myapp/theme.json | 3 + .../com/example/application/Application.java | 23 ++ .../application/views/empty/EmptyView.java | 33 ++ .../META-INF/resources/icons/icon.png | Bin 0 -> 2424 bytes .../META-INF/resources/images/empty-plant.png | Bin 0 -> 70951 bytes .../src/main/resources/application.properties | 10 + demo/src/main/resources/banner.txt | 6 + package.json | 243 ------------ pom.xml | 353 +----------------- src/main/assembly/MANIFEST.MF | 6 - src/main/assembly/assembly.xml | 42 --- .../java/org/vaadin/addons/mygroup/NPS.java | 78 ---- .../addons/mygroup/AbstractViewTest.java | 134 ------- .../org/vaadin/addons/mygroup/AddonIT.java | 16 - .../org/vaadin/addons/mygroup/AddonView.java | 41 -- tsconfig.json | 39 -- types.d.ts | 10 - webpack.config.js | 32 -- 21 files changed, 103 insertions(+), 989 deletions(-) rename {frontend => demo/frontend}/index.html (96%) create mode 100644 demo/frontend/themes/myapp/styles.css create mode 100644 demo/frontend/themes/myapp/theme.json create mode 100644 demo/src/main/java/com/example/application/Application.java create mode 100644 demo/src/main/java/com/example/application/views/empty/EmptyView.java create mode 100644 demo/src/main/resources/META-INF/resources/icons/icon.png create mode 100644 demo/src/main/resources/META-INF/resources/images/empty-plant.png create mode 100644 demo/src/main/resources/application.properties create mode 100644 demo/src/main/resources/banner.txt delete mode 100644 package.json delete mode 100644 src/main/assembly/MANIFEST.MF delete mode 100644 src/main/assembly/assembly.xml delete mode 100644 src/main/java/org/vaadin/addons/mygroup/NPS.java delete mode 100644 src/test/java/org/vaadin/addons/mygroup/AbstractViewTest.java delete mode 100644 src/test/java/org/vaadin/addons/mygroup/AddonIT.java delete mode 100644 src/test/java/org/vaadin/addons/mygroup/AddonView.java delete mode 100644 tsconfig.json delete mode 100644 types.d.ts delete mode 100644 webpack.config.js diff --git a/.gitignore b/.gitignore index d1b79181..14786de2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ -/target/ +addon/target/ +demo/target/ .idea/ .settings .project @@ -8,13 +9,19 @@ .DS_Store # The following files are generated/updated by vaadin-maven-plugin -node_modules/ -frontend/generated/ -pnpmfile.js -vite.generated.ts +addon/node_modules/ +addon/frontend/generated/ +addon/pnpmfile.js +addon/vite.generated.ts +demo/node_modules/ +demo/frontend/generated/ +demo/pnpmfile.js +demo/vite.generated.ts # Browser drivers for local integration tests drivers/ # Error screenshots generated by TestBench for failed integration tests -error-screenshots/ -webpack.generated.js \ No newline at end of file +addon/error-screenshots/ +addon/webpack.generated.js +demo/error-screenshots/ +demo/webpack.generated.js diff --git a/frontend/index.html b/demo/frontend/index.html similarity index 96% rename from frontend/index.html rename to demo/frontend/index.html index a5cdd401..d36e5934 100644 --- a/frontend/index.html +++ b/demo/frontend/index.html @@ -3,7 +3,7 @@ This file is auto-generated by Vaadin. --> - + diff --git a/demo/frontend/themes/myapp/styles.css b/demo/frontend/themes/myapp/styles.css new file mode 100644 index 00000000..e69de29b diff --git a/demo/frontend/themes/myapp/theme.json b/demo/frontend/themes/myapp/theme.json new file mode 100644 index 00000000..0f7a81f2 --- /dev/null +++ b/demo/frontend/themes/myapp/theme.json @@ -0,0 +1,3 @@ +{ + "lumoImports" : [ "typography", "color", "spacing", "badge", "utility" ] +} \ No newline at end of file diff --git a/demo/src/main/java/com/example/application/Application.java b/demo/src/main/java/com/example/application/Application.java new file mode 100644 index 00000000..8ae639ce --- /dev/null +++ b/demo/src/main/java/com/example/application/Application.java @@ -0,0 +1,23 @@ +package com.example.application; + +import com.vaadin.flow.component.page.AppShellConfigurator; +import com.vaadin.flow.theme.Theme; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * The entry point of the Spring Boot application. + * + * Use the @PWA annotation make the application installable on phones, tablets + * and some desktop browsers. + * + */ +@SpringBootApplication +@Theme(value = "myapp") +public class Application implements AppShellConfigurator { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/demo/src/main/java/com/example/application/views/empty/EmptyView.java b/demo/src/main/java/com/example/application/views/empty/EmptyView.java new file mode 100644 index 00000000..c8055340 --- /dev/null +++ b/demo/src/main/java/com/example/application/views/empty/EmptyView.java @@ -0,0 +1,33 @@ +package com.example.application.views.empty; + +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 com.vaadin.flow.theme.lumo.LumoUtility.Margin; + +@PageTitle("Empty") +@Route(value = "") +public class EmptyView extends VerticalLayout { + + public EmptyView() { + setSpacing(false); + + Image img = new Image("images/empty-plant.png", "placeholder plant"); + img.setWidth("200px"); + add(img); + + H2 header = new H2("This place intentionally left empty"); + header.addClassNames(Margin.Top.XLARGE, Margin.Bottom.MEDIUM); + add(header); + 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"); + } + +} diff --git a/demo/src/main/resources/META-INF/resources/icons/icon.png b/demo/src/main/resources/META-INF/resources/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..df2ed4bd80778f7141c825ce9275984b4a34a15c GIT binary patch literal 2424 zcmb7GYdDl!8(!}_2Xi!xLSytzg|bPKGNKGdQ9{O+Mmf~5kr)bTi+7yjDmC;)Ax){I z!*)I-hJgV-~m>2#eiJdBKFd<3_8n6Io=hB2qm7CYu9O3 z0zkOu#&z^L08O-tR0RN${3zEeSF8KK#;IF&j$SWAQbB5s2(9EKzB z^Da35@IY%rH25Kcr3n#9Ea%9Z*qN$1Wn5aY^N2E|+p)g)VbS&ec{7g|RF_7zhQ9P@ z9yJtfd|8OyXCdeydcAzqT!x*f=r2AxXPA(bI&rxlm(Na~g!_06#7yqw%;pP2qxKW0 z6ekI)$kl&X1E*PbcXllP`;=MKDEWH-L1 zJqwMdAhJ)hd_>y^#1AECemZQfh2zWviA$auf@u4!aAZaKRY zzt3EQ&m*BaGq!6w!#6!QjVp^k`l^OPLIXZE{;(bPC>>2Eal&8cQ!do}fhTbSO8alG zTtPfKWo;-jt#)^Wq*{>P_TOkrLh~PZD%woFAO$Zs#BP|Ur)%DpWk617z1QQ88-)1z zQFk^LH&jMod<)$pvYS!Cl zlvPo+lA14Ikh02`Kd3WzuPUh}_%2sR*MHp}(E`)QsX$7ijsdr}5}}T|+&tFNw^y4n`en55hinWX3eD zrUd*`52D}1#C7m44j*)A<+5{qM3hNVlTz@ z&}_OK2K!qbBa5PBOPPX=CQ(E2!EWMGVb#a2*UV*tjHks26w7Xy9k`=g)T?*UXA4b4 zT+JhAiFZeQ3cR-nU$Hz!ynEAZ_JUZS5{D^+Sf89sP>2gBU3NozlO2ymlpmlNk&tU~ z8l21~3~T4hG|t!zM%*4d8-OskJwDtT*uBi_M35oopzFgx(ns+U|Icx(ICfeJMm@NM9 z5gt}L>Y#XDe6ZO!g)yo$zx07wvZcrLBXwYH^QN^Lx3w#Xc@?jfE1P1IcfRh@>{?ug z(lY8K9SXA&C+~L8obn4DY{A9AxKZWKvZ5KBTwD;466+ydnrO8LzB7|InNWPcjV|du z+srCh)$&Fs_KEV_=}k@h);n1h6tAD(oin#PLttU6HzFK5o{qimAKNoD!#r(s>@}Pc z_Mpb_em^W2Jbpt)Wwl#yLg${Jx(bch5weEylfompA_MC;)*u$K=X5T=6w3hqQVcgr zo6PT|B!aG8d=%YcKLRywF<*Kl-5%I9<@W$rDH$H*nNkt420<2PdJ)1(&0Zxe3Q@RQ z^_y}S`Q7j%*|^OJ`?c8Zu1>JcK4WVHBxdCobAQ7bhvYkL_w=cnYT|iNwU3T?MmffhO+zP#O<}9>mfrr z(08-6*k_mJvC^@SO)FMmEOlf`-<;zl+NJCb-y8<$zs;O0t2Z=(DvqHXHd7>;vH;eu z01*!CSR~}Y6R;a9#beX=h)~SKujH0|BB0U%D=BL|i3Jq|Q>2HWdv_6hVb2L95*yDy zKu3hsrUWc&o=9Yg#kcjwP^7oE8WNX%i8c_AneJ!9Pb7IcC`TdFMz|{8xF4Ay)&UIM zruFS*cNR})X^Cp>_HeQ^ATEBZHLIW~M&vnK%QLDS& zaBx>D7&3-MBB8=Ui`pcR!_W|3^nvIihx>F6UUBRrP|}r-gL-FpG{PTpxLa}$D?5(~ z^1OUtfz^ZENGMzs094B2z12!LQcCn%U;4xLj?1FUAswpf}2X^=6!9UzsZV2rin zQW!QL5n%EVSXASvFb8AuO(ae|-f)qSO>hn(261k%9w101NRJSM$C6{VE){=anRx%@ zDu$yEV}c=xpuqj5VVhnMewR-r=oNq zGDe`pZF$g*4Ld-XSS3>>kMgrt7pMfNlT@c~R=1HtAduBB#Q3bZz#Vr*^BVl&$`eeGVHm@3l9-1XQ{j&!?^`(YTdq~qC z@SZh%)lLn!tB`-_u2O$IP*%$Ooi)ocCRY8A-w*_xH{bdCE)GXm7r422aQ|`&O8pO# C@ant( literal 0 HcmV?d00001 diff --git a/demo/src/main/resources/META-INF/resources/images/empty-plant.png b/demo/src/main/resources/META-INF/resources/images/empty-plant.png new file mode 100644 index 0000000000000000000000000000000000000000..9777f260a67891001eb2444f49569037a74f671d GIT binary patch literal 70951 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 z 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 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 + http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 - org.vaadin.addons.mygroup - addon-example - 1.0.0-SNAPSHOT - Add-on for Vaadin - ###Project Name### - - - 24.0.2 - - 17 - 17 - UTF-8 - UTF-8 - - - - ###author### - - - - Apache 2 - https://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - - - com.vaadin - vaadin-bom - pom - import - ${vaadin.version} - - - - - - - - central - https://repo.maven.apache.org/maven2 - - false - - - - vaadin-prereleases - - https://maven.vaadin.com/vaadin-prereleases/ - - - false - - - - - Vaadin Directory - https://maven.vaadin.com/vaadin-addons - - false - - - - - - - - central - https://repo.maven.apache.org/maven2 - - false - - - - vaadin-prereleases - - https://maven.vaadin.com/vaadin-prereleases/ - - - false - - - - - - - com.vaadin - - vaadin-core - - - org.slf4j - slf4j-simple - test - - - com.vaadin - vaadin-testbench - test - - - io.github.bonigarcia - webdrivermanager - 3.8.1 - test - - - - - jetty:run - - - org.apache.maven.plugins - maven-jar-plugin - 3.1.0 - - - true - - false - true - - - - 1 - - - - - META-INF/VAADIN/config/flow-build-info.json - - - - - - org.eclipse.jetty - jetty-maven-plugin - 11.0.15 - - -1 - - true - - jar - - - - - - - com.vaadin - vaadin-maven-plugin - ${vaadin.version} - - - - prepare-frontend - - - - - - - - - - - production - - true - - - - - com.vaadin - flow-server-production-mode - - - - - - - com.vaadin - vaadin-maven-plugin - - - - build-frontend - - compile - - - - - - - - directory - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.3.0 - - false - - src/main/assembly/assembly.xml - - - - - - single - - install - - - - - org.apache.maven.plugins - maven-source-plugin - 3.2.1 - - - attach-sources - verify - - jar-no-fork - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 3.3.1 - - - attach-javadocs - verify - - jar - - - - - true - none - - - - org.apache.maven.plugins - maven-jar-plugin - 3.2.2 - - - - - META-INF/VAADIN/config/flow-build-info.json - - - - - - - - - it - - - - org.eclipse.jetty - jetty-maven-plugin - - 0 - 8081 - true - - jar - - 15 - ${project.artifactId} - - - - start-jetty - pre-integration-test - - start - - - - stop-jetty - post-integration-test - - stop - - - - - - - maven-surefire-plugin - - true - - - - - - org.apache.maven.plugins - maven-failsafe-plugin - 3.0.0-M5 - - - - integration-test - verify - - - - - false - true - - - - - - - + org.vaadin.addons.nps + nps-parent + pom + 1.0 + NPS for Vaadin + A Net Promoter Score questionnaire widget for Vaadin + + addon + demo + + \ No newline at end of file diff --git a/src/main/assembly/MANIFEST.MF b/src/main/assembly/MANIFEST.MF deleted file mode 100644 index f7981101..00000000 --- a/src/main/assembly/MANIFEST.MF +++ /dev/null @@ -1,6 +0,0 @@ -Manifest-Version: 1.0 -Vaadin-Package-Version: 1 -Vaadin-Addon: ${project.build.finalName}.${project.packaging} -Implementation-Vendor: ${organization.name} -Implementation-Title: ${project.name} -Implementation-Version: ${project.version} diff --git a/src/main/assembly/assembly.xml b/src/main/assembly/assembly.xml deleted file mode 100644 index dbb78660..00000000 --- a/src/main/assembly/assembly.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - game-card - - - zip - - - - false - - - - .. - - LICENSE - README.md - - - - target - - - *.jar - *.pdf - - - - - - - - src/main/assembly/MANIFEST.MF - META-INF - true - - - \ No newline at end of file diff --git a/src/main/java/org/vaadin/addons/mygroup/NPS.java b/src/main/java/org/vaadin/addons/mygroup/NPS.java deleted file mode 100644 index ded446f5..00000000 --- a/src/main/java/org/vaadin/addons/mygroup/NPS.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.vaadin.addons.mygroup; - -import com.vaadin.flow.component.Text; -import com.vaadin.flow.component.button.Button; -import com.vaadin.flow.component.button.ButtonVariant; -import com.vaadin.flow.component.customfield.CustomField; -import com.vaadin.flow.component.html.Span; -import com.vaadin.flow.component.orderedlayout.HorizontalLayout; -import com.vaadin.flow.theme.lumo.LumoUtility; - -public class NPS extends CustomField { - - private Integer score; - private Span title; - private HorizontalLayout buttons; - - public NPS() { - this.title = new Span( - "On a scale of 1 to 10, how likely would you recommend this to your friend or colleague?"); - this.buttons = new HorizontalLayout(); - buttons.add(new Text("Not likely")); - for (int i = 1; i <= 10; i++) { - Button button = new Button(String.valueOf(i), e -> { - this.score = Integer.parseInt(e.getSource().getText()); - updateButtonSate(); - setModelValue(this.score, true); - }); - button.addThemeVariants(ButtonVariant.MATERIAL_CONTAINED); - button.addClassName(LumoUtility.Padding.XSMALL); - button.getStyle() - .set("min-width", " var(--lumo-button-size)") - .set("max-width", " var(--lumo-button-size)"); - buttons.add(button); - } - buttons.add(new Text("Very likely")); - this.add(title, buttons); - - this.getStyle().set("text-align", "center"); - } - - @Override - protected Integer generateModelValue() { - return this.score; - } - - @Override - protected void setPresentationValue(Integer score) { - this.score = score; - updateButtonSate(); - } - - private void updateButtonSate() { - this.buttons - .getChildren() - .filter(c -> c instanceof Button) - .forEach(c -> { - Button b = (Button) c; - if (score != null && score.equals(Integer.parseInt(b.getText()))) { - b.addClassName(LumoUtility.Background.SUCCESS_50); - b.addClassName(LumoUtility.TextColor.SUCCESS_CONTRAST); - } else { - b.removeClassName(LumoUtility.Background.SUCCESS_50); - b.removeClassName(LumoUtility.TextColor.SUCCESS_CONTRAST); - } - ; - }); - } - - @Override - public void setReadOnly(boolean readOnly) { - super.setReadOnly(readOnly); - this.buttons - .getChildren() - .filter(c -> c instanceof Button) - .forEach(c -> ((Button) c).setEnabled(!readOnly)); - } - -} diff --git a/src/test/java/org/vaadin/addons/mygroup/AbstractViewTest.java b/src/test/java/org/vaadin/addons/mygroup/AbstractViewTest.java deleted file mode 100644 index e7a159c9..00000000 --- a/src/test/java/org/vaadin/addons/mygroup/AbstractViewTest.java +++ /dev/null @@ -1,134 +0,0 @@ -package org.vaadin.addons.mygroup; - -import io.github.bonigarcia.wdm.WebDriverManager; -import org.junit.Assert; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.openqa.selenium.By; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.chrome.ChromeDriver; - -import com.vaadin.flow.theme.AbstractTheme; -import com.vaadin.testbench.ScreenshotOnFailureRule; -import com.vaadin.testbench.TestBench; -import com.vaadin.testbench.parallel.ParallelTest; - -/** - * Base class for TestBench IntegrationTests on chrome. - *

- * The tests use Chrome driver (see pom.xml for integration-tests profile) to - * run integration tests on a headless Chrome. If a property {@code test.use - * .hub} is set to true, {@code AbstractViewTest} will assume that the - * TestBench test is running in a CI environment. In order to keep the this - * class light, it makes certain assumptions about the CI environment (such - * as available environment variables). It is not advisable to use this class - * as a base class for you own TestBench tests. - *

- * To learn more about TestBench, visit - * Vaadin TestBench. - */ -public abstract class AbstractViewTest extends ParallelTest { - private static final int SERVER_PORT = 8080; - - private final String route; - private final By rootSelector; - - @Rule - public ScreenshotOnFailureRule rule = new ScreenshotOnFailureRule(this, - false); - - public AbstractViewTest() { - this("", By.tagName("body")); - } - - protected AbstractViewTest(String route, By rootSelector) { - this.route = route; - this.rootSelector = rootSelector; - } - - @BeforeClass - public static void setupClass() { - WebDriverManager.chromedriver().setup(); - } - - - @Before - public void setup() throws Exception { - if (isUsingHub()) { - super.setup(); - } else { - setDriver(TestBench.createDriver(new ChromeDriver())); - } - getDriver().get(getURL(route)); - } - - /** - * Convenience method for getting the root element of the view based on - * the selector passed to the constructor. - * - * @return the root element - */ - protected WebElement getRootElement() { - return findElement(rootSelector); - } - - /** - * Asserts that the given {@code element} is rendered using a theme - * identified by {@code themeClass}. If the the is not found, JUnit - * assert will fail the test case. - * - * @param element web element to check for the theme - * @param themeClass theme class (such as {@code Lumo.class} - */ - protected void assertThemePresentOnElement( - WebElement element, Class themeClass) { - String themeName = themeClass.getSimpleName().toLowerCase(); - Boolean hasStyle = (Boolean) executeScript("" + - "var styles = Array.from(arguments[0]._template.content" + - ".querySelectorAll('style'))" + - ".filter(style => style.textContent.indexOf('" + - themeName + "') > -1);" + - "return styles.length > 0;", element); - - Assert.assertTrue("Element '" + element.getTagName() + "' should have" + - " had theme '" + themeClass.getSimpleName() + "'.", - hasStyle); - } - - /** - * Property set to true when running on a test hub. - */ - private static final String USE_HUB_PROPERTY = "test.use.hub"; - - /** - * Returns deployment host name concatenated with route. - * - * @return URL to route - */ - private static String getURL(String route) { - return String.format("http://%s:%d/%s", getDeploymentHostname(), - SERVER_PORT, route); - } - - /** - * Returns whether we are using a test hub. This means that the starter - * is running tests in Vaadin's CI environment, and uses TestBench to - * connect to the testing hub. - * - * @return whether we are using a test hub - */ - private static boolean isUsingHub() { - return Boolean.TRUE.toString().equals( - System.getProperty(USE_HUB_PROPERTY)); - } - - /** - * If running on CI, get the host name from environment variable HOSTNAME - * - * @return the host name - */ - private static String getDeploymentHostname() { - return isUsingHub() ? System.getenv("HOSTNAME") : "localhost"; - } -} \ No newline at end of file diff --git a/src/test/java/org/vaadin/addons/mygroup/AddonIT.java b/src/test/java/org/vaadin/addons/mygroup/AddonIT.java deleted file mode 100644 index 8c11a488..00000000 --- a/src/test/java/org/vaadin/addons/mygroup/AddonIT.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.vaadin.addons.mygroup; - -import com.vaadin.flow.component.html.testbench.DivElement; -import org.junit.Assert; -import org.junit.Test; - - -public class AddonIT extends AbstractViewTest { - - @Test - public void addonTextIsRendered() { - DivElement divElement = $(DivElement.class).id("theAddon"); - Assert.assertNotNull(divElement); - Assert.assertEquals("Hello", divElement.getText()); - } -} diff --git a/src/test/java/org/vaadin/addons/mygroup/AddonView.java b/src/test/java/org/vaadin/addons/mygroup/AddonView.java deleted file mode 100644 index 6da310d9..00000000 --- a/src/test/java/org/vaadin/addons/mygroup/AddonView.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.vaadin.addons.mygroup; - -import com.vaadin.flow.component.button.Button; -import com.vaadin.flow.component.html.Paragraph; -import com.vaadin.flow.component.notification.Notification; -import com.vaadin.flow.component.orderedlayout.VerticalLayout; -import com.vaadin.flow.router.Route; - -@Route("") -public class AddonView extends VerticalLayout { - - public AddonView() { - final NPS nps = new NPS(); - nps.setId("nps"); // This is for automated tests - - // Button to start the feed process - add(new Button("Ask NPS", e -> { - add(nps); - })); - - // Get the score and remove component - nps.addValueChangeListener(e -> { - Notification.show("Value changed from " + e.getOldValue() + " to " + e.getValue()); - add(new Paragraph("NPS: " + e.getOldValue() + " -> " + e.getValue())); - remove(nps); - }); - - // Edit the the score - add(new Button("Edit score", e -> { - nps.setValue((int) Math.ceil(Math.random() * 10)); - add(nps); - })); - - // Test read-only state - add(new Button("Toggle read-only", e -> { - nps.setReadOnly(!nps.isReadOnly()); - })); - - - } -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 37f32e77..00000000 --- a/tsconfig.json +++ /dev/null @@ -1,39 +0,0 @@ -// This TypeScript configuration file is generated by vaadin-maven-plugin. -// This is needed for TypeScript compiler to compile your TypeScript code in the project. -// It is recommended to commit this file to the VCS. -// You might want to change the configurations to fit your preferences -// For more information about the configurations, please refer to http://www.typescriptlang.org/docs/handbook/tsconfig-json.html -{ - "flow_version": "23.3.4", - "compilerOptions": { - "sourceMap": true, - "jsx": "react-jsx", - "inlineSources": true, - "module": "esNext", - "target": "es2020", - "moduleResolution": "node", - "strict": true, - "skipLibCheck": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noImplicitAny": true, - "noImplicitThis": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "experimentalDecorators": true, - "useDefineForClassFields": false, - "baseUrl": "frontend", - "paths": { - "@vaadin/flow-frontend": ["generated/jar-resources"], - "@vaadin/flow-frontend/*": ["generated/jar-resources/*"], - "Frontend/*": ["*"] - } - }, - "include": [ - "frontend/**/*", - "types.d.ts" - ], - "exclude": [ - "frontend/generated/jar-resources/**" - ] -} diff --git a/types.d.ts b/types.d.ts deleted file mode 100644 index 250302bd..00000000 --- a/types.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -// This TypeScript modules definition file is generated by vaadin-maven-plugin. -// You can not directly import your different static files into TypeScript, -// This is needed for TypeScript compiler to declare and export as a TypeScript module. -// It is recommended to commit this file to the VCS. -// You might want to change the configurations to fit your preferences -declare module '*.css' { - import { CSSResultGroup } from 'lit'; - const content: CSSResultGroup; - export default content; -} diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 13314929..00000000 --- a/webpack.config.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * 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'); - -/** - * To change the webpack config, add a new configuration object in - * the merge arguments below: - */ -module.exports = merge(flowDefaults, - // Override default configuration - // { - // mode: 'development', - // devtool: 'inline-source-map', - // }, - - // Add a custom plugin - // (install the plugin with `npm install --save-dev webpack-bundle-analyzer`) - // { - // plugins: [ - // new require('webpack-bundle-analyzer').BundleAnalyzerPlugin({ - // analyzerMode: 'static' - // }) - // ] - // }, -);