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 @@ +
+ + + @if ((isMobile$ | async)) { +
+ +
+ } +
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 @@ + + +
+
+ +
+ + @if ((isMobile$ | async) !== true) { + + } +
+ +
+ + + + @if ((isMobile$ | async)) { +
+ +
+ } +
+
+
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 @@ +
+ +
+
+
+

Graduate students

+
+
+

Submit Electronic Thesis, Dissertation or Report (ETDR).

+ +

+ + + Submit ETDR + + +

+
+ +
+
+ +
+
+ + +
+

Faculty

+
+
+

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 @@ + \ 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 @@ +
+
+
+
+ @if (showScopeSelector) { + + } + + + + +
+
+
+
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';