diff --git a/jambotron-ui/angular.json b/jambotron-ui/angular.json index 07de4b3..70ac9aa 100644 --- a/jambotron-ui/angular.json +++ b/jambotron-ui/angular.json @@ -19,8 +19,7 @@ "options": { "browser": "src/main.ts", "polyfills": [ - "zone.js", - "@angular/localize/init" + "zone.js" ], "tsConfig": "tsconfig.app.json", "inlineStyleLanguage": "scss", @@ -28,15 +27,22 @@ { "glob": "**/*", "input": "public" + }, + { + "glob": "**/*", + "input": "src/assets/", + "output": "/assets/" } ], "styles": [ - { - "input": "node_modules/@progress/kendo-theme-default/dist/all.css" - }, - "@angular/material/prebuilt-themes/cyan-orange.css", + "@angular/material/prebuilt-themes/azure-blue.css", "src/styles.scss" - ] + ], + "server": "src/main.server.ts", + "outputMode": "server", + "ssr": { + "entry": "src/server.ts" + } }, "configurations": { "production": { @@ -44,7 +50,7 @@ { "type": "initial", "maximumWarning": "500kB", - "maximumError": "5MB" + "maximumError": "1MB" }, { "type": "anyComponentStyle", @@ -82,8 +88,7 @@ "options": { "polyfills": [ "zone.js", - "zone.js/testing", - "@angular/localize/init" + "zone.js/testing" ], "tsConfig": "tsconfig.spec.json", "inlineStyleLanguage": "scss", @@ -94,10 +99,7 @@ } ], "styles": [ - { - "input": "node_modules/@progress/kendo-theme-default/dist/all.css" - }, - "@angular/material/prebuilt-themes/cyan-orange.css", + "@angular/material/prebuilt-themes/azure-blue.css", "src/styles.scss" ] } diff --git a/jambotron-ui/package-lock.json b/jambotron-ui/package-lock.json index 04f2bbb..4ad1649 100644 --- a/jambotron-ui/package-lock.json +++ b/jambotron-ui/package-lock.json @@ -8,43 +8,24 @@ "name": "jambotron-ui", "version": "0.0.0", "dependencies": { - "@angular/animations": "^20.0.3", + "@angular/animations": "^20.0.4", "@angular/cdk": "^20.0.3", "@angular/common": "^20.0.0", "@angular/compiler": "^20.0.0", "@angular/core": "^20.0.0", "@angular/forms": "^20.0.0", - "@angular/localize": "^20.0.0", "@angular/material": "^20.0.3", "@angular/platform-browser": "^20.0.0", - "@angular/platform-browser-dynamic": "^20.0.3", "@angular/platform-server": "^20.0.0", "@angular/router": "^20.0.0", "@angular/ssr": "^20.0.2", + "@ant-design/icons-angular": "19.0.0", + "@ng-bootstrap/ng-bootstrap": "19.0.0", + "@popperjs/core": "2.11.8", "@primeng/themes": "^19.1.3", - "@progress/kendo-angular-buttons": "19.1.1", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-angular-dialog": "19.1.1", - "@progress/kendo-angular-dropdowns": "19.1.1", - "@progress/kendo-angular-editor": "^19.1.1", - "@progress/kendo-angular-icons": "19.1.1", - "@progress/kendo-angular-indicators": "^19.1.1", - "@progress/kendo-angular-inputs": "19.1.1", - "@progress/kendo-angular-intl": "19.1.1", - "@progress/kendo-angular-l10n": "19.1.1", - "@progress/kendo-angular-label": "19.1.1", - "@progress/kendo-angular-layout": "19.1.1", - "@progress/kendo-angular-navigation": "19.1.1", - "@progress/kendo-angular-popup": "19.1.1", - "@progress/kendo-angular-progressbar": "19.1.1", - "@progress/kendo-angular-toolbar": "19.1.1", - "@progress/kendo-angular-treeview": "19.1.1", - "@progress/kendo-angular-utils": "^19.1.1", - "@progress/kendo-drawing": "^1.21.0", - "@progress/kendo-licensing": "^1.5.0", - "@progress/kendo-svg-icons": "^4.0.0", - "@progress/kendo-theme-default": "11.0.2", + "bootstrap": "5.3.6", "express": "^5.1.0", + "ngx-scrollbar": "18.0.0", "primeng": "^19.1.3", "rxjs": "~7.8.0", "tslib": "^2.3.0", @@ -70,6 +51,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -80,13 +62,13 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.2000.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2000.2.tgz", - "integrity": "sha512-adJYWJWuyXFtCOg2lZTV/7CImf4ifxd6c//VXuq5kx7AiSGTIH5Nf2xTQe8ZAZqytUmDgnoNMDhGRQ9b3C5TnA==", + "version": "0.2000.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2000.3.tgz", + "integrity": "sha512-37S4dzlwB3C8gnBlwxjjvNUqwSeKnDe2j1XWg7sj94kbg/jLJV0Db/Dvb7zJjKher6Ed1Bnj3pMOM206ALJW2A==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.0.2", + "@angular-devkit/core": "20.0.3", "rxjs": "7.8.2" }, "engines": { @@ -96,9 +78,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "20.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.0.2.tgz", - "integrity": "sha512-qqTSpcIw+TqJ6u/tkQzqgpwVelHsHr8Jhws1Vlx6E0L6E+cRILBK48i9ttE+oYkQlcopQ3VZAmzcZodXJ1SQ9Q==", + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.0.3.tgz", + "integrity": "sha512-XgEIbIky0pMtJSomHRaf16BT1jzJNQCm2geNZ642n3cj8fYLm4jHJX/r738kIfbHWoWXT/hlTmVgIH9TdQPicA==", "dev": true, "license": "MIT", "dependencies": { @@ -124,13 +106,13 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "20.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.0.2.tgz", - "integrity": "sha512-r1aSZhcadLtUMhzUUfy+pkJdZW93z8WQtpGR24y88yFpPgDL5kY85VSlOzjGgo1vEs8Dd7ADcOcsVsUW8MxQ3A==", + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.0.3.tgz", + "integrity": "sha512-T679AQXenG6e4fdC/HXrps0Dqy1EYKb4pFNLQqZHR9mfyeq/vxFWs3ga/yMiqvqMPUK5W5FucEpFZJQQmc7M+w==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.0.2", + "@angular-devkit/core": "20.0.3", "jsonc-parser": "3.3.1", "magic-string": "0.30.17", "ora": "8.2.0", @@ -143,9 +125,9 @@ } }, "node_modules/@angular/animations": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.0.3.tgz", - "integrity": "sha512-R6yv2RmrH49nW1ybgoOMw5pWzqaRYo8Kn3VtvrUDBty4TXjwc0addaw/t89n0smO3/lmBB4vnlRScePAEQZ/3w==", + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.0.4.tgz", + "integrity": "sha512-s0kRcEply2A1ThvFmb0+o+hEpAbPn08lpK8xjWZryM4cMrwjgsUE0OZHZPBANP4I1xT7Z82l+fmQbH+vX48EyA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -154,19 +136,19 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.0.3", - "@angular/core": "20.0.3" + "@angular/common": "20.0.4", + "@angular/core": "20.0.4" } }, "node_modules/@angular/build": { - "version": "20.0.2", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.0.2.tgz", - "integrity": "sha512-nxha/dncAwEbY0nkgDWeiWSi+MSCJBuQbFf5bjTZ+pu0fS+5SOQllZKzZE9H+dms/JsLHm2YmPiScIYVvUenDw==", + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.0.3.tgz", + "integrity": "sha512-xA5eTGop85SI/+hfiOSJR/xI1w1NK3qylpEZ277YRaw8Ikh7r1DKPJOMGBfXNd8QsZYBSWGHA8SXvCmOh/hvLQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2000.2", + "@angular-devkit/architect": "0.2000.3", "@babel/core": "7.27.1", "@babel/helper-annotate-as-pure": "7.27.1", "@babel/helper-split-export-declaration": "7.24.7", @@ -208,7 +190,7 @@ "@angular/platform-browser": "^20.0.0", "@angular/platform-server": "^20.0.0", "@angular/service-worker": "^20.0.0", - "@angular/ssr": "^20.0.2", + "@angular/ssr": "^20.0.3", "karma": "^6.4.0", "less": "^4.2.0", "ng-packagr": "^20.0.0", @@ -273,18 +255,18 @@ } }, "node_modules/@angular/cli": { - "version": "20.0.2", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.0.2.tgz", - "integrity": "sha512-LzBONPETA1uCZuylgZRYe+vImf8i+rRrwAgOBHWbW2wxut9ZQ8ZFwQgNkjvDhE7DLmsFV+GskfAs5+Td/5LZwA==", + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.0.3.tgz", + "integrity": "sha512-tDYcUrxq8Y9wK6EqwJ6Gn+4IF+VpPVikmpuqzqrUtYzqvRTqYtkyhJsAu3Ec6d6941mL2U3ZnMm3sjOxPPNkjA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2000.2", - "@angular-devkit/core": "20.0.2", - "@angular-devkit/schematics": "20.0.2", + "@angular-devkit/architect": "0.2000.3", + "@angular-devkit/core": "20.0.3", + "@angular-devkit/schematics": "20.0.3", "@inquirer/prompts": "7.5.1", "@listr2/prompt-adapter-inquirer": "2.0.22", - "@schematics/angular": "20.0.2", + "@schematics/angular": "20.0.3", "@yarnpkg/lockfile": "1.1.0", "ini": "5.0.0", "jsonc-parser": "3.3.1", @@ -306,9 +288,9 @@ } }, "node_modules/@angular/common": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.0.3.tgz", - "integrity": "sha512-HqqVqaj+xzByWJOIrONVRkpvM6mRuGmC+m9wKixhc9f+xXsymVTBR6xg+G/RwyYP2NuC5chxIZbaJTz2Hj+6+g==", + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.0.4.tgz", + "integrity": "sha512-fWgxe2rgSKgI36ummBYnBN4YUrmp4CHbfEG3RMeJho/vhHKguk2/o6BgL9zvnKybvbWmuaqbkHogi+y0LeJ8Ww==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -317,14 +299,14 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "20.0.3", + "@angular/core": "20.0.4", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.0.3.tgz", - "integrity": "sha512-CShPNvqqV5Cleyho8CKtcFlt7l2thHPUdXZPtKHH3Zf43KojvJbJksZLBz6ZbyoQdgxNMYSfbh4h0UbSGtPOzQ==", + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.0.4.tgz", + "integrity": "sha512-1bP3P8Ll/KUYMPiE6TDjkMXkqCDVgSUAUsVCgzAxz4mcMuc9PnlbhQazpWHCkCDIjGFZ5XIAsS49V7tfaTbLDw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -334,9 +316,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.0.3.tgz", - "integrity": "sha512-u+fYnx1sRrwL0fd8kaAD2LqJjfe/Zj7zyOv0A3Ue7r8jzdNsPU8MWr/QyBaWlqSpPEpR+kD3xmDvRT9ra9RTBA==", + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.0.4.tgz", + "integrity": "sha512-2FP1WMRexAMcDPNE3YO3zB++sCgND9O/qJC5rgKbAebpbmOrCDMUBRlftkwiLT+UhTM9PjhTtAGtK7C+2iwx1g==", "dev": true, "license": "MIT", "dependencies": { @@ -357,7 +339,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.0.3", + "@angular/compiler": "20.0.4", "typescript": ">=5.8 <5.9" }, "peerDependenciesMeta": { @@ -476,9 +458,9 @@ } }, "node_modules/@angular/core": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.0.3.tgz", - "integrity": "sha512-kB6w1bQgClfmkTbWJeD3vSLqX0e3uSaJD6KJ7XXT1IEaqUs4J+mKRKHQyxpJlpdUb7R+jDaHSM/vrVF15/L2rA==", + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.0.4.tgz", + "integrity": "sha512-JhSl3B6CrJ9kegLffgWVFGF4D4bWLV/9r8R0+h78vU+ppdPFPWDha7WnirF31cPIg3pBzy6wn103Kcy9Ri5M5w==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -487,7 +469,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.0.3", + "@angular/compiler": "20.0.4", "rxjs": "^6.5.3 || ^7.4.0", "zone.js": "~0.15.0" }, @@ -501,9 +483,9 @@ } }, "node_modules/@angular/forms": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.0.3.tgz", - "integrity": "sha512-tb4M+c+/JnmPmtTb3+Si/DWGttnCEW5rvi4u55q+EFxYGQO0GeHa53yQTl1e2ngQLT9/kgmDAsJ2mt1Ql9N6xg==", + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.0.4.tgz", + "integrity": "sha512-bFTMgJSHiLr80ELymRykZW6o5QroDlk+g5AFFiY9yxM8I0DV5YpCNBefv8GiuWubE+Lw6LkQ/HMYeXYJMTue3A==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -512,138 +494,12 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.0.3", - "@angular/core": "20.0.3", - "@angular/platform-browser": "20.0.3", + "@angular/common": "20.0.4", + "@angular/core": "20.0.4", + "@angular/platform-browser": "20.0.4", "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@angular/localize": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-20.0.3.tgz", - "integrity": "sha512-1vcIvXQqrWGFyLcLlmANdfv66DrJ44ZHxGITZYfGoy062Ffa8nvGSyEMe41LLU729Ygy+caLYzr5G5GAOqs/yg==", - "license": "MIT", - "dependencies": { - "@babel/core": "7.27.4", - "@types/babel__core": "7.20.5", - "tinyglobby": "^0.2.12", - "yargs": "^18.0.0" - }, - "bin": { - "localize-extract": "tools/bundles/src/extract/cli.js", - "localize-migrate": "tools/bundles/src/migrate/cli.js", - "localize-translate": "tools/bundles/src/translate/cli.js" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - }, - "peerDependencies": { - "@angular/compiler": "20.0.3", - "@angular/compiler-cli": "20.0.3" - } - }, - "node_modules/@angular/localize/node_modules/@babel/core": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", - "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.4", - "@babel/parser": "^7.27.4", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.27.4", - "@babel/types": "^7.27.3", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular/localize/node_modules/cliui": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", - "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", - "license": "ISC", - "dependencies": { - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@angular/localize/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" - }, - "node_modules/@angular/localize/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@angular/localize/node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@angular/localize/node_modules/yargs": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", - "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", - "license": "MIT", - "dependencies": { - "cliui": "^9.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "string-width": "^7.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^22.0.0" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" - } - }, - "node_modules/@angular/localize/node_modules/yargs-parser": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", - "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", - "license": "ISC", - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" - } - }, "node_modules/@angular/material": { "version": "20.0.3", "resolved": "https://registry.npmjs.org/@angular/material/-/material-20.0.3.tgz", @@ -662,9 +518,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.0.3.tgz", - "integrity": "sha512-cba0bibw9dJ8b+a2a8mwkiq5/HPiakY9P5OiJEVefN+2V/K9CND/pW+KIbW0/P6KhSSDQ29xgcGRseVtkjYLmg==", + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.0.4.tgz", + "integrity": "sha512-hMJYvtZlNPh4Tt6JrnK+vmBmHWok04EkuJwyPcPhlle1u6/LihuCj4suELLqCanX9EzyNgvyKnws0i6JE/qh8Q==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -673,9 +529,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/animations": "20.0.3", - "@angular/common": "20.0.3", - "@angular/core": "20.0.3" + "@angular/animations": "20.0.4", + "@angular/common": "20.0.4", + "@angular/core": "20.0.4" }, "peerDependenciesMeta": { "@angular/animations": { @@ -683,28 +539,10 @@ } } }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.0.3.tgz", - "integrity": "sha512-EUC0q9/L7nBQOJkOi7aKz0cKXym7XIZtZJjZ+K7hCZaE92wb+Uk5YdBfBaq6hJ3aEp896GUs3FVFI6Rxklrm2A==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - }, - "peerDependencies": { - "@angular/common": "20.0.3", - "@angular/compiler": "20.0.3", - "@angular/core": "20.0.3", - "@angular/platform-browser": "20.0.3" - } - }, "node_modules/@angular/platform-server": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.0.3.tgz", - "integrity": "sha512-7v0BSHgbohgxAJ0pROOtHJzwvp7AHf9sZd3Lws+UzRp0UUzdtUj2qDH1Ag1lQbXx6yxSLbsVDdVQi7F1woJyVQ==", + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.0.4.tgz", + "integrity": "sha512-jCbBPy/KmWw/rW6400My/+2SumnatciWnyWJVy2tKSHU/WDHQdjgk8djMdZODr+2CDORQzdkdBKqf7TuFK6clA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0", @@ -714,17 +552,17 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.0.3", - "@angular/compiler": "20.0.3", - "@angular/core": "20.0.3", - "@angular/platform-browser": "20.0.3", + "@angular/common": "20.0.4", + "@angular/compiler": "20.0.4", + "@angular/core": "20.0.4", + "@angular/platform-browser": "20.0.4", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/router": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.0.3.tgz", - "integrity": "sha512-FY2kMZjLh7NUKjSaZ1K26azl67T4aVnOD8PE/w1Ih3eQmSIlHniNP1NmCGMUy6t1O/ZV6sCSKkA5AZFv18wzIQ==", + "version": "20.0.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.0.4.tgz", + "integrity": "sha512-t02ukwKh+YDZutR09ZYJVLaC+OPyDxu6ll7A2MFK0BNLPpD9oQc0lDwJZSrqfAhlXU0arWUjmwkNvFdh21/Z5Q==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -733,16 +571,16 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.0.3", - "@angular/core": "20.0.3", - "@angular/platform-browser": "20.0.3", + "@angular/common": "20.0.4", + "@angular/core": "20.0.4", + "@angular/platform-browser": "20.0.4", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/ssr": { - "version": "20.0.2", - "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-20.0.2.tgz", - "integrity": "sha512-BIjjQvSuzzLRwfSbeOeZGA5jj7xFKHeYBs5RuySpGgz5t60GJpyn5h1iAU6GRhMZ4flCwja8CvRkiFjAUa0yIA==", + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-20.0.3.tgz", + "integrity": "sha512-AuEO05mdcQU1HBZAJ64eNPEoi4vxgA0zmYjdVK+Z55uwhaAPiyU6Ti/irK7y4IpM5WZ0fTKFzxtgD+GuEqai2w==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -759,10 +597,48 @@ } } }, + "node_modules/@ant-design/colors": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.2.1.tgz", + "integrity": "sha512-lCHDcEzieu4GA3n8ELeZ5VQ8pKQAWcGGLRTQ50aQM2iqPpq2evTxER84jfdPvsPAtEcZ7m44NI45edFMo8oOYQ==", + "license": "MIT", + "dependencies": { + "@ant-design/fast-color": "^2.0.6" + } + }, + "node_modules/@ant-design/fast-color": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@ant-design/fast-color/-/fast-color-2.0.6.tgz", + "integrity": "sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.7" + }, + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@ant-design/icons-angular": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/icons-angular/-/icons-angular-19.0.0.tgz", + "integrity": "sha512-bBWFA1cTZwLAFTgpozkeNIHX1nXyZuiUaRzTcAfFEt85eW1X3ypMcBfS/XEVVVzkdTw5Td+E1vwzgfuUlKiYSA==", + "license": "MIT", + "dependencies": { + "@ant-design/colors": "^7.0.0", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": "^19.0.0", + "@angular/core": "^19.0.0", + "@angular/platform-browser": "^19.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", @@ -777,6 +653,7 @@ "version": "7.27.5", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -834,6 +711,7 @@ "version": "7.27.5", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.27.5", @@ -863,6 +741,7 @@ "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.27.2", @@ -879,6 +758,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -888,6 +768,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -901,6 +782,7 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", @@ -931,6 +813,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -940,6 +823,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -949,6 +833,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -958,6 +843,7 @@ "version": "7.27.6", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", @@ -971,6 +857,7 @@ "version": "7.27.5", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.3" @@ -982,10 +869,20 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/runtime": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", @@ -1000,6 +897,7 @@ "version": "7.27.4", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", @@ -1018,6 +916,7 @@ "version": "7.27.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -1784,6 +1683,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -1801,12 +1701,14 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -1824,6 +1726,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -1864,6 +1767,7 @@ "version": "0.3.8", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -1878,6 +1782,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1887,6 +1792,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1896,12 +1802,14 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2434,6 +2342,23 @@ "node": ">= 10" } }, + "node_modules/@ng-bootstrap/ng-bootstrap": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-19.0.0.tgz", + "integrity": "sha512-Ryd7L3VdT0zQ5+Y9uA5Kze+4FylUQ7FS04DCiFAjU3eCLxrGirhXiwpE2poMSciZi0nqXodKgKKdUSynZEYY+Q==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^20.0.0", + "@angular/core": "^20.0.0", + "@angular/forms": "^20.0.0", + "@angular/localize": "^20.0.0", + "@popperjs/core": "^2.11.8", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, "node_modules/@npmcli/agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", @@ -3046,12 +2971,23 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, "license": "MIT", "optional": true, "engines": { "node": ">=14" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@primeng/themes": { "version": "19.1.3", "resolved": "https://registry.npmjs.org/@primeng/themes/-/themes-19.1.3.tgz", @@ -3082,624 +3018,6 @@ "node": ">=12.11.0" } }, - "node_modules/@progress/kendo-angular-buttons": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-buttons/-/kendo-angular-buttons-19.1.1.tgz", - "integrity": "sha512-EwYZdsC+5DAFhE1XD2BX1PoTj756DAysrArgG9M1Xp4zEkPeLvcrcZbK2dlv8ypoZxAt7QvRmbrLi0jCE3JkWQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "@progress/kendo-common": "^1.0.1", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-angular-icons": "19.1.1", - "@progress/kendo-angular-l10n": "19.1.1", - "@progress/kendo-angular-popup": "19.1.1", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-common": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-common/-/kendo-angular-common-19.1.1.tgz", - "integrity": "sha512-IJUEzxw7wCugZU2LgVvrnzcmike7SbgbiZKIIOJfrn4mkFrNaiBPuYdWvPrKms87DDec/HiAiAPcU0Q4H9Q1lA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "@progress/kendo-common": "^1.0.1", - "@progress/kendo-draggable": "^3.0.2", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-dialog": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-dialog/-/kendo-angular-dialog-19.1.1.tgz", - "integrity": "sha512-q374Tx9gzCUBiA+lPiqU2qXVuJCAUO7fW97QUCMGnA9/UKGnySdApSTbPQnZwk0ERkxcaM/IBecXbOc6yfeRvA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "@progress/kendo-popup-common": "^1.7.0", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-buttons": "19.1.1", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-angular-icons": "19.1.1", - "@progress/kendo-angular-l10n": "19.1.1", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-dropdowns": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-dropdowns/-/kendo-angular-dropdowns-19.1.1.tgz", - "integrity": "sha512-6GEdPAqtKQm2JnAkkoEH2cwdS7kQ0xorSV32CS2lFKsjiOsUR2lrPx2KaaUFlhs37dG29GMxl2dguyCvSZ024Q==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "@progress/kendo-common": "^1.0.1", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/forms": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-angular-icons": "19.1.1", - "@progress/kendo-angular-l10n": "19.1.1", - "@progress/kendo-angular-navigation": "19.1.1", - "@progress/kendo-angular-popup": "19.1.1", - "@progress/kendo-angular-treeview": "19.1.1", - "@progress/kendo-angular-utils": "19.1.1", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-editor": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-editor/-/kendo-angular-editor-19.1.1.tgz", - "integrity": "sha512-gB0ZUAonSw9YqrxCuNW178I8/rgwPuxfLx1/t8YXhGSS4ubScaA01OKSiReDRirgm3nXsNQAoIF5OJSXjfnK7w==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "@progress/kendo-editor-common": "1.12.3", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/forms": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-buttons": "19.1.1", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-angular-dialog": "19.1.1", - "@progress/kendo-angular-dropdowns": "19.1.1", - "@progress/kendo-angular-icons": "19.1.1", - "@progress/kendo-angular-inputs": "19.1.1", - "@progress/kendo-angular-intl": "19.1.1", - "@progress/kendo-angular-l10n": "19.1.1", - "@progress/kendo-angular-label": "19.1.1", - "@progress/kendo-angular-layout": "19.1.1", - "@progress/kendo-angular-popup": "19.1.1", - "@progress/kendo-angular-toolbar": "19.1.1", - "@progress/kendo-drawing": "^1.21.0", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-icons": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-icons/-/kendo-angular-icons-19.1.1.tgz", - "integrity": "sha512-Efu7OQRVtLTERSOJ+sKFrf+WQWnqTW5QK3bO5s8kLLH6x2P5sLUgb/giayEXoFMC+KcGhSHB/Ff1LueCchIH1A==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-licensing": "^1.5.0", - "@progress/kendo-svg-icons": "^4.0.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-indicators": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-indicators/-/kendo-angular-indicators-19.1.1.tgz", - "integrity": "sha512-LMvi90I3LcGYbqFQ4mTdkCkzMe9SezLp1GrnMKZjEoqyk4HDq5HanvxJLHJu06vP7z8R/J7+rQaZmuzzF+zUAg==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-angular-intl": "19.1.1", - "@progress/kendo-angular-l10n": "19.1.1", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-inputs": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-inputs/-/kendo-angular-inputs-19.1.1.tgz", - "integrity": "sha512-8Rzv9lM/+ampzUAtC0E4+TCGGDab2N+vVqzj2JB3J0uqQNZiCX7/qwMxRHfUi6LCpT9z+UTFBi3QWeu5DqcLHQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "@progress/kendo-common": "^1.0.1", - "@progress/kendo-draggable": "^3.0.0", - "@progress/kendo-inputs-common": "^3.1.0", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/forms": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-buttons": "19.1.1", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-angular-dialog": "19.1.1", - "@progress/kendo-angular-icons": "19.1.1", - "@progress/kendo-angular-intl": "19.1.1", - "@progress/kendo-angular-l10n": "19.1.1", - "@progress/kendo-angular-navigation": "19.1.1", - "@progress/kendo-angular-popup": "19.1.1", - "@progress/kendo-angular-utils": "19.1.1", - "@progress/kendo-drawing": "^1.21.0", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-intl": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-intl/-/kendo-angular-intl-19.1.1.tgz", - "integrity": "sha512-QXzRagNDvAvi+DVolMw2693cfSmewj/J15dPZXCLkd8igceMMXaDmVJP0Xqq0k55wUfcov81n8uxy1OLCoZsGQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "@progress/kendo-intl": "^3.1.0", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-l10n": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-l10n/-/kendo-angular-l10n-19.1.1.tgz", - "integrity": "sha512-iPM7CcZ0ExGuwzAF41AJ0QV1wqRmeRemZcfywlQ+hNdXrB0C3ITv3OSEJkzDDwnVDDPH2O5hf+ZJ2MFZHbBDDA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-label": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-label/-/kendo-angular-label-19.1.1.tgz", - "integrity": "sha512-a36RaS65MAbNy7eBLu/8SiOPi+ydbcHx1v+YUNOaav8yCx+5tNRC30IdiHF5F22xdq14hxQ7ObiHQ/Lnrskfkg==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/forms": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-angular-l10n": "19.1.1", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-layout": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-layout/-/kendo-angular-layout-19.1.1.tgz", - "integrity": "sha512-O66WCgl8yUYf80p+eiD4llEG8TwlP1z/zclei+cz3zVX+oLtrXb6hxTxwVffm/EyaV1fkGVP2viMZZcC1Wht4g==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "@progress/kendo-draggable": "^3.0.2", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-buttons": "19.1.1", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-angular-icons": "19.1.1", - "@progress/kendo-angular-intl": "19.1.1", - "@progress/kendo-angular-l10n": "19.1.1", - "@progress/kendo-angular-progressbar": "19.1.1", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-navigation": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-navigation/-/kendo-angular-navigation-19.1.1.tgz", - "integrity": "sha512-MSMkrLe7IhGaQQzRz13NTSTT4tKDOv343rKuW+WW9URxEHCqM0bWMQXPCdvnurTvH3um16CddhCMuOhwxATU3A==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-buttons": "19.1.1", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-angular-icons": "19.1.1", - "@progress/kendo-angular-l10n": "19.1.1", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-popup": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-popup/-/kendo-angular-popup-19.1.1.tgz", - "integrity": "sha512-tZ04/XPjLxZYL+2rpoD6qAx0je7dQFmXTd2evaouGZPRyjawi7zfArICnc5n+SvpWrUGi8xpM3jPpEvLDzAGhA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "@progress/kendo-popup-common": "^1.7.0", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-progressbar": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-progressbar/-/kendo-angular-progressbar-19.1.1.tgz", - "integrity": "sha512-QdfDMkEwLfMd2ad7vH8g+s2f2Zx3LpE++6f69mTn1AU2jiiIa9pp/d+JqW/RqhLPl8WdOUf52xeEdnV3VMWizg==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-angular-l10n": "19.1.1", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-schematics": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-schematics/-/kendo-angular-schematics-19.1.1.tgz", - "integrity": "sha512-teRFzHlrB8RsRNQm3FMtP88wp9aeEIfjbpAWZ7w/dMnbllTyZ4Bd9O2tk7one285LrT9ghbB035A2UMP+4oKhg==", - "license": "SEE LICENSE in LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "@types/semver": "^7.5.0", - "semver": "^7.5.3" - }, - "peerDependencies": { - "@angular-devkit/core": "16 - 20", - "@angular-devkit/schematics": "16 - 20", - "@angular/core": "16 - 20", - "@schematics/angular": "16 - 20", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-toolbar": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-toolbar/-/kendo-angular-toolbar-19.1.1.tgz", - "integrity": "sha512-8Y813aHj4GZ53jlvdNJRhVpsEfIRF1rXGzYp0AfvaSbvSUrsmgYQ6Wpum+pvJNvWGE6Q/drSpn02zO/AhS9ORQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-buttons": "19.1.1", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-angular-icons": "19.1.1", - "@progress/kendo-angular-indicators": "19.1.1", - "@progress/kendo-angular-l10n": "19.1.1", - "@progress/kendo-angular-popup": "19.1.1", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-treeview": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-treeview/-/kendo-angular-treeview-19.1.1.tgz", - "integrity": "sha512-fxJnUzKMQc1RBFBoAzFbJphS2MY7i41MtysProznvVvSeBxHEpuQzlATW8noA0j7CKmWFvW9P+l897SiG0H4qg==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "@progress/kendo-common": "^1.0.1", - "@progress/kendo-draggable": "^3.0.2", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-angular-icons": "19.1.1", - "@progress/kendo-angular-inputs": "19.1.1", - "@progress/kendo-angular-l10n": "19.1.1", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-angular-utils": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-angular-utils/-/kendo-angular-utils-19.1.1.tgz", - "integrity": "sha512-0eijm9CnwILx0jeMMJ0reQ72gKdd9kPAymSCAJ8RGuiNXfseJM2gy8zgXQCDkvGHiTZjtdMxBkWBzTYfc0rMEA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-angular-schematics": "19.1.1", - "@progress/kendo-draggable-common": "^0.2.3", - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@angular/animations": "16 - 20", - "@angular/common": "16 - 20", - "@angular/core": "16 - 20", - "@angular/platform-browser": "16 - 20", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-licensing": "^1.5.0", - "rxjs": "^6.5.3 || ^7.0.0" - } - }, - "node_modules/@progress/kendo-common": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-common/-/kendo-common-1.0.2.tgz", - "integrity": "sha512-PHxnquetSmtmXiF4dmlQiypzXaFLUEPK3VAOHxmnRDrLxaPrcZfaW9FOOiyur8hv4QmXlohISMwMElZS8Xi1Ag==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "tslib": "^1.7.0" - } - }, - "node_modules/@progress/kendo-common/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@progress/kendo-draggable": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-draggable/-/kendo-draggable-3.1.0.tgz", - "integrity": "sha512-S5AHF9uiy44um+06ABJcjZn/wpO3ZwLahd2BhiTd7NeBVPt5lkj2bjdmkd88GEIIBKmT7FOK308WUt5/MmKVTQ==", - "license": "Apache-2.0" - }, - "node_modules/@progress/kendo-draggable-common": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@progress/kendo-draggable-common/-/kendo-draggable-common-0.2.3.tgz", - "integrity": "sha512-e1FraFsT7zwevswzZlQYL//K+fzmRUvkr/4emp51dzkARLDtGd95BtPNSoXYRG5xYHeueKBS75hzVwQI6Dm3Dg==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "tslib": "^1.7.0" - } - }, - "node_modules/@progress/kendo-draggable-common/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@progress/kendo-drawing": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-drawing/-/kendo-drawing-1.21.2.tgz", - "integrity": "sha512-1U/0EpVRk71nOMHQVYjdNbUwuZAaTT46xY6PPrtMATPPywIenJuK+NlRQFIdcbyY7/WplHJxLdIrmOVpKJvkcw==", - "license": "See license in LICENSE.md", - "dependencies": { - "@progress/kendo-common": "^1.0.1", - "@progress/pako-esm": "^1.0.1" - } - }, - "node_modules/@progress/kendo-editor-common": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/@progress/kendo-editor-common/-/kendo-editor-common-1.12.3.tgz", - "integrity": "sha512-vuB0ZE60uBqBTPOEP4YHkr1yJIVB4/HEq5YzrpH1CRuhn1Oexq1r0hItw+VgAEw3cfwdXQnCi20ZtnTvH7GepQ==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "@progress/kendo-common": "^1.0.2", - "prosemirror-commands": "1.7.1", - "prosemirror-dropcursor": "1.8.2", - "prosemirror-gapcursor": "1.3.2", - "prosemirror-history": "1.4.1", - "prosemirror-inputrules": "1.5.0", - "prosemirror-keymap": "1.2.3", - "prosemirror-model": "1.25.1", - "prosemirror-schema-list": "1.5.1", - "prosemirror-state": "1.4.3", - "prosemirror-tables": "1.7.1", - "prosemirror-transform": "1.10.4", - "prosemirror-view": "1.39.3", - "tslib": "^2.8.1" - } - }, - "node_modules/@progress/kendo-inputs-common": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@progress/kendo-inputs-common/-/kendo-inputs-common-3.1.1.tgz", - "integrity": "sha512-OqID8+2DuAnUET0W1j357qqTPvws6hnByt2h5+uVS7uK9Wmt/NHA0gVhdYmh+Jyv6Pw+S2epSk47mDsfyreKYA==", - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "tslib": "^2.3.1" - }, - "peerDependencies": { - "@progress/kendo-drawing": "^1.17.0" - } - }, - "node_modules/@progress/kendo-intl": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-intl/-/kendo-intl-3.1.2.tgz", - "integrity": "sha512-rOtMppQSrScwryMfeQSOdsnRi9Oj1l08HFoEC2ticZ0T2N0/JN9CHt+fuToRx5onXK7QkcbbuNM0D09o8TeeMw==", - "license": "Apache-2.0" - }, - "node_modules/@progress/kendo-licensing": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-licensing/-/kendo-licensing-1.6.0.tgz", - "integrity": "sha512-vdTDCt9Mn3tixvHPrfsNseVO8dxNyWPlL3OJBXEo8JoCbRdVTjq16pcFtfbPH9Iev/aY0uYVTdGABWXSElzaUw==", - "hasInstallScript": true, - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "glob": "^10.4.5", - "jsonwebtoken": "^9.0.2" - }, - "bin": { - "kendo-ui-license": "bin/kendo-ui-license.js" - } - }, - "node_modules/@progress/kendo-licensing/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@progress/kendo-licensing/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@progress/kendo-licensing/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@progress/kendo-popup-common": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-popup-common/-/kendo-popup-common-1.9.2.tgz", - "integrity": "sha512-Gs50UafJcERiGuSP/47Yg7ftPX3HQXiK5M9zHB8sHSoc1/AEYd0/Sj5wh8UrVVBAM9b0pUTwmEuzQ/D5yDDd2Q==", - "license": "Apache-2.0" - }, - "node_modules/@progress/kendo-svg-icons": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-svg-icons/-/kendo-svg-icons-4.4.0.tgz", - "integrity": "sha512-YDq2KH27gQbxNwyUR6WFDEdBteSiY5G0PgV5xiCnjKwCU0GkbdKvzf55basFLiQEfEmIeoIyHsBnFjcsS4kj/w==", - "license": "Apache-2.0" - }, - "node_modules/@progress/kendo-theme-core": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-theme-core/-/kendo-theme-core-11.0.2.tgz", - "integrity": "sha512-z89TLL4HUFNo7AkcTNkHJtvmjT7h+dhSAhMkUeiiE9sTrKZAwglCgnV5Fgs9PX2Y1m5lOLquY2ZT2U7pwVUndg==", - "license": "Apache-2.0" - }, - "node_modules/@progress/kendo-theme-default": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-theme-default/-/kendo-theme-default-11.0.2.tgz", - "integrity": "sha512-CZOYx/M1mzZz6QGhxvN5ZKNMQRrCMrsSSu1Qv1CqzthL6XTORZ/jO4CNjmfFwaVjuRecAHjf6crPJriXkmgJOg==", - "license": "Apache-2.0", - "dependencies": { - "@progress/kendo-svg-icons": "^4.1.0", - "@progress/kendo-theme-core": "11.0.2", - "@progress/kendo-theme-utils": "11.0.2" - } - }, - "node_modules/@progress/kendo-theme-utils": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-theme-utils/-/kendo-theme-utils-11.0.2.tgz", - "integrity": "sha512-VYf2sYSGwQtEllpP2Otz3nFn6D/9W8fXXYfFyMSLwBW/oNhUq5okljON8008ecgTCU7sSaicof8/aTrI6hIsLg==", - "license": "Apache-2.0", - "dependencies": { - "@progress/kendo-theme-core": "11.0.2" - } - }, - "node_modules/@progress/pako-esm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@progress/pako-esm/-/pako-esm-1.0.1.tgz", - "integrity": "sha512-O4A3b1EuE9Xe1pC3Xz9Tcn1M/CYrL71f4y/5TXeytOVTkmkzBgYW97fYP2f+54H0e0erWRaqV/kUUB/a8Uxfbw==", - "license": "SEE LICENSE IN LICENSE.md" - }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.40.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz", @@ -3981,14 +3299,14 @@ ] }, "node_modules/@schematics/angular": { - "version": "20.0.2", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.0.2.tgz", - "integrity": "sha512-TyF+/hV+8flAa/Vu8xOQF241Syg9rdbZD1dARdm6edbLo8nwxmHdRsIulRektb7oD5CpTnxpvrcNJjX77nhv6A==", + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.0.3.tgz", + "integrity": "sha512-oWj5UU1gR12KDxQwOUpxweaaF8PPF7t5ymTa/px/nl4YYWd9s5e1skoDNcGHHl0MPHklJzNLxP7O89BORie5vQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.0.2", - "@angular-devkit/schematics": "20.0.2", + "@angular-devkit/core": "20.0.3", + "@angular-devkit/schematics": "20.0.3", "jsonc-parser": "3.3.1" }, "engines": { @@ -4134,47 +3452,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, "node_modules/@types/body-parser": { "version": "1.19.6", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", @@ -4260,9 +3537,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.19.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.0.tgz", - "integrity": "sha512-hfrc+1tud1xcdVTABC2JiomZJEklMcXYNTVtZLAeqTVWD+qL5jkHKT+1lOtqDdGxt+mB53DTtiz673vfjU8D1Q==", + "version": "20.19.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.1.tgz", + "integrity": "sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA==", "dev": true, "license": "MIT", "dependencies": { @@ -4283,12 +3560,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/semver": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", - "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", - "license": "MIT" - }, "node_modules/@types/send": { "version": "0.17.5", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", @@ -4420,6 +3691,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -4432,6 +3704,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -4471,6 +3744,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, "license": "MIT" }, "node_modules/base64id": { @@ -4543,6 +3817,25 @@ "dev": true, "license": "ISC" }, + "node_modules/bootstrap": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.6.tgz", + "integrity": "sha512-jX0GAcRzvdwISuvArXn3m7KZscWWFAf1MKBcnzaN02qWMb3jpMoUX4/qgeiGzqyIb4ojulRzs89UCUmGcFSzTA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -4571,6 +3864,7 @@ "version": "4.25.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -4599,12 +3893,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -4783,9 +4071,10 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001723", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz", - "integrity": "sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==", + "version": "1.0.30001724", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001724.tgz", + "integrity": "sha512-WqJo7p0TbHDOythNTqYujmaJTvtYRZrjpP8TCvH6Vb9CYJerJNKamKzIWOM4BkQatWj9H2lYulpdAQNBe7QhNA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -5012,6 +4301,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -5024,6 +4314,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, "node_modules/colorette": { @@ -5189,6 +4480,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -5203,6 +4495,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -5406,17 +4699,9 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, "license": "MIT" }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -5424,15 +4709,17 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.167", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.167.tgz", - "integrity": "sha512-LxcRvnYO5ez2bMOFpbuuVuAI5QNeY1ncVytE/KXaL6ZNfzX1yPlAO0nSOyIHx2fVAuUprMqPs/TdVhUFZy7SIQ==", + "version": "1.5.171", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.171.tgz", + "integrity": "sha512-scWpzXEJEMrGJa4Y6m/tVotb0WuvNmasv3wWVzUAeCgKU0ToFOhUW6Z+xWnRQANMYGxN4ngJXIThgBJOqzVPCQ==", + "dev": true, "license": "ISC" }, "node_modules/emoji-regex": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, "license": "MIT" }, "node_modules/encodeurl": { @@ -5685,6 +4972,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -5824,6 +5112,7 @@ "version": "6.4.6", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, "license": "MIT", "peerDependencies": { "picomatch": "^3 || ^4" @@ -5896,6 +5185,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -5989,6 +5279,7 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -5998,6 +5289,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -6007,6 +5299,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -6098,6 +5391,7 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -6569,6 +5863,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, "license": "ISC" }, "node_modules/istanbul-lib-coverage": { @@ -6656,6 +5951,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -6678,6 +5974,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/jsbn": { @@ -6691,6 +5988,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -6720,6 +6018,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -6755,49 +6054,6 @@ ], "license": "MIT" }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "license": "MIT", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jwa": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", - "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "license": "MIT", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, "node_modules/karma": { "version": "6.4.4", "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", @@ -7340,48 +6596,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "license": "MIT" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "license": "MIT" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "license": "MIT" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "license": "MIT" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "license": "MIT" - }, "node_modules/log-symbols": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", @@ -7520,6 +6734,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" @@ -7707,6 +6922,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -7956,6 +7172,21 @@ "node": ">= 0.6" } }, + "node_modules/ngx-scrollbar": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/ngx-scrollbar/-/ngx-scrollbar-18.0.0.tgz", + "integrity": "sha512-+ykmY491x+nzXvnecJvZHvDz0YWuX1r7SYMxNG4RVHXm5Z68P/8kd/3ryLD6DXdNWmJawd4NGvqq2ZkUKb/g3A==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/cdk": ">=19.0.0", + "@angular/common": ">=19.0.0", + "@angular/core": ">=19.0.0", + "rxjs": ">=7.0.0" + } + }, "node_modules/node-addon-api": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", @@ -8089,6 +7320,7 @@ "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, "license": "MIT" }, "node_modules/nopt": { @@ -8322,12 +7554,6 @@ "license": "MIT", "optional": true }, - "node_modules/orderedmap": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", - "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==", - "license": "MIT" - }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -8355,6 +7581,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/pacote": { @@ -8477,6 +7704,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8493,6 +7721,7 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -8509,6 +7738,7 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, "license": "ISC" }, "node_modules/path-to-regexp": { @@ -8524,12 +7754,14 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -8552,9 +7784,9 @@ } }, "node_modules/postcss": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.5.tgz", - "integrity": "sha512-d/jtm+rdNT8tpXuHY5MMtcbJFBkhXE6593XVR9UoGCH8jSFGci7jGvMGH5RYd5PBJW+00NZQt6gf7CbagJCrhg==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { @@ -8632,136 +7864,6 @@ "node": ">=10" } }, - "node_modules/prosemirror-commands": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz", - "integrity": "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==", - "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.10.2" - } - }, - "node_modules/prosemirror-dropcursor": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz", - "integrity": "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==", - "license": "MIT", - "dependencies": { - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0", - "prosemirror-view": "^1.1.0" - } - }, - "node_modules/prosemirror-gapcursor": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz", - "integrity": "sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==", - "license": "MIT", - "dependencies": { - "prosemirror-keymap": "^1.0.0", - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-view": "^1.0.0" - } - }, - "node_modules/prosemirror-history": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.1.tgz", - "integrity": "sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==", - "license": "MIT", - "dependencies": { - "prosemirror-state": "^1.2.2", - "prosemirror-transform": "^1.0.0", - "prosemirror-view": "^1.31.0", - "rope-sequence": "^1.3.0" - } - }, - "node_modules/prosemirror-inputrules": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.5.0.tgz", - "integrity": "sha512-K0xJRCmt+uSw7xesnHmcn72yBGTbY45vm8gXI4LZXbx2Z0jwh5aF9xrGQgrVPu0WbyFVFF3E/o9VhJYz6SQWnA==", - "license": "MIT", - "dependencies": { - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.0.0" - } - }, - "node_modules/prosemirror-keymap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz", - "integrity": "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==", - "license": "MIT", - "dependencies": { - "prosemirror-state": "^1.0.0", - "w3c-keyname": "^2.2.0" - } - }, - "node_modules/prosemirror-model": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.1.tgz", - "integrity": "sha512-AUvbm7qqmpZa5d9fPKMvH1Q5bqYQvAZWOGRvxsB6iFLyycvC9MwNemNVjHVrWgjaoxAfY8XVg7DbvQ/qxvI9Eg==", - "license": "MIT", - "dependencies": { - "orderedmap": "^2.0.0" - } - }, - "node_modules/prosemirror-schema-list": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz", - "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==", - "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.7.3" - } - }, - "node_modules/prosemirror-state": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz", - "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==", - "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-transform": "^1.0.0", - "prosemirror-view": "^1.27.0" - } - }, - "node_modules/prosemirror-tables": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.7.1.tgz", - "integrity": "sha512-eRQ97Bf+i9Eby99QbyAiyov43iOKgWa7QCGly+lrDt7efZ1v8NWolhXiB43hSDGIXT1UXgbs4KJN3a06FGpr1Q==", - "license": "MIT", - "dependencies": { - "prosemirror-keymap": "^1.2.2", - "prosemirror-model": "^1.25.0", - "prosemirror-state": "^1.4.3", - "prosemirror-transform": "^1.10.3", - "prosemirror-view": "^1.39.1" - } - }, - "node_modules/prosemirror-transform": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.4.tgz", - "integrity": "sha512-pwDy22nAnGqNR1feOQKHxoFkkUtepoFAd3r2hbEDsnf4wp57kKA36hXsB3njA9FtONBEwSDnDeCiJe+ItD+ykw==", - "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.21.0" - } - }, - "node_modules/prosemirror-view": { - "version": "1.39.3", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.39.3.tgz", - "integrity": "sha512-bY/7kg0LzRE7ytR0zRdSMWX3sknEjw68l836ffLPMh0OG3OYnNuBDUSF3v0vjvnzgYjgY9ZH/RypbARURlcMFA==", - "license": "MIT", - "dependencies": { - "prosemirror-model": "^1.20.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0" - } - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -8991,12 +8093,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/rope-sequence": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", - "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", - "license": "MIT" - }, "node_modules/router": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", @@ -9091,6 +8187,7 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -9146,6 +8243,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -9158,6 +8256,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9239,6 +8338,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -9606,6 +8706,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", @@ -9624,6 +8725,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -9638,6 +8740,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9647,12 +8750,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9662,6 +8767,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -9674,6 +8780,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -9690,6 +8797,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -9702,6 +8810,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9838,6 +8947,7 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.4.4", @@ -10030,6 +9140,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, "funding": [ { "type": "opencollective", @@ -10181,12 +9292,6 @@ "node": ">=0.10.0" } }, - "node_modules/w3c-keyname": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", - "license": "MIT" - }, "node_modules/watchpack": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", @@ -10242,6 +9347,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -10259,6 +9365,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10268,6 +9375,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -10283,12 +9391,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -10298,6 +9408,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -10312,6 +9423,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -10432,6 +9544,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -10441,6 +9554,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, "license": "ISC" }, "node_modules/yargs": { diff --git a/jambotron-ui/package.json b/jambotron-ui/package.json index 5bda2a2..27242fb 100644 --- a/jambotron-ui/package.json +++ b/jambotron-ui/package.json @@ -11,43 +11,24 @@ }, "private": true, "dependencies": { - "@angular/animations": "^20.0.3", + "@angular/animations": "^20.0.4", "@angular/cdk": "^20.0.3", "@angular/common": "^20.0.0", "@angular/compiler": "^20.0.0", "@angular/core": "^20.0.0", "@angular/forms": "^20.0.0", - "@angular/localize": "^20.0.0", "@angular/material": "^20.0.3", "@angular/platform-browser": "^20.0.0", - "@angular/platform-browser-dynamic": "^20.0.3", "@angular/platform-server": "^20.0.0", "@angular/router": "^20.0.0", "@angular/ssr": "^20.0.2", + "@ant-design/icons-angular": "19.0.0", + "@ng-bootstrap/ng-bootstrap": "19.0.0", + "@popperjs/core": "2.11.8", "@primeng/themes": "^19.1.3", - "@progress/kendo-angular-buttons": "19.1.1", - "@progress/kendo-angular-common": "19.1.1", - "@progress/kendo-angular-dialog": "19.1.1", - "@progress/kendo-angular-dropdowns": "19.1.1", - "@progress/kendo-angular-editor": "^19.1.1", - "@progress/kendo-angular-icons": "19.1.1", - "@progress/kendo-angular-indicators": "^19.1.1", - "@progress/kendo-angular-inputs": "19.1.1", - "@progress/kendo-angular-intl": "19.1.1", - "@progress/kendo-angular-l10n": "19.1.1", - "@progress/kendo-angular-label": "19.1.1", - "@progress/kendo-angular-layout": "19.1.1", - "@progress/kendo-angular-navigation": "19.1.1", - "@progress/kendo-angular-popup": "19.1.1", - "@progress/kendo-angular-progressbar": "19.1.1", - "@progress/kendo-angular-toolbar": "19.1.1", - "@progress/kendo-angular-treeview": "19.1.1", - "@progress/kendo-angular-utils": "^19.1.1", - "@progress/kendo-drawing": "^1.21.0", - "@progress/kendo-licensing": "^1.5.0", - "@progress/kendo-svg-icons": "^4.0.0", - "@progress/kendo-theme-default": "11.0.2", + "bootstrap": "5.3.6", "express": "^5.1.0", + "ngx-scrollbar": "18.0.0", "primeng": "^19.1.3", "rxjs": "~7.8.0", "tslib": "^2.3.0", diff --git a/jambotron-ui/src/app/admin-module/admin-welcome.component/admin-welcome.component.html b/jambotron-ui/src/app/admin-module/admin-welcome.component/admin-welcome.component.html new file mode 100644 index 0000000..4c5a4ff --- /dev/null +++ b/jambotron-ui/src/app/admin-module/admin-welcome.component/admin-welcome.component.html @@ -0,0 +1,38 @@ +

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+

admin-welcome.component works!

+ + + + + diff --git a/jambotron-ui/src/app/admin-module/admin-welcome.component/admin-welcome.component.scss b/jambotron-ui/src/app/admin-module/admin-welcome.component/admin-welcome.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/jambotron-ui/src/app/admin-module/admin-welcome.component/admin-welcome.component.spec.ts b/jambotron-ui/src/app/admin-module/admin-welcome.component/admin-welcome.component.spec.ts new file mode 100644 index 0000000..664e04c --- /dev/null +++ b/jambotron-ui/src/app/admin-module/admin-welcome.component/admin-welcome.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AdminWelcomeComponent } from './admin-welcome.component'; + +describe('AdminWelcomeComponent', () => { + let component: AdminWelcomeComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AdminWelcomeComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(AdminWelcomeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/jambotron-ui/src/app/admin-module/admin-welcome.component/admin-welcome.component.ts b/jambotron-ui/src/app/admin-module/admin-welcome.component/admin-welcome.component.ts new file mode 100644 index 0000000..ba7feb2 --- /dev/null +++ b/jambotron-ui/src/app/admin-module/admin-welcome.component/admin-welcome.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-admin-welcome.component', + imports: [], + templateUrl: './admin-welcome.component.html', + styleUrl: './admin-welcome.component.scss' +}) +export class AdminWelcomeComponent { + +} diff --git a/jambotron-ui/src/app/admin-module/admin.component/admin.component.html b/jambotron-ui/src/app/admin-module/admin.component/admin.component.html new file mode 100644 index 0000000..3876019 --- /dev/null +++ b/jambotron-ui/src/app/admin-module/admin.component/admin.component.html @@ -0,0 +1,50 @@ + + + + +
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+ + + + + + + + + + diff --git a/jambotron-ui/src/app/admin-module/admin.component/admin.component.scss b/jambotron-ui/src/app/admin-module/admin.component/admin.component.scss new file mode 100644 index 0000000..3cde704 --- /dev/null +++ b/jambotron-ui/src/app/admin-module/admin.component/admin.component.scss @@ -0,0 +1,22 @@ +.example-container { + width: 500px; + height: 300px; + border: 1px solid rgba(0, 0, 0, 0.5); +} + +.example-sidenav-content { + display: flex; + height: 100%; + align-items: center; + justify-content: center; +} + +.example-sidenav { + padding: 20px; +} + +.pc-sidebar{ + top: 120px; +} + + diff --git a/jambotron-ui/src/app/admin-module/admin.component/admin.component.spec.ts b/jambotron-ui/src/app/admin-module/admin.component/admin.component.spec.ts new file mode 100644 index 0000000..617b55b --- /dev/null +++ b/jambotron-ui/src/app/admin-module/admin.component/admin.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AdminComponent } from './admin.component'; + +describe('AdminComponent', () => { + let component: AdminComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AdminComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(AdminComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/jambotron-ui/src/app/admin-module/admin.component/admin.component.ts b/jambotron-ui/src/app/admin-module/admin.component/admin.component.ts new file mode 100644 index 0000000..c7496dc --- /dev/null +++ b/jambotron-ui/src/app/admin-module/admin.component/admin.component.ts @@ -0,0 +1,112 @@ +import {Component, CUSTOM_ELEMENTS_SCHEMA, inject, OnInit} from '@angular/core'; +import {BreadcrumbComponent} from "../../components/breadcrumb/breadcrumb.component"; +import {NavBarComponent} from "../../layouts/admin-layout/nav-bar/nav-bar.component"; +import {NavigationComponent} from "../../layouts/admin-layout/navigation/navigation.component"; +import {Router, RouterLink, RouterOutlet} from "@angular/router"; +import {DOCUMENT, NgClass, NgStyle} from '@angular/common'; +import {MatDrawerContainer, MatSidenavModule} from '@angular/material/sidenav'; +import {MatButton} from '@angular/material/button'; +import { ScrollPanelModule } from 'primeng/scrollpanel'; +import {MenuItem} from 'primeng/api'; +import {PanelMenu} from 'primeng/panelmenu'; +@Component({ + selector: 'app-admin.component', + imports: [ + BreadcrumbComponent, + NavBarComponent, + NavigationComponent, + RouterOutlet, + NgClass, + MatDrawerContainer, + MatSidenavModule, + ScrollPanelModule, + MatButton, + RouterLink, + PanelMenu, + NgStyle, + + ], + schemas:[CUSTOM_ELEMENTS_SCHEMA], + templateUrl: './admin.component.html', + styleUrl: './admin.component.scss' +}) +export class AdminComponent implements OnInit { + private document = inject(DOCUMENT); + height = 0; + + items: MenuItem[] | undefined; + + + constructor(private router: Router) { + this.height = 0 + + + } + + // public props + navCollapsed: boolean = false; + navCollapsedMob: boolean = false; + + // public method + navMobClick() { + if (this.navCollapsedMob && !document.querySelector('app-navigation.pc-sidebar')?.classList.contains('mob-open')) { + this.navCollapsedMob = !this.navCollapsedMob; + setTimeout(() => { + this.navCollapsedMob = !this.navCollapsedMob; + }, 100); + } else { + this.navCollapsedMob = !this.navCollapsedMob; + } + if (document.querySelector('app-navigation.pc-sidebar')?.classList.contains('navbar-collapsed')) { + document.querySelector('app-navigation.pc-sidebar')?.classList.remove('navbar-collapsed'); + } + } + + handleKeyDown(event: KeyboardEvent): void { + if (event.key === 'Escape') { + this.closeMenu(); + } + } + + closeMenu() { + if (document.querySelector('app-navigation.pc-sidebar')?.classList.contains('mob-open')) { + document.querySelector('app-navigation.pc-sidebar')?.classList.remove('mob-open'); + } + } + + ngOnInit() { + + if(this.document.defaultView !== null || this.document.defaultView !== undefined) { + // @ts-ignore + this.height = this.document.defaultView.innerHeight; + } + else + this.height = 0; + + this.items = [ + { + label: 'Admin', + icon: 'pi pi-palette', + command: () => { + this.router.navigate(['/main/admin/welcome']); + }, + items: [ + { + label: 'Settings', + icon: 'pi pi-eraser', + // route: '/main/admin/settings' + command: () => { + this.router.navigate(['/main/admin/settings']); + } + }, + { + label: 'System', + icon: 'pi pi-heart', + route: '/main/admin/system' + } + ] + } + ]; + } + +} diff --git a/jambotron-ui/src/app/admin-module/admin.module.ts b/jambotron-ui/src/app/admin-module/admin.module.ts new file mode 100644 index 0000000..105676b --- /dev/null +++ b/jambotron-ui/src/app/admin-module/admin.module.ts @@ -0,0 +1,16 @@ +import {CUSTOM_ELEMENTS_SCHEMA, NgModule} from '@angular/core'; +import {mainRouting} from '../main-module/main.routing'; +import {MainComponent} from '../main-module/main.component/main.component'; +import {RouterModule} from '@angular/router'; +import {AdminComponent} from './admin.component/admin.component'; +import {adminRouting} from './admin.routing'; +import { ScrollPanelModule } from 'primeng/scrollpanel'; +@NgModule({ + declarations: [ + + ], + imports: [adminRouting, AdminComponent,ScrollPanelModule], + exports: [RouterModule], + schemas:[CUSTOM_ELEMENTS_SCHEMA] +}) +export class AdminModule {} diff --git a/jambotron-ui/src/app/admin-module/admin.routing.ts b/jambotron-ui/src/app/admin-module/admin.routing.ts new file mode 100644 index 0000000..246ca73 --- /dev/null +++ b/jambotron-ui/src/app/admin-module/admin.routing.ts @@ -0,0 +1,27 @@ +import {RouterModule, Routes} from '@angular/router'; +import {AdminComponent} from './admin.component/admin.component'; + +const ADMIN_ROUTES: Routes = [ + { + path: '', + component: AdminComponent, + + children: [ + { + path: 'welcome', + loadComponent: () => import('../admin-module/admin-welcome.component/admin-welcome.component').then((c) => c.AdminWelcomeComponent), + }, + { + path: 'settings', + loadComponent: () => import('../admin-module/settings.component/settings.component').then((c) => c.SettingsComponent) + }, + { + path: 'system', + + loadComponent: () => import('../admin-module/system.component/system.component').then((c) => c.SystemComponent) + } + ] + } +]; + +export const adminRouting = RouterModule.forChild(ADMIN_ROUTES); diff --git a/jambotron-ui/src/app/admin-module/settings.component/settings.component.html b/jambotron-ui/src/app/admin-module/settings.component/settings.component.html new file mode 100644 index 0000000..59229f5 --- /dev/null +++ b/jambotron-ui/src/app/admin-module/settings.component/settings.component.html @@ -0,0 +1 @@ +

settings.component works!

diff --git a/jambotron-ui/src/app/admin-module/settings.component/settings.component.scss b/jambotron-ui/src/app/admin-module/settings.component/settings.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/jambotron-ui/src/app/admin-module/settings.component/settings.component.spec.ts b/jambotron-ui/src/app/admin-module/settings.component/settings.component.spec.ts new file mode 100644 index 0000000..82c748a --- /dev/null +++ b/jambotron-ui/src/app/admin-module/settings.component/settings.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SettingsComponent } from './settings.component'; + +describe('SettingsComponent', () => { + let component: SettingsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SettingsComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(SettingsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/jambotron-ui/src/app/admin-module/settings.component/settings.component.ts b/jambotron-ui/src/app/admin-module/settings.component/settings.component.ts new file mode 100644 index 0000000..b7ce784 --- /dev/null +++ b/jambotron-ui/src/app/admin-module/settings.component/settings.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-settings.component', + imports: [], + templateUrl: './settings.component.html', + styleUrl: './settings.component.scss' +}) +export class SettingsComponent { + +} diff --git a/jambotron-ui/src/app/admin-module/system.component/system.component.html b/jambotron-ui/src/app/admin-module/system.component/system.component.html new file mode 100644 index 0000000..ca07ac5 --- /dev/null +++ b/jambotron-ui/src/app/admin-module/system.component/system.component.html @@ -0,0 +1,107 @@ + + + + + + + Content 1 + + @for (column of displayedColumns; track column) { + + + + + } + + + + + + + + + + + + + + +
{{column}}{{element[column]}}  + + +
+
+ + + Name: {{element.name}} + Type: {{element.type}} + +
+
+
+ +
+ + Content 2 + + @for (column of displayedColumns; track column) { + + + + + } + + + + + + + + + + + + + + +
{{column}}{{element[column]}}  + + +
+
+ + + Name: {{element.name}} + Type: {{element.type}} + +
+
+
+
+
+
+
diff --git a/jambotron-ui/src/app/admin-module/system.component/system.component.scss b/jambotron-ui/src/app/admin-module/system.component/system.component.scss new file mode 100644 index 0000000..9fd7d7d --- /dev/null +++ b/jambotron-ui/src/app/admin-module/system.component/system.component.scss @@ -0,0 +1,113 @@ +mat-card{ + //margin: 20px; + background-color: rgba(240, 248, 255, 0.7); + backdrop-filter: blur(8px); +} + +mat-card-title{ + color: cyan; +} + +mat-card-subtitle{ + color: #009dff; +} + +mat-tab{ + color:black; +} + + +table { + width: 100%; + margin-top: 20px; + color:lightgrey; +} + + +mat-list{ + //background-color: #1389d3; + color:black; + width: 100%; +} + +mat-list-item{ + margin: 10px 10px 10px 10px; + background-color: #447694; + + color: #009dff; +} + +tr.example-detail-row { + height: 0; + background: #fffdfd; +} + +tr.example-element-row { + cursor: pointer; + color: #1389d3; + background: #fffdfd; +} + +tr.example-element-row:not(.example-expanded-row):hover { + background: whitesmoke; +} + +tr.example-element-row:not(.example-expanded-row):active { + background: #efefef; +} + +.example-element-row td { + border-bottom-width: 0; +} + +.example-element-detail-wrapper { + overflow: hidden; + display: grid; + grid-template-rows: 0fr; + grid-template-columns: 100%; + transition: grid-template-rows 225ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.example-element-detail-wrapper-expanded { + grid-template-rows: 1fr; + +} + +.example-element-detail { + display: flex; + min-height: 0; +} + +.example-element-diagram { + min-width: 80px; + border: 2px solid black; + padding: 8px; + font-weight: lighter; + margin: 8px 0; + height: 104px; +} + +.example-element-symbol { + font-weight: bold; + font-size: 40px; + line-height: normal; +} + +.example-element-description { + padding: 16px; +} + +.example-element-description-attribution { + opacity: 0.5; +} + +.example-toggle-button { + transition: transform 225ms cubic-bezier(0.4, 0, 0.2, 1); +} + +.example-toggle-button-expanded { + transform: rotate(180deg); +} + + + diff --git a/jambotron-ui/src/app/admin-module/system.component/system.component.spec.ts b/jambotron-ui/src/app/admin-module/system.component/system.component.spec.ts new file mode 100644 index 0000000..bae84c7 --- /dev/null +++ b/jambotron-ui/src/app/admin-module/system.component/system.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SystemComponent } from './system.component'; + +describe('SystemComponent', () => { + let component: SystemComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SystemComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(SystemComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/jambotron-ui/src/app/admin-module/system.component/system.component.ts b/jambotron-ui/src/app/admin-module/system.component/system.component.ts new file mode 100644 index 0000000..115c92d --- /dev/null +++ b/jambotron-ui/src/app/admin-module/system.component/system.component.ts @@ -0,0 +1,138 @@ +import {Component, CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; +import {MatCard, MatCardContent, MatCardHeader} from '@angular/material/card'; +import {MatDivider} from '@angular/material/divider'; +import {MatTab, MatTabGroup} from '@angular/material/tabs'; +import { + MatCell, + MatCellDef, + MatColumnDef, + MatHeaderCell, MatHeaderCellDef, + MatHeaderRow, MatHeaderRowDef, + MatRow, + MatRowDef, + MatTable +} from '@angular/material/table'; +import {MatList, MatListItem} from '@angular/material/list'; +import {MatIconButton} from '@angular/material/button'; +import {SystemService} from '../../services/system.service'; +import {Bean} from '../../models/Bean'; +import {MatIcon} from '@angular/material/icon'; + +@Component({ + selector: 'app-system.component', + imports: [ + MatCard, + MatCardHeader, + MatCardContent, + MatDivider, + MatTabGroup, + MatTab, + MatTable, + MatColumnDef, + MatIcon, + MatCell, + MatCellDef, + MatList, + MatListItem, + MatRow, + MatHeaderRow, + MatRowDef, + MatHeaderCell, + MatHeaderCellDef, + MatIconButton, + MatIcon, + MatHeaderRowDef + ], + templateUrl: './system.component.html', + styleUrl: './system.component.scss', + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class SystemComponent { + customBeans:Bean[] = [] ; + allBeans:Bean[] = [] ; + displayedColumns: string[] = ['shortName', 'typeShortName', 'scope']; + + columnsToDisplayWithExpand = [...this.displayedColumns, 'expand']; + + expandedElement: Bean | null = null; + + resultsLength = 0; + isLoadingResults = true; + isRateLimitReached = false; + +constructor(private systemService: SystemService) { } + +ngOnInit(): void { + this.retrieveBeans(); +} + +retrieveBeans(): void { + this.systemService.getCustomBeans() + .subscribe( + (data: Bean[]) => { + this.customBeans = data; + console.log(data); + }, + (error: any) => { + console.log(error); + }); + this.systemService.getAllBeans() + .subscribe( + (data: Bean[]) => { + this.allBeans = data; + console.log(data); + }, + (error: any) => { + console.log(error); + }); +} + +/** Checks whether an element is expanded. */ +isExpanded(element: Bean) { + return this.expandedElement === element; +} + +/** Toggles the expanded state of an element. */ +toggle(element: Bean) { + this.expandedElement = this.isExpanded(element) ? null : element; +} + + + +//ngAfterViewInit() { + //this.exampleDatabase = new ExampleHttpDatabase(this._httpClient); + + // If the user changes the sort order, reset back to the first page. + /* this.sort.sortChange.subscribe(() => (this.paginator.pageIndex = 0)); + + merge(this.sort.sortChange, this.paginator.page) + .pipe( + startWith({}), + switchMap(() => { + this.isLoadingResults = true; + return this.exampleDatabase!.getRepoIssues( + this.sort.active, + this.sort.direction, + this.paginator.pageIndex, + ).pipe(catchError(() => observableOf(null))); + }), + map(data => { + // Flip flag to show that loading has finished. + this.isLoadingResults = false; + this.isRateLimitReached = data === null; + + if (data === null) { + return []; + } + + // Only refresh the result length if there is new data. In case of rate + // limit errors, we do not want to reset the paginator to zero, as that + // would prevent users from re-triggering requests. + this.resultsLength = data.total_count; + return data.items; + }), + ) + .subscribe(data => (this.data = data));*/ +} + + diff --git a/jambotron-ui/src/app/app-routing.module.ts b/jambotron-ui/src/app/app-routing.module.ts deleted file mode 100644 index 1d741dc..0000000 --- a/jambotron-ui/src/app/app-routing.module.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; -import { TutorialsListComponent } from './components/tutorials-list/tutorials-list.component'; -import { TutorialDetailsComponent } from './components/tutorial-details/tutorial-details.component'; -import { AddTutorialComponent } from './components/add-tutorial/add-tutorial.component'; -import { BoardAdminComponent } from './components/board-admin/board-admin.component'; -import { BoardModeratorComponent } from './components/board-moderator/board-moderator.component'; -import { BoardUserComponent } from './components/board-user/board-user.component'; -import { ProfileComponent } from './components/profile/profile.component'; -import { RegisterComponent } from './components/register/register.component'; -import { LoginComponent } from './components/login/login.component'; -import { HomeComponent } from './components/home/home.component'; -import {SystemComponent} from './components/system.component/system.component'; - - -const routes: Routes = [ - { path: 'home', component: HomeComponent }, - { path: 'login', component: LoginComponent }, - { path: 'register', component: RegisterComponent }, - { path: 'profile', component: ProfileComponent }, - { path: 'user', component: BoardUserComponent }, - { path: 'mod', component: BoardModeratorComponent }, - { path: 'admin', component: BoardAdminComponent }, - { path: '', redirectTo: 'home', pathMatch: 'full' }, - { path: 'tutorials', component: TutorialsListComponent }, - { path: 'tutorials/:id', component: TutorialDetailsComponent }, - { path: 'add', component: AddTutorialComponent }, - { path: 'system', component: SystemComponent} -]; - -@NgModule({ - imports: [RouterModule.forRoot(routes, {useHash: true})], - exports: [RouterModule] -}) -export class AppRoutingModule { } diff --git a/jambotron-ui/src/app/app.component.ts b/jambotron-ui/src/app/app.component.ts index 819c3b1..b51a698 100644 --- a/jambotron-ui/src/app/app.component.ts +++ b/jambotron-ui/src/app/app.component.ts @@ -1,16 +1,27 @@ -import {Component, inject, OnInit} from '@angular/core'; +import {Component, CUSTOM_ELEMENTS_SCHEMA, inject, OnInit} from '@angular/core'; import { TokenStorageService } from './services/token-storage.service'; import {MatDialog} from "@angular/material/dialog"; import {DialogComponent} from "./components/dialog/dialog.component"; import {AuthService} from "./services/auth.service"; import {Subscription} from "rxjs"; import {EventBusService} from "./_shared/event-bus.service"; +import {RouterLink, RouterOutlet} from '@angular/router'; +import {MatButton} from '@angular/material/button'; +import {MatToolbar} from '@angular/material/toolbar'; +import {MatIcon} from '@angular/material/icon'; @Component({ - selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.scss'], - standalone: false + selector: 'app-root', + templateUrl: './app.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA], + imports: [ + RouterOutlet, + MatIcon, + MatButton, + RouterLink, + MatToolbar + ], + styleUrls: ['./app.component.scss'] }) export class AppComponent implements OnInit { readonly dialog = inject(MatDialog); diff --git a/jambotron-ui/src/app/app.config.server.ts b/jambotron-ui/src/app/app.config.server.ts new file mode 100644 index 0000000..41031f1 --- /dev/null +++ b/jambotron-ui/src/app/app.config.server.ts @@ -0,0 +1,12 @@ +import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; +import { provideServerRendering, withRoutes } from '@angular/ssr'; +import { appConfig } from './app.config'; +import { serverRoutes } from './app.routes.server'; + +const serverConfig: ApplicationConfig = { + providers: [ + provideServerRendering(withRoutes(serverRoutes)) + ] +}; + +export const config = mergeApplicationConfig(appConfig, serverConfig); diff --git a/jambotron-ui/src/app/app.config.ts b/jambotron-ui/src/app/app.config.ts new file mode 100644 index 0000000..c1108fe --- /dev/null +++ b/jambotron-ui/src/app/app.config.ts @@ -0,0 +1,28 @@ +import { + ApplicationConfig, + importProvidersFrom, + provideBrowserGlobalErrorListeners, + provideZoneChangeDetection +} from '@angular/core'; +import { provideRouter } from '@angular/router'; + +import { routes } from './app.routes'; +import { provideClientHydration, withEventReplay } from '@angular/platform-browser'; +import {AppModule} from './app.module'; +import {providePrimeNG} from 'primeng/config'; +import Aura from '@primeng/themes/aura'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideBrowserGlobalErrorListeners(), + provideZoneChangeDetection({ eventCoalescing: true }), + provideRouter(routes), provideClientHydration(withEventReplay()), + + importProvidersFrom(AppModule), + providePrimeNG({ + theme: { + preset: Aura + } + }) + ] +}; diff --git a/jambotron-ui/src/app/app.html b/jambotron-ui/src/app/app.html new file mode 100644 index 0000000..0680b43 --- /dev/null +++ b/jambotron-ui/src/app/app.html @@ -0,0 +1 @@ + diff --git a/jambotron-ui/src/app/app.module.ts b/jambotron-ui/src/app/app.module.ts index ba368f3..421f0dd 100644 --- a/jambotron-ui/src/app/app.module.ts +++ b/jambotron-ui/src/app/app.module.ts @@ -1,118 +1,40 @@ -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; - -import { AppRoutingModule } from './app-routing.module'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; - - -import { AppComponent } from './app.component'; -import { TutorialsListComponent } from './components/tutorials-list/tutorials-list.component'; -import { TutorialDetailsComponent } from './components/tutorial-details/tutorial-details.component'; -import { AddTutorialComponent } from './components/add-tutorial/add-tutorial.component'; -import { LoginComponent } from './components/login/login.component'; -import { RegisterComponent } from './components/register/register.component'; -import { HomeComponent } from './components/home/home.component'; -import { ProfileComponent } from './components/profile/profile.component'; -import { BoardAdminComponent } from './components/board-admin/board-admin.component'; -import { BoardModeratorComponent } from './components/board-moderator/board-moderator.component'; -import { BoardUserComponent } from './components/board-user/board-user.component'; - -import { authInterceptorProviders } from './helpers/auth.interceptor'; -import {provideHttpClient, withInterceptorsFromDi} from "@angular/common/http"; -import {provideAnimationsAsync} from "@angular/platform-browser/animations/async"; -import {MatToolbar} from "@angular/material/toolbar"; -import {MatAnchor, MatButton} from "@angular/material/button"; -import {MatIcon} from "@angular/material/icon"; -import {MatChipGrid, MatChipInput, MatChipListbox, MatChipOption, MatChipRow} from "@angular/material/chips"; -import {MatAutocomplete, MatAutocompleteTrigger, MatOption} from "@angular/material/autocomplete"; -import {MatFormField} from "@angular/material/form-field"; -import {MatLabel} from '@angular/material/form-field'; - - -import { - MatCard, MatCardActions, - MatCardContent, - MatCardHeader, - MatCardImage, - MatCardSubtitle, - MatCardTitle -} from '@angular/material/card'; -import {MatInput} from '@angular/material/input'; -import {EditorComponent} from '@progress/kendo-angular-editor'; -import {ArticleComments} from './components/article-comments/article-comments'; -import {MatProgressSpinner} from '@angular/material/progress-spinner'; -import {providePrimeNG} from 'primeng/config'; -import Aura from '@primeng/themes/aura'; -import {Button} from 'primeng/button'; -import {ScrollPanelModule} from 'primeng/scrollpanel'; -import {Splitter} from 'primeng/splitter'; - +import {CUSTOM_ELEMENTS_SCHEMA, NgModule} from '@angular/core'; +import { BrowserModule } + from '@angular/platform-browser'; +import { BrowserAnimationsModule } + from '@angular/platform-browser/animations'; +import { MatIconModule } from '@angular/material/icon'; +import {provideHttpClient, withInterceptorsFromDi} from '@angular/common/http'; +import {MainComponent} from './main-module/main.component/main.component'; +import {authInterceptorProviders} from './helpers/auth.interceptor'; +import {AdminComponent} from './admin-module/admin.component/admin.component'; +import {AdminWelcomeComponent} from './admin-module/admin-welcome.component/admin-welcome.component'; +import {SettingsComponent} from './admin-module/settings.component/settings.component'; +import {SystemComponent} from './admin-module/system.component/system.component'; +import {appRouting} from './app.routes'; +import {App} from './app'; @NgModule({ declarations: [ - AppComponent, - TutorialsListComponent, - TutorialDetailsComponent, - AddTutorialComponent, - - RegisterComponent, - HomeComponent, - ProfileComponent, - BoardAdminComponent, - BoardModeratorComponent, - BoardUserComponent ], - bootstrap: [AppComponent], imports: [ + appRouting, + MainComponent, BrowserModule, - AppRoutingModule, - FormsModule, - LoginComponent, - MatToolbar, - MatButton, - MatIcon, - MatAnchor, - MatChipGrid, - MatChipRow, - MatChipInput, - MatAutocompleteTrigger, - MatAutocomplete, - MatOption, - MatFormField, - MatChipListbox, - MatChipOption, - ReactiveFormsModule, - MatCardContent, - MatCardSubtitle, - MatCardTitle, - MatCard, - MatCardHeader, - MatCardImage, - MatCardActions, - MatInput, - MatLabel, - EditorComponent, - ArticleComments, - MatProgressSpinner, - Button, - ScrollPanelModule, - Splitter - + MatIconModule, + BrowserAnimationsModule, + AdminComponent, + AdminWelcomeComponent, + SettingsComponent, + SystemComponent ], providers: [ - authInterceptorProviders, - provideHttpClient(withInterceptorsFromDi()), - provideAnimationsAsync(), - providePrimeNG({ - theme: { - preset: Aura, - options: {darkModeSelector: '.p-dark'} - } - }) - ] }) - + authInterceptorProviders,provideHttpClient(withInterceptorsFromDi())], + bootstrap: [], + schemas: [ CUSTOM_ELEMENTS_SCHEMA ] +}) export class AppModule { } diff --git a/jambotron-ui/src/app/app.routes.server.ts b/jambotron-ui/src/app/app.routes.server.ts new file mode 100644 index 0000000..ffd37b1 --- /dev/null +++ b/jambotron-ui/src/app/app.routes.server.ts @@ -0,0 +1,8 @@ +import { RenderMode, ServerRoute } from '@angular/ssr'; + +export const serverRoutes: ServerRoute[] = [ + { + path: '**', + renderMode: RenderMode.Prerender + } +]; diff --git a/jambotron-ui/src/app/app.routes.ts b/jambotron-ui/src/app/app.routes.ts new file mode 100644 index 0000000..e97767a --- /dev/null +++ b/jambotron-ui/src/app/app.routes.ts @@ -0,0 +1,20 @@ +import {RouterModule, Routes} from '@angular/router'; +import {AdminComponent} from './layouts/admin-layout/admin-layout.component'; +import {MainComponent} from './main-module/main.component/main.component'; +import {NgModule} from '@angular/core'; + +export const routes: Routes = [ + { + path: '', + redirectTo: 'main/home', + pathMatch: 'full' + }, + { + path: 'main', + loadChildren: () => + import('./main-module/main.module').then((m) => m.MainModule), + } + +]; +export const appRouting = RouterModule.forRoot(routes); + diff --git a/jambotron-ui/src/app/app.scss b/jambotron-ui/src/app/app.scss new file mode 100644 index 0000000..e69de29 diff --git a/jambotron-ui/src/app/app.spec.ts b/jambotron-ui/src/app/app.spec.ts new file mode 100644 index 0000000..4438df1 --- /dev/null +++ b/jambotron-ui/src/app/app.spec.ts @@ -0,0 +1,23 @@ +import { TestBed } from '@angular/core/testing'; +import { App } from './app'; + +describe('App', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [App], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(App); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it('should render title', () => { + const fixture = TestBed.createComponent(App); + fixture.detectChanges(); + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.querySelector('h1')?.textContent).toContain('Hello, jambotron-ui'); + }); +}); diff --git a/jambotron-ui/src/app/app.ts b/jambotron-ui/src/app/app.ts new file mode 100644 index 0000000..649c4a1 --- /dev/null +++ b/jambotron-ui/src/app/app.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; + +@Component({ + selector: 'app-root', + templateUrl: './app.html', + imports: [ + RouterOutlet + ], + styleUrl: './app.scss' +}) +export class App { + protected title = 'jambotron-ui'; + + constructor() { } +} diff --git a/jambotron-ui/src/app/components/add-tutorial/add-tutorial.component.html b/jambotron-ui/src/app/components/add-tutorial/add-tutorial.component.html index 492f71e..1080dfd 100644 --- a/jambotron-ui/src/app/components/add-tutorial/add-tutorial.component.html +++ b/jambotron-ui/src/app/components/add-tutorial/add-tutorial.component.html @@ -44,7 +44,8 @@ - + + diff --git a/jambotron-ui/src/app/components/add-tutorial/add-tutorial.component.ts b/jambotron-ui/src/app/components/add-tutorial/add-tutorial.component.ts index 17fa583..31f2132 100644 --- a/jambotron-ui/src/app/components/add-tutorial/add-tutorial.component.ts +++ b/jambotron-ui/src/app/components/add-tutorial/add-tutorial.component.ts @@ -1,12 +1,32 @@ -import { Component, OnInit } from '@angular/core'; +import {Component, CUSTOM_ELEMENTS_SCHEMA, OnInit} from '@angular/core'; import {Tutorial} from '../../models/tutorial.model'; import {TutorialService} from '../../services/tutorial.service'; +import {MatCard, MatCardActions, MatCardContent, MatCardHeader} from '@angular/material/card'; +import {FormsModule} from '@angular/forms'; +import {MatButton} from '@angular/material/button'; +import {MatFormField, MatInput, MatLabel} from '@angular/material/input'; +import {NgIf} from '@angular/common'; @Component({ selector: 'app-add-tutorial', templateUrl: './add-tutorial.component.html', styleUrls: ['./add-tutorial.component.scss'], - standalone: false + imports: [ + MatCardActions, + FormsModule, + MatCard, + MatCardHeader, + MatCardContent, + MatFormField, + MatLabel, + + MatButton, + MatInput, + NgIf, + MatLabel, + + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA] }) export class AddTutorialComponent implements OnInit { diff --git a/jambotron-ui/src/app/components/board-admin/board-admin.component.ts b/jambotron-ui/src/app/components/board-admin/board-admin.component.ts index 92a9325..1fc3f98 100644 --- a/jambotron-ui/src/app/components/board-admin/board-admin.component.ts +++ b/jambotron-ui/src/app/components/board-admin/board-admin.component.ts @@ -1,25 +1,45 @@ -import {Component, computed, model, OnInit} from '@angular/core'; +import {Component, computed, CUSTOM_ELEMENTS_SCHEMA, model, OnInit} from '@angular/core'; import {User} from "../../models/user.model"; -import {MatChipInputEvent} from "@angular/material/chips"; -import {MatAutocompleteSelectedEvent} from "@angular/material/autocomplete"; +import {MatChipGrid, MatChipInput, MatChipInputEvent, MatChipRow} from "@angular/material/chips"; +import { + MatAutocomplete, + MatAutocompleteSelectedEvent, + MatAutocompleteTrigger, + MatOption +} from "@angular/material/autocomplete"; import {COMMA, ENTER} from "@angular/cdk/keycodes"; -import {AsyncPipe} from "@angular/common"; -import {FormControl} from "@angular/forms"; +import {AsyncPipe, NgForOf} from "@angular/common"; +import {FormControl, ReactiveFormsModule} from "@angular/forms"; import {Observable, startWith} from "rxjs"; import {map} from "rxjs/operators"; import {UserService} from '../../services/user.service'; import {RolesService} from '../../services/roles.service'; import {Role} from '../../models/role'; +import {MatIcon} from '@angular/material/icon'; +import {MatFormField} from '@angular/material/form-field'; @Component({ - selector: 'app-board-admin', - templateUrl: './board-admin.component.html', - styleUrls: ['./board-admin.component.scss'], - standalone: false, + selector: 'app-board-admin', + templateUrl: './board-admin.component.html', + styleUrls: ['./board-admin.component.scss'], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + imports: [ + MatAutocomplete, + ReactiveFormsModule, + MatOption, + NgForOf, + MatFormField, + MatChipGrid, + + MatChipRow, + MatIcon, + MatChipInput, + MatAutocompleteTrigger + ] }) export class BoardAdminComponent implements OnInit { private gridApi: any; diff --git a/jambotron-ui/src/app/components/card/card.component.html b/jambotron-ui/src/app/components/card/card.component.html new file mode 100644 index 0000000..2716fa8 --- /dev/null +++ b/jambotron-ui/src/app/components/card/card.component.html @@ -0,0 +1,16 @@ +
+ @if (showHeader()) { +
+
+
{{ cardTitle() }}
+ +
+ +
+ } + @if (showContent()) { +
+ +
+ } +
diff --git a/jambotron-ui/src/app/components/card/card.component.scss b/jambotron-ui/src/app/components/card/card.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/jambotron-ui/src/app/components/card/card.component.ts b/jambotron-ui/src/app/components/card/card.component.ts new file mode 100644 index 0000000..85f8cd3 --- /dev/null +++ b/jambotron-ui/src/app/components/card/card.component.ts @@ -0,0 +1,58 @@ +// Angular import +import { Component, ContentChild, ElementRef, TemplateRef, input } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +@Component({ + selector: 'app-card', + standalone: true, + imports: [CommonModule], + templateUrl: './card.component.html', + styleUrls: ['./card.component.scss'] +}) +export class CardComponent { + // public props + /** + * Title of card. It will be visible at left side of card header + */ + cardTitle = input(); + + /** + * Class to be applied at card level + */ + cardClass = input(); + + /** + * To hide content from card + */ + showContent = input(true); + + /** + * Class to be applied at card content. + */ + blockClass = input(); + + /** + * Class to be applied on card header + */ + headerClass = input(); + + /** + * To hide header from card + */ + showHeader = input(true); + + /** + * padding around card content. default in px + */ + padding = input(20); // set default to 24 px + + /** + * Template reference of header actions on custom header + */ + @ContentChild('headerOptionsTemplate') headerOptionsTemplate!: TemplateRef; + + /** + * Template reference of header actions besides title at left + */ + @ContentChild('headerTitleTemplate') headerTitleTemplate!: TemplateRef; +} diff --git a/jambotron-ui/src/app/components/dialog/dialog.component.ts b/jambotron-ui/src/app/components/dialog/dialog.component.ts index ae8be84..c2c14e5 100644 --- a/jambotron-ui/src/app/components/dialog/dialog.component.ts +++ b/jambotron-ui/src/app/components/dialog/dialog.component.ts @@ -14,7 +14,8 @@ import {MatFormField, MatLabel, MatSuffix} from "@angular/material/form-field"; import {MatInput} from "@angular/material/input"; import {FormsModule} from "@angular/forms"; import {MatIcon} from "@angular/material/icon"; -import {DialogData} from "../../app.component"; +import {DialogData} from '../../main-module/main.component/main.component'; + diff --git a/jambotron-ui/src/app/components/home.component/home.component.html b/jambotron-ui/src/app/components/home.component/home.component.html new file mode 100644 index 0000000..c657553 --- /dev/null +++ b/jambotron-ui/src/app/components/home.component/home.component.html @@ -0,0 +1,51 @@ +

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

+

home.component works!

diff --git a/jambotron-ui/src/app/components/home.component/home.component.scss b/jambotron-ui/src/app/components/home.component/home.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/jambotron-ui/src/app/components/home/home.component.spec.ts b/jambotron-ui/src/app/components/home.component/home.component.spec.ts similarity index 89% rename from jambotron-ui/src/app/components/home/home.component.spec.ts rename to jambotron-ui/src/app/components/home.component/home.component.spec.ts index 2c5a172..1191557 100644 --- a/jambotron-ui/src/app/components/home/home.component.spec.ts +++ b/jambotron-ui/src/app/components/home.component/home.component.spec.ts @@ -8,12 +8,10 @@ describe('HomeComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ HomeComponent ] + imports: [HomeComponent] }) .compileComponents(); - }); - beforeEach(() => { fixture = TestBed.createComponent(HomeComponent); component = fixture.componentInstance; fixture.detectChanges(); diff --git a/jambotron-ui/src/app/components/home.component/home.component.ts b/jambotron-ui/src/app/components/home.component/home.component.ts new file mode 100644 index 0000000..3565fc4 --- /dev/null +++ b/jambotron-ui/src/app/components/home.component/home.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-home.component', + imports: [], + templateUrl: './home.component.html', + styleUrl: './home.component.scss' +}) +export class HomeComponent { + +} diff --git a/jambotron-ui/src/app/components/home/home.component.html b/jambotron-ui/src/app/components/home/home.component.html deleted file mode 100644 index 5cbbd30..0000000 --- a/jambotron-ui/src/app/components/home/home.component.html +++ /dev/null @@ -1,145 +0,0 @@ - - -
Panel 1
-
- -
Panel 2
- - - -

- Lorem ipsum dolor sit amet... -

-

- Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium... -

-

- At vero eos et accusamus et iusto odio dignissimos... - dfsd - f - sdf - - dsf - sd - f - sd - fs - fs - fsfs - fs - fs - fs - fs - fs -

- -
- - -
-
- - - - -

- Lorem ipsum dolor sit amet... -

-

- Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium... -

-

- At vero eos et accusamus et iusto odio dignissimos... - dfsd - f - sdf - - dsf - sd - f - sd - fs - fs - fsfs - fs - fs - fs - fs - fs -

- -
- - - - - - - - - Tutorials - - - - - - - -@defer (on hover; on interaction(showComments)) { - -} @placeholder ( ;minimum 1s) { -

Placeholder for comments

-} @loading (minimum 1s; after 500ms) { -

Loading comments...

-} @error { -

Failed to load comments

-} - -@for (tutorial of tutorials; track $index){ - - - - -} diff --git a/jambotron-ui/src/app/components/home/home.component.scss b/jambotron-ui/src/app/components/home/home.component.scss deleted file mode 100644 index 7bd62ae..0000000 --- a/jambotron-ui/src/app/components/home/home.component.scss +++ /dev/null @@ -1,10 +0,0 @@ -mat-card{ - margin: 20px; - background-color: rgba(0, 0, 0, 0.7); -} -mat-card-title{ - color: cyan; -} -.tutorial-card{ - color: white; -} diff --git a/jambotron-ui/src/app/components/home/home.component.ts b/jambotron-ui/src/app/components/home/home.component.ts deleted file mode 100644 index 223eb3a..0000000 --- a/jambotron-ui/src/app/components/home/home.component.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {Component, computed, OnInit} from '@angular/core'; -import {TutorialService} from '../../services/tutorial.service'; - -import {Tutorial} from '../../models/tutorial.model'; -import {ArticleComments} from '../article-comments/article-comments'; -import {AddTutorialComponent} from '../add-tutorial/add-tutorial.component'; -import { ScrollPanelModule } from 'primeng/scrollpanel'; - -@Component({ - selector: 'app-home', - templateUrl: './home.component.html', - styleUrls: ['./home.component.scss'], - standalone: false -}) -export class HomeComponent implements OnInit { - content?: string; - - tutorials?: Tutorial[]; - - constructor(private tutorialService: TutorialService) { } - - ngOnInit(): void { - this.retrieveTutorials(); - } - retrieveTutorials(): void { - this.tutorialService.getAll() - .subscribe( - data => { - this.tutorials = data; - console.log(data); - }, - error => { - console.log(error); - }); - } - - profileComponent = computed(() => AddTutorialComponent); -} diff --git a/jambotron-ui/src/app/components/profile/profile.component.ts b/jambotron-ui/src/app/components/profile/profile.component.ts index a65ff43..8cad428 100644 --- a/jambotron-ui/src/app/components/profile/profile.component.ts +++ b/jambotron-ui/src/app/components/profile/profile.component.ts @@ -1,12 +1,16 @@ import { Component, OnInit } from '@angular/core'; import {TokenStorageService} from '../../services/token-storage.service'; +import {NgForOf, NgIf} from '@angular/common'; @Component({ - selector: 'app-profile', - templateUrl: './profile.component.html', - styleUrls: ['./profile.component.scss'], - standalone: false + selector: 'app-profile', + templateUrl: './profile.component.html', + imports: [ + NgForOf, + NgIf + ], + styleUrls: ['./profile.component.scss'] }) export class ProfileComponent implements OnInit { currentUser: any; diff --git a/jambotron-ui/src/app/components/register/register.component.ts b/jambotron-ui/src/app/components/register/register.component.ts index 031a95b..65d3c7e 100644 --- a/jambotron-ui/src/app/components/register/register.component.ts +++ b/jambotron-ui/src/app/components/register/register.component.ts @@ -1,12 +1,17 @@ import { Component, OnInit } from '@angular/core'; import {AuthService} from '../../services/auth.service'; +import {FormsModule} from '@angular/forms'; +import {NgIf} from '@angular/common'; @Component({ - selector: 'app-register', - templateUrl: './register.component.html', - styleUrls: ['./register.component.scss'], - standalone: false + selector: 'app-register', + templateUrl: './register.component.html', + imports: [ + FormsModule, + NgIf + ], + styleUrls: ['./register.component.scss'] }) export class RegisterComponent implements OnInit { form: any = { diff --git a/jambotron-ui/src/app/components/tutorial-details/tutorial-details.component.ts b/jambotron-ui/src/app/components/tutorial-details/tutorial-details.component.ts index 9423c10..96a88d3 100644 --- a/jambotron-ui/src/app/components/tutorial-details/tutorial-details.component.ts +++ b/jambotron-ui/src/app/components/tutorial-details/tutorial-details.component.ts @@ -3,13 +3,18 @@ import { Component, OnInit } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import {Tutorial} from '../../models/tutorial.model'; import {TutorialService} from '../../services/tutorial.service'; +import {FormsModule} from '@angular/forms'; +import {NgIf} from '@angular/common'; @Component({ - selector: 'app-tutorial-details', - templateUrl: './tutorial-details.component.html', - styleUrls: ['./tutorial-details.component.scss'], - standalone: false + selector: 'app-tutorial-details', + templateUrl: './tutorial-details.component.html', + imports: [ + FormsModule, + NgIf + ], + styleUrls: ['./tutorial-details.component.scss'] }) export class TutorialDetailsComponent implements OnInit { diff --git a/jambotron-ui/src/app/components/tutorials-list/tutorials-list.component.ts b/jambotron-ui/src/app/components/tutorials-list/tutorials-list.component.ts index f7f62b1..f1cdb3f 100644 --- a/jambotron-ui/src/app/components/tutorials-list/tutorials-list.component.ts +++ b/jambotron-ui/src/app/components/tutorials-list/tutorials-list.component.ts @@ -3,12 +3,19 @@ import { Component, OnInit } from '@angular/core'; import {Tutorial} from '../../models/tutorial.model'; import {TutorialService} from '../../services/tutorial.service'; +import {FormsModule} from '@angular/forms'; +import {RouterLink} from '@angular/router'; +import {NgIf} from '@angular/common'; @Component({ - selector: 'app-tutorials-list', - templateUrl: './tutorials-list.component.html', - styleUrls: ['./tutorials-list.component.scss'], - standalone: false + selector: 'app-tutorials-list', + templateUrl: './tutorials-list.component.html', + imports: [ + FormsModule, + RouterLink, + NgIf + ], + styleUrls: ['./tutorials-list.component.scss'] }) export class TutorialsListComponent implements OnInit { diff --git a/jambotron-ui/src/app/components/tutorials.component/tutorials.component.html b/jambotron-ui/src/app/components/tutorials.component/tutorials.component.html new file mode 100644 index 0000000..1c6abe5 --- /dev/null +++ b/jambotron-ui/src/app/components/tutorials.component/tutorials.component.html @@ -0,0 +1,9 @@ +@for (tutorial of tutorials; track $index){ + + + {{tutorial.title}} + + + + +} diff --git a/jambotron-ui/src/app/components/tutorials.component/tutorials.component.scss b/jambotron-ui/src/app/components/tutorials.component/tutorials.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/jambotron-ui/src/app/components/tutorials.component/tutorials.component.spec.ts b/jambotron-ui/src/app/components/tutorials.component/tutorials.component.spec.ts new file mode 100644 index 0000000..280f05a --- /dev/null +++ b/jambotron-ui/src/app/components/tutorials.component/tutorials.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TutorialsComponent } from './tutorials.component'; + +describe('TutorialsComponent', () => { + let component: TutorialsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TutorialsComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(TutorialsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/jambotron-ui/src/app/components/tutorials.component/tutorials.component.ts b/jambotron-ui/src/app/components/tutorials.component/tutorials.component.ts new file mode 100644 index 0000000..c97aa15 --- /dev/null +++ b/jambotron-ui/src/app/components/tutorials.component/tutorials.component.ts @@ -0,0 +1,39 @@ +import {Component, CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; +import {Tutorial} from '../../models/tutorial.model'; +import {TutorialService} from '../../services/tutorial.service'; +import {MatCard, MatCardContent, MatCardHeader} from '@angular/material/card'; + +@Component({ + selector: 'app-tutorials.component', + imports: [ + MatCard, + MatCardContent, + MatCardHeader + ], + templateUrl: './tutorials.component.html', + styleUrl: './tutorials.component.scss', + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class TutorialsComponent { + tutorials?: Tutorial[]; + + constructor(private tutorialService: TutorialService) { + this.retrieveTutorials(); + } + + // ngOnInit(): void { + // this.retrieveTutorials(); + // } + + retrieveTutorials(): void { + this.tutorialService.getAll() + .subscribe( + data => { + this.tutorials = data; + console.log(data); + }, + error => { + console.log(error); + }); + } +} diff --git a/jambotron-ui/src/app/main-module/main.component/main.component.html b/jambotron-ui/src/app/main-module/main.component/main.component.html new file mode 100644 index 0000000..f60d02d --- /dev/null +++ b/jambotron-ui/src/app/main-module/main.component/main.component.html @@ -0,0 +1,65 @@ + + + + + + + @if (isLoggedIn) { + + } + + @if (showAdminBoard) { + + } + + @if (showAdminBoard) { + + } + + + @if (isLoggedIn) { + + } + @if (!isLoggedIn) { + + } + @if (isLoggedIn) { + + + + } + + + + + + +
+ +
+ diff --git a/jambotron-ui/src/app/main-module/main.component/main.component.scss b/jambotron-ui/src/app/main-module/main.component/main.component.scss new file mode 100644 index 0000000..713ba97 --- /dev/null +++ b/jambotron-ui/src/app/main-module/main.component/main.component.scss @@ -0,0 +1,15 @@ + +mat-toolbar{ + background-color: rgba(153,153,153,0.16); + backdrop-filter: blur(8px); +} +.menu-spacer { + flex: 1 1 auto; +} +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1000; // Ensure toolbar stays above other content +} diff --git a/jambotron-ui/src/app/main-module/main.component/main.component.spec.ts b/jambotron-ui/src/app/main-module/main.component/main.component.spec.ts new file mode 100644 index 0000000..7628b2d --- /dev/null +++ b/jambotron-ui/src/app/main-module/main.component/main.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MainComponent } from './main.component'; + +describe('MainComponent', () => { + let component: MainComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [MainComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(MainComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/jambotron-ui/src/app/main-module/main.component/main.component.ts b/jambotron-ui/src/app/main-module/main.component/main.component.ts new file mode 100644 index 0000000..d17f946 --- /dev/null +++ b/jambotron-ui/src/app/main-module/main.component/main.component.ts @@ -0,0 +1,163 @@ +import {Component, CUSTOM_ELEMENTS_SCHEMA, inject} from '@angular/core'; +//import {NavigationComponent} from '../navigation/navigation.component'; +import {NgClass} from '@angular/common'; +import {NavigationComponent} from '../../layouts/admin-layout/navigation/navigation.component'; +import {RouterLink, RouterOutlet} from '@angular/router'; +import {BreadcrumbComponent} from '../../components/breadcrumb/breadcrumb.component'; +import {NavBarComponent} from '../../layouts/admin-layout/nav-bar/nav-bar.component'; +import {MatToolbar} from '@angular/material/toolbar'; +import {MatButton} from '@angular/material/button'; +import {IconDirective} from '@ant-design/icons-angular'; +import {MatDialog} from '@angular/material/dialog'; +import {Subscription} from 'rxjs'; +import {TokenStorageService} from '../../services/token-storage.service'; +import {AuthService} from '../../services/auth.service'; +import {EventBusService} from '../../_shared/event-bus.service'; +import {DialogComponent} from '../../components/dialog/dialog.component'; + +@Component({ + selector: 'app-main.component', + imports: [ + NavBarComponent, + MatToolbar, + MatButton, + RouterLink, + IconDirective, + RouterOutlet + ], + schemas: [ CUSTOM_ELEMENTS_SCHEMA ], + templateUrl: './main.component.html', + styleUrl: './main.component.scss' +}) +export class MainComponent { + // public props + navCollapsed: boolean = false; + navCollapsedMob: boolean = false; + + readonly dialog = inject(MatDialog); + //private authService = new AuthService(provideHttpClient()) + public dialogData : DialogData = {password: "", username: ""}; + + private roles: string[] = []; + isLoggedIn = false; + showAdminBoard = false; + showModeratorBoard = false; + username?: string; + + eventBusSub?: Subscription; + private errorMessage: any; + private isLoginFailed: boolean = false; + + private storageService: TokenStorageService = inject(TokenStorageService); + private authService: AuthService = inject(AuthService); + private eventBusService: EventBusService = inject(EventBusService); + + constructor( + + ) {} + + ngOnInit(): void { + this.isLoggedIn = this.storageService.isLoggedIn(); + + if (this.isLoggedIn) { + const user = this.storageService.getUser(); + this.roles = user.roles; + + this.showAdminBoard = true;//this.roles.includes('ROLE_ADMIN'); + this.showModeratorBoard = this.roles.includes('ROLE_MODERATOR'); + + this.username = user.username; + } + + this.eventBusSub = this.eventBusService.on('logout', () => { + this.logout(); + }); + } + + // public method + navMobClick() { + if (this.navCollapsedMob && !document.querySelector('app-navigation.pc-sidebar')?.classList.contains('mob-open')) { + this.navCollapsedMob = !this.navCollapsedMob; + setTimeout(() => { + this.navCollapsedMob = !this.navCollapsedMob; + }, 100); + } else { + this.navCollapsedMob = !this.navCollapsedMob; + } + if (document.querySelector('app-navigation.pc-sidebar')?.classList.contains('navbar-collapsed')) { + document.querySelector('app-navigation.pc-sidebar')?.classList.remove('navbar-collapsed'); + } + } + + handleKeyDown(event: KeyboardEvent): void { + if (event.key === 'Escape') { + this.closeMenu(); + } + } + + closeMenu() { + if (document.querySelector('app-navigation.pc-sidebar')?.classList.contains('mob-open')) { + document.querySelector('app-navigation.pc-sidebar')?.classList.remove('mob-open'); + } + } + + + logout(): void { + this.authService.logout().subscribe({ + next: res => { + console.log(res); + this.storageService.clean(); + + window.location.reload(); + }, + error: err => { + console.log(err); + } + }); + } + + openDialog(enterAnimationDuration: string, exitAnimationDuration: string) { + + let dialogRef = this.dialog.open(DialogComponent, { + width: '350px', + enterAnimationDuration, + exitAnimationDuration, + data: {username: this.dialogData.username, password: this.dialogData.password} + }); + + dialogRef.afterClosed().subscribe(result => { + console.log('The dialog was closed'); + if(result== null){ + return; + } + this.dialogData = result; + + this.authService.login(this.dialogData.username, this.dialogData.password).subscribe( + data => { + this.storageService.saveToken(data.accessToken); + this.storageService.saveUser(data); + + this.isLoginFailed = false; + this.isLoggedIn = true; + let user = this.storageService.getUser(); + this.roles = user.roles; + //this.username = user.username; + this.reloadPage(); + }, + err => { + this.errorMessage = err.error.message; + this.isLoginFailed = true; + } + ); + }); + + } + reloadPage(): void { + window.location.reload(); + } + +} +export interface DialogData { + username: string; + password: string; +} diff --git a/jambotron-ui/src/app/main-module/main.module.ts b/jambotron-ui/src/app/main-module/main.module.ts new file mode 100644 index 0000000..2685f6a --- /dev/null +++ b/jambotron-ui/src/app/main-module/main.module.ts @@ -0,0 +1,13 @@ +import {RouterModule} from '@angular/router'; +import {MainComponent} from './main.component/main.component'; +import {mainRouting} from './main.routing'; +import {NgModule} from '@angular/core'; + +@NgModule({ + declarations: [ + + ], + imports: [mainRouting, MainComponent], + exports: [RouterModule], +}) +export class MainModule {} diff --git a/jambotron-ui/src/app/main-module/main.routing.ts b/jambotron-ui/src/app/main-module/main.routing.ts new file mode 100644 index 0000000..3b921a0 --- /dev/null +++ b/jambotron-ui/src/app/main-module/main.routing.ts @@ -0,0 +1,44 @@ +import {RouterModule, Routes} from '@angular/router'; +import {HomeComponent} from '../components/home.component/home.component'; +import {MainComponent} from './main.component/main.component'; +import {TutorialsListComponent} from '../components/tutorials-list/tutorials-list.component'; +import {TutorialsComponent} from '../components/tutorials.component/tutorials.component'; +import {AddTutorialComponent} from '../components/add-tutorial/add-tutorial.component'; +import {RegisterComponent} from '../components/register/register.component'; +import {ProfileComponent} from '../components/profile/profile.component'; + +const MAIN_ROUTES: Routes =[ + { + path: '', + component: MainComponent, + children: [ + { + path: 'admin', + loadChildren: () => + import('../admin-module/admin.module').then((m) => m.AdminModule), + }, + { + path: 'home', + component: HomeComponent + }, + { + path: 'tutorials', + component: TutorialsComponent + }, + { + path: 'add-tutorial', + component: AddTutorialComponent + }, + { + path: 'register', + component : RegisterComponent + }, + { + path: 'profile', + component : ProfileComponent + } + ], + } +]; + +export const mainRouting = RouterModule.forChild(MAIN_ROUTES); diff --git a/jambotron-ui/src/app/services/token-storage.service.ts b/jambotron-ui/src/app/services/token-storage.service.ts index 67fa073..9e3e747 100644 --- a/jambotron-ui/src/app/services/token-storage.service.ts +++ b/jambotron-ui/src/app/services/token-storage.service.ts @@ -1,4 +1,5 @@ -import { Injectable } from '@angular/core'; +import {inject, Injectable} from '@angular/core'; +import {DOCUMENT} from '@angular/common'; const TOKEN_KEY = 'auth-token'; const USER_KEY = 'auth-user'; @@ -7,28 +8,33 @@ const USER_KEY = 'auth-user'; providedIn: 'root' }) export class TokenStorageService { - constructor() { } + + private document = inject(DOCUMENT); + + constructor() { + + } signOut(): void { - window.sessionStorage.clear(); + this.document.defaultView?.sessionStorage.clear(); } public saveToken(token: string): void { - window.sessionStorage.removeItem(TOKEN_KEY); - window.sessionStorage.setItem(TOKEN_KEY, token); + document.defaultView?.sessionStorage.removeItem(TOKEN_KEY); + document.defaultView?.sessionStorage.setItem(TOKEN_KEY, token); } - public getToken(): string | null { - return window.sessionStorage.getItem(TOKEN_KEY); + public getToken(): string | null| undefined { + return document.defaultView?.sessionStorage.getItem(TOKEN_KEY); } public saveUser(user: any): void { - window.sessionStorage.removeItem(USER_KEY); - window.sessionStorage.setItem(USER_KEY, JSON.stringify(user)); + document.defaultView?.sessionStorage.removeItem(USER_KEY); + document.defaultView?.sessionStorage.setItem(USER_KEY, JSON.stringify(user)); } public getUser(): any { - const user = window.sessionStorage.getItem(USER_KEY); + const user = document.defaultView?.sessionStorage.getItem(USER_KEY); if (user) { return JSON.parse(user); } @@ -37,11 +43,11 @@ export class TokenStorageService { } clean(): void { - window.sessionStorage.clear(); + document.defaultView?.sessionStorage.clear(); } public isLoggedIn(): boolean { - const user = window.sessionStorage.getItem(USER_KEY); + const user = this.document.defaultView?.sessionStorage?.getItem(USER_KEY); if (user) { return true; } diff --git a/jambotron-ui/src/assets/.gitkeep b/jambotron-ui/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/jambotron-ui/src/assets/images/authentication/facebook.svg b/jambotron-ui/src/assets/images/authentication/facebook.svg new file mode 100644 index 0000000..6d4fd87 --- /dev/null +++ b/jambotron-ui/src/assets/images/authentication/facebook.svg @@ -0,0 +1,3 @@ + + + diff --git a/jambotron-ui/src/assets/images/authentication/google.svg b/jambotron-ui/src/assets/images/authentication/google.svg new file mode 100644 index 0000000..bd30fd9 --- /dev/null +++ b/jambotron-ui/src/assets/images/authentication/google.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/jambotron-ui/src/assets/images/authentication/img-auth-bg.svg b/jambotron-ui/src/assets/images/authentication/img-auth-bg.svg new file mode 100644 index 0000000..8307093 --- /dev/null +++ b/jambotron-ui/src/assets/images/authentication/img-auth-bg.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/jambotron-ui/src/assets/images/authentication/twitter.svg b/jambotron-ui/src/assets/images/authentication/twitter.svg new file mode 100644 index 0000000..f868d36 --- /dev/null +++ b/jambotron-ui/src/assets/images/authentication/twitter.svg @@ -0,0 +1,3 @@ + + + diff --git a/jambotron-ui/src/assets/images/avatar-group.png b/jambotron-ui/src/assets/images/avatar-group.png new file mode 100644 index 0000000..9b08b0c Binary files /dev/null and b/jambotron-ui/src/assets/images/avatar-group.png differ diff --git a/jambotron-ui/src/assets/images/favicon.svg b/jambotron-ui/src/assets/images/favicon.svg new file mode 100644 index 0000000..3caf057 --- /dev/null +++ b/jambotron-ui/src/assets/images/favicon.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/jambotron-ui/src/assets/images/logo-dark.svg b/jambotron-ui/src/assets/images/logo-dark.svg new file mode 100644 index 0000000..f766a59 --- /dev/null +++ b/jambotron-ui/src/assets/images/logo-dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/jambotron-ui/src/assets/images/logo-icon.svg b/jambotron-ui/src/assets/images/logo-icon.svg new file mode 100644 index 0000000..133293d --- /dev/null +++ b/jambotron-ui/src/assets/images/logo-icon.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/jambotron-ui/src/assets/images/logo-white.svg b/jambotron-ui/src/assets/images/logo-white.svg new file mode 100644 index 0000000..5938737 --- /dev/null +++ b/jambotron-ui/src/assets/images/logo-white.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/jambotron-ui/src/assets/images/profile/card.png b/jambotron-ui/src/assets/images/profile/card.png new file mode 100644 index 0000000..065dd12 Binary files /dev/null and b/jambotron-ui/src/assets/images/profile/card.png differ diff --git a/jambotron-ui/src/assets/images/profile/img-profile-bottom.svg b/jambotron-ui/src/assets/images/profile/img-profile-bottom.svg new file mode 100644 index 0000000..98371c8 --- /dev/null +++ b/jambotron-ui/src/assets/images/profile/img-profile-bottom.svg @@ -0,0 +1,3 @@ + + + diff --git a/jambotron-ui/src/assets/images/profile/img-profile-top.svg b/jambotron-ui/src/assets/images/profile/img-profile-top.svg new file mode 100644 index 0000000..3d8e6b7 --- /dev/null +++ b/jambotron-ui/src/assets/images/profile/img-profile-top.svg @@ -0,0 +1,3 @@ + + + diff --git a/jambotron-ui/src/assets/images/user/avatar-1.jpg b/jambotron-ui/src/assets/images/user/avatar-1.jpg new file mode 100644 index 0000000..8009caa Binary files /dev/null and b/jambotron-ui/src/assets/images/user/avatar-1.jpg differ diff --git a/jambotron-ui/src/assets/images/user/avatar-2.jpg b/jambotron-ui/src/assets/images/user/avatar-2.jpg new file mode 100644 index 0000000..4c7f15d Binary files /dev/null and b/jambotron-ui/src/assets/images/user/avatar-2.jpg differ diff --git a/jambotron-ui/src/assets/images/user/avatar-3.jpg b/jambotron-ui/src/assets/images/user/avatar-3.jpg new file mode 100644 index 0000000..6af59c8 Binary files /dev/null and b/jambotron-ui/src/assets/images/user/avatar-3.jpg differ diff --git a/jambotron-ui/src/assets/images/user/avatar-4.jpg b/jambotron-ui/src/assets/images/user/avatar-4.jpg new file mode 100644 index 0000000..7df1e09 Binary files /dev/null and b/jambotron-ui/src/assets/images/user/avatar-4.jpg differ diff --git a/jambotron-ui/src/assets/images/user/avatar-5.jpg b/jambotron-ui/src/assets/images/user/avatar-5.jpg new file mode 100644 index 0000000..8bc2ca2 Binary files /dev/null and b/jambotron-ui/src/assets/images/user/avatar-5.jpg differ diff --git a/jambotron-ui/src/index.html b/jambotron-ui/src/index.html index 702379c..42711ff 100644 --- a/jambotron-ui/src/index.html +++ b/jambotron-ui/src/index.html @@ -5,13 +5,11 @@ JambotronUi - - - + - + diff --git a/jambotron-ui/src/main.server.ts b/jambotron-ui/src/main.server.ts new file mode 100644 index 0000000..154ce1c --- /dev/null +++ b/jambotron-ui/src/main.server.ts @@ -0,0 +1,7 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { App } from './app/app'; +import { config } from './app/app.config.server'; + +const bootstrap = () => bootstrapApplication(App, config); + +export default bootstrap; diff --git a/jambotron-ui/src/main.ts b/jambotron-ui/src/main.ts index 47f663d..5df75f9 100644 --- a/jambotron-ui/src/main.ts +++ b/jambotron-ui/src/main.ts @@ -1,15 +1,6 @@ import { bootstrapApplication } from '@angular/platform-browser'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { appConfig } from './app/app.config'; +import { App } from './app/app'; -import {AppModule} from './app/app.module'; - -//import('@angular/animations/browser') - -platformBrowserDynamic().bootstrapModule(AppModule) - - .catch( - // err => console.error(err) - (e) => { - console.error(e.message); - } - ); +bootstrapApplication(App, appConfig) + .catch((err) => console.error(err)); diff --git a/jambotron-ui/src/scss/bootstrap/bootstrap.scss b/jambotron-ui/src/scss/bootstrap/bootstrap.scss new file mode 100644 index 0000000..4f81fac --- /dev/null +++ b/jambotron-ui/src/scss/bootstrap/bootstrap.scss @@ -0,0 +1,34 @@ +@import '../../../node_modules/bootstrap/scss/maps'; +@import '../../../node_modules/bootstrap/scss/mixins'; +@import '../../../node_modules/bootstrap/scss/root'; +@import '../../../node_modules/bootstrap/scss/reboot'; +@import '../../../node_modules/bootstrap/scss/type'; +@import '../../../node_modules/bootstrap/scss/images'; +@import '../../../node_modules/bootstrap/scss/containers'; +@import '../../../node_modules/bootstrap/scss/grid'; +@import '../../../node_modules/bootstrap/scss/tables'; +@import '../../../node_modules/bootstrap/scss/forms'; +@import '../../../node_modules/bootstrap/scss/buttons'; +@import '../../../node_modules/bootstrap/scss/transitions'; +@import '../../../node_modules/bootstrap/scss/dropdown'; +@import '../../../node_modules/bootstrap/scss/button-group'; +@import '../../../node_modules/bootstrap/scss/nav'; +@import '../../../node_modules/bootstrap/scss/navbar'; +@import '../../../node_modules/bootstrap/scss/card'; +@import '../../../node_modules/bootstrap/scss/accordion'; +@import '../../../node_modules/bootstrap/scss/breadcrumb'; +@import '../../../node_modules/bootstrap/scss/pagination'; +@import '../../../node_modules/bootstrap/scss/badge'; +@import '../../../node_modules/bootstrap/scss/alert'; +@import '../../../node_modules/bootstrap/scss/progress'; +@import '../../../node_modules/bootstrap/scss/list-group'; +@import '../../../node_modules/bootstrap/scss/close'; +@import '../../../node_modules/bootstrap/scss/toasts'; +@import '../../../node_modules/bootstrap/scss/modal'; +@import '../../../node_modules/bootstrap/scss/tooltip'; +@import '../../../node_modules/bootstrap/scss/popover'; +@import '../../../node_modules/bootstrap/scss/carousel'; +@import '../../../node_modules/bootstrap/scss/spinners'; +@import '../../../node_modules/bootstrap/scss/offcanvas'; +@import '../../../node_modules/bootstrap/scss/placeholders'; +@import '../../../node_modules/bootstrap/scss/helpers'; diff --git a/jambotron-ui/src/scss/fonts/inter/Inter-Bold.woff b/jambotron-ui/src/scss/fonts/inter/Inter-Bold.woff new file mode 100644 index 0000000..61e1c25 Binary files /dev/null and b/jambotron-ui/src/scss/fonts/inter/Inter-Bold.woff differ diff --git a/jambotron-ui/src/scss/fonts/inter/Inter-Bold.woff2 b/jambotron-ui/src/scss/fonts/inter/Inter-Bold.woff2 new file mode 100644 index 0000000..6c401bb Binary files /dev/null and b/jambotron-ui/src/scss/fonts/inter/Inter-Bold.woff2 differ diff --git a/jambotron-ui/src/scss/fonts/inter/Inter-Medium.woff b/jambotron-ui/src/scss/fonts/inter/Inter-Medium.woff new file mode 100644 index 0000000..8c36a63 Binary files /dev/null and b/jambotron-ui/src/scss/fonts/inter/Inter-Medium.woff differ diff --git a/jambotron-ui/src/scss/fonts/inter/Inter-Medium.woff2 b/jambotron-ui/src/scss/fonts/inter/Inter-Medium.woff2 new file mode 100644 index 0000000..3b31d33 Binary files /dev/null and b/jambotron-ui/src/scss/fonts/inter/Inter-Medium.woff2 differ diff --git a/jambotron-ui/src/scss/fonts/inter/Inter-Regular.woff b/jambotron-ui/src/scss/fonts/inter/Inter-Regular.woff new file mode 100644 index 0000000..7d587c4 Binary files /dev/null and b/jambotron-ui/src/scss/fonts/inter/Inter-Regular.woff differ diff --git a/jambotron-ui/src/scss/fonts/inter/Inter-Regular.woff2 b/jambotron-ui/src/scss/fonts/inter/Inter-Regular.woff2 new file mode 100644 index 0000000..d5ffd2a Binary files /dev/null and b/jambotron-ui/src/scss/fonts/inter/Inter-Regular.woff2 differ diff --git a/jambotron-ui/src/scss/fonts/inter/Inter-SemiBold.woff b/jambotron-ui/src/scss/fonts/inter/Inter-SemiBold.woff new file mode 100644 index 0000000..99df06c Binary files /dev/null and b/jambotron-ui/src/scss/fonts/inter/Inter-SemiBold.woff differ diff --git a/jambotron-ui/src/scss/fonts/inter/Inter-SemiBold.woff2 b/jambotron-ui/src/scss/fonts/inter/Inter-SemiBold.woff2 new file mode 100644 index 0000000..df746af Binary files /dev/null and b/jambotron-ui/src/scss/fonts/inter/Inter-SemiBold.woff2 differ diff --git a/jambotron-ui/src/scss/fonts/inter/inter.css b/jambotron-ui/src/scss/fonts/inter/inter.css new file mode 100644 index 0000000..c0baa77 --- /dev/null +++ b/jambotron-ui/src/scss/fonts/inter/inter.css @@ -0,0 +1,39 @@ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: + url('Inter-Regular.woff2?v=3.13') format('woff2'), + url('Inter-Regular.woff?v=3.13') format('woff'); +} + +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: + url('Inter-Medium.woff2?v=3.13') format('woff2'), + url('Inter-Medium.woff?v=3.13') format('woff'); +} + +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: + url('Inter-SemiBold.woff2?v=3.13') format('woff2'), + url('Inter-SemiBold.woff?v=3.13') format('woff'); +} + +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: + url('Inter-Bold.woff2?v=3.13') format('woff2'), + url('Inter-Bold.woff?v=3.13') format('woff'); +} diff --git a/jambotron-ui/src/scss/fonts/tabler-icons.min.css b/jambotron-ui/src/scss/fonts/tabler-icons.min.css new file mode 100644 index 0000000..e672ead --- /dev/null +++ b/jambotron-ui/src/scss/fonts/tabler-icons.min.css @@ -0,0 +1,3927 @@ +/*! + * Tabler Icons 1.41.1 by tabler - https://tabler.io + * License - https://github.com/tabler/tabler-icons/blob/master/LICENSE + */ +@font-face { + font-family: tabler-icons; + font-style: normal; + font-weight: 400; + src: url(tabler/tabler-icons.eot); + src: + url(tabler/tabler-icons.eot?#iefix) format('embedded-opentype'), + url(tabler/tabler-icons.woff2) format('woff2'), + url(tabler/tabler-icons.woff) format('woff'), + url(tabler/tabler-icons.ttf) format('truetype'), + url(tabler/tabler-icons.svg#tabler-icons) format('svg'); +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + @font-face { + font-family: tabler-icons; + src: url(tabler/tabler-icons.svg#tabler-icons) format('svg'); + } +} +.ti { + font-family: tabler-icons !important; + speak: none; + font-style: normal; + font-weight: 400; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.ti-2fa:before { + content: '\eca0'; +} +.ti-3d-cube-sphere:before { + content: '\ecd7'; +} +.ti-a-b:before { + content: '\ec36'; +} +.ti-access-point:before { + content: '\ed1b'; +} +.ti-access-point-off:before { + content: '\ed1a'; +} +.ti-accessible:before { + content: '\eba9'; +} +.ti-activity:before { + content: '\ed23'; +} +.ti-ad:before { + content: '\ea02'; +} +.ti-ad-2:before { + content: '\ef1f'; +} +.ti-adjustments:before { + content: '\ea03'; +} +.ti-adjustments-alt:before { + content: '\ec37'; +} +.ti-adjustments-horizontal:before { + content: '\ec38'; +} +.ti-aerial-lift:before { + content: '\edfe'; +} +.ti-affiliate:before { + content: '\edff'; +} +.ti-alarm:before { + content: '\ea04'; +} +.ti-alert-circle:before { + content: '\ea05'; +} +.ti-alert-octagon:before { + content: '\ecc6'; +} +.ti-alert-triangle:before { + content: '\ea06'; +} +.ti-alien:before { + content: '\ebde'; +} +.ti-align-center:before { + content: '\ea07'; +} +.ti-align-justified:before { + content: '\ea08'; +} +.ti-align-left:before { + content: '\ea09'; +} +.ti-align-right:before { + content: '\ea0a'; +} +.ti-ambulance:before { + content: '\ebf5'; +} +.ti-anchor:before { + content: '\eb76'; +} +.ti-angle:before { + content: '\ef20'; +} +.ti-antenna-bars-1:before { + content: '\ecc7'; +} +.ti-antenna-bars-2:before { + content: '\ecc8'; +} +.ti-antenna-bars-3:before { + content: '\ecc9'; +} +.ti-antenna-bars-4:before { + content: '\ecca'; +} +.ti-antenna-bars-5:before { + content: '\eccb'; +} +.ti-aperture:before { + content: '\eb58'; +} +.ti-apple:before { + content: '\ef21'; +} +.ti-apps:before { + content: '\ebb6'; +} +.ti-archive:before { + content: '\ea0b'; +} +.ti-arrow-back:before { + content: '\ea0c'; +} +.ti-arrow-back-up:before { + content: '\eb77'; +} +.ti-arrow-bar-down:before { + content: '\ea0d'; +} +.ti-arrow-bar-left:before { + content: '\ea0e'; +} +.ti-arrow-bar-right:before { + content: '\ea0f'; +} +.ti-arrow-bar-to-down:before { + content: '\ec88'; +} +.ti-arrow-bar-to-left:before { + content: '\ec89'; +} +.ti-arrow-bar-to-right:before { + content: '\ec8a'; +} +.ti-arrow-bar-to-up:before { + content: '\ec8b'; +} +.ti-arrow-bar-up:before { + content: '\ea10'; +} +.ti-arrow-big-down:before { + content: '\edda'; +} +.ti-arrow-big-left:before { + content: '\eddb'; +} +.ti-arrow-big-right:before { + content: '\eddc'; +} +.ti-arrow-big-top:before { + content: '\eddd'; +} +.ti-arrow-bottom-bar:before { + content: '\ed98'; +} +.ti-arrow-bottom-circle:before { + content: '\ed99'; +} +.ti-arrow-bottom-square:before { + content: '\ed9a'; +} +.ti-arrow-bottom-tail:before { + content: '\ed9b'; +} +.ti-arrow-down:before { + content: '\ea16'; +} +.ti-arrow-down-circle:before { + content: '\ea11'; +} +.ti-arrow-down-left:before { + content: '\ea13'; +} +.ti-arrow-down-left-circle:before { + content: '\ea12'; +} +.ti-arrow-down-right:before { + content: '\ea15'; +} +.ti-arrow-down-right-circle:before { + content: '\ea14'; +} +.ti-arrow-forward:before { + content: '\ea17'; +} +.ti-arrow-forward-up:before { + content: '\eb78'; +} +.ti-arrow-left:before { + content: '\ea19'; +} +.ti-arrow-left-bar:before { + content: '\ed9c'; +} +.ti-arrow-left-circle:before { + content: '\ea18'; +} +.ti-arrow-left-square:before { + content: '\ed9d'; +} +.ti-arrow-left-tail:before { + content: '\ed9e'; +} +.ti-arrow-loop-left:before { + content: '\ed9f'; +} +.ti-arrow-loop-right:before { + content: '\eda0'; +} +.ti-arrow-narrow-down:before { + content: '\ea1a'; +} +.ti-arrow-narrow-left:before { + content: '\ea1b'; +} +.ti-arrow-narrow-right:before { + content: '\ea1c'; +} +.ti-arrow-narrow-up:before { + content: '\ea1d'; +} +.ti-arrow-ramp-left:before { + content: '\ed3c'; +} +.ti-arrow-ramp-right:before { + content: '\ed3d'; +} +.ti-arrow-right:before { + content: '\ea1f'; +} +.ti-arrow-right-bar:before { + content: '\eda1'; +} +.ti-arrow-right-circle:before { + content: '\ea1e'; +} +.ti-arrow-right-square:before { + content: '\eda2'; +} +.ti-arrow-right-tail:before { + content: '\eda3'; +} +.ti-arrow-top-bar:before { + content: '\eda4'; +} +.ti-arrow-top-circle:before { + content: '\eda5'; +} +.ti-arrow-top-square:before { + content: '\eda6'; +} +.ti-arrow-top-tail:before { + content: '\eda7'; +} +.ti-arrow-up:before { + content: '\ea25'; +} +.ti-arrow-up-circle:before { + content: '\ea20'; +} +.ti-arrow-up-left:before { + content: '\ea22'; +} +.ti-arrow-up-left-circle:before { + content: '\ea21'; +} +.ti-arrow-up-right:before { + content: '\ea24'; +} +.ti-arrow-up-right-circle:before { + content: '\ea23'; +} +.ti-arrow-wave-left-down:before { + content: '\eda8'; +} +.ti-arrow-wave-left-up:before { + content: '\eda9'; +} +.ti-arrow-wave-right-down:before { + content: '\edaa'; +} +.ti-arrow-wave-right-up:before { + content: '\edab'; +} +.ti-arrows-diagonal:before { + content: '\ea27'; +} +.ti-arrows-diagonal-2:before { + content: '\ea26'; +} +.ti-arrows-double-ne-sw:before { + content: '\edde'; +} +.ti-arrows-double-nw-se:before { + content: '\eddf'; +} +.ti-arrows-double-se-nw:before { + content: '\ede0'; +} +.ti-arrows-double-sw-ne:before { + content: '\ede1'; +} +.ti-arrows-down:before { + content: '\edad'; +} +.ti-arrows-down-up:before { + content: '\edac'; +} +.ti-arrows-horizontal:before { + content: '\eb59'; +} +.ti-arrows-join:before { + content: '\edaf'; +} +.ti-arrows-join-2:before { + content: '\edae'; +} +.ti-arrows-left:before { + content: '\edb1'; +} +.ti-arrows-left-down:before { + content: '\ee00'; +} +.ti-arrows-left-right:before { + content: '\edb0'; +} +.ti-arrows-maximize:before { + content: '\ea28'; +} +.ti-arrows-minimize:before { + content: '\ea29'; +} +.ti-arrows-right:before { + content: '\edb3'; +} +.ti-arrows-right-down:before { + content: '\ee01'; +} +.ti-arrows-right-left:before { + content: '\edb2'; +} +.ti-arrows-sort:before { + content: '\eb5a'; +} +.ti-arrows-split:before { + content: '\edb5'; +} +.ti-arrows-split-2:before { + content: '\edb4'; +} +.ti-arrows-up:before { + content: '\edb7'; +} +.ti-arrows-up-down:before { + content: '\edb6'; +} +.ti-arrows-up-left:before { + content: '\ee02'; +} +.ti-arrows-up-right:before { + content: '\ee03'; +} +.ti-arrows-vertical:before { + content: '\eb5b'; +} +.ti-artboard:before { + content: '\ea2a'; +} +.ti-aspect-ratio:before { + content: '\ed30'; +} +.ti-at:before { + content: '\ea2b'; +} +.ti-atom:before { + content: '\eb79'; +} +.ti-atom-2:before { + content: '\ebdf'; +} +.ti-award:before { + content: '\ea2c'; +} +.ti-backhoe:before { + content: '\ed86'; +} +.ti-backspace:before { + content: '\ea2d'; +} +.ti-ball-american-football:before { + content: '\ee04'; +} +.ti-ball-basketball:before { + content: '\ec28'; +} +.ti-ball-bowling:before { + content: '\ec29'; +} +.ti-ball-football:before { + content: '\ee06'; +} +.ti-ball-football-off:before { + content: '\ee05'; +} +.ti-ball-tennis:before { + content: '\ec2a'; +} +.ti-ball-volleyball:before { + content: '\ec2b'; +} +.ti-ban:before { + content: '\ea2e'; +} +.ti-bandage:before { + content: '\eb7a'; +} +.ti-barcode:before { + content: '\ebc6'; +} +.ti-basket:before { + content: '\ebe1'; +} +.ti-battery:before { + content: '\ea34'; +} +.ti-battery-1:before { + content: '\ea2f'; +} +.ti-battery-2:before { + content: '\ea30'; +} +.ti-battery-3:before { + content: '\ea31'; +} +.ti-battery-4:before { + content: '\ea32'; +} +.ti-battery-automotive:before { + content: '\ee07'; +} +.ti-battery-charging:before { + content: '\ea33'; +} +.ti-battery-off:before { + content: '\ed1c'; +} +.ti-bed:before { + content: '\eb5c'; +} +.ti-bell:before { + content: '\ea35'; +} +.ti-bell-minus:before { + content: '\ede2'; +} +.ti-bell-off:before { + content: '\ece9'; +} +.ti-bell-plus:before { + content: '\ede3'; +} +.ti-bell-ringing:before { + content: '\ed07'; +} +.ti-bell-ringing-2:before { + content: '\ede4'; +} +.ti-bell-x:before { + content: '\ede5'; +} +.ti-bike:before { + content: '\ea36'; +} +.ti-binary:before { + content: '\ee08'; +} +.ti-biohazard:before { + content: '\ecb8'; +} +.ti-blockquote:before { + content: '\ee09'; +} +.ti-bluetooth:before { + content: '\ea37'; +} +.ti-bluetooth-connected:before { + content: '\ecea'; +} +.ti-bluetooth-off:before { + content: '\eceb'; +} +.ti-bold:before { + content: '\eb7b'; +} +.ti-bolt:before { + content: '\ea38'; +} +.ti-bolt-off:before { + content: '\ecec'; +} +.ti-bone:before { + content: '\edb8'; +} +.ti-book:before { + content: '\ea39'; +} +.ti-bookmark:before { + content: '\ea3a'; +} +.ti-bookmark-off:before { + content: '\eced'; +} +.ti-bookmarks:before { + content: '\ed08'; +} +.ti-border-all:before { + content: '\ea3b'; +} +.ti-border-bottom:before { + content: '\ea3c'; +} +.ti-border-horizontal:before { + content: '\ea3d'; +} +.ti-border-inner:before { + content: '\ea3e'; +} +.ti-border-left:before { + content: '\ea3f'; +} +.ti-border-none:before { + content: '\ea40'; +} +.ti-border-outer:before { + content: '\ea41'; +} +.ti-border-radius:before { + content: '\eb7c'; +} +.ti-border-right:before { + content: '\ea42'; +} +.ti-border-style:before { + content: '\ee0a'; +} +.ti-border-style-2:before { + content: '\ef22'; +} +.ti-border-top:before { + content: '\ea43'; +} +.ti-border-vertical:before { + content: '\ea44'; +} +.ti-bottle:before { + content: '\ef0b'; +} +.ti-box:before { + content: '\ea45'; +} +.ti-box-margin:before { + content: '\ee0b'; +} +.ti-box-model:before { + content: '\ee0c'; +} +.ti-box-model-2:before { + content: '\ef23'; +} +.ti-box-multiple:before { + content: '\ee17'; +} +.ti-box-multiple-0:before { + content: '\ee0d'; +} +.ti-box-multiple-1:before { + content: '\ee0e'; +} +.ti-box-multiple-2:before { + content: '\ee0f'; +} +.ti-box-multiple-3:before { + content: '\ee10'; +} +.ti-box-multiple-4:before { + content: '\ee11'; +} +.ti-box-multiple-5:before { + content: '\ee12'; +} +.ti-box-multiple-6:before { + content: '\ee13'; +} +.ti-box-multiple-7:before { + content: '\ee14'; +} +.ti-box-multiple-8:before { + content: '\ee15'; +} +.ti-box-multiple-9:before { + content: '\ee16'; +} +.ti-box-padding:before { + content: '\ee18'; +} +.ti-braces:before { + content: '\ebcc'; +} +.ti-brackets:before { + content: '\ebcd'; +} +.ti-brand-airbnb:before { + content: '\ed68'; +} +.ti-brand-android:before { + content: '\ec16'; +} +.ti-brand-apple:before { + content: '\ec17'; +} +.ti-brand-apple-arcade:before { + content: '\ed69'; +} +.ti-brand-appstore:before { + content: '\ed24'; +} +.ti-brand-asana:before { + content: '\edc5'; +} +.ti-brand-behance:before { + content: '\ec6e'; +} +.ti-brand-bing:before { + content: '\edc6'; +} +.ti-brand-bitbucket:before { + content: '\edc7'; +} +.ti-brand-booking:before { + content: '\edc8'; +} +.ti-brand-chrome:before { + content: '\ec18'; +} +.ti-brand-codepen:before { + content: '\ec6f'; +} +.ti-brand-codesandbox:before { + content: '\ed6a'; +} +.ti-brand-css3:before { + content: '\ed6b'; +} +.ti-brand-deviantart:before { + content: '\ecfb'; +} +.ti-brand-discord:before { + content: '\ece3'; +} +.ti-brand-disqus:before { + content: '\edc9'; +} +.ti-brand-docker:before { + content: '\edca'; +} +.ti-brand-dribbble:before { + content: '\ec19'; +} +.ti-brand-edge:before { + content: '\ecfc'; +} +.ti-brand-facebook:before { + content: '\ec1a'; +} +.ti-brand-figma:before { + content: '\ec93'; +} +.ti-brand-firefox:before { + content: '\ecfd'; +} +.ti-brand-flickr:before { + content: '\ecfe'; +} +.ti-brand-foursquare:before { + content: '\ecff'; +} +.ti-brand-framer:before { + content: '\ec1b'; +} +.ti-brand-github:before { + content: '\ec1c'; +} +.ti-brand-gitlab:before { + content: '\ec1d'; +} +.ti-brand-google:before { + content: '\ec1f'; +} +.ti-brand-google-analytics:before { + content: '\edcb'; +} +.ti-brand-google-drive:before { + content: '\ec1e'; +} +.ti-brand-google-play:before { + content: '\ed25'; +} +.ti-brand-gravatar:before { + content: '\edcc'; +} +.ti-brand-hipchat:before { + content: '\edcd'; +} +.ti-brand-html5:before { + content: '\ed6c'; +} +.ti-brand-instagram:before { + content: '\ec20'; +} +.ti-brand-javascript:before { + content: '\ef0c'; +} +.ti-brand-kickstarter:before { + content: '\edce'; +} +.ti-brand-kotlin:before { + content: '\ed6d'; +} +.ti-brand-linkedin:before { + content: '\ec8c'; +} +.ti-brand-medium:before { + content: '\ec70'; +} +.ti-brand-messenger:before { + content: '\ec71'; +} +.ti-brand-netflix:before { + content: '\edcf'; +} +.ti-brand-open-source:before { + content: '\edd0'; +} +.ti-brand-opera:before { + content: '\ec21'; +} +.ti-brand-pagekit:before { + content: '\edd1'; +} +.ti-brand-patreon:before { + content: '\edd2'; +} +.ti-brand-paypal:before { + content: '\ec22'; +} +.ti-brand-pinterest:before { + content: '\ec8d'; +} +.ti-brand-pocket:before { + content: '\ed00'; +} +.ti-brand-producthunt:before { + content: '\edd3'; +} +.ti-brand-python:before { + content: '\ed01'; +} +.ti-brand-reddit:before { + content: '\ec8e'; +} +.ti-brand-safari:before { + content: '\ec23'; +} +.ti-brand-sass:before { + content: '\edd4'; +} +.ti-brand-sentry:before { + content: '\edd5'; +} +.ti-brand-shazam:before { + content: '\edd6'; +} +.ti-brand-sketch:before { + content: '\ec24'; +} +.ti-brand-skype:before { + content: '\ed02'; +} +.ti-brand-slack:before { + content: '\ec72'; +} +.ti-brand-snapchat:before { + content: '\ec25'; +} +.ti-brand-soundcloud:before { + content: '\ed6e'; +} +.ti-brand-spotify:before { + content: '\ed03'; +} +.ti-brand-steam:before { + content: '\ed6f'; +} +.ti-brand-stripe:before { + content: '\edd7'; +} +.ti-brand-tabler:before { + content: '\ec8f'; +} +.ti-brand-tailwind:before { + content: '\eca1'; +} +.ti-brand-telegram:before { + content: '\ec26'; +} +.ti-brand-tidal:before { + content: '\ed70'; +} +.ti-brand-tiktok:before { + content: '\ec73'; +} +.ti-brand-tinder:before { + content: '\ed71'; +} +.ti-brand-tumblr:before { + content: '\ed04'; +} +.ti-brand-twitch:before { + content: '\ed05'; +} +.ti-brand-twitter:before { + content: '\ec27'; +} +.ti-brand-unsplash:before { + content: '\edd8'; +} +.ti-brand-vercel:before { + content: '\ef24'; +} +.ti-brand-vimeo:before { + content: '\ed06'; +} +.ti-brand-vk:before { + content: '\ed72'; +} +.ti-brand-whatsapp:before { + content: '\ec74'; +} +.ti-brand-windows:before { + content: '\ecd8'; +} +.ti-brand-yahoo:before { + content: '\ed73'; +} +.ti-brand-ycombinator:before { + content: '\edd9'; +} +.ti-brand-youtube:before { + content: '\ec90'; +} +.ti-briefcase:before { + content: '\ea46'; +} +.ti-brightness:before { + content: '\eb7f'; +} +.ti-brightness-2:before { + content: '\ee19'; +} +.ti-brightness-down:before { + content: '\eb7d'; +} +.ti-brightness-half:before { + content: '\ee1a'; +} +.ti-brightness-up:before { + content: '\eb7e'; +} +.ti-browser:before { + content: '\ebb7'; +} +.ti-brush:before { + content: '\ebb8'; +} +.ti-bucket:before { + content: '\ea47'; +} +.ti-bug:before { + content: '\ea48'; +} +.ti-building:before { + content: '\ea4f'; +} +.ti-building-arch:before { + content: '\ea49'; +} +.ti-building-bank:before { + content: '\ebe2'; +} +.ti-building-bridge:before { + content: '\ea4b'; +} +.ti-building-bridge-2:before { + content: '\ea4a'; +} +.ti-building-carousel:before { + content: '\ed87'; +} +.ti-building-castle:before { + content: '\ed88'; +} +.ti-building-church:before { + content: '\ea4c'; +} +.ti-building-community:before { + content: '\ebf6'; +} +.ti-building-cottage:before { + content: '\ee1b'; +} +.ti-building-factory:before { + content: '\ee1c'; +} +.ti-building-fortress:before { + content: '\ed89'; +} +.ti-building-hospital:before { + content: '\ea4d'; +} +.ti-building-lighthouse:before { + content: '\ed8a'; +} +.ti-building-monument:before { + content: '\ed26'; +} +.ti-building-pavilon:before { + content: '\ebf7'; +} +.ti-building-skyscraper:before { + content: '\ec39'; +} +.ti-building-store:before { + content: '\ea4e'; +} +.ti-building-warehouse:before { + content: '\ebe3'; +} +.ti-bulb:before { + content: '\ea51'; +} +.ti-bulb-off:before { + content: '\ea50'; +} +.ti-bulldozer:before { + content: '\ee1d'; +} +.ti-bus:before { + content: '\ebe4'; +} +.ti-businessplan:before { + content: '\ee1e'; +} +.ti-calculator:before { + content: '\eb80'; +} +.ti-calendar:before { + content: '\ea53'; +} +.ti-calendar-event:before { + content: '\ea52'; +} +.ti-calendar-minus:before { + content: '\ebb9'; +} +.ti-calendar-off:before { + content: '\ee1f'; +} +.ti-calendar-plus:before { + content: '\ebba'; +} +.ti-calendar-stats:before { + content: '\ee20'; +} +.ti-calendar-time:before { + content: '\ee21'; +} +.ti-camera:before { + content: '\ea54'; +} +.ti-camera-minus:before { + content: '\ec3a'; +} +.ti-camera-off:before { + content: '\ecee'; +} +.ti-camera-plus:before { + content: '\ec3b'; +} +.ti-camera-rotate:before { + content: '\ee22'; +} +.ti-camera-selfie:before { + content: '\ee23'; +} +.ti-candy:before { + content: '\ef0d'; +} +.ti-capture:before { + content: '\ec3c'; +} +.ti-car:before { + content: '\ebbb'; +} +.ti-car-crane:before { + content: '\ef25'; +} +.ti-caravan:before { + content: '\ec7c'; +} +.ti-cardboards:before { + content: '\ed74'; +} +.ti-caret-down:before { + content: '\eb5d'; +} +.ti-caret-left:before { + content: '\eb5e'; +} +.ti-caret-right:before { + content: '\eb5f'; +} +.ti-caret-up:before { + content: '\eb60'; +} +.ti-cash:before { + content: '\ea55'; +} +.ti-cash-banknote:before { + content: '\ee25'; +} +.ti-cash-banknote-off:before { + content: '\ee24'; +} +.ti-cast:before { + content: '\ea56'; +} +.ti-ce:before { + content: '\ed75'; +} +.ti-certificate:before { + content: '\ed76'; +} +.ti-charging-pile:before { + content: '\ee26'; +} +.ti-chart-arcs:before { + content: '\ee28'; +} +.ti-chart-arcs-3:before { + content: '\ee27'; +} +.ti-chart-area:before { + content: '\ea58'; +} +.ti-chart-area-line:before { + content: '\ea57'; +} +.ti-chart-arrows:before { + content: '\ee2a'; +} +.ti-chart-arrows-vertical:before { + content: '\ee29'; +} +.ti-chart-bar:before { + content: '\ea59'; +} +.ti-chart-bubble:before { + content: '\ec75'; +} +.ti-chart-candle:before { + content: '\ea5a'; +} +.ti-chart-circles:before { + content: '\ee2b'; +} +.ti-chart-donut:before { + content: '\ea5b'; +} +.ti-chart-donut-2:before { + content: '\ee2c'; +} +.ti-chart-donut-3:before { + content: '\ee2d'; +} +.ti-chart-donut-4:before { + content: '\ee2e'; +} +.ti-chart-dots:before { + content: '\ee2f'; +} +.ti-chart-infographic:before { + content: '\ee30'; +} +.ti-chart-line:before { + content: '\ea5c'; +} +.ti-chart-pie:before { + content: '\ea5d'; +} +.ti-chart-pie-2:before { + content: '\ee31'; +} +.ti-chart-pie-3:before { + content: '\ee32'; +} +.ti-chart-pie-4:before { + content: '\ee33'; +} +.ti-chart-radar:before { + content: '\ed77'; +} +.ti-check:before { + content: '\ea5e'; +} +.ti-checkbox:before { + content: '\eba6'; +} +.ti-checks:before { + content: '\ebaa'; +} +.ti-cheese:before { + content: '\ef26'; +} +.ti-chevron-down:before { + content: '\ea5f'; +} +.ti-chevron-down-left:before { + content: '\ed09'; +} +.ti-chevron-down-right:before { + content: '\ed0a'; +} +.ti-chevron-left:before { + content: '\ea60'; +} +.ti-chevron-right:before { + content: '\ea61'; +} +.ti-chevron-up:before { + content: '\ea62'; +} +.ti-chevron-up-left:before { + content: '\ed0b'; +} +.ti-chevron-up-right:before { + content: '\ed0c'; +} +.ti-chevrons-down:before { + content: '\ea63'; +} +.ti-chevrons-down-left:before { + content: '\ed0d'; +} +.ti-chevrons-down-right:before { + content: '\ed0e'; +} +.ti-chevrons-left:before { + content: '\ea64'; +} +.ti-chevrons-right:before { + content: '\ea65'; +} +.ti-chevrons-up:before { + content: '\ea66'; +} +.ti-chevrons-up-left:before { + content: '\ed0f'; +} +.ti-chevrons-up-right:before { + content: '\ed10'; +} +.ti-christmas-tree:before { + content: '\ed78'; +} +.ti-circle:before { + content: '\ea6b'; +} +.ti-circle-0:before { + content: '\ee34'; +} +.ti-circle-1:before { + content: '\ee35'; +} +.ti-circle-2:before { + content: '\ee36'; +} +.ti-circle-3:before { + content: '\ee37'; +} +.ti-circle-4:before { + content: '\ee38'; +} +.ti-circle-5:before { + content: '\ee39'; +} +.ti-circle-6:before { + content: '\ee3a'; +} +.ti-circle-7:before { + content: '\ee3b'; +} +.ti-circle-8:before { + content: '\ee3c'; +} +.ti-circle-9:before { + content: '\ee3d'; +} +.ti-circle-check:before { + content: '\ea67'; +} +.ti-circle-dashed:before { + content: '\ed27'; +} +.ti-circle-dotted:before { + content: '\ed28'; +} +.ti-circle-half:before { + content: '\ee3f'; +} +.ti-circle-half-vertical:before { + content: '\ee3e'; +} +.ti-circle-minus:before { + content: '\ea68'; +} +.ti-circle-off:before { + content: '\ee40'; +} +.ti-circle-plus:before { + content: '\ea69'; +} +.ti-circle-square:before { + content: '\ece4'; +} +.ti-circle-x:before { + content: '\ea6a'; +} +.ti-circles:before { + content: '\ece5'; +} +.ti-clear-all:before { + content: '\ee41'; +} +.ti-clear-formatting:before { + content: '\ebe5'; +} +.ti-click:before { + content: '\ebbc'; +} +.ti-clipboard:before { + content: '\ea6f'; +} +.ti-clipboard-check:before { + content: '\ea6c'; +} +.ti-clipboard-list:before { + content: '\ea6d'; +} +.ti-clipboard-x:before { + content: '\ea6e'; +} +.ti-clock:before { + content: '\ea70'; +} +.ti-cloud:before { + content: '\ea76'; +} +.ti-cloud-download:before { + content: '\ea71'; +} +.ti-cloud-fog:before { + content: '\ecd9'; +} +.ti-cloud-off:before { + content: '\ed3e'; +} +.ti-cloud-rain:before { + content: '\ea72'; +} +.ti-cloud-snow:before { + content: '\ea73'; +} +.ti-cloud-storm:before { + content: '\ea74'; +} +.ti-cloud-upload:before { + content: '\ea75'; +} +.ti-code:before { + content: '\ea77'; +} +.ti-code-minus:before { + content: '\ee42'; +} +.ti-code-plus:before { + content: '\ee43'; +} +.ti-coffee:before { + content: '\ef0e'; +} +.ti-coin:before { + content: '\eb82'; +} +.ti-color-picker:before { + content: '\ebe6'; +} +.ti-color-swatch:before { + content: '\eb61'; +} +.ti-column-insert-left:before { + content: '\ee44'; +} +.ti-column-insert-right:before { + content: '\ee45'; +} +.ti-columns:before { + content: '\eb83'; +} +.ti-comet:before { + content: '\ec76'; +} +.ti-command:before { + content: '\ea78'; +} +.ti-compass:before { + content: '\ea79'; +} +.ti-confetti:before { + content: '\ee46'; +} +.ti-container:before { + content: '\ee47'; +} +.ti-contrast:before { + content: '\ec4e'; +} +.ti-cookie:before { + content: '\ef0f'; +} +.ti-copy:before { + content: '\ea7a'; +} +.ti-copyleft:before { + content: '\ec3d'; +} +.ti-copyright:before { + content: '\ea7b'; +} +.ti-corner-down-left:before { + content: '\ea7c'; +} +.ti-corner-down-left-double:before { + content: '\ee48'; +} +.ti-corner-down-right:before { + content: '\ea7d'; +} +.ti-corner-down-right-double:before { + content: '\ee49'; +} +.ti-corner-left-down:before { + content: '\ea7e'; +} +.ti-corner-left-down-double:before { + content: '\ee4a'; +} +.ti-corner-left-up:before { + content: '\ea7f'; +} +.ti-corner-left-up-double:before { + content: '\ee4b'; +} +.ti-corner-right-down:before { + content: '\ea80'; +} +.ti-corner-right-down-double:before { + content: '\ee4c'; +} +.ti-corner-right-up:before { + content: '\ea81'; +} +.ti-corner-right-up-double:before { + content: '\ee4d'; +} +.ti-corner-up-left:before { + content: '\ea82'; +} +.ti-corner-up-left-double:before { + content: '\ee4e'; +} +.ti-corner-up-right:before { + content: '\ea83'; +} +.ti-corner-up-right-double:before { + content: '\ee4f'; +} +.ti-crane:before { + content: '\ef27'; +} +.ti-credit-card:before { + content: '\ea84'; +} +.ti-credit-card-off:before { + content: '\ed11'; +} +.ti-crop:before { + content: '\ea85'; +} +.ti-crosshair:before { + content: '\ec3e'; +} +.ti-crown:before { + content: '\ed12'; +} +.ti-crown-off:before { + content: '\ee50'; +} +.ti-cup:before { + content: '\ef28'; +} +.ti-curly-loop:before { + content: '\ecda'; +} +.ti-currency-bahraini:before { + content: '\ee51'; +} +.ti-currency-bath:before { + content: '\ee52'; +} +.ti-currency-bitcoin:before { + content: '\ebab'; +} +.ti-currency-cent:before { + content: '\ee53'; +} +.ti-currency-dinar:before { + content: '\ee54'; +} +.ti-currency-dirham:before { + content: '\ee55'; +} +.ti-currency-dollar:before { + content: '\eb84'; +} +.ti-currency-dollar-australian:before { + content: '\ee56'; +} +.ti-currency-dollar-canadian:before { + content: '\ee57'; +} +.ti-currency-dollar-singapore:before { + content: '\ee58'; +} +.ti-currency-ethereum:before { + content: '\ee59'; +} +.ti-currency-euro:before { + content: '\eb85'; +} +.ti-currency-forint:before { + content: '\ee5a'; +} +.ti-currency-frank:before { + content: '\ee5b'; +} +.ti-currency-krone-czech:before { + content: '\ee5c'; +} +.ti-currency-krone-danish:before { + content: '\ee5d'; +} +.ti-currency-krone-swedish:before { + content: '\ee5e'; +} +.ti-currency-leu:before { + content: '\ee5f'; +} +.ti-currency-lira:before { + content: '\ee60'; +} +.ti-currency-litecoin:before { + content: '\ee61'; +} +.ti-currency-naira:before { + content: '\ee62'; +} +.ti-currency-pound:before { + content: '\ebac'; +} +.ti-currency-real:before { + content: '\ee63'; +} +.ti-currency-renminbi:before { + content: '\ee64'; +} +.ti-currency-ripple:before { + content: '\ee65'; +} +.ti-currency-riyal:before { + content: '\ee66'; +} +.ti-currency-rubel:before { + content: '\ee67'; +} +.ti-currency-rupee:before { + content: '\ebad'; +} +.ti-currency-shekel:before { + content: '\ee68'; +} +.ti-currency-taka:before { + content: '\ee69'; +} +.ti-currency-tugrik:before { + content: '\ee6a'; +} +.ti-currency-won:before { + content: '\ee6b'; +} +.ti-currency-yen:before { + content: '\ebae'; +} +.ti-currency-zloty:before { + content: '\ee6c'; +} +.ti-current-location:before { + content: '\ecef'; +} +.ti-cursor-text:before { + content: '\ee6d'; +} +.ti-cut:before { + content: '\ea86'; +} +.ti-dashboard:before { + content: '\ea87'; +} +.ti-database:before { + content: '\ea88'; +} +.ti-database-export:before { + content: '\ee6e'; +} +.ti-database-import:before { + content: '\ee6f'; +} +.ti-database-off:before { + content: '\ee70'; +} +.ti-details:before { + content: '\ee71'; +} +.ti-device-analytics:before { + content: '\ee72'; +} +.ti-device-audio-tape:before { + content: '\ee73'; +} +.ti-device-cctv:before { + content: '\ee74'; +} +.ti-device-computer-camera:before { + content: '\ee76'; +} +.ti-device-computer-camera-off:before { + content: '\ee75'; +} +.ti-device-desktop:before { + content: '\ea89'; +} +.ti-device-desktop-analytics:before { + content: '\ee77'; +} +.ti-device-desktop-off:before { + content: '\ee78'; +} +.ti-device-floppy:before { + content: '\eb62'; +} +.ti-device-gamepad:before { + content: '\eb63'; +} +.ti-device-laptop:before { + content: '\eb64'; +} +.ti-device-mobile:before { + content: '\ea8a'; +} +.ti-device-mobile-message:before { + content: '\ee79'; +} +.ti-device-mobile-rotated:before { + content: '\ecdb'; +} +.ti-device-mobile-vibration:before { + content: '\eb86'; +} +.ti-device-speaker:before { + content: '\ea8b'; +} +.ti-device-tablet:before { + content: '\ea8c'; +} +.ti-device-tv:before { + content: '\ea8d'; +} +.ti-device-watch:before { + content: '\ebf9'; +} +.ti-devices:before { + content: '\eb87'; +} +.ti-devices-2:before { + content: '\ed29'; +} +.ti-devices-pc:before { + content: '\ee7a'; +} +.ti-diamond:before { + content: '\eb65'; +} +.ti-dice:before { + content: '\eb66'; +} +.ti-dimensions:before { + content: '\ee7b'; +} +.ti-direction:before { + content: '\ebfb'; +} +.ti-direction-horizontal:before { + content: '\ebfa'; +} +.ti-directions:before { + content: '\ea8e'; +} +.ti-disabled:before { + content: '\ea8f'; +} +.ti-disabled-2:before { + content: '\ebaf'; +} +.ti-disc:before { + content: '\ea90'; +} +.ti-discount:before { + content: '\ebbd'; +} +.ti-discount-2:before { + content: '\ee7c'; +} +.ti-divide:before { + content: '\ed5c'; +} +.ti-dna:before { + content: '\ee7d'; +} +.ti-dog-bowl:before { + content: '\ef29'; +} +.ti-dots:before { + content: '\ea95'; +} +.ti-dots-circle-horizontal:before { + content: '\ea91'; +} +.ti-dots-diagonal:before { + content: '\ea93'; +} +.ti-dots-diagonal-2:before { + content: '\ea92'; +} +.ti-dots-vertical:before { + content: '\ea94'; +} +.ti-download:before { + content: '\ea96'; +} +.ti-drag-drop:before { + content: '\eb89'; +} +.ti-drag-drop-2:before { + content: '\eb88'; +} +.ti-drone:before { + content: '\ed79'; +} +.ti-drone-off:before { + content: '\ee7e'; +} +.ti-droplet:before { + content: '\ea97'; +} +.ti-droplet-filled:before { + content: '\ee80'; +} +.ti-droplet-filled-2:before { + content: '\ee7f'; +} +.ti-droplet-half:before { + content: '\ee82'; +} +.ti-droplet-half-2:before { + content: '\ee81'; +} +.ti-droplet-off:before { + content: '\ee83'; +} +.ti-ear:before { + content: '\ebce'; +} +.ti-ear-off:before { + content: '\ee84'; +} +.ti-edit:before { + content: '\ea98'; +} +.ti-edit-circle:before { + content: '\ee85'; +} +.ti-egg:before { + content: '\eb8a'; +} +.ti-emphasis:before { + content: '\ebcf'; +} +.ti-equal:before { + content: '\ee87'; +} +.ti-equal-not:before { + content: '\ee86'; +} +.ti-eraser:before { + content: '\eb8b'; +} +.ti-exchange:before { + content: '\ebe7'; +} +.ti-exposure:before { + content: '\eb8c'; +} +.ti-external-link:before { + content: '\ea99'; +} +.ti-eye:before { + content: '\ea9a'; +} +.ti-eye-check:before { + content: '\ee88'; +} +.ti-eye-off:before { + content: '\ecf0'; +} +.ti-eyeglass:before { + content: '\ee8a'; +} +.ti-eyeglass-2:before { + content: '\ee89'; +} +.ti-face-id:before { + content: '\ea9b'; +} +.ti-fall:before { + content: '\ecb9'; +} +.ti-feather:before { + content: '\ee8b'; +} +.ti-fence:before { + content: '\ef2a'; +} +.ti-file:before { + content: '\eaa4'; +} +.ti-file-alert:before { + content: '\ede6'; +} +.ti-file-analytics:before { + content: '\ede7'; +} +.ti-file-certificate:before { + content: '\ed4d'; +} +.ti-file-check:before { + content: '\ea9c'; +} +.ti-file-code:before { + content: '\ebd0'; +} +.ti-file-code-2:before { + content: '\ede8'; +} +.ti-file-diff:before { + content: '\ecf1'; +} +.ti-file-dislike:before { + content: '\ed2a'; +} +.ti-file-download:before { + content: '\ea9d'; +} +.ti-file-export:before { + content: '\ede9'; +} +.ti-file-horizontal:before { + content: '\ebb0'; +} +.ti-file-import:before { + content: '\edea'; +} +.ti-file-info:before { + content: '\edec'; +} +.ti-file-invoice:before { + content: '\eb67'; +} +.ti-file-like:before { + content: '\ed2b'; +} +.ti-file-minus:before { + content: '\ea9e'; +} +.ti-file-music:before { + content: '\ea9f'; +} +.ti-file-off:before { + content: '\ecf2'; +} +.ti-file-phone:before { + content: '\ecdc'; +} +.ti-file-plus:before { + content: '\eaa0'; +} +.ti-file-report:before { + content: '\eded'; +} +.ti-file-search:before { + content: '\ed5d'; +} +.ti-file-shredder:before { + content: '\eaa1'; +} +.ti-file-symlink:before { + content: '\ed53'; +} +.ti-file-text:before { + content: '\eaa2'; +} +.ti-file-upload:before { + content: '\ec91'; +} +.ti-file-x:before { + content: '\eaa3'; +} +.ti-file-zip:before { + content: '\ed4e'; +} +.ti-files:before { + content: '\edef'; +} +.ti-files-off:before { + content: '\edee'; +} +.ti-filter:before { + content: '\eaa5'; +} +.ti-filter-off:before { + content: '\ed2c'; +} +.ti-fingerprint:before { + content: '\ebd1'; +} +.ti-firetruck:before { + content: '\ebe8'; +} +.ti-fish:before { + content: '\ef2b'; +} +.ti-flag:before { + content: '\eaa6'; +} +.ti-flag-2:before { + content: '\ee8c'; +} +.ti-flag-3:before { + content: '\ee8d'; +} +.ti-flame:before { + content: '\ec2c'; +} +.ti-flare:before { + content: '\ee8e'; +} +.ti-flask:before { + content: '\ebd2'; +} +.ti-flip-horizontal:before { + content: '\eaa7'; +} +.ti-flip-vertical:before { + content: '\eaa8'; +} +.ti-float-center:before { + content: '\ebb1'; +} +.ti-float-left:before { + content: '\ebb2'; +} +.ti-float-none:before { + content: '\ed13'; +} +.ti-float-right:before { + content: '\ebb3'; +} +.ti-focus:before { + content: '\eb8d'; +} +.ti-focus-2:before { + content: '\ebd3'; +} +.ti-fold:before { + content: '\ed56'; +} +.ti-fold-down:before { + content: '\ed54'; +} +.ti-fold-up:before { + content: '\ed55'; +} +.ti-folder:before { + content: '\eaad'; +} +.ti-folder-minus:before { + content: '\eaaa'; +} +.ti-folder-off:before { + content: '\ed14'; +} +.ti-folder-plus:before { + content: '\eaab'; +} +.ti-folder-x:before { + content: '\eaac'; +} +.ti-folders:before { + content: '\eaae'; +} +.ti-forbid:before { + content: '\ebd5'; +} +.ti-forbid-2:before { + content: '\ebd4'; +} +.ti-forklift:before { + content: '\ebe9'; +} +.ti-forms:before { + content: '\ee8f'; +} +.ti-frame:before { + content: '\eaaf'; +} +.ti-friends:before { + content: '\eab0'; +} +.ti-gas-station:before { + content: '\ec7d'; +} +.ti-gauge:before { + content: '\eab1'; +} +.ti-geometry:before { + content: '\ee90'; +} +.ti-ghost:before { + content: '\eb8e'; +} +.ti-gift:before { + content: '\eb68'; +} +.ti-git-branch:before { + content: '\eab2'; +} +.ti-git-commit:before { + content: '\eab3'; +} +.ti-git-compare:before { + content: '\eab4'; +} +.ti-git-fork:before { + content: '\eb8f'; +} +.ti-git-merge:before { + content: '\eab5'; +} +.ti-git-pull-request:before { + content: '\eab6'; +} +.ti-glass:before { + content: '\eab8'; +} +.ti-glass-full:before { + content: '\eab7'; +} +.ti-glass-off:before { + content: '\ee91'; +} +.ti-globe:before { + content: '\eab9'; +} +.ti-golf:before { + content: '\ed8c'; +} +.ti-gps:before { + content: '\ed7a'; +} +.ti-grain:before { + content: '\ee92'; +} +.ti-grid-dots:before { + content: '\eaba'; +} +.ti-grip-horizontal:before { + content: '\ec00'; +} +.ti-grip-vertical:before { + content: '\ec01'; +} +.ti-growth:before { + content: '\ee93'; +} +.ti-h-1:before { + content: '\ec94'; +} +.ti-h-2:before { + content: '\ec95'; +} +.ti-h-3:before { + content: '\ec96'; +} +.ti-h-4:before { + content: '\ec97'; +} +.ti-h-5:before { + content: '\ec98'; +} +.ti-h-6:before { + content: '\ec99'; +} +.ti-hand-finger:before { + content: '\ee94'; +} +.ti-hand-little-finger:before { + content: '\ee95'; +} +.ti-hand-middle-finger:before { + content: '\ec2d'; +} +.ti-hand-off:before { + content: '\ed15'; +} +.ti-hand-ring-finger:before { + content: '\ee96'; +} +.ti-hand-rock:before { + content: '\ee97'; +} +.ti-hand-stop:before { + content: '\ec2e'; +} +.ti-hand-three-fingers:before { + content: '\ee98'; +} +.ti-hand-two-fingers:before { + content: '\ee99'; +} +.ti-hanger:before { + content: '\ee9a'; +} +.ti-hash:before { + content: '\eabc'; +} +.ti-heading:before { + content: '\ee9b'; +} +.ti-headphones:before { + content: '\eabd'; +} +.ti-headphones-off:before { + content: '\ed1d'; +} +.ti-headset:before { + content: '\eb90'; +} +.ti-heart:before { + content: '\eabe'; +} +.ti-heart-broken:before { + content: '\ecba'; +} +.ti-helicopter:before { + content: '\ed8e'; +} +.ti-helicopter-landing:before { + content: '\ed8d'; +} +.ti-help:before { + content: '\eabf'; +} +.ti-hexagon:before { + content: '\ec02'; +} +.ti-hexagon-off:before { + content: '\ee9c'; +} +.ti-hierarchy:before { + content: '\ee9e'; +} +.ti-hierarchy-2:before { + content: '\ee9d'; +} +.ti-history:before { + content: '\ebea'; +} +.ti-home:before { + content: '\eac1'; +} +.ti-home-2:before { + content: '\eac0'; +} +.ti-ice-cream:before { + content: '\eac2'; +} +.ti-ice-cream-2:before { + content: '\ee9f'; +} +.ti-id:before { + content: '\eac3'; +} +.ti-inbox:before { + content: '\eac4'; +} +.ti-indent-decrease:before { + content: '\eb91'; +} +.ti-indent-increase:before { + content: '\eb92'; +} +.ti-infinity:before { + content: '\eb69'; +} +.ti-info-circle:before { + content: '\eac5'; +} +.ti-info-square:before { + content: '\eac6'; +} +.ti-italic:before { + content: '\eb93'; +} +.ti-jump-rope:before { + content: '\ed8f'; +} +.ti-karate:before { + content: '\ed32'; +} +.ti-key:before { + content: '\eac7'; +} +.ti-keyboard:before { + content: '\ebd6'; +} +.ti-keyboard-hide:before { + content: '\ec7e'; +} +.ti-keyboard-off:before { + content: '\eea0'; +} +.ti-keyboard-show:before { + content: '\ec7f'; +} +.ti-language:before { + content: '\ebbe'; +} +.ti-layers-difference:before { + content: '\eac8'; +} +.ti-layers-intersect:before { + content: '\eac9'; +} +.ti-layers-linked:before { + content: '\eea1'; +} +.ti-layers-subtract:before { + content: '\eaca'; +} +.ti-layers-union:before { + content: '\eacb'; +} +.ti-layout:before { + content: '\eadb'; +} +.ti-layout-2:before { + content: '\eacc'; +} +.ti-layout-align-bottom:before { + content: '\eacd'; +} +.ti-layout-align-center:before { + content: '\eace'; +} +.ti-layout-align-left:before { + content: '\eacf'; +} +.ti-layout-align-middle:before { + content: '\ead0'; +} +.ti-layout-align-right:before { + content: '\ead1'; +} +.ti-layout-align-top:before { + content: '\ead2'; +} +.ti-layout-bottombar:before { + content: '\ead3'; +} +.ti-layout-cards:before { + content: '\ec13'; +} +.ti-layout-columns:before { + content: '\ead4'; +} +.ti-layout-distribute-horizontal:before { + content: '\ead5'; +} +.ti-layout-distribute-vertical:before { + content: '\ead6'; +} +.ti-layout-grid:before { + content: '\edba'; +} +.ti-layout-grid-add:before { + content: '\edb9'; +} +.ti-layout-kanban:before { + content: '\ec3f'; +} +.ti-layout-list:before { + content: '\ec14'; +} +.ti-layout-navbar:before { + content: '\ead7'; +} +.ti-layout-rows:before { + content: '\ead8'; +} +.ti-layout-sidebar:before { + content: '\eada'; +} +.ti-layout-sidebar-right:before { + content: '\ead9'; +} +.ti-leaf:before { + content: '\ed4f'; +} +.ti-lego:before { + content: '\eadc'; +} +.ti-lemon:before { + content: '\ef10'; +} +.ti-letter-a:before { + content: '\ec50'; +} +.ti-letter-b:before { + content: '\ec51'; +} +.ti-letter-c:before { + content: '\ec52'; +} +.ti-letter-case:before { + content: '\eea5'; +} +.ti-letter-case-lower:before { + content: '\eea2'; +} +.ti-letter-case-toggle:before { + content: '\eea3'; +} +.ti-letter-case-upper:before { + content: '\eea4'; +} +.ti-letter-d:before { + content: '\ec53'; +} +.ti-letter-e:before { + content: '\ec54'; +} +.ti-letter-f:before { + content: '\ec55'; +} +.ti-letter-g:before { + content: '\ec56'; +} +.ti-letter-h:before { + content: '\ec57'; +} +.ti-letter-i:before { + content: '\ec58'; +} +.ti-letter-j:before { + content: '\ec59'; +} +.ti-letter-k:before { + content: '\ec5a'; +} +.ti-letter-l:before { + content: '\ec5b'; +} +.ti-letter-m:before { + content: '\ec5c'; +} +.ti-letter-n:before { + content: '\ec5d'; +} +.ti-letter-o:before { + content: '\ec5e'; +} +.ti-letter-p:before { + content: '\ec5f'; +} +.ti-letter-q:before { + content: '\ec60'; +} +.ti-letter-r:before { + content: '\ec61'; +} +.ti-letter-s:before { + content: '\ec62'; +} +.ti-letter-spacing:before { + content: '\eea6'; +} +.ti-letter-t:before { + content: '\ec63'; +} +.ti-letter-u:before { + content: '\ec64'; +} +.ti-letter-v:before { + content: '\ec65'; +} +.ti-letter-w:before { + content: '\ec66'; +} +.ti-letter-x:before { + content: '\ec67'; +} +.ti-letter-y:before { + content: '\ec68'; +} +.ti-letter-z:before { + content: '\ec69'; +} +.ti-letters-case:before { + content: '\ec6a'; +} +.ti-license:before { + content: '\ebc0'; +} +.ti-lifebuoy:before { + content: '\eadd'; +} +.ti-line:before { + content: '\ec40'; +} +.ti-line-dashed:before { + content: '\eea7'; +} +.ti-line-dotted:before { + content: '\eea8'; +} +.ti-line-height:before { + content: '\eb94'; +} +.ti-link:before { + content: '\eade'; +} +.ti-list:before { + content: '\eb6b'; +} +.ti-list-check:before { + content: '\eb6a'; +} +.ti-list-numbers:before { + content: '\ef11'; +} +.ti-list-search:before { + content: '\eea9'; +} +.ti-live-photo:before { + content: '\eadf'; +} +.ti-live-view:before { + content: '\ec6b'; +} +.ti-loader:before { + content: '\eca3'; +} +.ti-loader-quarter:before { + content: '\eca2'; +} +.ti-location:before { + content: '\eae0'; +} +.ti-lock:before { + content: '\eae2'; +} +.ti-lock-access:before { + content: '\eeaa'; +} +.ti-lock-off:before { + content: '\ed1e'; +} +.ti-lock-open:before { + content: '\eae1'; +} +.ti-login:before { + content: '\eba7'; +} +.ti-logout:before { + content: '\eba8'; +} +.ti-macro:before { + content: '\eeab'; +} +.ti-magnet:before { + content: '\eae3'; +} +.ti-mail:before { + content: '\eae5'; +} +.ti-mail-forward:before { + content: '\eeac'; +} +.ti-mail-opened:before { + content: '\eae4'; +} +.ti-mailbox:before { + content: '\eead'; +} +.ti-man:before { + content: '\eae6'; +} +.ti-manual-gearbox:before { + content: '\ed7b'; +} +.ti-map:before { + content: '\eae9'; +} +.ti-map-2:before { + content: '\eae7'; +} +.ti-map-pin:before { + content: '\eae8'; +} +.ti-map-pin-off:before { + content: '\ecf3'; +} +.ti-map-pins:before { + content: '\ed5e'; +} +.ti-markdown:before { + content: '\ec41'; +} +.ti-marquee:before { + content: '\ec77'; +} +.ti-marquee-2:before { + content: '\eeae'; +} +.ti-mars:before { + content: '\ec80'; +} +.ti-mask:before { + content: '\eeb0'; +} +.ti-mask-off:before { + content: '\eeaf'; +} +.ti-massage:before { + content: '\eeb1'; +} +.ti-math:before { + content: '\ebeb'; +} +.ti-math-function:before { + content: '\eeb2'; +} +.ti-math-symbols:before { + content: '\eeb3'; +} +.ti-maximize:before { + content: '\eaea'; +} +.ti-meat:before { + content: '\ef12'; +} +.ti-medal:before { + content: '\ec78'; +} +.ti-medical-cross:before { + content: '\ec2f'; +} +.ti-menu:before { + content: '\eaeb'; +} +.ti-menu-2:before { + content: '\ec42'; +} +.ti-message:before { + content: '\eaef'; +} +.ti-message-2:before { + content: '\eaec'; +} +.ti-message-circle:before { + content: '\eaed'; +} +.ti-message-circle-2:before { + content: '\ed3f'; +} +.ti-message-circle-off:before { + content: '\ed40'; +} +.ti-message-dots:before { + content: '\eaee'; +} +.ti-message-off:before { + content: '\ed41'; +} +.ti-message-plus:before { + content: '\ec9a'; +} +.ti-message-report:before { + content: '\ec9b'; +} +.ti-messages:before { + content: '\eb6c'; +} +.ti-messages-off:before { + content: '\ed42'; +} +.ti-microphone:before { + content: '\eaf0'; +} +.ti-microphone-2:before { + content: '\ef2c'; +} +.ti-microphone-off:before { + content: '\ed16'; +} +.ti-milk:before { + content: '\ef13'; +} +.ti-minimize:before { + content: '\eaf1'; +} +.ti-minus:before { + content: '\eaf2'; +} +.ti-minus-vertical:before { + content: '\eeb4'; +} +.ti-mist:before { + content: '\ec30'; +} +.ti-mood-boy:before { + content: '\ed2d'; +} +.ti-mood-confuzed:before { + content: '\eaf3'; +} +.ti-mood-crazy-happy:before { + content: '\ed90'; +} +.ti-mood-cry:before { + content: '\ecbb'; +} +.ti-mood-empty:before { + content: '\eeb5'; +} +.ti-mood-happy:before { + content: '\eaf4'; +} +.ti-mood-kid:before { + content: '\ec03'; +} +.ti-mood-neutral:before { + content: '\eaf5'; +} +.ti-mood-sad:before { + content: '\eaf6'; +} +.ti-mood-smile:before { + content: '\eaf7'; +} +.ti-mood-suprised:before { + content: '\ec04'; +} +.ti-mood-tongue:before { + content: '\eb95'; +} +.ti-moon:before { + content: '\eaf8'; +} +.ti-moon-2:before { + content: '\ece6'; +} +.ti-moon-stars:before { + content: '\ece7'; +} +.ti-moped:before { + content: '\ecbc'; +} +.ti-motorbike:before { + content: '\eeb6'; +} +.ti-mouse:before { + content: '\eaf9'; +} +.ti-movie:before { + content: '\eafa'; +} +.ti-mug:before { + content: '\eafb'; +} +.ti-mushroom:before { + content: '\ef14'; +} +.ti-music:before { + content: '\eafc'; +} +.ti-new-section:before { + content: '\ebc1'; +} +.ti-news:before { + content: '\eafd'; +} +.ti-nfc:before { + content: '\eeb7'; +} +.ti-note:before { + content: '\eb6d'; +} +.ti-notebook:before { + content: '\eb96'; +} +.ti-notes:before { + content: '\eb6e'; +} +.ti-notification:before { + content: '\eafe'; +} +.ti-number-0:before { + content: '\edf0'; +} +.ti-number-1:before { + content: '\edf1'; +} +.ti-number-2:before { + content: '\edf2'; +} +.ti-number-3:before { + content: '\edf3'; +} +.ti-number-4:before { + content: '\edf4'; +} +.ti-number-5:before { + content: '\edf5'; +} +.ti-number-6:before { + content: '\edf6'; +} +.ti-number-7:before { + content: '\edf7'; +} +.ti-number-8:before { + content: '\edf8'; +} +.ti-number-9:before { + content: '\edf9'; +} +.ti-octagon:before { + content: '\ecbd'; +} +.ti-octagon-off:before { + content: '\eeb8'; +} +.ti-old:before { + content: '\eeb9'; +} +.ti-olympics:before { + content: '\eeba'; +} +.ti-omega:before { + content: '\eb97'; +} +.ti-outlet:before { + content: '\ebd7'; +} +.ti-overline:before { + content: '\eebb'; +} +.ti-package:before { + content: '\eaff'; +} +.ti-pacman:before { + content: '\eebc'; +} +.ti-page-break:before { + content: '\ec81'; +} +.ti-paint:before { + content: '\eb00'; +} +.ti-palette:before { + content: '\eb01'; +} +.ti-panorama-horizontal:before { + content: '\ed33'; +} +.ti-panorama-vertical:before { + content: '\ed34'; +} +.ti-paperclip:before { + content: '\eb02'; +} +.ti-parachute:before { + content: '\ed7c'; +} +.ti-parentheses:before { + content: '\ebd8'; +} +.ti-parking:before { + content: '\eb03'; +} +.ti-peace:before { + content: '\ecbe'; +} +.ti-pencil:before { + content: '\eb04'; +} +.ti-pennant:before { + content: '\ed7d'; +} +.ti-pepper:before { + content: '\ef15'; +} +.ti-percentage:before { + content: '\ecf4'; +} +.ti-perspective:before { + content: '\eebd'; +} +.ti-phone:before { + content: '\eb09'; +} +.ti-phone-call:before { + content: '\eb05'; +} +.ti-phone-calling:before { + content: '\ec43'; +} +.ti-phone-check:before { + content: '\ec05'; +} +.ti-phone-incoming:before { + content: '\eb06'; +} +.ti-phone-off:before { + content: '\ecf5'; +} +.ti-phone-outgoing:before { + content: '\eb07'; +} +.ti-phone-pause:before { + content: '\eb08'; +} +.ti-phone-plus:before { + content: '\ec06'; +} +.ti-phone-x:before { + content: '\ec07'; +} +.ti-photo:before { + content: '\eb0a'; +} +.ti-photo-off:before { + content: '\ecf6'; +} +.ti-physotherapist:before { + content: '\eebe'; +} +.ti-picture-in-picture:before { + content: '\ed35'; +} +.ti-picture-in-picture-off:before { + content: '\ed43'; +} +.ti-picture-in-picture-on:before { + content: '\ed44'; +} +.ti-pill:before { + content: '\ec44'; +} +.ti-pin:before { + content: '\ec9c'; +} +.ti-pinned:before { + content: '\ed60'; +} +.ti-pinned-off:before { + content: '\ed5f'; +} +.ti-pizza:before { + content: '\edbb'; +} +.ti-plane:before { + content: '\eb6f'; +} +.ti-plane-arrival:before { + content: '\eb99'; +} +.ti-plane-departure:before { + content: '\eb9a'; +} +.ti-planet:before { + content: '\ec08'; +} +.ti-plant:before { + content: '\ed50'; +} +.ti-plant-2:before { + content: '\ed7e'; +} +.ti-play-card:before { + content: '\eebf'; +} +.ti-player-pause:before { + content: '\ed45'; +} +.ti-player-play:before { + content: '\ed46'; +} +.ti-player-record:before { + content: '\ed47'; +} +.ti-player-skip-back:before { + content: '\ed48'; +} +.ti-player-skip-forward:before { + content: '\ed49'; +} +.ti-player-stop:before { + content: '\ed4a'; +} +.ti-player-track-next:before { + content: '\ed4b'; +} +.ti-player-track-prev:before { + content: '\ed4c'; +} +.ti-playlist:before { + content: '\eec0'; +} +.ti-plug:before { + content: '\ebd9'; +} +.ti-plus:before { + content: '\eb0b'; +} +.ti-point:before { + content: '\eb0c'; +} +.ti-pokeball:before { + content: '\eec1'; +} +.ti-polaroid:before { + content: '\eec2'; +} +.ti-pool:before { + content: '\ed91'; +} +.ti-power:before { + content: '\eb0d'; +} +.ti-pray:before { + content: '\ecbf'; +} +.ti-presentation:before { + content: '\eb70'; +} +.ti-presentation-analytics:before { + content: '\eec3'; +} +.ti-printer:before { + content: '\eb0e'; +} +.ti-prompt:before { + content: '\eb0f'; +} +.ti-propeller:before { + content: '\eec4'; +} +.ti-puzzle:before { + content: '\eb10'; +} +.ti-pyramid:before { + content: '\eec5'; +} +.ti-qrcode:before { + content: '\eb11'; +} +.ti-question-mark:before { + content: '\ec9d'; +} +.ti-radio:before { + content: '\ef2d'; +} +.ti-radioactive:before { + content: '\ecc0'; +} +.ti-radius-bottom-left:before { + content: '\eec6'; +} +.ti-radius-bottom-right:before { + content: '\eec7'; +} +.ti-radius-top-left:before { + content: '\eec8'; +} +.ti-radius-top-right:before { + content: '\eec9'; +} +.ti-rainbow:before { + content: '\edbc'; +} +.ti-receipt:before { + content: '\edfd'; +} +.ti-receipt-2:before { + content: '\edfa'; +} +.ti-receipt-off:before { + content: '\edfb'; +} +.ti-receipt-refund:before { + content: '\edfc'; +} +.ti-receipt-tax:before { + content: '\edbd'; +} +.ti-recharging:before { + content: '\eeca'; +} +.ti-record-mail:before { + content: '\eb12'; +} +.ti-rectangle:before { + content: '\ed37'; +} +.ti-rectangle-vertical:before { + content: '\ed36'; +} +.ti-recycle:before { + content: '\eb9b'; +} +.ti-refresh:before { + content: '\eb13'; +} +.ti-refresh-alert:before { + content: '\ed57'; +} +.ti-registered:before { + content: '\eb14'; +} +.ti-relation-many-to-many:before { + content: '\ed7f'; +} +.ti-relation-one-to-many:before { + content: '\ed80'; +} +.ti-relation-one-to-one:before { + content: '\ed81'; +} +.ti-repeat:before { + content: '\eb72'; +} +.ti-repeat-once:before { + content: '\eb71'; +} +.ti-replace:before { + content: '\ebc7'; +} +.ti-report:before { + content: '\eece'; +} +.ti-report-analytics:before { + content: '\eecb'; +} +.ti-report-medical:before { + content: '\eecc'; +} +.ti-report-money:before { + content: '\eecd'; +} +.ti-resize:before { + content: '\eecf'; +} +.ti-ripple:before { + content: '\ed82'; +} +.ti-road-sign:before { + content: '\ecdd'; +} +.ti-rocket:before { + content: '\ec45'; +} +.ti-rotate:before { + content: '\eb16'; +} +.ti-rotate-2:before { + content: '\ebb4'; +} +.ti-rotate-clockwise:before { + content: '\eb15'; +} +.ti-rotate-clockwise-2:before { + content: '\ebb5'; +} +.ti-rotate-rectangle:before { + content: '\ec15'; +} +.ti-route:before { + content: '\eb17'; +} +.ti-router:before { + content: '\eb18'; +} +.ti-row-insert-bottom:before { + content: '\eed0'; +} +.ti-row-insert-top:before { + content: '\eed1'; +} +.ti-rss:before { + content: '\eb19'; +} +.ti-ruler:before { + content: '\eb1a'; +} +.ti-ruler-2:before { + content: '\eed2'; +} +.ti-run:before { + content: '\ec82'; +} +.ti-sailboat:before { + content: '\ec83'; +} +.ti-salt:before { + content: '\ef16'; +} +.ti-satellite:before { + content: '\eed3'; +} +.ti-sausage:before { + content: '\ef17'; +} +.ti-scale:before { + content: '\ebc2'; +} +.ti-scan:before { + content: '\ebc8'; +} +.ti-school:before { + content: '\ecf7'; +} +.ti-scissors:before { + content: '\eb1b'; +} +.ti-scooter:before { + content: '\ec6c'; +} +.ti-scooter-electric:before { + content: '\ecc1'; +} +.ti-screen-share:before { + content: '\ed18'; +} +.ti-screen-share-off:before { + content: '\ed17'; +} +.ti-scuba-mask:before { + content: '\eed4'; +} +.ti-search:before { + content: '\eb1c'; +} +.ti-section:before { + content: '\eed5'; +} +.ti-seeding:before { + content: '\ed51'; +} +.ti-select:before { + content: '\ec9e'; +} +.ti-selector:before { + content: '\eb1d'; +} +.ti-send:before { + content: '\eb1e'; +} +.ti-separator:before { + content: '\ebda'; +} +.ti-separator-horizontal:before { + content: '\ec79'; +} +.ti-separator-vertical:before { + content: '\ec7a'; +} +.ti-server:before { + content: '\eb1f'; +} +.ti-servicemark:before { + content: '\ec09'; +} +.ti-settings:before { + content: '\eb20'; +} +.ti-settings-automation:before { + content: '\eed6'; +} +.ti-shadow:before { + content: '\eed8'; +} +.ti-shadow-off:before { + content: '\eed7'; +} +.ti-shape:before { + content: '\eb9c'; +} +.ti-shape-2:before { + content: '\eed9'; +} +.ti-shape-3:before { + content: '\eeda'; +} +.ti-share:before { + content: '\eb21'; +} +.ti-shield:before { + content: '\eb24'; +} +.ti-shield-check:before { + content: '\eb22'; +} +.ti-shield-lock:before { + content: '\ed58'; +} +.ti-shield-off:before { + content: '\ecf8'; +} +.ti-shield-x:before { + content: '\eb23'; +} +.ti-ship:before { + content: '\ec84'; +} +.ti-shirt:before { + content: '\ec0a'; +} +.ti-shopping-cart:before { + content: '\eb25'; +} +.ti-shopping-cart-discount:before { + content: '\eedb'; +} +.ti-shopping-cart-off:before { + content: '\eedc'; +} +.ti-shopping-cart-plus:before { + content: '\eedd'; +} +.ti-shopping-cart-x:before { + content: '\eede'; +} +.ti-shredder:before { + content: '\eedf'; +} +.ti-signature:before { + content: '\eee0'; +} +.ti-sitemap:before { + content: '\eb9d'; +} +.ti-skateboard:before { + content: '\ecc2'; +} +.ti-slice:before { + content: '\ebdb'; +} +.ti-slideshow:before { + content: '\ebc9'; +} +.ti-smart-home:before { + content: '\ecde'; +} +.ti-smoking:before { + content: '\ecc4'; +} +.ti-smoking-no:before { + content: '\ecc3'; +} +.ti-snowflake:before { + content: '\ec0b'; +} +.ti-soccer-field:before { + content: '\ed92'; +} +.ti-social:before { + content: '\ebec'; +} +.ti-sock:before { + content: '\eee1'; +} +.ti-sort-ascending:before { + content: '\eb26'; +} +.ti-sort-ascending-2:before { + content: '\eee2'; +} +.ti-sort-ascending-letters:before { + content: '\ef18'; +} +.ti-sort-ascending-numbers:before { + content: '\ef19'; +} +.ti-sort-descending:before { + content: '\eb27'; +} +.ti-sort-descending-2:before { + content: '\eee3'; +} +.ti-sort-descending-letters:before { + content: '\ef1a'; +} +.ti-sort-descending-numbers:before { + content: '\ef1b'; +} +.ti-soup:before { + content: '\ef2e'; +} +.ti-space:before { + content: '\ec0c'; +} +.ti-speakerphone:before { + content: '\ed61'; +} +.ti-speedboat:before { + content: '\ed93'; +} +.ti-sport-billard:before { + content: '\eee4'; +} +.ti-square:before { + content: '\eb2c'; +} +.ti-square-0:before { + content: '\eee5'; +} +.ti-square-1:before { + content: '\eee6'; +} +.ti-square-2:before { + content: '\eee7'; +} +.ti-square-3:before { + content: '\eee8'; +} +.ti-square-4:before { + content: '\eee9'; +} +.ti-square-5:before { + content: '\eeea'; +} +.ti-square-6:before { + content: '\eeeb'; +} +.ti-square-7:before { + content: '\eeec'; +} +.ti-square-8:before { + content: '\eeed'; +} +.ti-square-9:before { + content: '\eeee'; +} +.ti-square-check:before { + content: '\eb28'; +} +.ti-square-dot:before { + content: '\ed59'; +} +.ti-square-forbid:before { + content: '\ed5b'; +} +.ti-square-forbid-2:before { + content: '\ed5a'; +} +.ti-square-minus:before { + content: '\eb29'; +} +.ti-square-off:before { + content: '\eeef'; +} +.ti-square-plus:before { + content: '\eb2a'; +} +.ti-square-root:before { + content: '\eef1'; +} +.ti-square-root-2:before { + content: '\eef0'; +} +.ti-square-rotated:before { + content: '\ecdf'; +} +.ti-square-rotated-off:before { + content: '\eef2'; +} +.ti-square-toggle:before { + content: '\eef4'; +} +.ti-square-toggle-horizontal:before { + content: '\eef3'; +} +.ti-square-x:before { + content: '\eb2b'; +} +.ti-squares-diagonal:before { + content: '\eef5'; +} +.ti-squares-filled:before { + content: '\eef6'; +} +.ti-stack:before { + content: '\eb2d'; +} +.ti-stack-2:before { + content: '\eef7'; +} +.ti-stairs:before { + content: '\eca6'; +} +.ti-stairs-down:before { + content: '\eca4'; +} +.ti-stairs-up:before { + content: '\eca5'; +} +.ti-star:before { + content: '\eb2e'; +} +.ti-star-half:before { + content: '\ed19'; +} +.ti-star-off:before { + content: '\ed62'; +} +.ti-stars:before { + content: '\ed38'; +} +.ti-steering-wheel:before { + content: '\ec7b'; +} +.ti-step-into:before { + content: '\ece0'; +} +.ti-step-out:before { + content: '\ece1'; +} +.ti-stethoscope:before { + content: '\edbe'; +} +.ti-sticker:before { + content: '\eb2f'; +} +.ti-strikethrough:before { + content: '\eb9e'; +} +.ti-submarine:before { + content: '\ed94'; +} +.ti-subscript:before { + content: '\eb9f'; +} +.ti-subtask:before { + content: '\ec9f'; +} +.ti-sum:before { + content: '\eb73'; +} +.ti-sun:before { + content: '\eb30'; +} +.ti-sun-off:before { + content: '\ed63'; +} +.ti-sunrise:before { + content: '\ef1c'; +} +.ti-sunset:before { + content: '\ec31'; +} +.ti-superscript:before { + content: '\eba0'; +} +.ti-swimming:before { + content: '\ec92'; +} +.ti-switch:before { + content: '\eb33'; +} +.ti-switch-2:before { + content: '\edbf'; +} +.ti-switch-3:before { + content: '\edc0'; +} +.ti-switch-horizontal:before { + content: '\eb31'; +} +.ti-switch-vertical:before { + content: '\eb32'; +} +.ti-table:before { + content: '\eba1'; +} +.ti-table-export:before { + content: '\eef8'; +} +.ti-table-import:before { + content: '\eef9'; +} +.ti-table-off:before { + content: '\eefa'; +} +.ti-tag:before { + content: '\eb34'; +} +.ti-tallymark-1:before { + content: '\ec46'; +} +.ti-tallymark-2:before { + content: '\ec47'; +} +.ti-tallymark-3:before { + content: '\ec48'; +} +.ti-tallymark-4:before { + content: '\ec49'; +} +.ti-tallymarks:before { + content: '\ec4a'; +} +.ti-tank:before { + content: '\ed95'; +} +.ti-target:before { + content: '\eb35'; +} +.ti-temperature:before { + content: '\eb38'; +} +.ti-temperature-celsius:before { + content: '\eb36'; +} +.ti-temperature-fahrenheit:before { + content: '\eb37'; +} +.ti-temperature-minus:before { + content: '\ebed'; +} +.ti-temperature-plus:before { + content: '\ebee'; +} +.ti-template:before { + content: '\eb39'; +} +.ti-tent:before { + content: '\eefb'; +} +.ti-terminal:before { + content: '\ebdc'; +} +.ti-terminal-2:before { + content: '\ebef'; +} +.ti-test-pipe:before { + content: '\eb3a'; +} +.ti-text-direction-ltr:before { + content: '\eefc'; +} +.ti-text-direction-rtl:before { + content: '\eefd'; +} +.ti-text-wrap:before { + content: '\ebdd'; +} +.ti-text-wrap-disabled:before { + content: '\eca7'; +} +.ti-thumb-down:before { + content: '\eb3b'; +} +.ti-thumb-up:before { + content: '\eb3c'; +} +.ti-ticket:before { + content: '\eb3d'; +} +.ti-tilt-shift:before { + content: '\eefe'; +} +.ti-tir:before { + content: '\ebf0'; +} +.ti-toggle-left:before { + content: '\eb3e'; +} +.ti-toggle-right:before { + content: '\eb3f'; +} +.ti-tool:before { + content: '\eb40'; +} +.ti-tools:before { + content: '\ebca'; +} +.ti-tools-kitchen:before { + content: '\ed64'; +} +.ti-tools-kitchen-2:before { + content: '\eeff'; +} +.ti-tornado:before { + content: '\ece2'; +} +.ti-tournament:before { + content: '\ecd0'; +} +.ti-track:before { + content: '\ef00'; +} +.ti-tractor:before { + content: '\ec0d'; +} +.ti-trademark:before { + content: '\ec0e'; +} +.ti-traffic-cone:before { + content: '\ec0f'; +} +.ti-traffic-lights:before { + content: '\ed39'; +} +.ti-train:before { + content: '\ed96'; +} +.ti-transfer-in:before { + content: '\ef2f'; +} +.ti-transfer-out:before { + content: '\ef30'; +} +.ti-trash:before { + content: '\eb41'; +} +.ti-trash-off:before { + content: '\ed65'; +} +.ti-tree:before { + content: '\ef01'; +} +.ti-trees:before { + content: '\ec10'; +} +.ti-trending-down:before { + content: '\eb42'; +} +.ti-trending-down-2:before { + content: '\edc1'; +} +.ti-trending-down-3:before { + content: '\edc2'; +} +.ti-trending-up:before { + content: '\eb43'; +} +.ti-trending-up-2:before { + content: '\edc3'; +} +.ti-trending-up-3:before { + content: '\edc4'; +} +.ti-triangle:before { + content: '\eb44'; +} +.ti-triangle-off:before { + content: '\ef02'; +} +.ti-triangle-square-circle:before { + content: '\ece8'; +} +.ti-trident:before { + content: '\ecc5'; +} +.ti-trophy:before { + content: '\eb45'; +} +.ti-truck:before { + content: '\ebc4'; +} +.ti-truck-delivery:before { + content: '\ec4b'; +} +.ti-truck-off:before { + content: '\ef03'; +} +.ti-truck-return:before { + content: '\ec4c'; +} +.ti-typography:before { + content: '\ebc5'; +} +.ti-umbrella:before { + content: '\ebf1'; +} +.ti-underline:before { + content: '\eba2'; +} +.ti-unlink:before { + content: '\eb46'; +} +.ti-upload:before { + content: '\eb47'; +} +.ti-urgent:before { + content: '\eb48'; +} +.ti-user:before { + content: '\eb4d'; +} +.ti-user-check:before { + content: '\eb49'; +} +.ti-user-exclamation:before { + content: '\ec12'; +} +.ti-user-minus:before { + content: '\eb4a'; +} +.ti-user-off:before { + content: '\ecf9'; +} +.ti-user-plus:before { + content: '\eb4b'; +} +.ti-user-x:before { + content: '\eb4c'; +} +.ti-users:before { + content: '\ebf2'; +} +.ti-vaccine:before { + content: '\ef04'; +} +.ti-variable:before { + content: '\ef05'; +} +.ti-vector:before { + content: '\eca9'; +} +.ti-vector-beizer-2:before { + content: '\ed3a'; +} +.ti-vector-bezier:before { + content: '\ef1d'; +} +.ti-vector-triangle:before { + content: '\eca8'; +} +.ti-venus:before { + content: '\ec86'; +} +.ti-versions:before { + content: '\ed52'; +} +.ti-video:before { + content: '\ed22'; +} +.ti-video-minus:before { + content: '\ed1f'; +} +.ti-video-off:before { + content: '\ed20'; +} +.ti-video-plus:before { + content: '\ed21'; +} +.ti-view-360:before { + content: '\ed84'; +} +.ti-viewfinder:before { + content: '\eb4e'; +} +.ti-viewport-narrow:before { + content: '\ebf3'; +} +.ti-viewport-wide:before { + content: '\ebf4'; +} +.ti-virus:before { + content: '\eb74'; +} +.ti-virus-off:before { + content: '\ed66'; +} +.ti-virus-search:before { + content: '\ed67'; +} +.ti-vocabulary:before { + content: '\ef1e'; +} +.ti-volume:before { + content: '\eb51'; +} +.ti-volume-2:before { + content: '\eb4f'; +} +.ti-volume-3:before { + content: '\eb50'; +} +.ti-walk:before { + content: '\ec87'; +} +.ti-wallet:before { + content: '\eb75'; +} +.ti-wand:before { + content: '\ebcb'; +} +.ti-wave-saw-tool:before { + content: '\ecd3'; +} +.ti-wave-sine:before { + content: '\ecd4'; +} +.ti-wave-square:before { + content: '\ecd5'; +} +.ti-wifi:before { + content: '\eb52'; +} +.ti-wifi-0:before { + content: '\eba3'; +} +.ti-wifi-1:before { + content: '\eba4'; +} +.ti-wifi-2:before { + content: '\eba5'; +} +.ti-wifi-off:before { + content: '\ecfa'; +} +.ti-wind:before { + content: '\ec34'; +} +.ti-windmill:before { + content: '\ed85'; +} +.ti-window:before { + content: '\ef06'; +} +.ti-wiper:before { + content: '\ecab'; +} +.ti-wiper-wash:before { + content: '\ecaa'; +} +.ti-woman:before { + content: '\eb53'; +} +.ti-world:before { + content: '\eb54'; +} +.ti-world-latitude:before { + content: '\ed2e'; +} +.ti-world-longitude:before { + content: '\ed2f'; +} +.ti-wrecking-ball:before { + content: '\ed97'; +} +.ti-writing:before { + content: '\ef08'; +} +.ti-writing-sign:before { + content: '\ef07'; +} +.ti-x:before { + content: '\eb55'; +} +.ti-yin-yang:before { + content: '\ec35'; +} +.ti-zodiac-aquarius:before { + content: '\ecac'; +} +.ti-zodiac-aries:before { + content: '\ecad'; +} +.ti-zodiac-cancer:before { + content: '\ecae'; +} +.ti-zodiac-capricorn:before { + content: '\ecaf'; +} +.ti-zodiac-gemini:before { + content: '\ecb0'; +} +.ti-zodiac-leo:before { + content: '\ecb1'; +} +.ti-zodiac-libra:before { + content: '\ecb2'; +} +.ti-zodiac-pisces:before { + content: '\ecb3'; +} +.ti-zodiac-sagittarius:before { + content: '\ecb4'; +} +.ti-zodiac-scorpio:before { + content: '\ecb5'; +} +.ti-zodiac-taurus:before { + content: '\ecb6'; +} +.ti-zodiac-virgo:before { + content: '\ecb7'; +} +.ti-zoom-cancel:before { + content: '\ec4d'; +} +.ti-zoom-check:before { + content: '\ef09'; +} +.ti-zoom-in:before { + content: '\eb56'; +} +.ti-zoom-money:before { + content: '\ef0a'; +} +.ti-zoom-out:before { + content: '\eb57'; +} +.ti-zoom-question:before { + content: '\edeb'; +} diff --git a/jambotron-ui/src/scss/fonts/tabler/tabler-icons.eot b/jambotron-ui/src/scss/fonts/tabler/tabler-icons.eot new file mode 100644 index 0000000..a3b3e8c Binary files /dev/null and b/jambotron-ui/src/scss/fonts/tabler/tabler-icons.eot differ diff --git a/jambotron-ui/src/scss/fonts/tabler/tabler-icons.svg b/jambotron-ui/src/scss/fonts/tabler/tabler-icons.svg new file mode 100644 index 0000000..5c004e4 --- /dev/null +++ b/jambotron-ui/src/scss/fonts/tabler/tabler-icons.svg @@ -0,0 +1,3906 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jambotron-ui/src/scss/fonts/tabler/tabler-icons.ttf b/jambotron-ui/src/scss/fonts/tabler/tabler-icons.ttf new file mode 100644 index 0000000..8863a30 Binary files /dev/null and b/jambotron-ui/src/scss/fonts/tabler/tabler-icons.ttf differ diff --git a/jambotron-ui/src/scss/fonts/tabler/tabler-icons.woff b/jambotron-ui/src/scss/fonts/tabler/tabler-icons.woff new file mode 100644 index 0000000..c78f044 Binary files /dev/null and b/jambotron-ui/src/scss/fonts/tabler/tabler-icons.woff differ diff --git a/jambotron-ui/src/scss/fonts/tabler/tabler-icons.woff2 b/jambotron-ui/src/scss/fonts/tabler/tabler-icons.woff2 new file mode 100644 index 0000000..1df7554 Binary files /dev/null and b/jambotron-ui/src/scss/fonts/tabler/tabler-icons.woff2 differ diff --git a/jambotron-ui/src/scss/settings/bootstrap-variables.scss b/jambotron-ui/src/scss/settings/bootstrap-variables.scss new file mode 100644 index 0000000..fe737ad --- /dev/null +++ b/jambotron-ui/src/scss/settings/bootstrap-variables.scss @@ -0,0 +1,735 @@ +// Variables +// +// Variables should follow the `$component-state-property-size` formula for +// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs. + +// Color system + +$grays: ( + '100': $gray-100, + '200': $gray-200, + '300': $gray-300, + '400': $gray-400, + '500': $gray-500, + '600': $gray-600, + '700': $gray-700, + '800': $gray-800, + '900': $gray-900 +); + +// scss-docs-start colors-map +$colors: ( + 'blue': $blue, + 'indigo': $indigo, + 'purple': $purple, + 'pink': $pink, + 'red': $red, + 'orange': $orange, + 'yellow': $yellow, + 'green': $green, + 'teal': $teal, + 'cyan': $cyan, + 'black': $black, + 'white': $white, + 'gray': $gray-600, + 'gray-dark': $gray-800 +); +// scss-docs-end colors-map + +$primary: $blue; // change +$secondary: $secondary; // change +$success: $green; // change +$info: $cyan; // change +$warning: $yellow; // change +$danger: $red; // change +$light: $gray-100; // change +$dark: $dark; // change + +// scss-docs-start theme-colors-map +$theme-colors: ( + 'primary': $primary, + 'secondary': $secondary, + 'success': $success, + 'info': $info, + 'warning': $warning, + 'danger': $danger, + 'light': $light, + 'dark': $dark +); +// scss-docs-end theme-colors-map + +// scss-docs-start theme-colors-rgb +$theme-colors-rgb: map-loop($theme-colors, to-rgb, '$value'); +// scss-docs-end theme-colors-rgb + +// The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.0 are 3, 4.5 and 7. +// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast +$min-contrast-ratio: 1.55; + +// Customize the light and dark text colors for use in our color contrast function. +$color-contrast-dark: $body-color; +$color-contrast-light: $white; + +// fusv-disable +$blues: ( + 'blue-100': $blue-100, + 'blue-200': $blue-200, + 'blue-300': $blue-300, + 'blue-400': $blue-400, + 'blue-500': $blue-500, + 'blue-600': $blue-600, + 'blue-700': $blue-700, + 'blue-800': $blue-800, + 'blue-900': $blue-900 +); + +// Characters which are escaped by the escape-svg function +$escaped-characters: (('<', '%3c'), ('>', '%3e'), ('#', '%23'), ('(', '%28'), (')', '%29')); + +$variable-prefix: bs-; // Deprecated in v5.2.0 for the shorter `$prefix` +$prefix: $variable-prefix; + +// Gradient + +$gradient: linear-gradient(180deg, rgba($white, 0.15), rgba($white, 0)); + +// Spacing +$spacer: 1rem; +$spacers: ( + 0: 0, + 1: $spacer * 0.25, + 2: $spacer * 0.5, + 3: $spacer, + 4: $spacer * 1.5, + 5: $spacer * 3 +); +// scss-docs-end spacer-variables-maps + +// Position +// +// Define the edge positioning anchors of the position utilities. + +// scss-docs-start position-map +$position-values: ( + 0: 0, + 50: 50%, + 100: 100% +); +// scss-docs-end position-map + +// Body +// +// Settings for the `` element. +$body-bg: #fafafb; // change +$body-color: $gray-900; // change +$body-text-align: null; + +// Links +// +// Style anchor elements. + +$link-color: $primary; +$link-decoration: none; +$link-shade-percentage: 20%; +$link-hover-color: shift-color($link-color, $link-shade-percentage); +$link-hover-decoration: underline; + +$stretched-link-pseudo-element: after; +$stretched-link-z-index: 1; + +// Paragraphs +// +// Style p element. + +$paragraph-margin-bottom: 1rem; + +// Grid breakpoints +// +// Define the minimum dimensions at which your layout will change, +// adapting to different screen sizes, for use in media queries. + +// scss-docs-start grid-breakpoints +$grid-breakpoints: ( + xs: 0, + sm: 576px, + md: 768px, + lg: 992px, + xl: 1200px, + xxl: 1400px +); +// scss-docs-end grid-breakpoints + +@include _assert-ascending($grid-breakpoints, '$grid-breakpoints'); +@include _assert-starts-at-zero($grid-breakpoints, '$grid-breakpoints'); + +// Grid containers +// +// Define the maximum width of `.container` for different screen sizes. + +// scss-docs-start container-max-widths +$container-max-widths: ( + sm: 540px, + md: 720px, + lg: 960px, + xl: 1140px, + xxl: 1320px +); +// scss-docs-end container-max-widths + +@include _assert-ascending($container-max-widths, '$container-max-widths'); + +// Grid columns +// +// Set the number of columns and specify the width of the gutters. + +$grid-columns: 12; +$grid-gutter-width: 1.5rem; +$grid-row-columns: 6; + +// Container padding + +$container-padding-x: $grid-gutter-width; + +// Components +// +// Define common padding and border radius sizes and more. + +// scss-docs-start border-variables +$border-width: 1px; +$border-widths: ( + 0: 0, + 1: 1px, + 2: 2px, + 3: 3px, + 4: 4px, + 5: 5px +); + +$border-style: solid; +$border-color: #e6ebf1; +$border-color-translucent: rgba($black, 0.175); + +$border-radius: 4px; // change +$border-radius-lg: 6px; // change +$border-radius-sm: 2px; // change +$border-radius-pill: 50rem; +// scss-docs-end border-radius-variables + +$box-shadow-sm: 0 0.125rem 0.25rem rgba($black, 0.075); +$box-shadow: 0 0.5rem 1rem rgba($black, 0.15); +$box-shadow-lg: 0 1rem 3rem rgba($black, 0.175); +$box-shadow-inset: inset 0 1px 2px rgba($black, 0.075); + +$component-active-color: $white; +$component-active-bg: var(--bs-primary); + +// scss-docs-start caret-variables +$caret-width: 0.3em; +$caret-vertical-align: $caret-width * 0.85; +$caret-spacing: $caret-width * 0.85; +// scss-docs-end caret-variables + +$transition-base: all 0.2s ease-in-out; +$transition-fade: opacity 0.15s linear; +// scss-docs-start collapse-transition +$transition-collapse: height 0.35s ease; +$transition-collapse-width: width 0.35s ease; + +// stylelint-disable function-disallowed-list +// scss-docs-start aspect-ratios +$aspect-ratios: ( + '1x1': 100%, + '4x3': calc(3 / 4 * 100%), + '16x9': calc(9 / 16 * 100%), + '21x9': calc(9 / 21 * 100%) +); +// scss-docs-end aspect-ratios +// stylelint-enable function-disallowed-list + +// Typography +// +// Font, line-height, and color for body text, headings, and more. + +// stylelint-disable value-keyword-case +$font-family-sans-serif: 'Public Sans', sans-serif; // change +$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; +// stylelint-enable value-keyword-case +$font-family-base: var(--#{$variable-prefix}font-sans-serif); +$font-family-code: var(--#{$variable-prefix}font-monospace); + +$font-size-root: null; +$font-size-base: 0.875rem; +$font-size-sm: $font-size-base * 0.875; +$font-size-lg: $font-size-base * 1.25; +$font-weight-lighter: lighter; +$font-weight-light: 300; +$font-weight-normal: 400; +$font-weight-bold: 700; +$font-weight-bolder: bolder; + +$font-weight-base: $font-weight-normal; +$line-height-base: 1.5; +$line-height-sm: 1.25; +$line-height-lg: 2; + +$h1-font-size: 40px; // change +$h2-font-size: 30px; // change +$h3-font-size: 24px; // change +$h4-font-size: 20px; // change +$h5-font-size: 16px; // change +$h6-font-size: 14px; // change + +// scss-docs-start font-sizes +$font-sizes: ( + 1: $h1-font-size, + 2: $h2-font-size, + 3: $h3-font-size, + 4: $h4-font-size, + 5: $h5-font-size, + 6: $h6-font-size +); +// scss-docs-end font-sizes + +// scss-docs-end font-sizes +h1, +h2 { + font-weight: 700; +} + +$headings-margin-bottom: calc($spacer / 2); +$headings-font-family: null; +$headings-font-style: null; +$headings-font-weight: 600; +$headings-line-height: 1.2; +$headings-color: #262626; +$label-color: $gray-900; + +// scss-docs-start display-headings +$display-font-sizes: ( + 1: 5rem, + 2: 4.5rem, + 3: 4rem, + 4: 3.5rem, + 5: 3rem, + 6: 2.5rem +); + +$display-font-weight: 300; +$display-line-height: $headings-line-height; +// scss-docs-end display-headings + +$lead-font-size: $font-size-base * 1.25; +$lead-font-weight: 300; + +$small-font-size: 80%; + +$sub-sup-font-size: 0.75em; + +$text-muted: $gray-600; + +$hr-margin-y: $spacer; +$hr-color: inherit; +$hr-height: $border-width; +$hr-opacity: 0.13; + +$legend-margin-bottom: 0.5rem; +$legend-font-size: 1.5rem; +$legend-font-weight: null; + +$mark-padding: 0.2em; + +$dt-font-weight: $font-weight-bold; + +$nested-kbd-font-weight: $font-weight-bold; + +$list-inline-padding: 0.5rem; + +$mark-bg: #fcf8e3; +// Tables +// +// Customizes the `.table` component with basic values, each used across all table variations. +// scss-docs-start table-variables +$table-cell-padding-y: 0.9rem; +$table-cell-padding-x: 0.75rem; +$table-cell-padding-y-sm: 0.3rem; +$table-cell-padding-x-sm: 0.3rem; + +$table-cell-vertical-align: top; + +$table-color: $body-color; +$table-bg: transparent; +$table-accent-bg: transparent; + +$table-th-font-weight: null; +$table-striped-color: $table-color; +$table-striped-bg-factor: 0.05; +$table-striped-bg: rgba($black, $table-striped-bg-factor); + +$table-active-color: $table-color; +$table-active-bg-factor: 0.1; +$table-active-bg: rgba($black, $table-active-bg-factor); + +$table-hover-color: $table-color; +$table-hover-bg-factor: 0.02; +$table-hover-bg: rgba($primary, $table-hover-bg-factor); + +$table-border-factor: 0.1; +$table-border-width: $border-width; +$table-border-color: $border-color; + +$table-striped-order: odd; + +$table-group-seperator-color: currentColor; +$table-caption-color: $text-muted; + +$table-bg-scale: -80%; + +$table-variants: ( + 'primary': shift-color($primary, $table-bg-scale), + 'secondary': shift-color($secondary, $table-bg-scale), + 'success': shift-color($success, $table-bg-scale), + 'info': shift-color($info, $table-bg-scale), + 'warning': shift-color($warning, $table-bg-scale), + 'danger': shift-color($danger, $table-bg-scale), + 'light': $light, + 'dark': $dark +); +// scss-docs-end table-variables + +// Buttons + Forms +// +// Shared variables that are reassigned to `$input-` and `$btn-` specific variables. + +$input-btn-padding-y: 0.407rem; +$input-btn-padding-x: 1rem; +$input-btn-font-family: null; +$input-btn-font-size: 0.875rem; +$input-btn-line-height: $line-height-base; + +$input-btn-focus-width: 0.2rem; +$input-btn-focus-color-opacity: 0.25; +$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity); +$input-btn-focus-blur: 0; +$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color; + +$input-btn-padding-y-sm: 0.25rem; +$input-btn-padding-x-sm: 0.5rem; +$input-btn-font-size-sm: $font-size-sm; + +$input-btn-padding-y-lg: 1rem; +$input-btn-padding-x-lg: 1.3rem; +$input-btn-font-size-lg: $font-size-lg; + +$input-btn-border-width: 1px; + +// Buttons +// +// For each of Bootstrap's buttons, define text, background, and border color. + +$btn-padding-y: $input-btn-padding-y; +$btn-padding-x: $input-btn-padding-x; +$btn-font-family: $input-btn-font-family; +$btn-font-size: $input-btn-font-size; +$btn-line-height: $input-btn-line-height; +$btn-white-space: null; // Set to `nowrap` to prevent text wrapping + +$btn-padding-y-sm: $input-btn-padding-y-sm; +$btn-padding-x-sm: $input-btn-padding-x-sm; +$btn-font-size-sm: $input-btn-font-size-sm; + +$btn-padding-y-lg: $input-btn-padding-y-lg; +$btn-padding-x-lg: $input-btn-padding-x-lg; +$btn-font-size-lg: $input-btn-font-size-lg; + +$btn-border-width: $input-btn-border-width; + +$btn-font-weight: 400; +$btn-box-shadow: + inset 0 1px 0 rgba($white, 0.15), + 0 1px 1px rgba($black, 0.075); +$btn-focus-width: $input-btn-focus-width; +$btn-focus-box-shadow: $input-btn-focus-box-shadow; +$btn-disabled-opacity: 0.65; +$btn-active-box-shadow: inset 0 3px 5px rgba($black, 0.125); + +$btn-link-color: $link-color; +$btn-link-hover-color: $link-hover-color; +$btn-link-disabled-color: $gray-600; + +// Allows for customizing button radius independently from global border radius +$btn-border-radius: 4px; +$btn-border-radius-sm: 2px; +$btn-border-radius-lg: 6px; + +$btn-transition: + color 0.15s ease-in-out, + background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; + +$btn-hover-bg-shade-amount: 15%; +$btn-hover-bg-tint-amount: 15%; +$btn-hover-border-shade-amount: 20%; +$btn-hover-border-tint-amount: 10%; +$btn-active-bg-shade-amount: 20%; +$btn-active-bg-tint-amount: 20%; +$btn-active-border-shade-amount: 25%; +$btn-active-border-tint-amount: 10%; +// scss-docs-end btn-variables + +// Forms + +$form-text-margin-top: 0.25rem; +$form-text-font-size: $small-font-size; +$form-text-font-style: null; +$form-text-font-weight: null; +$form-text-color: $text-muted; + +$form-label-margin-bottom: 0.5rem; +$form-label-font-size: null; +$form-label-font-style: null; +$form-label-font-weight: null; +$form-label-color: $label-color; + +$input-padding-y: 0.65rem; +$input-padding-x: 0.75rem; +$input-font-family: $input-btn-font-family; +$input-font-size: $input-btn-font-size; +$input-font-weight: $font-weight-base; +$input-line-height: $input-btn-line-height; + +$input-padding-y-sm: 0.375rem; +$input-padding-x-sm: 0.7rem; +$input-font-size-sm: $input-btn-font-size-sm; + +$input-padding-y-lg: 0.775rem; +$input-padding-x-lg: 0.85rem; +$input-font-size-lg: $input-btn-font-size-lg; + +$input-bg: $white; +$input-disabled-bg: $gray-200; +$input-disabled-border-color: null; + +$input-color: $body-color; +$input-border-color: $gray-400; +$input-border-width: 1px; +$input-box-shadow: inset 0 1px 1px rgba($black, 0.075); + +$input-border-radius: 4px; +$input-border-radius-sm: 2px; +$input-border-radius-lg: 6px; + +$input-focus-bg: $input-bg; +$input-focus-border-color: $primary; +$input-focus-color: $input-color; +$input-focus-width: $input-btn-focus-width; +$input-focus-box-shadow: 0 0 0 2px rgba($component-active-bg, 0.2); + +$input-placeholder-color: $gray-600; +$input-plaintext-color: $headings-color; + +$input-height-border: $input-border-width * 2; + +$input-height-inner: add($input-line-height * 1em, calc($input-padding-y * 2)); +$input-height-inner-half: add($input-line-height * 0.5em, $input-padding-y); +$input-height-inner-quarter: add($input-line-height * 0.25em, calc($input-padding-y / 2)); + +$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)); +$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)); +$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)); + +$input-transition: + border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; + +$form-color-width: 3rem; +// scss-docs-end form-input-variables + +// scss-docs-end form-validation-states + +// Z-index master list + +$zindex-dropdown: 1026; +$zindex-sticky: 1020; +$zindex-fixed: 1030; + +// Navs + +$nav-link-padding-y: 0.5rem; +$nav-link-padding-x: 1rem; +$nav-link-font-size: null; +$nav-link-font-weight: null; +$nav-link-color: null; +$nav-link-hover-color: null; +$nav-link-transition: + color 0.15s ease-in-out, + background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out; +$nav-link-disabled-color: $gray-600; + +$nav-tabs-border-color: $gray-300; +$nav-tabs-border-width: $border-width; +$nav-tabs-border-radius: $border-radius; +$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color; +$nav-tabs-link-active-color: $gray-700; +$nav-tabs-link-active-bg: $white; // change +$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg; + +$nav-pills-border-radius: $border-radius; +$nav-pills-link-active-color: $component-active-color; +$nav-pills-link-active-bg: $component-active-bg; + +// Navbar + +$navbar-padding-y: calc(#{$spacer} / 2); +$navbar-padding-x: null; + +$navbar-nav-link-padding-x: 0.5rem; + +$navbar-brand-font-size: $font-size-lg; +// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link +$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2; +$navbar-brand-height: $navbar-brand-font-size * $line-height-base; +$navbar-brand-padding-y: calc(($nav-link-height - $navbar-brand-height) / 2); +$navbar-brand-margin-end: 1rem; + +$navbar-toggler-padding-y: 0.25rem; +$navbar-toggler-padding-x: 0.75rem; +$navbar-toggler-font-size: $font-size-lg; +$navbar-toggler-border-radius: $btn-border-radius; +$navbar-toggler-focus-width: $btn-focus-width; +$navbar-toggler-transition: box-shadow 0.15s ease-in-out; + +$navbar-dark-color: rgba($white, 0.9); +$navbar-dark-hover-color: rgba($white, 0.75); +$navbar-dark-active-color: $white; +$navbar-dark-disabled-color: rgba($white, 0.25); +$navbar-dark-toggler-border-color: rgba($white, 0.1); + +$navbar-light-color: rgba($black, 0.55); +$navbar-light-hover-color: rgba($black, 0.7); +$navbar-light-active-color: rgba($black, 0.9); +$navbar-light-disabled-color: rgba($black, 0.3); +$navbar-light-toggler-border-color: rgba($black, 0.1); + +$navbar-light-brand-color: $navbar-light-active-color; +$navbar-light-brand-hover-color: $navbar-light-active-color; +$navbar-dark-brand-color: $navbar-dark-active-color; +$navbar-dark-brand-hover-color: $navbar-dark-active-color; + +// Dropdowns +$dropdown-font-size: $font-size-base; +$dropdown-color: $body-color; +$dropdown-bg: $white; + +// scss-docs-start placeholders +$placeholder-opacity-max: 0.5; +$placeholder-opacity-min: 0.2; +// scss-docs-end placeholders + +// Cards +$card-spacer-y: 25px; // change +$card-spacer-x: 25px; // change +$card-title-spacer-y: calc($spacer / 2); +$card-border-width: 1px; // change +$card-border-radius: $border-radius; +$card-border-color: $border-color; +$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}); +$card-cap-padding-y: 25px; +$card-cap-padding-x: 25px; +$card-cap-bg: transparent; +$card-cap-color: null; +$card-height: null; +$card-color: null; +$card-bg: $white; + +$card-img-overlay-padding: 1.25rem; + +$card-group-margin: calc($grid-gutter-width / 2); + +// Badges +$badge-font-size: 0.75em; +$badge-font-weight: 500; +$badge-color: $white; +$badge-padding-y: 0.35em; +$badge-padding-x: 0.5em; +$badge-border-radius: 2px; + +// List group + +$list-group-color: null; +$list-group-bg: $white; +$list-group-border-color: $border-color; +$list-group-border-width: $border-width; +$list-group-border-radius: $border-radius; + +$list-group-item-padding-y: calc($card-spacer-y / 1.5); +$list-group-item-padding-x: $card-spacer-x; +$list-group-item-bg-scale: -80%; +$list-group-item-color-scale: 40%; + +$list-group-hover-bg: $gray-100; +$list-group-active-color: $component-active-color; +$list-group-active-bg: $component-active-bg; +$list-group-active-border-color: $list-group-active-bg; + +$list-group-disabled-color: $gray-600; +$list-group-disabled-bg: $list-group-bg; + +$list-group-action-color: $gray-700; +$list-group-action-hover-color: $list-group-action-color; + +$list-group-action-active-color: $body-color; +$list-group-action-active-bg: $gray-200; + +// Figures + +$figure-caption-font-size: 90%; +$figure-caption-color: $gray-600; + +// Breadcrumbs + +$breadcrumb-font-size: null; +$breadcrumb-padding-y: 2; +$breadcrumb-padding-x: 0; +$breadcrumb-item-padding: 0.5rem; + +$breadcrumb-margin-bottom: 1rem; + +$breadcrumb-bg: null; +$breadcrumb-divider-color: $gray-600; +$breadcrumb-active-color: $gray-600; +$breadcrumb-divider: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='14' height='14' stroke='#{$gray-600}' stroke-width='2' fill='none' stroke-linecap='round' stroke-linejoin='round' class='css-i6dzq1'%3E%3Cpolyline points='9 18 15 12 9 6'%3E%3C/polyline%3E%3C/svg%3E"); +$breadcrumb-divider-flipped: $breadcrumb-divider; +$breadcrumb-border-radius: null; + +// Close + +$btn-close-width: 1em; +$btn-close-height: $btn-close-width; +$btn-close-padding-x: 0.25em; +$btn-close-padding-y: $btn-close-padding-x; +$btn-close-color: $black; +$btn-close-bg: url("data:image/svg+xml,"); +$btn-close-focus-shadow: $input-btn-focus-box-shadow; +$btn-close-opacity: 0.5; +$btn-close-hover-opacity: 0.75; +$btn-close-focus-opacity: 1; +$btn-close-disabled-opacity: 0.25; +$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%); + +// Code + +$code-font-size: 87.5%; +$code-color: $pink; + +$kbd-padding-y: 0.2rem; +$kbd-padding-x: 0.4rem; +$kbd-font-size: $code-font-size; +$kbd-color: $white; +$kbd-bg: $body-color; + +$pre-color: null; + +// scss-docs-start theme-colors-rgb +$theme-colors-rgb: map-loop($theme-colors, to-rgb, '$value'); diff --git a/jambotron-ui/src/scss/settings/color-variables.scss b/jambotron-ui/src/scss/settings/color-variables.scss new file mode 100644 index 0000000..657a29b --- /dev/null +++ b/jambotron-ui/src/scss/settings/color-variables.scss @@ -0,0 +1,44 @@ +// ======================================= +// List of variables for Preset color +// ======================================= + +// Gray color +$white: #ffffff; +$gray-100: #fafafa; +$gray-200: #f5f5f5; +$gray-300: #f0f0f0; +$gray-400: #d9d9d9; +$gray-500: #bfbfbf; +$gray-600: #8c8c8c; +$gray-700: #595959; +$gray-800: #262626; +$gray-900: #141414; +$black: #000000; + +$blue: #1677ff; +$indigo: #6610f2; +$purple: #6f42c1; +$pink: #e83e8c; +$red: #ff4d4f; +$orange: #fd7e14; +$yellow: #faad14; +$green: #52c41a; +$teal: #20c997; +$cyan: #13c2c2; + +$blue-100: tint-color($blue, 80%); +$blue-200: tint-color($blue, 60%); +$blue-300: tint-color($blue, 40%); +$blue-400: tint-color($blue, 20%); +$blue-500: $blue; +$blue-600: shade-color($blue, 20%); +$blue-700: shade-color($blue, 40%); +$blue-800: shade-color($blue, 60%); +$blue-900: shade-color($blue, 80%); + +$preset-colors: ( + preset-1: ( + primary: #1890ff + ) +); +$dark-bg-color: #1a1a1a; diff --git a/jambotron-ui/src/scss/settings/theme-variables.scss b/jambotron-ui/src/scss/settings/theme-variables.scss new file mode 100644 index 0000000..e1f2694 --- /dev/null +++ b/jambotron-ui/src/scss/settings/theme-variables.scss @@ -0,0 +1,111 @@ +// ======================================= +// List of variables for layout +// ======================================= +:root { + // body + --#{$variable-prefix}body-bg: #{$body-bg}; + --bs-body-bg-rgb: #{to-rgb($body-bg)}; + + --pc-heading-color: #{$gray-800}; + --pc-active-background: #{$gray-200}; + + // Navbar + --pc-sidebar-background: #{$white}; + --pc-sidebar-color: #262626; + --pc-sidebar-color-rgb: #{to-rgb(#262626)}; + --pc-sidebar-active-color: var(--bs-primary); + --pc-sidebar-shadow: none; + --pc-sidebar-caption-color: #{$gray-700}; + + // header + --pc-header-background: #{$white}; + --pc-header-color: #262626; + --pc-header-shadow: 0 1px 0 0px rgb(240 240 240); + + // card + --pc-card-box-shadow: none; + + // horizontal menu + --pc-header-submenu-background: #{$white}; + --pc-header-submenu-color: #{$gray-600}; +} + +$header-height: 60px; +$sidebar-width: 260px; +$sidebar-collapsed-width: 60px; +$sidebar-collapsed-active-width: 300px; +$sidebar-tab-width: 75px; +$sidebar-tab-navbar-width: 320px; + +// horizontal menu +$topbar-height: 60px; + +$soft-bg-level: -90%; + +// ===================================== +// Variables for dark layouts +// ===================================== + +$dark-layout-color: #121212; +$dark-layout-color-light: #1e1e1e; +// header +$dark-header-color: #d6d6d6; +$dark-header-shadow: 0 1px 20px 0 rgba(69, 90, 100, 0.08); + +// Menu +$dark-sidebar-color: #bfbfbf; +$dark-sidebar-caption: #d6d6d6; +$dark-sidebar-shadow: 0 1px 20px 0 rgba(69, 90, 100, 0.08); + +// card block +$dark-card-shadow: inset 0 0 0 1px #262626; + +// ===================================== +// Variables for bootstrap color +// ===================================== + +$blue: $blue-500; +$secondary: $gray-600; +$indigo: $indigo-500; +$purple: $purple-500; +$pink: $pink-500; +$red: $red-500; +$orange: $orange-500; +$yellow: $yellow-500; +$green: $green-500; +$teal: $teal-500; +$cyan: $cyan-500; +$dark: #262626; + +$primary-text: $blue-600; +$secondary-text: $gray-600; +$success-text: $green-600; +$info-text: $cyan-700; +$warning-text: $yellow-700; +$danger-text: $red-600; +$light-text: $gray-600; +$dark-text: $gray-700; + +$primary-bg-subtle: $blue-100; +$secondary-bg-subtle: $gray-100; +$success-bg-subtle: $green-100; +$info-bg-subtle: $cyan-100; +$warning-bg-subtle: $yellow-100; +$danger-bg-subtle: $red-100; +$light-bg-subtle: mix($gray-100, $white); +$dark-bg-subtle: $gray-400; + +$primary-border-subtle: $blue-200; +$secondary-border-subtle: $gray-200; +$success-border-subtle: $green-200; +$info-border-subtle: $cyan-200; +$warning-border-subtle: $yellow-200; +$danger-border-subtle: $red-200; +$light-border-subtle: $gray-200; +$dark-border-subtle: $gray-500; + +$preset-colors: ( + preset-1: ( + primary: #1677ff + ) +); diff --git a/jambotron-ui/src/scss/themes/components/avatar.scss b/jambotron-ui/src/scss/themes/components/avatar.scss new file mode 100644 index 0000000..75140fa --- /dev/null +++ b/jambotron-ui/src/scss/themes/components/avatar.scss @@ -0,0 +1,18 @@ +.avatar { + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: $border-radius; + font: { + size: 18px; + weight: 600; + } + width: 48px; + height: 48px; + + &.avatar-s { + width: 40px; + height: 40px; + font-size: 14px; + } +} diff --git a/jambotron-ui/src/scss/themes/components/badge.scss b/jambotron-ui/src/scss/themes/components/badge.scss new file mode 100644 index 0000000..b5d54b5 --- /dev/null +++ b/jambotron-ui/src/scss/themes/components/badge.scss @@ -0,0 +1,13 @@ +// ============================ +// Badge css start +// ============================ + +.badge { + @each $color, $value in $theme-colors { + &.bg-light-#{$color} { + background: shift-color($value, $soft-bg-level); + color: $value; + border-color: shift-color($value, $soft-bg-level); + } + } +} diff --git a/jambotron-ui/src/scss/themes/components/button.scss b/jambotron-ui/src/scss/themes/components/button.scss new file mode 100644 index 0000000..fa8e741 --- /dev/null +++ b/jambotron-ui/src/scss/themes/components/button.scss @@ -0,0 +1,125 @@ +// ============================ +// Button css start +// ============================ + +.btn { + font-size: 14px; + + i { + font-size: 18px; + } + + svg { + width: 18px; + height: 18px; + } + + &[class*='btn-link-'], + &[class*='btn-light-'] { + box-shadow: none; + } + + &[class*='btn-outline-']:not(:hover) { + box-shadow: none; + } + + &.btn-shadow { + box-shadow: 0 6px 7px -1px rgba(80, 86, 175, 0.3); + } + + &.btn-sm { + i { + font-size: 14px; + } + } +} +@each $color, $value in $theme-colors { + .btn-light-#{$color} { + background: shift-color($value, $soft-bg-level); + color: $value; + border-color: shift-color($value, $soft-bg-level); + .material-icons-two-tone { + background-color: $value; + } + + &:hover { + background: $value; + color: #fff; + border-color: $value; + .material-icons-two-tone { + background-color: #fff; + } + } + + &.focus, + &:focus { + background: $value; + color: #fff; + border-color: $value; + .material-icons-two-tone { + background-color: #fff; + } + } + + &:not(:disabled):not(.disabled).active, + &:not(:disabled):not(.disabled):active, + .show > &.dropdown-toggle { + background: $value; + color: #fff; + border-color: $value; + .material-icons-two-tone { + background-color: #fff; + } + } + } + + .btn-check:active, + .btn-check:checked { + + .btn-light-#{$color} { + background: $value; + color: #fff; + border-color: $value; + .material-icons-two-tone { + background-color: #fff; + } + } + } + + .btn-link-#{$color} { + background: transparent; + color: $value; + border-color: transparent; + .material-icons-two-tone { + background-color: $value; + } + &:hover { + background: shift-color($value, $soft-bg-level); + color: $value; + border-color: shift-color($value, $soft-bg-level); + } + + &.focus, + &:focus { + background: shift-color($value, $soft-bg-level); + color: $value; + border-color: shift-color($value, $soft-bg-level); + } + + &:not(:disabled):not(.disabled).active, + &:not(:disabled):not(.disabled):active, + .show > &.dropdown-toggle { + background: shift-color($value, $soft-bg-level); + color: $value; + border-color: shift-color($value, $soft-bg-level); + } + } + + .btn-check:active, + .btn-check:checked { + + .btn-link-#{$color} { + background: shift-color($value, $soft-bg-level); + color: $value; + border-color: shift-color($value, $soft-bg-level); + } + } +} diff --git a/jambotron-ui/src/scss/themes/components/card.scss b/jambotron-ui/src/scss/themes/components/card.scss new file mode 100644 index 0000000..da64faa --- /dev/null +++ b/jambotron-ui/src/scss/themes/components/card.scss @@ -0,0 +1,58 @@ +.card { + margin-bottom: 24px; + transition: box-shadow 0.2s ease-in-out; + + .card-header { + border-bottom: 1px solid $border-color; + + h5 { + margin-bottom: 0; + color: $headings-color; + font-size: 0.875rem; + font-weight: 600; + + + p, + + small { + margin-top: 10px; + + &:last-child { + margin-bottom: 0; + } + } + } + } + + .card-footer { + transition: box-shadow 0.2s ease-in-out; + border-top: 1px solid $border-color; + } + + &:hover { + .card-footer[class*='bg-'] { + box-shadow: none; + } + } + + .card-body { + &.pc-component { + position: relative; + padding: 25px; + border: 1px solid rgba(215, 223, 233, 0.5); + } + } +} + +@include media-breakpoint-down(sm) { + .card { + margin-bottom: 20px; + .card-header { + padding: 20px; + h5 { + font-size: 0.875rem; + } + } + .card-body { + padding: 20px; + } + } +} diff --git a/jambotron-ui/src/scss/themes/components/components.scss b/jambotron-ui/src/scss/themes/components/components.scss new file mode 100644 index 0000000..76cda15 --- /dev/null +++ b/jambotron-ui/src/scss/themes/components/components.scss @@ -0,0 +1,8 @@ +@import 'avatar'; +@import 'button'; +@import 'badge'; +@import 'dropdown'; +@import 'table'; +@import 'tabs'; +@import 'card'; +@import 'form'; diff --git a/jambotron-ui/src/scss/themes/components/dropdown.scss b/jambotron-ui/src/scss/themes/components/dropdown.scss new file mode 100644 index 0000000..72362b1 --- /dev/null +++ b/jambotron-ui/src/scss/themes/components/dropdown.scss @@ -0,0 +1,85 @@ +.dropdown-toggle { + &.arrow-none { + &:after { + display: none; + } + } +} + +.pc-header { + .dropdown-menu { + animation: 0.3s ease-in-out 0s normal forwards 0.3s fadeIn; + } +} +@keyframes fadeIn { + from { + transform: translate3d(0, 8px, 0); + opacity: 0; + } + + to { + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.dropdown .dropdown-item { + display: flex; + align-items: center; + + &.active, + &:active, + &:focus, + &:hover { + background: var(--pc-active-background); + color: var(--bs-dropdown-link-color); + i { + &.material-icons-two-tone { + background-color: $dropdown-link-hover-color; + } + } + } +} + +.dropdown-menu { + --bs-dropdown-zindex: 8; + box-shadow: 0 4px 24px 0 rgba(62, 57, 107, 0.18); + border: none; + .dropdown-item { + padding: 10px 25px; + + i { + font-size: 18px; + margin-right: 10px; + + &.material-icons-two-tone { + vertical-align: bottom; + font-size: 22px; + background-color: var(--pc-header-color); + } + } + + svg { + width: 18px; + height: 18px; + margin-right: 10px; + } + + .float-right { + svg { + width: 14px; + height: 14px; + } + } + } +} + +.dropdown-menu-dark { + .dropdown-item { + &.active, + &:active { + color: var(--bs-dropdown-link-hover-color); + background-color: var(--bs-dropdown-link-hover-bg); + } + } +} diff --git a/jambotron-ui/src/scss/themes/components/form.scss b/jambotron-ui/src/scss/themes/components/form.scss new file mode 100644 index 0000000..2dfe2d6 --- /dev/null +++ b/jambotron-ui/src/scss/themes/components/form.scss @@ -0,0 +1,255 @@ +.form-group { + margin-bottom: 1rem; + + label { + font-size: 14px; + font-weight: 500; + } +} + +select.form-control, +.form-control { + &:hover { + background-color: $gray-100; + } + + &[readonly] { + opacity: 0.6; + } +} + +.input-group-text svg { + width: 18px; + height: 18px; +} + +.form-control-color-picker { + height: 43px; + padding: 0.5rem; +} + +select.form-control { + appearance: none; + background: #{$input-bg} + url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke='currentColor' stroke-width='2' fill='none' stroke-linecap='round' stroke-linejoin='round' class='css-i6dzq1'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E") + no-repeat right 0.75rem center/18px 25px; + + &[data-multiselectsplitter-firstselect-selector], + &[data-multiselectsplitter-secondselect-selector] { + background: none; + } +} + +.form-floating { + > label { + top: 1px; + } + + > .form-control:focus, + > .form-control:not(:placeholder-shown), + > .form-select { + ~ label { + color: $gray-600; + } + } + + > .form-control:focus { + ~ label { + color: $component-active-bg; + } + } + + > input { + color: $body-color; + } +} + +.user-card { + .form-search { + position: relative; + i { + position: absolute; + top: 12px; + left: 15px; + font-size: 14px; + } + .form-control { + padding-left: 42px; + background: transparent; + } + } + + .btn { + i { + font-size: inherit; + } + span { + white-space: pre; + } + } +} + +.form-check { + label { + cursor: pointer; + + input { + cursor: pointer; + } + } +} + +@each $color, $value in $theme-colors { + .form-check { + .form-check-input { + &.input-#{$color} { + &:checked { + border-color: $value; + background-color: $value; + } + } + + &.input-light-#{$color} { + &:checked { + border-color: shift-color($value, $soft-bg-level); + background-color: shift-color($value, $soft-bg-level); + + &[type='checkbox'] { + background-image: escape-svg( + url("data:image/svg+xml,") + ); + } + + &[type='radio'] { + background-image: escape-svg( + url("data:image/svg+xml,") + ); + } + } + } + + &.input-#{$color}, + &.input-light-#{$color} { + &:focus { + &[type='checkbox'], + &[type='radio'] { + box-shadow: 0 0 0 0.2rem rgba($value, 0.25); + border-color: $value; + } + } + } + } + + &.form-switch { + .form-check-input.input-light-#{$color} { + &:checked { + background-image: escape-svg( + url("data:image/svg+xml,") + ); + } + } + } + } +} + +.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group > .input-group-append:last-child > .input-group-text:not(:last-child), +.input-group > .input-group-append:not(:last-child) > .btn, +.input-group > .input-group-append:not(:last-child) > .input-group-text, +.input-group > .input-group-prepend > .btn, +.input-group > .input-group-prepend > .input-group-text { + border-right: none; +} + +// sticky header start +.sticky-action { + top: $header-height; + position: sticky; + z-index: 1020; + background: var(--bs-card-bg); + border-radius: var(--bs-card-border-radius); +} +// sticky header end + +// switch v1 start +.switch-demo { + .custom-switch-v1 { + margin-bottom: 4px; + } +} +.custom-switch-v1 { + &.form-switch { + padding-left: 2.9em; + + .form-check-input { + height: 20px; + width: 35px; + margin-left: -2.9em; + background-image: escape-svg( + url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='4.1' fill='#{$form-switch-color}'/%3e%3c/svg%3e") + ); + transition: 0.35s cubic-bezier(0.54, 1.6, 0.5, 1); + //box-shadow: 0 0 3px rgba(0, 0, 0, 0.2); + + &[class*='input-light-'] { + border: none; + } + + &:focus { + box-shadow: none; + border-color: rgba(0, 0, 0, 0.25); + } + + &:checked { + background-image: escape-svg( + url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='4.1' fill='%23ffffff'/%3e%3c/svg%3e") + ); + } + } + + @each $color, $value in $theme-colors { + .form-check-input.input-light-#{$color} { + &:checked { + background-image: escape-svg( + url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='4.1' fill='#{$value}'/%3e%3c/svg%3e") + ); + } + } + } + } + + // =========== + .custom-control-label { + &::before { + transition: 0.2s cubic-bezier(0.24, 0, 0.5, 1); + height: 20px; + width: 35px; + border-radius: 0.8rem; + top: 0; + left: -2.55rem; + } + + &::after { + top: calc(0.15625rem - 2px); + left: calc(-2.25rem - 4px); + height: 19px; + width: 19px; + border-radius: 0.7rem; + box-shadow: + 0 0 0 1px rgba(0, 0, 0, 0.1), + 0 4px 0 0 rgba(0, 0, 0, 0.04), + 0 4px 9px rgba(0, 0, 0, 0.13), + 0 3px 3px rgba(0, 0, 0, 0.05); + transition: 0.35s cubic-bezier(0.54, 1.6, 0.5, 1); + } + } + + .custom-control-input { + &:checked ~ .custom-control-label::after { + transform: translateX(0.95rem); + } + } + + // =========== +} +// switch v1 end diff --git a/jambotron-ui/src/scss/themes/components/table.scss b/jambotron-ui/src/scss/themes/components/table.scss new file mode 100644 index 0000000..39377f4 --- /dev/null +++ b/jambotron-ui/src/scss/themes/components/table.scss @@ -0,0 +1,39 @@ +.table { + &.table-align-center { + td, + th { + vertical-align: middle; + } + } + thead th { + padding: 0.9rem 0.75rem; + } + td, + th { + vertical-align: middle; + + &:first-child { + padding-left: 24px; + } + &:last-child { + padding-right: 24px; + } + } + &.table-borderless { + td, + th { + border: none !important; + } + } + thead th { + background-color: $gray-100; + border-top: 1px solid $gray-300; + border-bottom: 2px solid $gray-300; + font-size: 12px; + } +} + +.table-hover tbody tr:hover { + // background-color: transparentize($primary, 0.97); + background-color: $gray-200; +} diff --git a/jambotron-ui/src/scss/themes/components/tabs.scss b/jambotron-ui/src/scss/themes/components/tabs.scss new file mode 100644 index 0000000..8b09660 --- /dev/null +++ b/jambotron-ui/src/scss/themes/components/tabs.scss @@ -0,0 +1,57 @@ +.tabs-border { + &.nav-tabs { + .nav-item { + margin-bottom: 0; + } + + .nav-link { + border: none; + background: + no-repeat center bottom, + center 100%; + background-size: + 0 100%, + 100% 100%; + transition: background 0.3s ease-out; + background-image: linear-gradient(to top, theme-color('primary') 2px, rgba(255, 255, 255, 0) 2px); + + &.active { + background-size: + 100% 100%, + 100% 100%; + } + } + } +} + +.tabs-light { + &.nav-pill { + + .tab-content { + border-top: 1px solid $border-color; + } + + .nav-item { + margin-bottom: 0; + + .nav-link { + color: $primary; + background: shift-color($primary, $soft-bg-level); + border-radius: 4px; + transition: background 0.3s ease-out; + } + + + .nav-item { + margin-left: 10px; + } + } + + .nav-link { + border: none; + + &.active { + color: $white; + background: $primary; + } + } + } +} diff --git a/jambotron-ui/src/scss/themes/general.scss b/jambotron-ui/src/scss/themes/general.scss new file mode 100644 index 0000000..0157c5a --- /dev/null +++ b/jambotron-ui/src/scss/themes/general.scss @@ -0,0 +1,233 @@ +/** ===================== + 2. Custom css start +========================== **/ + +* { + &:focus { + outline: none; + } +} + +.accordion { + --#{$prefix}accordion-color: #{$body-color}; +} + +a { + color: $black; + &:hover { + outline: none; + text-decoration: none; + } + + &:not([href]) { + color: inherit; + } +} + +p { + font-size: 14px; +} + +h6, +.h6, +h5, +.h5, +h4, +.h4, +h3, +.h3, +h2, +.h2, +h1, +.h1 { + color: var(--pc-heading-color); +} + +b, +strong { + font-weight: 600; +} + +.breadcrumb-default-icon { + .breadcrumb-item + .breadcrumb-item::before { + position: relative; + top: 2px; + } +} + +.btn-page { + .btn { + margin-right: 5px; + margin-bottom: 5px; + } + + .btn-group { + .btn { + margin-right: 0; + margin-bottom: 0; + + &:last-child { + border-left: none; + } + } + + label { + &:first-of-type { + border-right: none; + } + } + } +} + +.material-icons-two-tone { + background-color: $body-color; + -webkit-text-fill-color: transparent; + vertical-align: text-bottom; + -webkit-background-clip: text; + + &.text-white { + background-color: $white; + } +} + +.img-radius { + border-radius: 50%; +} + +.pc-icon { + &:not([class*='wid-']) { + width: 22px; + } + + &:not([class*='hei-']) { + height: 22px; + } +} + +/* ======================================================== + =============== document ====================== + ======================================================== + + Grid examples +*/ + +// modal box select +.ng-dropdown-panel.ng-select-bottom { + z-index: 1099; +} + +/* ================================ Blockquote Start ===================== */ + +@media (min-width: 1600px) { + .container { + max-width: 1540px; + } +} + +.media { + display: flex; + + .media-body { + flex-grow: 1; + } +} + +.blockquote { + padding: 0.5rem 1rem; +} + +/* ================================ Blockquote End ===================== */ + +.color-card { + .card-body { + margin: var(--bs-card-spacer-y) var(--bs-card-spacer-x); + background: rgba(107, 117, 125, 0.08); + border-radius: $border-radius; + } +} + +.color-block { + border-radius: $border-radius; + margin: 4px 0; + + @each $name, $value in $more-colors { + $i: 100; + + @while $i<=900 { + &.bg-#{$name}-#{$i} { + color: color-contrast(map-get($value, $i)); + } + + &.text-#{$name}-#{$i} { + background-color: color-contrast(map-get($value, $i)); + } + + $i: $i + 100; + } + } +} + +.row { + > div { + .color-block { + &:first-child { + margin-top: 0; + } + &:last-child { + margin-bottom: 0; + } + } + } +} + +.pagination { + .page-item { + .page-link { + border-radius: 0; + } + &:first-child { + .page-link { + border-radius: var(--bs-pagination-border-radius) 0 0 var(--bs-pagination-border-radius); + } + } + &:last-child { + .page-link { + border-radius: 0 var(--bs-pagination-border-radius) var(--bs-pagination-border-radius) 0; + } + } + } +} + +.form-search { + position: relative; + i { + position: absolute; + top: 12px; + left: 15px; + font-size: 20px; + } + .form-control { + padding-left: 50px; + } + + &.product-search { + i { + font-size: 13px; + color: rgba(0, 0, 0, 0.54); + top: 12px; + } + + .form-control { + padding-left: 35px; + } + } +} + +// offcanvas page css +.customer-body { + height: calc(100% - 60px); +} +.offcanvas-top, +.offcanvas-bottom { + min-height: 240px; +} diff --git a/jambotron-ui/src/scss/themes/generic.scss b/jambotron-ui/src/scss/themes/generic.scss new file mode 100644 index 0000000..102780c --- /dev/null +++ b/jambotron-ui/src/scss/themes/generic.scss @@ -0,0 +1,184 @@ +/** ===================== + Generic-class css start +========================== **/ +/*====== Padding , Margin css starts ======*/ +$i: 0; +@while $i<=50 { + .p { + &-#{$i} { + padding: #{$i}px; + } + + &-t-#{$i} { + padding-top: #{$i}px; + } + + &-b-#{$i} { + padding-bottom: #{$i}px; + } + + &-l-#{$i} { + padding-left: #{$i}px; + } + + &-r-#{$i} { + padding-right: #{$i}px; + } + } + + .m { + &-#{$i} { + margin: #{$i}px; + } + + &-t-#{$i} { + margin-top: #{$i}px; + } + + &-b-#{$i} { + margin-bottom: #{$i}px; + } + + &-l-#{$i} { + margin-left: #{$i}px; + } + + &-r-#{$i} { + margin-right: #{$i}px; + } + } + $i: $i + 5; +} +/*====== Padding , Margin css ends ======*/ +/*====== Font-size css starts ======*/ +$i: 6; +@while $i<=80 { + .f-#{$i} { + font-size: #{$i}px; + } + $i: $i + 2; +} +/*====== Font-size css ends ======*/ +/*====== Font-weight css starts ======*/ +$i: 100; +@while $i<=900 { + .f-w-#{$i} { + font-weight: #{$i}; + } + $i: $i + 100; +} +/*====== Font-weight css ends ======*/ +/*====== width, Height css starts ======*/ +$i: 10; +@while $i<=150 { + .wid-#{$i} { + width: #{$i}px; + } + + .hei-#{$i} { + height: #{$i}px; + } + $i: $i + 5; +} +/*====== width, Height css ends ======*/ +/*====== border-width css starts ======*/ +$i: 1; +@while $i<=8 { + .b-wid-#{$i} { + border-width: #{$i}px; + } + $i: $i + 1; +} +/*====== border-width css ends ======*/ +/*====== background starts ======*/ + +.text-header { + color: var(--bs-heading-color); +} +.bg-body { + background: var(--bs-body-bg); +} +@each $color, $value in $theme-colors { + .bg-light-#{$color} { + background: shift-color($value, $soft-bg-level); + color: $value; + } + + .icon-svg-#{$color} { + fill: shift-color($value, $soft-bg-level); + stroke: $value; + } + + .material-icons-two-tone { + &.text-#{$color} { + background-color: $value; + } + } + .text-hover-#{$color}:hover { + color: $value !important; + } +} +/*====== background ends ======*/ +/*====== border color css starts ======*/ +@each $color, $value in $theme-colors { + .b-#{$color} { + border: 1px solid $value; + } + + .border-bottom-#{$color} td { + border-bottom: 1px solid $value; + } + + .border-bottom-#{$color} th { + border-bottom: 1px solid $value !important; + } + + .fill-#{$color} { + fill: $value; + } +} +/*====== border color css ends ======*/ +/*====== text-color, background color css starts ======*/ + +.text-sm { + font-size: 0.75rem !important; +} + +/*====== more bootstrap colors start ======*/ +$more-colors: ( + 'blue': ( + 100: $blue-100, + 200: $blue-200, + 300: $blue-300, + 400: $blue-400, + 500: $blue-500, + 600: $blue-600, + 700: $blue-700, + 800: $blue-800, + 900: $blue-900 + ), + 'gray': ( + 100: $gray-100, + 200: $gray-200, + 300: $gray-300, + 400: $gray-400, + 500: $gray-500, + 600: $gray-600, + 700: $gray-700, + 800: $gray-800, + 900: $gray-900 + ) +); +@each $name, $value in $more-colors { + $i: 100; + @while $i<=900 { + .bg-#{$name}-#{$i} { + background: map-get($value, $i); + } + .text-#{$name}-#{$i} { + color: map-get($value, $i); + } + $i: $i + 100; + } +} +/*====== more bootstrap colors end ======*/ diff --git a/jambotron-ui/src/scss/themes/layouts/breadcrumb/breadcrumb.scss b/jambotron-ui/src/scss/themes/layouts/breadcrumb/breadcrumb.scss new file mode 100644 index 0000000..1b6a23b --- /dev/null +++ b/jambotron-ui/src/scss/themes/layouts/breadcrumb/breadcrumb.scss @@ -0,0 +1,65 @@ +.page-header { + display: flex; + align-items: center; + top: $header-height; + left: $sidebar-width; + right: 0; + z-index: 1023; + min-height: 55px; + padding: 0px 0px 13px 0px; + background: transparent; + border-radius: $border-radius; + + .page-block { + width: 100%; + } + + .page-header-title { + display: inline-block; + } + + h5 { + margin-bottom: 0; + margin-right: 8px; + padding-right: 8px; + font-weight: 500; + } + + .breadcrumb { + padding: 0; + display: inline-flex; + margin-bottom: 0; + background: transparent; + font-size: 13px; + + a { + color: var(--pc-sidebar-color); + } + + .breadcrumb-item { + .home { + color: $gray-600; + font-size: 14px; + } + + a:hover { + color: $primary; + } + + + .breadcrumb-item::before { + position: relative; + top: 2px; + } + + &:last-child { + opacity: 0.75; + } + } + + svg { + width: 14px; + height: 14px; + vertical-align: baseline; + } + } +} diff --git a/jambotron-ui/src/scss/themes/layouts/footer/footer.scss b/jambotron-ui/src/scss/themes/layouts/footer/footer.scss new file mode 100644 index 0000000..ccfdf10 --- /dev/null +++ b/jambotron-ui/src/scss/themes/layouts/footer/footer.scss @@ -0,0 +1,23 @@ +.pc-footer { + position: relative; + z-index: 995; + margin-left: $sidebar-width; + margin-top: $header-height; + padding: 15px 0; + background: rgb(250, 250, 251); + padding: 12px 48px; + + .footer-wrapper { + padding-left: 20px; + padding-right: 20px; + } + + .footer-link { + .list-inline-item:not(:last-child) { + margin-right: 0.9rem; + } + } + @media (max-width: 1024px) { + margin-left: 0; + } +} diff --git a/jambotron-ui/src/scss/themes/layouts/menu/sidebar.scss b/jambotron-ui/src/scss/themes/layouts/menu/sidebar.scss new file mode 100644 index 0000000..320f103 --- /dev/null +++ b/jambotron-ui/src/scss/themes/layouts/menu/sidebar.scss @@ -0,0 +1,338 @@ +.pc-sidebar { + background: var(--pc-sidebar-background); + width: $sidebar-width; + position: fixed; + top: 0; + bottom: 0; + overflow: hidden; + z-index: 1026; + box-shadow: var(--pc-sidebar-shadow); + display: block; + height: 100vh; + color: var(--pc-sidebar-color); + border-right: 1px solid rgb(240, 240, 240); + + a { + color: #262626; + cursor: pointer; + } + + .navbar-wrapper { + width: 100%; + height: 100%; + } + + ul { + list-style: none; + padding-left: 0; + margin-bottom: 0; + } + + .m-header { + height: $header-height; + display: flex; + align-items: center; + padding: 16px 24px; + position: relative; + + .logo-sm { + display: none; + } + } + + .nav-card { + background: $gray-100; + } + + .user-profile-section { + padding: 10px 24px; + border-top: 2px solid rgb(240, 240, 240); + .dropdown-toggle::after { + display: none; + } + + .user-images { + position: relative; + display: flex; + align-items: center; + justify-content: center; + line-height: 1; + border-radius: 50%; + overflow: hidden; + width: 46px; + height: 46px; + + img { + width: 100%; + height: 100%; + text-align: center; + object-fit: cover; + color: transparent; + text-indent: 10000px; + } + } + } + + &.navbar-collapsed { + width: 0px; + height: 100%; + transition: all 0.3s ease-in-out; + + ~ app-nav-bar .pc-header { + left: 0px; + } + + ~ .pc-footer { + margin-left: 20px; + } + + ~ .pc-container { + margin-left: 0px; + } + + .navbar-wrapper { + .m-header { + left: -260px; + } + } + } + .navbar-content { + // position: relative; + // height: calc(100vh - 60px); + padding: 16px 0; + + .coded-inner-navbar { + flex-direction: column; + + app-nav-item > li.active:after { + top: 0 !important; + height: 100% !important; + } + + li { + &.coded-hasmenu { + position: relative; + padding-bottom: 2px; + + > a { + &:after { + content: '\e844'; + font-family: 'feather'; + font-size: 15px; + border: none; + position: absolute; + top: 11px; + right: 20px; + transition: 0.3s ease-in-out; + } + } + + .coded-submenu { + opacity: 0; + visibility: hidden; + transform-origin: 50% 50%; + transition: + transform 0.3s, + opacity 0.3s; + transform-style: preserve-3d; + transform: rotateX(-90deg); + position: absolute; + display: block; + + > app-nav-item li { + > a { + text-align: left; + padding: 12px 30px 12px 55px; + margin: 0; + display: block; + + &:before { + content: ''; + position: absolute; + top: 0; + right: 0; + width: 2px; + height: 100%; + } + } + } + + > app-nav-collapse li { + > a { + text-align: left; + padding: 12px 30px 12px 55px; + margin: 0; + display: block; + } + .coded-submenu > { + app-nav-item li { + > a { + padding: 12px 30px 12px 75px; + } + } + } + } + } + + &.coded-trigger { + > a { + &:after { + transform: rotate(90deg); + } + } + + > .coded-submenu { + position: relative; + opacity: 1; + visibility: visible; + transform: rotateX(0deg); + } + } + } + + &.coded-menu-caption { + font-size: 0.75rem; + font-weight: 500; + padding: 12px 24px 12px; + text-transform: capitalize; + position: relative; + color: $gray-600; + + &.first-group { + padding: 0px 24px 12px; + } + } + + > a { + padding: 12px 16px 12px 28px; + display: flex; + align-items: center; + border-radius: 5px; + position: relative; + + .coded-mtext { + position: relative; + } + + > .coded-micon { + font-size: 16px; + margin-right: 8px; + height: 16px; + display: inline-block; + text-align: center; + + i { + display: flex; + } + + + .coded-mtext { + position: relative; + vertical-align: middle; + text-align: center; + } + } + } + } + + app-nav-item { + li { + > a { + > .coded-micon { + margin-right: 12px; + } + } + } + } + + > app-nav-group > app-nav-item { + li { + position: relative; + &:before { + content: ''; + position: absolute; + top: 0; + right: 0; + width: 2px; + height: 100%; + } + } + } + } + } + + .version { + display: flex; + flex-direction: row; + justify-content: center; + margin-bottom: 16px; + cursor: pointer; + + label { + overflow: hidden; + text-overflow: ellipsis; + padding-left: 8px; + padding-right: 8px; + white-space: nowrap; + background-color: rgb(250, 250, 250); + color: rgb(158, 158, 158); + border-radius: 16px; + } + } +} + +@media (min-width: 1025px) { + .pc-sidebar { + transition: width 0.15s ease; + ~ .pc-header { + transition: left 0.15s ease; + } + ~ .pc-footer, + ~ .pc-container { + transition: margin-left 0.15s ease; + } + &.pc-sidebar-hide { + width: 0; + ~ .pc-header { + left: 0; + } + ~ .pc-footer, + ~ .pc-container { + margin-left: 0px; + } + } + } +} + +@media (max-width: 1024px) { + .pc-header .pc-h-item.pc-sidebar-collapse { + display: none; + } + .pc-sidebar { + left: -#{$sidebar-width}; + box-shadow: none; + top: 0; + transition: all 0.15s ease-in-out; + + &.mob-open { + left: 0; + + .navbar-wrapper { + position: relative; + z-index: 5; + background: inherit; + } + + ~ .pc-container { + .pc-menu-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + z-index: 1025; + } + } + } + } +} diff --git a/jambotron-ui/src/scss/themes/layouts/navbar/navbar.scss b/jambotron-ui/src/scss/themes/layouts/navbar/navbar.scss new file mode 100644 index 0000000..7e5240c --- /dev/null +++ b/jambotron-ui/src/scss/themes/layouts/navbar/navbar.scss @@ -0,0 +1,465 @@ +.pc-header { + background: var(--pc-header-background); + color: var(--pc-header-color); + min-height: $header-height; + border-bottom: 1px solid rgb(240, 240, 240); + position: fixed; + left: $sidebar-width; + right: 0; + z-index: 1025; + display: flex; + + ul { + margin-bottom: 0; + display: inline-flex; + } + + .m-header { + height: $header-height; + display: flex; + align-items: center; + justify-content: space-between; + width: $sidebar-width; + padding: 16px 10px 16px 24px; + } + + .header-wrapper { + display: flex; + padding: 0 25px 0px 12px; + flex-grow: 1; + justify-content: space-between; + + @include media-breakpoint-down(sm) { + padding: 0 15px; + } + } + + .header-search { + position: relative; + + .form-control { + border-radius: $border-radius; + padding: 0.344rem 1.8rem; + width: 200px; + max-width: 100%; + font-size: 0.75rem; + + @media (max-width: 1024px) { + width: 100%; + } + } + + .search { + position: absolute; + top: 5px; + left: 11px; + width: 12px; + height: 12px; + } + + .btn-search { + position: absolute; + top: 7px; + right: 9px; + padding: 0; + display: inline-flex; + align-items: center; + justify-content: center; + width: 34px; + height: 34px; + border-radius: $border-radius; + } + } + + .pc-h-item { + min-height: $header-height; + display: flex; + align-items: center; + position: relative; + } + + .pc-head-link { + margin: 0 8px; + position: relative; + font-weight: 500; + padding: 0; + display: inline-flex; + align-items: center; + justify-content: center; + width: 34px; + height: 34px; + border-radius: $border-radius; + color: var(--pc-header-color); + overflow: hidden; + + &.dropdown-toggle::after { + display: none; + } + + &::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 1; + background: var(--pc-active-background); + border-radius: 50%; + transform: scale(0); + transition: all 0.08s cubic-bezier(0.37, 0.24, 0.53, 0.99); + } + + > img, + > span, + > svg, + > i { + position: relative; + z-index: 5; + transition: all 0.08s cubic-bezier(0.37, 0.24, 0.53, 0.99); + } + + > i { + color: var(--pc-header-color); + font-size: 16px; + } + + > svg { + width: 20px; + height: 20px; + } + + &.active, + &:active, + &:focus, + &:hover { + text-decoration: none; + color: var(--pc-header-color); + + > svg, + > i { + color: var(--pc-header-color); + } + + &::before { + border-radius: 0; + transform: scale(1); + } + + .hamburger { + .hamburger-inner { + background-color: $secondary; + + &::after, + &::before { + background-color: $secondary; + } + } + } + + i.material-icons-two-tone { + background-color: $secondary; + } + } + + .pc-h-badge { + display: flex; + flex-flow: wrap; + place-content: center; + font-weight: 500; + font-size: 0.75rem; + line-height: 1; + transition: transform 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; + transform-origin: 100% 0%; + min-width: 16px; + height: 16px; + padding: 4px; + position: absolute; + top: 2px; + right: 2px; + border-radius: 50%; + z-index: 9; + + &.dots { + width: 9px; + height: 9px; + top: 7px; + right: 16px; + padding: 0; + } + } + + .user-desc, + .user-name { + display: block; + line-height: 1; + } + + .user-name { + margin-bottom: 5px; + + font: { + size: 15px; + weight: 600; + } + } + + .user-desc { + font: { + size: 12px; + weight: 400; + } + + color: var(--pc-header-color); + } + + .settings { + animation: anim-rotate 2s infinite linear; + } + } + + .pc-h-dropdown { + transform: none !important; + top: 100% !important; + + &.dropdown-menu-end { + right: 0 !important; + left: auto !important; + } + } + + .drp-search { + min-width: 20rem; + } + + .user-avatar { + width: 40px; + border-radius: 50%; + } + + .header-user-profile { + .pc-head-link { + width: auto; + padding: 7px; + + > span > i { + font-size: 22px; + margin-right: 8px; + } + + .user-avatar { + width: 34px; + } + + @include media-breakpoint-down(sm) { + width: 40px; + + .user-avatar { + margin-right: 0; + } + + > span, + > span > i { + display: none; + } + } + } + } + + .dropdown-user-profile { + min-width: 290px; + max-width: 100%; + .drp-tabs { + border-bottom: 0; + display: flex; + margin-bottom: 10px; + .nav-item { + margin-bottom: -0px; + .nav-link { + position: relative; + padding: 0.7rem; + font-weight: 500; + color: $body-color; + display: flex; + align-items: center; + justify-content: center; + i { + font-size: 18px; + margin: 0 4px; + } + .material-icons-two-tone { + font-size: 20px; + } + &:after { + content: ''; + background: $primary; + position: absolute; + transition: all 0.3s ease-in-out; + left: 50%; + right: 50%; + bottom: -1px; + height: 2px; + border-radius: 2px 2px 0 0; + } + } + } + + .nav-link:hover { + border-color: transparent; + color: $primary; + .material-icons-two-tone { + background-color: $primary; + } + } + + .nav-item.show .nav-link, + .nav-link.active { + border-color: transparent; + color: $primary; + .material-icons-two-tone { + background-color: $primary; + } + &:after { + left: 0; + right: 0; + } + } + } + .tab-content { + .dropdown-item { + i { + font-size: 14px; + } + svg { + margin-right: 0px; + width: 14px; + height: 14px; + } + } + } + } + + .dropdown-notification { + min-width: 420px; + max-width: 100%; + + .list-group-item-action { + &:active, + &:hover, + &:focus { + background: shift-color($primary, $soft-bg-level); + } + + .user-avatar, + h5 { + cursor: pointer; + } + } + + .badge { + font-size: 0.8125rem; + padding: 0.43em 1em; + } + + .user-avatar { + display: flex; + align-items: center; + justify-content: center; + width: 40px; + height: 40px; + font-size: 20px; + } + + .notification-file { + display: flex; + align-items: center; + + i { + font-size: 20px; + margin-right: 16px; + } + } + @media (max-width: 575.98px) { + min-width: 100%; + } + } +} + +@keyframes anim-rotate { + 0% { + transform: rotate(0); + } + + to { + transform: rotate(360deg); + } +} + +@media (min-width: 1025px) { + .pc-header .pc-h-item.pc-sidebar-popup { + display: none; + } +} + +@media (max-width: 1024px) { + .pc-header { + top: 0; + left: 0; + transition: all 0.15s ease-in-out; + + .m-header { + display: none; + } + + .pc-head-link { + .user-desc, + .user-name { + display: none; + } + } + + .pc-mob-drp { + &.mob-drp-active { + .pc-h-item { + display: block; + min-height: auto; + position: relative; + + .pc-head-link { + display: block; + margin: 5px 10px !important; + } + + .dropdown-menu { + position: relative !important; + width: 100%; + float: none; + box-shadow: none; + } + } + + ul { + display: block; + } + } + } + } +} + +@include media-breakpoint-down(sm) { + .pc-header { + .pc-head-link { + padding: 0.65rem; + margin: 0 5px; + } + + .pc-h-item { + position: static; + + .pc-h-dropdown { + left: 0 !important; + right: 0 !important; + } + } + } +} diff --git a/jambotron-ui/src/scss/themes/layouts/pc-common.scss b/jambotron-ui/src/scss/themes/layouts/pc-common.scss new file mode 100644 index 0000000..c45fdd7 --- /dev/null +++ b/jambotron-ui/src/scss/themes/layouts/pc-common.scss @@ -0,0 +1,41 @@ +body { + background-color: $white; +} + +.pc-container { + $temp: $header-height + 53; + position: relative; + top: $header-height; + margin-left: $sidebar-width; + min-height: calc(100vh - #{$temp}); + background: rgba(250, 250, 251, 0.7); + + .coded-content { + padding-left: 48px; + padding-right: 48px; + padding-top: 24px; + @include media-breakpoint-down(xl) { + &.container { + max-width: 100%; + } + } + @include media-breakpoint-down(md) { + padding-left: 32px; + padding-right: 32px; + padding-top: 16px; + } + } + + .page-header + .row { + padding-top: 24px; + } + + .page-header + .coded-content { + padding-top: calc(30px + 55px); + } + + @media (max-width: 1024px) { + margin-left: 0px; + margin-right: 0px; + } +} diff --git a/jambotron-ui/src/scss/themes/preset-style.scss b/jambotron-ui/src/scss/themes/preset-style.scss new file mode 100644 index 0000000..57ca0af --- /dev/null +++ b/jambotron-ui/src/scss/themes/preset-style.scss @@ -0,0 +1,87 @@ +@import '../settings/color-variables.scss'; + +:root { + @each $name, $value in $preset-colors { + $pc-primary: map-get($value, 'primary'); + $color-rgb: to-rgb($pc-primary); + --bs-blue: #{$pc-primary}; + --bs-primary-rgb: #{$color-rgb}; + } +} + +.pc-sidebar { + .coded-inner-navbar { + > app-nav-group { + > app-nav-collapse { + .coded-hasmenu { + &.active, + &:focus, + &:hover { + > a { + background: rgba(var(--bs-primary-rgb), 0.1); + } + + &.coded-trigger { + > a { + color: var(--bs-blue); + background: none; + } + + .coded-submenu { + > app-nav-item { + li { + &.active, + &:focus, + &:hover { + > a { + background: rgba(var(--bs-primary-rgb), 0.1); + } + } + } + } + } + } + } + } + + .coded-submenu > app-nav-item li { + &.active { + > a { + background: rgba(var(--bs-primary-rgb), 0.1); + color: var(--bs-blue); + + &:before { + background: var(--bs-blue); + } + } + } + } + } + > app-nav-item { + li { + &.nav-item { + &.active, + &:focus, + &:hover { + background: rgba(var(--bs-primary-rgb), 0.1); + } + + &.active { + > a { + color: var(--bs-blue); + + .coded-micon { + color: var(--bs-blue); + } + } + + &:before { + background: var(--bs-blue); + } + } + } + } + } + } + } +} diff --git a/jambotron-ui/src/server.ts b/jambotron-ui/src/server.ts new file mode 100644 index 0000000..e6546c4 --- /dev/null +++ b/jambotron-ui/src/server.ts @@ -0,0 +1,68 @@ +import { + AngularNodeAppEngine, + createNodeRequestHandler, + isMainModule, + writeResponseToNodeResponse, +} from '@angular/ssr/node'; +import express from 'express'; +import { join } from 'node:path'; + +const browserDistFolder = join(import.meta.dirname, '../browser'); + +const app = express(); +const angularApp = new AngularNodeAppEngine(); + +/** + * Example Express Rest API endpoints can be defined here. + * Uncomment and define endpoints as necessary. + * + * Example: + * ```ts + * app.get('/api/{*splat}', (req, res) => { + * // Handle API request + * }); + * ``` + */ + +/** + * Serve static files from /browser + */ +app.use( + express.static(browserDistFolder, { + maxAge: '1y', + index: false, + redirect: false, + }), +); + +/** + * Handle all other requests by rendering the Angular application. + */ +app.use((req, res, next) => { + angularApp + .handle(req) + .then((response) => + response ? writeResponseToNodeResponse(response, res) : next(), + ) + .catch(next); +}); + +/** + * Start the server if this module is the main entry point. + * The server listens on the port defined by the `PORT` environment variable, or defaults to 4000. + */ +if (isMainModule(import.meta.url)) { + const port = process.env['PORT'] || 4000; + app.listen(port, (error) => { + if (error) { + throw error; + } + + console.log(`Node Express server listening on http://localhost:${port}`); + }); +} + +/** + * Request handler used by the Angular CLI (for dev-server and during build) or Firebase Cloud Functions. + */ +export const reqHandler = createNodeRequestHandler(app); diff --git a/jambotron-ui/src/styles.scss b/jambotron-ui/src/styles.scss index 6a65fe0..cea92f3 100644 --- a/jambotron-ui/src/styles.scss +++ b/jambotron-ui/src/styles.scss @@ -1,4 +1,42 @@ /* You can add global styles to this file, and also import other style files */ +/**====================================================================== +========================================================================= +Template Name: MAntis Angular - Angular Admin Template +Author: codedThemes +Support: https://codedthemes.support-hub.io/ +File: style.css +========================================================================= +=================================================================================== */ + +// main framework +@import '../node_modules/bootstrap/scss/functions'; +@import '../node_modules/bootstrap/scss/variables'; +@import '../node_modules/bootstrap/scss/variables-dark'; + +@import 'scss/settings/color-variables'; +@import 'scss/settings/theme-variables'; +@import 'scss/settings/bootstrap-variables'; + +// bootstrap import +@import 'scss/bootstrap/bootstrap.scss'; + +@import '../node_modules/bootstrap/scss/utilities'; +@import '../node_modules/bootstrap/scss/utilities/api'; + +// main framework +@import 'scss/themes/generic.scss'; +@import 'scss/themes/general.scss'; + +@import 'scss/themes/components/components.scss'; + +// theme +@import 'scss/themes/layouts/menu/sidebar.scss'; +@import 'scss/themes/layouts/navbar/navbar.scss'; +@import 'scss/themes/layouts/pc-common.scss'; +@import 'scss/themes/layouts/breadcrumb/breadcrumb.scss'; +@import 'scss/themes/layouts/footer/footer.scss'; + +@import 'scss/themes/preset-style.scss'; html, body { height: 100%; } body { @@ -8,3 +46,8 @@ body { background-size: cover; margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } + +.router_outlet_padding{ + padding-top: 60px; + scroll-padding-inline: 40%; +} diff --git a/jambotron-ui/tsconfig.app.json b/jambotron-ui/tsconfig.app.json index 32a7a81..ef19921 100644 --- a/jambotron-ui/tsconfig.app.json +++ b/jambotron-ui/tsconfig.app.json @@ -5,8 +5,7 @@ "compilerOptions": { "outDir": "./out-tsc/app", "types": [ - "node", - "@angular/localize" + "node" ] }, "include": [ diff --git a/logs/application.log.2025-06-21.0.gz b/logs/application.log.2025-06-21.0.gz new file mode 100644 index 0000000..f916f89 Binary files /dev/null and b/logs/application.log.2025-06-21.0.gz differ diff --git a/logs/application.log.2025-06-22.0.gz b/logs/application.log.2025-06-22.0.gz new file mode 100644 index 0000000..3f93117 Binary files /dev/null and b/logs/application.log.2025-06-22.0.gz differ diff --git a/logs/application.log.2025-06-23.0.gz b/logs/application.log.2025-06-23.0.gz new file mode 100644 index 0000000..83ead94 Binary files /dev/null and b/logs/application.log.2025-06-23.0.gz differ diff --git a/logs/application.log.2025-06-24.0.gz b/logs/application.log.2025-06-24.0.gz new file mode 100644 index 0000000..b9e1d05 Binary files /dev/null and b/logs/application.log.2025-06-24.0.gz differ