diff --git a/kontor-spring/build.gradle b/kontor-spring/build.gradle index 666c48c..349e8b4 100644 --- a/kontor-spring/build.gradle +++ b/kontor-spring/build.gradle @@ -2,7 +2,6 @@ plugins { id 'java' id 'application' id 'maven-publish' - //id "com.google.cloud.artifactregistry.gradle-plugin" version "2.2.0" id 'jvm-test-suite' id 'jacoco' id 'test-report-aggregation' @@ -11,13 +10,11 @@ plugins { alias(libs.plugins.spring.dependencies) alias(libs.plugins.vaadin) alias(libs.plugins.lombok) - //id 'com.github.ksoichiro.build.info' version '0.2.0' - //id 'com.pasam.gradle.buildinfo' version '0.1.3' - id 'com.gorylenko.gradle-git-properties' version '4.0.1' + alias(libs.plugins.gradle.git.properties) } repositories { - maven { setUrl("https://nexus.thpeetz.de/repository/maven-central") } + maven { setUrl("https://nexus.thpeetz.de/repository/maven-public") } mavenCentral() maven { setUrl("https://maven.vaadin.com/vaadin-prereleases") } maven { setUrl("https://repo.spring.io/milestone") } @@ -25,7 +22,7 @@ repositories { } java { - sourceCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_21 } configurations { @@ -38,23 +35,23 @@ configurations { dependencies { implementation 'com.vaadin:vaadin-core' implementation 'com.vaadin:vaadin-spring-boot-starter' + implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:spring-boot-starter-artemis' - implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-validation' - implementation 'org.apache.camel.springboot:camel-spring-boot-starter' + implementation 'org.springframework.security:spring-security-oauth2-jose' + implementation 'org.springframework.security:spring-security-oauth2-resource-server' implementation 'org.apache.camel.springboot:camel-jms-starter' implementation 'org.apache.camel.springboot:camel-metrics-starter' implementation 'org.apache.camel.springboot:camel-micrometer-starter' + implementation 'org.apache.camel.springboot:camel-spring-boot-starter' implementation 'org.apache.activemq:artemis-jakarta-client' //implementation libs.artemis - implementation 'org.springframework.boot:spring-boot-starter-actuator' developmentOnly 'org.springframework.boot:spring-boot-devtools' implementation 'io.micrometer:micrometer-registry-prometheus' implementation libs.jolokia.core implementation libs.prometheus.collector - implementation 'org.springframework.security:spring-security-oauth2-jose' - implementation 'org.springframework.security:spring-security-oauth2-resource-server' implementation 'com.h2database:h2' implementation libs.hsqldb implementation 'org.postgresql:postgresql' @@ -149,7 +146,6 @@ testing { } } test(JvmTestSuite) { - testType = TestSuiteType.UNIT_TEST targets { all { testTask.configure { @@ -165,7 +161,6 @@ testing { } } integrationTest(JvmTestSuite) { - testType = "view-test" targets { all { testTask.configure { @@ -197,13 +192,10 @@ jacocoTestReport { reporting { reports { testAggregateTestReport(AggregateTestReport) { - testType = TestSuiteType.UNIT_TEST } integrationTestAggregateTestReport(AggregateTestReport) { - testType = "view-test" } integrationTestCodeCoverageReport(JacocoCoverageReport) { - testType = "view-test" } } } diff --git a/kontor-spring/frontend/themes/kontor/theme.json b/kontor-spring/frontend/themes/kontor/theme.json deleted file mode 100644 index 0f7a81f..0000000 --- a/kontor-spring/frontend/themes/kontor/theme.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "lumoImports" : [ "typography", "color", "spacing", "badge", "utility" ] -} \ No newline at end of file diff --git a/kontor-spring/gradle/libs.versions.toml b/kontor-spring/gradle/libs.versions.toml index a5ae22d..33daba1 100644 --- a/kontor-spring/gradle/libs.versions.toml +++ b/kontor-spring/gradle/libs.versions.toml @@ -1,39 +1,32 @@ [versions] -gradle = "8.6" -args4j = "2.33" -commonscli = "1.5.0" -junit = "5.8.2" -logback = "1.6.3" -mockito = "1.9.5" -picoli = "4.7.0" -slf4j = "2.0.18" -hsqldb = "2.7.1" -sqlite = "3.25.2" -spotbugs = "6.0.7" -sonarqube = "3.3" -springboot = "3.2.5" -springdependencies = "1.1.4" -vaadin = "24.4.23" +gradle = "9.5.1" +springboot = "4.1.0" +springdependencies = "1.1.7" +vaadin = "25.2.6" camel = "4.10.6" artemis = "2.41.0" +logback = "1.6.3" lombok = "8.11" gson = "2.9.0" jackson = "2.16.1" json_simple = "1.1.1" jsoup = "1.23.1" mail = "1.6.2" -hypersistence = "3.9.10" +hypersistence = "3.15.4" jolokia = "2.6.1" prometheus = "1.6.0" +slf4j = "2.0.18" +junit = "5.8.2" +hsqldb = "2.7.1" +sqlite = "3.25.2" +spotbugs = "6.0.7" +sonarqube = "3.3" +gradleGitProperties = "4.0.1" [libraries] -args4j = { module = "args4j:args4j", version.ref = "args4j" } -commonscli = { module = "commons-cli:commons-cli", version.ref = "commonscli" } junit = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" } logbackCore = { module = "ch.qos.logback:logback-core", version.ref = "logback" } logbackClassic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" } -mockito = { module = "org.mockito:mockito-all", version.ref = "mockito" } -picocli = { module = "info.picocli:picocli", version.ref = "picoli" } slf4j = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" } hsqldb = { module = "org.hsqldb:hsqldb", version.ref = "hsqldb" } gson = { module = "com.google.code.gson:gson", version.ref = "gson" } @@ -42,7 +35,7 @@ jackson = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref json = { module = "com.googlecode.json-simple:json-simple", version.ref ="json_simple" } mail = { module = "com.sun.mail:javax.mail", version.ref ="mail" } sqlite-jdbc = { module = "org.xerial:sqlite-jdbc", version.ref = "sqlite" } -hypersistence = { module = "io.hypersistence:hypersistence-utils-hibernate-63", version.ref = "hypersistence" } +hypersistence = { module = "io.hypersistence:hypersistence-utils-hibernate-73", version.ref = "hypersistence" } vaadin-bom = { module = "com.vaadin:vaadin-bom", version.ref = "vaadin" } camel-bom = { module = "org.apache.camel.springboot:camel-spring-boot-bom", version.ref = "camel"} artemis = { module = "org.apache.activemq:artemis-jms-server", version.ref = "artemis" } @@ -59,3 +52,4 @@ spring-boot = { id = "org.springframework.boot", version.ref = "springboot"} spring-dependencies = { id = "io.spring.dependency-management", version.ref = "springdependencies" } vaadin = { id = "com.vaadin", version.ref = "vaadin" } lombok = { id = "io.freefair.lombok", version.ref = "lombok" } +gradle-git-properties = { id = "com.gorylenko.gradle-git-properties", version.ref = "gradleGitProperties" } diff --git a/kontor-spring/gradle/wrapper/gradle-wrapper.jar b/kontor-spring/gradle/wrapper/gradle-wrapper.jar index d64cd49..b1b8ef5 100644 Binary files a/kontor-spring/gradle/wrapper/gradle-wrapper.jar and b/kontor-spring/gradle/wrapper/gradle-wrapper.jar differ diff --git a/kontor-spring/gradle/wrapper/gradle-wrapper.properties b/kontor-spring/gradle/wrapper/gradle-wrapper.properties index a80b22c..df6a6ad 100644 --- a/kontor-spring/gradle/wrapper/gradle-wrapper.properties +++ b/kontor-spring/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,9 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip networkTimeout=10000 +retries=0 +retryBackOffMs=500 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/kontor-spring/gradlew b/kontor-spring/gradlew index 1aa94a4..b9bb139 100755 --- a/kontor-spring/gradlew +++ b/kontor-spring/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -112,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -170,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -203,15 +203,14 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/kontor-spring/gradlew.bat b/kontor-spring/gradlew.bat index 25da30d..24c62d5 100644 --- a/kontor-spring/gradlew.bat +++ b/kontor-spring/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -21,8 +23,8 @@ @rem @rem ########################################################################## -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. @@ -49,7 +51,7 @@ echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% @@ -63,30 +65,18 @@ echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% diff --git a/kontor-spring/src/main/bundles/prod.bundle b/kontor-spring/src/main/bundles/prod.bundle new file mode 100644 index 0000000..9f3b2d3 Binary files /dev/null and b/kontor-spring/src/main/bundles/prod.bundle differ diff --git a/kontor-spring/src/main/frontend/generated/app-shell-imports.d.ts b/kontor-spring/src/main/frontend/generated/app-shell-imports.d.ts new file mode 100644 index 0000000..693da49 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/app-shell-imports.d.ts @@ -0,0 +1 @@ +export {} \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/app-shell-imports.js b/kontor-spring/src/main/frontend/generated/app-shell-imports.js new file mode 100644 index 0000000..e69de29 diff --git a/kontor-spring/src/main/frontend/generated/css.generated.d.ts b/kontor-spring/src/main/frontend/generated/css.generated.d.ts new file mode 100644 index 0000000..ba07dc0 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/css.generated.d.ts @@ -0,0 +1 @@ +export declare const applyCss: (target: Node) => void; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/css.generated.js b/kontor-spring/src/main/frontend/generated/css.generated.js new file mode 100644 index 0000000..f65db65 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/css.generated.js @@ -0,0 +1,52 @@ +import { injectGlobalCss } from 'Frontend/generated/jar-resources/theme-util.js'; +import { webcomponentGlobalCssInjector } from 'Frontend/generated/jar-resources/theme-util.js'; +let needsReloadOnChanges = false; + + let themeRemovers = new WeakMap(); + let targets = []; + const fontFaceRegex = /(@font-face\s*{[\s\S]*?})/g; + + export const applyCss = (target) => { + const removers = []; + if (target !== document) { + + webcomponentGlobalCssInjector((css) => { + removers.push(injectGlobalCss(css, '', target)); + if(fontFaceRegex.test(css)) { + const fontFaces = Array.from(css.match(fontFaceRegex)); + fontFaces.forEach(fontFace => { + removers.push(injectGlobalCss(fontFace, '', document)); + }); + } + }); + } + + if (import.meta.hot) { + targets.push(new WeakRef(target)); + themeRemovers.set(target, removers); + } + + } + + +if (import.meta.hot) { + import.meta.hot.accept((module) => { + + if (needsReloadOnChanges) { + window.location.reload(); + } else { + targets.forEach(targetRef => { + const target = targetRef.deref(); + if (target) { + themeRemovers.get(target).forEach(remover => remover()) + module.applyTheme(target); + } + }) + } + }); + + import.meta.hot.on('vite:afterUpdate', (update) => { + document.dispatchEvent(new CustomEvent('vaadin-theme-updated', { detail: update })); + }); +} + diff --git a/kontor-spring/src/main/frontend/generated/flow/Flow.tsx b/kontor-spring/src/main/frontend/generated/flow/Flow.tsx new file mode 100644 index 0000000..7172685 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/Flow.tsx @@ -0,0 +1,707 @@ +/* + * Copyright 2000-2026 Vaadin Ltd. + * + * Licensed 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. + */ +/// +import { Flow as _Flow } from 'Frontend/generated/jar-resources/Flow.js'; +import React, { useCallback, useEffect, useReducer, useRef, useState, type ReactNode } from 'react'; +import { matchRoutes, useBlocker, useLocation, useNavigate, type NavigateOptions, useHref } from 'react-router'; +import { createPortal } from 'react-dom'; + +const flow = new _Flow({ + imports: () => import('Frontend/generated/flow/generated-flow-imports.js') +}); + +const router = { + render() { + return Promise.resolve(); + } +}; + +const flowReact : { active: boolean } = { + active: false, +} + +// ClickHandler for vaadin-router-go event is copied from vaadin/router click.js +// @ts-ignore +function getAnchorOrigin(anchor) { + // IE11: on HTTP and HTTPS the default port is not included into + // window.location.origin, so won't include it here either. + const port = anchor.port; + const protocol = anchor.protocol; + const defaultHttp = protocol === 'http:' && port === '80'; + const defaultHttps = protocol === 'https:' && port === '443'; + const host = + defaultHttp || defaultHttps + ? anchor.hostname // does not include the port number (e.g. www.example.org) + : anchor.host; // does include the port number (e.g. www.example.org:80) + return `${protocol}//${host}`; +} + +function normalizeURL(url: URL): void | string { + // ignore click if baseURI does not match the document (external) + if (!url.href.startsWith(document.baseURI)) { + return; + } + + // Normalize path against baseURI + return '/' + url.href.slice(document.baseURI.length); +} + +function extractURL(event: MouseEvent): void | URL { + // ignore the click if the default action is prevented + if (event.defaultPrevented) { + return; + } + + // ignore the click if not with the primary mouse button + if (event.button !== 0) { + return; + } + + // ignore the click if a modifier key is pressed + if (event.shiftKey || event.ctrlKey || event.altKey || event.metaKey) { + return; + } + + // find the element that the click is at (or within) + let maybeAnchor = event.target; + const path = event.composedPath + ? event.composedPath() + : // @ts-ignore + event.path || []; + + // example to check: `for...of` loop here throws the "Not yet implemented" error + for (let i = 0; i < path.length; i++) { + const target = path[i]; + if (target.nodeName && target.nodeName.toLowerCase() === 'a') { + maybeAnchor = target; + break; + } + } + + // @ts-ignore + while (maybeAnchor && maybeAnchor.nodeName.toLowerCase() !== 'a') { + // @ts-ignore + maybeAnchor = maybeAnchor.parentNode; + } + + // ignore the click if not at an element + // @ts-ignore + if (!maybeAnchor || maybeAnchor.nodeName.toLowerCase() !== 'a') { + return; + } + + const anchor = maybeAnchor as HTMLAnchorElement; + + // ignore the click if the element has a non-default target + if (anchor.target && anchor.target.toLowerCase() !== '_self') { + return; + } + + // ignore the click if the element has the 'download' attribute + if (anchor.hasAttribute('download')) { + return; + } + + // ignore the click if the element has the 'router-ignore' attribute + if (anchor.hasAttribute('router-ignore')) { + return; + } + + // ignore the click if the target URL is a fragment on the current page + if (anchor.pathname === window.location.pathname && anchor.hash !== '') { + // @ts-ignore + window.location.hash = anchor.hash; + return; + } + + // ignore the click if the target is external to the app + // In IE11 HTMLAnchorElement does not have the `origin` property + // @ts-ignore + const origin = anchor.origin || getAnchorOrigin(anchor); + if (origin !== window.location.origin) { + return; + } + + return new URL(anchor.href, anchor.baseURI); +} + +function extractPath(event: MouseEvent): void | string { + const url = extractURL(event); + if (!url) { + return; + } + return normalizeURL(url); +} + +export const registerGlobalClickHandler = () => { + window.addEventListener('click', (event: MouseEvent) => { + if (flowReact.active) { + return; + } + const url = extractURL(event); + if (!url) { + return; + } + // ignore click if baseURI does not match the document (external) + if (!url.href.startsWith(document.baseURI)) { + return; + } + if (event && event.preventDefault) { + event.preventDefault(); + } + + // Normalize path against baseURI + const path = url.pathname + url.search + url.hash; + const state = {...window.history.state} + if (state.idx !== undefined) { + state.idx = state.idx + 1; + } + window.history.pushState(state, '', path); + window.dispatchEvent(new PopStateEvent('popstate')); + }, { capture: false }); +}; + +/** + * Fire 'vaadin-navigated' event to inform components of navigation. + * @param pathname pathname of navigation + * @param search search of navigation + */ +function fireNavigated(pathname: string, search: string) { + setTimeout(() => { + window.dispatchEvent( + new CustomEvent('vaadin-navigated', { + detail: { + pathname, + search + } + }) + ); + // @ts-ignore + delete window.Vaadin.Flow.navigation; + }); +} + +function postpone() {} + +const prevent = () => postpone; + +type RouterContainer = Awaited>; + +type PortalEntry = { + readonly children: ReactNode; + readonly domNode: HTMLElement; +}; + +type FlowPortalProps = React.PropsWithChildren< + Readonly<{ + domNode: HTMLElement; + onRemove(): void; + }> +>; + +function FlowPortal({ children, domNode, onRemove }: FlowPortalProps) { + useEffect(() => { + domNode.addEventListener( + 'flow-portal-remove', + (event: Event) => { + event.preventDefault(); + onRemove(); + }, + { once: true } + ); + }, []); + + return createPortal(children, domNode); +} + +const ADD_FLOW_PORTAL = 'ADD_FLOW_PORTAL'; + +type AddFlowPortalAction = Readonly<{ + type: typeof ADD_FLOW_PORTAL; + portal: React.ReactElement; +}>; + +function addFlowPortal(portal: React.ReactElement): AddFlowPortalAction { + return { + type: ADD_FLOW_PORTAL, + portal + }; +} + +const REMOVE_FLOW_PORTAL = 'REMOVE_FLOW_PORTAL'; + +type RemoveFlowPortalAction = Readonly<{ + type: typeof REMOVE_FLOW_PORTAL; + key: string; +}>; + +function removeFlowPortal(key: string): RemoveFlowPortalAction { + return { + type: REMOVE_FLOW_PORTAL, + key + }; +} + +function flowPortalsReducer( + portals: readonly React.ReactElement[], + action: AddFlowPortalAction | RemoveFlowPortalAction +) { + switch (action.type) { + case ADD_FLOW_PORTAL: + return [...portals, action.portal]; + case REMOVE_FLOW_PORTAL: + return portals.filter(({ key }) => key !== action.key); + default: + return portals; + } +} + +type NavigateOpts = { + to: string; + callback: boolean; + opts?: NavigateOptions; +}; + +type NavigateFn = (to: string, callback: boolean, opts?: NavigateOptions) => void; + +let navigateInProgress = false; +/** + * A hook providing the `navigate(path: string, opts?: NavigateOptions)` function + * with React Router API that has more consistent history updates. Uses internal + * queue for processing navigate calls. + */ +function useQueuedNavigate( + waitReference: React.MutableRefObject | undefined>, + navigated: React.MutableRefObject +): NavigateFn { + const navigate = useNavigate(); + const navigateQueue = useRef([]).current; + const [navigateQueueLength, setNavigateQueueLength] = useState(0); + + const dequeueNavigation = useCallback(() => { + if (navigateInProgress) { + dequeueNavigationAfterCurrentTask(); + return; + } + + const navigateArgs = navigateQueue.shift(); + if (navigateArgs === undefined) { + // Empty queue, do nothing. + return; + } + + const blockingNavigate = async () => { + if (waitReference.current) { + await waitReference.current; + waitReference.current = undefined; + } + navigated.current = !navigateArgs.callback; + navigateInProgress = true; + navigate(navigateArgs.to, navigateArgs.opts); + setNavigateQueueLength(navigateQueue.length); + }; + blockingNavigate(); + }, [navigate, setNavigateQueueLength]); + + const dequeueNavigationAfterCurrentTask = useCallback(() => { + setTimeout(dequeueNavigation, 0); + }, [dequeueNavigation]); + + const enqueueNavigation = useCallback( + (to: string, callback: boolean, opts?: NavigateOptions) => { + navigateQueue.push({ to: to, callback: callback, opts: opts }); + setNavigateQueueLength(navigateQueue.length); + if (navigateQueue.length === 1) { + // The first navigation can be started right after any pending sync + // jobs, which could add more navigations to the queue. + dequeueNavigationAfterCurrentTask(); + } + }, + [setNavigateQueueLength, dequeueNavigationAfterCurrentTask] + ); + + useEffect( + () => () => { + // The Flow component has rendered, but history might not be + // updated yet, as React Router does it asynchronously. + // Use microtask callback for history consistency. + dequeueNavigationAfterCurrentTask(); + }, + [navigateQueueLength, dequeueNavigationAfterCurrentTask] + ); + + return enqueueNavigation; +} + +const flowNavigation = () => { + // @ts-ignore + window.Vaadin.Flow.navigation = true; +}; + +function Flow() { + const ref = useRef(null); + const navigate = useNavigate(); + const blocker = useBlocker(({ currentLocation, nextLocation }) => { + navigated.current = + navigated.current || + (nextLocation.pathname === currentLocation.pathname && + nextLocation.search === currentLocation.search && + nextLocation.hash === currentLocation.hash); + return true; + }); + const location = useLocation(); + const navigated = useRef(false); + const blockerHandled = useRef(false); + const fromAnchor = useRef(false); + const containerRef = useRef(undefined); + const roundTrip = useRef | undefined>(undefined); + const queuedNavigate = useQueuedNavigate(roundTrip, navigated); + const basename = useHref('/'); + + // portalsReducer function is used as state outside the Flow component. + const [portals, dispatchPortalAction] = useReducer(flowPortalsReducer, []); + + const addPortalEventHandler = useCallback( + (event: CustomEvent) => { + event.preventDefault(); + + const key = Math.random().toString(36).slice(2); + dispatchPortalAction( + addFlowPortal( + dispatchPortalAction(removeFlowPortal(key))} + > + {event.detail.children} + + ) + ); + }, + [dispatchPortalAction] + ); + + const navigateEventHandler = useCallback( + (event: MouseEvent) => { + const path = extractPath(event); + if (!path) { + return; + } + + if (event && event.preventDefault) { + event.preventDefault(); + } + navigated.current = false; + // When navigation is triggered by click on a link, fromAnchor is set to true + // in order to get a server round-trip even when navigating to the same URL again + fromAnchor.current = true; + // @ts-ignore + window.Vaadin.Flow.navigation = true; + navigate(path); + // Dispatch close event for overlay drawer on click navigation. + window.dispatchEvent(new CustomEvent('close-overlay-drawer')); + }, + [navigate] + ); + + const vaadinRouterGoEventHandler = useCallback( + (event: CustomEvent) => { + const url = event.detail; + const path = normalizeURL(url); + if (!path) { + return; + } + + event.preventDefault(); + navigate(path); + }, + [navigate] + ); + + const vaadinNavigateEventHandler = useCallback( + (event: CustomEvent<{ state: unknown; url: string; replace?: boolean; callback: boolean }>) => { + // @ts-ignore + window.Vaadin.Flow.navigation = true; + // clean base uri away if for instance redirected to http://localhost/path/user?id=10 + // else the whole http... will be appended to the url see #19580 + const path = event.detail.url.startsWith(document.baseURI) + ? '/' + event.detail.url.slice(document.baseURI.length) + : '/' + event.detail.url; + fromAnchor.current = false; + queuedNavigate(path, event.detail.callback, { state: event.detail.state, replace: event.detail.replace }); + }, + [navigate] + ); + + const redirect = useCallback( + (path: string) => { + return () => { + navigate(path, { replace: true }); + }; + }, + [navigate] + ); + + useEffect(() => { + // @ts-ignore + window.addEventListener('vaadin-router-go', vaadinRouterGoEventHandler); + // @ts-ignore + window.addEventListener('vaadin-navigate', vaadinNavigateEventHandler); + + return () => { + // @ts-ignore + window.removeEventListener('vaadin-router-go', vaadinRouterGoEventHandler); + // @ts-ignore + window.removeEventListener('vaadin-navigate', vaadinNavigateEventHandler); + }; + }, [vaadinRouterGoEventHandler, vaadinNavigateEventHandler]); + + useEffect(() => { + // @ts-ignore + window.addEventListener("popstate", flowNavigation); + window.addEventListener('click', navigateEventHandler); + flowReact.active = true; + + return () => { + containerRef.current?.parentNode?.removeChild(containerRef.current); + containerRef.current?.removeEventListener('flow-portal-add', addPortalEventHandler as EventListener); + containerRef.current = undefined; + // @ts-ignore + window.removeEventListener("popstate", flowNavigation); + window.removeEventListener('click', navigateEventHandler); + flowReact.active = false; + }; + }, []); + + useEffect(() => { + if (blocker.state === 'blocked') { + if (blockerHandled.current) { + // Blocker is handled and the new navigation + // gets queued to be executed after the current handling ends. + const { pathname, state } = blocker.location; + // Clear base name to not get /baseName/basename/path + const pathNoBase = pathname.substring(basename.length); + // path should always start with / else react-router will append to current url + queuedNavigate(pathNoBase.startsWith('/') ? pathNoBase : '/' + pathNoBase, true, { + state: state, + replace: true + }); + return; + } + blockerHandled.current = true; + let blockingPromise: any; + roundTrip.current = new Promise( + (resolve, reject) => (blockingPromise = { resolve: resolve, reject: reject }) + ); + // Release blocker handling after promise is fulfilled + roundTrip.current.then( + () => (blockerHandled.current = false), + () => (blockerHandled.current = false) + ); + + // Proceed to the blocked location, unless the navigation originates from a click on a link. + // In that case continue with function execution and perform a server round-trip + if (navigated.current && !fromAnchor.current) { + blocker.proceed(); + blockingPromise.resolve(); + navigateInProgress = false; + return; + } + fromAnchor.current = false; + const { pathname, search } = blocker.location; + const routes = ((window as any)?.Vaadin?.routesConfig || []) as any[]; + let matched = matchRoutes(Array.from(routes), pathname); + + // Navigation between server routes + // @ts-ignore + if (matched && matched.filter((path) => path.route?.element?.type?.name === Flow.name).length != 0) { + containerRef.current?.onBeforeEnter?.call( + containerRef?.current, + { pathname, search }, + { + prevent() { + blocker.reset(); + blockingPromise.resolve(); + navigateInProgress = false; + navigated.current = false; + }, + redirect, + continue() { + blocker.proceed(); + blockingPromise.resolve(); + navigateInProgress = false; + } + }, + router + ); + navigated.current = true; + } else { + // For covering the 'server -> client' use case + Promise.resolve( + containerRef.current?.onBeforeLeave?.call( + containerRef?.current, + { + pathname, + search + }, + { prevent }, + router + ) + ).then((cmd: unknown) => { + if (cmd === postpone && containerRef.current) { + // postponed navigation: expose existing blocker to Flow + containerRef.current.serverConnected = (cancel) => { + if (cancel) { + blocker.reset(); + } else { + blocker.proceed(); + } + blockingPromise.resolve(); + navigateInProgress = false; + }; + } else { + // permitted navigation: proceed with the blocker + blocker.proceed(); + blockingPromise.resolve(); + navigateInProgress = false; + } + }); + } + } + }, [blocker.state, blocker.location]); + + useEffect(() => { + if (blocker.state === 'blocked') { + return; + } + if (navigated.current) { + navigated.current = false; + fireNavigated(location.pathname, location.search); + return; + } + flow.serverSideRoutes[0] + .action({ pathname: location.pathname, search: location.search }) + .then((container) => { + const outlet = ref.current?.parentNode; + if (outlet && outlet !== container.parentNode) { + outlet.append(container); + container.addEventListener('flow-portal-add', addPortalEventHandler as EventListener); + containerRef.current = container; + } + return container.onBeforeEnter?.call( + container, + // Always add base to path as it is cleaned in getFlowRoutePath and will break a route starting with basename + { pathname: basename + location.pathname, search: location.search }, + { + prevent, + redirect, + continue() { + fireNavigated(location.pathname, location.search); + } + }, + router + ); + }) + .then((result: unknown) => { + if (typeof result === 'function') { + result(); + } + }); + }, [location]); + + return ( + <> + + {portals} + + ); +} +Flow.type = 'FlowContainer'; // This is for copilot to recognize this + +export const serverSideRoutes = [{ path: '/*', element: }]; + +/** + * Load the script for an exported WebComponent with the given tag + * + * @param tag name of the exported web-component to load + * + * @returns Promise(resolve, reject) that is fulfilled on script load + */ +export const loadComponentScript = (tag: String): Promise => { + return new Promise((resolve, reject) => { + useEffect(() => { + const script = document.createElement('script'); + script.src = `/web-component/${tag}.js`; + script.onload = function () { + resolve(); + }; + script.onerror = function (err) { + reject(err); + }; + document.head.appendChild(script); + + return () => { + document.head.removeChild(script); + }; + }, []); + }); +}; + +interface Properties { + [key: string]: string; +} + +/** + * Load WebComponent script and create a React element for the WebComponent. + * + * @param tag custom web-component tag name. + * @param props optional Properties object to create element attributes with + * @param onload optional callback to be called for script onload + * @param onerror optional callback for error loading the script + */ +export const reactElement = (tag: string, props?: Properties, onload?: () => void, onerror?: (err: any) => void) => { + loadComponentScript(tag).then( + () => onload?.(), + (err) => { + if (onerror) { + onerror(err); + } else { + console.error(`Failed to load script for ${tag}.`, err); + } + } + ); + + if (props) { + return React.createElement(tag, props); + } + return React.createElement(tag); +}; + +export default Flow; + +// @ts-ignore +if (import.meta.hot) { + // @ts-ignore + import.meta.hot.accept((newModule) => { + // A hot module replace for Flow.tsx happens when any JS/TS imported through @JsModule + // or similar is updated because this updates generated-flow-imports.js and that in turn + // is imported by this file. We have no means of hot replacing those files, e.g. some + // custom lit element so we need to reload the page. */ + if (newModule) { + window.location.reload(); + } + }); +} diff --git a/kontor-spring/src/main/frontend/generated/flow/ReactAdapter.tsx b/kontor-spring/src/main/frontend/generated/flow/ReactAdapter.tsx new file mode 100644 index 0000000..479b506 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/ReactAdapter.tsx @@ -0,0 +1,329 @@ +/* + * Copyright 2000-2026 Vaadin Ltd. + * + * Licensed 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. + */ +import { createRoot, Root } from 'react-dom/client'; +import { createElement, type Dispatch, type ReactElement, type ReactNode, useEffect, useReducer } from 'react'; + +type FlowStateKeyChangedAction = Readonly<{ + type: 'stateKeyChanged'; + key: K; + value: V; +}>; + +type FlowStateReducerAction = FlowStateKeyChangedAction; + +function stateReducer>>(state: S, action: FlowStateReducerAction): S { + switch (action.type) { + case 'stateKeyChanged': + const { value } = action; + return { + ...state, + key: value + } as S; + default: + return state; + } +} + +type DispatchEvent = T extends undefined ? () => boolean : (value: T) => boolean; + +const emptyAction: Dispatch = () => {}; + +/** + * An object with APIs exposed for using in the {@link ReactAdapterElement#render} + * implementation. + */ +export type RenderHooks = { + /** + * A hook API for using stateful JS properties of the Web Component from + * the React `render()`. + * + * @typeParam T - Type of the state value + * + * @param key - Web Component property name, which is used for two-way + * value propagation from the server and back. + * @param initialValue - Fallback initial value (optional). Only applies if + * the Java component constructor does not invoke `setState`. + * @returns A tuple with two values: + * 1. The current state. + * 2. The `set` function for changing the state and triggering render + * @protected + */ + readonly useState: ReactAdapterElement['useState']; + + /** + * A hook helper to simplify dispatching a `CustomEvent` on the Web + * Component from React. + * + * @typeParam T - The type for `event.detail` value (optional). + * + * @param type - The `CustomEvent` type string. + * @param options - The settings for the `CustomEvent`. + * @returns The `dispatch` function. The function parameters change + * depending on the `T` generic type: + * - For `undefined` type (default), has no parameters. + * - For other types, has one parameter for the `event.detail` value of that type. + * @protected + */ + readonly useCustomEvent: ReactAdapterElement['useCustomEvent']; + + /** + * A hook helper to generate the content element with name attribute to bind + * the server-side Flow element for this component. + * + * This is used together with {@link ReactAdapterComponent::getContentElement} + * to have server-side component attach to the correct client element. + * + * Usage as follows: + * + * const content = hooks.useContent('content'); + * return <> + * {content} + * ; + * + * Note! Not adding the 'content' element into the dom will have the + * server throw a IllegalStateException for element with tag name not found. + * + * @param name - The name attribute of the element + */ + readonly useContent: ReactAdapterElement['useContent']; +}; + +interface ReadyCallbackFunction { + (): void; +} + +/** + * A base class for Web Components that render using React. Enables creating + * adapters for integrating React components with Flow. Intended for use with + * `ReactAdapterComponent` Flow Java class. + */ +export abstract class ReactAdapterElement extends HTMLElement { + #root: Root | undefined = undefined; + #rootRendered: boolean = false; + #rendering: ReactNode | undefined = undefined; + + #state: Record = Object.create(null); + #stateSetters = new Map>(); + #customEvents = new Map>(); + #dispatchFlowState: Dispatch = emptyAction; + + #readyCallback = new Map(); + + readonly #renderHooks: RenderHooks; + + readonly #Wrapper: () => ReactElement | null; + + #unmounting?: Promise; + + constructor() { + super(); + this.#renderHooks = { + useState: this.useState.bind(this), + useCustomEvent: this.useCustomEvent.bind(this), + useContent: this.useContent.bind(this) + }; + this.#Wrapper = this.#renderWrapper.bind(this); + this.#markAsUsed(); + } + + public async connectedCallback() { + this.#rendering = createElement(this.#Wrapper); + const createNewRoot = this.dispatchEvent( + new CustomEvent('flow-portal-add', { + bubbles: true, + cancelable: true, + composed: true, + detail: { + children: this.#rendering, + domNode: this + } + }) + ); + + if (!createNewRoot || this.#root) { + return; + } + + await this.#unmounting; + + this.#root = createRoot(this); + this.#maybeRenderRoot(); + this.#root.render(this.#rendering); + } + + /** + * Add a callback for specified element identifier to be called when + * react element is ready. + *

+ * For internal use only. May be renamed or removed in a future release. + * + * @param id element identifier that callback is for + * @param readyCallback callback method to be informed on element ready state + * @internal + */ + public addReadyCallback(id: string, readyCallback: ReadyCallbackFunction) { + this.#readyCallback.set(id, readyCallback); + } + + public async disconnectedCallback() { + if (!this.#root) { + this.dispatchEvent( + new CustomEvent('flow-portal-remove', { + bubbles: true, + cancelable: true, + composed: true, + detail: { + children: this.#rendering, + domNode: this + } + }) + ); + } else { + this.#unmounting = Promise.resolve(); + await this.#unmounting; + this.#root.unmount(); + this.#root = undefined; + } + this.#rootRendered = false; + this.#rendering = undefined; + } + + /** + * A hook API for using stateful JS properties of the Web Component from + * the React `render()`. + * + * @typeParam T - Type of the state value + * + * @param key - Web Component property name, which is used for two-way + * value propagation from the server and back. + * @param initialValue - Fallback initial value (optional). Only applies if + * the Java component constructor does not invoke `setState`. + * @returns A tuple with two values: + * 1. The current state. + * 2. The `set` function for changing the state and triggering render + * @protected + */ + protected useState(key: string, initialValue?: T): [value: T, setValue: Dispatch] { + if (this.#stateSetters.has(key)) { + return [this.#state[key] as T, this.#stateSetters.get(key)!]; + } + + const value = ((this as Record)[key] as T) ?? initialValue!; + this.#state[key] = value; + Object.defineProperty(this, key, { + enumerable: true, + get(): T { + return this.#state[key]; + }, + set(nextValue: T) { + this.#state[key] = nextValue; + this.#dispatchFlowState({ type: 'stateKeyChanged', key, value }); + } + }); + + const dispatchChangedEvent = this.useCustomEvent<{ value: T }>(`${key}-changed`, { detail: { value } }); + const setValue = (value: T) => { + this.#state[key] = value; + dispatchChangedEvent({ value }); + this.#dispatchFlowState({ type: 'stateKeyChanged', key, value }); + }; + this.#stateSetters.set(key, setValue as Dispatch); + return [value, setValue]; + } + + /** + * A hook helper to simplify dispatching a `CustomEvent` on the Web + * Component from React. + * + * @typeParam T - The type for `event.detail` value (optional). + * + * @param type - The `CustomEvent` type string. + * @param options - The settings for the `CustomEvent`. + * @returns The `dispatch` function. The function parameters change + * depending on the `T` generic type: + * - For `undefined` type (default), has no parameters. + * - For other types, has one parameter for the `event.detail` value of that type. + * @protected + */ + protected useCustomEvent(type: string, options: CustomEventInit = {}): DispatchEvent { + if (!this.#customEvents.has(type)) { + const dispatch = ((detail?: T) => { + const eventInitDict = + detail === undefined + ? options + : { + ...options, + detail + }; + const event = new CustomEvent(type, eventInitDict); + return this.dispatchEvent(event); + }) as DispatchEvent; + this.#customEvents.set(type, dispatch as DispatchEvent); + return dispatch; + } + return this.#customEvents.get(type)! as DispatchEvent; + } + + /** + * The Web Component render function. To be implemented by users with React. + * + * @param hooks - the adapter APIs exposed for the implementation. + * @protected + */ + protected abstract render(hooks: RenderHooks): ReactElement | null; + + /** + * Prepare content container for Flow to bind server Element to. + * + * @param name container name attribute matching server name attribute + * @protected + */ + protected useContent(name: string): ReactElement | null { + useEffect(() => { + this.#readyCallback.get(name)?.(); + }, []); + return createElement('flow-content-container', { name, style: { display: 'contents' } }); + } + + #maybeRenderRoot() { + if (this.#rootRendered || !this.#root) { + return; + } + + this.#root.render(createElement(this.#Wrapper)); + this.#rootRendered = true; + } + + #renderWrapper(): ReactElement | null { + const [state, dispatchFlowState] = useReducer(stateReducer, this.#state); + this.#state = state; + this.#dispatchFlowState = dispatchFlowState; + return this.render(this.#renderHooks); + } + + #markAsUsed(): void { + // @ts-ignore + let vaadinObject = window.Vaadin || {}; + // @ts-ignore + if (vaadinObject.developmentMode) { + vaadinObject.registrations = vaadinObject.registrations || []; + vaadinObject.registrations.push({ + is: 'ReactAdapterElement', + version: '25.2.6' + }); + } + } +} diff --git a/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-050179d38edf3560e7fc3d0177787bb20c55630f7c4b372ebad09b42b287a5dd.js b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-050179d38edf3560e7fc3d0177787bb20c55630f7c4b372ebad09b42b287a5dd.js new file mode 100644 index 0000000..5e7d246 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-050179d38edf3560e7fc3d0177787bb20c55630f7c4b372ebad09b42b287a5dd.js @@ -0,0 +1,51 @@ +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/app-layout/src/vaadin-app-layout.js'; +import '@vaadin/scroller/src/vaadin-scroller.js'; +import '@vaadin/side-nav/src/vaadin-side-nav.js'; +import '@vaadin/side-nav/src/vaadin-side-nav-item.js'; +import '@vaadin/tooltip/src/vaadin-tooltip.js'; +import '@vaadin/app-layout/src/vaadin-drawer-toggle.js'; +import '@vaadin/button/src/vaadin-button.js'; +import 'Frontend/generated/jar-resources/disableOnClickFunctions.js'; +import '@vaadin/avatar/src/vaadin-avatar.js'; +import 'Frontend/generated/jar-resources/menubarConnector.js'; +import 'Frontend/generated/jar-resources/contextMenuConnector.js'; +import '@vaadin/menu-bar/src/vaadin-menu-bar.js'; +import '@vaadin/context-menu/src/vaadin-context-menu.js'; +import 'Frontend/generated/jar-resources/flow-component-renderer.js'; +import 'Frontend/generated/jar-resources/flow-component-directive.js'; +import 'lit'; +import 'Frontend/generated/jar-resources/contextMenuTargetConnector.js'; +import '@vaadin/component-base/src/gestures.js'; +import '@vaadin/horizontal-layout/src/vaadin-horizontal-layout.js'; +import '@vaadin/icons/vaadin-iconset.js'; +import '@vaadin/icon/src/vaadin-icon.js'; +import '@vaadin/upload/src/vaadin-upload.js'; +import 'Frontend/generated/jar-resources/vaadin-upload-manager-connector.ts'; +import '@vaadin/upload/vaadin-upload-manager.js'; +import '@vaadin/notification/src/vaadin-notification.js'; +import '@vaadin/checkbox/src/vaadin-checkbox.js'; +import '@vaadin/accordion/src/vaadin-accordion.js'; +import '@vaadin/accordion/src/vaadin-accordion-panel.js'; +import '@vaadin/details/src/vaadin-details.js'; +import 'Frontend/generated/jar-resources/messageListConnector.js'; +import '@vaadin/message-list/src/vaadin-message-list.js'; +import '@vaadin/text-field/src/vaadin-text-field.js'; +import '@vaadin/grid/src/vaadin-grid.js'; +import '@vaadin/grid/src/vaadin-grid-column.js'; +import '@vaadin/grid/src/vaadin-grid-sorter.js'; +import 'Frontend/generated/jar-resources/gridConnector.ts'; +import '@vaadin/component-base/src/debounce.js'; +import '@vaadin/component-base/src/async.js'; +import '@vaadin/grid/src/vaadin-grid-active-item-mixin.js'; +import 'Frontend/generated/jar-resources/vaadin-grid-flow-selection-column.js'; +import '@vaadin/grid/src/vaadin-grid-column-group.js'; +import 'Frontend/generated/jar-resources/lit-renderer.ts'; +import 'lit/directives/live.js'; +import '@vaadin/form-layout/src/vaadin-form-layout.js'; +import '@vaadin/form-layout/src/vaadin-form-item.js'; +import '@vaadin/form-layout/src/vaadin-form-row.js'; +import '@vaadin/combo-box/src/vaadin-combo-box.js'; +import 'Frontend/generated/jar-resources/comboBoxConnector.js'; +import '@vaadin/combo-box/src/vaadin-combo-box-placeholder.js'; +import '@vaadin/multi-select-combo-box/src/vaadin-multi-select-combo-box.js'; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-09a91b9550ef322666194480aeb843ea6225d32c6cf3cdd6c06d9751b9b982c4.js b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-09a91b9550ef322666194480aeb843ea6225d32c6cf3cdd6c06d9751b9b982c4.js new file mode 100644 index 0000000..3071068 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-09a91b9550ef322666194480aeb843ea6225d32c6cf3cdd6c06d9751b9b982c4.js @@ -0,0 +1,49 @@ +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/app-layout/src/vaadin-app-layout.js'; +import '@vaadin/scroller/src/vaadin-scroller.js'; +import '@vaadin/side-nav/src/vaadin-side-nav.js'; +import '@vaadin/side-nav/src/vaadin-side-nav-item.js'; +import '@vaadin/tooltip/src/vaadin-tooltip.js'; +import '@vaadin/app-layout/src/vaadin-drawer-toggle.js'; +import '@vaadin/button/src/vaadin-button.js'; +import 'Frontend/generated/jar-resources/disableOnClickFunctions.js'; +import '@vaadin/horizontal-layout/src/vaadin-horizontal-layout.js'; +import '@vaadin/icons/vaadin-iconset.js'; +import '@vaadin/icon/src/vaadin-icon.js'; +import '@vaadin/upload/src/vaadin-upload.js'; +import 'Frontend/generated/jar-resources/vaadin-upload-manager-connector.ts'; +import '@vaadin/upload/vaadin-upload-manager.js'; +import '@vaadin/notification/src/vaadin-notification.js'; +import 'Frontend/generated/jar-resources/flow-component-renderer.js'; +import 'Frontend/generated/jar-resources/flow-component-directive.js'; +import 'lit'; +import '@vaadin/checkbox/src/vaadin-checkbox.js'; +import 'Frontend/generated/jar-resources/menubarConnector.js'; +import 'Frontend/generated/jar-resources/contextMenuConnector.js'; +import '@vaadin/menu-bar/src/vaadin-menu-bar.js'; +import '@vaadin/context-menu/src/vaadin-context-menu.js'; +import 'Frontend/generated/jar-resources/contextMenuTargetConnector.js'; +import '@vaadin/component-base/src/gestures.js'; +import '@vaadin/accordion/src/vaadin-accordion.js'; +import '@vaadin/accordion/src/vaadin-accordion-panel.js'; +import '@vaadin/details/src/vaadin-details.js'; +import 'Frontend/generated/jar-resources/messageListConnector.js'; +import '@vaadin/message-list/src/vaadin-message-list.js'; +import '@vaadin/grid/src/vaadin-grid.js'; +import '@vaadin/grid/src/vaadin-grid-column.js'; +import '@vaadin/grid/src/vaadin-grid-sorter.js'; +import 'Frontend/generated/jar-resources/gridConnector.ts'; +import '@vaadin/component-base/src/debounce.js'; +import '@vaadin/component-base/src/async.js'; +import '@vaadin/grid/src/vaadin-grid-active-item-mixin.js'; +import 'Frontend/generated/jar-resources/vaadin-grid-flow-selection-column.js'; +import '@vaadin/grid/src/vaadin-grid-column-group.js'; +import 'Frontend/generated/jar-resources/lit-renderer.ts'; +import 'lit/directives/live.js'; +import '@vaadin/form-layout/src/vaadin-form-layout.js'; +import '@vaadin/form-layout/src/vaadin-form-item.js'; +import '@vaadin/form-layout/src/vaadin-form-row.js'; +import '@vaadin/combo-box/src/vaadin-combo-box.js'; +import 'Frontend/generated/jar-resources/comboBoxConnector.js'; +import '@vaadin/combo-box/src/vaadin-combo-box-placeholder.js'; +import '@vaadin/multi-select-combo-box/src/vaadin-multi-select-combo-box.js'; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-1465405c28a197cc689b86bc09d756395cc2b486677ca560b40061d793a87524.js b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-1465405c28a197cc689b86bc09d756395cc2b486677ca560b40061d793a87524.js new file mode 100644 index 0000000..f74837a --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-1465405c28a197cc689b86bc09d756395cc2b486677ca560b40061d793a87524.js @@ -0,0 +1,31 @@ +import '@vaadin/app-layout/src/vaadin-app-layout.js'; +import '@vaadin/scroller/src/vaadin-scroller.js'; +import '@vaadin/side-nav/src/vaadin-side-nav.js'; +import '@vaadin/side-nav/src/vaadin-side-nav-item.js'; +import '@vaadin/tooltip/src/vaadin-tooltip.js'; +import '@vaadin/app-layout/src/vaadin-drawer-toggle.js'; +import '@vaadin/button/src/vaadin-button.js'; +import 'Frontend/generated/jar-resources/disableOnClickFunctions.js'; +import '@vaadin/horizontal-layout/src/vaadin-horizontal-layout.js'; +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/icons/vaadin-iconset.js'; +import '@vaadin/icon/src/vaadin-icon.js'; +import '@vaadin/upload/src/vaadin-upload.js'; +import 'Frontend/generated/jar-resources/vaadin-upload-manager-connector.ts'; +import '@vaadin/upload/vaadin-upload-manager.js'; +import '@vaadin/notification/src/vaadin-notification.js'; +import 'Frontend/generated/jar-resources/flow-component-renderer.js'; +import 'Frontend/generated/jar-resources/flow-component-directive.js'; +import 'lit'; +import '@vaadin/checkbox/src/vaadin-checkbox.js'; +import 'Frontend/generated/jar-resources/menubarConnector.js'; +import 'Frontend/generated/jar-resources/contextMenuConnector.js'; +import '@vaadin/menu-bar/src/vaadin-menu-bar.js'; +import '@vaadin/context-menu/src/vaadin-context-menu.js'; +import 'Frontend/generated/jar-resources/contextMenuTargetConnector.js'; +import '@vaadin/component-base/src/gestures.js'; +import '@vaadin/accordion/src/vaadin-accordion.js'; +import '@vaadin/accordion/src/vaadin-accordion-panel.js'; +import '@vaadin/details/src/vaadin-details.js'; +import 'Frontend/generated/jar-resources/messageListConnector.js'; +import '@vaadin/message-list/src/vaadin-message-list.js'; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-17458473c5b0c327e5fdfb8de65e9c031656ad433885b259b9e37650bcf5111d.js b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-17458473c5b0c327e5fdfb8de65e9c031656ad433885b259b9e37650bcf5111d.js new file mode 100644 index 0000000..ed09c93 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-17458473c5b0c327e5fdfb8de65e9c031656ad433885b259b9e37650bcf5111d.js @@ -0,0 +1,53 @@ +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/app-layout/src/vaadin-app-layout.js'; +import '@vaadin/scroller/src/vaadin-scroller.js'; +import '@vaadin/side-nav/src/vaadin-side-nav.js'; +import '@vaadin/side-nav/src/vaadin-side-nav-item.js'; +import '@vaadin/tooltip/src/vaadin-tooltip.js'; +import '@vaadin/app-layout/src/vaadin-drawer-toggle.js'; +import '@vaadin/button/src/vaadin-button.js'; +import 'Frontend/generated/jar-resources/disableOnClickFunctions.js'; +import '@vaadin/horizontal-layout/src/vaadin-horizontal-layout.js'; +import '@vaadin/icons/vaadin-iconset.js'; +import '@vaadin/icon/src/vaadin-icon.js'; +import '@vaadin/upload/src/vaadin-upload.js'; +import 'Frontend/generated/jar-resources/vaadin-upload-manager-connector.ts'; +import '@vaadin/upload/vaadin-upload-manager.js'; +import '@vaadin/notification/src/vaadin-notification.js'; +import 'Frontend/generated/jar-resources/flow-component-renderer.js'; +import 'Frontend/generated/jar-resources/flow-component-directive.js'; +import 'lit'; +import '@vaadin/checkbox/src/vaadin-checkbox.js'; +import 'Frontend/generated/jar-resources/menubarConnector.js'; +import 'Frontend/generated/jar-resources/contextMenuConnector.js'; +import '@vaadin/menu-bar/src/vaadin-menu-bar.js'; +import '@vaadin/context-menu/src/vaadin-context-menu.js'; +import 'Frontend/generated/jar-resources/contextMenuTargetConnector.js'; +import '@vaadin/component-base/src/gestures.js'; +import '@vaadin/accordion/src/vaadin-accordion.js'; +import '@vaadin/accordion/src/vaadin-accordion-panel.js'; +import '@vaadin/details/src/vaadin-details.js'; +import 'Frontend/generated/jar-resources/messageListConnector.js'; +import '@vaadin/message-list/src/vaadin-message-list.js'; +import '@vaadin/grid/src/vaadin-grid.js'; +import '@vaadin/grid/src/vaadin-grid-column.js'; +import '@vaadin/grid/src/vaadin-grid-sorter.js'; +import 'Frontend/generated/jar-resources/gridConnector.ts'; +import '@vaadin/component-base/src/debounce.js'; +import '@vaadin/component-base/src/async.js'; +import '@vaadin/grid/src/vaadin-grid-active-item-mixin.js'; +import 'Frontend/generated/jar-resources/vaadin-grid-flow-selection-column.js'; +import '@vaadin/grid/src/vaadin-grid-column-group.js'; +import 'Frontend/generated/jar-resources/lit-renderer.ts'; +import 'lit/directives/live.js'; +import '@vaadin/text-field/src/vaadin-text-field.js'; +import '@vaadin/form-layout/src/vaadin-form-layout.js'; +import '@vaadin/form-layout/src/vaadin-form-item.js'; +import '@vaadin/form-layout/src/vaadin-form-row.js'; +import '@vaadin/list-box/src/vaadin-list-box.js'; +import '@vaadin/item/src/vaadin-item.js'; +import '@vaadin/integer-field/src/vaadin-integer-field.js'; +import '@vaadin/combo-box/src/vaadin-combo-box.js'; +import 'Frontend/generated/jar-resources/comboBoxConnector.js'; +import '@vaadin/combo-box/src/vaadin-combo-box-placeholder.js'; +import '@vaadin/multi-select-combo-box/src/vaadin-multi-select-combo-box.js'; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js new file mode 100644 index 0000000..28c7a78 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js @@ -0,0 +1,56 @@ +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/app-layout/src/vaadin-app-layout.js'; +import '@vaadin/scroller/src/vaadin-scroller.js'; +import '@vaadin/side-nav/src/vaadin-side-nav.js'; +import '@vaadin/side-nav/src/vaadin-side-nav-item.js'; +import '@vaadin/tooltip/src/vaadin-tooltip.js'; +import '@vaadin/app-layout/src/vaadin-drawer-toggle.js'; +import '@vaadin/button/src/vaadin-button.js'; +import 'Frontend/generated/jar-resources/disableOnClickFunctions.js'; +import '@vaadin/horizontal-layout/src/vaadin-horizontal-layout.js'; +import '@vaadin/icons/vaadin-iconset.js'; +import '@vaadin/icon/src/vaadin-icon.js'; +import '@vaadin/upload/src/vaadin-upload.js'; +import 'Frontend/generated/jar-resources/vaadin-upload-manager-connector.ts'; +import '@vaadin/upload/vaadin-upload-manager.js'; +import '@vaadin/notification/src/vaadin-notification.js'; +import 'Frontend/generated/jar-resources/flow-component-renderer.js'; +import 'Frontend/generated/jar-resources/flow-component-directive.js'; +import 'lit'; +import '@vaadin/checkbox/src/vaadin-checkbox.js'; +import 'Frontend/generated/jar-resources/menubarConnector.js'; +import 'Frontend/generated/jar-resources/contextMenuConnector.js'; +import '@vaadin/menu-bar/src/vaadin-menu-bar.js'; +import '@vaadin/context-menu/src/vaadin-context-menu.js'; +import 'Frontend/generated/jar-resources/contextMenuTargetConnector.js'; +import '@vaadin/component-base/src/gestures.js'; +import '@vaadin/accordion/src/vaadin-accordion.js'; +import '@vaadin/accordion/src/vaadin-accordion-panel.js'; +import '@vaadin/details/src/vaadin-details.js'; +import 'Frontend/generated/jar-resources/messageListConnector.js'; +import '@vaadin/message-list/src/vaadin-message-list.js'; +import '@vaadin/grid/src/vaadin-grid.js'; +import '@vaadin/grid/src/vaadin-grid-column.js'; +import '@vaadin/grid/src/vaadin-grid-sorter.js'; +import 'Frontend/generated/jar-resources/gridConnector.ts'; +import '@vaadin/component-base/src/debounce.js'; +import '@vaadin/component-base/src/async.js'; +import '@vaadin/grid/src/vaadin-grid-active-item-mixin.js'; +import 'Frontend/generated/jar-resources/vaadin-grid-flow-selection-column.js'; +import '@vaadin/grid/src/vaadin-grid-column-group.js'; +import 'Frontend/generated/jar-resources/lit-renderer.ts'; +import 'lit/directives/live.js'; +import '@vaadin/text-field/src/vaadin-text-field.js'; +import '@vaadin/form-layout/src/vaadin-form-layout.js'; +import '@vaadin/form-layout/src/vaadin-form-item.js'; +import '@vaadin/form-layout/src/vaadin-form-row.js'; +import '@vaadin/list-box/src/vaadin-list-box.js'; +import '@vaadin/item/src/vaadin-item.js'; +import '@vaadin/integer-field/src/vaadin-integer-field.js'; +import '@vaadin/combo-box/src/vaadin-combo-box.js'; +import 'Frontend/generated/jar-resources/comboBoxConnector.js'; +import '@vaadin/combo-box/src/vaadin-combo-box-placeholder.js'; +import '@vaadin/multi-select-combo-box/src/vaadin-multi-select-combo-box.js'; +import '@vaadin/custom-field/src/vaadin-custom-field.js'; +import '@vaadin/select/src/vaadin-select.js'; +import 'Frontend/generated/jar-resources/selectConnector.js'; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-36157cc9f15f59ffacee94022392ef651f5128827a02941ad7397c3097927cf6.js b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-36157cc9f15f59ffacee94022392ef651f5128827a02941ad7397c3097927cf6.js new file mode 100644 index 0000000..f5c7fcd --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-36157cc9f15f59ffacee94022392ef651f5128827a02941ad7397c3097927cf6.js @@ -0,0 +1,49 @@ +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/app-layout/src/vaadin-app-layout.js'; +import '@vaadin/scroller/src/vaadin-scroller.js'; +import '@vaadin/side-nav/src/vaadin-side-nav.js'; +import '@vaadin/side-nav/src/vaadin-side-nav-item.js'; +import '@vaadin/tooltip/src/vaadin-tooltip.js'; +import '@vaadin/app-layout/src/vaadin-drawer-toggle.js'; +import '@vaadin/button/src/vaadin-button.js'; +import 'Frontend/generated/jar-resources/disableOnClickFunctions.js'; +import '@vaadin/horizontal-layout/src/vaadin-horizontal-layout.js'; +import '@vaadin/icons/vaadin-iconset.js'; +import '@vaadin/icon/src/vaadin-icon.js'; +import '@vaadin/upload/src/vaadin-upload.js'; +import 'Frontend/generated/jar-resources/vaadin-upload-manager-connector.ts'; +import '@vaadin/upload/vaadin-upload-manager.js'; +import '@vaadin/notification/src/vaadin-notification.js'; +import 'Frontend/generated/jar-resources/flow-component-renderer.js'; +import 'Frontend/generated/jar-resources/flow-component-directive.js'; +import 'lit'; +import '@vaadin/checkbox/src/vaadin-checkbox.js'; +import 'Frontend/generated/jar-resources/menubarConnector.js'; +import 'Frontend/generated/jar-resources/contextMenuConnector.js'; +import '@vaadin/menu-bar/src/vaadin-menu-bar.js'; +import '@vaadin/context-menu/src/vaadin-context-menu.js'; +import 'Frontend/generated/jar-resources/contextMenuTargetConnector.js'; +import '@vaadin/component-base/src/gestures.js'; +import '@vaadin/accordion/src/vaadin-accordion.js'; +import '@vaadin/accordion/src/vaadin-accordion-panel.js'; +import '@vaadin/details/src/vaadin-details.js'; +import 'Frontend/generated/jar-resources/messageListConnector.js'; +import '@vaadin/message-list/src/vaadin-message-list.js'; +import '@vaadin/grid/src/vaadin-grid.js'; +import '@vaadin/grid/src/vaadin-grid-column.js'; +import '@vaadin/grid/src/vaadin-grid-sorter.js'; +import 'Frontend/generated/jar-resources/gridConnector.ts'; +import '@vaadin/component-base/src/debounce.js'; +import '@vaadin/component-base/src/async.js'; +import '@vaadin/grid/src/vaadin-grid-active-item-mixin.js'; +import 'Frontend/generated/jar-resources/vaadin-grid-flow-selection-column.js'; +import '@vaadin/grid/src/vaadin-grid-column-group.js'; +import 'Frontend/generated/jar-resources/lit-renderer.ts'; +import 'lit/directives/live.js'; +import '@vaadin/text-field/src/vaadin-text-field.js'; +import '@vaadin/form-layout/src/vaadin-form-layout.js'; +import '@vaadin/form-layout/src/vaadin-form-item.js'; +import '@vaadin/form-layout/src/vaadin-form-row.js'; +import '@vaadin/password-field/src/vaadin-password-field.js'; +import '@vaadin/email-field/src/vaadin-email-field.js'; +import '@vaadin/checkbox-group/src/vaadin-checkbox-group.js'; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-4a1b53ad267588ce5a6c622e0efdd0adeec2e922b2e51061d1fb0d63ad8f7363.js b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-4a1b53ad267588ce5a6c622e0efdd0adeec2e922b2e51061d1fb0d63ad8f7363.js new file mode 100644 index 0000000..36300e7 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-4a1b53ad267588ce5a6c622e0efdd0adeec2e922b2e51061d1fb0d63ad8f7363.js @@ -0,0 +1,46 @@ +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/app-layout/src/vaadin-app-layout.js'; +import '@vaadin/scroller/src/vaadin-scroller.js'; +import '@vaadin/side-nav/src/vaadin-side-nav.js'; +import '@vaadin/side-nav/src/vaadin-side-nav-item.js'; +import '@vaadin/tooltip/src/vaadin-tooltip.js'; +import '@vaadin/app-layout/src/vaadin-drawer-toggle.js'; +import '@vaadin/button/src/vaadin-button.js'; +import 'Frontend/generated/jar-resources/disableOnClickFunctions.js'; +import '@vaadin/horizontal-layout/src/vaadin-horizontal-layout.js'; +import '@vaadin/icons/vaadin-iconset.js'; +import '@vaadin/icon/src/vaadin-icon.js'; +import '@vaadin/upload/src/vaadin-upload.js'; +import 'Frontend/generated/jar-resources/vaadin-upload-manager-connector.ts'; +import '@vaadin/upload/vaadin-upload-manager.js'; +import '@vaadin/notification/src/vaadin-notification.js'; +import 'Frontend/generated/jar-resources/flow-component-renderer.js'; +import 'Frontend/generated/jar-resources/flow-component-directive.js'; +import 'lit'; +import '@vaadin/checkbox/src/vaadin-checkbox.js'; +import 'Frontend/generated/jar-resources/menubarConnector.js'; +import 'Frontend/generated/jar-resources/contextMenuConnector.js'; +import '@vaadin/menu-bar/src/vaadin-menu-bar.js'; +import '@vaadin/context-menu/src/vaadin-context-menu.js'; +import 'Frontend/generated/jar-resources/contextMenuTargetConnector.js'; +import '@vaadin/component-base/src/gestures.js'; +import '@vaadin/accordion/src/vaadin-accordion.js'; +import '@vaadin/accordion/src/vaadin-accordion-panel.js'; +import '@vaadin/details/src/vaadin-details.js'; +import 'Frontend/generated/jar-resources/messageListConnector.js'; +import '@vaadin/message-list/src/vaadin-message-list.js'; +import '@vaadin/grid/src/vaadin-grid.js'; +import '@vaadin/grid/src/vaadin-grid-column.js'; +import '@vaadin/grid/src/vaadin-grid-sorter.js'; +import 'Frontend/generated/jar-resources/gridConnector.ts'; +import '@vaadin/component-base/src/debounce.js'; +import '@vaadin/component-base/src/async.js'; +import '@vaadin/grid/src/vaadin-grid-active-item-mixin.js'; +import 'Frontend/generated/jar-resources/vaadin-grid-flow-selection-column.js'; +import '@vaadin/grid/src/vaadin-grid-column-group.js'; +import 'Frontend/generated/jar-resources/lit-renderer.ts'; +import 'lit/directives/live.js'; +import '@vaadin/text-field/src/vaadin-text-field.js'; +import '@vaadin/form-layout/src/vaadin-form-layout.js'; +import '@vaadin/form-layout/src/vaadin-form-item.js'; +import '@vaadin/form-layout/src/vaadin-form-row.js'; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-5584551b9200a1d2b592bd96c14b3cacc38f4ef0c1fe22978154b3bbc6061f05.js b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-5584551b9200a1d2b592bd96c14b3cacc38f4ef0c1fe22978154b3bbc6061f05.js new file mode 100644 index 0000000..634bf09 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-5584551b9200a1d2b592bd96c14b3cacc38f4ef0c1fe22978154b3bbc6061f05.js @@ -0,0 +1,51 @@ +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/app-layout/src/vaadin-app-layout.js'; +import '@vaadin/scroller/src/vaadin-scroller.js'; +import '@vaadin/side-nav/src/vaadin-side-nav.js'; +import '@vaadin/side-nav/src/vaadin-side-nav-item.js'; +import '@vaadin/tooltip/src/vaadin-tooltip.js'; +import '@vaadin/app-layout/src/vaadin-drawer-toggle.js'; +import '@vaadin/button/src/vaadin-button.js'; +import 'Frontend/generated/jar-resources/disableOnClickFunctions.js'; +import '@vaadin/avatar/src/vaadin-avatar.js'; +import 'Frontend/generated/jar-resources/menubarConnector.js'; +import 'Frontend/generated/jar-resources/contextMenuConnector.js'; +import '@vaadin/menu-bar/src/vaadin-menu-bar.js'; +import '@vaadin/context-menu/src/vaadin-context-menu.js'; +import 'Frontend/generated/jar-resources/flow-component-renderer.js'; +import 'Frontend/generated/jar-resources/flow-component-directive.js'; +import 'lit'; +import 'Frontend/generated/jar-resources/contextMenuTargetConnector.js'; +import '@vaadin/component-base/src/gestures.js'; +import '@vaadin/horizontal-layout/src/vaadin-horizontal-layout.js'; +import '@vaadin/icons/vaadin-iconset.js'; +import '@vaadin/icon/src/vaadin-icon.js'; +import '@vaadin/upload/src/vaadin-upload.js'; +import 'Frontend/generated/jar-resources/vaadin-upload-manager-connector.ts'; +import '@vaadin/upload/vaadin-upload-manager.js'; +import '@vaadin/notification/src/vaadin-notification.js'; +import '@vaadin/checkbox/src/vaadin-checkbox.js'; +import '@vaadin/accordion/src/vaadin-accordion.js'; +import '@vaadin/accordion/src/vaadin-accordion-panel.js'; +import '@vaadin/details/src/vaadin-details.js'; +import 'Frontend/generated/jar-resources/messageListConnector.js'; +import '@vaadin/message-list/src/vaadin-message-list.js'; +import '@vaadin/text-field/src/vaadin-text-field.js'; +import '@vaadin/grid/src/vaadin-grid.js'; +import '@vaadin/grid/src/vaadin-grid-column.js'; +import '@vaadin/grid/src/vaadin-grid-sorter.js'; +import 'Frontend/generated/jar-resources/gridConnector.ts'; +import '@vaadin/component-base/src/debounce.js'; +import '@vaadin/component-base/src/async.js'; +import '@vaadin/grid/src/vaadin-grid-active-item-mixin.js'; +import 'Frontend/generated/jar-resources/vaadin-grid-flow-selection-column.js'; +import '@vaadin/grid/src/vaadin-grid-column-group.js'; +import 'Frontend/generated/jar-resources/lit-renderer.ts'; +import 'lit/directives/live.js'; +import '@vaadin/custom-field/src/vaadin-custom-field.js'; +import '@vaadin/multi-select-combo-box/src/vaadin-multi-select-combo-box.js'; +import 'Frontend/generated/jar-resources/comboBoxConnector.js'; +import '@vaadin/combo-box/src/vaadin-combo-box-placeholder.js'; +import '@vaadin/form-layout/src/vaadin-form-layout.js'; +import '@vaadin/form-layout/src/vaadin-form-item.js'; +import '@vaadin/form-layout/src/vaadin-form-row.js'; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-6456be19764fead9274c211db67c1fed3129c53422a2de0c4ebc6ea374a4ec5c.js b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-6456be19764fead9274c211db67c1fed3129c53422a2de0c4ebc6ea374a4ec5c.js new file mode 100644 index 0000000..d4faa89 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-6456be19764fead9274c211db67c1fed3129c53422a2de0c4ebc6ea374a4ec5c.js @@ -0,0 +1,48 @@ +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/app-layout/src/vaadin-app-layout.js'; +import '@vaadin/scroller/src/vaadin-scroller.js'; +import '@vaadin/side-nav/src/vaadin-side-nav.js'; +import '@vaadin/side-nav/src/vaadin-side-nav-item.js'; +import '@vaadin/tooltip/src/vaadin-tooltip.js'; +import '@vaadin/app-layout/src/vaadin-drawer-toggle.js'; +import '@vaadin/button/src/vaadin-button.js'; +import 'Frontend/generated/jar-resources/disableOnClickFunctions.js'; +import '@vaadin/horizontal-layout/src/vaadin-horizontal-layout.js'; +import '@vaadin/icons/vaadin-iconset.js'; +import '@vaadin/icon/src/vaadin-icon.js'; +import '@vaadin/upload/src/vaadin-upload.js'; +import 'Frontend/generated/jar-resources/vaadin-upload-manager-connector.ts'; +import '@vaadin/upload/vaadin-upload-manager.js'; +import '@vaadin/notification/src/vaadin-notification.js'; +import 'Frontend/generated/jar-resources/flow-component-renderer.js'; +import 'Frontend/generated/jar-resources/flow-component-directive.js'; +import 'lit'; +import '@vaadin/checkbox/src/vaadin-checkbox.js'; +import 'Frontend/generated/jar-resources/menubarConnector.js'; +import 'Frontend/generated/jar-resources/contextMenuConnector.js'; +import '@vaadin/menu-bar/src/vaadin-menu-bar.js'; +import '@vaadin/context-menu/src/vaadin-context-menu.js'; +import 'Frontend/generated/jar-resources/contextMenuTargetConnector.js'; +import '@vaadin/component-base/src/gestures.js'; +import '@vaadin/accordion/src/vaadin-accordion.js'; +import '@vaadin/accordion/src/vaadin-accordion-panel.js'; +import '@vaadin/details/src/vaadin-details.js'; +import 'Frontend/generated/jar-resources/messageListConnector.js'; +import '@vaadin/message-list/src/vaadin-message-list.js'; +import '@vaadin/grid/src/vaadin-grid.js'; +import '@vaadin/grid/src/vaadin-grid-column.js'; +import '@vaadin/grid/src/vaadin-grid-sorter.js'; +import 'Frontend/generated/jar-resources/gridConnector.ts'; +import '@vaadin/component-base/src/debounce.js'; +import '@vaadin/component-base/src/async.js'; +import '@vaadin/grid/src/vaadin-grid-active-item-mixin.js'; +import 'Frontend/generated/jar-resources/vaadin-grid-flow-selection-column.js'; +import '@vaadin/grid/src/vaadin-grid-column-group.js'; +import 'Frontend/generated/jar-resources/lit-renderer.ts'; +import 'lit/directives/live.js'; +import '@vaadin/text-field/src/vaadin-text-field.js'; +import '@vaadin/form-layout/src/vaadin-form-layout.js'; +import '@vaadin/form-layout/src/vaadin-form-item.js'; +import '@vaadin/form-layout/src/vaadin-form-row.js'; +import '@vaadin/list-box/src/vaadin-list-box.js'; +import '@vaadin/item/src/vaadin-item.js'; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-918bb383890df4641c1ca33b36e3fdba718a1ce1f4335789bcf9ca5a32123d48.js b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-918bb383890df4641c1ca33b36e3fdba718a1ce1f4335789bcf9ca5a32123d48.js new file mode 100644 index 0000000..39008a2 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-918bb383890df4641c1ca33b36e3fdba718a1ce1f4335789bcf9ca5a32123d48.js @@ -0,0 +1,52 @@ +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/app-layout/src/vaadin-app-layout.js'; +import '@vaadin/scroller/src/vaadin-scroller.js'; +import '@vaadin/side-nav/src/vaadin-side-nav.js'; +import '@vaadin/side-nav/src/vaadin-side-nav-item.js'; +import '@vaadin/tooltip/src/vaadin-tooltip.js'; +import '@vaadin/app-layout/src/vaadin-drawer-toggle.js'; +import '@vaadin/button/src/vaadin-button.js'; +import 'Frontend/generated/jar-resources/disableOnClickFunctions.js'; +import '@vaadin/avatar/src/vaadin-avatar.js'; +import 'Frontend/generated/jar-resources/menubarConnector.js'; +import 'Frontend/generated/jar-resources/contextMenuConnector.js'; +import '@vaadin/menu-bar/src/vaadin-menu-bar.js'; +import '@vaadin/context-menu/src/vaadin-context-menu.js'; +import 'Frontend/generated/jar-resources/flow-component-renderer.js'; +import 'Frontend/generated/jar-resources/flow-component-directive.js'; +import 'lit'; +import 'Frontend/generated/jar-resources/contextMenuTargetConnector.js'; +import '@vaadin/component-base/src/gestures.js'; +import '@vaadin/horizontal-layout/src/vaadin-horizontal-layout.js'; +import '@vaadin/icons/vaadin-iconset.js'; +import '@vaadin/icon/src/vaadin-icon.js'; +import '@vaadin/upload/src/vaadin-upload.js'; +import 'Frontend/generated/jar-resources/vaadin-upload-manager-connector.ts'; +import '@vaadin/upload/vaadin-upload-manager.js'; +import '@vaadin/notification/src/vaadin-notification.js'; +import '@vaadin/checkbox/src/vaadin-checkbox.js'; +import '@vaadin/accordion/src/vaadin-accordion.js'; +import '@vaadin/accordion/src/vaadin-accordion-panel.js'; +import '@vaadin/details/src/vaadin-details.js'; +import 'Frontend/generated/jar-resources/messageListConnector.js'; +import '@vaadin/message-list/src/vaadin-message-list.js'; +import '@vaadin/text-field/src/vaadin-text-field.js'; +import '@vaadin/grid/src/vaadin-grid.js'; +import '@vaadin/grid/src/vaadin-grid-column.js'; +import '@vaadin/grid/src/vaadin-grid-sorter.js'; +import 'Frontend/generated/jar-resources/gridConnector.ts'; +import '@vaadin/component-base/src/debounce.js'; +import '@vaadin/component-base/src/async.js'; +import '@vaadin/grid/src/vaadin-grid-active-item-mixin.js'; +import 'Frontend/generated/jar-resources/vaadin-grid-flow-selection-column.js'; +import '@vaadin/grid/src/vaadin-grid-column-group.js'; +import 'Frontend/generated/jar-resources/lit-renderer.ts'; +import 'lit/directives/live.js'; +import '@vaadin/form-layout/src/vaadin-form-layout.js'; +import '@vaadin/form-layout/src/vaadin-form-item.js'; +import '@vaadin/form-layout/src/vaadin-form-row.js'; +import '@vaadin/integer-field/src/vaadin-integer-field.js'; +import '@vaadin/combo-box/src/vaadin-combo-box.js'; +import 'Frontend/generated/jar-resources/comboBoxConnector.js'; +import '@vaadin/combo-box/src/vaadin-combo-box-placeholder.js'; +import '@vaadin/multi-select-combo-box/src/vaadin-multi-select-combo-box.js'; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js new file mode 100644 index 0000000..d7d854e --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js @@ -0,0 +1,47 @@ +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/app-layout/src/vaadin-app-layout.js'; +import '@vaadin/scroller/src/vaadin-scroller.js'; +import '@vaadin/side-nav/src/vaadin-side-nav.js'; +import '@vaadin/side-nav/src/vaadin-side-nav-item.js'; +import '@vaadin/tooltip/src/vaadin-tooltip.js'; +import '@vaadin/app-layout/src/vaadin-drawer-toggle.js'; +import '@vaadin/button/src/vaadin-button.js'; +import 'Frontend/generated/jar-resources/disableOnClickFunctions.js'; +import '@vaadin/avatar/src/vaadin-avatar.js'; +import 'Frontend/generated/jar-resources/menubarConnector.js'; +import 'Frontend/generated/jar-resources/contextMenuConnector.js'; +import '@vaadin/menu-bar/src/vaadin-menu-bar.js'; +import '@vaadin/context-menu/src/vaadin-context-menu.js'; +import 'Frontend/generated/jar-resources/flow-component-renderer.js'; +import 'Frontend/generated/jar-resources/flow-component-directive.js'; +import 'lit'; +import 'Frontend/generated/jar-resources/contextMenuTargetConnector.js'; +import '@vaadin/component-base/src/gestures.js'; +import '@vaadin/horizontal-layout/src/vaadin-horizontal-layout.js'; +import '@vaadin/icons/vaadin-iconset.js'; +import '@vaadin/icon/src/vaadin-icon.js'; +import '@vaadin/upload/src/vaadin-upload.js'; +import 'Frontend/generated/jar-resources/vaadin-upload-manager-connector.ts'; +import '@vaadin/upload/vaadin-upload-manager.js'; +import '@vaadin/notification/src/vaadin-notification.js'; +import '@vaadin/checkbox/src/vaadin-checkbox.js'; +import '@vaadin/accordion/src/vaadin-accordion.js'; +import '@vaadin/accordion/src/vaadin-accordion-panel.js'; +import '@vaadin/details/src/vaadin-details.js'; +import 'Frontend/generated/jar-resources/messageListConnector.js'; +import '@vaadin/message-list/src/vaadin-message-list.js'; +import '@vaadin/text-field/src/vaadin-text-field.js'; +import '@vaadin/grid/src/vaadin-grid.js'; +import '@vaadin/grid/src/vaadin-grid-column.js'; +import '@vaadin/grid/src/vaadin-grid-sorter.js'; +import 'Frontend/generated/jar-resources/gridConnector.ts'; +import '@vaadin/component-base/src/debounce.js'; +import '@vaadin/component-base/src/async.js'; +import '@vaadin/grid/src/vaadin-grid-active-item-mixin.js'; +import 'Frontend/generated/jar-resources/vaadin-grid-flow-selection-column.js'; +import '@vaadin/grid/src/vaadin-grid-column-group.js'; +import 'Frontend/generated/jar-resources/lit-renderer.ts'; +import 'lit/directives/live.js'; +import '@vaadin/form-layout/src/vaadin-form-layout.js'; +import '@vaadin/form-layout/src/vaadin-form-item.js'; +import '@vaadin/form-layout/src/vaadin-form-row.js'; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-b0eb0de7326631053d249cbbdaed9122656362ee32dec3dd21fc23f7db177400.js b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-b0eb0de7326631053d249cbbdaed9122656362ee32dec3dd21fc23f7db177400.js new file mode 100644 index 0000000..0ad8685 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-b0eb0de7326631053d249cbbdaed9122656362ee32dec3dd21fc23f7db177400.js @@ -0,0 +1,20 @@ +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/app-layout/src/vaadin-app-layout.js'; +import '@vaadin/scroller/src/vaadin-scroller.js'; +import '@vaadin/side-nav/src/vaadin-side-nav.js'; +import '@vaadin/side-nav/src/vaadin-side-nav-item.js'; +import '@vaadin/tooltip/src/vaadin-tooltip.js'; +import '@vaadin/app-layout/src/vaadin-drawer-toggle.js'; +import '@vaadin/button/src/vaadin-button.js'; +import 'Frontend/generated/jar-resources/disableOnClickFunctions.js'; +import '@vaadin/horizontal-layout/src/vaadin-horizontal-layout.js'; +import '@vaadin/icons/vaadin-iconset.js'; +import '@vaadin/icon/src/vaadin-icon.js'; +import '@vaadin/upload/src/vaadin-upload.js'; +import 'Frontend/generated/jar-resources/vaadin-upload-manager-connector.ts'; +import '@vaadin/upload/vaadin-upload-manager.js'; +import '@vaadin/notification/src/vaadin-notification.js'; +import 'Frontend/generated/jar-resources/flow-component-renderer.js'; +import 'Frontend/generated/jar-resources/flow-component-directive.js'; +import 'lit'; +import '@vaadin/checkbox/src/vaadin-checkbox.js'; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-b3e84351087a7066a5317979e35ce71f4f249b80a6f66b5f0c9b0c0790866b93.js b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-b3e84351087a7066a5317979e35ce71f4f249b80a6f66b5f0c9b0c0790866b93.js new file mode 100644 index 0000000..9061a3c --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-b3e84351087a7066a5317979e35ce71f4f249b80a6f66b5f0c9b0c0790866b93.js @@ -0,0 +1,33 @@ +import '@vaadin/avatar/src/vaadin-avatar.js'; +import 'Frontend/generated/jar-resources/menubarConnector.js'; +import 'Frontend/generated/jar-resources/contextMenuConnector.js'; +import '@vaadin/menu-bar/src/vaadin-menu-bar.js'; +import '@vaadin/tooltip/src/vaadin-tooltip.js'; +import '@vaadin/context-menu/src/vaadin-context-menu.js'; +import 'Frontend/generated/jar-resources/flow-component-renderer.js'; +import 'Frontend/generated/jar-resources/flow-component-directive.js'; +import 'lit'; +import 'Frontend/generated/jar-resources/contextMenuTargetConnector.js'; +import '@vaadin/component-base/src/gestures.js'; +import 'Frontend/generated/jar-resources/disableOnClickFunctions.js'; +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/app-layout/src/vaadin-app-layout.js'; +import '@vaadin/scroller/src/vaadin-scroller.js'; +import '@vaadin/side-nav/src/vaadin-side-nav.js'; +import '@vaadin/side-nav/src/vaadin-side-nav-item.js'; +import '@vaadin/app-layout/src/vaadin-drawer-toggle.js'; +import '@vaadin/button/src/vaadin-button.js'; +import '@vaadin/horizontal-layout/src/vaadin-horizontal-layout.js'; +import '@vaadin/icons/vaadin-iconset.js'; +import '@vaadin/icon/src/vaadin-icon.js'; +import '@vaadin/upload/src/vaadin-upload.js'; +import 'Frontend/generated/jar-resources/vaadin-upload-manager-connector.ts'; +import '@vaadin/upload/vaadin-upload-manager.js'; +import '@vaadin/notification/src/vaadin-notification.js'; +import '@vaadin/checkbox/src/vaadin-checkbox.js'; +import '@vaadin/accordion/src/vaadin-accordion.js'; +import '@vaadin/accordion/src/vaadin-accordion-panel.js'; +import '@vaadin/details/src/vaadin-details.js'; +import 'Frontend/generated/jar-resources/messageListConnector.js'; +import '@vaadin/message-list/src/vaadin-message-list.js'; +import '@vaadin/text-field/src/vaadin-text-field.js'; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-b5a3b3b8d39c03fe35c3dda50e5bd1ec25755f18091bcaffc331ab0fd020c6fd.js b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-b5a3b3b8d39c03fe35c3dda50e5bd1ec25755f18091bcaffc331ab0fd020c6fd.js new file mode 100644 index 0000000..1ac742e --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-b5a3b3b8d39c03fe35c3dda50e5bd1ec25755f18091bcaffc331ab0fd020c6fd.js @@ -0,0 +1,32 @@ +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/app-layout/src/vaadin-app-layout.js'; +import '@vaadin/scroller/src/vaadin-scroller.js'; +import '@vaadin/side-nav/src/vaadin-side-nav.js'; +import '@vaadin/side-nav/src/vaadin-side-nav-item.js'; +import '@vaadin/tooltip/src/vaadin-tooltip.js'; +import '@vaadin/app-layout/src/vaadin-drawer-toggle.js'; +import '@vaadin/button/src/vaadin-button.js'; +import 'Frontend/generated/jar-resources/disableOnClickFunctions.js'; +import '@vaadin/horizontal-layout/src/vaadin-horizontal-layout.js'; +import '@vaadin/icons/vaadin-iconset.js'; +import '@vaadin/icon/src/vaadin-icon.js'; +import '@vaadin/upload/src/vaadin-upload.js'; +import 'Frontend/generated/jar-resources/vaadin-upload-manager-connector.ts'; +import '@vaadin/upload/vaadin-upload-manager.js'; +import '@vaadin/notification/src/vaadin-notification.js'; +import 'Frontend/generated/jar-resources/flow-component-renderer.js'; +import 'Frontend/generated/jar-resources/flow-component-directive.js'; +import 'lit'; +import '@vaadin/checkbox/src/vaadin-checkbox.js'; +import 'Frontend/generated/jar-resources/menubarConnector.js'; +import 'Frontend/generated/jar-resources/contextMenuConnector.js'; +import '@vaadin/menu-bar/src/vaadin-menu-bar.js'; +import '@vaadin/context-menu/src/vaadin-context-menu.js'; +import 'Frontend/generated/jar-resources/contextMenuTargetConnector.js'; +import '@vaadin/component-base/src/gestures.js'; +import '@vaadin/accordion/src/vaadin-accordion.js'; +import '@vaadin/accordion/src/vaadin-accordion-panel.js'; +import '@vaadin/details/src/vaadin-details.js'; +import 'Frontend/generated/jar-resources/messageListConnector.js'; +import '@vaadin/message-list/src/vaadin-message-list.js'; +import '@vaadin/text-field/src/vaadin-text-field.js'; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-fc7662d8a7810d7f14f9f989942d4df1753b8cef76009c17999d2ca394bbd8ca.js b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-fc7662d8a7810d7f14f9f989942d4df1753b8cef76009c17999d2ca394bbd8ca.js new file mode 100644 index 0000000..4da0894 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/chunks/chunk-fc7662d8a7810d7f14f9f989942d4df1753b8cef76009c17999d2ca394bbd8ca.js @@ -0,0 +1,54 @@ +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/app-layout/src/vaadin-app-layout.js'; +import '@vaadin/scroller/src/vaadin-scroller.js'; +import '@vaadin/side-nav/src/vaadin-side-nav.js'; +import '@vaadin/side-nav/src/vaadin-side-nav-item.js'; +import '@vaadin/tooltip/src/vaadin-tooltip.js'; +import '@vaadin/app-layout/src/vaadin-drawer-toggle.js'; +import '@vaadin/button/src/vaadin-button.js'; +import 'Frontend/generated/jar-resources/disableOnClickFunctions.js'; +import '@vaadin/horizontal-layout/src/vaadin-horizontal-layout.js'; +import '@vaadin/icons/vaadin-iconset.js'; +import '@vaadin/icon/src/vaadin-icon.js'; +import '@vaadin/upload/src/vaadin-upload.js'; +import 'Frontend/generated/jar-resources/vaadin-upload-manager-connector.ts'; +import '@vaadin/upload/vaadin-upload-manager.js'; +import '@vaadin/notification/src/vaadin-notification.js'; +import 'Frontend/generated/jar-resources/flow-component-renderer.js'; +import 'Frontend/generated/jar-resources/flow-component-directive.js'; +import 'lit'; +import '@vaadin/checkbox/src/vaadin-checkbox.js'; +import 'Frontend/generated/jar-resources/menubarConnector.js'; +import 'Frontend/generated/jar-resources/contextMenuConnector.js'; +import '@vaadin/menu-bar/src/vaadin-menu-bar.js'; +import '@vaadin/context-menu/src/vaadin-context-menu.js'; +import 'Frontend/generated/jar-resources/contextMenuTargetConnector.js'; +import '@vaadin/component-base/src/gestures.js'; +import '@vaadin/accordion/src/vaadin-accordion.js'; +import '@vaadin/accordion/src/vaadin-accordion-panel.js'; +import '@vaadin/details/src/vaadin-details.js'; +import 'Frontend/generated/jar-resources/messageListConnector.js'; +import '@vaadin/message-list/src/vaadin-message-list.js'; +import '@vaadin/grid/src/vaadin-grid.js'; +import '@vaadin/grid/src/vaadin-grid-column.js'; +import '@vaadin/grid/src/vaadin-grid-sorter.js'; +import 'Frontend/generated/jar-resources/gridConnector.ts'; +import '@vaadin/component-base/src/debounce.js'; +import '@vaadin/component-base/src/async.js'; +import '@vaadin/grid/src/vaadin-grid-active-item-mixin.js'; +import 'Frontend/generated/jar-resources/vaadin-grid-flow-selection-column.js'; +import '@vaadin/grid/src/vaadin-grid-column-group.js'; +import 'Frontend/generated/jar-resources/lit-renderer.ts'; +import 'lit/directives/live.js'; +import '@vaadin/text-field/src/vaadin-text-field.js'; +import '@vaadin/form-layout/src/vaadin-form-layout.js'; +import '@vaadin/form-layout/src/vaadin-form-item.js'; +import '@vaadin/form-layout/src/vaadin-form-row.js'; +import '@vaadin/list-box/src/vaadin-list-box.js'; +import '@vaadin/item/src/vaadin-item.js'; +import '@vaadin/integer-field/src/vaadin-integer-field.js'; +import '@vaadin/combo-box/src/vaadin-combo-box.js'; +import 'Frontend/generated/jar-resources/comboBoxConnector.js'; +import '@vaadin/combo-box/src/vaadin-combo-box-placeholder.js'; +import '@vaadin/multi-select-combo-box/src/vaadin-multi-select-combo-box.js'; +import '@vaadin/custom-field/src/vaadin-custom-field.js'; \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/generated-flow-imports.d.ts b/kontor-spring/src/main/frontend/generated/flow/generated-flow-imports.d.ts new file mode 100644 index 0000000..693da49 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/generated-flow-imports.d.ts @@ -0,0 +1 @@ +export {} \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/generated-flow-imports.js b/kontor-spring/src/main/frontend/generated/flow/generated-flow-imports.js new file mode 100644 index 0000000..f37254b --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/generated-flow-imports.js @@ -0,0 +1,128 @@ +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/login/src/vaadin-login-form.js'; +import '@vaadin/common-frontend/ConnectionIndicator.js'; +import 'Frontend/generated/jar-resources/ReactRouterOutletElement.tsx'; +import 'react-router'; +import 'react'; + +const loadOnDemand = (key) => { + const pending = []; + if (key === '81bbe2e11b6af26d0d292e2e18bde37546d5b9ec24f4f4f78df2bc9f9c21f431') { + pending.push(import('./chunks/chunk-4a1b53ad267588ce5a6c622e0efdd0adeec2e922b2e51061d1fb0d63ad8f7363.js')); + } + if (key === '8904207b9d538b9eedfaaefd8e82d3415de8513bda9d6bb76f4012f0f336d200') { + pending.push(import('./chunks/chunk-050179d38edf3560e7fc3d0177787bb20c55630f7c4b372ebad09b42b287a5dd.js')); + } + if (key === '96ecac798fbbe91ef146ac4a25f5c31827427ca0f106ba66e63fc1fd6c27b83d') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === 'c0816c2bfaa97d6f3e7eea83c5478186457bdc79cfe3f284c42e192d68607157') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === '58cc18f5518623050c6a99d327dd540140b9b0dca851a76a70e688291f661e11') { + pending.push(import('./chunks/chunk-b3e84351087a7066a5317979e35ce71f4f249b80a6f66b5f0c9b0c0790866b93.js')); + } + if (key === '83045a9760ea76fd534ed71ed553dc7cf2595a5d697e3c7bc55470d219770d05') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === 'e9df10b3be58513bb6452e4dbdce31e0b1dc33868fbba54ee72e82089cf39adf') { + pending.push(import('./chunks/chunk-050179d38edf3560e7fc3d0177787bb20c55630f7c4b372ebad09b42b287a5dd.js')); + } + if (key === '39b4a07b2b07a780f8ac9d2f7cc855e3b78ec60465d9d808690466c1f0bea792') { + pending.push(import('./chunks/chunk-b0eb0de7326631053d249cbbdaed9122656362ee32dec3dd21fc23f7db177400.js')); + } + if (key === '803ed44611ffeb1bcb1f604f267f09af48ef8a5bc8d765e481b67ed59f9b880a') { + pending.push(import('./chunks/chunk-36157cc9f15f59ffacee94022392ef651f5128827a02941ad7397c3097927cf6.js')); + } + if (key === '9f40817b690e11a5b23a3159bb774f15430c23768f26dc0d15efccc3d65223ac') { + pending.push(import('./chunks/chunk-17458473c5b0c327e5fdfb8de65e9c031656ad433885b259b9e37650bcf5111d.js')); + } + if (key === '391ac9fb4bd95bc899c5911c48a6f3b549b118923653444f5ab50acddfb6f291') { + pending.push(import('./chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js')); + } + if (key === '1ac8bd8d734d2603947b1db0616ea4dae4ce691a5264f5c9aeafcaa897e0a872') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === 'e5db1fd1f39047ab2857e9ef118681c3f831f39efbbb2a6f000e9475b77444e5') { + pending.push(import('./chunks/chunk-b3e84351087a7066a5317979e35ce71f4f249b80a6f66b5f0c9b0c0790866b93.js')); + } + if (key === '92a567041312ea4c7faa4dd5bcc74f73cd3b16dd721624d0bc68d1704138abe5') { + pending.push(import('./chunks/chunk-6456be19764fead9274c211db67c1fed3129c53422a2de0c4ebc6ea374a4ec5c.js')); + } + if (key === 'bfac19b5aab9cd5a47ff4a66f2a839ebbb4889867824be809c5dc3a3d47f94b8') { + pending.push(import('./chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js')); + } + if (key === 'a886fd99e05dd2c5ce3e4b643dc8d6d29189dee784fa78678d8ab4fcb89216c0') { + pending.push(import('./chunks/chunk-09a91b9550ef322666194480aeb843ea6225d32c6cf3cdd6c06d9751b9b982c4.js')); + } + if (key === 'becc589ccd4f7ac5e6f13c45eecc05f61d67ce57f585f1655800354ff4b55f3c') { + pending.push(import('./chunks/chunk-17458473c5b0c327e5fdfb8de65e9c031656ad433885b259b9e37650bcf5111d.js')); + } + if (key === '0ca48a0e12f1dbf4945f761a93a7df202b2908327a63c52f2f060559c2bcc7f0') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === '2140ca6af7e9a5ff94d8a66b6e5a23e6d184ef7901ca73d33b3c30f74f94708a') { + pending.push(import('./chunks/chunk-b5a3b3b8d39c03fe35c3dda50e5bd1ec25755f18091bcaffc331ab0fd020c6fd.js')); + } + if (key === '89c2914ed5d19860240c0c1d3dba174616dc452c4ba8ae039f016cf9592e9432') { + pending.push(import('./chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js')); + } + if (key === 'ffd87f879398d3b6942e852eda9b64e28a124c8a61938c867efb360a5cf1d32e') { + pending.push(import('./chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js')); + } + if (key === 'c5f987a4896c791d13aeb6a03a4783ff03df304750a7db930a18d399dba31509') { + pending.push(import('./chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js')); + } + if (key === '3665d7598c9ed4112997a0493fb890edf38d23d3bd9fcb0eb09bf3e045f5228b') { + pending.push(import('./chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js')); + } + if (key === '4e76ad4411fbf58731cdad95d28e6fe0057fb4a97ffd54f193e52b111462552d') { + pending.push(import('./chunks/chunk-4a1b53ad267588ce5a6c622e0efdd0adeec2e922b2e51061d1fb0d63ad8f7363.js')); + } + if (key === '3e87cbb0d40d50da9c3b69d0dada85fe9b7f2f4bae2b79c8f0408a798b120549') { + pending.push(import('./chunks/chunk-fc7662d8a7810d7f14f9f989942d4df1753b8cef76009c17999d2ca394bbd8ca.js')); + } + if (key === 'ac7af13a0805d3ce8a287e9d860521c82aaf55d2c448ce3f62a85d44216a8189') { + pending.push(import('./chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js')); + } + if (key === 'a4eeeab53770801e478b15e6b179e5689afd43fc753f347e0c51ce934bd28a6c') { + pending.push(import('./chunks/chunk-5584551b9200a1d2b592bd96c14b3cacc38f4ef0c1fe22978154b3bbc6061f05.js')); + } + if (key === 'dca37e6961f625182e78a722a61c0eb9b8a2357b5e787fe616fe5993c2db5133') { + pending.push(import('./chunks/chunk-1465405c28a197cc689b86bc09d756395cc2b486677ca560b40061d793a87524.js')); + } + if (key === '5d710852587ce9ebabfac9ed950f6b11bc3a87d96860d4efdfb61dab7ae54091') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === '2b0ca0e51ded6027d3f9e464513210d5503ab2a9bc532de5cfc81d78a58f422f') { + pending.push(import('./chunks/chunk-17458473c5b0c327e5fdfb8de65e9c031656ad433885b259b9e37650bcf5111d.js')); + } + if (key === '28b5e9145505152a4dbd9600977b8177d3a161906581ca5a1a923affc812a761') { + pending.push(import('./chunks/chunk-fc7662d8a7810d7f14f9f989942d4df1753b8cef76009c17999d2ca394bbd8ca.js')); + } + if (key === '68a5f871903ca703f0fac8dd0072e1bfc082ffa14aa445026be6e1eb6cfe1bd0') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === '53ff1588255d7e5486eb67452c8d9c43baea0eecd9bd509fd7f0c55b3cccaa0d') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === '4e356c0939a28ab8766b0375ca6cb478b6163eb9ad80745a9e2f2fc80997b6a2') { + pending.push(import('./chunks/chunk-918bb383890df4641c1ca33b36e3fdba718a1ce1f4335789bcf9ca5a32123d48.js')); + } + if (key === 'b4afd0c0906e26b51836d41720e1b8d91a7cacf0fd42e089f1e0fbc2ee27a5bb') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === '2062a3f35e8fdb051e9362a8a8895d80ef719832e9394babcbaab3aac56d4f0e') { + pending.push(import('./chunks/chunk-5584551b9200a1d2b592bd96c14b3cacc38f4ef0c1fe22978154b3bbc6061f05.js')); + } + return Promise.all(pending); +} + +window.Vaadin = window.Vaadin || {}; +window.Vaadin.Flow = window.Vaadin.Flow || {}; +window.Vaadin.Flow.loadOnDemand = loadOnDemand; +window.Vaadin.Flow.resetFocus = () => { + let ae=document.activeElement; + while(ae&&ae.shadowRoot) ae = ae.shadowRoot.activeElement; + return !ae || ae.blur() || ae.focus() || true; +} \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/flow/generated-flow-webcomponent-imports.js b/kontor-spring/src/main/frontend/generated/flow/generated-flow-webcomponent-imports.js new file mode 100644 index 0000000..31c256c --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/flow/generated-flow-webcomponent-imports.js @@ -0,0 +1,129 @@ +import { injectGlobalWebcomponentCss } from 'Frontend/generated/jar-resources/theme-util.js'; + +import '@vaadin/vertical-layout/src/vaadin-vertical-layout.js'; +import '@vaadin/login/src/vaadin-login-form.js'; +import '@vaadin/common-frontend/ConnectionIndicator.js'; +import 'Frontend/generated/jar-resources/ReactRouterOutletElement.tsx'; +import 'react-router'; +import 'react'; + +const loadOnDemand = (key) => { + const pending = []; + if (key === '81bbe2e11b6af26d0d292e2e18bde37546d5b9ec24f4f4f78df2bc9f9c21f431') { + pending.push(import('./chunks/chunk-4a1b53ad267588ce5a6c622e0efdd0adeec2e922b2e51061d1fb0d63ad8f7363.js')); + } + if (key === '8904207b9d538b9eedfaaefd8e82d3415de8513bda9d6bb76f4012f0f336d200') { + pending.push(import('./chunks/chunk-050179d38edf3560e7fc3d0177787bb20c55630f7c4b372ebad09b42b287a5dd.js')); + } + if (key === '96ecac798fbbe91ef146ac4a25f5c31827427ca0f106ba66e63fc1fd6c27b83d') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === 'c0816c2bfaa97d6f3e7eea83c5478186457bdc79cfe3f284c42e192d68607157') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === '58cc18f5518623050c6a99d327dd540140b9b0dca851a76a70e688291f661e11') { + pending.push(import('./chunks/chunk-b3e84351087a7066a5317979e35ce71f4f249b80a6f66b5f0c9b0c0790866b93.js')); + } + if (key === '83045a9760ea76fd534ed71ed553dc7cf2595a5d697e3c7bc55470d219770d05') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === 'e9df10b3be58513bb6452e4dbdce31e0b1dc33868fbba54ee72e82089cf39adf') { + pending.push(import('./chunks/chunk-050179d38edf3560e7fc3d0177787bb20c55630f7c4b372ebad09b42b287a5dd.js')); + } + if (key === '39b4a07b2b07a780f8ac9d2f7cc855e3b78ec60465d9d808690466c1f0bea792') { + pending.push(import('./chunks/chunk-b0eb0de7326631053d249cbbdaed9122656362ee32dec3dd21fc23f7db177400.js')); + } + if (key === '803ed44611ffeb1bcb1f604f267f09af48ef8a5bc8d765e481b67ed59f9b880a') { + pending.push(import('./chunks/chunk-36157cc9f15f59ffacee94022392ef651f5128827a02941ad7397c3097927cf6.js')); + } + if (key === '9f40817b690e11a5b23a3159bb774f15430c23768f26dc0d15efccc3d65223ac') { + pending.push(import('./chunks/chunk-17458473c5b0c327e5fdfb8de65e9c031656ad433885b259b9e37650bcf5111d.js')); + } + if (key === '391ac9fb4bd95bc899c5911c48a6f3b549b118923653444f5ab50acddfb6f291') { + pending.push(import('./chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js')); + } + if (key === '1ac8bd8d734d2603947b1db0616ea4dae4ce691a5264f5c9aeafcaa897e0a872') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === 'e5db1fd1f39047ab2857e9ef118681c3f831f39efbbb2a6f000e9475b77444e5') { + pending.push(import('./chunks/chunk-b3e84351087a7066a5317979e35ce71f4f249b80a6f66b5f0c9b0c0790866b93.js')); + } + if (key === '92a567041312ea4c7faa4dd5bcc74f73cd3b16dd721624d0bc68d1704138abe5') { + pending.push(import('./chunks/chunk-6456be19764fead9274c211db67c1fed3129c53422a2de0c4ebc6ea374a4ec5c.js')); + } + if (key === 'bfac19b5aab9cd5a47ff4a66f2a839ebbb4889867824be809c5dc3a3d47f94b8') { + pending.push(import('./chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js')); + } + if (key === 'a886fd99e05dd2c5ce3e4b643dc8d6d29189dee784fa78678d8ab4fcb89216c0') { + pending.push(import('./chunks/chunk-09a91b9550ef322666194480aeb843ea6225d32c6cf3cdd6c06d9751b9b982c4.js')); + } + if (key === 'becc589ccd4f7ac5e6f13c45eecc05f61d67ce57f585f1655800354ff4b55f3c') { + pending.push(import('./chunks/chunk-17458473c5b0c327e5fdfb8de65e9c031656ad433885b259b9e37650bcf5111d.js')); + } + if (key === '0ca48a0e12f1dbf4945f761a93a7df202b2908327a63c52f2f060559c2bcc7f0') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === '2140ca6af7e9a5ff94d8a66b6e5a23e6d184ef7901ca73d33b3c30f74f94708a') { + pending.push(import('./chunks/chunk-b5a3b3b8d39c03fe35c3dda50e5bd1ec25755f18091bcaffc331ab0fd020c6fd.js')); + } + if (key === '89c2914ed5d19860240c0c1d3dba174616dc452c4ba8ae039f016cf9592e9432') { + pending.push(import('./chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js')); + } + if (key === 'ffd87f879398d3b6942e852eda9b64e28a124c8a61938c867efb360a5cf1d32e') { + pending.push(import('./chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js')); + } + if (key === 'c5f987a4896c791d13aeb6a03a4783ff03df304750a7db930a18d399dba31509') { + pending.push(import('./chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js')); + } + if (key === '3665d7598c9ed4112997a0493fb890edf38d23d3bd9fcb0eb09bf3e045f5228b') { + pending.push(import('./chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js')); + } + if (key === '4e76ad4411fbf58731cdad95d28e6fe0057fb4a97ffd54f193e52b111462552d') { + pending.push(import('./chunks/chunk-4a1b53ad267588ce5a6c622e0efdd0adeec2e922b2e51061d1fb0d63ad8f7363.js')); + } + if (key === '3e87cbb0d40d50da9c3b69d0dada85fe9b7f2f4bae2b79c8f0408a798b120549') { + pending.push(import('./chunks/chunk-fc7662d8a7810d7f14f9f989942d4df1753b8cef76009c17999d2ca394bbd8ca.js')); + } + if (key === 'ac7af13a0805d3ce8a287e9d860521c82aaf55d2c448ce3f62a85d44216a8189') { + pending.push(import('./chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js')); + } + if (key === 'a4eeeab53770801e478b15e6b179e5689afd43fc753f347e0c51ce934bd28a6c') { + pending.push(import('./chunks/chunk-5584551b9200a1d2b592bd96c14b3cacc38f4ef0c1fe22978154b3bbc6061f05.js')); + } + if (key === 'dca37e6961f625182e78a722a61c0eb9b8a2357b5e787fe616fe5993c2db5133') { + pending.push(import('./chunks/chunk-1465405c28a197cc689b86bc09d756395cc2b486677ca560b40061d793a87524.js')); + } + if (key === '5d710852587ce9ebabfac9ed950f6b11bc3a87d96860d4efdfb61dab7ae54091') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === '2b0ca0e51ded6027d3f9e464513210d5503ab2a9bc532de5cfc81d78a58f422f') { + pending.push(import('./chunks/chunk-17458473c5b0c327e5fdfb8de65e9c031656ad433885b259b9e37650bcf5111d.js')); + } + if (key === '28b5e9145505152a4dbd9600977b8177d3a161906581ca5a1a923affc812a761') { + pending.push(import('./chunks/chunk-fc7662d8a7810d7f14f9f989942d4df1753b8cef76009c17999d2ca394bbd8ca.js')); + } + if (key === '68a5f871903ca703f0fac8dd0072e1bfc082ffa14aa445026be6e1eb6cfe1bd0') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === '53ff1588255d7e5486eb67452c8d9c43baea0eecd9bd509fd7f0c55b3cccaa0d') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === '4e356c0939a28ab8766b0375ca6cb478b6163eb9ad80745a9e2f2fc80997b6a2') { + pending.push(import('./chunks/chunk-918bb383890df4641c1ca33b36e3fdba718a1ce1f4335789bcf9ca5a32123d48.js')); + } + if (key === 'b4afd0c0906e26b51836d41720e1b8d91a7cacf0fd42e089f1e0fbc2ee27a5bb') { + pending.push(import('./chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js')); + } + if (key === '2062a3f35e8fdb051e9362a8a8895d80ef719832e9394babcbaab3aac56d4f0e') { + pending.push(import('./chunks/chunk-5584551b9200a1d2b592bd96c14b3cacc38f4ef0c1fe22978154b3bbc6061f05.js')); + } + return Promise.all(pending); +} +window.Vaadin = window.Vaadin || {}; +window.Vaadin.Flow = window.Vaadin.Flow || {}; +window.Vaadin.Flow.loadOnDemand = loadOnDemand; +window.Vaadin.Flow.resetFocus = () => { + let ae=document.activeElement; + while(ae&&ae.shadowRoot) ae = ae.shadowRoot.activeElement; + return !ae || ae.blur() || ae.focus() || true; +} \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/generated-flow-files.txt b/kontor-spring/src/main/frontend/generated/generated-flow-files.txt new file mode 100644 index 0000000..09835b6 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/generated-flow-files.txt @@ -0,0 +1,94 @@ +app-shell-imports.d.ts +app-shell-imports.js +css.generated.d.ts +flow/Flow.tsx +flow/ReactAdapter.tsx +flow/chunks/chunk-050179d38edf3560e7fc3d0177787bb20c55630f7c4b372ebad09b42b287a5dd.js +flow/chunks/chunk-09a91b9550ef322666194480aeb843ea6225d32c6cf3cdd6c06d9751b9b982c4.js +flow/chunks/chunk-1465405c28a197cc689b86bc09d756395cc2b486677ca560b40061d793a87524.js +flow/chunks/chunk-17458473c5b0c327e5fdfb8de65e9c031656ad433885b259b9e37650bcf5111d.js +flow/chunks/chunk-2d26a95ba6c84191291435d6713bc4840a15eaad9dcf9f70fc4a3a70aee09f13.js +flow/chunks/chunk-36157cc9f15f59ffacee94022392ef651f5128827a02941ad7397c3097927cf6.js +flow/chunks/chunk-4a1b53ad267588ce5a6c622e0efdd0adeec2e922b2e51061d1fb0d63ad8f7363.js +flow/chunks/chunk-5584551b9200a1d2b592bd96c14b3cacc38f4ef0c1fe22978154b3bbc6061f05.js +flow/chunks/chunk-6456be19764fead9274c211db67c1fed3129c53422a2de0c4ebc6ea374a4ec5c.js +flow/chunks/chunk-918bb383890df4641c1ca33b36e3fdba718a1ce1f4335789bcf9ca5a32123d48.js +flow/chunks/chunk-993657077513d5c8a0171b3eaf9fefcf9af77a45b27ce7cb2f83e54f445b12ea.js +flow/chunks/chunk-b0eb0de7326631053d249cbbdaed9122656362ee32dec3dd21fc23f7db177400.js +flow/chunks/chunk-b3e84351087a7066a5317979e35ce71f4f249b80a6f66b5f0c9b0c0790866b93.js +flow/chunks/chunk-b5a3b3b8d39c03fe35c3dda50e5bd1ec25755f18091bcaffc331ab0fd020c6fd.js +flow/chunks/chunk-fc7662d8a7810d7f14f9f989942d4df1753b8cef76009c17999d2ca394bbd8ca.js +flow/generated-flow-imports.d.ts +flow/generated-flow-imports.js +flow/generated-flow-webcomponent-imports.js +index.tsx +jar-resources/Clipboard.d.ts +jar-resources/Clipboard.js +jar-resources/Clipboard.js.map +jar-resources/Download.d.ts +jar-resources/Download.js +jar-resources/Download.js.map +jar-resources/ElementResize.d.ts +jar-resources/ElementResize.js +jar-resources/ElementResize.js.map +jar-resources/Flow.d.ts +jar-resources/Flow.js +jar-resources/Flow.js.map +jar-resources/FlowBootstrap.d.ts +jar-resources/FlowBootstrap.js +jar-resources/FlowClient.d.ts +jar-resources/FlowClient.js +jar-resources/FlowShortcut.js +jar-resources/Fullscreen.d.ts +jar-resources/Fullscreen.js +jar-resources/Fullscreen.js.map +jar-resources/Geolocation.d.ts +jar-resources/Geolocation.js +jar-resources/Geolocation.js.map +jar-resources/PageVisibility.d.ts +jar-resources/PageVisibility.js +jar-resources/PageVisibility.js.map +jar-resources/ReactRouterOutletElement.tsx +jar-resources/ScreenOrientation.d.ts +jar-resources/ScreenOrientation.js +jar-resources/ScreenOrientation.js.map +jar-resources/WakeLock.d.ts +jar-resources/WakeLock.js +jar-resources/WakeLock.js.map +jar-resources/WebShare.d.ts +jar-resources/WebShare.js +jar-resources/WebShare.js.map +jar-resources/comboBoxConnector.js +jar-resources/contextMenuConnector.js +jar-resources/contextMenuTargetConnector.js +jar-resources/datepickerConnector.js +jar-resources/disableOnClickFunctions.js +jar-resources/dndConnector.js +jar-resources/flow-component-directive.js +jar-resources/flow-component-renderer.js +jar-resources/gridConnector.ts +jar-resources/index.d.ts +jar-resources/index.js +jar-resources/index.js.map +jar-resources/lit-renderer.ts +jar-resources/menubarConnector.js +jar-resources/messageListConnector.js +jar-resources/selectConnector.js +jar-resources/theme-util.js +jar-resources/tooltip.ts +jar-resources/treeGridConnector.ts +jar-resources/vaadin-big-decimal-field.js +jar-resources/vaadin-grid-flow-selection-column.js +jar-resources/vaadin-popover/popover.ts +jar-resources/vaadin-time-picker/helpers.js +jar-resources/vaadin-time-picker/timepickerConnector.js +jar-resources/vaadin-upload-manager-connector.ts +jar-resources/virtualListConnector.js +jsx-dev-transform/index.ts +jsx-dev-transform/jsx-dev-runtime.ts +jsx-dev-transform/jsx-runtime.ts +layouts.json +routes.tsx +vaadin-featureflags.js +vaadin-react.tsx +vaadin.ts \ No newline at end of file diff --git a/kontor-spring/src/main/frontend/generated/index.tsx b/kontor-spring/src/main/frontend/generated/index.tsx new file mode 100644 index 0000000..8c8a71a --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/index.tsx @@ -0,0 +1,26 @@ +/****************************************************************************** + * This file is auto-generated by Vaadin. + * If you want to customize the entry point, you can copy this file or create + * your own `index.tsx` in your frontend directory. + * By default, the `index.tsx` file should be in `./frontend/` folder. + * + * NOTE: + * - You need to restart the dev-server after adding the new `index.tsx` file. + * After that, all modifications to `index.tsx` are recompiled automatically. + * - `index.js` is also supported if you don't want to use TypeScript. + ******************************************************************************/ + +import { createElement } from 'react'; +import { createRoot } from 'react-dom/client'; +import { RouterProvider } from 'react-router'; +import { router } from 'Frontend/generated/routes.js'; + +function App() { + return ; +} + +const outlet = document.getElementById('outlet')!; +let root = (outlet as any)._root ?? createRoot(outlet); +(outlet as any)._root = root; +root.render(createElement(App)); + diff --git a/kontor-spring/src/main/frontend/generated/jar-resources/Clipboard.d.ts b/kontor-spring/src/main/frontend/generated/jar-resources/Clipboard.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/jar-resources/Clipboard.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/kontor-spring/src/main/frontend/generated/jar-resources/Clipboard.js b/kontor-spring/src/main/frontend/generated/jar-resources/Clipboard.js new file mode 100644 index 0000000..97ed1b1 --- /dev/null +++ b/kontor-spring/src/main/frontend/generated/jar-resources/Clipboard.js @@ -0,0 +1,199 @@ +/* + * Copyright 2000-2026 Vaadin Ltd. + * + * Licensed 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. + */ +/** + * Reads the first item from the system clipboard and returns its text/plain + * and text/html representations. Either field is {@code null} if the + * corresponding MIME type is not present. + * + * The caller is expected to be inside a transient user gesture and to have + * been granted the {@code clipboard-read} permission; otherwise + * {@code navigator.clipboard.read} rejects and this function propagates the + * rejection. + */ +async function readClipboardPayload() { + const items = await navigator.clipboard.read(); + if (!items.length) { + return null; + } + const item = items[0]; + const get = async (type) => item.types.includes(type) ? (await item.getType(type)).text() : null; + return { + text: await get('text/plain'), + html: await get('text/html') + }; +} +/** + * Re-encodes the given {@code } as {@code image/png} via a canvas + * round-trip. The source can be any rasterisable format the browser already + * decodes ({@code image/png}, {@code image/jpeg}, {@code image/svg+xml}, ...); + * the output is always a {@code Promise} of {@code image/png}, the only + * image MIME type every browser's asynchronous Clipboard API accepts on write. + * + * Cross-origin images need {@code crossorigin="anonymous"} on the {@code } + * plus matching CORS headers, otherwise the canvas is tainted and + * {@code toBlob} throws. + */ +function imageToPngBlob(img) { + return new Promise((resolve, reject) => { + const draw = () => { + try { + const width = img.naturalWidth || img.width; + const height = img.naturalHeight || img.height; + if (!width || !height) { + reject(new Error('image has no intrinsic size')); + return; + } + const canvas = document.createElement('canvas'); + canvas.width = width; + canvas.height = height; + const ctx = canvas.getContext('2d'); + if (!ctx) { + reject(new Error('2D canvas context not available')); + return; + } + ctx.drawImage(img, 0, 0, width, height); + canvas.toBlob((png) => (png ? resolve(png) : reject(new Error('canvas.toBlob returned null'))), 'image/png'); + } + catch (err) { + reject(err); + } + }; + if (img.complete) { + // `complete` is also true for an image that already failed to load or has + // an empty src; those have naturalWidth === 0 and their load/error events + // have already fired and will never fire again, so we must settle here + // rather than wait for an event that never comes. + if (img.naturalWidth > 0) { + draw(); + } + else { + reject(new Error('image failed to load or has empty src')); + } + } + else { + img.addEventListener('load', draw, { once: true }); + img.addEventListener('error', () => reject(new Error('image load failed')), { once: true }); + } + }); +} +/** + * Writes any combination of text/plain, text/html and image/png to the system + * clipboard as a single ClipboardItem. Any argument may be {@code null} to omit + * that MIME type; at least one is expected to be non-null (the caller enforces + * this). The image argument is the source {@code }; it is re-encoded as + * {@code image/png} via {@link imageToPngBlob} and the resulting + * {@code Promise} is fed directly to {@code ClipboardItem} so the + * {@code navigator.clipboard.write} call stays synchronous inside the user + * gesture (Safari otherwise loses activation on the first await). + * + * The caller is expected to be inside a transient user gesture; otherwise + * {@code navigator.clipboard.write} rejects and this function propagates the + * rejection. + * + * Resolves with the {@code text/plain} value if present, otherwise with the + * {@code text/html} value, otherwise with {@code null} (image-only case). + */ +async function writeClipboardPayload(text, html, image) { + const entries = {}; + if (text !== null) { + entries['text/plain'] = text; + } + if (html !== null) { + entries['text/html'] = html; + } + if (image !== null) { + entries['image/png'] = imageToPngBlob(image); + } + await navigator.clipboard.write([new ClipboardItem(entries)]); + return text !== null ? text : html; +} +/** + * Posts each file from a {@code paste} event's {@code clipboardData.files} as + * its own XHR to the URL stored as the named attribute on {@code element}. The + * wire format matches vaadin-upload: raw body, percent-encoded {@code X-Filename} + * header, MIME type in {@code Content-Type}. + * + * Each upload is processed in its own HTTP request, so the UI changes the + * server-side UploadHandler makes through {@code UI.access} are applied to the + * state tree but not sent to the client by the upload response itself. Once + * every upload of the paste has settled this helper dispatches a + * {@code vaadin-paste-upload-finished} event back on {@code element}; a + * server-side listener for that event triggers a normal Flow round trip that + * flushes those pending UI changes — so the API works without {@code @Push}, + * exactly like a regular upload completing through the Upload component. + * + * Editable targets ({@code }, {@code