diff --git a/angular.json b/angular.json
index bf3dd88c524..aecd5dbcb51 100644
--- a/angular.json
+++ b/angular.json
@@ -61,6 +61,11 @@
"input": "src/themes/dspace/styles/theme.scss",
"inject": false,
"bundleName": "dspace-theme"
+ },
+ {
+ "input": "src/themes/ukrepo/styles/theme.scss",
+ "inject": false,
+ "bundleName": "ukrepo-theme"
}
],
"scripts": [
diff --git a/config/config.yml b/config/config.yml
index 6016a55b498..90365a89083 100644
--- a/config/config.yml
+++ b/config/config.yml
@@ -6,6 +6,10 @@ rest:
port: 8080
nameSpace: /server
+themes:
+ - name: 'ukrepo'
+ extends: 'dspace'
+
# Caching settings
cache:
# NOTE: how long should objects be cached for by default
diff --git a/src/assets/i18n/cs.json5 b/src/assets/i18n/cs.json5
index 5acbe99cc90..2c7169bcc09 100644
--- a/src/assets/i18n/cs.json5
+++ b/src/assets/i18n/cs.json5
@@ -2383,7 +2383,7 @@
// "home.top-level-communities.help": "Select a community to browse its collections.",
"home.top-level-communities.help": "Vyberte komunitu a procházejte její kolekce.",
// "home-page.carousel.ldata.info": "Linguistic Data and NLP Tools",
- "home-page.carousel.ldata.info": "Lingvistická data a nástroje",
+ "home-page.carousel.ldata.info" : "Data a nástroje"
// "home-page.carousel.ldata.find": "Find",
"home-page.carousel.ldata.find": "Vyhledávání",
// "home-page.carousel.ldata.citation-support": "Citation Support (with Persistent IDs)",
diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5
index 4d7894251ce..3891913fde6 100644
--- a/src/assets/i18n/en.json5
+++ b/src/assets/i18n/en.json5
@@ -1935,7 +1935,7 @@
"home.top-level-communities.help": "Select a community to browse its collections.",
- "home-page.carousel.ldata.info": "Linguistic Data and NLP Tools",
+ "home-page.carousel.ldata.info": "Data and Tools",
"home-page.carousel.ldata.find": "Find",
diff --git a/src/themes/eager-themes.module.ts b/src/themes/eager-themes.module.ts
index 4a46595f358..57655c5e174 100644
--- a/src/themes/eager-themes.module.ts
+++ b/src/themes/eager-themes.module.ts
@@ -1,5 +1,6 @@
import { NgModule } from '@angular/core';
-import { EagerThemeModule as DSpaceEagerThemeModule } from './dspace/eager-theme.module';
+import { EagerThemeModule as UKRepoEagerThemeModule } from './ukrepo/eager-theme.module';
+// import { EagerThemeModule as DSpaceEagerThemeModule } from './dspace/eager-theme.module';
// import { EagerThemeModule as CustomEagerThemeModule } from './custom/eager-theme.module';
/**
@@ -11,7 +12,8 @@ import { EagerThemeModule as DSpaceEagerThemeModule } from './dspace/eager-theme
*/
@NgModule({
imports: [
- DSpaceEagerThemeModule,
+ UKRepoEagerThemeModule,
+ // DSpaceEagerThemeModule,
// CustomEagerThemeModule,
],
})
diff --git a/src/themes/ukrepo/app/footer/footer.component.html b/src/themes/ukrepo/app/footer/footer.component.html
new file mode 100644
index 00000000000..6faeca469c4
--- /dev/null
+++ b/src/themes/ukrepo/app/footer/footer.component.html
@@ -0,0 +1,3 @@
+
diff --git a/src/themes/ukrepo/app/footer/footer.component.scss b/src/themes/ukrepo/app/footer/footer.component.scss
new file mode 100644
index 00000000000..75647892aaf
--- /dev/null
+++ b/src/themes/ukrepo/app/footer/footer.component.scss
@@ -0,0 +1,45 @@
+:host {
+ footer {
+ background-color: var(--ds-footer-bg);
+ text-align: center;
+ z-index: var(--ds-footer-z-index);
+ border-top: var(--ds-footer-border);
+ padding: var(--ds-footer-padding);
+
+ p {
+ margin: 0;
+ }
+
+ div > img {
+ height: var(--ds-footer-logo-height);
+ }
+
+
+ .top-footer {
+ background-color: var(--ds-top-footer-bg);
+ padding: var(--ds-footer-padding);
+ margin: calc(var(--ds-footer-padding) * -1);
+ }
+
+ .bottom-footer {
+ ul {
+ li {
+ display: inline-flex;
+
+ a {
+ padding: 0 calc(var(--bs-spacer) / 2);
+ color: inherit
+ }
+
+ &:not(:last-child) {
+ &:after {
+ content: '';
+ border-right: 1px var(--bs-secondary) solid;
+ }
+
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/themes/ukrepo/app/footer/footer.component.ts b/src/themes/ukrepo/app/footer/footer.component.ts
new file mode 100644
index 00000000000..3f22940c6ae
--- /dev/null
+++ b/src/themes/ukrepo/app/footer/footer.component.ts
@@ -0,0 +1,12 @@
+import { Component } from '@angular/core';
+import { FooterComponent as BaseComponent } from '../../../../app/footer/footer.component';
+
+@Component({
+ selector: 'ds-footer',
+ styleUrls: ['./footer.component.scss'],
+ // styleUrls: ['../../../../app/footer/footer.component.scss'],
+ templateUrl: './footer.component.html'
+ // templateUrl: '../../../../app/footer/footer.component.html'
+})
+export class FooterComponent extends BaseComponent {
+}
diff --git a/src/themes/ukrepo/app/header/header.component.html b/src/themes/ukrepo/app/header/header.component.html
new file mode 100644
index 00000000000..96547afbd15
--- /dev/null
+++ b/src/themes/ukrepo/app/header/header.component.html
@@ -0,0 +1,4 @@
+
diff --git a/src/themes/ukrepo/app/header/header.component.scss b/src/themes/ukrepo/app/header/header.component.scss
new file mode 100644
index 00000000000..0f934dccedd
--- /dev/null
+++ b/src/themes/ukrepo/app/header/header.component.scss
@@ -0,0 +1,37 @@
+@media screen and (min-width: map-get($grid-breakpoints, md)) {
+ nav.navbar {
+ display: none;
+ }
+ .header {
+ background-color: var(--ds-header-bg);
+ }
+}
+
+.header {
+ position: relative;
+}
+
+.clarin-logo {
+ height: var(--ds-login-logo-height);
+ width: var(--ds-login-logo-width);
+}
+
+.navbar-brand img {
+ @media screen and (max-width: map-get($grid-breakpoints, md)) {
+ height: var(--ds-header-logo-height-xs);
+ }
+}
+
+.navbar-toggler .navbar-toggler-icon {
+ background-image: none !important;
+ line-height: 1.5;
+}
+
+.navbar-toggler {
+ color: var(--ds-header-icon-color);
+
+ &:hover, &:focus {
+ color: var(--ds-header-icon-color-hover);
+ }
+}
+
diff --git a/src/themes/ukrepo/app/header/header.component.ts b/src/themes/ukrepo/app/header/header.component.ts
new file mode 100644
index 00000000000..6da89b47d57
--- /dev/null
+++ b/src/themes/ukrepo/app/header/header.component.ts
@@ -0,0 +1,13 @@
+import { Component } from '@angular/core';
+import { HeaderComponent as BaseComponent } from '../../../../app/header/header.component';
+
+/**
+ * Represents the header with the logo and simple navigation
+ */
+@Component({
+ selector: 'ds-header',
+ styleUrls: ['header.component.scss'],
+ templateUrl: 'header.component.html',
+})
+export class HeaderComponent extends BaseComponent {
+}
diff --git a/src/themes/ukrepo/app/home-page/home-page.component.html b/src/themes/ukrepo/app/home-page/home-page.component.html
new file mode 100644
index 00000000000..639e92bc122
--- /dev/null
+++ b/src/themes/ukrepo/app/home-page/home-page.component.html
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
{{'home-page.carousel.ldata.info' | translate}}
+
{{'home-page.carousel.ldata.find' | translate}}
+
{{'home-page.carousel.ldata.citation-support' | translate}}
+
+
+
+
{{'home-page.carousel.deposit.info' | translate}}
+ {{'home-page.carousel.deposit.find' | translate}}
+ {{'home-page.carousel.deposit.cite' | translate}}
+
+
+
+
+
+ {{'home-page.carousel.deposit.citation' | translate}}
+ {{'home-page.carousel.deposit.small' | translate}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{'home-page.hyperlink.author.message' | translate}}
+
+
+
+
+
{{'home-page.hyperlink.subject.message' | translate}}
+
+
+
+
+
{{'home-page.hyperlink.language.message' | translate}}
+
+
+
+
+
+
+
+
+
+
+
+
+
{{'home-page.whats-new.message' | translate}}
+
+
+
+
+
+
+
+
+
+
+
{{'home-page.new-items.message' | translate}}
+
+
+
+
+
diff --git a/src/themes/ukrepo/app/home-page/home-page.component.scss b/src/themes/ukrepo/app/home-page/home-page.component.scss
new file mode 100644
index 00000000000..7ba001e7d41
--- /dev/null
+++ b/src/themes/ukrepo/app/home-page/home-page.component.scss
@@ -0,0 +1,193 @@
+:host {
+ .clarin-home-page-color {
+ background-color: #f2f2f2;
+ }
+
+ .clarin-home-page-items-color {
+ background-color: #fafafa;
+ }
+
+ .clarin-home-page-borders {
+ border-left: 1px solid silver;
+ border-right: 1px solid silver;
+ }
+
+ .clarin-shadow {
+ box-shadow: inset 0 1px 1px rgba(0,0,0,0.075), 0 0 6px silver;
+ }
+
+ .remove-padding {
+ padding: 0;
+ }
+
+ .lindat-color-line {
+ background-color: #cc2c32;
+ border-bottom: #b72c32;
+ height: 3em;
+ }
+
+ .clarin-fix-to-navbar {
+ margin-top: -16px;
+ }
+
+ .wrapper {
+ height: 180px;
+ }
+
+ .glass-image {
+ width: 100px;
+ position: absolute;
+ left: 22%;
+ top: 20%;
+ }
+
+ .clarin-cut-bottom {
+ margin-bottom: -16px;
+ }
+
+ .clarin-cut-bottom-2 {
+ margin-bottom: -24px;
+ }
+
+ .h5-font {
+ font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+ font-weight: 500;
+ line-height: 1.1;
+ }
+
+ blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ border-left: 5px solid #eee;
+ }
+
+ blockquote small {
+ display: block;
+ line-height: 1.428571429;
+ color: #999;
+ }
+
+ small {
+ font-size: 85%;
+ }
+
+ .fa-2x {
+ font-size: 2em;
+ }
+ .fa {
+ display: inline-block;
+ font-size: inherit;
+ }
+
+ .carousel-ldata-info {
+ left: 34%; position: absolute; top: 25%; font-size: 24px; margin-top: 20px; margin-bottom: 10px;
+ }
+
+ .carousel-ldata-find {
+ left: 40%; position: absolute; top: 15%; font-size: 14px; margin-top: 10px; margin-bottom: 10px;
+ }
+
+ .carousel-ldata-citation-support {
+ left: 54%; position: absolute; top: 45%; font-size: 14px; margin-top: 10px; margin-bottom: 10px;
+ }
+
+ .carousel-deposit-header {
+ left: 40%; position: absolute; top: 10%; margin-top: 17px; margin-bottom: 10px;
+ }
+
+ .carousel-deposit-info {
+ left: 28%; position: absolute; top: 30%; margin-top: 10px; margin-bottom: 10px; font-size: 14px;
+ }
+
+ .carousel-deposit-find {
+ left: 32%; position: absolute; top: 42%; margin-top: 10px; margin-bottom: 10px; font-size: 14px;
+ }
+
+ .carousel-deposit-cite {
+ left: 36%; position: absolute; top: 54%; margin-top: 10px; margin-bottom: 10px; font-size: 14px;
+ }
+
+ .carousel-deposit-citation {
+ position: absolute; width: 65%; top: 20%; left: 20%; line-height: 20px;
+ }
+
+ .input-group-addon {
+ height: 48px;
+ padding: 14px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px 0px 0px 6px;
+ font-weight: normal;
+ text-align: center;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ border-right: 0px;
+ max-width: fit-content;
+ }
+
+ .btn-repository {
+ color: #fff;
+ text-shadow: 0 -1px 0 rgb(0 0 0 / 25%);
+ background-color: #7479b8;
+ background-image: linear-gradient(to bottom,#9fa3e6,#7479b8);
+ font-size: 18px;
+ border-radius: 0px 6px 6px 0px;
+ }
+
+ .form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgb(0 0 0 / 8%), 0 0 8px rgb(102 175 233 / 60%);
+ box-shadow: inset 0 1px 1px rgb(0 0 0 / 8%), 0 0 8px rgb(102 175 233 / 60%);
+ }
+
+ .recent-submissions-head {
+ color: #797dd4;
+ border-bottom: 5px solid #797dd4;
+ font-size: 110%;
+ }
+
+ .top-items-head {
+ color: #ccab28;
+ border-bottom: 5px solid #ccab28;
+ font-size: 120%;
+ }
+
+ @media (max-width: 991.98px) {
+ .carousel-ldata-info {
+ left: 42%;
+ position: absolute;
+ top: 23%; font-size: 24px; margin-top: 20px; margin-bottom: 10px;
+ }
+
+ .carousel-ldata-citation-support {
+ left: 56%; position: absolute; top: 45%; font-size: 14px; margin-top: 10px; margin-bottom: 10px;
+ }
+
+ .carousel-deposit-header {
+ left: 37%; position: absolute; top: 10%; margin-top: 17px; margin-bottom: 10px;
+ }
+
+ .carousel-deposit-info {
+ margin-top: 17px;
+ }
+
+ .carousel-deposit-find {
+ margin-top: 17px;
+ }
+
+ .carousel-deposit-cite {
+ margin-top: 17px;
+ }
+
+ .carousel-deposit-citation {
+ width: 100%;
+ }
+ }
+
+ @media (max-width: 768px) {
+ .responsive-padding {
+ padding-left: 50px !important;
+ }
+ }
+}
diff --git a/src/themes/ukrepo/app/home-page/home-page.component.ts b/src/themes/ukrepo/app/home-page/home-page.component.ts
new file mode 100644
index 00000000000..85ff0b298d9
--- /dev/null
+++ b/src/themes/ukrepo/app/home-page/home-page.component.ts
@@ -0,0 +1,13 @@
+import { Component } from '@angular/core';
+import { HomePageComponent as BaseComponent } from '../../../../app/home-page/home-page.component';
+
+@Component({
+ selector: 'ds-home-page',
+ styleUrls: ['./home-page.component.scss'],
+ // styleUrls: ['../../../../app/home-page/home-page.component.scss'],
+ templateUrl: './home-page.component.html'
+ // templateUrl: '../../../../app/home-page/home-page.component.html'
+})
+export class HomePageComponent extends BaseComponent {
+
+}
diff --git a/src/themes/ukrepo/app/login-page/login-page.component.html b/src/themes/ukrepo/app/login-page/login-page.component.html
new file mode 100644
index 00000000000..1a83892c241
--- /dev/null
+++ b/src/themes/ukrepo/app/login-page/login-page.component.html
@@ -0,0 +1,10 @@
+
+
+
+
+
{{"login.form.header" | translate}}
+
+
+
+
diff --git a/src/themes/ukrepo/app/login-page/login-page.component.scss b/src/themes/ukrepo/app/login-page/login-page.component.scss
new file mode 100644
index 00000000000..d628a5089f6
--- /dev/null
+++ b/src/themes/ukrepo/app/login-page/login-page.component.scss
@@ -0,0 +1,4 @@
+.login-logo {
+ height: var(--ds-login-logo-height);
+ width: var(--ds-login-logo-width);
+}
diff --git a/src/themes/ukrepo/app/login-page/login-page.component.ts b/src/themes/ukrepo/app/login-page/login-page.component.ts
new file mode 100644
index 00000000000..dd557684916
--- /dev/null
+++ b/src/themes/ukrepo/app/login-page/login-page.component.ts
@@ -0,0 +1,15 @@
+import { Component } from '@angular/core';
+import { LoginPageComponent as BaseComponent } from '../../../../app/login-page/login-page.component';
+
+/**
+ * This component represents the login page
+ */
+@Component({
+ selector: 'ds-login-page',
+ styleUrls: ['./login-page.component.scss'],
+ // styleUrls: ['../../../../app/login-page/login-page.component.scss'],
+ templateUrl: './login-page.component.html'
+ // templateUrl: '../../../../app/login-page/login-page.component.html'
+})
+export class LoginPageComponent extends BaseComponent {
+}
diff --git a/src/themes/ukrepo/app/logout-page/logout-page.component.html b/src/themes/ukrepo/app/logout-page/logout-page.component.html
new file mode 100644
index 00000000000..b5012ed53bc
--- /dev/null
+++ b/src/themes/ukrepo/app/logout-page/logout-page.component.html
@@ -0,0 +1,9 @@
+
+
+
+
+
{{"logout.form.header" | translate}}
+
+
+
+
diff --git a/src/themes/ukrepo/app/logout-page/logout-page.component.scss b/src/themes/ukrepo/app/logout-page/logout-page.component.scss
new file mode 100644
index 00000000000..a25e77fb6b3
--- /dev/null
+++ b/src/themes/ukrepo/app/logout-page/logout-page.component.scss
@@ -0,0 +1 @@
+@import '../login-page/login-page.component.scss';
diff --git a/src/themes/ukrepo/app/logout-page/logout-page.component.ts b/src/themes/ukrepo/app/logout-page/logout-page.component.ts
new file mode 100644
index 00000000000..2d4bd5b9517
--- /dev/null
+++ b/src/themes/ukrepo/app/logout-page/logout-page.component.ts
@@ -0,0 +1,12 @@
+import { Component } from '@angular/core';
+import { LogoutPageComponent as BaseComponent} from '../../../../app/logout-page/logout-page.component';
+
+@Component({
+ selector: 'ds-logout-page',
+ styleUrls: ['./logout-page.component.scss'],
+ // styleUrls: ['../../../../app/logout-page/logout-page.component.scss'],
+ templateUrl: './logout-page.component.html'
+ // templateUrl: '../../../../app/logout-page/logout-page.component.html'
+})
+export class LogoutPageComponent extends BaseComponent {
+}
diff --git a/src/themes/ukrepo/assets/fonts/.gitkeep b/src/themes/ukrepo/assets/fonts/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/themes/ukrepo/assets/i18n/cs.json5 b/src/themes/ukrepo/assets/i18n/cs.json5
new file mode 100644
index 00000000000..27a30301797
--- /dev/null
+++ b/src/themes/ukrepo/assets/i18n/cs.json5
@@ -0,0 +1,3 @@
+{
+ "home-page.carousel.ldata.info" : "Data a nástroje"
+}
diff --git a/src/themes/ukrepo/assets/i18n/en.json5 b/src/themes/ukrepo/assets/i18n/en.json5
new file mode 100644
index 00000000000..cbbedf6b07f
--- /dev/null
+++ b/src/themes/ukrepo/assets/i18n/en.json5
@@ -0,0 +1,3 @@
+{
+ "home-page.carousel.ldata.info": "Data and Tools",
+}
diff --git a/src/themes/ukrepo/assets/images/.gitkeep b/src/themes/ukrepo/assets/images/.gitkeep
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/src/themes/ukrepo/assets/images/UK-logo-specialni-EN.svg b/src/themes/ukrepo/assets/images/UK-logo-specialni-EN.svg
new file mode 100644
index 00000000000..c7b47eefa32
--- /dev/null
+++ b/src/themes/ukrepo/assets/images/UK-logo-specialni-EN.svg
@@ -0,0 +1,911 @@
+
+
+
diff --git a/src/themes/ukrepo/assets/images/favicons/android-chrome-192x192.png b/src/themes/ukrepo/assets/images/favicons/android-chrome-192x192.png
new file mode 100644
index 00000000000..1aaffb1b90e
Binary files /dev/null and b/src/themes/ukrepo/assets/images/favicons/android-chrome-192x192.png differ
diff --git a/src/themes/ukrepo/assets/images/favicons/android-chrome-512x512.png b/src/themes/ukrepo/assets/images/favicons/android-chrome-512x512.png
new file mode 100644
index 00000000000..2d35f496dc2
Binary files /dev/null and b/src/themes/ukrepo/assets/images/favicons/android-chrome-512x512.png differ
diff --git a/src/themes/ukrepo/assets/images/favicons/apple-touch-icon.png b/src/themes/ukrepo/assets/images/favicons/apple-touch-icon.png
new file mode 100644
index 00000000000..58ff41f34b7
Binary files /dev/null and b/src/themes/ukrepo/assets/images/favicons/apple-touch-icon.png differ
diff --git a/src/themes/ukrepo/assets/images/favicons/favicon.ico b/src/themes/ukrepo/assets/images/favicons/favicon.ico
new file mode 100644
index 00000000000..364ca659fd7
Binary files /dev/null and b/src/themes/ukrepo/assets/images/favicons/favicon.ico differ
diff --git a/src/themes/ukrepo/assets/images/favicons/favicon.svg b/src/themes/ukrepo/assets/images/favicons/favicon.svg
new file mode 100644
index 00000000000..ca6546ade5b
--- /dev/null
+++ b/src/themes/ukrepo/assets/images/favicons/favicon.svg
@@ -0,0 +1,35 @@
+
+
+
diff --git a/src/themes/ukrepo/assets/images/favicons/manifest.webmanifest b/src/themes/ukrepo/assets/images/favicons/manifest.webmanifest
new file mode 100644
index 00000000000..1784ba2b4c5
--- /dev/null
+++ b/src/themes/ukrepo/assets/images/favicons/manifest.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "DSpace",
+ "short_name": "DSpace",
+ "icons": [
+ {
+ "src": "android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#091119",
+ "background_color": "#091119",
+ "display": "standalone"
+}
diff --git a/src/themes/ukrepo/eager-theme.module.ts b/src/themes/ukrepo/eager-theme.module.ts
new file mode 100644
index 00000000000..836ad912ae0
--- /dev/null
+++ b/src/themes/ukrepo/eager-theme.module.ts
@@ -0,0 +1,51 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { SharedModule } from '../../app/shared/shared.module';
+import { HeaderComponent } from './app/header/header.component';
+import { RootModule } from '../../app/root.module';
+import { NavbarModule } from '../../app/navbar/navbar.module';
+import { SharedBrowseByModule } from '../../app/shared/browse-by/shared-browse-by.module';
+import { ResultsBackButtonModule } from '../../app/shared/results-back-button/results-back-button.module';
+import { FooterComponent } from './app/footer/footer.component';
+import { HomePageComponent } from './app/home-page/home-page.component';
+import {NgbCarouselModule} from '@ng-bootstrap/ng-bootstrap';
+
+/**
+ * Add components that use a custom decorator to ENTRY_COMPONENTS as well as DECLARATIONS.
+ * This will ensure that decorator gets picked up when the app loads
+ */
+const ENTRY_COMPONENTS = [];
+
+const DECLARATIONS = [
+ ...ENTRY_COMPONENTS,
+ HeaderComponent,
+ FooterComponent,
+ HomePageComponent,
+];
+
+@NgModule({
+ imports: [
+ CommonModule,
+ SharedModule,
+ SharedBrowseByModule,
+ ResultsBackButtonModule,
+ RootModule,
+ NavbarModule,
+ NgbCarouselModule,
+ ],
+ declarations: DECLARATIONS,
+ providers: [
+ ...ENTRY_COMPONENTS.map((component) => ({provide: component}))
+ ],
+})
+/**
+ * This module is included in the main bundle that gets downloaded at first page load. So it should
+ * contain only the themed components that have to be available immediately for the first page load,
+ * and the minimal set of imports required to make them work. Anything you can cut from it will make
+ * the initial page load faster, but may cause the page to flicker as components that were already
+ * rendered server side need to be lazy-loaded again client side
+ *
+ * Themed EntryComponents should also be added here
+ */
+export class EagerThemeModule {
+}
diff --git a/src/themes/ukrepo/lazy-theme.module.ts b/src/themes/ukrepo/lazy-theme.module.ts
new file mode 100644
index 00000000000..eca7c35f4c2
--- /dev/null
+++ b/src/themes/ukrepo/lazy-theme.module.ts
@@ -0,0 +1,137 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { AdminRegistriesModule } from '../../app/admin/admin-registries/admin-registries.module';
+import { AdminSearchModule } from '../../app/admin/admin-search-page/admin-search.module';
+import {
+ AdminWorkflowModuleModule
+} from '../../app/admin/admin-workflow-page/admin-workflow.module';
+import {
+ BitstreamFormatsModule
+} from '../../app/admin/admin-registries/bitstream-formats/bitstream-formats.module';
+import { BrowseByModule } from '../../app/browse-by/browse-by.module';
+import {
+ CollectionFormModule
+} from '../../app/collection-page/collection-form/collection-form.module';
+import { CommunityFormModule } from '../../app/community-page/community-form/community-form.module';
+import { CoreModule } from '../../app/core/core.module';
+import { DragDropModule } from '@angular/cdk/drag-drop';
+import { EditItemPageModule } from '../../app/item-page/edit-item-page/edit-item-page.module';
+import { FormsModule } from '@angular/forms';
+import { HttpClientModule } from '@angular/common/http';
+import { IdlePreloadModule } from 'angular-idle-preload';
+import {
+ JournalEntitiesModule
+} from '../../app/entity-groups/journal-entities/journal-entities.module';
+import { MyDspaceSearchModule } from '../../app/my-dspace-page/my-dspace-search.module';
+import { MenuModule } from '../../app/shared/menu/menu.module';
+import { NavbarModule } from '../../app/navbar/navbar.module';
+import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
+import { ProfilePageModule } from '../../app/profile-page/profile-page.module';
+import { RegisterEmailFormModule } from '../../app/register-email-form/register-email-form.module';
+import {
+ ResearchEntitiesModule
+} from '../../app/entity-groups/research-entities/research-entities.module';
+import { ScrollToModule } from '@nicky-lenaers/ngx-scroll-to';
+import { SearchPageModule } from '../../app/search-page/search-page.module';
+import { SharedModule } from '../../app/shared/shared.module';
+import { StatisticsModule } from '../../app/statistics/statistics.module';
+import { StoreModule } from '@ngrx/store';
+import { StoreRouterConnectingModule } from '@ngrx/router-store';
+import { TranslateModule } from '@ngx-translate/core';
+import { HomePageModule } from '../../app/home-page/home-page.module';
+import { AppModule } from '../../app/app.module';
+import { ItemPageModule } from '../../app/item-page/item-page.module';
+import { RouterModule } from '@angular/router';
+import { CommunityListPageModule } from '../../app/community-list-page/community-list-page.module';
+import { InfoModule } from '../../app/info/info.module';
+import { StatisticsPageModule } from '../../app/statistics-page/statistics-page.module';
+import { CommunityPageModule } from '../../app/community-page/community-page.module';
+import { CollectionPageModule } from '../../app/collection-page/collection-page.module';
+import { SubmissionModule } from '../../app/submission/submission.module';
+import { MyDSpacePageModule } from '../../app/my-dspace-page/my-dspace-page.module';
+import { SearchModule } from '../../app/shared/search/search.module';
+import {
+ ResourcePoliciesModule
+} from '../../app/shared/resource-policies/resource-policies.module';
+import { ComcolModule } from '../../app/shared/comcol/comcol.module';
+import { RootModule } from '../../app/root.module';
+import { BrowseByPageModule } from '../../app/browse-by/browse-by-page.module';
+import { ResultsBackButtonModule } from '../../app/shared/results-back-button/results-back-button.module';
+import { SharedBrowseByModule } from '../../app/shared/browse-by/shared-browse-by.module';
+import { ItemVersionsModule } from '../../app/item-page/versions/item-versions.module';
+import { ItemSharedModule } from 'src/app/item-page/item-shared.module';
+
+import { LoginPageComponent } from './app/login-page/login-page.component';
+import { LogoutPageComponent } from './app/logout-page/logout-page.component';
+
+const DECLARATIONS = [
+ LoginPageComponent,
+ LogoutPageComponent,
+];
+
+@NgModule({
+ imports: [
+ AdminRegistriesModule,
+ AdminSearchModule,
+ AdminWorkflowModuleModule,
+ AppModule,
+ RootModule,
+ BitstreamFormatsModule,
+ BrowseByModule,
+ BrowseByPageModule,
+ ResultsBackButtonModule,
+ CollectionFormModule,
+ CollectionPageModule,
+ CommonModule,
+ CommunityFormModule,
+ CommunityListPageModule,
+ CommunityPageModule,
+ CoreModule,
+ DragDropModule,
+ ItemSharedModule,
+ ItemPageModule,
+ EditItemPageModule,
+ ItemVersionsModule,
+ FormsModule,
+ HomePageModule,
+ HttpClientModule,
+ IdlePreloadModule,
+ InfoModule,
+ JournalEntitiesModule,
+ MenuModule,
+ MyDspaceSearchModule,
+ NavbarModule,
+ NgbModule,
+ ProfilePageModule,
+ RegisterEmailFormModule,
+ ResearchEntitiesModule,
+ RouterModule,
+ ScrollToModule,
+ SearchPageModule,
+ SharedModule,
+ SharedBrowseByModule,
+ StatisticsModule,
+ StatisticsPageModule,
+ StoreModule,
+ StoreRouterConnectingModule,
+ TranslateModule,
+ SubmissionModule,
+ MyDSpacePageModule,
+ MyDspaceSearchModule,
+ SearchModule,
+ FormsModule,
+ ResourcePoliciesModule,
+ ComcolModule,
+ ],
+ declarations: DECLARATIONS,
+})
+
+/**
+ * This module serves as an index for all the components in this theme.
+ * It should import all other modules, so the compiler knows where to find any components referenced
+ * from a component in this theme
+ * It is purposefully not exported, it should never be imported anywhere else, its only purpose is
+ * to give lazily loaded components a context in which they can be compiled successfully
+ */
+class LazyThemeModule {
+}
diff --git a/src/themes/ukrepo/styles/_global-styles.scss b/src/themes/ukrepo/styles/_global-styles.scss
new file mode 100644
index 00000000000..88bfa7546df
--- /dev/null
+++ b/src/themes/ukrepo/styles/_global-styles.scss
@@ -0,0 +1,60 @@
+// Add any global css for the theme here
+
+// imports the base global style
+@import '../../../styles/_global-styles.scss';
+@import '../../../styles/_clarin-styles.scss';
+
+.facet-filter, .setting-option {
+ background-color: var(--bs-light);
+ border-radius: var(--bs-border-radius);
+
+ &.p-3 {
+ // Needs !important because the original bootstrap class uses it
+ padding-top: 0.5rem !important;
+ padding-bottom: 0.5rem !important;
+ }
+
+ .badge-secondary {
+ background-color: var(--bs-primary);
+ }
+
+ h4 {
+ font-size: 1.1rem
+ }
+}
+
+.alert-warning {
+ background-color: #fcf8e3 !important;
+ border: 1px solid #fbeed5 !important;
+ color: #c09853 !important;
+}
+
+header {
+ li > .navbar-section,
+ li > .expandable-navbar-section {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ height: 100%;
+ }
+}
+
+.ng-toggle-on {
+ color: #fff !important;
+ background-color: #28a745 !important;
+ border-color: #28a745 !important;
+}
+
+.ng-toggle-off {
+ color: #fff !important;
+ background-color: #dc3545 !important;
+ border-color: #dc3545 !important;
+}
+
+.page-item.active .page-link{
+ z-index: 2 !important;
+ color: #fff !important;
+ cursor: default !important;
+ background-color: #428bca !important;
+ border-color: #428bca !important;
+}
diff --git a/src/themes/ukrepo/styles/_theme_css_variable_overrides.scss b/src/themes/ukrepo/styles/_theme_css_variable_overrides.scss
new file mode 100644
index 00000000000..516eff9f7e9
--- /dev/null
+++ b/src/themes/ukrepo/styles/_theme_css_variable_overrides.scss
@@ -0,0 +1,11 @@
+// Override or add CSS variables for your theme here
+
+:root {
+ --ds-header-logo-height: 40px;
+ --ds-banner-text-background: rgba(0, 0, 0, 0.45);
+ --ds-banner-background-gradient-width: 300px;
+ --ds-home-news-link-color: #{$green};
+ --ds-home-news-link-hover-color: #{darken($green, 15%)};
+ --ds-header-navbar-border-bottom-color: #{$green};
+}
+
diff --git a/src/themes/ukrepo/styles/_theme_sass_variable_overrides.scss b/src/themes/ukrepo/styles/_theme_sass_variable_overrides.scss
new file mode 100644
index 00000000000..b5799c97496
--- /dev/null
+++ b/src/themes/ukrepo/styles/_theme_sass_variable_overrides.scss
@@ -0,0 +1,41 @@
+// DSpace works with CSS variables for its own components, and has a mapping of all bootstrap Sass
+// variables to CSS equivalents (see src/styles/_bootstrap_variables_mapping.scss). However Bootstrap
+// still uses Sass variables internally. So if you want to override bootstrap (or other sass
+// variables) you can do so here. Their CSS counterparts will include the changes you make here
+
+@import url('https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200;0,300;0,400;0,600;0,700;0,800;1,200;1,300;1,400;1,600;1,700;1,800&display=swap');
+
+$font-family-sans-serif: 'Nunito', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+
+$navbar-dark-color: #FFFFFF;
+
+/* Reassign color vars to semantic color scheme */
+$blue: #2b4e72 !default;
+$green: #92C642 !default;
+$cyan: #207698 !default;
+$yellow: #ec9433 !default;
+$red: #CF4444 !default;
+$dark: #43515f !default;
+
+$gray-800: #343a40 !default;
+$gray-700: #495057 !default;
+$gray-400: #ced4da !default;
+$gray-100: #f8f9fa !default;
+
+$body-color: $gray-800 !default; // Bootstrap $gray-800
+
+$table-accent-bg: $gray-100 !default; // Bootstrap $gray-100
+$table-hover-bg: $gray-400 !default; // Bootstrap $gray-400
+
+$yiq-contrasted-threshold: 170 !default;
+
+$theme-colors: (
+ primary: $dark,
+ secondary: $gray-700,
+ success: $green,
+ info: $cyan,
+ warning: $yellow,
+ danger: $red,
+ light: $gray-100,
+ dark: $dark
+) !default;
diff --git a/src/themes/ukrepo/styles/theme.scss b/src/themes/ukrepo/styles/theme.scss
new file mode 100644
index 00000000000..05c96f33728
--- /dev/null
+++ b/src/themes/ukrepo/styles/theme.scss
@@ -0,0 +1,12 @@
+// This file combines the other scss files in to one. You usually shouldn't edit this file directly
+
+@import './_theme_sass_variable_overrides.scss';
+@import '../../../styles/_variables.scss';
+@import '../../../styles/_mixins.scss';
+@import '../../../styles/helpers/font_awesome_imports.scss';
+@import '../../../styles/_vendor.scss';
+@import '../../../styles/_custom_variables.scss';
+@import './_theme_css_variable_overrides.scss';
+@import '../../../styles/bootstrap_variables_mapping.scss';
+@import '../../../styles/_truncatable-part.component.scss';
+@import './_global-styles.scss';