diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 240baf891a..4b0d8af3d2 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -22,7 +22,7 @@ jobs: strategy: matrix: # test against following Java versions: - java: [ 11, 17 ] + java: [ 17 ] # Steps represent a sequence of tasks that will be executed as part of the job steps: diff --git a/.gitignore b/.gitignore index 1ee9960206..9d3d26981f 100644 --- a/.gitignore +++ b/.gitignore @@ -47,10 +47,11 @@ build **/.npmrc **/frontend/generated/* -# Files by VAADIN 23 +# Files by VAADIN 24 **/vite.config.ts **/vite.generated.ts **/.pnpmfile.cjs +**/bundles/ galite-demo/galite-vaadin/frontend/index.html galite-demo/galite-vaadin-spring/frontend/index.html 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/base/VInputLabel.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/base/VInputLabel.kt index 7182a0c929..b7eb7fa9d6 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/base/VInputLabel.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/base/VInputLabel.kt @@ -17,12 +17,12 @@ */ package org.kopi.galite.visual.ui.vaadin.base -import com.vaadin.flow.component.html.Label +import com.vaadin.flow.component.html.NativeLabel /** * An input label component. */ -class VInputLabel(text: String? = "") : Label(text) { +class VInputLabel(text: String? = "") : NativeLabel(text) { //--------------------------------------------------- // IMPLEMENTATIONS 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/InputTextField.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/InputTextField.kt index 601a7c7ba7..35e73b5bff 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/InputTextField.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/field/InputTextField.kt @@ -46,9 +46,10 @@ import com.vaadin.flow.component.KeyDownEvent import com.vaadin.flow.component.KeyNotifier import com.vaadin.flow.component.KeyPressEvent import com.vaadin.flow.component.KeyUpEvent +import com.vaadin.flow.component.shared.HasPrefix +import com.vaadin.flow.component.shared.HasSuffix import com.vaadin.flow.component.textfield.Autocomplete import com.vaadin.flow.component.textfield.HasAutocomplete -import com.vaadin.flow.component.textfield.HasPrefixAndSuffix import com.vaadin.flow.component.textfield.TextFieldVariant import com.vaadin.flow.dom.DomEvent @@ -61,7 +62,7 @@ import com.vaadin.flow.dom.DomEvent open class InputTextField internal constructor(protected val internalField: C) : HasSize, AbstractCompositeField, String>(null), KeyNotifier, HasStyle, BlurNotifier>, Focusable>, - HasAutocomplete, HasPrefixAndSuffix, JSKeyDownHandler + HasAutocomplete, HasPrefix, HasSuffix, JSKeyDownHandler where C: AbstractField<*, out Any>, C: Focusable<*> /*, HasSelectionHandlers, SuggestionHandler TODO*/ { 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..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,7 +99,7 @@ class DatePickerLight : AbstractField(null), HasComponents, textField.className = "input" textField.suffixComponent = icon textField.isClearButtonVisible = true - textField.isPreventInvalidInput = true + textField.allowedCharPattern = "\\d" textField.pattern = "[0-9/\\.]*" textField.maxLength = 10 @@ -257,4 +257,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..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,7 +35,7 @@ class VDecimalField(col: Int, : InputTextField(TextField()) { init { internalField.pattern = "[0-9-.,]*" - internalField.isPreventInvalidInput = true + 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 a46f2dd3da..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,7 +26,7 @@ class VIntegerField(width : Int, minval : Double, maxval : Double) : InputTextFi init { internalField.pattern = "[0-9-]*" - internalField.isPreventInvalidInput = true + 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/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 } diff --git a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/form/Form.kt b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/form/Form.kt index 15f1f3dd86..a7f11399e6 100644 --- a/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/form/Form.kt +++ b/galite-core/src/main/kotlin/org/kopi/galite/visual/ui/vaadin/form/Form.kt @@ -180,7 +180,7 @@ class Form(val pageCount: Int, val titles: List) : Div(), PositionPanelL pages[i]!!.isVisible = true selectPage(i) if (tabPanel != null) { - tabPanel!!.getComponentAt(currentPage).element.classList.add("selected-tab") + tabPanel!!.getTabAt(currentPage).element.classList.add("selected-tab") } } 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..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,7 +30,7 @@ class GridEditorIntegerField(width: Int, val minValue: Int, val maxValue: Int) : init { wrappedField.pattern = "[0-9-]*" - wrappedField.isPreventInvalidInput = true + 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/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..059f595fd6 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,12 +17,11 @@ */ 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.html.Label +import com.vaadin.flow.component.dialog.Dialog +import com.vaadin.flow.component.html.NativeLabel import com.vaadin.flow.component.icon.VaadinIcon import com.vaadin.flow.component.orderedlayout.HorizontalLayout import com.vaadin.flow.component.orderedlayout.VerticalLayout @@ -33,37 +32,31 @@ 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 { private val items = VerticalLayout() private val windowsItemsMap = mutableMapOf() - private val headerText = Label() + private val headerText = NativeLabel() init { // Make sure that CSS styles specified for the default Menu classes // do not affect this menu val switchWindowIcon = VaadinIcon.BROWSER.create() val closeIcon = VaadinIcon.CLOSE_CIRCLE.create() - 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..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 @@ -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?, @@ -64,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") @@ -80,17 +78,15 @@ abstract class AbstractNotification(title: String?, this.title.className = "k-notification-title" this.content.className = "k-notification-content" content.justifyContentMode = FlexComponent.JustifyContentMode.CENTER - - setHeader(this.title) setNotificationMessage(message) + setButtons() + + header.add(this.title) icon.setSize("2.8em") icon.className = "k-notification-icon" - content.add(icon) - content.add(this.message) - setContent(content) + content.add(icon, this.message) footer.add(buttons) - setButtons() - setFooter(footer) + add(content) } /** 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..f84c87f8b3 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 @@ -37,7 +37,7 @@ import org.kopi.galite.visual.VlibProperties import com.vaadin.flow.component.ComponentEventListener import com.vaadin.flow.component.button.Button import com.vaadin.flow.component.grid.ItemClickEvent -import com.vaadin.flow.component.html.Label +import com.vaadin.flow.component.html.NativeLabel import com.vaadin.flow.component.orderedlayout.HorizontalLayout import com.vaadin.flow.component.orderedlayout.VerticalLayout import com.vaadin.flow.component.textfield.TextField @@ -59,7 +59,7 @@ class DItemTree(model: VItemTree) : DWindow(model), UItemTree { private var tree = Tree(model.root, model.isNoEdit(), model.isLocalised) private var inputDialog: PopupWindow? = null private lateinit var editTextField: TextField - private var errorLabel: Label? = null + private var errorLabel: NativeLabel? = null private var newItem = false private var localisation = false @@ -305,7 +305,7 @@ class DItemTree(model: VItemTree) : DWindow(model), UItemTree { editTextField = TextField("") //editTextField.setWidth(180, Unit.PIXELS); editTextField.className = Styles.TEXT_INPUT - errorLabel = Label(MessageCode.getMessage("VIS-00020", getModel()!!.getTitle())) + errorLabel = NativeLabel(MessageCode.getMessage("VIS-00020", getModel()!!.getTitle())) errorLabel!!.isVisible = false errorLabel!!.addClassName("notificationlabel") popupContent.add(errorLabel) @@ -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/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() } } 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-core/src/main/resources/META-INF/resources/frontend/styles/galite/actor.css b/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/actor.css index 29aa52dbd8..eb5a8da244 100644 --- a/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/actor.css +++ b/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/actor.css @@ -42,10 +42,6 @@ font-size: 12px; } -::part(k-actor) { - background: var(--background-color); - color: #ffffff; -} ::part(k-actor-disabled) { background: var(--background-color); @@ -57,12 +53,12 @@ cursor: pointer; } -::part(k-actor):hover { +#actors vaadin-button:hover { background: var(--actor-hover-color); cursor: pointer; } -.k-window ::part(menu-bar-button) { +.k-window vaadin-menu-bar-button { padding: 0; height: 42px; background: var(--background-color); @@ -90,23 +86,6 @@ padding: 0; } -::part(rootNavigation-open) { - background: #ffffff; - color: var(--background-color); -} - -/** - * Change color of root menu button - */ -::part(rootNavigation) { - color: #ffffff; - background: var(--background-color); -} - -::part(rootNavigation):hover { - cursor: pointer; -} - .actors-navigationPanel > .actor-navigationColumn > .actor-navigationItem:hover { color: var(--background-color); } @@ -126,8 +105,8 @@ cursor: default; } -.actor-navigationColumn > .actor-navigationItem > iron-icon, - .actor-navigationColumn > .actor-navigationItem-disabled > iron-icon { +.actor-navigationColumn > .actor-navigationItem > vaadin-icon, + .actor-navigationColumn > .actor-navigationItem-disabled > vaadin-icon { width: 30px; font-size: 1.5em !important; } @@ -157,7 +136,8 @@ } .k-actor { - color: #676767; + background: var(--background-color); + color: #ffffff; } .k-actor:hover { @@ -168,16 +148,21 @@ vaadin-button.k-actor::after, vaadin-button.k-actor::before { background: transparent; } -.vaadin-menu-item:hover { +vaadin-menu-item:hover { background: var(--background-hover-color); cursor: pointer; } -.vaadin-menu-item:not(:last-child) { +vaadin-menu-item:not(:last-child) { border-bottom: 1px solid #dadada; } -.actor-navigationItem vaadin-icon, .actor-navigationItem-disabled vaadin-icon { +.actor-navigationColumn > .actor-navigationItem > vaadin-icon, .actor-navigationColumn > .actor-navigationItem-disabled > vaadin-icon { width: 30px; font-size: 1em !important; } + +vaadin-button.actors-rootNavigationItem { + color: rgb(255, 255, 255); + background: var(--background-color); +} \ No newline at end of file diff --git a/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/dialog.css b/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/dialog.css index d23bbd0df2..9c8abca1c4 100644 --- a/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/dialog.css +++ b/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/dialog.css @@ -16,23 +16,19 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -.k-popup-window~::part(dialog-content) { +.k-popup-window~::part(content) { padding: 0; } -.k-popup-window .enhanced-dialog-content .k-window { +.k-popup-window~::part(header) { padding: 0; } -.k-popup-window #overlay { - --_enhanced-dialog-content-padding: 0; -} - -.enhanced-dialog-content .k-window { +.k-popup-window .k-window { padding: 0; } -.enhanced-dialog-content .k-window > div { +.k-window > div { width: 100%; } @@ -59,11 +55,3 @@ #v-dialog-footer { background-color: #d9f0f8; } - -/** - * Form Style in Popup - */ -.enhanced-dialog-content .k-window .k-form-page { - max-width: calc(100vw - 70px); - padding: 0; -} diff --git a/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/header.css b/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/header.css index 98388d05ca..1b153f9093 100644 --- a/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/header.css +++ b/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/header.css @@ -28,7 +28,7 @@ #welcome_container { min-width: 270px; - max-width: 300px; + max-width: 360px; --lumo-font-size-m: 0.700rem; } @@ -49,32 +49,10 @@ max-width: 172px; } -/** - * Change the dots' style - */ -#module_list::part(overflow-button) { - --lumo-font-family: Arial, sans-serif; - --lumo-primary-text-color: var(--lumo-shade-70pct); - --lumo-primary-color: var(--lumo-shade-50pct); - --lumo-font-size-m: 0.800rem; - border-right: 1px solid #dadada; - border-radius: 0; - height: 61px; - background-color: var(--lumo-tint); - box-sizing: border-box; -} - -/** - * Change the dots' style when hovered - */ -::part(overflow-button):hover { - background-color: var(--background-hover-color); -} - /** * Modules style */ -:host([theme~="module_list"]) [part~="menu-bar-button"] { +vaadin-menu-bar-button[theme~="module_list"] { --lumo-font-family: Arial, sans-serif; --lumo-primary-text-color: var(--lumo-shade-70pct); --lumo-primary-color: var(--lumo-shade-50pct); @@ -85,7 +63,7 @@ background: var(--lumo-tint); } -:host([theme~="module_list"]) [part~="menu-bar-button"]:hover { +#module_list vaadin-menu-bar-button:hover { background-color: var(--background-hover-color); } @@ -93,22 +71,20 @@ min-width: var(--lumo-size-m) } -#welcome ::part(menu-bar-button) { +#welcome vaadin-menu-bar-button { height : 60px; --lumo-primary-text-color: var(--lumo-shade-70pct); background: var(--lumo-tint); } -#welcome ::part(menu-bar-button):hover { +#welcome vaadin-menu-bar-button:hover { background-color: var(--background-hover-color); } /** * modules submenu style */ -.vaadin-menu-item, .column-item-selector > .checkbox-selector { - color: #8f8f8f; - width: 100%; +vaadin-menu-bar-item, .column-item-selector > .checkbox-selector { font-family: Arial, sans-serif; font-weight: 400; font-style: normal; @@ -127,11 +103,11 @@ cursor: pointer; } -#header ::part(menu-bar-button) { +#header vaadin-menu-bar-button { cursor: pointer; } -#header #welcome ::part(menu-bar-button) { +#header #welcome vaadin-menu-bar-button { min-width: 0; padding: 18px 10px; -} +} \ No newline at end of file diff --git a/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/list.css b/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/list.css index e6abe76635..3039577650 100644 --- a/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/list.css +++ b/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/list.css @@ -96,6 +96,9 @@ vaadin-grid-cell-content, .k-listdialog { :host([theme="k-listdialog-container"]) [part="dialog-content"] { padding: 0; } +vaadin-dialog-overlay[theme~="k-listdialog-container"]::part(content) { + padding: 0; +} #k-upload-content { position: relative; diff --git a/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/notification.css b/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/notification.css index 45bd269fc7..347bd039c3 100644 --- a/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/notification.css +++ b/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/notification.css @@ -24,21 +24,21 @@ font-size: 1.1em !important; } -.k-notification-title { - background: #f2f2f2; -} - .k-notification-content { padding: 14px 47px 25px 47px; color: #676767; + padding: var(--lumo-space-l); } .k-notification-icon { + width: 2.8em; + height: 2.8em; float: left; color: #e37e6a; } .k-notification-message { + white-space: nowrap; padding: 12px 0 16px 16px; text-align: center; font-size: 1.2em !important; @@ -59,16 +59,18 @@ min-width: 128px; } -:host([theme~="notification"]) [part="header"] { - padding: 0; +vaadin-dialog-overlay[theme~="notification"]::part(header) { + background: #f2f2f2; + padding: 0px; } -:host([theme~="notification"]) [part="footer"] { +vaadin-dialog-overlay[theme~="notification"]::part(footer) { background: transparent; padding-bottom: 25px; + justify-content: center; } -:host([theme~="notification"]) [part="dialog-content"] { +vaadin-dialog-overlay[theme~="notification"]::part(content) { overflow-x: auto; } diff --git a/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/styles.css b/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/styles.css index 72addc8d06..718862c72a 100644 --- a/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/styles.css +++ b/galite-core/src/main/resources/META-INF/resources/frontend/styles/galite/styles.css @@ -111,10 +111,3 @@ pre { font-style: normal !important; font-size: 18px !important; } - -/** - * Remove gap from popup form - */ -.enhanced-dialog-content .k-window { - gap: 0 !important; -} diff --git a/galite-demo/galite-vaadin-spring/build.gradle.kts b/galite-demo/galite-vaadin-spring/build.gradle.kts index 39fb4339af..81e4485969 100644 --- a/galite-demo/galite-vaadin-spring/build.gradle.kts +++ b/galite-demo/galite-vaadin-spring/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" 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..465ea03157 100644 --- a/galite-demo/galite-vaadin/build.gradle.kts +++ b/galite-demo/galite-vaadin/build.gradle.kts @@ -21,7 +21,7 @@ import org.kopi.galite.gradle.excludeWebJars plugins { kotlin("jvm") apply true id("io.spring.dependency-management") version "1.0.10.RELEASE" - id("com.vaadin") version "23.3.8" + id("com.vaadin") version "24.3.20" id("org.gretty") version "3.0.6" war } @@ -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-testing/src/main/kotlin/org/kopi/galite/testing/Field.kt b/galite-testing/src/main/kotlin/org/kopi/galite/testing/Field.kt index 5e300148a8..f047cd7b24 100644 --- a/galite-testing/src/main/kotlin/org/kopi/galite/testing/Field.kt +++ b/galite-testing/src/main/kotlin/org/kopi/galite/testing/Field.kt @@ -52,7 +52,6 @@ import com.vaadin.flow.component.AbstractField.ComponentValueChangeEvent import com.vaadin.flow.component.ClickNotifier import com.vaadin.flow.component.Component import com.vaadin.flow.component.HasValue -import com.vaadin.flow.component.checkbox.Checkbox import com.vaadin.flow.component.grid.Grid /** @@ -127,12 +126,7 @@ private fun FormField.editInSimpleBlock(value: T?, mainWindow: MainWindow else (value as Instant).format("yyyy-MM-dd HH:mm:ss") } editorField is BooleanField -> { - val checkbox: Checkbox = if (value == true) { - editorField._get { classes = "true" } - } else { - editorField._get { classes = "false" } - } - checkbox._value = true + editorField._value = value as Boolean } else -> { editorField._value = value 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