diff --git a/angular.json b/angular.json
index cf348ef8d5..2871a41759 100644
--- a/angular.json
+++ b/angular.json
@@ -30,7 +30,12 @@
"lodash",
"jwt-decode",
"uuid",
- "zone.js"
+ "zone.js",
+ "orejime",
+ "leaflet",
+ "leaflet-providers",
+ "leaflet.markercluster",
+ "date-fns-tz"
],
"outputPath": "dist/browser",
"index": "src/index.html",
@@ -59,6 +64,11 @@
"inject": false,
"bundleName": "dspace-theme"
},
+ {
+ "input": "src/themes/krex/styles/theme.scss",
+ "inject": false,
+ "bundleName": "krex-theme"
+ },
"node_modules/leaflet/dist/leaflet.css",
"node_modules/leaflet.markercluster/dist/MarkerCluster.Default.css",
"node_modules/leaflet.markercluster/dist/MarkerCluster.css"
diff --git a/config/config.example.yml b/config/config.example.yml
index c916833916..9f8a282e27 100644
--- a/config/config.example.yml
+++ b/config/config.example.yml
@@ -7,7 +7,7 @@ debug: false
ui:
ssl: false
host: localhost
- port: 4000
+ port: 4003
# NOTE: Space is capitalized because 'namespace' is a reserved string in TypeScript
nameSpace: /
# The rateLimiter settings limit each IP to a 'limit' of 500 requests per 'windowMs' (1 minute).
@@ -479,6 +479,13 @@ themes:
attributes:
rel: manifest
href: assets/dspace/images/favicons/manifest.webmanifest
+ - tagName: meta
+ -name: krex
+ # - name:
+ # - tagName: krex
+ # attributes:
+ # rel: icon
+ # sizes: any
# The default bundles that should always be displayed as suggestions when you upload a new bundle
bundle:
diff --git a/config/config.yml b/config/config.yml
index 109db60ca9..5f51e54325 100644
--- a/config/config.yml
+++ b/config/config.yml
@@ -1,5 +1,10 @@
+
rest:
ssl: true
host: sandbox.dspace.org
port: 443
nameSpace: /server
+
+themes:
+ - name: krex
+ extends: dspace
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index c1492dd3ff..7d2c88d267 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -75,6 +75,7 @@
"ngx-skeleton-loader": "^11.3.0",
"ngx-ui-switch": "^16.1.0",
"nouislider": "^15.7.1",
+ "npm": "^11.10.1",
"orejime": "^2.3.1",
"pem": "1.14.8",
"reflect-metadata": "^0.2.2",
@@ -93,7 +94,7 @@
"@angular-eslint/schematics": "^20.7.0",
"@angular-eslint/template-parser": "^20.6.0",
"@angular-eslint/utils": "^20.7.0",
- "@angular/cli": "^20.3.15",
+ "@angular/cli": "^20.3.17",
"@angular/compiler-cli": "^20.3.12",
"@cypress/schematic": "^1.5.0",
"@fortawesome/fontawesome-free": "^6.7.2",
@@ -574,22 +575,6 @@
"@angular/compiler-cli": "^20.0.0"
}
},
- "node_modules/@angular-builders/custom-webpack/node_modules/@angular-devkit/architect": {
- "version": "0.2003.16",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.16.tgz",
- "integrity": "sha512-W7FPVhZzIeHVP/duuKepfZU66LpQ0k9YMHFhrGpzaUuHPOwKmza6+pjVvvti3g6jzT8b1uVlb+XlYgNPZ5jrPQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@angular-devkit/core": "20.3.16",
- "rxjs": "7.8.2"
- },
- "engines": {
- "node": "^20.19.0 || ^22.12.0 || >=24.0.0",
- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
- "yarn": ">= 1.13.0"
- }
- },
"node_modules/@angular-builders/custom-webpack/node_modules/@angular-devkit/core": {
"version": "20.3.16",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.16.tgz",
@@ -653,13 +638,13 @@
}
},
"node_modules/@angular-devkit/architect": {
- "version": "0.2003.15",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.15.tgz",
- "integrity": "sha512-HmGnUTLVwpvOFilc3gTP6CL9o+UbkVyu9S4WENkQbInbW3zp54lkzY71uWJIP7QvuXPa+bS4WHEmoGNQtNvv1A==",
+ "version": "0.2003.17",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.17.tgz",
+ "integrity": "sha512-e6Mo4xFIhmtPLhjeai3kBW0yViHEtZ+210tcWfuEnPGRgr8X4rMxkYQRAT2X9dqgtsG+TmVZFHAN/Gbs6Tvr7Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "20.3.15",
+ "@angular-devkit/core": "20.3.17",
"rxjs": "7.8.2"
},
"engines": {
@@ -669,9 +654,9 @@
}
},
"node_modules/@angular-devkit/architect/node_modules/@angular-devkit/core": {
- "version": "20.3.15",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.15.tgz",
- "integrity": "sha512-s7sE4S5Hy62dLrtHwizbZaMcupAE8fPhm6rF+jBkhHZ75zXGhGzXP8WKFztYCAuGnis4pPnGSEKP/xVTc2lw6Q==",
+ "version": "20.3.17",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.17.tgz",
+ "integrity": "sha512-xlBT8rmyTjb5P/p6wDHp0EleagptjSHGNsJwqSY4FdIG0p59ezAbb2wbQGqkYDxuoptFSLUpAGE7sNWZ5OiLWw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1441,13 +1426,13 @@
}
},
"node_modules/@angular-devkit/schematics": {
- "version": "20.3.15",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.3.15.tgz",
- "integrity": "sha512-xMN1fyuhhP8Y5sNlmQvl4nMiOouHTKPkLR0zlhu5z6fHuwxxlverh31Gpq3eFzPHqmOzzb2TkgYCptCFXsXcrg==",
+ "version": "20.3.17",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.3.17.tgz",
+ "integrity": "sha512-aqvxNwBbRKmbQfv/j6e0ddTjhs2vIoQnzIVAqFLMvuAQmnTCHP+Kw26wS4OQMuGbDTUZ9SxPy4eSNu+vBoc3fA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "20.3.15",
+ "@angular-devkit/core": "20.3.17",
"jsonc-parser": "3.3.1",
"magic-string": "0.30.17",
"ora": "8.2.0",
@@ -1460,9 +1445,9 @@
}
},
"node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": {
- "version": "20.3.15",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.15.tgz",
- "integrity": "sha512-s7sE4S5Hy62dLrtHwizbZaMcupAE8fPhm6rF+jBkhHZ75zXGhGzXP8WKFztYCAuGnis4pPnGSEKP/xVTc2lw6Q==",
+ "version": "20.3.17",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.17.tgz",
+ "integrity": "sha512-xlBT8rmyTjb5P/p6wDHp0EleagptjSHGNsJwqSY4FdIG0p59ezAbb2wbQGqkYDxuoptFSLUpAGE7sNWZ5OiLWw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2324,19 +2309,19 @@
}
},
"node_modules/@angular/cli": {
- "version": "20.3.15",
- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.3.15.tgz",
- "integrity": "sha512-OgPMhXtNLXds0wIw6YU5/X3dU8TlAZbmPy6LYHs9ifF8K4pXpbm27vWGSZhUevSf66dMvfz8wB/aE2e0s2e5Ng==",
+ "version": "20.3.17",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.3.17.tgz",
+ "integrity": "sha512-JunMKV78Eo7qXRISgDZb35i/Khoq+5JSfNia7ngoIrEIOxcdY+xeeHt3SV1KCfyu9/gkLWEyZMulI5L7+hTVbw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/architect": "0.2003.15",
- "@angular-devkit/core": "20.3.15",
- "@angular-devkit/schematics": "20.3.15",
+ "@angular-devkit/architect": "0.2003.17",
+ "@angular-devkit/core": "20.3.17",
+ "@angular-devkit/schematics": "20.3.17",
"@inquirer/prompts": "7.8.2",
"@listr2/prompt-adapter-inquirer": "3.0.1",
- "@modelcontextprotocol/sdk": "1.25.2",
- "@schematics/angular": "20.3.15",
+ "@modelcontextprotocol/sdk": "1.26.0",
+ "@schematics/angular": "20.3.17",
"@yarnpkg/lockfile": "1.1.0",
"algoliasearch": "5.35.0",
"ini": "5.0.0",
@@ -2359,9 +2344,9 @@
}
},
"node_modules/@angular/cli/node_modules/@angular-devkit/core": {
- "version": "20.3.15",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.15.tgz",
- "integrity": "sha512-s7sE4S5Hy62dLrtHwizbZaMcupAE8fPhm6rF+jBkhHZ75zXGhGzXP8WKFztYCAuGnis4pPnGSEKP/xVTc2lw6Q==",
+ "version": "20.3.17",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.17.tgz",
+ "integrity": "sha512-xlBT8rmyTjb5P/p6wDHp0EleagptjSHGNsJwqSY4FdIG0p59ezAbb2wbQGqkYDxuoptFSLUpAGE7sNWZ5OiLWw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7334,13 +7319,13 @@
}
},
"node_modules/@modelcontextprotocol/sdk": {
- "version": "1.25.2",
- "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz",
- "integrity": "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==",
+ "version": "1.26.0",
+ "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.26.0.tgz",
+ "integrity": "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@hono/node-server": "^1.19.7",
+ "@hono/node-server": "^1.19.9",
"ajv": "^8.17.1",
"ajv-formats": "^3.0.1",
"content-type": "^1.0.5",
@@ -7348,14 +7333,15 @@
"cross-spawn": "^7.0.5",
"eventsource": "^3.0.2",
"eventsource-parser": "^3.0.0",
- "express": "^5.0.1",
- "express-rate-limit": "^7.5.0",
- "jose": "^6.1.1",
+ "express": "^5.2.1",
+ "express-rate-limit": "^8.2.1",
+ "hono": "^4.11.4",
+ "jose": "^6.1.3",
"json-schema-typed": "^8.0.2",
"pkce-challenge": "^5.0.0",
"raw-body": "^3.0.0",
"zod": "^3.25 || ^4.0",
- "zod-to-json-schema": "^3.25.0"
+ "zod-to-json-schema": "^3.25.1"
},
"engines": {
"node": ">=18"
@@ -7480,22 +7466,6 @@
"url": "https://opencollective.com/express"
}
},
- "node_modules/@modelcontextprotocol/sdk/node_modules/express-rate-limit": {
- "version": "7.5.1",
- "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz",
- "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 16"
- },
- "funding": {
- "url": "https://github.com/sponsors/express-rate-limit"
- },
- "peerDependencies": {
- "express": ">= 4.11"
- }
- },
"node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz",
@@ -7617,9 +7587,9 @@
}
},
"node_modules/@modelcontextprotocol/sdk/node_modules/qs": {
- "version": "6.14.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
- "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz",
+ "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -9352,14 +9322,14 @@
"dev": true
},
"node_modules/@schematics/angular": {
- "version": "20.3.15",
- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.3.15.tgz",
- "integrity": "sha512-WkhW1HO8pA8JT8e27tvjQHQg8eO5KaOz+WsGkN00RyL5DwHgPSzu4a3eYug+b3rW7OGFub7jadXBuGSrzqgonA==",
+ "version": "20.3.17",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.3.17.tgz",
+ "integrity": "sha512-cTqiKBXZRxRfmV6rzjceu7swQ1N/KUMuS+jgoLqRZqPFNIfe7SDk4L5ou889q4wyfEMO4tED4dzjK30jLJ98SA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "20.3.15",
- "@angular-devkit/schematics": "20.3.15",
+ "@angular-devkit/core": "20.3.17",
+ "@angular-devkit/schematics": "20.3.17",
"jsonc-parser": "3.3.1"
},
"engines": {
@@ -9369,9 +9339,9 @@
}
},
"node_modules/@schematics/angular/node_modules/@angular-devkit/core": {
- "version": "20.3.15",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.15.tgz",
- "integrity": "sha512-s7sE4S5Hy62dLrtHwizbZaMcupAE8fPhm6rF+jBkhHZ75zXGhGzXP8WKFztYCAuGnis4pPnGSEKP/xVTc2lw6Q==",
+ "version": "20.3.17",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.17.tgz",
+ "integrity": "sha512-xlBT8rmyTjb5P/p6wDHp0EleagptjSHGNsJwqSY4FdIG0p59ezAbb2wbQGqkYDxuoptFSLUpAGE7sNWZ5OiLWw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -15770,12 +15740,11 @@
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"node_modules/hono": {
- "version": "4.11.9",
- "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.9.tgz",
- "integrity": "sha512-Eaw2YTGM6WOxA6CXbckaEvslr2Ne4NFsKrvc0v97JD5awbmeBLO5w9Ho9L9kmKonrwF9RJlW6BxT1PVv/agBHQ==",
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.2.tgz",
+ "integrity": "sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=16.9.0"
}
@@ -19968,6 +19937,160 @@
"resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.8.1.tgz",
"integrity": "sha512-93TweAi8kqntHJSPiSWQ1o/uZ29VWOmal9YKb6KKGGlCkugaNfAupT7o1qTHqdJvNQ7S0su5rO6qRFCjP8fxtw=="
},
+ "node_modules/npm": {
+ "version": "11.10.1",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-11.10.1.tgz",
+ "integrity": "sha512-woavuY2OgDFQ1K/tB9QHsUuW989nKfvsKTN/h5qGyS+3+BhvXN/DA2TNzx569JaFfTqrET5bEQNHwVhFk+U1gg==",
+ "bundleDependencies": [
+ "@isaacs/string-locale-compare",
+ "@npmcli/arborist",
+ "@npmcli/config",
+ "@npmcli/fs",
+ "@npmcli/map-workspaces",
+ "@npmcli/metavuln-calculator",
+ "@npmcli/package-json",
+ "@npmcli/promise-spawn",
+ "@npmcli/redact",
+ "@npmcli/run-script",
+ "@sigstore/tuf",
+ "abbrev",
+ "archy",
+ "cacache",
+ "chalk",
+ "ci-info",
+ "fastest-levenshtein",
+ "fs-minipass",
+ "glob",
+ "graceful-fs",
+ "hosted-git-info",
+ "ini",
+ "init-package-json",
+ "is-cidr",
+ "json-parse-even-better-errors",
+ "libnpmaccess",
+ "libnpmdiff",
+ "libnpmexec",
+ "libnpmfund",
+ "libnpmorg",
+ "libnpmpack",
+ "libnpmpublish",
+ "libnpmsearch",
+ "libnpmteam",
+ "libnpmversion",
+ "make-fetch-happen",
+ "minimatch",
+ "minipass",
+ "minipass-pipeline",
+ "ms",
+ "node-gyp",
+ "nopt",
+ "npm-audit-report",
+ "npm-install-checks",
+ "npm-package-arg",
+ "npm-pick-manifest",
+ "npm-profile",
+ "npm-registry-fetch",
+ "npm-user-validate",
+ "p-map",
+ "pacote",
+ "parse-conflict-json",
+ "proc-log",
+ "qrcode-terminal",
+ "read",
+ "semver",
+ "spdx-expression-parse",
+ "ssri",
+ "supports-color",
+ "tar",
+ "text-table",
+ "tiny-relative-date",
+ "treeverse",
+ "validate-npm-package-name",
+ "which"
+ ],
+ "license": "Artistic-2.0",
+ "workspaces": [
+ "docs",
+ "smoke-tests",
+ "mock-globals",
+ "mock-registry",
+ "workspaces/*"
+ ],
+ "dependencies": {
+ "@isaacs/string-locale-compare": "^1.1.0",
+ "@npmcli/arborist": "^9.3.1",
+ "@npmcli/config": "^10.7.1",
+ "@npmcli/fs": "^5.0.0",
+ "@npmcli/map-workspaces": "^5.0.3",
+ "@npmcli/metavuln-calculator": "^9.0.3",
+ "@npmcli/package-json": "^7.0.5",
+ "@npmcli/promise-spawn": "^9.0.1",
+ "@npmcli/redact": "^4.0.0",
+ "@npmcli/run-script": "^10.0.3",
+ "@sigstore/tuf": "^4.0.1",
+ "abbrev": "^4.0.0",
+ "archy": "~1.0.0",
+ "cacache": "^20.0.3",
+ "chalk": "^5.6.2",
+ "ci-info": "^4.4.0",
+ "fastest-levenshtein": "^1.0.16",
+ "fs-minipass": "^3.0.3",
+ "glob": "^13.0.6",
+ "graceful-fs": "^4.2.11",
+ "hosted-git-info": "^9.0.2",
+ "ini": "^6.0.0",
+ "init-package-json": "^8.2.5",
+ "is-cidr": "^6.0.3",
+ "json-parse-even-better-errors": "^5.0.0",
+ "libnpmaccess": "^10.0.3",
+ "libnpmdiff": "^8.1.2",
+ "libnpmexec": "^10.2.2",
+ "libnpmfund": "^7.0.16",
+ "libnpmorg": "^8.0.1",
+ "libnpmpack": "^9.1.2",
+ "libnpmpublish": "^11.1.3",
+ "libnpmsearch": "^9.0.1",
+ "libnpmteam": "^8.0.2",
+ "libnpmversion": "^8.0.3",
+ "make-fetch-happen": "^15.0.3",
+ "minimatch": "^10.2.2",
+ "minipass": "^7.1.3",
+ "minipass-pipeline": "^1.2.4",
+ "ms": "^2.1.2",
+ "node-gyp": "^12.2.0",
+ "nopt": "^9.0.0",
+ "npm-audit-report": "^7.0.0",
+ "npm-install-checks": "^8.0.0",
+ "npm-package-arg": "^13.0.2",
+ "npm-pick-manifest": "^11.0.3",
+ "npm-profile": "^12.0.1",
+ "npm-registry-fetch": "^19.1.1",
+ "npm-user-validate": "^4.0.0",
+ "p-map": "^7.0.4",
+ "pacote": "^21.3.1",
+ "parse-conflict-json": "^5.0.1",
+ "proc-log": "^6.1.0",
+ "qrcode-terminal": "^0.12.0",
+ "read": "^5.0.1",
+ "semver": "^7.7.4",
+ "spdx-expression-parse": "^4.0.0",
+ "ssri": "^13.0.1",
+ "supports-color": "^10.2.2",
+ "tar": "^7.5.9",
+ "text-table": "~0.2.0",
+ "tiny-relative-date": "^2.0.2",
+ "treeverse": "^3.0.0",
+ "validate-npm-package-name": "^7.0.2",
+ "which": "^6.0.1"
+ },
+ "bin": {
+ "npm": "bin/npm-cli.js",
+ "npx": "bin/npx-cli.js"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
"node_modules/npm-bundled": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz",
@@ -20125,6 +20248,1676 @@
"node": ">=8"
}
},
+ "node_modules/npm/node_modules/@isaacs/fs-minipass": {
+ "version": "4.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^7.0.4"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/@isaacs/string-locale-compare": {
+ "version": "1.1.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/@npmcli/agent": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.1",
+ "lru-cache": "^11.2.1",
+ "socks-proxy-agent": "^8.0.3"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/arborist": {
+ "version": "9.3.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@isaacs/string-locale-compare": "^1.1.0",
+ "@npmcli/fs": "^5.0.0",
+ "@npmcli/installed-package-contents": "^4.0.0",
+ "@npmcli/map-workspaces": "^5.0.0",
+ "@npmcli/metavuln-calculator": "^9.0.2",
+ "@npmcli/name-from-folder": "^4.0.0",
+ "@npmcli/node-gyp": "^5.0.0",
+ "@npmcli/package-json": "^7.0.0",
+ "@npmcli/query": "^5.0.0",
+ "@npmcli/redact": "^4.0.0",
+ "@npmcli/run-script": "^10.0.0",
+ "bin-links": "^6.0.0",
+ "cacache": "^20.0.1",
+ "common-ancestor-path": "^2.0.0",
+ "hosted-git-info": "^9.0.0",
+ "json-stringify-nice": "^1.1.4",
+ "lru-cache": "^11.2.1",
+ "minimatch": "^10.0.3",
+ "nopt": "^9.0.0",
+ "npm-install-checks": "^8.0.0",
+ "npm-package-arg": "^13.0.0",
+ "npm-pick-manifest": "^11.0.1",
+ "npm-registry-fetch": "^19.0.0",
+ "pacote": "^21.0.2",
+ "parse-conflict-json": "^5.0.1",
+ "proc-log": "^6.0.0",
+ "proggy": "^4.0.0",
+ "promise-all-reject-late": "^1.0.0",
+ "promise-call-limit": "^3.0.1",
+ "semver": "^7.3.7",
+ "ssri": "^13.0.0",
+ "treeverse": "^3.0.0",
+ "walk-up-path": "^4.0.0"
+ },
+ "bin": {
+ "arborist": "bin/index.js"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/config": {
+ "version": "10.7.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/map-workspaces": "^5.0.0",
+ "@npmcli/package-json": "^7.0.0",
+ "ci-info": "^4.0.0",
+ "ini": "^6.0.0",
+ "nopt": "^9.0.0",
+ "proc-log": "^6.0.0",
+ "semver": "^7.3.5",
+ "walk-up-path": "^4.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/fs": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/git": {
+ "version": "7.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/promise-spawn": "^9.0.0",
+ "ini": "^6.0.0",
+ "lru-cache": "^11.2.1",
+ "npm-pick-manifest": "^11.0.1",
+ "proc-log": "^6.0.0",
+ "promise-retry": "^2.0.1",
+ "semver": "^7.3.5",
+ "which": "^6.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/installed-package-contents": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-bundled": "^5.0.0",
+ "npm-normalize-package-bin": "^5.0.0"
+ },
+ "bin": {
+ "installed-package-contents": "bin/index.js"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/map-workspaces": {
+ "version": "5.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/name-from-folder": "^4.0.0",
+ "@npmcli/package-json": "^7.0.0",
+ "glob": "^13.0.0",
+ "minimatch": "^10.0.3"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/metavuln-calculator": {
+ "version": "9.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "cacache": "^20.0.0",
+ "json-parse-even-better-errors": "^5.0.0",
+ "pacote": "^21.0.0",
+ "proc-log": "^6.0.0",
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/name-from-folder": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/node-gyp": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/package-json": {
+ "version": "7.0.5",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/git": "^7.0.0",
+ "glob": "^13.0.0",
+ "hosted-git-info": "^9.0.0",
+ "json-parse-even-better-errors": "^5.0.0",
+ "proc-log": "^6.0.0",
+ "semver": "^7.5.3",
+ "spdx-expression-parse": "^4.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/promise-spawn": {
+ "version": "9.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "which": "^6.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/query": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "postcss-selector-parser": "^7.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/redact": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/run-script": {
+ "version": "10.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/node-gyp": "^5.0.0",
+ "@npmcli/package-json": "^7.0.0",
+ "@npmcli/promise-spawn": "^9.0.0",
+ "node-gyp": "^12.1.0",
+ "proc-log": "^6.0.0",
+ "which": "^6.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@sigstore/bundle": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@sigstore/protobuf-specs": "^0.5.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@sigstore/core": {
+ "version": "3.1.0",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@sigstore/protobuf-specs": {
+ "version": "0.5.0",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ }
+ },
+ "node_modules/npm/node_modules/@sigstore/sign": {
+ "version": "4.1.0",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@sigstore/bundle": "^4.0.0",
+ "@sigstore/core": "^3.1.0",
+ "@sigstore/protobuf-specs": "^0.5.0",
+ "make-fetch-happen": "^15.0.3",
+ "proc-log": "^6.1.0",
+ "promise-retry": "^2.0.1"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@sigstore/tuf": {
+ "version": "4.0.1",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@sigstore/protobuf-specs": "^0.5.0",
+ "tuf-js": "^4.1.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@sigstore/verify": {
+ "version": "3.1.0",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@sigstore/bundle": "^4.0.0",
+ "@sigstore/core": "^3.1.0",
+ "@sigstore/protobuf-specs": "^0.5.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@tufjs/canonical-json": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/@tufjs/models": {
+ "version": "4.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "@tufjs/canonical-json": "2.0.0",
+ "minimatch": "^10.1.1"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/abbrev": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/agent-base": {
+ "version": "7.1.4",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/npm/node_modules/aproba": {
+ "version": "2.1.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/archy": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/balanced-match": {
+ "version": "4.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/npm/node_modules/bin-links": {
+ "version": "6.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "cmd-shim": "^8.0.0",
+ "npm-normalize-package-bin": "^5.0.0",
+ "proc-log": "^6.0.0",
+ "read-cmd-shim": "^6.0.0",
+ "write-file-atomic": "^7.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/binary-extensions": {
+ "version": "3.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/npm/node_modules/brace-expansion": {
+ "version": "5.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/npm/node_modules/cacache": {
+ "version": "20.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/fs": "^5.0.0",
+ "fs-minipass": "^3.0.0",
+ "glob": "^13.0.0",
+ "lru-cache": "^11.1.0",
+ "minipass": "^7.0.3",
+ "minipass-collect": "^2.0.1",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "p-map": "^7.0.2",
+ "ssri": "^13.0.0",
+ "unique-filename": "^5.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/chalk": {
+ "version": "5.6.2",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/npm/node_modules/chownr": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/npm/node_modules/ci-info": {
+ "version": "4.4.0",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/cidr-regex": {
+ "version": "5.0.3",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/npm/node_modules/cmd-shim": {
+ "version": "8.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/common-ancestor-path": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/npm/node_modules/cssesc": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/debug": {
+ "version": "4.4.3",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/npm/node_modules/diff": {
+ "version": "8.0.3",
+ "inBundle": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/npm/node_modules/encoding": {
+ "version": "0.1.13",
+ "inBundle": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "iconv-lite": "^0.6.2"
+ }
+ },
+ "node_modules/npm/node_modules/env-paths": {
+ "version": "2.2.1",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/npm/node_modules/err-code": {
+ "version": "2.0.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/exponential-backoff": {
+ "version": "3.1.3",
+ "inBundle": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/npm/node_modules/fastest-levenshtein": {
+ "version": "1.0.16",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4.9.1"
+ }
+ },
+ "node_modules/npm/node_modules/fs-minipass": {
+ "version": "3.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^7.0.3"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/glob": {
+ "version": "13.0.6",
+ "inBundle": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "minimatch": "^10.2.2",
+ "minipass": "^7.1.3",
+ "path-scurry": "^2.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/npm/node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/hosted-git-info": {
+ "version": "9.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^11.1.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/http-cache-semantics": {
+ "version": "4.2.0",
+ "inBundle": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/npm/node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/npm/node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/npm/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "inBundle": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm/node_modules/ignore-walk": {
+ "version": "8.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minimatch": "^10.0.3"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/npm/node_modules/ini": {
+ "version": "6.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/init-package-json": {
+ "version": "8.2.5",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/package-json": "^7.0.0",
+ "npm-package-arg": "^13.0.0",
+ "promzard": "^3.0.1",
+ "read": "^5.0.1",
+ "semver": "^7.7.2",
+ "validate-npm-package-name": "^7.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/ip-address": {
+ "version": "10.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/npm/node_modules/is-cidr": {
+ "version": "6.0.3",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "cidr-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/npm/node_modules/isexe": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/npm/node_modules/json-parse-even-better-errors": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/json-stringify-nice": {
+ "version": "1.1.4",
+ "inBundle": true,
+ "license": "ISC",
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/npm/node_modules/jsonparse": {
+ "version": "1.3.1",
+ "engines": [
+ "node >= 0.2.0"
+ ],
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/just-diff": {
+ "version": "6.0.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/just-diff-apply": {
+ "version": "5.5.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/libnpmaccess": {
+ "version": "10.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-package-arg": "^13.0.0",
+ "npm-registry-fetch": "^19.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmdiff": {
+ "version": "8.1.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/arborist": "^9.3.1",
+ "@npmcli/installed-package-contents": "^4.0.0",
+ "binary-extensions": "^3.0.0",
+ "diff": "^8.0.2",
+ "minimatch": "^10.0.3",
+ "npm-package-arg": "^13.0.0",
+ "pacote": "^21.0.2",
+ "tar": "^7.5.1"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmexec": {
+ "version": "10.2.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/arborist": "^9.3.1",
+ "@npmcli/package-json": "^7.0.0",
+ "@npmcli/run-script": "^10.0.0",
+ "ci-info": "^4.0.0",
+ "npm-package-arg": "^13.0.0",
+ "pacote": "^21.0.2",
+ "proc-log": "^6.0.0",
+ "promise-retry": "^2.0.1",
+ "read": "^5.0.1",
+ "semver": "^7.3.7",
+ "signal-exit": "^4.1.0",
+ "walk-up-path": "^4.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmfund": {
+ "version": "7.0.16",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/arborist": "^9.3.1"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmorg": {
+ "version": "8.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "npm-registry-fetch": "^19.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmpack": {
+ "version": "9.1.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/arborist": "^9.3.1",
+ "@npmcli/run-script": "^10.0.0",
+ "npm-package-arg": "^13.0.0",
+ "pacote": "^21.0.2"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmpublish": {
+ "version": "11.1.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/package-json": "^7.0.0",
+ "ci-info": "^4.0.0",
+ "npm-package-arg": "^13.0.0",
+ "npm-registry-fetch": "^19.0.0",
+ "proc-log": "^6.0.0",
+ "semver": "^7.3.7",
+ "sigstore": "^4.0.0",
+ "ssri": "^13.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmsearch": {
+ "version": "9.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-registry-fetch": "^19.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmteam": {
+ "version": "8.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^2.0.0",
+ "npm-registry-fetch": "^19.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/libnpmversion": {
+ "version": "8.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/git": "^7.0.0",
+ "@npmcli/run-script": "^10.0.0",
+ "json-parse-even-better-errors": "^5.0.0",
+ "proc-log": "^6.0.0",
+ "semver": "^7.3.7"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/lru-cache": {
+ "version": "11.2.6",
+ "inBundle": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/npm/node_modules/make-fetch-happen": {
+ "version": "15.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/agent": "^4.0.0",
+ "cacache": "^20.0.1",
+ "http-cache-semantics": "^4.1.1",
+ "minipass": "^7.0.2",
+ "minipass-fetch": "^5.0.0",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^1.0.0",
+ "proc-log": "^6.0.0",
+ "promise-retry": "^2.0.1",
+ "ssri": "^13.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/minimatch": {
+ "version": "10.2.2",
+ "inBundle": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "brace-expansion": "^5.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/npm/node_modules/minipass": {
+ "version": "7.1.3",
+ "inBundle": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/npm/node_modules/minipass-collect": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^7.0.3"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/npm/node_modules/minipass-fetch": {
+ "version": "5.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^7.0.3",
+ "minipass-sized": "^2.0.0",
+ "minizlib": "^3.0.1"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ },
+ "optionalDependencies": {
+ "encoding": "^0.1.13"
+ }
+ },
+ "node_modules/npm/node_modules/minipass-flush": {
+ "version": "1.0.5",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": {
+ "version": "3.3.6",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/minipass-flush/node_modules/yallist": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/minipass-pipeline": {
+ "version": "1.2.4",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": {
+ "version": "3.3.6",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/minipass-pipeline/node_modules/yallist": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "ISC"
+ },
+ "node_modules/npm/node_modules/minipass-sized": {
+ "version": "2.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/npm/node_modules/minizlib": {
+ "version": "3.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/npm/node_modules/ms": {
+ "version": "2.1.3",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/mute-stream": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/negotiator": {
+ "version": "1.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/npm/node_modules/node-gyp": {
+ "version": "12.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "env-paths": "^2.2.0",
+ "exponential-backoff": "^3.1.1",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^15.0.0",
+ "nopt": "^9.0.0",
+ "proc-log": "^6.0.0",
+ "semver": "^7.3.5",
+ "tar": "^7.5.4",
+ "tinyglobby": "^0.2.12",
+ "which": "^6.0.0"
+ },
+ "bin": {
+ "node-gyp": "bin/node-gyp.js"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/nopt": {
+ "version": "9.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "abbrev": "^4.0.0"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-audit-report": {
+ "version": "7.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-bundled": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-normalize-package-bin": "^5.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-install-checks": {
+ "version": "8.0.0",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "semver": "^7.1.1"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-normalize-package-bin": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-package-arg": {
+ "version": "13.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "hosted-git-info": "^9.0.0",
+ "proc-log": "^6.0.0",
+ "semver": "^7.3.5",
+ "validate-npm-package-name": "^7.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-packlist": {
+ "version": "10.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "ignore-walk": "^8.0.0",
+ "proc-log": "^6.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-pick-manifest": {
+ "version": "11.0.3",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-install-checks": "^8.0.0",
+ "npm-normalize-package-bin": "^5.0.0",
+ "npm-package-arg": "^13.0.0",
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-profile": {
+ "version": "12.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "npm-registry-fetch": "^19.0.0",
+ "proc-log": "^6.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-registry-fetch": {
+ "version": "19.1.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/redact": "^4.0.0",
+ "jsonparse": "^1.3.1",
+ "make-fetch-happen": "^15.0.0",
+ "minipass": "^7.0.2",
+ "minipass-fetch": "^5.0.0",
+ "minizlib": "^3.0.1",
+ "npm-package-arg": "^13.0.0",
+ "proc-log": "^6.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/npm-user-validate": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/p-map": {
+ "version": "7.0.4",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/npm/node_modules/pacote": {
+ "version": "21.3.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/git": "^7.0.0",
+ "@npmcli/installed-package-contents": "^4.0.0",
+ "@npmcli/package-json": "^7.0.0",
+ "@npmcli/promise-spawn": "^9.0.0",
+ "@npmcli/run-script": "^10.0.0",
+ "cacache": "^20.0.0",
+ "fs-minipass": "^3.0.0",
+ "minipass": "^7.0.2",
+ "npm-package-arg": "^13.0.0",
+ "npm-packlist": "^10.0.1",
+ "npm-pick-manifest": "^11.0.1",
+ "npm-registry-fetch": "^19.0.0",
+ "proc-log": "^6.0.0",
+ "promise-retry": "^2.0.1",
+ "sigstore": "^4.0.0",
+ "ssri": "^13.0.0",
+ "tar": "^7.4.3"
+ },
+ "bin": {
+ "pacote": "bin/index.js"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/parse-conflict-json": {
+ "version": "5.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "json-parse-even-better-errors": "^5.0.0",
+ "just-diff": "^6.0.0",
+ "just-diff-apply": "^5.2.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/path-scurry": {
+ "version": "2.0.2",
+ "inBundle": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^11.0.0",
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/npm/node_modules/postcss-selector-parser": {
+ "version": "7.1.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm/node_modules/proc-log": {
+ "version": "6.1.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/proggy": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/promise-all-reject-late": {
+ "version": "1.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/npm/node_modules/promise-call-limit": {
+ "version": "3.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/npm/node_modules/promise-retry": {
+ "version": "2.0.1",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "err-code": "^2.0.2",
+ "retry": "^0.12.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/npm/node_modules/promzard": {
+ "version": "3.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "read": "^5.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/qrcode-terminal": {
+ "version": "0.12.0",
+ "inBundle": true,
+ "bin": {
+ "qrcode-terminal": "bin/qrcode-terminal.js"
+ }
+ },
+ "node_modules/npm/node_modules/read": {
+ "version": "5.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "mute-stream": "^3.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/read-cmd-shim": {
+ "version": "6.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/retry": {
+ "version": "0.12.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/npm/node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "inBundle": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/npm/node_modules/semver": {
+ "version": "7.7.4",
+ "inBundle": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/npm/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/npm/node_modules/sigstore": {
+ "version": "4.1.0",
+ "inBundle": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@sigstore/bundle": "^4.0.0",
+ "@sigstore/core": "^3.1.0",
+ "@sigstore/protobuf-specs": "^0.5.0",
+ "@sigstore/sign": "^4.1.0",
+ "@sigstore/tuf": "^4.0.1",
+ "@sigstore/verify": "^3.1.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/socks": {
+ "version": "2.8.7",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "ip-address": "^10.0.1",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/socks-proxy-agent": {
+ "version": "8.0.5",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "socks": "^2.8.3"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/npm/node_modules/spdx-exceptions": {
+ "version": "2.5.0",
+ "inBundle": true,
+ "license": "CC-BY-3.0"
+ },
+ "node_modules/npm/node_modules/spdx-expression-parse": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/spdx-license-ids": {
+ "version": "3.0.22",
+ "inBundle": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/npm/node_modules/ssri": {
+ "version": "13.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^7.0.3"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/supports-color": {
+ "version": "10.2.2",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/npm/node_modules/tar": {
+ "version": "7.5.9",
+ "inBundle": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/fs-minipass": "^4.0.0",
+ "chownr": "^3.0.0",
+ "minipass": "^7.1.2",
+ "minizlib": "^3.1.0",
+ "yallist": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/npm/node_modules/text-table": {
+ "version": "0.2.0",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/tiny-relative-date": {
+ "version": "2.0.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.3",
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/npm/node_modules/treeverse": {
+ "version": "3.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/npm/node_modules/tuf-js": {
+ "version": "4.1.0",
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "@tufjs/models": "4.1.0",
+ "debug": "^4.4.3",
+ "make-fetch-happen": "^15.0.1"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/unique-filename": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "unique-slug": "^6.0.0"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/unique-slug": {
+ "version": "6.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "imurmurhash": "^0.1.4"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "inBundle": true,
+ "license": "MIT"
+ },
+ "node_modules/npm/node_modules/validate-npm-package-name": {
+ "version": "7.0.2",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/walk-up-path": {
+ "version": "4.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/npm/node_modules/which": {
+ "version": "6.0.1",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^4.0.0"
+ },
+ "bin": {
+ "node-which": "bin/which.js"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/write-file-atomic": {
+ "version": "7.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/yallist": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/nth-check": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
diff --git a/package.json b/package.json
index c7d8e9742a..9b741fa1ec 100644
--- a/package.json
+++ b/package.json
@@ -77,6 +77,8 @@
}
},
"dependencies": {
+ "@4science_ng-dynamic-forms/core": "^19.1.0",
+ "@4science_ng-dynamic-forms/ui-ng-bootstrap": "^19.1.0",
"@angular/animations": "^20.3.16",
"@angular/cdk": "^20.2.14",
"@angular/common": "^20.3.16",
@@ -91,8 +93,6 @@
"@angular/ssr": "^20.3.10",
"@kolkov/ngx-gallery": "^2.0.1",
"@ng-bootstrap/ng-bootstrap": "^15.1.2",
- "@4science_ng-dynamic-forms/core": "^19.1.0",
- "@4science_ng-dynamic-forms/ui-ng-bootstrap": "^19.1.0",
"@ngrx/effects": "^20.1.0",
"@ngrx/router-store": "^20.1.0",
"@ngrx/store": "^20.1.0",
@@ -143,6 +143,7 @@
"ngx-skeleton-loader": "^11.3.0",
"ngx-ui-switch": "^16.1.0",
"nouislider": "^15.7.1",
+ "npm": "^11.10.1",
"orejime": "^2.3.1",
"pem": "1.14.8",
"reflect-metadata": "^0.2.2",
@@ -161,12 +162,13 @@
"@angular-eslint/schematics": "^20.7.0",
"@angular-eslint/template-parser": "^20.6.0",
"@angular-eslint/utils": "^20.7.0",
- "@angular/cli": "^20.3.15",
+ "@angular/cli": "^20.3.17",
"@angular/compiler-cli": "^20.3.12",
"@cypress/schematic": "^1.5.0",
"@fortawesome/fontawesome-free": "^6.7.2",
"@ngrx/store-devtools": "^20.1.0",
"@ngtools/webpack": "^20.3.10",
+ "@smarttools/eslint-plugin-rxjs": "^1.0.22",
"@stylistic/eslint-plugin": "^3.1.0",
"@types/deep-freeze": "0.1.5",
"@types/ejs": "^3.1.2",
@@ -196,7 +198,6 @@
"eslint-plugin-jsdoc": "^61.4.1",
"eslint-plugin-jsonc": "^2.21.0",
"eslint-plugin-lodash": "^7.4.0",
- "@smarttools/eslint-plugin-rxjs": "^1.0.22",
"eslint-plugin-simple-import-sort": "^12.1.1",
"eslint-plugin-unused-imports": "^4.3.0",
"express-static-gzip": "^2.2.0",
diff --git a/src/app/header/header.component.ts b/src/app/header/header.component.ts
index 957cfa5a5b..eadcf560f2 100644
--- a/src/app/header/header.component.ts
+++ b/src/app/header/header.component.ts
@@ -56,6 +56,9 @@ export class HeaderComponent implements OnInit {
ngOnInit(): void {
this.isMobile$ = this.windowService.isUpTo(this.maxMobileWidth);
+ console.log('isMobile$', this.isMobile$);
+ console.log('menuID', this.menuID);
+ console.log('maxMobileWidth', this.maxMobileWidth);
}
public toggleNavbar(): void {
diff --git a/src/styles/_global-styles.scss b/src/styles/_global-styles.scss
index 6b794f06f6..e8dbb0adac 100644
--- a/src/styles/_global-styles.scss
+++ b/src/styles/_global-styles.scss
@@ -573,3 +573,4 @@ ngb-tooltip-window {
mask-size: contain;
background-color: currentColor;
}
+
diff --git a/src/themes/custom/app/footer/footer.component.html b/src/themes/custom/app/footer/footer.component.html
index e69de29bb2..29b8d49702 100644
--- a/src/themes/custom/app/footer/footer.component.html
+++ b/src/themes/custom/app/footer/footer.component.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/themes/custom/app/ksu-footer/ksu-footer.component.html b/src/themes/custom/app/ksu-footer/ksu-footer.component.html
new file mode 100644
index 0000000000..017d4a687c
--- /dev/null
+++ b/src/themes/custom/app/ksu-footer/ksu-footer.component.html
@@ -0,0 +1,115 @@
+
+
+
diff --git a/src/themes/custom/app/ksu-footer/ksu-footer.component.scss b/src/themes/custom/app/ksu-footer/ksu-footer.component.scss
new file mode 100644
index 0000000000..3db8d4084d
--- /dev/null
+++ b/src/themes/custom/app/ksu-footer/ksu-footer.component.scss
@@ -0,0 +1,681 @@
+/*footer*/
+
+.footer-ksu {
+ width: 100%;
+ background-color: #e0e0e0;
+ padding-top: 20px;
+ padding-bottom: 16px;
+ /*height: 200px; /*Bella Added for clarity*/
+}
+
+.footer-ksu .footer-ksu__inner {
+ position: relative;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ height: 100%;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center
+}
+
+@media (min-width:768px) {
+ .footer-ksu .footer-ksu__inner {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row
+ }
+
+}
+
+.footer-ksu .footer-ksu__logo {
+ margin-bottom: 12px
+}
+
+.footer-ksu .footer-ksu__logo>img {
+ width: 250px
+}
+
+@media (min-width:768px) {
+ .footer-ksu .footer-ksu__logo {
+ margin-right: 72px
+ }
+}
+
+@media (min-width:1024px) {
+ .footer-ksu .footer-ksu__logo {
+ margin-right: 30px
+ }
+}
+
+.footer-ksu .footer-ksu__menu-container {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ margin-top: 20px;
+ min-width: 250px
+}
+
+@media (min-width:1024px) {
+ .footer-ksu .footer-ksu__menu-container {
+ margin-top: 0
+ }
+}
+
+.footer-ksu .footer-ksu__menu {
+ list-style: none;
+ margin-left: 0;
+ margin-bottom: 16px;
+ margin-right: auto
+}
+
+@media (min-width:1024px) {
+ .footer-ksu .footer-ksu__menu {
+ margin-bottom: 8px
+ }
+}
+
+@media (min-width:1024px) {
+ .footer-ksu .footer-ksu__menu-item {
+ display: inline-block;
+ padding-left: 16px;
+ border-right: 1px solid #000;
+ padding-right: 16px
+ }
+ .footer-ksu .footer-ksu__menu-item:first-child {
+ padding-left: 0
+ }
+ .footer-ksu .footer-ksu__menu-item:last-child {
+ padding-right: 16px;
+ border-right: none
+ }
+}
+
+.footer-ksu .footer-ksu__menu-link {
+ color: #000;
+ font-size: 16px;
+ line-height: 24px
+}
+
+.footer-ksu .footer-ksu__menu-link:active,
+.footer-ksu .footer-ksu__menu-link:focus,
+.footer-ksu .footer-ksu__menu-link:link,
+.footer-ksu .footer-ksu__menu-link:visited {
+ color: #000;
+ text-decoration: none
+}
+
+.footer-ksu .footer-ksu__menu-link:hover {
+ color: #000;
+ text-decoration: underline
+}
+
+.footer-ksu .footer-ksu__menu-link .degree-stats {
+ width: 140px;
+ height: auto;
+ vertical-align: baseline
+}
+
+/*purple footer*/
+
+
+.global-footer__container {
+ width: 100%;
+ padding: 2.5rem 1.25rem;
+ position: relative;
+ background-position: center center;
+ opacity: 1;
+ z-index: 1;
+ background-color: #512888
+}
+
+.global-footer__container:before {
+ content: '';
+ background-image: url(/assets/krex/images/1200px-Kansas_State_University_seal.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+ background-size: cover;
+ opacity: .05;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ position: absolute;
+ z-index: -1
+}
+
+@media print,
+screen and (min-width:64em) {
+ .global-footer__container {
+ height: 24.0625rem;
+ padding: 6.25rem
+ }
+}
+
+.global-footer__inner {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ text-align: center;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-align-content: center;
+ -ms-flex-line-pack: center;
+ align-content: center;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column
+}
+
+@media print,
+screen and (min-width:64em) {
+ .global-footer__inner {
+ text-align: left;
+ -webkit-justify-content: space-around;
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row
+ }
+}
+
+.global-footer__inner p {
+ color: #fff;
+ margin: 0;
+ font-size: 1.25rem;
+ line-height: 1.75rem
+}
+
+.global-footer__left,
+.global-footer__right {
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center
+}
+
+.global-footer__right {
+ margin-top: 2.5rem
+}
+
+@media print,
+screen and (min-width:64em) {
+ .global-footer__right {
+ margin-top: 0
+ }
+}
+
+.global-footer__right p:first-child {
+ margin-bottom: 2.25rem
+}
+
+.global-footer__large-text {
+ font-weight: 700;
+ text-transform: uppercase
+}
+
+.global-footer__divider {
+ display: none;
+ margin: 0 1.25rem;
+ color: #fff;
+ font-size: 1.125rem;
+ line-height: 1.75rem
+}
+
+@media print,
+screen and (min-width:48em) {
+ .global-footer__divider {
+ display: inline-block
+ }
+}
+
+.global-footer__address-link {
+ display: block;
+ color: #fff
+}
+
+.global-footer__address-link:active,
+.global-footer__address-link:focus,
+.global-footer__address-link:link,
+.global-footer__address-link:visited {
+ color: #fff;
+ text-decoration: none
+}
+
+.global-footer__address-link:focus {
+ outline: .0625rem solid #fff
+}
+
+.global-footer__address-link:hover {
+ color: #fff
+}
+
+@media print,
+screen and (min-width:48em) {
+ .global-footer__address-link {
+ display: inline-block
+ }
+}
+
+
+.footer-links {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ margin-bottom: 2.5rem;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-flex-wrap: nowrap;
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center
+}
+
+@media print,
+screen and (min-width:64em) {
+ .footer-links {
+ margin-bottom: 1.25rem
+ }
+}
+
+.footer-links__link-container {
+ display: inline-block;
+ width: 3.75rem;
+ height: 3.75rem
+}
+
+.footer-links__link-container:not(:first-child) {
+ margin-left: 1.25rem
+}
+
+@media print,
+screen and (min-width:48em) {
+ .footer-links__link-container {
+ width: 4.375rem;
+ height: 4.375rem
+ }
+ .footer-links__link-container:not(:first-child) {
+ margin-left: 2.375rem
+ }
+}
+
+.footer-links__link {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ width: 100%;
+ height: 100%;
+ background-color: transparent;
+ border-color: #f0ad00;
+ border-width: .125rem;
+ border-style: solid;
+ border-radius: 50%;
+ padding: .9375rem;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-transition: background-color .2s linear, border-color .2s linear;
+ transition: background-color .2s linear, border-color .2s linear
+}
+
+.footer-links__link:active,
+.footer-links__link:link,
+.footer-links__link:visited {
+ text-decoration: none
+}
+
+.footer-links__link:focus,
+.footer-links__link:hover {
+ text-decoration: none;
+ border-color: #fff;
+ background-color: #fff;
+ outline: 0
+}
+
+.footer-links__link:focus svg,
+.footer-links__link:hover svg {
+ fill: #512888
+}
+
+.footer-links__link svg {
+ width: 2.125rem;
+ height: 2.125rem;
+ fill: #fff;
+ -webkit-transition: fill .2s linear;
+ transition: fill .2s linear
+}
+
+[hidden] {
+ display: none
+}
+
+.programs-grid .link-button {
+ color: #fff;
+ margin-bottom: 1.25rem
+}
+
+.programs-grid .link-button:active,
+.programs-grid .link-button:focus,
+.programs-grid .link-button:link,
+.programs-grid .link-button:visited {
+ color: #fff
+}
+
+.programs-grid .link-button:hover {
+ color: #fff
+}
+
+.link-button {
+ color: #512888;
+ font-family: myriad-pro, "Open Sans", Helvetica, Arial, sans-serif;
+ font-weight: 700;
+ font-style: normal;
+ font-size: 1.25rem;
+ line-height: 1.5rem
+}
+
+.link-button:active,
+.link-button:focus,
+.link-button:hover,
+.link-button:link,
+.link-button:visited {
+ color: #512888;
+ text-decoration: none
+}
+
+.link-button:focus svg,
+.link-button:hover svg {
+ margin-left: .9375rem
+}
+
+.link-button svg {
+ fill: #f0ad00;
+ width: .75rem;
+ height: .75rem;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ margin-left: .3125rem;
+ -webkit-transition: margin-left .2s linear;
+ transition: margin-left .2s linear
+}
+
+.brei-icon {
+ fill: white;
+}
+
+#main-menu .navbar-nav > li > a:focus {
+ text-decoration: none;
+ border-bottom: 4px solid #825EB9;
+}
+
+#ksu-search-block a:link,#ksu-search-block a:visited {
+ color: #fff;
+ text-decoration: none;
+}
+
+#ksu-footer-links li a, #ksu-footer-links li a:link {
+ color: #fff;
+ text-decoration: none;
+}
+
+#ksu-footer-addr a, #ksu-footer-addr a:link, #ksu-footer-addr a:visited, #ksu-footer-line2 > li > a, #ksu-footer-line2 > li > a:link, #ksu-footer-line2 > li > a:visited {
+ color: #fff;
+ text-decoration: none;
+}
+
+a:link,a:visited,a:hover,a:active,a:focus {
+ color: #512888;
+}
+
+h2 a:link {
+ font-size: 1.5em !important;
+}
+
+h3 a:link {
+ font-size: 1.125em !important;
+}
+
+h4 a:link {
+ font-size: 1em !important;
+}
+
+h5 a:link {
+ font-size: 0.875em !important;
+}
+
+h6 a:link {
+ font-size: 0.7em !important;
+}
+
+a:link { text-decoration: none; }
+
+.ksul-guide-label {
+ text-align: right;
+ font-size: 1.3rem;
+ font-style: italic;
+ padding-right: .5rem;
+ color: white;
+ background-color: #512888;
+}
+
+.s-lib-box-content a {
+ color: rgb(81, 40, 136) !important;
+ font-weight: bold !important;
+ font-family: myriad-pro, "Open Sans", Helvetica, Arial, sans-serif !important;
+ /*font-size: medium !important;*/
+}
+
+.s-lib-box-content a span {
+ color: #512888 !important;
+}
+
+.s-lib-box .s-lib-box-title {
+ text-align: left;
+ font-size: 1.5rem !important;
+ border-bottom: 3px solid #d1d1c9;
+ padding-left:0px;
+ display: block;
+ margin-left: 0;
+ margin-right: 0;
+ font-weight: bold;
+ background-color: #ffffff;
+ color: #512888;
+}
+
+.s-lg-tabs-side .s-lib-box-container {
+ padding: .5rem;
+ border:lightgrey solid .9rem;
+border-radius:3px;
+}
+
+
+.unit-bar {
+ position: relative;
+ z-index: 99;
+ color: #512888;
+ background-color: #fff;
+ padding: 0 1rem 0 0;
+ font-size: 1.5rem;
+ padding-left: 1.25rem;
+ padding-right: 1.25rem
+}
+
+@media print,
+screen and (min-width:64em) {
+ .unit-bar {
+ padding-left: 1.875rem;
+ padding-right: 1.875rem
+ }
+}
+
+@media screen and (min-width:75em) {
+ .unit-bar {
+ padding-left: 6.25rem;
+ padding-right: 6.25rem
+ }
+}
+
+.unit-bar.dark {
+ background-color: #512888;
+ color: #fff
+}
+
+.unit-bar__container {
+ position: relative;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ height: 3.5rem
+}
+
+.unit-bar__link,
+.unit-bar__link:active,
+.unit-bar__link:focus,
+.unit-bar__link:hover,
+.unit-bar__link:link,
+.unit-bar__link:visited {
+ text-decoration: none;
+ color: currentColor;
+ padding: 5px;
+ max-height: 3.5rem
+}
+
+.unit-bar__link:focus {
+ outline: 5px solid #f0ad00
+}
+
+.unit-bar__logo {
+ margin-right: 1rem;
+ line-height: 0
+}
+
+.unit-bar__logo>a {
+ padding-left: 0
+}
+
+.unit-bar__logo svg {
+ display: block;
+ width: 2.5rem;
+ height: 2rem
+}
+
+.unit-bar__bar {
+ position: relative;
+ border-left: 1.4px solid currentColor;
+ margin-right: 1rem;
+ height: 2rem;
+ vertical-align: middle
+}
+
+.unit-bar__name {
+ position: relative;
+ margin-right: 85px;
+ font-weight: 700;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ line-height: 0
+}
+
+.unit-bar__name>a:link {
+ position: relative;
+ top: -3px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ line-height: 1;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical
+}
+
+.unit-bar__menu-buttons {
+ height: 100%;
+ position: absolute;
+ top: 0;
+ right: 0;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ width: 5.125rem;
+ height: 100%;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #512888
+}
+
+@media print,
+screen and (min-width:64em) {
+ .unit-bar__menu-buttons {
+ display: none
+ }
+}
+
+.unit-bar__menu-buttons svg {
+ width: 2.375rem;
+ height: 2.375rem;
+ fill: #fff
+}
+
+.unit-bar__menu-buttons .brei-icon-close {
+ display: none
+}
+
+.js-menu-open .unit-bar__menu-buttons .brei-icon-menu {
+ display: none
+}
+
+.js-menu-open .unit-bar__menu-buttons .brei-icon-close {
+ display: block
+}
diff --git a/src/themes/custom/app/ksu-footer/ksu-footer.component.ts b/src/themes/custom/app/ksu-footer/ksu-footer.component.ts
new file mode 100644
index 0000000000..f08bfe8c33
--- /dev/null
+++ b/src/themes/custom/app/ksu-footer/ksu-footer.component.ts
@@ -0,0 +1,14 @@
+import {Component} from '@angular/core';
+
+/**
+ * Simple component to inject the standard KSU Footer
+ */
+@Component({
+ selector: 'ds-ksu-footer',
+ styleUrls: ['./ksu-footer.component.scss'],
+ templateUrl: './ksu-footer.component.html',
+ standalone: true,
+})
+
+export class KsuFooterComponent {
+}
diff --git a/src/themes/custom/eager-theme-components.ts b/src/themes/custom/eager-theme-components.ts
index 7df0ca7f26..b914907579 100644
--- a/src/themes/custom/eager-theme-components.ts
+++ b/src/themes/custom/eager-theme-components.ts
@@ -13,6 +13,7 @@ import { EditCommunitySelectorComponent } from './app/shared/dso-selector/modal-
import { EditItemSelectorComponent } from './app/shared/dso-selector/modal-wrappers/edit-item-selector/edit-item-selector.component';
import { LangSwitchComponent } from './app/shared/lang-switch/lang-switch.component';
import { LogInComponent } from './app/shared/log-in/log-in.component';
+import { KsuFooterComponent } from './app/ksu-footer/ksu-footer.component';
export const COMPONENTS = [
HomeNewsComponent,
@@ -29,4 +30,5 @@ export const COMPONENTS = [
EditItemSelectorComponent,
LogInComponent,
LangSwitchComponent,
+ KsuFooterComponent
];
diff --git a/src/themes/dspace/app/header/header.component.html b/src/themes/dspace/app/header/header.component.html
index caf5e8fc5a..b96c188cd5 100644
--- a/src/themes/dspace/app/header/header.component.html
+++ b/src/themes/dspace/app/header/header.component.html
@@ -10,7 +10,7 @@
@if ((isMobile$ | async) !== true) {
-
+
}
diff --git a/src/themes/dspace/app/header/header.component.ts b/src/themes/dspace/app/header/header.component.ts
index d1cfe1d8f9..1341bed468 100644
--- a/src/themes/dspace/app/header/header.component.ts
+++ b/src/themes/dspace/app/header/header.component.ts
@@ -11,10 +11,11 @@ import { ThemedLangSwitchComponent } from 'src/app/shared/lang-switch/themed-lan
import { ContextHelpToggleComponent } from '../../../../app/header/context-help-toggle/context-help-toggle.component';
import { HeaderComponent as BaseComponent } from '../../../../app/header/header.component';
-import { ThemedNavbarComponent } from '../../../../app/navbar/themed-navbar.component';
+// import { ThemedNavbarComponent } from '../../../../app/navbar/themed-navbar.component';
import { ThemedSearchNavbarComponent } from '../../../../app/search-navbar/themed-search-navbar.component';
import { ThemedAuthNavMenuComponent } from '../../../../app/shared/auth-nav-menu/themed-auth-nav-menu.component';
import { ImpersonateNavbarComponent } from '../../../../app/shared/impersonate-navbar/impersonate-navbar.component';
+import { NavbarComponent } from 'src/app/navbar/navbar.component';
/**
* Represents the header with the logo and simple navigation
@@ -31,7 +32,7 @@ import { ImpersonateNavbarComponent } from '../../../../app/shared/impersonate-n
RouterLink,
ThemedAuthNavMenuComponent,
ThemedLangSwitchComponent,
- ThemedNavbarComponent,
+ NavbarComponent,
ThemedSearchNavbarComponent,
TranslateModule,
],
diff --git a/src/themes/dspace/styles/_global-styles.scss b/src/themes/dspace/styles/_global-styles.scss
index ffca3cda13..794cb06a42 100644
--- a/src/themes/dspace/styles/_global-styles.scss
+++ b/src/themes/dspace/styles/_global-styles.scss
@@ -17,6 +17,10 @@
background-color: var(--bs-primary);
}
+ a {
+ color: var(--bs-primary);
+ }
+
h4, .h4 {
font-size: 1.1rem
}
diff --git a/src/themes/krex/app/footer/footer.component.html b/src/themes/krex/app/footer/footer.component.html
new file mode 100644
index 0000000000..55128845be
--- /dev/null
+++ b/src/themes/krex/app/footer/footer.component.html
@@ -0,0 +1 @@
+
diff --git a/src/themes/krex/app/footer/footer.component.ts b/src/themes/krex/app/footer/footer.component.ts
new file mode 100644
index 0000000000..aeb782439b
--- /dev/null
+++ b/src/themes/krex/app/footer/footer.component.ts
@@ -0,0 +1,14 @@
+import { Component } from '@angular/core';
+import { FooterComponent as BaseComponent } from '../../../../app/footer/footer.component';
+import { KsuFooterComponent } from '../ksu-footer/ksu-footer.component';
+@Component({
+ selector: 'ds-footer',
+ // styleUrls: ['footer.component.scss'],
+ styleUrls: ['../../../../app/footer/footer.component.scss'],
+ templateUrl: 'footer.component.html',
+ imports: [KsuFooterComponent]
+})
+export class FooterComponent extends BaseComponent {
+ // This line will enable the top footer in your theme
+ showTopFooter = true;
+}
diff --git a/src/themes/krex/app/header-nav-wrapper/header-navbar-wrapper.component.html b/src/themes/krex/app/header-nav-wrapper/header-navbar-wrapper.component.html
new file mode 100644
index 0000000000..4fa423d1ef
--- /dev/null
+++ b/src/themes/krex/app/header-nav-wrapper/header-navbar-wrapper.component.html
@@ -0,0 +1,11 @@
+
diff --git a/src/themes/krex/app/header-nav-wrapper/header-navbar-wrapper.component.scss b/src/themes/krex/app/header-nav-wrapper/header-navbar-wrapper.component.scss
new file mode 100644
index 0000000000..5293fdfb57
--- /dev/null
+++ b/src/themes/krex/app/header-nav-wrapper/header-navbar-wrapper.component.scss
@@ -0,0 +1,80 @@
+:host {
+ --ds-header-navbar-border-bottom-style: solid var(--ds-header-navbar-border-bottom-height) var(--ds-header-navbar-border-bottom-color);
+ --ds-expandable-navbar-border-top-style: solid var(--ds-expandable-navbar-border-top-height) var(--ds-expandable-navbar-border-top-color);
+ --ds-expandable-navbar-height: calc(100vh - var(--ds-header-height));
+
+ div#header-navbar-wrapper {
+ // The header-navbar-wrapper should not have a z-index, otherwise it would cover the media viewer despite its higher z-index
+ position: relative; // required by the mobile collapsible navbar
+ border-bottom: var(--ds-header-navbar-border-bottom-style); // gets covered by mobile navbar wrapper, when open
+
+ div#mobile-navbar-wrapper {
+ width: 100%;
+ background-color: var(--ds-expandable-navbar-bg);
+ position: absolute;
+ z-index: var(--ds-nav-z-index);
+ overflow: hidden;
+
+ nav#collapsible-mobile-navbar {
+ // Following parameters are changed by slideMobileNav animation
+ min-height: var(--ds-expandable-navbar-height);
+ height: auto;
+ border-bottom: var(--ds-header-navbar-border-bottom-style);
+ }
+ }
+ }
+
+ /* MENU ITEMS */
+
+ ::ng-deep {
+ .ds-menu-item, .ds-menu-toggler-wrapper {
+ text-decoration: none;
+ }
+
+ nav#desktop-navbar { // in header component
+ #main-site-navigation {
+ /* Desktop menu */
+
+ .ds-menu-item-wrapper, .ds-menu-item, .ds-menu-toggler-wrapper {
+ // fill navbar height (required by dropdown menus) and center content
+ display: flex;
+ align-items: center;
+ height: 100%;
+ }
+ .ds-menu-item {
+ // define here the style for top-level navbar menu items
+ padding: var(--ds-navbar-item-vertical-padding) var(--ds-navbar-item-horizontal-padding);
+ }
+ .ds-menu-item, .ds-menu-toggler-wrapper {
+ color: var(--ds-navbar-link-color) !important;
+ &:hover, &:focus {
+ color: var(--ds-navbar-link-color-hover) !important;
+ }
+ }
+
+ /* desktop submenu */
+
+ .dropdown-menu {
+ .ds-menu-item {
+ // define here the style for second-level navbar menu items
+ padding: var(--ds-navbar-dropdown-item-vertical-padding) var(--ds-navbar-dropdown-item-horizontal-padding);
+ }
+ }
+
+ }
+ }
+
+ nav#collapsible-mobile-navbar { // in header-navbar-wrapper component
+
+ border-top: var(--ds-expandable-navbar-border-top-style);
+ padding-top: var(--ds-expandable-navbar-padding-top);
+
+ #main-site-navigation {
+ .ds-menu-item {
+ padding: var(--ds-expandable-navbar-item-vertical-padding) 0;
+ }
+ }
+
+ }
+ }
+}
diff --git a/src/themes/krex/app/header-nav-wrapper/header-navbar-wrapper.component.spec.ts b/src/themes/krex/app/header-nav-wrapper/header-navbar-wrapper.component.spec.ts
new file mode 100644
index 0000000000..f90a82bde2
--- /dev/null
+++ b/src/themes/krex/app/header-nav-wrapper/header-navbar-wrapper.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { HeaderNavbarWrapperComponent } from './header-navbar-wrapper.component';
+
+describe('HeaderNavbarWrapperComponent', () => {
+ let component: HeaderNavbarWrapperComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [HeaderNavbarWrapperComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(HeaderNavbarWrapperComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/themes/krex/app/header-nav-wrapper/header-navbar-wrapper.component.ts b/src/themes/krex/app/header-nav-wrapper/header-navbar-wrapper.component.ts
new file mode 100644
index 0000000000..2bf262b0f2
--- /dev/null
+++ b/src/themes/krex/app/header-nav-wrapper/header-navbar-wrapper.component.ts
@@ -0,0 +1,26 @@
+import { AsyncPipe } from '@angular/common';
+import { Component } from '@angular/core';
+import { TranslateModule } from '@ngx-translate/core';
+
+import { ThemedHeaderComponent } from '../../../../app/header/themed-header.component';
+import { HeaderNavbarWrapperComponent as BaseComponent } from '../../../../app/header-nav-wrapper/header-navbar-wrapper.component';
+import { ThemedNavbarComponent } from '../../../../app/navbar/themed-navbar.component';
+import { slideMobileNav } from '../../../../app/shared/animations/slide';
+
+/**
+ * This component represents a wrapper for the horizontal navbar and the header
+ */
+@Component({
+ selector: 'ds-themed-header-navbar-wrapper',
+ styleUrls: ['header-navbar-wrapper.component.scss'],
+ templateUrl: 'header-navbar-wrapper.component.html',
+ imports: [
+ AsyncPipe,
+ ThemedHeaderComponent,
+ ThemedNavbarComponent,
+ TranslateModule,
+ ],
+ animations: [slideMobileNav],
+})
+export class HeaderNavbarWrapperComponent extends BaseComponent {
+}
diff --git a/src/themes/krex/app/header/header.component.html b/src/themes/krex/app/header/header.component.html
new file mode 100644
index 0000000000..2c17a6939b
--- /dev/null
+++ b/src/themes/krex/app/header/header.component.html
@@ -0,0 +1,39 @@
+
+
+
diff --git a/src/themes/krex/app/header/header.component.scss b/src/themes/krex/app/header/header.component.scss
new file mode 100644
index 0000000000..5aae8af017
--- /dev/null
+++ b/src/themes/krex/app/header/header.component.scss
@@ -0,0 +1,28 @@
+:host {
+ #main-site-header {
+ min-height: var(--ds-header-height);
+
+ @include media-breakpoint-up(md) {
+ height: var(--ds-header-height);
+ }
+
+ background-color: var(--ds-header-bg);
+
+ &-container {
+ min-height: var(--ds-header-height);
+ }
+ }
+
+ img#header-logo {
+ height: var(--ds-header-logo-height);
+ }
+
+ button#navbar-toggler {
+ color: var(--ds-header-icon-color);
+
+ &:hover, &:focus {
+ color: var(--ds-header-icon-color-hover);
+ }
+ }
+
+}
diff --git a/src/themes/krex/app/header/header.component.spec.ts b/src/themes/krex/app/header/header.component.spec.ts
new file mode 100644
index 0000000000..204ed6e4b7
--- /dev/null
+++ b/src/themes/krex/app/header/header.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { HeaderComponent } from './header.component';
+
+describe('HeaderComponent', () => {
+ let component: HeaderComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [HeaderComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(HeaderComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/themes/krex/app/header/header.component.ts b/src/themes/krex/app/header/header.component.ts
new file mode 100644
index 0000000000..9922fdfdfe
--- /dev/null
+++ b/src/themes/krex/app/header/header.component.ts
@@ -0,0 +1,50 @@
+import { AsyncPipe } from '@angular/common';
+import {
+ Component,
+ OnInit,
+} from '@angular/core';
+import { RouterLink } from '@angular/router';
+import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';
+import { TranslateModule } from '@ngx-translate/core';
+import { Observable } from 'rxjs';
+import { ThemedLangSwitchComponent } from 'src/app/shared/lang-switch/themed-lang-switch.component';
+
+import { ContextHelpToggleComponent } from '../../../../app/header/context-help-toggle/context-help-toggle.component';
+import { HeaderComponent as BaseComponent } from '../../../../app/header/header.component';
+import { ThemedSearchNavbarComponent } from '../../../../app/search-navbar/themed-search-navbar.component';
+import { ThemedAuthNavMenuComponent } from '../../../../app/shared/auth-nav-menu/themed-auth-nav-menu.component';
+import { ImpersonateNavbarComponent } from '../../../../app/shared/impersonate-navbar/impersonate-navbar.component';
+import { NavbarComponent } from '../../../../app/navbar/navbar.component';
+import { KsuHeaderComponent } from '../ksu-header/ksu-header.component';
+import { KsuEnvironmentBannerComponent } from '../ksu-environment-banner/ksu-environment-banner.component';
+
+/**
+ * Represents the header with the logo and simple navigation
+ */
+@Component({
+ selector: 'ds-themed-header',
+ styleUrls: ['header.component.scss'],
+ templateUrl: 'header.component.html',
+ imports: [
+ AsyncPipe,
+ ContextHelpToggleComponent,
+ ImpersonateNavbarComponent,
+ NgbDropdownModule,
+ RouterLink,
+ ThemedAuthNavMenuComponent,
+ ThemedLangSwitchComponent,
+ NavbarComponent,
+ ThemedSearchNavbarComponent,
+ TranslateModule,
+ KsuHeaderComponent,
+ KsuEnvironmentBannerComponent
+ ],
+})
+export class HeaderComponent extends BaseComponent implements OnInit {
+ public isNavBarCollapsed$: Observable;
+
+ ngOnInit() {
+ super.ngOnInit();
+ this.isNavBarCollapsed$ = this.menuService.isMenuCollapsed(this.menuID);
+ }
+}
diff --git a/src/themes/krex/app/home-page/home-news/home-news.component.html b/src/themes/krex/app/home-page/home-news/home-news.component.html
new file mode 100644
index 0000000000..c49f1b4f56
--- /dev/null
+++ b/src/themes/krex/app/home-page/home-news/home-news.component.html
@@ -0,0 +1,45 @@
+
+
+
+
+
+
K-State Research Exchange (K-REx)
+
The university's digital repository.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/themes/krex/app/home-page/home-news/home-news.component.scss b/src/themes/krex/app/home-page/home-news/home-news.component.scss
new file mode 100644
index 0000000000..c9f488cc43
--- /dev/null
+++ b/src/themes/krex/app/home-page/home-news/home-news.component.scss
@@ -0,0 +1,83 @@
+:host {
+ display: block;
+
+ div.background-image-container {
+ color: white;
+ position: relative;
+ // font-weight: 600;
+
+ .background-image > img {
+ background-color: var(--bs-primary);
+ position: absolute;
+ z-index: -1;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ object-position: top;
+ }
+
+ .container {
+ position: relative;
+ text-shadow: 1px 1px 4px rgba(0, 0, 0, 0.6);
+
+ &:before, &:after {
+ content: '';
+ display: block;
+ width: var(--ds-banner-background-gradient-width);
+ height: 100%;
+ top: 0;
+ position: absolute;
+ }
+
+ &:before {
+ background: linear-gradient(to left, var(--ds-banner-text-background), transparent);
+ left: calc(-1 * var(--ds-banner-background-gradient-width));
+
+ }
+
+ &:after {
+ background: linear-gradient(to right, var(--ds-banner-text-background), transparent);
+ right: calc(-1 * var(--ds-banner-background-gradient-width));
+ }
+
+ background-color: var(--ds-banner-text-background);
+ }
+
+
+ small.credits {
+ a {
+ color: inherit;
+ }
+
+ opacity: 0.3;
+ position: absolute;
+ right: var(--bs-spacer);
+ bottom: 0;
+ }
+ }
+
+ .home-news-content {
+ background-color: var(--ds-home-news-content-background);
+ }
+
+ .jumbotron {
+ background-color: transparent;
+ }
+
+ a {
+ color: var(--ds-home-news-link-color);
+
+ &:hover {
+ color: var(--ds-home-news-link-hover-color);
+ }
+ }
+
+ .lead {
+ font-size: 1.25rem;
+ font-weight: 400;
+ }
+}
+
+
diff --git a/src/themes/krex/app/home-page/home-news/home-news.component.ts b/src/themes/krex/app/home-page/home-news/home-news.component.ts
new file mode 100644
index 0000000000..e82e9e8195
--- /dev/null
+++ b/src/themes/krex/app/home-page/home-news/home-news.component.ts
@@ -0,0 +1,18 @@
+import { Component } from '@angular/core';
+
+import { HomeNewsComponent as BaseComponent } from '../../../../../app/home-page/home-news/home-news.component';
+import { ThemedSearchFormComponent } from 'src/app/shared/search-form/themed-search-form.component';
+import { TranslateModule } from '@ngx-translate/core';
+
+@Component({
+ selector: 'ds-themed-home-news',
+ imports: [ThemedSearchFormComponent, TranslateModule],
+ styleUrls: ['./home-news.component.scss'],
+ templateUrl: './home-news.component.html',
+})
+
+/**
+ * Component to render the news section on the home page
+ */
+export class HomeNewsComponent extends BaseComponent {}
+
diff --git a/src/themes/krex/app/home-page/home-page.component.html b/src/themes/krex/app/home-page/home-page.component.html
new file mode 100644
index 0000000000..88c97d8a0c
--- /dev/null
+++ b/src/themes/krex/app/home-page/home-page.component.html
@@ -0,0 +1,22 @@
+
+
+@if (showDiscoverFilters) {
+
+
+
+}
+@if (!showDiscoverFilters) {
+
+
+
+
+}
+
+
+
+
diff --git a/src/themes/krex/app/home-page/home-page.component.scss b/src/themes/krex/app/home-page/home-page.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/themes/krex/app/home-page/home-page.component.ts b/src/themes/krex/app/home-page/home-page.component.ts
new file mode 100644
index 0000000000..2c3d2e2c1b
--- /dev/null
+++ b/src/themes/krex/app/home-page/home-page.component.ts
@@ -0,0 +1,31 @@
+import { NgTemplateOutlet } from '@angular/common';
+import { Component } from '@angular/core';
+import { TranslateModule } from '@ngx-translate/core';
+
+import { HomeCoarComponent } from '../../../../app/home-page/home-coar/home-coar.component';
+import { ThemedHomeNewsComponent } from '../../../../app/home-page/home-news/themed-home-news.component';
+import { HomePageComponent as BaseComponent } from '../../../../app/home-page/home-page.component';
+import { RecentItemListComponent } from '../../../../app/home-page/recent-item-list/recent-item-list.component';
+import { ThemedTopLevelCommunityListComponent } from '../../../../app/home-page/top-level-community-list/themed-top-level-community-list.component';
+import { SuggestionsPopupComponent } from '../../../../app/notifications/suggestions/popup/suggestions-popup.component';
+import { ThemedConfigurationSearchPageComponent } from '../../../../app/search-page/themed-configuration-search-page.component';
+import { KsuHomeBelowSearchBarComponent } from './ksu-home-below-search-bar/ksu-home-below-search-bar.component';
+
+@Component({
+ selector: 'ds-themed-home-page',
+ styleUrls: ['../../../../app/home-page/home-page.component.scss'],
+ templateUrl: './home-page.component.html',
+ imports: [
+ HomeCoarComponent,
+ NgTemplateOutlet,
+ RecentItemListComponent,
+ SuggestionsPopupComponent,
+ ThemedConfigurationSearchPageComponent,
+ ThemedHomeNewsComponent,
+ ThemedTopLevelCommunityListComponent,
+ KsuHomeBelowSearchBarComponent,
+ TranslateModule,
+ ],
+})
+export class HomePageComponent extends BaseComponent {
+}
diff --git a/src/themes/krex/app/home-page/ksu-home-below-search-bar/ksu-home-below-search-bar.component.html b/src/themes/krex/app/home-page/ksu-home-below-search-bar/ksu-home-below-search-bar.component.html
new file mode 100644
index 0000000000..5b368ffdad
--- /dev/null
+++ b/src/themes/krex/app/home-page/ksu-home-below-search-bar/ksu-home-below-search-bar.component.html
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
Submit Electronic Thesis, Dissertation or Report (ETDR).
+
+
+
+
+ Submit ETDR
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Submit Research, Scholarly and Creative Activities, and Discovery (RSCAD) Works.
+
+
+
+ Submit RSCAD
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/themes/krex/app/home-page/ksu-home-below-search-bar/ksu-home-below-search-bar.component.scss b/src/themes/krex/app/home-page/ksu-home-below-search-bar/ksu-home-below-search-bar.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/themes/krex/app/home-page/ksu-home-below-search-bar/ksu-home-below-search-bar.component.spec.ts b/src/themes/krex/app/home-page/ksu-home-below-search-bar/ksu-home-below-search-bar.component.spec.ts
new file mode 100644
index 0000000000..cb6106bf6e
--- /dev/null
+++ b/src/themes/krex/app/home-page/ksu-home-below-search-bar/ksu-home-below-search-bar.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { KsuHomeBelowSearchBarComponent } from './ksu-home-below-search-bar.component';
+
+describe('KsuHomeBelowSearchBarComponent', () => {
+ let component: KsuHomeBelowSearchBarComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [KsuHomeBelowSearchBarComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(KsuHomeBelowSearchBarComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/themes/krex/app/home-page/ksu-home-below-search-bar/ksu-home-below-search-bar.component.ts b/src/themes/krex/app/home-page/ksu-home-below-search-bar/ksu-home-below-search-bar.component.ts
new file mode 100644
index 0000000000..f8a5167b66
--- /dev/null
+++ b/src/themes/krex/app/home-page/ksu-home-below-search-bar/ksu-home-below-search-bar.component.ts
@@ -0,0 +1,12 @@
+import { Component } from '@angular/core';
+import { RouterLink } from '@angular/router';
+
+@Component({
+ selector: 'ds-ksu-home-below-search-bar',
+ imports: [ RouterLink ],
+ templateUrl: './ksu-home-below-search-bar.component.html',
+ styleUrl: './ksu-home-below-search-bar.component.scss',
+})
+export class KsuHomeBelowSearchBarComponent {
+
+}
diff --git a/src/themes/krex/app/ksu-environment-banner/ksu-environment-banner.component.html b/src/themes/krex/app/ksu-environment-banner/ksu-environment-banner.component.html
new file mode 100644
index 0000000000..6fb0cd2397
--- /dev/null
+++ b/src/themes/krex/app/ksu-environment-banner/ksu-environment-banner.component.html
@@ -0,0 +1 @@
+{{ bannerText }}
diff --git a/src/themes/krex/app/ksu-environment-banner/ksu-environment-banner.component.scss b/src/themes/krex/app/ksu-environment-banner/ksu-environment-banner.component.scss
new file mode 100644
index 0000000000..f04571105b
--- /dev/null
+++ b/src/themes/krex/app/ksu-environment-banner/ksu-environment-banner.component.scss
@@ -0,0 +1,3 @@
+:host {
+ text-align: center;
+}
diff --git a/src/themes/krex/app/ksu-environment-banner/ksu-environment-banner.component.spec.ts b/src/themes/krex/app/ksu-environment-banner/ksu-environment-banner.component.spec.ts
new file mode 100644
index 0000000000..3e7004eb33
--- /dev/null
+++ b/src/themes/krex/app/ksu-environment-banner/ksu-environment-banner.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { KsuEnvironmentBannerComponent } from './ksu-environment-banner.component';
+
+describe('KsuEnvironmentBannerComponent', () => {
+ let component: KsuEnvironmentBannerComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [KsuEnvironmentBannerComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(KsuEnvironmentBannerComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/themes/krex/app/ksu-environment-banner/ksu-environment-banner.component.ts b/src/themes/krex/app/ksu-environment-banner/ksu-environment-banner.component.ts
new file mode 100644
index 0000000000..581a9afdd4
--- /dev/null
+++ b/src/themes/krex/app/ksu-environment-banner/ksu-environment-banner.component.ts
@@ -0,0 +1,25 @@
+import { Component, Inject, OnInit } from '@angular/core';
+import { AppConfig, APP_CONFIG } from 'src/config/app-config.interface';
+
+@Component({
+ selector: 'ds-ksu-environment-banner',
+ imports: [],
+ templateUrl: './ksu-environment-banner.component.html',
+ styleUrl: './ksu-environment-banner.component.scss',
+})
+export class KsuEnvironmentBannerComponent implements OnInit {
+ bannerText = '';
+ bannerEnabled = false;
+ bannerStyle = {};
+
+ constructor(@Inject(APP_CONFIG) private appConfig: AppConfig) {
+ }
+
+ ngOnInit(): void {
+ const bannerConfig = this.appConfig['environmentBanner']; // eslint-disable-line @typescript-eslint/dot-notation
+
+ this.bannerText = bannerConfig?.text;
+ this.bannerEnabled = bannerConfig?.enabled;
+ this.bannerStyle = { 'color': bannerConfig?.foregroundColor, 'background-color': bannerConfig?.backgroundColor };
+ }
+}
diff --git a/src/themes/krex/app/ksu-footer/ksu-footer.component.html b/src/themes/krex/app/ksu-footer/ksu-footer.component.html
new file mode 100644
index 0000000000..017d4a687c
--- /dev/null
+++ b/src/themes/krex/app/ksu-footer/ksu-footer.component.html
@@ -0,0 +1,115 @@
+
+
+
diff --git a/src/themes/krex/app/ksu-footer/ksu-footer.component.scss b/src/themes/krex/app/ksu-footer/ksu-footer.component.scss
new file mode 100644
index 0000000000..3db8d4084d
--- /dev/null
+++ b/src/themes/krex/app/ksu-footer/ksu-footer.component.scss
@@ -0,0 +1,681 @@
+/*footer*/
+
+.footer-ksu {
+ width: 100%;
+ background-color: #e0e0e0;
+ padding-top: 20px;
+ padding-bottom: 16px;
+ /*height: 200px; /*Bella Added for clarity*/
+}
+
+.footer-ksu .footer-ksu__inner {
+ position: relative;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ height: 100%;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center
+}
+
+@media (min-width:768px) {
+ .footer-ksu .footer-ksu__inner {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row
+ }
+
+}
+
+.footer-ksu .footer-ksu__logo {
+ margin-bottom: 12px
+}
+
+.footer-ksu .footer-ksu__logo>img {
+ width: 250px
+}
+
+@media (min-width:768px) {
+ .footer-ksu .footer-ksu__logo {
+ margin-right: 72px
+ }
+}
+
+@media (min-width:1024px) {
+ .footer-ksu .footer-ksu__logo {
+ margin-right: 30px
+ }
+}
+
+.footer-ksu .footer-ksu__menu-container {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ margin-top: 20px;
+ min-width: 250px
+}
+
+@media (min-width:1024px) {
+ .footer-ksu .footer-ksu__menu-container {
+ margin-top: 0
+ }
+}
+
+.footer-ksu .footer-ksu__menu {
+ list-style: none;
+ margin-left: 0;
+ margin-bottom: 16px;
+ margin-right: auto
+}
+
+@media (min-width:1024px) {
+ .footer-ksu .footer-ksu__menu {
+ margin-bottom: 8px
+ }
+}
+
+@media (min-width:1024px) {
+ .footer-ksu .footer-ksu__menu-item {
+ display: inline-block;
+ padding-left: 16px;
+ border-right: 1px solid #000;
+ padding-right: 16px
+ }
+ .footer-ksu .footer-ksu__menu-item:first-child {
+ padding-left: 0
+ }
+ .footer-ksu .footer-ksu__menu-item:last-child {
+ padding-right: 16px;
+ border-right: none
+ }
+}
+
+.footer-ksu .footer-ksu__menu-link {
+ color: #000;
+ font-size: 16px;
+ line-height: 24px
+}
+
+.footer-ksu .footer-ksu__menu-link:active,
+.footer-ksu .footer-ksu__menu-link:focus,
+.footer-ksu .footer-ksu__menu-link:link,
+.footer-ksu .footer-ksu__menu-link:visited {
+ color: #000;
+ text-decoration: none
+}
+
+.footer-ksu .footer-ksu__menu-link:hover {
+ color: #000;
+ text-decoration: underline
+}
+
+.footer-ksu .footer-ksu__menu-link .degree-stats {
+ width: 140px;
+ height: auto;
+ vertical-align: baseline
+}
+
+/*purple footer*/
+
+
+.global-footer__container {
+ width: 100%;
+ padding: 2.5rem 1.25rem;
+ position: relative;
+ background-position: center center;
+ opacity: 1;
+ z-index: 1;
+ background-color: #512888
+}
+
+.global-footer__container:before {
+ content: '';
+ background-image: url(/assets/krex/images/1200px-Kansas_State_University_seal.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+ background-size: cover;
+ opacity: .05;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ position: absolute;
+ z-index: -1
+}
+
+@media print,
+screen and (min-width:64em) {
+ .global-footer__container {
+ height: 24.0625rem;
+ padding: 6.25rem
+ }
+}
+
+.global-footer__inner {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ text-align: center;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-align-content: center;
+ -ms-flex-line-pack: center;
+ align-content: center;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column
+}
+
+@media print,
+screen and (min-width:64em) {
+ .global-footer__inner {
+ text-align: left;
+ -webkit-justify-content: space-around;
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row
+ }
+}
+
+.global-footer__inner p {
+ color: #fff;
+ margin: 0;
+ font-size: 1.25rem;
+ line-height: 1.75rem
+}
+
+.global-footer__left,
+.global-footer__right {
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center
+}
+
+.global-footer__right {
+ margin-top: 2.5rem
+}
+
+@media print,
+screen and (min-width:64em) {
+ .global-footer__right {
+ margin-top: 0
+ }
+}
+
+.global-footer__right p:first-child {
+ margin-bottom: 2.25rem
+}
+
+.global-footer__large-text {
+ font-weight: 700;
+ text-transform: uppercase
+}
+
+.global-footer__divider {
+ display: none;
+ margin: 0 1.25rem;
+ color: #fff;
+ font-size: 1.125rem;
+ line-height: 1.75rem
+}
+
+@media print,
+screen and (min-width:48em) {
+ .global-footer__divider {
+ display: inline-block
+ }
+}
+
+.global-footer__address-link {
+ display: block;
+ color: #fff
+}
+
+.global-footer__address-link:active,
+.global-footer__address-link:focus,
+.global-footer__address-link:link,
+.global-footer__address-link:visited {
+ color: #fff;
+ text-decoration: none
+}
+
+.global-footer__address-link:focus {
+ outline: .0625rem solid #fff
+}
+
+.global-footer__address-link:hover {
+ color: #fff
+}
+
+@media print,
+screen and (min-width:48em) {
+ .global-footer__address-link {
+ display: inline-block
+ }
+}
+
+
+.footer-links {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ margin-bottom: 2.5rem;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-flex-wrap: nowrap;
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center
+}
+
+@media print,
+screen and (min-width:64em) {
+ .footer-links {
+ margin-bottom: 1.25rem
+ }
+}
+
+.footer-links__link-container {
+ display: inline-block;
+ width: 3.75rem;
+ height: 3.75rem
+}
+
+.footer-links__link-container:not(:first-child) {
+ margin-left: 1.25rem
+}
+
+@media print,
+screen and (min-width:48em) {
+ .footer-links__link-container {
+ width: 4.375rem;
+ height: 4.375rem
+ }
+ .footer-links__link-container:not(:first-child) {
+ margin-left: 2.375rem
+ }
+}
+
+.footer-links__link {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ width: 100%;
+ height: 100%;
+ background-color: transparent;
+ border-color: #f0ad00;
+ border-width: .125rem;
+ border-style: solid;
+ border-radius: 50%;
+ padding: .9375rem;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-transition: background-color .2s linear, border-color .2s linear;
+ transition: background-color .2s linear, border-color .2s linear
+}
+
+.footer-links__link:active,
+.footer-links__link:link,
+.footer-links__link:visited {
+ text-decoration: none
+}
+
+.footer-links__link:focus,
+.footer-links__link:hover {
+ text-decoration: none;
+ border-color: #fff;
+ background-color: #fff;
+ outline: 0
+}
+
+.footer-links__link:focus svg,
+.footer-links__link:hover svg {
+ fill: #512888
+}
+
+.footer-links__link svg {
+ width: 2.125rem;
+ height: 2.125rem;
+ fill: #fff;
+ -webkit-transition: fill .2s linear;
+ transition: fill .2s linear
+}
+
+[hidden] {
+ display: none
+}
+
+.programs-grid .link-button {
+ color: #fff;
+ margin-bottom: 1.25rem
+}
+
+.programs-grid .link-button:active,
+.programs-grid .link-button:focus,
+.programs-grid .link-button:link,
+.programs-grid .link-button:visited {
+ color: #fff
+}
+
+.programs-grid .link-button:hover {
+ color: #fff
+}
+
+.link-button {
+ color: #512888;
+ font-family: myriad-pro, "Open Sans", Helvetica, Arial, sans-serif;
+ font-weight: 700;
+ font-style: normal;
+ font-size: 1.25rem;
+ line-height: 1.5rem
+}
+
+.link-button:active,
+.link-button:focus,
+.link-button:hover,
+.link-button:link,
+.link-button:visited {
+ color: #512888;
+ text-decoration: none
+}
+
+.link-button:focus svg,
+.link-button:hover svg {
+ margin-left: .9375rem
+}
+
+.link-button svg {
+ fill: #f0ad00;
+ width: .75rem;
+ height: .75rem;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ margin-left: .3125rem;
+ -webkit-transition: margin-left .2s linear;
+ transition: margin-left .2s linear
+}
+
+.brei-icon {
+ fill: white;
+}
+
+#main-menu .navbar-nav > li > a:focus {
+ text-decoration: none;
+ border-bottom: 4px solid #825EB9;
+}
+
+#ksu-search-block a:link,#ksu-search-block a:visited {
+ color: #fff;
+ text-decoration: none;
+}
+
+#ksu-footer-links li a, #ksu-footer-links li a:link {
+ color: #fff;
+ text-decoration: none;
+}
+
+#ksu-footer-addr a, #ksu-footer-addr a:link, #ksu-footer-addr a:visited, #ksu-footer-line2 > li > a, #ksu-footer-line2 > li > a:link, #ksu-footer-line2 > li > a:visited {
+ color: #fff;
+ text-decoration: none;
+}
+
+a:link,a:visited,a:hover,a:active,a:focus {
+ color: #512888;
+}
+
+h2 a:link {
+ font-size: 1.5em !important;
+}
+
+h3 a:link {
+ font-size: 1.125em !important;
+}
+
+h4 a:link {
+ font-size: 1em !important;
+}
+
+h5 a:link {
+ font-size: 0.875em !important;
+}
+
+h6 a:link {
+ font-size: 0.7em !important;
+}
+
+a:link { text-decoration: none; }
+
+.ksul-guide-label {
+ text-align: right;
+ font-size: 1.3rem;
+ font-style: italic;
+ padding-right: .5rem;
+ color: white;
+ background-color: #512888;
+}
+
+.s-lib-box-content a {
+ color: rgb(81, 40, 136) !important;
+ font-weight: bold !important;
+ font-family: myriad-pro, "Open Sans", Helvetica, Arial, sans-serif !important;
+ /*font-size: medium !important;*/
+}
+
+.s-lib-box-content a span {
+ color: #512888 !important;
+}
+
+.s-lib-box .s-lib-box-title {
+ text-align: left;
+ font-size: 1.5rem !important;
+ border-bottom: 3px solid #d1d1c9;
+ padding-left:0px;
+ display: block;
+ margin-left: 0;
+ margin-right: 0;
+ font-weight: bold;
+ background-color: #ffffff;
+ color: #512888;
+}
+
+.s-lg-tabs-side .s-lib-box-container {
+ padding: .5rem;
+ border:lightgrey solid .9rem;
+border-radius:3px;
+}
+
+
+.unit-bar {
+ position: relative;
+ z-index: 99;
+ color: #512888;
+ background-color: #fff;
+ padding: 0 1rem 0 0;
+ font-size: 1.5rem;
+ padding-left: 1.25rem;
+ padding-right: 1.25rem
+}
+
+@media print,
+screen and (min-width:64em) {
+ .unit-bar {
+ padding-left: 1.875rem;
+ padding-right: 1.875rem
+ }
+}
+
+@media screen and (min-width:75em) {
+ .unit-bar {
+ padding-left: 6.25rem;
+ padding-right: 6.25rem
+ }
+}
+
+.unit-bar.dark {
+ background-color: #512888;
+ color: #fff
+}
+
+.unit-bar__container {
+ position: relative;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ height: 3.5rem
+}
+
+.unit-bar__link,
+.unit-bar__link:active,
+.unit-bar__link:focus,
+.unit-bar__link:hover,
+.unit-bar__link:link,
+.unit-bar__link:visited {
+ text-decoration: none;
+ color: currentColor;
+ padding: 5px;
+ max-height: 3.5rem
+}
+
+.unit-bar__link:focus {
+ outline: 5px solid #f0ad00
+}
+
+.unit-bar__logo {
+ margin-right: 1rem;
+ line-height: 0
+}
+
+.unit-bar__logo>a {
+ padding-left: 0
+}
+
+.unit-bar__logo svg {
+ display: block;
+ width: 2.5rem;
+ height: 2rem
+}
+
+.unit-bar__bar {
+ position: relative;
+ border-left: 1.4px solid currentColor;
+ margin-right: 1rem;
+ height: 2rem;
+ vertical-align: middle
+}
+
+.unit-bar__name {
+ position: relative;
+ margin-right: 85px;
+ font-weight: 700;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ line-height: 0
+}
+
+.unit-bar__name>a:link {
+ position: relative;
+ top: -3px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ line-height: 1;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical
+}
+
+.unit-bar__menu-buttons {
+ height: 100%;
+ position: absolute;
+ top: 0;
+ right: 0;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ width: 5.125rem;
+ height: 100%;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #512888
+}
+
+@media print,
+screen and (min-width:64em) {
+ .unit-bar__menu-buttons {
+ display: none
+ }
+}
+
+.unit-bar__menu-buttons svg {
+ width: 2.375rem;
+ height: 2.375rem;
+ fill: #fff
+}
+
+.unit-bar__menu-buttons .brei-icon-close {
+ display: none
+}
+
+.js-menu-open .unit-bar__menu-buttons .brei-icon-menu {
+ display: none
+}
+
+.js-menu-open .unit-bar__menu-buttons .brei-icon-close {
+ display: block
+}
diff --git a/src/themes/krex/app/ksu-footer/ksu-footer.component.ts b/src/themes/krex/app/ksu-footer/ksu-footer.component.ts
new file mode 100644
index 0000000000..f08bfe8c33
--- /dev/null
+++ b/src/themes/krex/app/ksu-footer/ksu-footer.component.ts
@@ -0,0 +1,14 @@
+import {Component} from '@angular/core';
+
+/**
+ * Simple component to inject the standard KSU Footer
+ */
+@Component({
+ selector: 'ds-ksu-footer',
+ styleUrls: ['./ksu-footer.component.scss'],
+ templateUrl: './ksu-footer.component.html',
+ standalone: true,
+})
+
+export class KsuFooterComponent {
+}
diff --git a/src/themes/krex/app/ksu-header/ksu-header.component.html b/src/themes/krex/app/ksu-header/ksu-header.component.html
new file mode 100644
index 0000000000..92b303bf92
--- /dev/null
+++ b/src/themes/krex/app/ksu-header/ksu-header.component.html
@@ -0,0 +1,59 @@
+
diff --git a/src/themes/krex/app/ksu-header/ksu-header.component.scss b/src/themes/krex/app/ksu-header/ksu-header.component.scss
new file mode 100644
index 0000000000..9b0b0bcd20
--- /dev/null
+++ b/src/themes/krex/app/ksu-header/ksu-header.component.scss
@@ -0,0 +1,1421 @@
+
+@charset "UTF-8";
+@media print,
+screen and (min-width:40em) {
+ .reveal,
+ .reveal.large,
+ .reveal.small,
+ .reveal.tiny {
+ right: auto;
+ left: auto;
+ margin: 0 auto
+ }
+
+}
+/*override SpringShare's page width*/
+.container{
+width: 100%;
+}
+
+
+
+html {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ font-size: 100%;
+ line-height: 1.15;
+ -webkit-text-size-adjust: 100%;
+}
+
+body {
+ font-family: myriad-pro, "Open Sans", Helvetica, Arial, sans-serif;
+ font-weight: normal;
+ font-style: normal;
+ font-size: 16px;
+ color: #333333;
+ line-height: 1.625em;
+ padding: 0;
+
+}
+
+body * {
+ background-color: transparent;
+ background-position: top center;
+ background-repeat: no-repeat;
+ word-break: break-word;
+ word-wrap: break-word;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+
+}
+
+/* Working on */
+.s-lib-side-borders{
+ width: 100%;
+ max-width: 87.25rem;
+ margin: 0 auto;
+}
+
+@media only screen and (max-width: 1440px) {
+ .s-lib-side-borders{
+ max-width: 77rem;
+}
+}
+
+@media only screen and (max-width: 1024px) {
+ .s-lib-side-borders{
+ max-width: 55rem;
+}
+}
+
+@media only screen and (max-width: 768px) {
+ .s-lib-side-borders{
+ max-width: 40rem;
+}
+}
+
+@media only screen and (max-width: 425px) {
+ .s-lib-side-borders{
+ max-width: 22rem;
+}
+body * {
+word-break: normal;
+ word-wrap: normal;
+}
+}
+
+@media only screen and (max-width: 375px) {
+ .s-lib-side-borders{
+ max-width: 20rem;
+}
+body * {
+word-break: normal;
+ word-wrap: normal;
+}
+}
+
+@media only screen and (max-width: 320px) {
+ .s-lib-side-borders{
+ max-width: 17rem;
+}
+body * {
+word-break: normal;
+ word-wrap: normal;
+}
+}
+
+.s-lib-profile-email .label-info {
+ background-color: #ffffff;
+ box-shadow: 3px 3px 3px;
+}
+
+.s-lib-profile-email .label-info[href]:hover {
+ background-color: #512888;
+ color: #fff !important;
+}
+
+.s-lib-profile-email .label-info[href]:focus {
+ background-color: #512888;
+ color: #fff;
+}
+
+#s-lg-az-reset.btn.btn-default.btn-sm.s-lib-hide {
+ background-color: #edaf11;
+}
+
+
+.hf-body {
+ font-family: myriad-pro,"Open Sans",Helvetica,Arial,sans-serif;
+ font-weight: 400;
+ font-style: normal;
+ overflow-x: hidden;
+ font-size: 1.25rem;
+ line-height: 1.875;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+
+ background: #fff;
+ color: #000;
+}
+
+button,
+html,
+input,
+select,
+textarea {
+ color: #222
+}
+
+
+
+div {
+ display: block;
+}
+
+nav {
+ display: block;
+}
+
+p, li, ul, ol {
+font-size: 20px;
+line-height:32px;
+}
+
+
+a:link {
+ color: #512888;
+ text-decoration: underline;
+}
+
+a:link:focus {
+ outline: .0625rem solid #000
+}
+
+a:link:focus,
+a:link:hover {
+ color: #331958
+}
+
+a {
+ line-height: inherit;
+ color: #512888;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.top-nav {
+ position: relative;
+ z-index: 99;
+ background-color: #eee;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ font-size: .875rem;
+ height: 2rem;
+ line-height: 1rem;
+ padding-left: 1.25rem;
+ padding-right: 1.25rem;
+ width: 100%;
+ font-family: myriad-pro,"Open Sans",Helvetica,Arial,sans-serif;
+}
+
+
+@media print,
+screen and (min-width:64em) {
+ body * {
+ font-size: 1.375rem;
+ line-height: 2;
+ }
+
+ .top-nav {
+ padding-left: 1.875rem;
+ padding-right: 1.875rem
+ }
+ .scrolled .top-nav {
+ visibility: hidden;
+ opacity: 0
+ }
+ .level-container__padding {
+ margin: 0 1.875rem;
+ padding-bottom: 1.875rem
+ }
+ .campaign-landing .level-container__padding,
+ .high-level .level-container__padding {
+ margin: 3.125rem 1.875rem
+ }
+ .campaign-landing .statistics__item,
+ .high-level .statistics__item {
+ padding: 3.125rem
+ }
+
+
+
+}
+
+@media screen and (min-width:75em) {
+ .top-nav {
+ padding-left: 6.25rem;
+ padding-right: 6.25rem
+ }
+
+ .level-container__padding {
+ margin: 0 6.25rem;
+ padding-bottom: 6.25rem
+ }
+ .high-level .level-container__padding {
+ margin: 3.125rem 6.25rem
+ }
+ .standard-level .level-container__padding {
+ margin: 0 6.25rem;
+ padding-bottom: 3.125rem
+ }
+ .campaign-landing .level-container__padding {
+ margin: 6.25rem 6.25rem;
+ padding-bottom: 3.125rem
+ }
+ .campaign-landing .statistics__container,
+ .high-level .statistics__container {
+ margin: 0 6.25rem -1.875rem
+ }
+
+
+
+}
+
+@media screen and (min-width:81.25em) {
+ .top-nav {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ visibility: visible;
+ opacity: 1;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-transition: visibility .2s, opacity .2s linear;
+ transition: visibility .2s, opacity .2s linear
+ }
+
+}
+
+.top-nav a {
+ color: #000;
+ text-decoration: none
+}
+
+.top-nav a:focus,
+.top-nav a:hover {
+ text-decoration: underline
+}
+
+.top-nav a:focus {
+ outline: .125rem solid #f0ad00
+}
+
+.top-nav .ksu-name {
+ color: #512888;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ white-space: nowrap;
+
+}
+
+.top-nav__inner {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center
+}
+
+.campaign-landing .top-nav {
+ display: none
+}
+
+
+.top-nav.expanded .top-nav__menu {
+ -webkit-transform: scaleX(1);
+ transform: scaleX(1)
+}
+
+.top-nav.expanded .top-nav__menu-item {
+ display: inline-block
+}
+
+.top-nav.expanded .brei-icon-double-chevron {
+ -webkit-transform: rotate(180deg);
+ transform: rotate(180deg);
+ margin-right: .75rem;
+ margin-left: 0
+}
+
+.top-nav.expanded .top-nav__signin:hover .brei-icon-double-chevron {
+ margin-right: 0;
+ margin-left: .875rem;
+}
+
+.top-nav.expanded .ksu-name {
+ visibility: hidden;
+}
+
+@media (min-width:1024px) {
+ .top-nav.expanded .ksu-name {
+ visibility: visible;
+ }
+}
+
+.top-nav .logo {
+ padding: 0;
+ max-width: 17.5rem;
+}
+
+.top-nav__container {
+ position: relative;
+ padding-left: 1.875rem;
+
+}
+
+.top-nav__menu-container {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ width: 100%;
+ height: 100%;
+ margin-left: auto;
+ max-width: none;
+ -webkit-box-pack: end;
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ opacity: 1;
+ -webkit-transition: opacity .2s linear;
+ transition: opacity .2s linear
+}
+
+.top-nav__menu {
+ font-size: 0;
+ list-style: none;
+ margin: 0;
+ overflow: hidden;
+ -webkit-transform: scaleX(0);
+ transform: scaleX(0);
+ -webkit-transform-origin: right;
+ transform-origin: right;
+ -webkit-transition: -webkit-transform .2s ease-in;
+ transition: -webkit-transform .2s ease-in;
+ transition: transform .2s ease-in;
+ transition: transform .2s ease-in, -webkit-transform .2s ease-in
+}
+
+.top-nav__menu-item {
+ display: inline-block;
+ display: none;
+ padding: .125rem;
+}
+
+.top-nav__menu-item:not(:last-child) {
+ margin-right: .75rem;
+ padding-right: .75rem;
+ border-right: .0625rem solid #000;
+}
+
+@media screen and (min-width:90em) {
+ .top-nav__menu-item:not(:last-child) {
+ margin-right: 1.25rem;
+ padding-right: 1.25rem;
+ }
+
+}
+
+.top-nav__signin {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ width: 5.5rem;
+ min-width: 4.6875rem;
+ font-size: 0;
+ position: relative;
+ -webkit-flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ -webkit-box-pack: end;
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+
+.top-nav__signin svg {
+ display: none;
+}
+
+.top-nav__menu-link span {
+ display: none;
+}
+
+@media print,
+screen and (min-width:48em) {
+ .top-nav__signin svg {
+ display: block;
+ }
+.top-nav__menu-link span {
+ display: inline;
+ }
+
+ .statistics__container {
+ background-color: transparent;
+ padding: 0;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center
+ }
+ .campaign-landing .statistics__container,
+ .high-level .statistics__container {
+ margin: 0 1.875rem -1.875rem
+ }
+
+
+}
+
+.top-nav__signin:hover .brei-icon-double-chevron {
+ margin-right: .5rem;
+ margin-left: 0;
+}
+
+.top-nav__browse {
+ margin-left: 1.25rem;
+}
+
+.top-nav__menu-link {
+ color: #000;
+ margin-left: .3125rem;
+ font-size: .875rem;
+ line-height: 1rem;
+ text-decoration: none;
+}
+
+.top-nav__menu-link:active,
+.top-nav__menu-link:focus,
+.top-nav__menu-link:link {
+ color: #000;
+ text-decoration: none;
+}
+
+.top-nav__menu-link:hover {
+ color: #000;
+}
+
+
+
+
+
+.top-nav .brei-icon-double-chevron {
+ width: .875rem;
+ height: .875rem;
+ margin-left: .9375rem;
+ margin-right: 0;
+ fill: #f0ad00;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ -webkit-transition: margin-left .2s ease-in, margin-right .2s ease-in, -webkit-transform .2s ease-in;
+ transition: margin-left .2s ease-in, margin-right .2s ease-in, -webkit-transform .2s ease-in;
+ transition: transform .2s ease-in, margin-left .2s ease-in, margin-right .2s ease-in;
+ transition: transform .2s ease-in, margin-left .2s ease-in, margin-right .2s ease-in, -webkit-transform .2s ease-in
+}
+
+.top-nav__search-zone {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ width: 4.0625rem;
+ height: 100%;
+ padding: 0;
+ background-color: transparent;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1 0 auto;
+ -ms-flex: 1 0 auto;
+ flex: 1 0 auto;
+ position: absolute;
+ right: 0;
+ top: 0;
+ -webkit-box-pack: end;
+ -webkit-justify-content: flex-end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ z-index: 9;
+ -webkit-box-ordinal-group: 3;
+ -webkit-order: 2;
+ -ms-flex-order: 2;
+ order: 2;
+ -webkit-transition-property: background-color, width;
+ transition-property: background-color, width;
+ -webkit-transition-duration: .2s;
+ transition-duration: .2s;
+ -webkit-transition-timing-function: linear;
+ transition-timing-function: linear;
+}
+
+.top-nav__search-container {
+ display: block;
+ margin: 0;
+ padding: .125rem;
+ position: absolute;
+ top: 0;
+ right: 0;
+}
+
+.top-nav__search-box {
+ width: 2.875rem;
+ height: 2.875rem;
+ margin-top: .125rem;
+ background-color: #fff;
+ border: .125rem solid #fff;
+ border-radius: 1.5rem;
+ padding: .625rem 3.375rem .625rem 1.875rem;
+ opacity: 0;
+ -webkit-transition-property: opacity, width;
+ transition-property: opacity, width;
+ -webkit-transition-duration: .2s;
+ transition-duration: .2s;
+ -webkit-transition-timing-function: linear;
+ transition-timing-function: linear
+}
+
+.top-nav__search-box input {
+ display: none;
+ width: 100%;
+ padding: 0;
+ border: 0;
+ font-family: myriad-pro, "Open Sans", Helvetica, Arial, sans-serif;
+ font-weight: 400;
+ font-style: normal;
+ font-size: 1rem;
+ line-height: 1.5rem;
+}
+
+.top-nav__search-label {
+ display: none;
+}
+
+.top-nav__search {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ width: 2.875rem;
+ height: 2.875rem;
+ background-color: transparent;
+ border: .125rem solid #f0ad00;
+ border-radius: 50%;
+ position: relative;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-transition: border .2s linear;
+ transition: border .2s linear;
+}
+
+.top-nav__search:active,
+.top-nav__search:focus,
+.top-nav__search:link,
+.top-nav__search:visited {
+ text-decoration: none;
+}
+
+.top-nav__search:focus {
+ outline: .0625rem solid #000;
+}
+
+.top-nav__search:hover {
+ text-decoration: none
+}
+
+.top-nav__search svg {
+ width: 1.25rem;
+ height: 1.25rem;
+ fill: #512888
+}
+
+
+*, ::after, ::before {
+ -webkit-box-sizing: inherit;
+ box-sizing: inherit;
+}
+
+
+::selection {
+ background: #b3d4fc;
+ text-shadow: none;
+}
+
+.maxwidth {
+ width: 100%;
+ max-width: 87.25rem;
+ margin: 0 auto;
+}
+
+
+h1,h2,h3,h4,h5,h6 {
+ margin: 5px 0 5px 0;
+ font-weight: inherit;
+}
+
+h1 {
+ font-size: 2em;
+ color: #512888;
+ margin-top: 0.67em;
+ margin-bottom: 0.67em;
+ margin-left: 0;
+ margin-right: 0;
+ font-weight: bold;
+}
+h2 {
+ font-size: 1.5em !important;
+ border-bottom: 3px solid #d1d1c9;
+ padding-left:0px;
+ display: block;
+ margin-top: 0.83em;
+ margin-bottom: 0.83em;
+ margin-left: 0;
+ margin-right: 0;
+ font-weight: bold;
+}
+h3 {
+ font-size: 1.27em;
+ margin-top: 1em;
+ margin-bottom: 1em;
+ margin-left: 0;
+ margin-right: 0;
+ font-weight: bold;
+ color: rgb(51,51,51);
+}
+
+h4 {
+ font-size: 1.125em;
+ font-weight: bold;
+ line-height: 1.5em;
+ color: rgb(81,40,136);
+}
+
+h5 {
+ font-size: 1.0em;
+ line-height: 1.2em;
+ color: rgb(0,0,0);
+}
+
+h6 {
+ font-size: 0.875em;
+ color: rgb(51,51,51);
+}
+
+.campaign-landing .statistics,
+.high-level .statistics {
+ margin: 2rem 0 0;
+ padding: 0
+}
+
+.campaign-landing .statistics__container,
+.high-level .statistics__container {
+ width: auto;
+ background-color: #fff;
+ margin: 0 1.25rem -1.875rem;
+ padding: 1.25rem;
+ -webkit-box-shadow: 0 0 3.9375rem -.4375rem rgba(167, 167, 167, .43);
+ box-shadow: 0 0 3.9375rem -.4375rem rgba(167, 167, 167, .43);
+ z-index: 9
+}
+
+/*footer*/
+
+.footer-ksu {
+ width: 100%;
+ background-color: #e0e0e0;
+ padding-top: 20px;
+ padding-bottom: 16px;
+ /*height: 200px; /*Bella Added for clarity*/
+}
+
+.footer-ksu .footer-ksu__inner {
+ position: relative;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ height: 100%;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center
+}
+
+@media (min-width:768px) {
+ .footer-ksu .footer-ksu__inner {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row
+ }
+
+}
+
+.footer-ksu .footer-ksu__logo {
+ margin-bottom: 12px
+}
+
+.footer-ksu .footer-ksu__logo>img {
+ width: 250px
+}
+
+@media (min-width:768px) {
+ .footer-ksu .footer-ksu__logo {
+ margin-right: 72px
+ }
+}
+
+@media (min-width:1024px) {
+ .footer-ksu .footer-ksu__logo {
+ margin-right: 30px
+ }
+}
+
+.footer-ksu .footer-ksu__menu-container {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ margin-top: 20px;
+ min-width: 250px
+}
+
+@media (min-width:1024px) {
+ .footer-ksu .footer-ksu__menu-container {
+ margin-top: 0
+ }
+}
+
+.footer-ksu .footer-ksu__menu {
+ list-style: none;
+ margin-left: 0;
+ margin-bottom: 16px;
+ margin-right: auto
+}
+
+@media (min-width:1024px) {
+ .footer-ksu .footer-ksu__menu {
+ margin-bottom: 8px
+ }
+}
+
+@media (min-width:1024px) {
+ .footer-ksu .footer-ksu__menu-item {
+ display: inline-block;
+ padding-left: 16px;
+ border-right: 1px solid #000;
+ padding-right: 16px
+ }
+ .footer-ksu .footer-ksu__menu-item:first-child {
+ padding-left: 0
+ }
+ .footer-ksu .footer-ksu__menu-item:last-child {
+ padding-right: 16px;
+ border-right: none
+ }
+}
+
+.footer-ksu .footer-ksu__menu-link {
+ color: #000;
+ font-size: 16px;
+ line-height: 24px
+}
+
+.footer-ksu .footer-ksu__menu-link:active,
+.footer-ksu .footer-ksu__menu-link:focus,
+.footer-ksu .footer-ksu__menu-link:link,
+.footer-ksu .footer-ksu__menu-link:visited {
+ color: #000;
+ text-decoration: none
+}
+
+.footer-ksu .footer-ksu__menu-link:hover {
+ color: #000;
+ text-decoration: underline
+}
+
+.footer-ksu .footer-ksu__menu-link .degree-stats {
+ width: 140px;
+ height: auto;
+ vertical-align: baseline
+}
+
+/*purple footer*/
+
+
+.global-footer__container {
+ width: 100%;
+ padding: 2.5rem 1.25rem;
+ position: relative;
+ background-position: center center;
+ opacity: 1;
+ z-index: 1;
+ background-color: #512888
+}
+
+.global-footer__container:before {
+ content: '';
+ background-image: url(/assets/krex/images/1200px-Kansas_State_University_seal.png);
+ background-repeat: no-repeat;
+ background-position: center center;
+ background-size: cover;
+ opacity: .05;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ position: absolute;
+ z-index: -1
+}
+
+@media print,
+screen and (min-width:64em) {
+ .global-footer__container {
+ height: 24.0625rem;
+ padding: 6.25rem
+ }
+}
+
+.global-footer__inner {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ text-align: center;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-align-content: center;
+ -ms-flex-line-pack: center;
+ align-content: center;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column
+}
+
+@media print,
+screen and (min-width:64em) {
+ .global-footer__inner {
+ text-align: left;
+ -webkit-justify-content: space-around;
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row
+ }
+}
+
+.global-footer__inner p {
+ color: #fff;
+ margin: 0;
+ font-size: 1.25rem;
+ line-height: 1.75rem
+}
+
+.global-footer__left,
+.global-footer__right {
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center
+}
+
+.global-footer__right {
+ margin-top: 2.5rem
+}
+
+@media print,
+screen and (min-width:64em) {
+ .global-footer__right {
+ margin-top: 0
+ }
+}
+
+.global-footer__right p:first-child {
+ margin-bottom: 2.25rem
+}
+
+.global-footer__large-text {
+ font-weight: 700;
+ text-transform: uppercase
+}
+
+.global-footer__divider {
+ display: none;
+ margin: 0 1.25rem;
+ color: #fff;
+ font-size: 1.125rem;
+ line-height: 1.75rem
+}
+
+@media print,
+screen and (min-width:48em) {
+ .global-footer__divider {
+ display: inline-block
+ }
+}
+
+.global-footer__address-link {
+ display: block;
+ color: #fff
+}
+
+.global-footer__address-link:active,
+.global-footer__address-link:focus,
+.global-footer__address-link:link,
+.global-footer__address-link:visited {
+ color: #fff;
+ text-decoration: none
+}
+
+.global-footer__address-link:focus {
+ outline: .0625rem solid #fff
+}
+
+.global-footer__address-link:hover {
+ color: #fff
+}
+
+@media print,
+screen and (min-width:48em) {
+ .global-footer__address-link {
+ display: inline-block
+ }
+}
+
+
+.footer-links {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ margin-bottom: 2.5rem;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-flex-wrap: nowrap;
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center
+}
+
+@media print,
+screen and (min-width:64em) {
+ .footer-links {
+ margin-bottom: 1.25rem
+ }
+}
+
+.footer-links__link-container {
+ display: inline-block;
+ width: 3.75rem;
+ height: 3.75rem
+}
+
+.footer-links__link-container:not(:first-child) {
+ margin-left: 1.25rem
+}
+
+@media print,
+screen and (min-width:48em) {
+ .footer-links__link-container {
+ width: 4.375rem;
+ height: 4.375rem
+ }
+ .footer-links__link-container:not(:first-child) {
+ margin-left: 2.375rem
+ }
+}
+
+.footer-links__link {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ width: 100%;
+ height: 100%;
+ background-color: transparent;
+ border-color: #f0ad00;
+ border-width: .125rem;
+ border-style: solid;
+ border-radius: 50%;
+ padding: .9375rem;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-transition: background-color .2s linear, border-color .2s linear;
+ transition: background-color .2s linear, border-color .2s linear
+}
+
+.footer-links__link:active,
+.footer-links__link:link,
+.footer-links__link:visited {
+ text-decoration: none
+}
+
+.footer-links__link:focus,
+.footer-links__link:hover {
+ text-decoration: none;
+ border-color: #fff;
+ background-color: #fff;
+ outline: 0
+}
+
+.footer-links__link:focus svg,
+.footer-links__link:hover svg {
+ fill: #512888
+}
+
+.footer-links__link svg {
+ width: 2.125rem;
+ height: 2.125rem;
+ fill: #fff;
+ -webkit-transition: fill .2s linear;
+ transition: fill .2s linear
+}
+
+[hidden] {
+ display: none
+}
+
+.programs-grid .link-button {
+ color: #fff;
+ margin-bottom: 1.25rem
+}
+
+.programs-grid .link-button:active,
+.programs-grid .link-button:focus,
+.programs-grid .link-button:link,
+.programs-grid .link-button:visited {
+ color: #fff
+}
+
+.programs-grid .link-button:hover {
+ color: #fff
+}
+
+.link-button {
+ color: #512888;
+ font-family: myriad-pro, "Open Sans", Helvetica, Arial, sans-serif;
+ font-weight: 700;
+ font-style: normal;
+ font-size: 1.25rem;
+ line-height: 1.5rem
+}
+
+.link-button:active,
+.link-button:focus,
+.link-button:hover,
+.link-button:link,
+.link-button:visited {
+ color: #512888;
+ text-decoration: none
+}
+
+.link-button:focus svg,
+.link-button:hover svg {
+ margin-left: .9375rem
+}
+
+.link-button svg {
+ fill: #f0ad00;
+ width: .75rem;
+ height: .75rem;
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ margin-left: .3125rem;
+ -webkit-transition: margin-left .2s linear;
+ transition: margin-left .2s linear
+}
+
+.brei-icon {
+ fill: white;
+}
+
+#main-menu .navbar-nav > li > a:focus {
+ text-decoration: none;
+ border-bottom: 4px solid #825EB9;
+}
+
+#ksu-search-block a:link,#ksu-search-block a:visited {
+ color: #fff;
+ text-decoration: none;
+}
+
+#ksu-footer-links li a, #ksu-footer-links li a:link {
+ color: #fff;
+ text-decoration: none;
+}
+
+#ksu-footer-addr a, #ksu-footer-addr a:link, #ksu-footer-addr a:visited, #ksu-footer-line2 > li > a, #ksu-footer-line2 > li > a:link, #ksu-footer-line2 > li > a:visited {
+ color: #fff;
+ text-decoration: none;
+}
+
+a:link,a:visited,a:hover,a:active,a:focus {
+ color: #512888;
+}
+
+h2 a:link {
+ font-size: 1.5em !important;
+}
+
+h3 a:link {
+ font-size: 1.125em !important;
+}
+
+h4 a:link {
+ font-size: 1em !important;
+}
+
+h5 a:link {
+ font-size: 0.875em !important;
+}
+
+h6 a:link {
+ font-size: 0.7em !important;
+}
+
+a:link { text-decoration: none; }
+
+.ksul-guide-label {
+ text-align: right;
+ font-size: 1.3rem;
+ font-style: italic;
+ padding-right: .5rem;
+ color: white;
+ background-color: #512888;
+}
+
+.s-lib-box-content a {
+ color: rgb(81, 40, 136) !important;
+ font-weight: bold !important;
+ font-family: "Lucida Grande",Verdana,Arial,sans-serif !important;
+ font-size: medium !important;
+}
+
+.s-lib-box-content a span {
+ color: #512888 !important;
+}
+
+.s-lib-box .s-lib-box-title {
+ text-align: left;
+ font-size: 1.5rem !important;
+ border-bottom: 3px solid #d1d1c9;
+ padding-left:0px;
+ display: block;
+ margin-left: 0;
+ margin-right: 0;
+ font-weight: bold;
+ background-color: #ffffff;
+ color: #512888;
+}
+
+.s-lg-tabs-side .s-lib-box-container {
+ padding: .5rem;
+ border:lightgrey solid .9rem;
+border-radius:3px;
+}
+
+
+.unit-bar {
+ position: relative;
+ z-index: 99;
+ color: #512888;
+ background-color: #fff;
+ padding: 0 1rem 0 0;
+ font-size: 1.5rem;
+ padding-left: 1.25rem;
+ padding-right: 1.25rem
+}
+
+@media print,
+screen and (min-width:64em) {
+ .unit-bar {
+ padding-left: 1.875rem;
+ padding-right: 1.875rem
+ }
+}
+
+@media screen and (min-width:75em) {
+ .unit-bar {
+ padding-left: 6.25rem;
+ padding-right: 6.25rem
+ }
+}
+
+.unit-bar.dark {
+ background-color: #512888;
+ color: #fff
+}
+
+.unit-bar__container {
+ position: relative;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ height: 3.5rem
+}
+
+.unit-bar__link,
+.unit-bar__link:active,
+.unit-bar__link:focus,
+.unit-bar__link:hover,
+.unit-bar__link:link,
+.unit-bar__link:visited {
+ text-decoration: none;
+ color: currentColor;
+ padding: 5px;
+ max-height: 3.5rem
+}
+
+.unit-bar__link:focus {
+ outline: 5px solid #f0ad00
+}
+
+.unit-bar__logo {
+ margin-right: 1rem;
+ line-height: 0
+}
+
+.unit-bar__logo>a {
+ padding-left: 0
+}
+
+.unit-bar__logo svg {
+ display: block;
+ width: 2.5rem;
+ height: 2rem
+}
+
+.unit-bar__bar {
+ position: relative;
+ border-left: 1.4px solid currentColor;
+ margin-right: 1rem;
+ height: 2rem;
+ vertical-align: middle
+}
+
+.unit-bar__name {
+ position: relative;
+ margin-right: 85px;
+ font-weight: 700;
+ -webkit-box-flex: 1;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ line-height: 0
+}
+
+.unit-bar__name>a:link {
+ position: relative;
+ top: -3px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ line-height: 1;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical
+}
+
+.unit-bar__menu-buttons {
+ height: 100%;
+ position: absolute;
+ top: 0;
+ right: 0;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ width: 5.125rem;
+ height: 100%;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ background-color: #512888
+}
+
+@media print,
+screen and (min-width:64em) {
+ .unit-bar__menu-buttons {
+ display: none
+ }
+}
+
+.unit-bar__menu-buttons svg {
+ width: 2.375rem;
+ height: 2.375rem;
+ fill: #fff
+}
+
+.unit-bar__menu-buttons .brei-icon-close {
+ display: none
+}
+
+.js-menu-open .unit-bar__menu-buttons .brei-icon-menu {
+ display: none
+}
+
+.js-menu-open .unit-bar__menu-buttons .brei-icon-close {
+ display: block
+}
diff --git a/src/themes/krex/app/ksu-header/ksu-header.component.spec.ts b/src/themes/krex/app/ksu-header/ksu-header.component.spec.ts
new file mode 100644
index 0000000000..4cfd74ecf1
--- /dev/null
+++ b/src/themes/krex/app/ksu-header/ksu-header.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { KsuHeaderComponent } from './ksu-header.component';
+
+describe('KsuHeaderComponent', () => {
+ let component: KsuHeaderComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [KsuHeaderComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(KsuHeaderComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/themes/krex/app/ksu-header/ksu-header.component.ts b/src/themes/krex/app/ksu-header/ksu-header.component.ts
new file mode 100644
index 0000000000..0558c17fe0
--- /dev/null
+++ b/src/themes/krex/app/ksu-header/ksu-header.component.ts
@@ -0,0 +1,21 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'ds-ksu-header',
+ imports: [],
+ templateUrl: './ksu-header.component.html',
+ styleUrl: './ksu-header.component.scss',
+})
+export class KsuHeaderComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit(): void {
+
+ }
+
+ expandNavBar() {
+ var element = document.getElementById('top-navID');
+ element.classList.toggle("expanded");
+ }
+}
diff --git a/src/themes/krex/app/login-page/login-page.component.html b/src/themes/krex/app/login-page/login-page.component.html
new file mode 100644
index 0000000000..d4d1e1d4ae
--- /dev/null
+++ b/src/themes/krex/app/login-page/login-page.component.html
@@ -0,0 +1 @@
+login-page works!
diff --git a/src/themes/krex/app/login-page/login-page.component.scss b/src/themes/krex/app/login-page/login-page.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/themes/krex/app/login-page/login-page.component.spec.ts b/src/themes/krex/app/login-page/login-page.component.spec.ts
new file mode 100644
index 0000000000..df4c6d2cea
--- /dev/null
+++ b/src/themes/krex/app/login-page/login-page.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { LoginPageComponent } from './login-page.component';
+
+describe('LoginPageComponent', () => {
+ let component: LoginPageComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [LoginPageComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(LoginPageComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/themes/krex/app/login-page/login-page.component.ts b/src/themes/krex/app/login-page/login-page.component.ts
new file mode 100644
index 0000000000..930f735b9a
--- /dev/null
+++ b/src/themes/krex/app/login-page/login-page.component.ts
@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+import { LoginPageComponent as BaseComponent } from 'src/app/login-page/login-page.component';
+@Component({
+ selector: 'ds-login-page',
+ imports: [],
+ templateUrl: './login-page.component.html',
+ styleUrl: './login-page.component.scss',
+})
+export class LoginPageComponent extends BaseComponent {
+
+}
diff --git a/src/themes/krex/app/navbar/navbar.component.html b/src/themes/krex/app/navbar/navbar.component.html
new file mode 100644
index 0000000000..ebc1be6927
--- /dev/null
+++ b/src/themes/krex/app/navbar/navbar.component.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+ @if ((isMobile$ | async) && (isAuthenticated$ | async)) {
+
+ }
+
+
+
+ @for (section of (sections | async); track section) {
+
+
+ }
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/themes/krex/app/navbar/navbar.component.scss b/src/themes/krex/app/navbar/navbar.component.scss
new file mode 100644
index 0000000000..32c65c8c97
--- /dev/null
+++ b/src/themes/krex/app/navbar/navbar.component.scss
@@ -0,0 +1,3 @@
+:host {
+
+}
diff --git a/src/themes/krex/app/navbar/navbar.component.spec.ts b/src/themes/krex/app/navbar/navbar.component.spec.ts
new file mode 100644
index 0000000000..cfedf9e8a3
--- /dev/null
+++ b/src/themes/krex/app/navbar/navbar.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { NavbarComponent } from './navbar.component';
+
+describe('NavbarComponent', () => {
+ let component: NavbarComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [NavbarComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(NavbarComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/themes/krex/app/navbar/navbar.component.ts b/src/themes/krex/app/navbar/navbar.component.ts
new file mode 100644
index 0000000000..2861aea8f5
--- /dev/null
+++ b/src/themes/krex/app/navbar/navbar.component.ts
@@ -0,0 +1,32 @@
+import {
+ AsyncPipe,
+ NgClass,
+ NgComponentOutlet,
+} from '@angular/common';
+import { Component } from '@angular/core';
+import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';
+import { TranslateModule } from '@ngx-translate/core';
+
+import { NavbarComponent as BaseComponent } from '../../../../app/navbar/navbar.component';
+import { slideMobileNav } from '../../../../app/shared/animations/slide';
+import { ThemedUserMenuComponent } from '../../../../app/shared/auth-nav-menu/user-menu/themed-user-menu.component';
+
+/**
+ * Component representing the public navbar
+ */
+@Component({
+ selector: 'ds-themed-navbar',
+ styleUrls: ['./navbar.component.scss'],
+ templateUrl: './navbar.component.html',
+ animations: [slideMobileNav],
+ imports: [
+ AsyncPipe,
+ NgbDropdownModule,
+ NgClass,
+ NgComponentOutlet,
+ ThemedUserMenuComponent,
+ TranslateModule,
+ ],
+})
+export class NavbarComponent extends BaseComponent {
+}
diff --git a/src/themes/krex/app/shared/log-in/log-in.component.html b/src/themes/krex/app/shared/log-in/log-in.component.html
new file mode 100644
index 0000000000..76d0a68df2
--- /dev/null
+++ b/src/themes/krex/app/shared/log-in/log-in.component.html
@@ -0,0 +1,9 @@
+
+
+
+
+
{{"login.form.header" | translate}}
+
+
+
+
\ No newline at end of file
diff --git a/src/themes/krex/app/shared/log-in/log-in.component.scss b/src/themes/krex/app/shared/log-in/log-in.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/themes/krex/app/shared/log-in/log-in.component.spec.ts b/src/themes/krex/app/shared/log-in/log-in.component.spec.ts
new file mode 100644
index 0000000000..9aeefd456b
--- /dev/null
+++ b/src/themes/krex/app/shared/log-in/log-in.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { LogInComponent } from './log-in.component';
+
+describe('LogInComponent', () => {
+ let component: LogInComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [LogInComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(LogInComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/themes/krex/app/shared/log-in/log-in.component.ts b/src/themes/krex/app/shared/log-in/log-in.component.ts
new file mode 100644
index 0000000000..fbb6371c89
--- /dev/null
+++ b/src/themes/krex/app/shared/log-in/log-in.component.ts
@@ -0,0 +1,19 @@
+import { Component } from '@angular/core';
+import { TranslateModule } from '@ngx-translate/core';
+import { AuthMethodType } from '@dspace/core/auth/models/auth.method-type';
+
+import { LoginPageComponent as BaseComponent } from 'src/app/login-page/login-page.component';
+import { ThemedLogInComponent } from 'src/app/shared/log-in/themed-log-in.component';
+
+/**
+ * This component represents the login page
+ */
+@Component({
+ selector: 'ds-login-page',
+ imports: [ThemedLogInComponent, TranslateModule],
+ styleUrls: ['./log-in.component.scss'],
+ templateUrl: './log-in.component.html',
+})
+export class LoginComponent extends BaseComponent {
+ protected readonly AuthMethodType = AuthMethodType;
+}
\ No newline at end of file
diff --git a/src/themes/krex/app/shared/search-form/search-form.component.html b/src/themes/krex/app/shared/search-form/search-form.component.html
new file mode 100644
index 0000000000..92d3279ff4
--- /dev/null
+++ b/src/themes/krex/app/shared/search-form/search-form.component.html
@@ -0,0 +1,22 @@
+
diff --git a/src/themes/krex/app/shared/search-form/search-form.component.scss b/src/themes/krex/app/shared/search-form/search-form.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/themes/krex/app/shared/search-form/search-form.component.spec.ts b/src/themes/krex/app/shared/search-form/search-form.component.spec.ts
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/themes/krex/app/shared/search-form/search-form.component.ts b/src/themes/krex/app/shared/search-form/search-form.component.ts
new file mode 100644
index 0000000000..447ad205ae
--- /dev/null
+++ b/src/themes/krex/app/shared/search-form/search-form.component.ts
@@ -0,0 +1,23 @@
+import { AsyncPipe } from '@angular/common';
+import { Component } from '@angular/core';
+import { FormsModule } from '@angular/forms';
+import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap';
+import { TranslateModule } from '@ngx-translate/core';
+import { SearchFormComponent as BaseComponent } from 'src/app/shared/search-form/search-form.component';
+import { BrowserOnlyPipe } from 'src/app/shared/utils/browser-only.pipe';
+
+@Component({
+ selector: 'ds-search-form',
+ imports: [
+ AsyncPipe,
+ BrowserOnlyPipe,
+ FormsModule,
+ NgbTooltip,
+ TranslateModule,
+ ],
+ templateUrl: './search-form.component.html',
+ styleUrls: ['../../../../../app/shared/search-form/search-form.component.scss'],
+})
+export class SearchFormComponent extends BaseComponent {
+
+}
diff --git a/src/themes/krex/assets/fonts/.gitkeep b/src/themes/krex/assets/fonts/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/themes/krex/assets/i18n/en.json5 b/src/themes/krex/assets/i18n/en.json5
new file mode 100644
index 0000000000..41ea7abb05
--- /dev/null
+++ b/src/themes/krex/assets/i18n/en.json5
@@ -0,0 +1,85 @@
+{
+ "curation-task.task.estaipsize.label": "Estimate Storage Space for AIP(s)",
+ "curation-task.task.readodometer.label": "Read Odometer",
+ "curation-task.task.transmitaip.label": "Transmit AIP(s) to Storage",
+ "curation-task.task.transmitsingleaip.label": "Transmit Single Object AIP to Storage",
+ "curation-task.task.verifyaip.label": "Verify AIP(s) exist in Storage",
+ "curation-task.task.fetchaip.label": "Fetch AIP(s) from Storage",
+ "curation-task.task.auditaip.label": "Audit against AIP(s)",
+ "curation-task.task.removeaip.label": "Remove AIP(s) from Storage",
+ "curation-task.task.restorefromaip.label": "Restore Missing Object(s) from AIP(s)",
+ "curation-task.task.replacewithaip.label": "Replace Existing Object(s) with AIP(s)",
+ "curation-task.task.restorekeepexisting.label": "Restore Missing Object(s) but Keep Existing Objects",
+ "curation-task.task.restoresinglefromaip.label": "Restore Single Object from AIP",
+ "curation-task.task.replacesinglewithaip.label": "Replace Single Object with AIP",
+ "admin.registries.metadata.description": "The metadata registry maintains a list of all metadata fields available in the repository. These fields may be divided amongst multiple schemas. However, K-REx requires the qualified Dublin Core schema.",
+ "dso-selector.set-scope.community.button": "Search all of K-REx",
+ "error-page.orcid.generic-error": "An error occurred during login via ORCID. Make sure you have shared your ORCID account email address with K-REx. If the error persists, contact the administrator",
+ "home.top-level-communities.head": "Communities in K-REx",
+ "info.feedback.info": "Thanks for sharing your feedback about the K-REx system. Your comments are appreciated!",
+ "login.form.header": "Please log in to K-REx",
+ "logout.form.header": "Log out from K-REx",
+ "menu.section.browse_global": "Browse K-REx",
+ "mydspace.breadcrumbs": "MyK-REx",
+ "mydspace.title": "MyK-REx",
+ "mydspace.search-form.placeholder": "Search in MyK-REx...",
+ "nav.browse.header": "All of K-REx",
+ "nav.mydspace": "MyK-REx",
+ "register-page.registration.info": "Register an account to subscribe to collections for email updates, and submit new items to K-REx.",
+ "repository.title.prefix": "K-REx :: ",
+ "repository.title.prefixDSpace": "K-REx ::",
+ "search.form.scope.all": "All of K-REx",
+ "submission.import-external.back-to-my-dspace": "Back to MyK-REx",
+ "submission.import-external.page.hint": "Enter a query above to find items from the web to import in to K-REx.",
+ "login.form.shibboleth": "Log in with K-State eID",
+ "info.about.breadcrumbs": "About the K-State Research Exchange",
+ "menu.section.about": "About",
+ "info.about.head": "About the K-State Research Exchange",
+ "info.about.title": "About the K-State Research Exchange",
+ "info.policies.breadcrumbs": "Policies",
+ "info.policies.head": "K-REx Policies",
+ "info.policies.title": "K-REx Policies",
+ "menu.section.policies": "Policies",
+ "info.license.breadcrumbs": "K-REx License",
+ "info.license.head": "Standard K-REx license - Nonexclusive distribution",
+ "info.license.title": "K-REx License",
+ "title": "K-REx",
+ "info.guidelines.symbols.breadcrumbs": "ETDR Guidelines: Symbols",
+ "info.guidelines.symbols.head": "Guidelines for Entering a Title or Abstract That Contains Symbols",
+ "info.guidelines.symbols.title": "ETDR Guidelines: Symbols",
+ "info.guidelines.attachments.breadcrumbs": "ETDR Guidelines: Attachments",
+ "info.guidelines.attachments.head": "ETDR Guidelines: Attachments",
+ "info.guidelines.attachments.title": "ETDR Guidelines: Attachments",
+ "info.guidelines.authors.breadcrumbs": "ETDR Guidelines: Author Name",
+ "info.guidelines.authors.head": "ETDR Guidelines: Author Name",
+ "info.guidelines.authors.title": "ETDR Guidelines: Author Name",
+ "info.guidelines.keywords.breadcrumbs": "ETDR Guidelines: Keywords",
+ "info.guidelines.keywords.head": "ETDR Guidelines: Keywords",
+ "info.guidelines.keywords.title": "ETDR Guidelines: Keywords",
+ "menu.section.browse_global_communities_and_collections": "All communities and collections",
+ "browse.metadata.datepublished": "Published Date",
+ "browse.comcol.by.datepublished": "By Published Date",
+ "browse.metadata.datepublished.breadcrumbs": "Browse by Published Date",
+ "menu.section.browse_global_by_datepublished": "By Published Date",
+ "home.search-form.placeholder": "Search scholarly works, historical documents and images...",
+ "search.filters.filter.etdrAdvisor.head": "Major advisor",
+ "search.filters.filter.etdrAdvisor.placeholder": "Major advisor name",
+ "search.filters.filter.etdrAdvisor.label": "Search major advisor name",
+ "search.filters.applied.f.etdrAdvisor": "Major advisor",
+ "search.filters.filter.etdrDepartment.head": "Degree Awarding Department",
+ "search.filters.filter.etdrDepartment.placeholder": "Degree Awarding Department",
+ "search.filters.filter.etdrDepartment.label": "Search Degree Awarding Department",
+ "search.filters.applied.f.etdrDepartment": "Degree Awarding Department",
+ "menu.section.navigate": "Communities and collections",
+ "menu.section.navigate.search_all": "Search all content",
+ "menu.section.navigate.digital_archives": "K-State Libraries Digital Collections",
+ "menu.section.navigate.etdr": "Graduate Theses, Dissertations, and Reports",
+ "menu.section.navigate.rscad": "Research, Scholarly and Creative Activities, and Discovery Works",
+ "submission.sections.submit.progressbar.describe.stepone.etdpageone.authors.hint": "Enter your name in the same form as it appears on your title page. Use standard capitalization; do not enter your name in all capital letters. For more information on how to enter names, follow the steps here .",
+ "submission.sections.submit.progressbar.describe.stepone.etdpageone.title.hint": "Copy and paste the title of your ETDR. If your title contains mathematical operators or other symbols that do not display properly within the Title input box, follow the steps here .",
+ "submission.sections.submit.progressbar.describe.stepone.etdpageone.professors.hint": "Select your major professor(s). If you have co-major professors, hold down the Ctrl key and left click to select multiple names. If your major professor is not listed, select \"Major Professor Not Listed\".",
+ "submission.sections.submit.progressbar.describe.stepone.etdpageone.language.hint": "Select the language of the main content of the item. If the language does not appear in the list below, please select 'Other'. If the content does not really have a language (for example, if it is a dataset or an image) pleaseselect 'N/A'.",
+ "submission.sections.submit.progressbar.describe.stepone.etdpagetwo.keywords.hint": "Enter from 1 to 6 keywords for your ETDR. See here for selecting keywords. Select the \"Add\" button after entering a keyword or keyword phrase.",
+ "submission.sections.submit.progressbar.describe.stepone.etdpagetwo.symbols.hint": "Copy and paste the text of your abstract here. Do not include the heading \"Abstract.\" If your abstract contains mathematical operators or other symbols that do not display properly within the Abstract input box, follow the steps here .",
+ "submission.sections.submit.progressbar.describe.stepone.etdpagetwo.sponsorship.hint": "(Optional) Enter the names of agencies, if any, that helped to fund your research. Do not use acronyms or abbreviations. If you did not have a source of funding for your research, leave this space blank.",
+}
diff --git a/src/themes/krex/assets/images/.gitkeep b/src/themes/krex/assets/images/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/themes/krex/assets/images/1200px-Kansas_State_University_seal.png b/src/themes/krex/assets/images/1200px-Kansas_State_University_seal.png
new file mode 100644
index 0000000000..b22444425b
Binary files /dev/null and b/src/themes/krex/assets/images/1200px-Kansas_State_University_seal.png differ
diff --git a/src/themes/krex/assets/images/KREx_sidebar.jpg b/src/themes/krex/assets/images/KREx_sidebar.jpg
new file mode 100644
index 0000000000..753d1576e1
Binary files /dev/null and b/src/themes/krex/assets/images/KREx_sidebar.jpg differ
diff --git a/src/themes/krex/assets/images/banner-half.jpg b/src/themes/krex/assets/images/banner-half.jpg
new file mode 100644
index 0000000000..b37534e369
Binary files /dev/null and b/src/themes/krex/assets/images/banner-half.jpg differ
diff --git a/src/themes/krex/assets/images/banner-half.webp b/src/themes/krex/assets/images/banner-half.webp
new file mode 100644
index 0000000000..e2272037bf
Binary files /dev/null and b/src/themes/krex/assets/images/banner-half.webp differ
diff --git a/src/themes/krex/assets/images/banner-tall.jpg b/src/themes/krex/assets/images/banner-tall.jpg
new file mode 100644
index 0000000000..d310311296
Binary files /dev/null and b/src/themes/krex/assets/images/banner-tall.jpg differ
diff --git a/src/themes/krex/assets/images/banner-tall.webp b/src/themes/krex/assets/images/banner-tall.webp
new file mode 100644
index 0000000000..a4ec97f2bc
Binary files /dev/null and b/src/themes/krex/assets/images/banner-tall.webp differ
diff --git a/src/themes/krex/assets/images/banner.jpg b/src/themes/krex/assets/images/banner.jpg
new file mode 100644
index 0000000000..ea7f4701c8
Binary files /dev/null and b/src/themes/krex/assets/images/banner.jpg differ
diff --git a/src/themes/krex/assets/images/banner.webp b/src/themes/krex/assets/images/banner.webp
new file mode 100644
index 0000000000..437c89d075
Binary files /dev/null and b/src/themes/krex/assets/images/banner.webp differ
diff --git a/src/themes/krex/assets/images/favicons/android-chrome-192x192.png b/src/themes/krex/assets/images/favicons/android-chrome-192x192.png
new file mode 100644
index 0000000000..1aaffb1b90
Binary files /dev/null and b/src/themes/krex/assets/images/favicons/android-chrome-192x192.png differ
diff --git a/src/themes/krex/assets/images/favicons/android-chrome-512x512.png b/src/themes/krex/assets/images/favicons/android-chrome-512x512.png
new file mode 100644
index 0000000000..2d35f496dc
Binary files /dev/null and b/src/themes/krex/assets/images/favicons/android-chrome-512x512.png differ
diff --git a/src/themes/krex/assets/images/favicons/apple-touch-icon.png b/src/themes/krex/assets/images/favicons/apple-touch-icon.png
new file mode 100644
index 0000000000..58ff41f34b
Binary files /dev/null and b/src/themes/krex/assets/images/favicons/apple-touch-icon.png differ
diff --git a/src/themes/krex/assets/images/favicons/favicon.ico b/src/themes/krex/assets/images/favicons/favicon.ico
new file mode 100644
index 0000000000..ef03d410d7
Binary files /dev/null and b/src/themes/krex/assets/images/favicons/favicon.ico differ
diff --git a/src/themes/krex/assets/images/favicons/favicon.svg b/src/themes/krex/assets/images/favicons/favicon.svg
new file mode 100644
index 0000000000..8ea65cb72f
--- /dev/null
+++ b/src/themes/krex/assets/images/favicons/favicon.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/themes/krex/assets/images/research-exchange_purple-bkg.jpg b/src/themes/krex/assets/images/research-exchange_purple-bkg.jpg
new file mode 100644
index 0000000000..68a6ac68a9
Binary files /dev/null and b/src/themes/krex/assets/images/research-exchange_purple-bkg.jpg differ
diff --git a/src/themes/krex/eager-theme-components.ts b/src/themes/krex/eager-theme-components.ts
new file mode 100644
index 0000000000..145e87aee7
--- /dev/null
+++ b/src/themes/krex/eager-theme-components.ts
@@ -0,0 +1,12 @@
+/* eslint-disable dspace-angular-ts/themed-component-usages */
+import { HeaderComponent } from './app/header/header.component';
+import { HeaderNavbarWrapperComponent } from './app/header-nav-wrapper/header-navbar-wrapper.component';
+import { HomeNewsComponent } from './app/home-page/home-news/home-news.component';
+import { NavbarComponent } from './app/navbar/navbar.component';
+
+export const COMPONENTS = [
+ HomeNewsComponent,
+ HeaderComponent,
+ HeaderNavbarWrapperComponent,
+ NavbarComponent,
+];
diff --git a/src/themes/krex/lazy-listable-components.ts b/src/themes/krex/lazy-listable-components.ts
new file mode 100644
index 0000000000..4b0eed6066
--- /dev/null
+++ b/src/themes/krex/lazy-listable-components.ts
@@ -0,0 +1,6 @@
+/**
+ * Add components that use the @listableObjectComponent decorator here.
+ * This will ensure that the decorators get picked up when the app loads
+ */
+export const LISTABLE_COMPONENTS = [
+];
diff --git a/src/themes/krex/styles/_global-styles.scss b/src/themes/krex/styles/_global-styles.scss
new file mode 100644
index 0000000000..794cb06a42
--- /dev/null
+++ b/src/themes/krex/styles/_global-styles.scss
@@ -0,0 +1,27 @@
+// Add any global css for the theme here
+
+// imports the base global style
+@import '../../../styles/_global-styles.scss';
+
+.facet-filter, .setting-option, .advanced-search {
+ 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;
+ }
+
+ .bg-secondary {
+ background-color: var(--bs-primary);
+ }
+
+ a {
+ color: var(--bs-primary);
+ }
+
+ h4, .h4 {
+ font-size: 1.1rem
+ }
+}
diff --git a/src/themes/krex/styles/_theme_css_variable_overrides.scss b/src/themes/krex/styles/_theme_css_variable_overrides.scss
new file mode 100644
index 0000000000..39745f4464
--- /dev/null
+++ b/src/themes/krex/styles/_theme_css_variable_overrides.scss
@@ -0,0 +1,35 @@
+// Override or add CSS variables for your theme here
+
+:root {
+
+ @include media-breakpoint-up(md) {
+ --ds-header-logo-height: 40px;
+ --ds-header-height: 80px;
+ }
+ @include media-breakpoint-down(sm) {
+ --ds-header-logo-height: 50px;
+ --ds-header-height: 90px;
+ }
+
+ --ds-banner-text-background: rgba(0, 0, 0, 0.45);
+ --ds-banner-background-gradient-width: 300px;
+
+ --ds-header-navbar-border-bottom-height: 5px;
+
+ /* set the next two properties as `--ds-header-navbar-border-bottom-*`
+ in order to keep the bottom border of the header when navbar is expanded */
+
+ --ds-expandable-navbar-border-top-color: #{$white};
+ --ds-expandable-navbar-border-top-height: 0;
+ --ds-expandable-navbar-padding-top: 0;
+
+ --ds-item-page-img-field-default-inline-height: 24px;
+ --ds-item-page-img-field-ror-inline-height: var(--ds-item-page-img-field-default-inline-height);
+
+ /* K-REx Changes */
+ --ds-header-navbar-border-bottom-color: #{$brand-primary};
+ --ds-navbar-link-color: #{$brand-primary};
+ --ds-navbar-link-color-hover: #{darken($brand-primary, 15%)};
+ --ds-breadcrumb-link-color: #{$brand-primary};
+}
+
diff --git a/src/themes/krex/styles/_theme_sass_variable_overrides.scss b/src/themes/krex/styles/_theme_sass_variable_overrides.scss
new file mode 100644
index 0000000000..8727cdf993
--- /dev/null
+++ b/src/themes/krex/styles/_theme_sass_variable_overrides.scss
@@ -0,0 +1,98 @@
+// 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.
+
+// When this file is going to be compiled, internal Bootstrap variables won't have been declared yet,
+// therefore if you want to use any Bootstrap variable you also need to declare it here.
+
+// All SASS variables from the base theme are also included here. Do not use the '!default' flag
+// here if you want to override them.
+
+
+/*** FONT FAMILIES ***/
+
+@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');
+
+// K-State Fonts
+@import url('https://use.typekit.net/qra4olf.css');
+
+$font-family-sans-serif: 'myriad-pro', -apple-system, BlinkMacSystemFont, "Open Sans", Roboto, "Helvetica", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+
+/*** SEMANTIC COLOR SCHEME ***/
+
+// Gray scale (uncomment the variables that you want to override or that you need to use in this file)
+//$white: #fff;
+//$gray-100: #f8f9fa;
+//$gray-200: #e9ecef;
+//$gray-300: #dee2e6;
+//$gray-400: #ced4da;
+//$gray-500: #adb5bd;
+//$gray-600: #6c757d;
+//$gray-700: #495057;
+//$gray-800: #343a40;
+//$gray-900: #212529;
+//$black: #000;
+
+// Other colors (uncomment the variables that you want to override or that you need to use in this file)
+//$blue: #007bff !default;
+//$indigo: #6610f2 !default;
+//$purple: #6f42c1 !default;
+//$pink: #e83e8c !default;
+//$red: #dc3545 !default;
+//$orange: #fd7e14 !default;
+//$yellow: #ffc107 !default;
+//$green: #28a745 !default;
+//$teal: #20c997 !default;
+//$cyan: #17a2b8 !default;
+
+// ...
+// K-State Purple
+$brand-primary: #512888;
+$kstate-purple: $brand-primary;
+
+
+// Override semantic colors here
+$primary: #512888; // Gray
+$secondary: #495057; // As Bootstrap $gray-700
+$success: #92c642; // Lime
+$info: #1e6f90; // Light blue
+$warning: #ec9433; // Orange
+$danger: #cf4444; // Red
+$light: #f8f9fa; // As Bootstrap $gray-100
+$dark: #43515f; // Dark blue
+
+
+// Add new semantic colors here (you don't need to add existing semantic colors)
+$theme-custom-semantic-colors: (
+ kstate-purple: $kstate-purple,
+);
+
+/*** OTHER BOOTSTRAP VARIABLES ***/
+
+$yiq-contrasted-threshold: 170;
+
+$min-contrast-ratio: 2.06 !default;
+
+$body-color: #343a40; // As Bootstrap $gray-800
+
+$link-color: $brand-primary; // K-State Purple, as DSpace $info
+$link-decoration: none;
+$link-hover-color: darken($link-color, 15%);
+$link-hover-decoration: underline;
+
+$table-accent-bg: #f8f9fa; // As Bootstrap $gray-100
+$table-hover-bg: #ced4da; // As Bootstrap $gray-400
+
+$navbar-dark-color: #fff;
+
+
+/*** CUSTOM DSPACE VARIABLES ***/
+
+$ds-home-news-link-color: #D2FC93;
+$ds-header-navbar-border-bottom-color: #92c642;
+
+$ds-breadcrumb-link-color: #154E66 !default;
+$ds-breadcrumb-link-active-color: #040D11 !default;
+
+$font-size-base: 1.125rem;
\ No newline at end of file
diff --git a/src/themes/krex/styles/theme.scss b/src/themes/krex/styles/theme.scss
new file mode 100644
index 0000000000..dfa8274cf6
--- /dev/null
+++ b/src/themes/krex/styles/theme.scss
@@ -0,0 +1,15 @@
+// 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';
+
+$theme-colors: map-merge($theme-colors, $theme-custom-semantic-colors);
+
+@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';