diff --git a/.github/ghprcomment.yml b/.github/ghprcomment.yml index 96ed0801b1f..c41d97510ac 100644 --- a/.github/ghprcomment.yml +++ b/.github/ghprcomment.yml @@ -4,6 +4,9 @@ We use [Checkstyle](https://checkstyle.sourceforge.io/) to identify issues. Please carefully follow [the setup guide for the codestyle](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/intellij-13-code-style.html). Afterwards, please [run checkstyle locally](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/intellij-13-code-style.html#run-checkstyle) and fix the issues. + + In case of issues with the import order, double check that you [activated Auto Import](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/intellij-13-code-style.html#enable-proper-import-cleanup). + You can trigger fixing imports by pressing Ctrl+Alt+O to trigger [Optimize Imports](https://www.jetbrains.com/guide/tips/optimize-imports/). - jobName: OpenRewrite message: | Your code currently does not meet JabRef's code guidelines. diff --git a/.moderne/moderne.yml b/.moderne/moderne.yml new file mode 100644 index 00000000000..e90c2b39622 --- /dev/null +++ b/.moderne/moderne.yml @@ -0,0 +1,3 @@ +specs: specs.moderne.ai/v1/cli +java: + selectedJdk: '23' diff --git a/CHANGELOG.md b/CHANGELOG.md index 342df6c1314..48482f765e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ Note that this project **does not** adhere to [Semantic Versioning](https://semv - We added a different background color to the search bar to indicate when the search syntax is wrong. [#11658](https://github.com/JabRef/jabref/pull/11658) - We added a setting which always adds the literal "Cited on pages" text before each JStyle citation. [#11691](https://github.com/JabRef/jabref/pull/11732) - We added a new plain citation parser that uses LLMs. [#11825](https://github.com/JabRef/jabref/issues/11825) +- We added support for `langid` field for biblatex libraries. [#10868](https://github.com/JabRef/jabref/issues/10868) - We added support for modifier keys when dropping a file on an entry in the main table. [#12001](https://github.com/JabRef/jabref/pull/12001) - We added an importer for SSRN URLs. [#12021](https://github.com/JabRef/jabref/pull/12021) - We added a compare button to the duplicates in the citation relations tab to open the "Possible duplicate entries" window. [#11192](https://github.com/JabRef/jabref/issues/11192) @@ -123,6 +124,8 @@ Note that this project **does not** adhere to [Semantic Versioning](https://semv - We fixed an issue where trying to open a library from a failed mounted directory on Mac would cause an error. [#10548](https://github.com/JabRef/jabref/issues/10548) - We fixed an issue when the preview was out of sync. [#9172](https://github.com/JabRef/jabref/issues/9172) - We fixed an issue where identifier paste couldn't work with Unicode REPLACEMENT CHARACTER. [#11986](https://github.com/JabRef/jabref/issues/11986) +- We fixed an issue when click on entry at "Check Integrity" wasn't properly focusing the entry and field. [#11997](https://github.com/JabRef/jabref/issues/11997) +- We fixed an issue with the ui not scaling when changing the font size [#11219](https://github.com/JabRef/jabref/issues/11219) ### Removed diff --git a/README.md b/README.md index 3ca468f400f..c4a5808600f 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,33 @@ We will discuss improvements with you and agree to merge them once the [develope Please also remember to discuss bigger changes early with the core developers to ensure properly spend time and work. Some fundamental design decisions can be found within our list of [Architectural Decision Records](https://devdocs.jabref.org/decisions/). +## Research and Education + +JabRef welcomes research applied to it. +The current list of papers where JabRef helped to enhance science is maintained at . + +The JabRef team also fosters to use JabRef in Software Engineering training. +We offer guidelines for this at . + +When citing JabRef, please use following citation: + +```bibtex +@Article{jabref, + author = {Oliver Kopp and Carl Christian Snethlage and Christoph Schwentker}, + title = {JabRef: BibTeX-based literature management software}, + journal = {TUGboat}, + volume = {44}, + number = {3}, + pages = {441--447}, + doi = {10.47397/tb/44-3/tb138kopp-jabref}, + issn = {0896-3207}, + issue = {138}, + year = {2023}, +} +``` + +DOI (also includes [full text](https://tug.org/TUGboat/tb44-3/tb138kopp-jabref.pdf)): [10.47397/tb/44-3/tb138kopp-jabref](https://doi.org/10.47397/tb/44-3/tb138kopp-jabref). + ## Sponsoring JabRef development is powered by YourKit Java Profiler diff --git a/build.gradle b/build.gradle index 6d798bb3bf3..dee976fee1a 100644 --- a/build.gradle +++ b/build.gradle @@ -54,13 +54,14 @@ java { toolchain { // If this is updated, also update - // - .gitpod.Dockerfile + // - build.gradle -> jacoco -> toolVersion (because JaCoCo does not support newest JDK out of the box. Check versions at https://www.jacoco.org/jacoco/trunk/doc/changes.html) // - .devcontainer/devcontainer.json#L34 and + // - .gitpod.Dockerfile + // - .moderne/moderne.yml // - .github/workflows/deployment*.yml // - .github/workflows/tests*.yml // - .github/workflows/update-gradle-wrapper.yml // - docs/getting-into-the-code/guidelines-for-setting-up-a-local-workspace/intellij-12-build.md - // - build.gradle -> jacoco -> toolVersion (because JaCoCo does not support newest JDK out of the box. Check versions at https://www.jacoco.org/jacoco/trunk/doc/changes.html) languageVersion = JavaLanguageVersion.of(23) // See https://docs.gradle.org/current/javadoc/org/gradle/jvm/toolchain/JvmVendorSpec.html for a full list // vendor = JvmVendorSpec.AMAZON @@ -196,7 +197,7 @@ dependencies { implementation 'io.github.thibaultmeyer:cuid:2.0.3' // endregion - implementation 'io.github.java-diff-utils:java-diff-utils:4.12' + implementation 'io.github.java-diff-utils:java-diff-utils:4.15' implementation 'info.debatty:java-string-similarity:2.0.0' implementation 'com.github.javakeyring:java-keyring:1.0.4' @@ -255,7 +256,7 @@ dependencies { exclude group: 'tech.units' } // Required by gemsfx - implementation 'tech.units:indriya:2.2' + implementation 'tech.units:indriya:2.2.1' // Required by gemsfx and langchain4j implementation ('com.squareup.retrofit2:retrofit:2.11.0') { exclude group: 'com.squareup.okhttp3' @@ -267,7 +268,7 @@ dependencies { implementation 'org.jsoup:jsoup:1.18.1' implementation 'com.konghq:unirest-java-core:4.4.5' implementation 'com.konghq:unirest-modules-gson:4.4.5' - implementation 'org.apache.httpcomponents.client5:httpclient5:5.4' + implementation 'org.apache.httpcomponents.client5:httpclient5:5.4.1' // endregion implementation 'org.slf4j:slf4j-api:2.0.16' @@ -336,7 +337,7 @@ dependencies { // region AI implementation 'dev.langchain4j:langchain4j:0.36.0' // Even though we use jvm-openai for LLM connection, we still need this package for tokenization. - implementation('dev.langchain4j:langchain4j-open-ai:0.36.0') { + implementation('dev.langchain4j:langchain4j-open-ai:0.36.2') { exclude group: 'com.squareup.okhttp3' exclude group: 'com.squareup.retrofit2', module: 'retrofit' exclude group: 'org.jetbrains.kotlin' @@ -346,11 +347,11 @@ dependencies { exclude group: 'com.squareup.retrofit2', module: 'retrofit' exclude group: 'org.jetbrains.kotlin' } - implementation('dev.langchain4j:langchain4j-google-ai-gemini:0.36.0') { + implementation('dev.langchain4j:langchain4j-google-ai-gemini:0.36.2') { exclude group: 'com.squareup.okhttp3' exclude group: 'com.squareup.retrofit2', module: 'retrofit' } - implementation('dev.langchain4j:langchain4j-hugging-face:0.36.0') { + implementation('dev.langchain4j:langchain4j-hugging-face:0.36.2') { exclude group: 'com.squareup.okhttp3' exclude group: 'com.squareup.retrofit2', module: 'retrofit' exclude group: 'org.jetbrains.kotlin' @@ -367,7 +368,7 @@ dependencies { exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8' } // GemxFX also (transitively) depends on kotlin - implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21' + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.1.0' // endregion implementation 'commons-io:commons-io:2.18.0' @@ -376,9 +377,9 @@ dependencies { implementation 'io.github.adr:e-adr:2.0.0-SNAPSHOT' implementation 'io.zonky.test:embedded-postgres:2.1.0' - implementation enforcedPlatform('io.zonky.test.postgres:embedded-postgres-binaries-bom:17.0.0') + implementation enforcedPlatform('io.zonky.test.postgres:embedded-postgres-binaries-bom:17.2.0') - testImplementation 'io.github.classgraph:classgraph:4.8.177' + testImplementation 'io.github.classgraph:classgraph:4.8.179' testImplementation 'org.junit.jupiter:junit-jupiter:5.11.3' testImplementation 'org.junit.platform:junit-platform-launcher:1.11.3' diff --git a/buildres/linux/jabref.spec b/buildres/linux/jabref.spec index 9ff20288404..266d754cc7d 100644 --- a/buildres/linux/jabref.spec +++ b/buildres/linux/jabref.spec @@ -4,8 +4,17 @@ Version: APPLICATION_VERSION Release: APPLICATION_RELEASE License: APPLICATION_LICENSE_TYPE Vendor: APPLICATION_VENDOR -Prefix: %{dirname:APPLICATION_DIRECTORY} + +%if "xAPPLICATION_URL" != "x" +URL: APPLICATION_URL +%endif + +%if "xAPPLICATION_PREFIX" != "x" +Prefix: APPLICATION_PREFIX +%endif + Provides: APPLICATION_PACKAGE + %if "xAPPLICATION_GROUP" != "x" Group: APPLICATION_GROUP %endif @@ -16,14 +25,20 @@ Autoreq: 0 Requires: PACKAGE_DEFAULT_DEPENDENCIES PACKAGE_CUSTOM_DEPENDENCIES %endif -#avoid ARCH subfolder -%define _rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm - #comment line below to enable effective jar compression #it could easily get your package size from 40 to 15Mb but #build time will substantially increase and it may require unpack200/system java to install %define __jar_repack %{nil} +# on RHEL we got unwanted improved debugging enhancements +%define _build_id_links none + +%define package_filelist %{_builddir}/%{name}.files +%define app_filelist %{_builddir}/%{name}.app.files +%define filesystem_filelist %{_builddir}/%{name}.filesystem.files + +%define default_filesystem / /opt /usr /usr/bin /usr/lib /usr/local /usr/local/bin /usr/local/lib + %description APPLICATION_DESCRIPTION @@ -37,23 +52,34 @@ APPLICATION_DESCRIPTION rm -rf %{buildroot} install -d -m 755 %{buildroot}APPLICATION_DIRECTORY cp -r %{_sourcedir}APPLICATION_DIRECTORY/* %{buildroot}APPLICATION_DIRECTORY +if [ "$(echo %{_sourcedir}/lib/systemd/system/*.service)" != '%{_sourcedir}/lib/systemd/system/*.service' ]; then + install -d -m 755 %{buildroot}/lib/systemd/system + cp %{_sourcedir}/lib/systemd/system/*.service %{buildroot}/lib/systemd/system +fi %if "xAPPLICATION_LICENSE_FILE" != "x" %define license_install_file %{_defaultlicensedir}/%{name}-%{version}/%{basename:APPLICATION_LICENSE_FILE} - install -d -m 755 %{buildroot}%{dirname:%{license_install_file}} - install -m 644 APPLICATION_LICENSE_FILE %{buildroot}%{license_install_file} + install -d -m 755 "%{buildroot}%{dirname:%{license_install_file}}" + install -m 644 "APPLICATION_LICENSE_FILE" "%{buildroot}%{license_install_file}" +%endif +(cd %{buildroot} && find . -path ./lib/systemd -prune -o -type d -print) | sed -e 's/^\.//' -e '/^$/d' | sort > %{app_filelist} +{ rpm -ql filesystem || echo %{default_filesystem}; } | sort > %{filesystem_filelist} +comm -23 %{app_filelist} %{filesystem_filelist} > %{package_filelist} +sed -i -e 's/.*/%dir "&"/' %{package_filelist} +(cd %{buildroot} && find . -not -type d) | sed -e 's/^\.//' -e 's/.*/"&"/' >> %{package_filelist} +%if "xAPPLICATION_LICENSE_FILE" != "x" + sed -i -e 's|"%{license_install_file}"||' -e '/^$/d' %{package_filelist} %endif -%files +%files -f %{package_filelist} %if "xAPPLICATION_LICENSE_FILE" != "x" - %license %{license_install_file} - %{dirname:%{license_install_file}} + %license "%{license_install_file}" %endif -# If installation directory for the application is /a/b/c, we want only root -# component of the path (/a) in the spec file to make sure all subdirectories -# are owned by the package. -%(echo APPLICATION_DIRECTORY | sed -e "s|\(^/[^/]\{1,\}\).*$|\1|") %post +package_type=rpm +LAUNCHER_AS_SERVICE_SCRIPTS +DESKTOP_COMMANDS_INSTALL +LAUNCHER_AS_SERVICE_COMMANDS_INSTALL # Install the native-messaging host script for firefox/chrome/chromium install -D -m0755 /opt/jabref/lib/native-messaging-host/firefox/org.jabref.jabref.json /usr/lib/mozilla/native-messaging-hosts/org.jabref.jabref.json install -D -m0755 /opt/jabref/lib/native-messaging-host/chromium/org.jabref.jabref.json /etc/chromium/native-messaging-hosts/org.jabref.jabref.json @@ -61,9 +87,23 @@ install -D -m0755 /opt/jabref/lib/native-messaging-host/chromium/org.jabref.jabr # Trigger an auto-install of the browser addon for chrome/chromium browsers install -D -m0644 /opt/jabref/lib/native-messaging-host/chromium/bifehkofibaamoeaopjglfkddgkijdlh.json /opt/google/chrome/extensions/bifehkofibaamoeaopjglfkddgkijdlh.json install -D -m0644 /opt/jabref/lib/native-messaging-host/chromium/bifehkofibaamoeaopjglfkddgkijdlh.json /usr/share/google-chrome/extensions/bifehkofibaamoeaopjglfkddgkijdlh.json -DESKTOP_COMMANDS_INSTALL + + +%pre +package_type=rpm +COMMON_SCRIPTS +LAUNCHER_AS_SERVICE_SCRIPTS +if [ "$1" -gt 1 ]; then + :; LAUNCHER_AS_SERVICE_COMMANDS_UNINSTALL +fi %preun +package_type=rpm +COMMON_SCRIPTS +DESKTOP_SCRIPTS +LAUNCHER_AS_SERVICE_SCRIPTS +DESKTOP_COMMANDS_UNINSTALL +LAUNCHER_AS_SERVICE_COMMANDS_UNINSTALL # Remove the native-messaging hosts script only if relative to the deb package for NATIVE_MESSAGING_JSON in "/usr/lib/mozilla/native-messaging-hosts/org.jabref.jabref.json"\ "/etc/chromium/native-messaging-hosts/org.jabref.jabref.json"\ @@ -75,7 +115,6 @@ done # Remove the auto-install triggers of the browser addon for chrom/chromium rm -f /opt/google/chrome/extensions/bifehkofibaamoeaopjglfkddgkijdlh.json || true rm -f /usr/share/google-chrome/extensions/bifehkofibaamoeaopjglfkddgkijdlh.json || true -DESKTOP_SCRIPTS -DESKTOP_COMMANDS_UNINSTALL + %clean diff --git a/docs/decisions/0034-use-citation-key-for-grouping-chat-messages.md b/docs/decisions/0034-use-citation-key-for-grouping-chat-messages.md index f6ef24dc69f..e807bd758f8 100644 --- a/docs/decisions/0034-use-citation-key-for-grouping-chat-messages.md +++ b/docs/decisions/0034-use-citation-key-for-grouping-chat-messages.md @@ -7,25 +7,25 @@ parent: Decision Records ## Context and Problem Statement -Because we store chat messages not inside a BIB entry in `.bib` filecc, the chats file is represented as a map to -BIB entry and a list of messages. We need to specify the key of this map. Turns out, it is not that easy. +As we store chat messages not inside a BibTeX entry in `.bib` file, the chats file is represented as a map to +BibTeX entry and a list of messages. We need to specify the key of this map. Turns out, it is not that easy. ## Decision Drivers -* The key should exist for every BIB entry -* The key should be unique along other BIB entries in one library file -* The key should not change at run-time, between launches of JabRef, and should be cross-platform (most important) +* The key should exist for every BibTeX entry +* The key should be unique along other BibTeX entries in one library file +* It is assumed that the key does not change at run-time, between launches of JabRef, and should be cross-platform (most important) ## Considered Options * `BibEntry` Java object * `BibEntry`'s `id` -* `BibEntry`'s Citation key +* `BibEntry`'s citation key * `BibEntry`'s `ShareId` ## Decision Outcome -Chosen option: "`BibEntry`'s Citation key", because this is the only choice that complains to the third point in Decision Drivers. +Chosen option: "`BibEntry`'s citation key", because this is the only choice that complies to the third point in Decision Drivers. ### Positive Consequences @@ -50,11 +50,11 @@ This identifier is created on each load of a library (and not stored permanently Very bad, for the same reasons as `BibEntry` Java object. -### `BibEntry`'s Citation key +### `BibEntry`'s citation key * Good, because it is cross-platform, stable (meaning stays the same across launches of JabRef) * Bad, because it is not guaranteed that citation key exists on `BibEntry`, and that it is unique across other -`BibEntriy`'s' in the library +BibTeX entries in the library ### `BibEntry`'s `ShareId` @@ -67,3 +67,5 @@ This approach cannot be used here, because there is no server running which we c ## More Information Refer to [issue #160](https://github.com/JabRef/jabref/issues/160) in JabRef main repository + +[ADR-038](0038-use-entryId-for-bibentries.md) takes another option, because it re-generates the index at each start of JabRef. diff --git a/docs/decisions/0036-use-textarea-for-chat-content.md b/docs/decisions/0036-use-textarea-for-chat-content.md index 5f01bebf35f..f54b7fe56f8 100644 --- a/docs/decisions/0036-use-textarea-for-chat-content.md +++ b/docs/decisions/0036-use-textarea-for-chat-content.md @@ -3,7 +3,7 @@ nav_order: 0036 parent: Decision Records --- -# Use TextArea for Chat Message Content +# Use `TextArea` for Chat Message Content ## Context and Problem Statement @@ -41,7 +41,7 @@ which for now we value more than Markdown rendering. ### Use a third-party package -There seems to be only one package for JavaFX that provides a ready-to-use UI node for Markdown rendering. +There seems to be [only one package](https://github.com/JPro-one/markdown-javafx-renderer) for JavaFX that provides a ready-to-use UI node for Markdown rendering. * Good, because it is easy to implement * Good, because it renders Markdown @@ -77,8 +77,10 @@ There seems to be only one package for JavaFX that provides a ready-to-use UI no ## More Information +This ADR is highly linked to [ADR-0042](./0042-use-webview-for-summarization-content.md). + Actually we used an `ExpandingTextArea` from `GemsFX` package so the content can occupy as much space as it needs in the `ScrollPane`. About the selection and copying, this goes down to fundamental issue from JavaFX. -`Text` and `Label` cannot be selected by any means. +`Text` and `Label` as a whole or a part [cannot be selected and/or copied](https://bugs.openjdk.org/browse/JDK-8091644). diff --git a/docs/decisions/0042-use-webview-for-summarization-content.md b/docs/decisions/0042-use-webview-for-summarization-content.md new file mode 100644 index 00000000000..0eaa0e40058 --- /dev/null +++ b/docs/decisions/0042-use-webview-for-summarization-content.md @@ -0,0 +1,37 @@ +--- +nav_order: 0042 +parent: Decision Records +--- + +# Use `WebView` for Chat Message Content + +## Context and Problem Statement + +This decision record concerns the UI component that is used for rendering the content of AI summaries. + +## Decision Drivers + +Same as in [ADR-0036](./0036-use-textarea-for-chat-content.md). + +## Considered Options + +Same as in [ADR-0036](./0036-use-textarea-for-chat-content.md). + +## Decision Outcome + +Chosen option: "Use `WebView`". + +Some of the options does not support selecting and copying of text. Some options do not render Markdown. + +However, in contrary to [ADR-0036](./0036-use-textarea-for-chat-content.md), we chose here a `WebView`, instead of `TextArea`, because there is only one summary content in UI (when user switches entries, no new components are added, rather old ones are *rebinding* to new entry). It would hurt the performance if we used `WebView` for messages, as there could be a lot of messages in one chat. + +## Pros and Cons of the Options + +Same as in [ADR-0036](./0036-use-textarea-for-chat-content.md). + +## More Information + +This ADR is highly linked to [ADR-0036](./0036-use-textarea-for-chat-content.md). + +About the selection and copying, this goes down to fundamental issue from JavaFX. +`Text` and `Label` as a whole or a part [cannot be selected and/or copied](https://bugs.openjdk.org/browse/JDK-8091644). diff --git a/rewrite.yml b/rewrite.yml index ecaf9b7b001..e3842701b47 100644 --- a/rewrite.yml +++ b/rewrite.yml @@ -209,7 +209,8 @@ recipeList: - org.openrewrite.java.testing.junit5.RemoveDuplicateTestTemplates - org.openrewrite.java.testing.junit5.RemoveTryCatchFailBlocks - org.openrewrite.java.testing.junit5.LifecycleNonPrivate - - org.openrewrite.java.testing.junit5.StaticImports + # Does not work on some JDK releases. See https://github.com/openrewrite/rewrite-logging-frameworks/issues/177. + # - org.openrewrite.java.testing.junit5.StaticImports # Logging - org.openrewrite.java.logging.slf4j.Slf4jBestPractices diff --git a/src/main/java/org/jabref/gui/Base.css b/src/main/java/org/jabref/gui/Base.css index 635c295af1c..af7759a1453 100644 --- a/src/main/java/org/jabref/gui/Base.css +++ b/src/main/java/org/jabref/gui/Base.css @@ -341,6 +341,10 @@ TextFlow > .hyperlink:visited, -fx-underline: true; } +.TextFlow > .embeddedHyperlink { + -fx-padding: 0.166667em 0.25em 0.166667em 0.25em; +} + .glyph-icon { /* This adjusts text alignment within the bounds of text nodes so that the text is always vertically centered within the bounds. Based on @@ -395,7 +399,7 @@ TextFlow > .tooltip-text-monospaced { .combo-box-base:editable > .arrow-button { -fx-background-color: transparent; -fx-background-insets: 0; - -fx-background-radius: 4px; + -fx-background-radius: 0.25em; -fx-text-fill: -fx-text-base-color; } @@ -403,8 +407,8 @@ TextFlow > .tooltip-text-monospaced { .button { -fx-background-color: transparent; -fx-border-color: -fx-outer-border; /* rgba(0, 0, 0, 0.23); */ - -fx-border-width: 1px; - -fx-border-radius: 4px; + -fx-border-width: 0.062em; + -fx-border-radius: 0.25em; -fx-padding: 0.5em 1em 0.5em 1em; } @@ -435,7 +439,7 @@ TextFlow > .tooltip-text-monospaced { } .text-button { - -fx-border-width: 0px; + -fx-border-width: 0; } .contained-button { @@ -446,7 +450,7 @@ TextFlow > .tooltip-text-monospaced { .icon-buttonNoSpaceBottom, .icon-buttonNoSpaceTop, .icon-button { - -fx-border-width: 0px; + -fx-border-width: 0; -fx-background-color: -jr-icon-background; -fx-padding: 0.5em; } @@ -491,7 +495,7 @@ TextFlow > .tooltip-text-monospaced { .progress-indicator { -fx-progress-color: -jr-theme; - -fx-border-width: 0px; + -fx-border-width: 0; -fx-background-color: -jr-icon-background; } @@ -514,13 +518,13 @@ TextFlow > .tooltip-text-monospaced { .check-box > .box { -fx-border-color: -fx-outer-border; /* rgba(0, 0, 0, 0.54); */ - -fx-border-width: 2px; - -fx-border-radius: 1px; + -fx-border-width: 0.125em; + -fx-border-radius: 0.062em; -fx-padding: 0.1em 0.1em 0.2em 0.2em; } .check-box:selected > .box { - -fx-background-insets: 2px; + -fx-background-insets: 0.125em; -fx-border-color: -jr-checked; -fx-background-color: -jr-checked; } @@ -539,7 +543,7 @@ TextFlow > .tooltip-text-monospaced { -fx-background-radius: 1.0em; /* large value to make sure this remains circular */ -fx-padding: 0.35em; /* padding from outside edge to the inner dot */ -fx-background-color: rgba(0, 0, 0, 0.54), -fx-control-inner-background; - -fx-background-insets: 0, 2px; + -fx-background-insets: 0, 0.125em; } .radio-button:selected > .radio { @@ -646,7 +650,7 @@ TextFlow > .tooltip-text-monospaced { } .tab-pane > .tab-header-area > .headers-region > .tab .glyph-icon { - -glyph-size: 13px; + -glyph-size: 0.812em; -fx-fill: -fx-mid-text-color; -fx-text-fill: -fx-mid-text-color; } @@ -1001,7 +1005,7 @@ TextFlow > .tooltip-text-monospaced { .sidePaneComponentHeader .ikonli-font-icon { -fx-fill: -jr-sidepane-header-color; -fx-text-fill: -jr-sidepane-header-color; - -fx-font-size: 16px; + -fx-font-size: 1.0em; -fx-icon-color: -jr-theme-text; } @@ -1242,7 +1246,7 @@ We want to have a look that matches our icons in the tool-bar */ .notification-bar > .pane { -fx-background-color: -jr-gray-3; - -fx-background-radius: 4px; + -fx-background-radius: 0.25em; } .notification-bar > .pane > .title, @@ -1254,17 +1258,17 @@ We want to have a look that matches our icons in the tool-bar */ .notification-bar > .pane { -fx-effect: dropshadow(three-pass-box, rgba(0, 0, 0, 0.3), 9, 0, 0, 2); - -fx-padding: 6px 7px 6px 32px; - -fx-background-radius: 0px; - -fx-border-radius: 0px; + -fx-padding: 0.375em 0.438em 0.375em 2.0em; + -fx-background-radius: 0; + -fx-border-radius: 0; } .notification-bar > .pane > .button-bar > .container { - -fx-padding: 0px 24px 0px 0px; + -fx-padding: 0.0em 1.5em 0.0em 0.0em; } .notification-bar > .pane > .label { - -fx-graphic-text-gap: 8px; + -fx-graphic-text-gap: 0.5em; } .notification-pane .notification-bar > .pane .close-button > .graphic { @@ -1272,7 +1276,7 @@ We want to have a look that matches our icons in the tool-bar */ } .notification-bar > .pane > .label > .ikonli-font-icon { - -fx-icon-size: 16px; + -fx-icon-size: 1.0em; -fx-icon-color: -jr-base; } @@ -1293,19 +1297,19 @@ We want to have a look that matches our icons in the tool-bar */ .color-picker:focused, .color-picker { -fx-background-color: transparent, transparent, transparent, transparent; - -fx-background-radius: 0px; - -fx-background-insets: 0px; + -fx-background-radius: 0; + -fx-background-insets: 0; -fx-effect: null; } .color-palette { -fx-background-color: -fx-background; - -fx-background-radius: 0px; - -fx-background-insets: 0px; + -fx-background-radius: 0; + -fx-background-insets: 0; } .color-palette-region .button { - -fx-border-width: 0px; + -fx-border-width: 0; } .bibEntry { @@ -1428,8 +1432,8 @@ We want to have a look that matches our icons in the tool-bar */ } .tags-field { - -fx-pref-height: 30px; - -fx-margin: 0em; + -fx-pref-height: 1.875em; + -fx-margin: 0; -fx-border-style: none; -fx-background-color: -fx-outer-border, -fx-control-inner-background; } @@ -1478,7 +1482,7 @@ We want to have a look that matches our icons in the tool-bar */ .rating { -fx-skin: "org.jabref.gui.util.CustomRatingSkin"; - -fx-padding: 0.5em 0px 0px 0px; + -fx-padding: 0.5em 0.0em 0.0em 0.0em; } .rating > .container > .button { @@ -1503,8 +1507,6 @@ We want to have a look that matches our icons in the tool-bar */ -fx-background-radius: 10; } -/* region: fix for making text area round corners (source: https://stackoverflow.com/a/49617953) */ - .chat-message-text-area .scroll-pane { -fx-background-color: transparent; } @@ -1517,10 +1519,7 @@ We want to have a look that matches our icons in the tool-bar */ -fx-background-color: transparent; } -/* endregion */ - -/* region: maintable css */ - +/* MainTable */ .main-table .column-icon { -fx-alignment: baseline-center; @@ -1731,5 +1730,696 @@ We want to have a look that matches our icons in the tool-bar */ -fx-effect: dropshadow(three-pass-box, rgba(0, 0, 0, 0.6), 8, 0.0, 0, 0); } +/* AboutDialog */ +#aboutDialog .about-heading { + -fx-font-size: 30; + -fx-text-fill: -jr-theme; +} + +#aboutDialog .about-heading:pressed { + -fx-text-fill: -jr-selected; +} + +#aboutDialog .top-padding { + -fx-padding: 5 0 0 0; +} + +#aboutDialog .dev-heading { + -fx-font-size: 18; + -fx-padding: -10 0 0 0; +} + +#aboutDialog .sub-heading { + -fx-font-size: 18; + -fx-padding: 0.312em; +} + +#aboutDialog .about-top { + -fx-padding: 0 5 15 5; +} + +#aboutDialog .space { + -fx-padding: 0 5 0 5; +} + +#aboutDialog .space-after { + -fx-padding: 0 5 0 0; +} + +#aboutDialog .info-sections { + -fx-padding: 0.312em; +} + +#aboutDialog .contrib-section { + -fx-padding: 5 5 10 5; +} + +#aboutDialog .logo-pane { + -fx-fill: transparent; +} + +#aboutDialog .logo-pane SVGPath { + -fx-fill: #4f5f8f; +} + +/* DocumentViewer */ +#documentViewerDialog #mainPane { + -fx-background-color: -fx-accented-background; + -fx-padding: 0; +} + +#documentViewerDialog .document-viewer .page { + -fx-padding: 0em 0em 1em 0em; + -fx-background-insets: 0; +} + +/* EntryEditor */ +#entryEditor .editorPane { + -fx-hgap: 10; + -fx-vgap: 6; + -fx-background-color: -fx-control-inner-background; + -fx-padding: 5 5 5 15; +} + +#entryEditor Text { + -fx-text-fill: -fx-text-base-color; + -fx-fill: -fx-text-base-color; +} + +#entryEditor .date-picker > .date-picker-display-node { + -fx-text-origin: baseline; +} + +#entryEditor .date-picker > .date-picker-display-node *.text { + -fx-text-origin: bottom; +} + +#entryEditor .combo-box > *.text { + -fx-text-origin: baseline; +} + +#entryEditor #typeLabel { + -fx-padding: 0.1em; + -fx-font-size: 1.166667em; + -fx-font-weight: bold; + -fx-text-fill: -jr-theme-text; +} + +#entryEditor #typeLabel:hover { + -fx-padding: 0.1em; + -fx-font-size: 1.166667em; + -fx-font-weight: bold; + -fx-background-color: -jr-icon-background-active; +} + +#entryEditor #typeLabel .context-menu { + -fx-font-size: 0.92em; + -fx-font-weight: normal; +} + +#entryEditor #typeLabel .tooltip { + -fx-font-size: 1em; + -fx-font-weight: normal; +} + +#entryEditor .icon-button.narrow { + -fx-padding: 0.1em; +} + +#entryEditor .icon-buttonNoSpaceBottom.narrow { + -fx-padding: 0.1em 0.1em -0.2em 0.1em; +} + +#entryEditor .icon-buttonNoSpaceTop.narrow { + -fx-padding: -0.2em 0.1em 0.1em 0.1em; +} + +#entryEditor .tool-bar { + -fx-background-color: -jr-background-alt; + -fx-background-insets: 0; +} + +#entryEditor .tool-bar .glyph-icon { + -glyph-size: 1.0em; + -fx-font-size: 2em; + -fx-fill: -jr-theme-text; + -fx-text-fill: -jr-theme-text; +} + +#entryEditor .warning-icon { + -fx-fill: -jr-warn; +} + +#entryEditor .error-icon { + -fx-text-fill: -jr-error; + -fx-fill: -jr-error; +} + +#entryEditor .tooltip-warning { + -fx-background-color: -jr-warn; +} + +#entryEditor .tooltip-error { + -fx-background-color: -jr-error; +} + +#entryEditor .code-area .context-menu { + -fx-font-family: sans-serif; +} + +#entryEditor #related-articles-tab { + -fx-padding: 20 20 20 20; + -fx-background-color: -fx-control-inner-background; +} + +#entryEditor .ai-tab { + -fx-padding: 20 20 20 20; + -fx-background-color: -fx-control-inner-background; +} + +#entryEditor .gdpr-notice { + -fx-border-color: -jr-warn; + -fx-border-insets: 5; + -fx-border-style: dashed; + -fx-border-width: 2; + -fx-padding: 12; + -fx-font-size: 1.3em; +} + +#entryEditor .recommendation-item { + -fx-padding: 0 0 0 20; +} + +#entryEditor #bibtexSourceCodeArea { + -fx-padding: 4 4 4 4; + -fx-background-color: -fx-control-inner-background; +} + +#entryEditor #bibtexSourceCodeArea .search { + -rtfx-background-color: #ffff00; + -fx-fill: #7800A9 ; + -fx-font-size: 1.2em; + -fx-font-weight: bolder; +} + +#entryEditor #citationsPane { + -fx-padding: 0; + -fx-background-color: -fx-control-inner-background; +} + +#entryEditor #citationsPane *, +#entryEditor #scitePane Label, +#entryEditor #scitePane Text { + -fx-fill: -fx-text-background-color; +} + +#entryEditor .heading { + -fx-font-size: 1.5em; + -fx-font-weight: bold; +} + +#entryEditor .description { + -fx-font-style: italic; +} + +#entryEditor .scite-tallies-label { + -fx-font-size: 1.5em; + -fx-font-weight: bold; +} + +#entryEditor .scite-error-box { + -fx-padding: 30 0 0 30; +} + +#entryEditor .scite-message-box { + -fx-padding: 30 0 0 30; +} + +#entryEditor #scite-error-label { + -fx-font-size: 1.5em; + -fx-font-weight: bold; + -fx-text-fill: -jr-error; +} + +/* ErrorConsole */ + +#errorConsole .list-content { + -fx-padding: 0.625em; +} + +#errorConsole .info-section { + -fx-padding: 0.625em; + -fx-background-color: -fx-background; +} + +#errorConsole .info-section .glyph-icon { + -fx-font-size: 24.0; +} + +#errorConsole .exception .glyph-icon { + -fx-font-size: 18.0; + -fx-fill: -jr-error; +} + +#errorConsole .output .glyph-icon { + -fx-font-size: 18.0; + -fx-fill: -jr-warn; +} + +#errorConsole .log .glyph-icon { + -fx-font-size: 18.0; + -fx-fill: -jr-info; +} + +#errorConsole .custom-buttons { + -fx-padding: 0.312em; +} + +#errorConsole .exception { + -fx-text-fill: -fx-text-base-color; +} + +#errorConsole .output { + -fx-text-fill: -fx-text-base-color; +} + +#errorConsole .log { + -fx-text-fill: -fx-text-base-color; +} + +/* GroupTree */ + +#groupTree:focused, +#groupTree:filled:selected { + -fx-background-color: -jr-sidepane-background; + -fx-table-cell-border-color: transparent; +} + +#groupTree, .tree-table-row-cell { + -fx-background-color: -jr-sidepane-background; +} + +#groupTree .tree-table-cell { + -fx-padding: 0.35em 0em 0.25em 0em; +} + +#groupTree .numberColumn { + -fx-alignment: top-right; + -fx-padding: 0.35em 0.2em 0.25em 0em; +} + +#groupTree .numberColumn > .hits { + -fx-font-size: 0.75em; + -fx-background-color: -jr-group-hits-bg; + -fx-padding: 0.4em 0.4em 0.4em 0.4em; + -fx-background-insets: 0; + -fx-background-radius: 0.7em; +} + +#groupTree .numberColumn > .hits .text { + -fx-fill: -jr-group-hits-fg; +} + +#groupTree .expansionNodeColumn { + -fx-alignment: top-right; +} + +#groupTree .tree-table-row-cell:dragOver-bottom { + -fx-border-color: -jr-drag-target; + -fx-border-width: 0 0 2 0; + -fx-padding: 0 0 -2 0; +} + +#groupTree .tree-table-row-cell:dragOver-center { + -fx-border-color: -jr-drag-target; + -fx-border-width: 1 1 1 1; + -fx-padding: -1 -1 -1 -1; + -fx-background-color: -jr-drag-target-hover; +} + +#groupTree .tree-table-row-cell:dragOver-top { + -fx-border-color: -jr-drag-target; + -fx-border-width: 2 0 0 0; + -fx-padding: -2 0 0 0; +} + +#groupTree .tree-table-row-cell:sub > .tree-table-cell { + -fx-padding: 0.20em 0em 0.20em 0em; +} + +#groupTree .tree-table-row-cell:sub > .numberColumn { + -fx-padding: 0.20em 0.2em 0.20em 0em; +} + +#groupTree .tree-table-row-cell:root { + -fx-border-width: 0 0 1 0; + -fx-border-color: -jr-separator; +} + +#groupTree .tree-table-row-cell:root > .tree-table-cell { + -fx-padding: 0.65em 0em 0.65em 1em; +} + +#groupTree .tree-table-row-cell:root > .numberColumn { + -fx-padding: 0.40em 0.2em 0.40em 0em; +} + +#groupTree .tree-table-row-cell:root > .expansionNodeColumn { + -fx-padding: 0.45em 0.2em 0.45em 0.2em; +} + +#groupTree .tree-table-row-cell:empty { + -fx-background-color: transparent; /* hide cells which are not bound to a group */ +} + +#groupTree .column-header-background { + visibility: hidden; /* hide column header */ + -fx-padding: -0.8em; +} + +#groupTree .tree-table-row-cell > .tree-table-cell > .tree-disclosure-node > .arrow { + -fx-background-color: -fx-mid-text-color; + -fx-max-height: 0.5em; + -fx-max-width: 0.5em; + -fx-padding: 0.333333em 0.229em 0.333333em 0.229em; /* 4 */ + -fx-shape: "m64,416l96,96l256,-256l-256,-256l-96,96l160,160l-160,160z"; +} + +#groupTree .tree-table-row-cell:expanded > .tree-table-cell > .tree-disclosure-node > .arrow { + -fx-rotate: 90; +} + +#groupTree .tree-table-row-cell > .tree-table-cell > .icon { + -fx-translate-x: -0.4em; +} + +#groupFilterBar { + -fx-background-color: -jr-sidepane-header-background; + -fx-border-color: -jr-separator; + -fx-border-width: 1 0 0 0; + -fx-padding: 0em 1em 0em 1em; +} + +#groupFilterBar .glyph-icon { + -fx-font-size: 2em; +} + +#groupBar .glyph-icon { + -fx-font-size: 2em; +} + +/* ImportEntriesDialog */ + +#importEntriesDialog .addEntryButton { + -fx-font-size: 2em; +} + +#importEntriesDialog .addEntryButton:selected { + -fx-background-color: transparent; + -fx-fill: -jr-selected; +} + +#importEntriesDialog .entry-container { + -fx-padding: 0.5em 0em 0.5em 0em; +} + +/* ManageStudyDefinition */ + +.slr-tab { + -fx-padding: 1em; +} + +/* MultiMergeEntries */ + +#multiMergeEntries .text-changed { + -fx-fill: -jr-orange; +} + +#multiMergeEntries .text-added { + -fx-fill: -jr-green; +} + +#multiMergeEntries .text-removed { + -fx-fill: -jr-red; +} + +#multiMergeEntries .grid-pane { + -fx-hgap: 10; + -fx-vgap: 10; +} + +#multiMergeEntries .toggle-button { + -fx-border-insets: 0; + -fx-background-insets: 0; + -fx-border-image-insets: 0; + -fx-padding: 0.5em; + -fx-background-radius: 0; +} + +#multiMergeEntries .box { + -fx-spacing: 10; +} + +/* ParseLatexResult */ + +#referenceListView { + -fx-background-color: -jr-sidepane-background; +} + +#referenceListView > .virtual-flow > .clipped-container > .sheet > .list-cell { + -fx-padding: 4 4 4 4; + -fx-background: transparent; + -fx-text-fill: -fx-text-base-color; +} + +#referenceListView > .virtual-flow > .clipped-container > .sheet > .list-cell * { + -fx-text-fill: -fx-text-base-color; +} + +#parseLatexResultDialog > .split-pane > .split-pane-divider { + -fx-padding: 0 4 0 4; + -fx-background-color: transparent; +} + +#parseLatexResultDialog .button-bar > .container { + -fx-border-width: 1 0 0 0; + -fx-border-color: -jr-sidepane-background; +} + +/* PreferenceDialog */ +#preferencesDialog #sidepane { + -fx-background-color: -jr-sidepane-background; +} + +#preferencesDialog #preferenceTabList { + -fx-background-color: transparent; +} + +#preferencesDialog #preferenceTabList > .virtual-flow > .clipped-container > .sheet > .list-cell { + -fx-padding: 8 8 8 8; + -fx-background: transparent; + -fx-text-fill: -fx-text-base-color; +} + +#preferencesDialog .button-bar > .container { + -fx-border-width: 1 0 0 0; + -fx-border-color: -jr-sidepane-background; +} + +#preferencesDialog #preferenceTabList > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected { + -fx-background: -fx-control-inner-background; +} + +#preferencesDialog > .split-pane > .split-pane-divider { + -fx-padding: 0 4 0 4; + -fx-background-color: transparent; +} + +#preferencesDialog .preferencesTab { + -fx-padding: 0.5em; +} + +#preferencesDialog *:search-highlight { + -fx-background-color: -jr-light-red; +} -/* endregion */ +#preferencesDialog .code-area { + -fx-padding: 0; + -fx-border-width: 1; + -fx-background-color: transparent; +} + +#preferencesDialog .code-area .text { + -fx-fill: -fx-text-background-color; +} + +#preferencesDialog .code-area .tagmark { + -fx-fill: gray; +} + +#preferencesDialog .code-area .anytag { + -fx-fill: crimson; +} + +#preferencesDialog .code-area .paren { + -fx-fill: firebrick; + -fx-font-weight: bold; +} + +#preferencesDialog .code-area .attribute { + -fx-fill: darkviolet; +} + +#preferencesDialog .code-area .avalue { + -fx-fill: green; +} + +#preferencesDialog .code-area .comment { + -fx-fill: teal; +} + +#preferencesDialog .code-area .highlight-keyword { + -fx-text-fill: -jr-purple; +} + +#preferencesDialog .code-area .context-menu .menu-item .label { + -fx-padding: 2; +} + +/* CitationRelationsTab */ + +#citationRelationsTab .addEntryButton { + -fx-font-size: 2em; +} + +#citationRelationsTab .addEntryButton:selected { + -fx-background-color: transparent; + -fx-fill: -jr-selected; +} + +#citationRelationsTab .entry-container { + -fx-padding: 0.5em 0em 0.5em 0em; +} + +/* JournalInfo */ +.journalInfo { + -fx-background-color: -jr-background-alt; +} + +.journalInfo .info-heading { + -fx-font-size: 2.5em; + -fx-text-fill: -jr-theme; +} + +.journalInfo .info-label { + -fx-font-size: 1.25em; + -fx-text-fill: -jr-theme; +} + +.journalInfo .hIndex { + -fx-font-size: 2em; +} + +.journalInfo .grid-cell { + -fx-border-color: transparent -fx-outer-border -fx-outer-border transparent; + -fx-border-width: 0 0.062em 0.062em 0; +} + +.journalInfo .grid-cell-r { + -fx-border-color: transparent -fx-outer-border transparent transparent; + -fx-border-width: 0 0.062em 0 0; +} + +journalInfo .grid-cell-b { + -fx-border-color: transparent transparent -fx-outer-border transparent; + -fx-border-width: 0 0 0.062em 0; +} + +/* KeyBindingsTab */ + +.keybinding-table { + -fx-table-cell-border-color: transparent; + -fx-background-color: transparent; +} + +.keybinding-table .tree-table-row-cell { + -fx-background-color: transparent; + /* visibility: hidden; */ +} + +.keybinding-table .tree-table-row-cell:selected > .tree-table-cell > .icon, +.keybinding-table .tree-table-row-cell:pressed > .tree-table-cell > .icon { + -fx-fill: white; +} + +/* ThreeWayMergeView */ +.three-way-merge .merged-field .styled-text-area { + -fx-background-color: -fx-outer-border, -fx-control-inner-background; + -fx-background-insets: 0, 1; + -fx-prompt-text-fill: -fx-mid-text-color; +} + +.three-way-merge .merged-field .styled-text-area:focused { + -fx-highlight-fill: derive(-jr-accent, 20%); + -fx-background-color: -jr-accent, -fx-control-inner-background; + -fx-background-insets: 0, 2; + -fx-highlight-text-fill: -fx-text-inner-color; +} + +.three-way-merge .merge-field-value:selected .selection-box { + -fx-background-color: -jr-accent-alt; + -fx-border-color: -jr-accent; +} + +.three-way-merge .merge-field-value .selection-box { + -fx-background-color: #0000; + -fx-border-color: #0000; + -fx-border-radius: 8; + -fx-background-radius: 8; + -fx-border-width: 2.5; +} + +.three-way-merge .styled-text-area .text{ + -fx-fill: -fx-text-background-color; +} + +.three-way-merge .field-cell:odd { + -fx-background-color: -jr-row-odd-background; +} + +.three-way-merge .field-cell:even { + -fx-background-color: -jr-row-even-background; +} + +.three-way-merge .field-cell { + -fx-padding: 8; +} + +.three-way-merge .merge-toolbox { + -fx-background-color: -jr-menu-background; +} + +.three-way-merge .merge-header-cell .label{ + -fx-font-weight: bold; + -fx-padding: 1, 0, 1, 0; +} + +.three-way-merge .field-name .glyph-icon, +.three-way-merge .field-name .ikonli-font-icon { + -fx-icon-size: 17; + -fx-icon-color: -jr-theme-text; +} + +/* Miscellaneous */ + +.chatHistory { + -fx-border-color: black; +} + +#styleSelectDialog .currentStyleLabel { + -fx-font-size: 1em; +} + +#styleSelectDialog .currentStyleNameLabel { + -fx-font-size: 1em; -fx-font-weight: bold; -fx-text-fill: -jr-theme; +} diff --git a/src/main/java/org/jabref/gui/JabRefGUI.java b/src/main/java/org/jabref/gui/JabRefGUI.java index aecad6e3994..e17855652dc 100644 --- a/src/main/java/org/jabref/gui/JabRefGUI.java +++ b/src/main/java/org/jabref/gui/JabRefGUI.java @@ -30,6 +30,7 @@ import org.jabref.logic.ai.AiService; import org.jabref.logic.l10n.Localization; import org.jabref.logic.net.ProxyRegisterer; +import org.jabref.logic.os.OS; import org.jabref.logic.remote.RemotePreferences; import org.jabref.logic.remote.server.RemoteListenerServerManager; import org.jabref.logic.search.PostgreServer; @@ -290,13 +291,19 @@ public void onHiding(WindowEvent event) { private void saveWindowState() { CoreGuiPreferences preferences = JabRefGUI.preferences.getGuiPreferences(); - if (!mainStage.isMaximized()) { + // workaround for mac, maximize will always report true + if (!mainStage.isMaximized() || OS.OS_X) { preferences.setPositionX(mainStage.getX()); preferences.setPositionY(mainStage.getY()); preferences.setSizeX(mainStage.getWidth()); preferences.setSizeY(mainStage.getHeight()); } - preferences.setWindowMaximised(mainStage.isMaximized()); + // maximize does not correctly work on OSX, reports true, although the window was resized! + if (OS.OS_X) { + preferences.setWindowMaximised(false); + } else { + preferences.setWindowMaximised(mainStage.isMaximized()); + } debugLogWindowState(mainStage); } diff --git a/src/main/java/org/jabref/gui/ai/components/aichat/AiChatComponent.fxml b/src/main/java/org/jabref/gui/ai/components/aichat/AiChatComponent.fxml index a479ace35e6..bd222d360f9 100644 --- a/src/main/java/org/jabref/gui/ai/components/aichat/AiChatComponent.fxml +++ b/src/main/java/org/jabref/gui/ai/components/aichat/AiChatComponent.fxml @@ -11,56 +11,43 @@ - + - + - - - - + + + - - - - - - - - + + + + + + diff --git a/src/main/java/org/jabref/gui/ai/components/aichat/chathistory/ChatHistoryComponent.fxml b/src/main/java/org/jabref/gui/ai/components/aichat/chathistory/ChatHistoryComponent.fxml index 20836e0e3bb..0c6adb56cb9 100644 --- a/src/main/java/org/jabref/gui/ai/components/aichat/chathistory/ChatHistoryComponent.fxml +++ b/src/main/java/org/jabref/gui/ai/components/aichat/chathistory/ChatHistoryComponent.fxml @@ -3,19 +3,14 @@ - - + + - + diff --git a/src/main/java/org/jabref/gui/ai/components/aichat/chatmessage/ChatMessageComponent.fxml b/src/main/java/org/jabref/gui/ai/components/aichat/chatmessage/ChatMessageComponent.fxml index 92f428872d1..cf56ad0d56b 100644 --- a/src/main/java/org/jabref/gui/ai/components/aichat/chatmessage/ChatMessageComponent.fxml +++ b/src/main/java/org/jabref/gui/ai/components/aichat/chatmessage/ChatMessageComponent.fxml @@ -10,35 +10,31 @@ - - - - - - - - - - - - + + + + + + + + + - - - - - - - + + + + diff --git a/src/main/java/org/jabref/gui/ai/components/privacynotice/PrivacyNoticeComponent.fxml b/src/main/java/org/jabref/gui/ai/components/privacynotice/PrivacyNoticeComponent.fxml index a4f4da47cc2..543571673f4 100644 --- a/src/main/java/org/jabref/gui/ai/components/privacynotice/PrivacyNoticeComponent.fxml +++ b/src/main/java/org/jabref/gui/ai/components/privacynotice/PrivacyNoticeComponent.fxml @@ -1,97 +1,22 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +