From c956b09d7264e04a7eb7cba01b3b16bb7ee50115 Mon Sep 17 00:00:00 2001 From: rcherni Date: Thu, 22 Jan 2026 17:23:17 +0100 Subject: [PATCH 01/14] upgrade vaadin from 23.3.8 to 24.3.20 upgrade KARIBU_TESTING from 1.3.23 to 2.1.0 upgrade SLF4J from 1.7.30 to 2.0.9 Use jakarta.servlet-api instead of javax.servlet-api upgrade org.springframework.boot from 2.7.14 to 3.5.3 upgrade java from 11o 17 --- build.gradle.kts | 6 +-- .../kotlin/org/kopi/galite/gradle/Versions.kt | 10 ++-- galite-core/build.gradle.kts | 9 ++-- .../galite/visual/ui/vaadin/actor/Actor.kt | 11 ++-- .../vaadin/actor/VClickableNavigationItem.kt | 13 ++--- .../galite/visual/ui/vaadin/base/Utils.kt | 52 ++++++++----------- .../galite/visual/ui/vaadin/common/Dialog.kt | 24 --------- .../visual/ui/vaadin/field/TextField.kt | 8 +-- .../visual/ui/vaadin/field/VCodeField.kt | 2 +- .../visual/ui/vaadin/field/VDateField.kt | 3 +- .../visual/ui/vaadin/field/VDecimalField.kt | 1 - .../visual/ui/vaadin/field/VIntegerField.kt | 1 - .../kopi/galite/visual/ui/vaadin/form/Page.kt | 2 +- .../visual/ui/vaadin/grid/ActorRenderer.kt | 8 +++ .../ui/vaadin/grid/GridEditorDecimalField.kt | 1 - .../ui/vaadin/grid/GridEditorIntegerField.kt | 1 - .../ui/vaadin/grid/GridEditorTextField.kt | 4 +- .../visual/ui/vaadin/list/GridListDialog.kt | 7 ++- .../galite/visual/ui/vaadin/main/VWelcome.kt | 7 ++- .../galite/visual/ui/vaadin/main/VWindows.kt | 4 +- .../visual/ui/vaadin/main/VWindowsMenu.kt | 12 ++--- .../visual/ui/vaadin/menu/VNavigationMenu.kt | 1 - .../ui/vaadin/notif/AbstractNotification.kt | 10 ++-- .../ui/vaadin/progress/ProgressDialog.kt | 6 +-- .../visual/ui/vaadin/upload/UploadDialog.kt | 6 +-- .../visual/ui/vaadin/visual/DItemTree.kt | 2 +- .../ui/vaadin/visual/VWindowController.kt | 4 +- .../visual/ui/vaadin/wait/WaitWindow.kt | 4 +- .../visual/ui/vaadin/window/PopupWindow.kt | 4 +- .../frontend/src/date-picker-light.js | 12 +++-- .../frontend/src/progress-spinner.js | 2 +- .../galite-vaadin-spring/build.gradle.kts | 5 +- .../org/kopi/galite/demo/Application.kt | 5 +- galite-demo/galite-vaadin/build.gradle.kts | 3 -- galite-testing/build.gradle.kts | 1 - galite-tests/build.gradle.kts | 7 +-- .../galite/tests/ui/vaadin/VUITestBase.kt | 2 +- .../localization/FormLocalizationTests.kt | 1 - .../tests/ui/vaadin/field/FieldsTests.kt | 7 ++- .../ui/vaadin/form/MultipleBlockFormTests.kt | 7 ++- gradle.properties | 10 ++++ 41 files changed, 119 insertions(+), 166 deletions(-) delete mode 100644 galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/common/Dialog.kt diff --git a/build.gradle.kts b/build.gradle.kts index dec15d2792..76b3644b56 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -55,12 +55,12 @@ subprojects { } tasks.withType { - sourceCompatibility = JavaVersion.VERSION_11.toString() - targetCompatibility = JavaVersion.VERSION_11.toString() + sourceCompatibility = JavaVersion.VERSION_17.toString() + targetCompatibility = JavaVersion.VERSION_17.toString() } tasks.withType { - kotlinOptions.jvmTarget = "11" + kotlinOptions.jvmTarget = "17" } } diff --git a/buildSrc/src/main/kotlin/org/kopi/galite/gradle/Versions.kt b/buildSrc/src/main/kotlin/org/kopi/galite/gradle/Versions.kt index 809182832b..a1de8c9236 100644 --- a/buildSrc/src/main/kotlin/org/kopi/galite/gradle/Versions.kt +++ b/buildSrc/src/main/kotlin/org/kopi/galite/gradle/Versions.kt @@ -17,9 +17,8 @@ package org.kopi.galite.gradle object Versions { - const val VAADIN = "23.3.8" - const val KARIBU_TESTING = "1.3.23" - const val ENHANCED_DIALOG = "23.1.2" + const val VAADIN = "24.3.20" + const val KARIBU_TESTING = "2.1.0" const val EXPOSED = "0.42.1" const val HIKARI = "5.1.0" @@ -31,10 +30,9 @@ object Versions { const val GETOPT = "1.0.13" const val JDOM = "2.0.5" const val APACHE_POI = "5.2.5" - const val SLF4J = "1.7.30" + const val SLF4J = "2.0.9" const val APEX_CHARTS = "23.0.1" - const val IRON_ICONS = "2.0.1" - const val JAVAX_SERVLET_API = "4.0.1" + const val JAKARTA_SERVLET_API = "6.0.0" const val JAVAX_MAIL = "1.6.2" const val JAVAX_ACTIVATION = "1.1.1" const val FULL_CALENDAR = "3.1.0" diff --git a/galite-core/build.gradle.kts b/galite-core/build.gradle.kts index d502c7ac07..bd819e2b3b 100644 --- a/galite-core/build.gradle.kts +++ b/galite-core/build.gradle.kts @@ -35,12 +35,10 @@ dependencies { // Vaadin addons // Wysiwyg-e Rich Text Editor component for Java implementation("org.vaadin.pekka", "wysiwyg_e-java", Versions.WYSIWYG_EJAVA) - // EnhancedDialog - implementation("com.vaadin.componentfactory", "enhanced-dialog", Versions.ENHANCED_DIALOG) + // Apex charts implementation("com.github.appreciated", "apexcharts", Versions.APEX_CHARTS) - // Iron Icons - implementation("com.flowingcode.addons", "iron-icons", Versions.IRON_ICONS) + //FullCalendar for Flow dependency implementation("org.vaadin.stefan", "fullcalendar2", Versions.FULL_CALENDAR) @@ -68,8 +66,7 @@ dependencies { //getOpt dependency implementation("gnu.getopt", "java-getopt", Versions.GETOPT) - // Compile only dependency for Vaadin servlet - compileOnly("javax.servlet", "javax.servlet-api", Versions.JAVAX_SERVLET_API) + compileOnly("jakarta.servlet", "jakarta.servlet-api", "6.0.0") // Dataframe used in Pivot Table implementation("org.jetbrains.kotlinx", "dataframe", Versions.KOTLINX_DATAFRAME) diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/actor/Actor.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/actor/Actor.kt index 0e7250bc96..8be90c52d3 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/actor/Actor.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/actor/Actor.kt @@ -19,7 +19,6 @@ package org.kopi.galite.visual.ui.vaadin.actor import org.kopi.galite.visual.ui.vaadin.base.Styles -import com.flowingcode.vaadin.addons.ironicons.IronIconEnum import com.vaadin.flow.component.HasEnabled import com.vaadin.flow.component.Key import com.vaadin.flow.component.KeyModifier @@ -52,11 +51,11 @@ open class Actor(val caption: String?, super.setText(caption) if (icon != null) { - if (icon is VaadinIcon) { - super.setIcon(Icon(icon)) - } else if (icon is IronIconEnum) { - super.setIcon(icon.create()) - } + if (icon is VaadinIcon) { + super.setIcon(Icon(icon)) + } else if (icon is Icon) { + super.setIcon(icon) + } } } } diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/actor/VClickableNavigationItem.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/actor/VClickableNavigationItem.kt index d6b4f05a30..80735f011b 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/actor/VClickableNavigationItem.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/actor/VClickableNavigationItem.kt @@ -17,7 +17,6 @@ */ package org.kopi.galite.visual.ui.vaadin.actor -import com.flowingcode.vaadin.addons.ironicons.IronIconEnum import com.vaadin.flow.component.Key import com.vaadin.flow.component.KeyModifier import com.vaadin.flow.component.icon.Icon @@ -36,15 +35,9 @@ open class VClickableNavigationItem : VNavigationItem() { override fun setIcon(iconName: Any?) { icon = when (iconName) { - is VaadinIcon -> { - Icon(iconName) - } - is IronIconEnum -> { - iconName.create() - } - else -> { - Icon("") - } + is VaadinIcon -> Icon(iconName) + is Icon -> iconName + else -> Icon("") } } diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/base/Utils.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/base/Utils.kt index 72a43b9215..8570c2a7a2 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/base/Utils.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/base/Utils.kt @@ -26,12 +26,6 @@ import org.kopi.galite.visual.ui.vaadin.window.PopupWindow import org.kopi.galite.visual.ui.vaadin.window.Window import org.kopi.galite.visual.VColor -import com.flowingcode.vaadin.addons.ironicons.AvIcons -import com.flowingcode.vaadin.addons.ironicons.DeviceIcons -import com.flowingcode.vaadin.addons.ironicons.EditorIcons -import com.flowingcode.vaadin.addons.ironicons.FileIcons -import com.flowingcode.vaadin.addons.ironicons.IronIcons -import com.flowingcode.vaadin.addons.ironicons.MapsIcons import com.vaadin.flow.component.Component import com.vaadin.flow.component.UI import com.vaadin.flow.component.icon.VaadinIcon @@ -302,8 +296,8 @@ object Utils : Utils() { pngToIconMap["expanded"] = VaadinIcon.FOLDER_OPEN_O pngToIconMap["expanded_p"] = VaadinIcon.FOLDER_OPEN_O pngToIconMap["exportCsv"] = VaadinIcon.FILE_TEXT_O - pngToIconMap["exportPdf"] = FileIcons.PDF - pngToIconMap["exportXlsx"] = FileIcons.EXCEL + pngToIconMap["exportPdf"] = VaadinIcon.FILE_O + pngToIconMap["exportXlsx"] = VaadinIcon.FILE_TABLE pngToIconMap["foldColumn"] = VaadinIcon.FOLDER_O pngToIconMap["fold"] = VaadinIcon.FOLDER_O pngToIconMap["formula"] = VaadinIcon.CALC @@ -323,12 +317,12 @@ object Utils : Utils() { pngToIconMap["preview"] = VaadinIcon.FILE_TEXT_O pngToIconMap["print"] = VaadinIcon.PRINT pngToIconMap["quit"] = VaadinIcon.POWER_OFF - pngToIconMap["save"] = IronIcons.SAVE + pngToIconMap["save"] = VaadinIcon.SAFE pngToIconMap["searchop"] = VaadinIcon.SEARCH pngToIconMap["search"] = VaadinIcon.FILE_SEARCH pngToIconMap["serialquery"] = VaadinIcon.RECORDS - pngToIconMap["serviceoff"] = DeviceIcons.SIGNAL_CELLULAR_OFF - pngToIconMap["serviceon"] = DeviceIcons.SIGNAL_CELLULAR_4_BAR + pngToIconMap["serviceoff"] = VaadinIcon.POWER_OFF + pngToIconMap["serviceon"] = VaadinIcon.SIGNAL pngToIconMap["store"] = VaadinIcon.BUILDING_O pngToIconMap["suggest"] = VaadinIcon.PHONE pngToIconMap["timeStamp"] = VaadinIcon.CLOCK @@ -352,7 +346,7 @@ object Utils : Utils() { pngToIconMap["bar_chart"] = VaadinIcon.BAR_CHART pngToIconMap["bkup3"] = VaadinIcon.WARNING pngToIconMap["bkup"] = VaadinIcon.WARNING - pngToIconMap["block2"] = IronIcons.UNDO + pngToIconMap["block2"] = VaadinIcon.REFRESH pngToIconMap["board"] = VaadinIcon.COGS pngToIconMap["bold"] = VaadinIcon.BOLD pngToIconMap["bomb"] = VaadinIcon.BOMB @@ -383,8 +377,8 @@ object Utils : Utils() { pngToIconMap["fax"] = VaadinIcon.PHONE pngToIconMap["fw"] = VaadinIcon.STEP_FORWARD pngToIconMap["gifIcon"] = VaadinIcon.FILE_PICTURE - pngToIconMap["green"] = MapsIcons.MAP - pngToIconMap["guide"] = IronIcons.HELP + pngToIconMap["green"] = VaadinIcon.MAP_MARKER + pngToIconMap["guide"] = VaadinIcon.QUESTION_CIRCLE_O pngToIconMap["ident"] = VaadinIcon.ARROWS_LONG_RIGHT pngToIconMap["index"] = VaadinIcon.BOOK pngToIconMap["interrupt"] = VaadinIcon.STOP @@ -393,23 +387,23 @@ object Utils : Utils() { pngToIconMap["launch"] = VaadinIcon.ARROW_RIGHT pngToIconMap["line_chart"] = VaadinIcon.LINE_CHART pngToIconMap["lock"] = VaadinIcon.LOCK - pngToIconMap["login"] = IronIcons.ACCOUNT_CIRCLE + pngToIconMap["login"] = VaadinIcon.USER pngToIconMap["moneycheck"] = VaadinIcon.MONEY pngToIconMap["money"] = VaadinIcon.MONEY - pngToIconMap["notice"] = IronIcons.LIGHTBULB_OUTLINE - pngToIconMap["ofolder"] = IronIcons.FOLDER_OPEN - pngToIconMap["pageFirst"] = AvIcons.SKIP_PREVIOUS - pngToIconMap["pageLast"] = AvIcons.SKIP_NEXT - pngToIconMap["pageLeft"] = AvIcons.FAST_REWIND - pngToIconMap["pageRight"] = AvIcons.FAST_FORWARD + pngToIconMap["notice"] = VaadinIcon.LIGHTBULB + pngToIconMap["ofolder"] = VaadinIcon.FOLDER_OPEN_O + pngToIconMap["pageFirst"] = VaadinIcon.ANGLE_DOUBLE_LEFT + pngToIconMap["pageLast"] = VaadinIcon.ANGLE_DOUBLE_RIGHT + pngToIconMap["pageLeft"] = VaadinIcon.ANGLE_LEFT + pngToIconMap["pageRight"] = VaadinIcon.ANGLE_RIGHT pngToIconMap["password"] = VaadinIcon.PASSWORD pngToIconMap["paste"] = VaadinIcon.PASTE pngToIconMap["phone"] = VaadinIcon.PHONE pngToIconMap["pie_chart"] = VaadinIcon.PIE_CHART pngToIconMap["printoptions"] = VaadinIcon.WRENCH pngToIconMap["project"] = VaadinIcon.CUBES - pngToIconMap["red"] = MapsIcons.MAP - pngToIconMap["redo"] = IronIcons.REDO + pngToIconMap["red"] = VaadinIcon.MAP_MARKER + pngToIconMap["redo"] = VaadinIcon.ROTATE_RIGHT pngToIconMap["refresh"] = VaadinIcon.REFRESH pngToIconMap["reload"] = VaadinIcon.REFRESH pngToIconMap["report"] = VaadinIcon.TABLE @@ -424,17 +418,17 @@ object Utils : Utils() { pngToIconMap["todo"] = VaadinIcon.TASKS pngToIconMap["top"] = VaadinIcon.BOOK pngToIconMap["underline"] = VaadinIcon.UNDERLINE - pngToIconMap["undo"] = IronIcons.UNDO + pngToIconMap["undo"] = VaadinIcon.ROTATE_LEFT pngToIconMap["unident"] = VaadinIcon.ARROW_CIRCLE_LEFT pngToIconMap["unstick"] = VaadinIcon.PIN - pngToIconMap["update"] = EditorIcons.MODE_EDIT + pngToIconMap["update"] = VaadinIcon.EDIT pngToIconMap["users"] = VaadinIcon.USERS pngToIconMap["utils"] = VaadinIcon.TOOLS pngToIconMap["validate"] = VaadinIcon.CHECK - pngToIconMap["wait"] = DeviceIcons.ACCESS_TIME - pngToIconMap["warning"] = IronIcons.WARNING - pngToIconMap["window"] = IronIcons.CHEVRON_RIGHT - pngToIconMap["yellow"] = MapsIcons.MAP + pngToIconMap["wait"] = VaadinIcon.CLOCK + pngToIconMap["warning"] = VaadinIcon.EXCLAMATION_CIRCLE + pngToIconMap["window"] = VaadinIcon.CHEVRON_RIGHT + pngToIconMap["yellow"] = VaadinIcon.MAP_MARKER pngToIconMap["zoomheight"] = VaadinIcon.VAADIN_H pngToIconMap["zoomminus"] = VaadinIcon.SEARCH_MINUS pngToIconMap["zoomoptimal"] = VaadinIcon.VAADIN_H diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/common/Dialog.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/common/Dialog.kt deleted file mode 100644 index 8bab1be10d..0000000000 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/common/Dialog.kt +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 2013-2022 kopiLeft Services SARL, Tunis TN - * Copyright (c) 1990-2022 kopiRight Managed Solutions GmbH, Wien AT - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -package org.kopi.galite.visual.ui.vaadin.common - -import com.vaadin.componentfactory.EnhancedDialog -import com.vaadin.flow.component.dependency.NpmPackage - -@NpmPackage(value = "@vaadin-component-factory/vcf-enhanced-dialog", version = "23.1.1") -open class Dialog : EnhancedDialog() diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/TextField.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/TextField.kt index d13f4ccf87..59751df73d 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/TextField.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/TextField.kt @@ -30,12 +30,12 @@ import org.kopi.galite.visual.ui.vaadin.event.TextFieldListener import org.kopi.galite.visual.ui.vaadin.form.DTextField import org.kopi.galite.visual.ui.vaadin.form.KeyNavigator -import com.flowingcode.vaadin.addons.ironicons.IronIcons import com.vaadin.flow.component.Component import com.vaadin.flow.component.HasStyle import com.vaadin.flow.component.dependency.CssImport import com.vaadin.flow.component.dependency.JsModule -import com.vaadin.flow.component.icon.IronIcon +import com.vaadin.flow.component.icon.Icon +import com.vaadin.flow.component.icon.VaadinIcon import com.vaadin.flow.component.textfield.TextField import com.vaadin.flow.data.binder.Binder @@ -144,7 +144,7 @@ class TextField(val model: VField, */ var validator: TextValidator? = null - private var autofill: IronIcon? = null + private var autofill: Icon? = null internal var lastCommunicatedValue = "" @@ -164,7 +164,7 @@ class TextField(val model: VField, inputField.isEnabled = enabled add(inputField) if (hasAutofill && type != Type.DATE) { - autofill = IronIcons.ARROW_DROP_DOWN.create() + autofill = Icon(VaadinIcon.ANGLE_DOWN) autofill!!.addClickListener { fireAutofill() } diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VCodeField.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VCodeField.kt index b8ed9f2c46..5d720c79b2 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VCodeField.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VCodeField.kt @@ -34,7 +34,7 @@ import com.vaadin.flow.component.dependency.CssImport class VCodeField(enumerations : Array?) : InputTextField>(ComboBox()), KeyNotifier { init { - internalField.setItems(Arrays.stream(enumerations)) + internalField.setItems(enumerations?.toList() ?: emptyList()) element.themeList.add("galite-combobox") } diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDateField.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDateField.kt index f3c7c3b0b4..626263d97e 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDateField.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDateField.kt @@ -99,7 +99,6 @@ class DatePickerLight : AbstractField(null), HasComponents, textField.className = "input" textField.suffixComponent = icon textField.isClearButtonVisible = true - textField.isPreventInvalidInput = true textField.pattern = "[0-9/\\.]*" textField.maxLength = 10 @@ -257,4 +256,4 @@ class DatePickerLight : AbstractField(null), HasComponents, fun addPickerListener(listener: ComponentEventListener): Registration { return addListener(ValueChanged::class.java, listener) } -} \ No newline at end of file +} diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDecimalField.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDecimalField.kt index 57cd0e0634..625e4ccad1 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDecimalField.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDecimalField.kt @@ -35,7 +35,6 @@ class VDecimalField(col: Int, : InputTextField(TextField()) { init { internalField.pattern = "[0-9-.,]*" - internalField.isPreventInvalidInput = true val dfs = DecimalFormatSymbols.get(MainWindow.locale) if (dfs!!.decimalSeparator != '.') { diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VIntegerField.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VIntegerField.kt index a46f2dd3da..170a9431db 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VIntegerField.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VIntegerField.kt @@ -26,7 +26,6 @@ class VIntegerField(width : Int, minval : Double, maxval : Double) : InputTextFi init { internalField.pattern = "[0-9-]*" - internalField.isPreventInvalidInput = true internalField.element.setProperty("min", minval) internalField.element.setProperty("max", maxval) this.width = width.toString() diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/form/Page.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/form/Page.kt index e49da887f3..211d397729 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/form/Page.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/form/Page.kt @@ -39,7 +39,7 @@ class Page(private var content: T) : Div() where T : Component, T : FlexCompo init { className = Styles.FORM_PAGE - content.className = Styles.FORM_PAGE_CONTENT + content.setClassName(Styles.FORM_PAGE_CONTENT) add(scrollPanel) } diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/ActorRenderer.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/ActorRenderer.kt index 99e844354d..7cf294919f 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/ActorRenderer.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/ActorRenderer.kt @@ -17,14 +17,22 @@ */ package org.kopi.galite.visual.ui.vaadin.grid +import com.vaadin.flow.data.provider.DataKeyMapper import com.vaadin.flow.data.renderer.ClickableRenderer import com.vaadin.flow.data.renderer.Renderer +import com.vaadin.flow.dom.Element +import com.vaadin.flow.data.renderer.Rendering import com.vaadin.flow.shared.Registration /** * An actor field renderer that uses the actor editor field widget to display. */ open class ActorRenderer(caption: String?) : ClickableRenderer, Renderer() { + + override fun render(root: Element?, keyMapper: DataKeyMapper?, item: String?): Rendering? { + TODO("Not yet implemented") + } + override fun addItemClickListener(listener: ClickableRenderer.ItemClickListener?): Registration { TODO("Not yet implemented") } diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorDecimalField.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorDecimalField.kt index 2fe5901799..02bde469a2 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorDecimalField.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorDecimalField.kt @@ -36,7 +36,6 @@ class GridEditorDecimalField( init { wrappedField.pattern = "[0-9-,.]*" - wrappedField.isPreventInvalidInput = true val dfs = DecimalFormatSymbols.get(MainWindow.locale) if (dfs!!.decimalSeparator != '.') { diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorIntegerField.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorIntegerField.kt index 848987ddf6..e3298d2392 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorIntegerField.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorIntegerField.kt @@ -30,7 +30,6 @@ class GridEditorIntegerField(width: Int, val minValue: Int, val maxValue: Int) : init { wrappedField.pattern = "[0-9-]*" - wrappedField.isPreventInvalidInput = true wrappedField.element.setProperty("min", minValue.toDouble()) wrappedField.element.setProperty("max", maxValue.toDouble()) } diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorTextField.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorTextField.kt index fdc29d686a..8e05f5cab5 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorTextField.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorTextField.kt @@ -25,12 +25,12 @@ import org.kopi.galite.visual.ui.vaadin.base.addJSKeyDownListener import org.kopi.galite.visual.VColor import org.kopi.galite.visual.form.VConstants -import com.flowingcode.vaadin.addons.ironicons.IronIcons import com.vaadin.flow.component.AttachEvent import com.vaadin.flow.component.Component import com.vaadin.flow.component.Key import com.vaadin.flow.component.KeyModifier import com.vaadin.flow.component.UI +import com.vaadin.flow.component.icon.VaadinIcon import com.vaadin.flow.component.textfield.TextField import com.vaadin.flow.component.textfield.TextFieldVariant @@ -90,7 +90,7 @@ open class GridEditorTextField(val width: Int) : GridEditorField(), JSKe * Sets this field to be an auto fill field */ fun setAutofill() { - val autofillIcon = IronIcons.ARROW_DROP_DOWN.create() + val autofillIcon = VaadinIcon.ANGLE_DOWN.create() autofillIcon.addClickListener { dGridEditorField.onAutofill() } diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/list/GridListDialog.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/list/GridListDialog.kt index b99bb3d740..81782696df 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/list/GridListDialog.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/list/GridListDialog.kt @@ -20,11 +20,11 @@ package org.kopi.galite.visual.ui.vaadin.list import org.kopi.galite.visual.ui.vaadin.base.LocalizedProperties import org.kopi.galite.visual.ui.vaadin.base.Styles import org.kopi.galite.visual.ui.vaadin.base.VInputButton -import org.kopi.galite.visual.ui.vaadin.common.Dialog import org.kopi.galite.visual.ApplicationContext import com.vaadin.flow.component.HasEnabled import com.vaadin.flow.component.HasStyle +import com.vaadin.flow.component.dialog.Dialog import com.vaadin.flow.component.button.Button import com.vaadin.flow.component.dependency.CssImport import com.vaadin.flow.component.orderedlayout.VerticalLayout @@ -34,8 +34,7 @@ import com.vaadin.flow.component.orderedlayout.VerticalLayout */ @CssImport.Container(value = [ CssImport("./styles/galite/grid.css" , themeFor = "vaadin-grid"), - CssImport("./styles/galite/list.css" , themeFor = "vaadin-grid"), - CssImport("./styles/galite/list.css" , themeFor = "vcf-enhanced-dialog-overlay") + CssImport("./styles/galite/list.css" , themeFor = "vaadin-grid") ]) open class GridListDialog : Dialog(), HasEnabled, HasStyle { @@ -81,7 +80,7 @@ open class GridListDialog : Dialog(), HasEnabled, HasStyle { content.add(newForm) } add(field!!.widthStyler, content) - addToFooter(close) + footer.add(close) } private val locale get() = ApplicationContext.applicationContext.getApplication().defaultLocale.toString() diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWelcome.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWelcome.kt index 4ca73bcb41..ef137b1d68 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWelcome.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWelcome.kt @@ -19,7 +19,6 @@ package org.kopi.galite.visual.ui.vaadin.main import org.kopi.galite.visual.ui.vaadin.menu.ModuleList -import com.flowingcode.vaadin.addons.ironicons.IronIcons import com.vaadin.flow.component.icon.VaadinIcon import com.vaadin.flow.component.orderedlayout.HorizontalLayout @@ -45,7 +44,7 @@ class VWelcome : HorizontalLayout() { fun setUserMenu(menu: ModuleList) { userMenu = menu menu.setId("user_menu") - menu.rootMenuItem!!.setIcon(IronIcons.ACCOUNT_BOX.create()) + menu.rootMenuItem!!.setIcon(VaadinIcon.USER.create()) addComponentAsFirst(menu) } @@ -77,7 +76,7 @@ class VWelcome : HorizontalLayout() { fun setBookmarksMenu(menu: ModuleList) { bookmarksMenu = menu menu.setId("bookmarks_menu") - menu.rootMenuItem!!.setIcon(IronIcons.STAR.create()) + menu.rootMenuItem!!.setIcon(VaadinIcon.STAR.create()) addComponentAtIndex(2, menu) } @@ -88,7 +87,7 @@ class VWelcome : HorizontalLayout() { fun setWorkspaceContextItemMenu(menu: ModuleList) { workspaceContextMenu = menu menu.setId("wrkcontext_menu") - menu.rootMenuItem!!.setIcon(IronIcons.ROOM.create()) + menu.rootMenuItem!!.setIcon(VaadinIcon.HOME.create()) addComponentAtIndex(3, menu) } } diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWindows.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWindows.kt index 45c5d9a6c3..a3a6a79b86 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWindows.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWindows.kt @@ -17,12 +17,12 @@ */ package org.kopi.galite.visual.ui.vaadin.main -import com.flowingcode.vaadin.addons.ironicons.IronIcons import com.vaadin.flow.component.Focusable import com.vaadin.flow.component.HasEnabled import com.vaadin.flow.component.html.Anchor import com.vaadin.flow.component.html.Div import com.vaadin.flow.component.html.Span +import com.vaadin.flow.component.icon.VaadinIcon import com.vaadin.flow.shared.Registration /** @@ -35,7 +35,7 @@ class VWindows : Div(), HasEnabled, Focusable { private val anchor = Anchor() private val label = Span() - private val icon = IronIcons.CONTENT_COPY.create() + private val icon = VaadinIcon.COPY.create() private var enabled = false init { diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWindowsMenu.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWindowsMenu.kt index a2b7826bc7..02a56ee744 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWindowsMenu.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWindowsMenu.kt @@ -17,11 +17,10 @@ */ package org.kopi.galite.visual.ui.vaadin.main -import org.kopi.galite.visual.ui.vaadin.common.Dialog -import com.vaadin.componentfactory.theme.EnhancedDialogVariant import com.vaadin.flow.component.Component import com.vaadin.flow.component.HasStyle import com.vaadin.flow.component.dependency.CssImport +import com.vaadin.flow.component.dialog.Dialog import com.vaadin.flow.component.html.Label import com.vaadin.flow.component.icon.VaadinIcon import com.vaadin.flow.component.orderedlayout.HorizontalLayout @@ -33,7 +32,6 @@ import com.vaadin.flow.component.orderedlayout.VerticalLayout * From this menu, the user can switch to another window. */ @CssImport.Container(value = [ - CssImport("./styles/galite/windows.css", themeFor = "vcf-enhanced-dialog-overlay"), CssImport("./styles/galite/windows.css") ]) class VWindowsMenu : Dialog(), HasStyle { @@ -47,23 +45,19 @@ class VWindowsMenu : Dialog(), HasStyle { // do not affect this menu val switchWindowIcon = VaadinIcon.BROWSER.create() val closeIcon = VaadinIcon.CLOSE_CIRCLE.create() - val header = HorizontalLayout() + //val header = HorizontalLayout() val switch = HorizontalLayout(headerText, switchWindowIcon) - setThemeVariants(EnhancedDialogVariant.SIZE_SMALL) element.themeList.add("k-windowsMenu") - header.className = "window-items-title" closeIcon.className = "close-icon" - header.setFlexGrow(1.0, switch) closeIcon.addClickListener { close() } header.add(switch) header.add(closeIcon) - setHeader(header) - setContent(items) + add(items) } /** diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/menu/VNavigationMenu.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/menu/VNavigationMenu.kt index da9d72ebd8..2578023a84 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/menu/VNavigationMenu.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/menu/VNavigationMenu.kt @@ -26,7 +26,6 @@ import com.vaadin.flow.component.dialog.Dialog class VNavigationMenu(private val rootNavigationItem: VActorsRootNavigationItem) : Dialog(), HasStyle { init { - //this.setThemeVariants(EnhancedDialogVariant.SIZE_MEDIUM) isResizable = false isDraggable = true isCloseOnEsc = true diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/notif/AbstractNotification.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/notif/AbstractNotification.kt index 1856bc45d9..4622ea9590 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/notif/AbstractNotification.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/notif/AbstractNotification.kt @@ -19,7 +19,6 @@ package org.kopi.galite.visual.ui.vaadin.notif import org.kopi.galite.visual.ui.vaadin.base.Styles import org.kopi.galite.visual.ui.vaadin.base.Utils.findMainWindow -import org.kopi.galite.visual.ui.vaadin.common.Dialog import org.kopi.galite.visual.ui.vaadin.common.VSpan import org.kopi.galite.visual.ui.vaadin.window.Window @@ -28,6 +27,7 @@ import com.vaadin.flow.component.Component import com.vaadin.flow.component.Focusable import com.vaadin.flow.component.button.Button import com.vaadin.flow.component.dependency.CssImport +import com.vaadin.flow.component.dialog.Dialog import com.vaadin.flow.component.html.Div import com.vaadin.flow.component.html.H3 import com.vaadin.flow.component.icon.Icon @@ -45,8 +45,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout */ @CssImport.Container(value = [ - CssImport("./styles/galite/notification.css"), - CssImport("./styles/galite/notification.css" , themeFor = "vcf-enhanced-dialog-overlay") + CssImport("./styles/galite/notification.css") ]) abstract class AbstractNotification(title: String?, message: String?, @@ -81,16 +80,15 @@ abstract class AbstractNotification(title: String?, this.content.className = "k-notification-content" content.justifyContentMode = FlexComponent.JustifyContentMode.CENTER - setHeader(this.title) + header.add(this.title) setNotificationMessage(message) icon.setSize("2.8em") icon.className = "k-notification-icon" content.add(icon) content.add(this.message) - setContent(content) + add(content, footer) footer.add(buttons) setButtons() - setFooter(footer) } /** diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/progress/ProgressDialog.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/progress/ProgressDialog.kt index 3dfce937fc..86d063d380 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/progress/ProgressDialog.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/progress/ProgressDialog.kt @@ -18,9 +18,9 @@ package org.kopi.galite.visual.ui.vaadin.progress import org.kopi.galite.visual.ui.vaadin.base.Styles -import org.kopi.galite.visual.ui.vaadin.common.Dialog import com.vaadin.flow.component.HasStyle +import com.vaadin.flow.component.dialog.Dialog import com.vaadin.flow.component.html.Div import com.vaadin.flow.component.html.H4 import com.vaadin.flow.component.html.Paragraph @@ -77,8 +77,8 @@ open class ProgressDialog(title: String = "", message: String = "") : Dialog(), content.add(this.message) content.add(bar) content.add(percentageLabel) - setHeader(this.title) - setContent(content) + header.add(this.title) + add(content) } //------------------------------------------------- diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/upload/UploadDialog.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/upload/UploadDialog.kt index 884ca67dee..5698222bdf 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/upload/UploadDialog.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/upload/UploadDialog.kt @@ -20,10 +20,10 @@ package org.kopi.galite.visual.ui.vaadin.upload import org.kopi.galite.visual.ui.vaadin.base.BackgroundThreadHandler.releaseLock import org.kopi.galite.visual.ui.vaadin.base.LocalizedProperties import org.kopi.galite.visual.ui.vaadin.base.VInputButton -import org.kopi.galite.visual.ui.vaadin.common.Dialog import org.kopi.galite.visual.ui.vaadin.common.VSpan import com.vaadin.flow.component.HasStyle +import com.vaadin.flow.component.dialog.Dialog import com.vaadin.flow.component.html.NativeButton import com.vaadin.flow.component.orderedlayout.FlexComponent import com.vaadin.flow.component.orderedlayout.HorizontalLayout @@ -49,8 +49,8 @@ class UploadDialog(val receiver: Receiver) : Dialog(), HasStyle { buttons.className = "k-upload-buttons" ok.style["cursor"] = "pointer" cancel.style["cursor"] = "pointer" - setHeader(title) - setFooter(buttons) + header.add(title) + footer.add(buttons) add(upload) addHandlers() } diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/visual/DItemTree.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/visual/DItemTree.kt index 810812d4b2..70b8788d59 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/visual/DItemTree.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/visual/DItemTree.kt @@ -329,7 +329,7 @@ class DItemTree(model: VItemTree) : DWindow(model), UItemTree { // popupContent.setComponentAlignment(buttonsContainer, Alignment.MIDDLE_CENTER) TODO inputDialog = PopupWindow(findMainWindow()) inputDialog!!.isModal = true - inputDialog!!.setContent(popupContent) + inputDialog!!.add(popupContent) inputDialog!!.className = "inputdialog" } diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/visual/VWindowController.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/visual/VWindowController.kt index f4969a4c95..ce1fdf73f6 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/visual/VWindowController.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/visual/VWindowController.kt @@ -134,7 +134,7 @@ class VWindowController : WindowController() { val popup = PopupWindow(getApplication()?.mainWindow) accessAndPush { popup.isModal = false - popup.setContent(view) + popup.add(view) popup.setCaption(title) // put popup title popup.open() @@ -179,7 +179,7 @@ class VWindowController : WindowController() { if (application != null) { val popup = PopupWindow(application.mainWindow) popup.isModal = true - popup.setContent(view!!) + popup.add(view!!) popup.setCaption(model.getTitle()) // put popup title popup.open() diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/wait/WaitWindow.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/wait/WaitWindow.kt index a20a7e1e29..87688c171c 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/wait/WaitWindow.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/wait/WaitWindow.kt @@ -33,7 +33,7 @@ import com.vaadin.flow.component.orderedlayout.VerticalLayout CssImport("./styles/galite/wait.css"), CssImport("./styles/galite/wait.css" , themeFor = "vaadin-dialog-overlay") ]) -class WaitWindow : VerticalLayout(), ComponentEventListener> { +class WaitWindow : VerticalLayout(), ComponentEventListener { //--------------------------------------------------- // DATA MEMBERS @@ -86,7 +86,7 @@ class WaitWindow : VerticalLayout(), ComponentEventListener) { + override fun onComponentEvent(event: Dialog.OpenedChangeEvent) { if(event.isOpened) { popup.element.style["cursor"] = "wait" } else { diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/window/PopupWindow.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/window/PopupWindow.kt index 5118fec527..e93a4bc0f3 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/window/PopupWindow.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/window/PopupWindow.kt @@ -18,12 +18,12 @@ package org.kopi.galite.visual.ui.vaadin.window import org.kopi.galite.visual.ui.vaadin.base.Styles -import org.kopi.galite.visual.ui.vaadin.common.Dialog import org.kopi.galite.visual.ui.vaadin.common.VSpan import org.kopi.galite.visual.ui.vaadin.main.MainWindow import com.vaadin.flow.component.HasStyle import com.vaadin.flow.component.dependency.CssImport +import com.vaadin.flow.component.dialog.Dialog /** * The popup window component. @@ -41,7 +41,7 @@ class PopupWindow(val mainWindow: MainWindow?) : Dialog(), HasStyle { isResizable = false isCloseOnOutsideClick = false isCloseOnEsc = false - addToHeader(caption) + header.add(caption) } //--------------------------------------------------- // IMPLEMENTATIONS diff --git a/galite-core/src/main/resources/META-INF/resources/frontend/src/date-picker-light.js b/galite-core/src/main/resources/META-INF/resources/frontend/src/date-picker-light.js index 0547cddcd3..52100ca502 100644 --- a/galite-core/src/main/resources/META-INF/resources/frontend/src/date-picker-light.js +++ b/galite-core/src/main/resources/META-INF/resources/frontend/src/date-picker-light.js @@ -14,13 +14,15 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -import {LitElement, html} from 'lit-element'; -import '@vaadin/vaadin-date-picker/vaadin-date-picker-light.js'; -import '@vaadin/vaadin-text-field/vaadin-text-field.js'; +import {LitElement, html} from 'lit'; +import '@vaadin/date-picker/src/vaadin-date-picker-light.js'; +import '@vaadin/text-field/src/vaadin-text-field.js'; import '@vaadin/vaadin-lumo-styles/font-icons.js'; -import { DatePickerLightElement } from '@vaadin/vaadin-date-picker/vaadin-date-picker-light.js'; -class DatePickerLight extends DatePickerLightElement { + +const VaadinDatePickerLight = customElements.get('vaadin-date-picker-light'); + +class DatePickerLight extends VaadinDatePickerLight { constructor() { super(); diff --git a/galite-core/src/main/resources/META-INF/resources/frontend/src/progress-spinner.js b/galite-core/src/main/resources/META-INF/resources/frontend/src/progress-spinner.js index 6ff44f7285..737c6d86d1 100644 --- a/galite-core/src/main/resources/META-INF/resources/frontend/src/progress-spinner.js +++ b/galite-core/src/main/resources/META-INF/resources/frontend/src/progress-spinner.js @@ -14,7 +14,7 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -import {LitElement, html} from 'lit-element'; +import {LitElement, html} from 'lit'; import '@vaadin-component-factory/vcf-progress-spinner'; class ProgressSpinner extends LitElement { diff --git a/galite-demo/galite-vaadin-spring/build.gradle.kts b/galite-demo/galite-vaadin-spring/build.gradle.kts index 39fb4339af..e137ccf665 100644 --- a/galite-demo/galite-vaadin-spring/build.gradle.kts +++ b/galite-demo/galite-vaadin-spring/build.gradle.kts @@ -20,7 +20,7 @@ import org.kopi.galite.gradle.excludeWebJars plugins { kotlin("jvm") apply true - id("org.springframework.boot") version "2.7.14" + id("org.springframework.boot") version "3.5.3" id("io.spring.dependency-management") version "1.0.10.RELEASE" id("com.vaadin") version "23.3.8" application @@ -62,9 +62,6 @@ dependencies { implementation("com.github.mvysny.kaributesting", "karibu-testing-v10", Versions.KARIBU_TESTING) implementation("com.h2database", "h2", Versions.H2) - - // EnhancedDialog dependency - testImplementation("com.vaadin.componentfactory", "enhanced-dialog", Versions.ENHANCED_DIALOG) } dependencyManagement { diff --git a/galite-demo/galite-vaadin-spring/src/main/kotlin/org/kopi/galite/demo/Application.kt b/galite-demo/galite-vaadin-spring/src/main/kotlin/org/kopi/galite/demo/Application.kt index 615417573a..a8146ae508 100644 --- a/galite-demo/galite-vaadin-spring/src/main/kotlin/org/kopi/galite/demo/Application.kt +++ b/galite-demo/galite-vaadin-spring/src/main/kotlin/org/kopi/galite/demo/Application.kt @@ -28,12 +28,13 @@ import org.kopi.galite.visual.PropertyException import org.kopi.galite.visual.Registry import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer import com.vaadin.flow.router.Route +import org.springframework.context.annotation.ComponentScan @SpringBootApplication -open class GShopApplication : SpringBootServletInitializer() +@ComponentScan(basePackages = ["org.kopi.galite"]) +open class GShopApplication fun main(args: Array) { connectToDatabase() diff --git a/galite-demo/galite-vaadin/build.gradle.kts b/galite-demo/galite-vaadin/build.gradle.kts index 773eca40cf..3d1463512d 100644 --- a/galite-demo/galite-vaadin/build.gradle.kts +++ b/galite-demo/galite-vaadin/build.gradle.kts @@ -55,9 +55,6 @@ dependencies { implementation("com.h2database", "h2", Versions.H2) - // EnhancedDialog dependency - testImplementation("com.vaadin.componentfactory", "enhanced-dialog", Versions.ENHANCED_DIALOG) - // Pivot Table dependency implementation("org.vaadin.addons.componentfactory", "pivottable-flow", Versions.PIVOT_TABLE) } diff --git a/galite-testing/build.gradle.kts b/galite-testing/build.gradle.kts index af759c46d2..0e2f3e9f51 100644 --- a/galite-testing/build.gradle.kts +++ b/galite-testing/build.gradle.kts @@ -34,7 +34,6 @@ dependencies { // UI tests dependencies implementation("com.github.mvysny.kaributesting", "karibu-testing-v10", Versions.KARIBU_TESTING) - implementation("com.vaadin.componentfactory", "enhanced-dialog", Versions.ENHANCED_DIALOG) } dependencyManagement { diff --git a/galite-tests/build.gradle.kts b/galite-tests/build.gradle.kts index 537cfb20e2..d81daa22d1 100644 --- a/galite-tests/build.gradle.kts +++ b/galite-tests/build.gradle.kts @@ -20,9 +20,9 @@ import org.kopi.galite.gradle.excludeWebJars plugins { kotlin("jvm") apply true - id("org.springframework.boot") version "2.7.14" + id("org.springframework.boot") version "3.5.3" id("io.spring.dependency-management") version "1.0.10.RELEASE" - id("com.vaadin") version "23.3.8" + id("com.vaadin") version "24.3.20" } vaadin { @@ -36,6 +36,8 @@ dependencies { implementation(kotlin("test-junit")) + implementation("jakarta.servlet", "jakarta.servlet-api", Versions.JAKARTA_SERVLET_API) + implementation("com.vaadin", "vaadin-core") { excludeWebJars() } @@ -63,7 +65,6 @@ dependencies { testImplementation("org.apache.poi", "poi-ooxml", Versions.APACHE_POI) // Vaadin addons dependency - testImplementation("com.vaadin.componentfactory", "enhanced-dialog", Versions.ENHANCED_DIALOG) testImplementation("org.vaadin.stefan", "fullcalendar2", Versions.FULL_CALENDAR) // Pivot Table dependency diff --git a/galite-tests/src/main/kotlin/org/kopi/galite/tests/ui/vaadin/VUITestBase.kt b/galite-tests/src/main/kotlin/org/kopi/galite/tests/ui/vaadin/VUITestBase.kt index 040040be36..fdea0f36ef 100644 --- a/galite-tests/src/main/kotlin/org/kopi/galite/tests/ui/vaadin/VUITestBase.kt +++ b/galite-tests/src/main/kotlin/org/kopi/galite/tests/ui/vaadin/VUITestBase.kt @@ -51,7 +51,7 @@ open class VUITestBase : VApplicationTestBase() { } } -open class GaliteVUITestBase: VUITestBase(), TestingLifecycleHook by TestingLifecycleHookVaadin23_1(TestingLifecycleHook.default) { +open class GaliteVUITestBase: VUITestBase(), TestingLifecycleHook by TestingLifecycleHookVaadin14Default() { init { testingLifecycleHook = this diff --git a/galite-tests/src/test/kotlin/org/kopi/galite/tests/localization/FormLocalizationTests.kt b/galite-tests/src/test/kotlin/org/kopi/galite/tests/localization/FormLocalizationTests.kt index 55c10c3441..6886e8da73 100644 --- a/galite-tests/src/test/kotlin/org/kopi/galite/tests/localization/FormLocalizationTests.kt +++ b/galite-tests/src/test/kotlin/org/kopi/galite/tests/localization/FormLocalizationTests.kt @@ -39,7 +39,6 @@ import com.vaadin.flow.component.grid.Grid import com.vaadin.flow.component.html.Div import com.vaadin.flow.component.html.H4 import com.vaadin.flow.component.html.Span -import com.vaadin.flow.component.icon.IronIcon import com.vaadin.flow.component.orderedlayout.VerticalLayout import org.junit.Ignore diff --git a/galite-tests/src/test/kotlin/org/kopi/galite/tests/ui/vaadin/field/FieldsTests.kt b/galite-tests/src/test/kotlin/org/kopi/galite/tests/ui/vaadin/field/FieldsTests.kt index f63bfd80c8..55f74912e8 100644 --- a/galite-tests/src/test/kotlin/org/kopi/galite/tests/ui/vaadin/field/FieldsTests.kt +++ b/galite-tests/src/test/kotlin/org/kopi/galite/tests/ui/vaadin/field/FieldsTests.kt @@ -33,12 +33,11 @@ import com.github.mvysny.kaributesting.v10._find import com.github.mvysny.kaributesting.v10._get import com.github.mvysny.kaributesting.v10._text -import com.vaadin.componentfactory.EnhancedDialog import com.vaadin.flow.component.Component import com.vaadin.flow.component.Focusable import com.vaadin.flow.component.html.Div import com.vaadin.flow.component.html.Span -import com.vaadin.flow.component.icon.IronIcon +import com.vaadin.flow.component.icon.Icon import com.vaadin.flow.component.orderedlayout.VerticalLayout import org.jetbrains.exposed.sql.selectAll @@ -245,12 +244,12 @@ class FieldsTests : GaliteVUITestBase() { field.focus() - val icon = (field as Component)._get { } + val icon = (field as Component)._get { } icon._clickAndWait(500) // Check that the form is displayed id popUp - _expectOne() + _expectOne() } companion object { diff --git a/galite-tests/src/test/kotlin/org/kopi/galite/tests/ui/vaadin/form/MultipleBlockFormTests.kt b/galite-tests/src/test/kotlin/org/kopi/galite/tests/ui/vaadin/form/MultipleBlockFormTests.kt index 16b140aa5e..3271a8f797 100644 --- a/galite-tests/src/test/kotlin/org/kopi/galite/tests/ui/vaadin/form/MultipleBlockFormTests.kt +++ b/galite-tests/src/test/kotlin/org/kopi/galite/tests/ui/vaadin/form/MultipleBlockFormTests.kt @@ -37,7 +37,6 @@ import com.github.mvysny.kaributesting.v10._get import com.github.mvysny.kaributesting.v10._value import com.github.mvysny.kaributesting.v10.expectRow -import com.vaadin.componentfactory.EnhancedDialog import com.vaadin.flow.component.button.Button import com.vaadin.flow.component.dialog.Dialog import com.vaadin.flow.component.grid.Grid @@ -360,14 +359,14 @@ class MultipleBlockFormTests : GaliteVUITestBase() { val windowsDiv = _get
{ id = "windows" } windowsDiv._click() - _expect { } + _expect { } val windowsContainer = _get { classes = "window-items-container" } val windowsItems = windowsContainer._find { classes = "item" } assertEquals(2, windowsItems.size) windowsItems[0].click() - _expectNone() + _expectNone() var form = multipleForm.findForm() var visibleForm = _get { } @@ -377,7 +376,7 @@ class MultipleBlockFormTests : GaliteVUITestBase() { // get back to multipleBlockSaveForm windowsItems[1].click() - _expectNone() + _expectNone() form = multipleBlockSaveForm.findForm() visibleForm = _get { } assertEquals(form, visibleForm) diff --git a/gradle.properties b/gradle.properties index 6f7fb1822c..8bfcd4130a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,3 +2,13 @@ org.gradle.jvmargs=-Xmx4g # group=org.kopi version=1.5.13 + +# Proxy settings +systemProp.http.proxyHost=proxy.kopileft.com +systemProp.http.proxyPort=3128 +systemProp.https.proxyHost=proxy.kopileft.com +systemProp.https.proxyPort=3128 + +# Bypass proxy for all other IP addresses except those starting with 192.161.191 +systemProp.http.nonProxyHosts=!(192.161.191.*) +systemProp.https.nonProxyHosts=!(192.161.191.*) From efde55891fbc31e1efc098e94cc476ed1dadb426 Mon Sep 17 00:00:00 2001 From: rcherni Date: Thu, 22 Jan 2026 17:34:38 +0100 Subject: [PATCH 02/14] Resolve the dialog display issue --- .../kotlin/org/kopi/galite/visual/ui/vaadin/form/DListDialog.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/form/DListDialog.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/form/DListDialog.kt index e09419dc12..d2c70578e3 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/form/DListDialog.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/form/DListDialog.kt @@ -418,6 +418,7 @@ class DListDialog(private val model: VListDialog) : GridListDialog(), KeyNotifie var currentUI: UI? = null override fun onAttach(attachEvent: AttachEvent) { + super.onAttach(attachEvent) currentUI = attachEvent.ui } From 42bb05015a5f258a772b2634ab8b2b746c982ebe Mon Sep 17 00:00:00 2001 From: rcherni Date: Fri, 23 Jan 2026 12:04:38 +0100 Subject: [PATCH 03/14] isPreventInvalidInput has been removed in favor of setAllowedCharPattern --- .../kotlin/org/kopi/galite/visual/ui/vaadin/field/VDateField.kt | 1 + .../org/kopi/galite/visual/ui/vaadin/field/VDecimalField.kt | 1 + .../org/kopi/galite/visual/ui/vaadin/field/VIntegerField.kt | 1 + .../kopi/galite/visual/ui/vaadin/grid/GridEditorIntegerField.kt | 1 + .../kotlin/org/kopi/galite/visual/ui/vaadin/main/VWindowsMenu.kt | 1 - 5 files changed, 4 insertions(+), 1 deletion(-) diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDateField.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDateField.kt index 626263d97e..d095579dba 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDateField.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDateField.kt @@ -99,6 +99,7 @@ class DatePickerLight : AbstractField(null), HasComponents, textField.className = "input" textField.suffixComponent = icon textField.isClearButtonVisible = true + textField.allowedCharPattern = "\\d" textField.pattern = "[0-9/\\.]*" textField.maxLength = 10 diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDecimalField.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDecimalField.kt index 625e4ccad1..b28d01ec08 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDecimalField.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VDecimalField.kt @@ -35,6 +35,7 @@ class VDecimalField(col: Int, : InputTextField(TextField()) { init { internalField.pattern = "[0-9-.,]*" + internalField.allowedCharPattern = "\\d" val dfs = DecimalFormatSymbols.get(MainWindow.locale) if (dfs!!.decimalSeparator != '.') { diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VIntegerField.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VIntegerField.kt index 170a9431db..9ae685f498 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VIntegerField.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/VIntegerField.kt @@ -26,6 +26,7 @@ class VIntegerField(width : Int, minval : Double, maxval : Double) : InputTextFi init { internalField.pattern = "[0-9-]*" + internalField.allowedCharPattern = "\\d" internalField.element.setProperty("min", minval) internalField.element.setProperty("max", maxval) this.width = width.toString() diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorIntegerField.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorIntegerField.kt index e3298d2392..5dc52c5ddf 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorIntegerField.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/grid/GridEditorIntegerField.kt @@ -30,6 +30,7 @@ class GridEditorIntegerField(width: Int, val minValue: Int, val maxValue: Int) : init { wrappedField.pattern = "[0-9-]*" + wrappedField.allowedCharPattern = "\\d" wrappedField.element.setProperty("min", minValue.toDouble()) wrappedField.element.setProperty("max", maxValue.toDouble()) } diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWindowsMenu.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWindowsMenu.kt index 02a56ee744..5e3442b8b4 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWindowsMenu.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/main/VWindowsMenu.kt @@ -45,7 +45,6 @@ class VWindowsMenu : Dialog(), HasStyle { // do not affect this menu val switchWindowIcon = VaadinIcon.BROWSER.create() val closeIcon = VaadinIcon.CLOSE_CIRCLE.create() - //val header = HorizontalLayout() val switch = HorizontalLayout(headerText, switchWindowIcon) element.themeList.add("k-windowsMenu") From ad28e5a56b911ba5331d61bd92d61690aacb4a34 Mon Sep 17 00:00:00 2001 From: rcherni Date: Fri, 23 Jan 2026 13:52:07 +0100 Subject: [PATCH 04/14] Resolve the logout popup display issue --- .../org/kopi/galite/visual/ui/vaadin/visual/VApplication.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/visual/VApplication.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/visual/VApplication.kt index 16d551202c..538f29ec85 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/visual/VApplication.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/visual/VApplication.kt @@ -209,7 +209,7 @@ abstract class VApplication(override val registry: Registry) : VerticalLayout(), * @param notification The notification to be shown */ protected open fun showNotification(notification: AbstractNotification) { - accessAndPush(currentUI) { + access(currentUI) { notification.show() } } From 0eb7ef2127d075aba348e0753b388c037d0aa8c4 Mon Sep 17 00:00:00 2001 From: rcherni Date: Fri, 23 Jan 2026 14:06:39 +0100 Subject: [PATCH 05/14] Refactor AbstractNotification init: remove redundant footer, streamline assembly, update tests. --- .../visual/ui/vaadin/notif/AbstractNotification.kt | 10 ++++------ .../kotlin/org/kopi/galite/testing/Notification.kt | 6 +++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/notif/AbstractNotification.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/notif/AbstractNotification.kt index 4622ea9590..f602520ebb 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/notif/AbstractNotification.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/notif/AbstractNotification.kt @@ -63,7 +63,6 @@ abstract class AbstractNotification(title: String?, private var message = VSpan() protected var buttons = Div() internal var yesIsDefault = false - val footer = Div() init { element.classList.add("notification") @@ -79,16 +78,15 @@ abstract class AbstractNotification(title: String?, this.title.className = "k-notification-title" this.content.className = "k-notification-content" content.justifyContentMode = FlexComponent.JustifyContentMode.CENTER + setNotificationMessage(message) + setButtons() header.add(this.title) - setNotificationMessage(message) icon.setSize("2.8em") icon.className = "k-notification-icon" - content.add(icon) - content.add(this.message) - add(content, footer) + content.add(icon, this.message) footer.add(buttons) - setButtons() + add(content) } /** diff --git a/galite-testing/src/main/kotlin/org/kopi/galite/testing/Notification.kt b/galite-testing/src/main/kotlin/org/kopi/galite/testing/Notification.kt index 3caf37398b..1cb33e2945 100644 --- a/galite-testing/src/main/kotlin/org/kopi/galite/testing/Notification.kt +++ b/galite-testing/src/main/kotlin/org/kopi/galite/testing/Notification.kt @@ -35,7 +35,7 @@ import com.vaadin.flow.component.orderedlayout.HorizontalLayout * @param confirm true if you want to confirm, false if you want to discard. */ fun expectConfirmNotification(confirm: Boolean) { - val notificationFooter = _get().footer + val notificationFooter = _get() val button = if(confirm) { notificationFooter._get