Compare commits
2 Commits
296fc14072
...
7d75fb1df7
| Author | SHA1 | Date | |
|---|---|---|---|
| 7d75fb1df7 | |||
| 6115bda555 |
@ -3,7 +3,7 @@
|
|||||||
"version": 1,
|
"version": 1,
|
||||||
"newProjectRoot": "projects",
|
"newProjectRoot": "projects",
|
||||||
"projects": {
|
"projects": {
|
||||||
"cronogramas-primeng": {
|
"cronogramas": {
|
||||||
"projectType": "application",
|
"projectType": "application",
|
||||||
"schematics": {
|
"schematics": {
|
||||||
"@schematics/angular:component": {
|
"@schematics/angular:component": {
|
||||||
@ -17,7 +17,7 @@
|
|||||||
"build": {
|
"build": {
|
||||||
"builder": "@angular-devkit/build-angular:application",
|
"builder": "@angular-devkit/build-angular:application",
|
||||||
"options": {
|
"options": {
|
||||||
"outputPath": "dist/cronogramas-primeng",
|
"outputPath": "dist/cronogramas",
|
||||||
"index": "src/index.html",
|
"index": "src/index.html",
|
||||||
"browser": "src/main.ts",
|
"browser": "src/main.ts",
|
||||||
"polyfills": [
|
"polyfills": [
|
||||||
@ -80,10 +80,10 @@
|
|||||||
"builder": "@angular-devkit/build-angular:dev-server",
|
"builder": "@angular-devkit/build-angular:dev-server",
|
||||||
"configurations": {
|
"configurations": {
|
||||||
"production": {
|
"production": {
|
||||||
"buildTarget": "cronogramas-primeng:build:production"
|
"buildTarget": "cronogramas:build:production"
|
||||||
},
|
},
|
||||||
"development": {
|
"development": {
|
||||||
"buildTarget": "cronogramas-primeng:build:development"
|
"buildTarget": "cronogramas:build:development"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"defaultConfiguration": "development"
|
"defaultConfiguration": "development"
|
||||||
|
|||||||
409
package-lock.json
generated
409
package-lock.json
generated
@ -1,12 +1,13 @@
|
|||||||
{
|
{
|
||||||
"name": "cronogramas-primeng",
|
"name": "cronogramas",
|
||||||
"version": "0.0.0",
|
"version": "0.1.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "cronogramas-primeng",
|
"name": "cronogramas",
|
||||||
"version": "0.0.0",
|
"version": "0.1.0",
|
||||||
|
"hasInstallScript": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@angular/common": "^19.2.0",
|
"@angular/common": "^19.2.0",
|
||||||
"@angular/compiler": "^19.2.0",
|
"@angular/compiler": "^19.2.0",
|
||||||
@ -19,6 +20,7 @@
|
|||||||
"animate.css": "^4.1.1",
|
"animate.css": "^4.1.1",
|
||||||
"exceljs": "^4.4.0",
|
"exceljs": "^4.4.0",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
|
"pdfmake": "^0.2.19",
|
||||||
"primeflex": "^4.0.0",
|
"primeflex": "^4.0.0",
|
||||||
"primeicons": "^7.0.0",
|
"primeicons": "^7.0.0",
|
||||||
"primeng": "^19.1.0",
|
"primeng": "^19.1.0",
|
||||||
@ -32,6 +34,7 @@
|
|||||||
"@angular/compiler-cli": "^19.2.0",
|
"@angular/compiler-cli": "^19.2.0",
|
||||||
"@types/file-saver": "^2.0.7",
|
"@types/file-saver": "^2.0.7",
|
||||||
"@types/jasmine": "~5.1.0",
|
"@types/jasmine": "~5.1.0",
|
||||||
|
"@types/pdfmake": "^0.2.11",
|
||||||
"@types/xlsx": "^0.0.35",
|
"@types/xlsx": "^0.0.35",
|
||||||
"jasmine-core": "~5.6.0",
|
"jasmine-core": "~5.6.0",
|
||||||
"karma": "~6.4.0",
|
"karma": "~6.4.0",
|
||||||
@ -2869,6 +2872,57 @@
|
|||||||
"integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==",
|
"integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/@foliojs-fork/fontkit": {
|
||||||
|
"version": "1.9.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.2.tgz",
|
||||||
|
"integrity": "sha512-IfB5EiIb+GZk+77TRB86AHroVaqfq8JRFlUbz0WEwsInyCG0epX2tCPOy+UfaWPju30DeVoUAXfzWXmhn753KA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@foliojs-fork/restructure": "^2.0.2",
|
||||||
|
"brotli": "^1.2.0",
|
||||||
|
"clone": "^1.0.4",
|
||||||
|
"deep-equal": "^1.0.0",
|
||||||
|
"dfa": "^1.2.0",
|
||||||
|
"tiny-inflate": "^1.0.2",
|
||||||
|
"unicode-properties": "^1.2.2",
|
||||||
|
"unicode-trie": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@foliojs-fork/linebreak": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-ZPohpxxbuKNE0l/5iBJnOAfUaMACwvUIKCvqtWGKIMv1lPYoNjYXRfhi9FeeV9McBkBLxsMFWTVVhHJA8cyzvg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"base64-js": "1.3.1",
|
||||||
|
"unicode-trie": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@foliojs-fork/linebreak/node_modules/base64-js": {
|
||||||
|
"version": "1.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
|
||||||
|
"integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/@foliojs-fork/pdfkit": {
|
||||||
|
"version": "0.15.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.15.3.tgz",
|
||||||
|
"integrity": "sha512-Obc0Wmy3bm7BINFVvPhcl2rnSSK61DQrlHU8aXnAqDk9LCjWdUOPwhgD8Ywz5VtuFjRxmVOM/kQ/XLIBjDvltw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@foliojs-fork/fontkit": "^1.9.2",
|
||||||
|
"@foliojs-fork/linebreak": "^1.1.1",
|
||||||
|
"crypto-js": "^4.2.0",
|
||||||
|
"jpeg-exif": "^1.1.4",
|
||||||
|
"png-js": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@foliojs-fork/restructure": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/@inquirer/checkbox": {
|
"node_modules/@inquirer/checkbox": {
|
||||||
"version": "4.1.5",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.5.tgz",
|
||||||
@ -5261,6 +5315,27 @@
|
|||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/pdfkit": {
|
||||||
|
"version": "0.13.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/pdfkit/-/pdfkit-0.13.9.tgz",
|
||||||
|
"integrity": "sha512-RDG8Yb1zT7I01FfpwK7nMSA433XWpblMqSCtA5vJlSyavWZb303HUYPCel6JTiDDFqwGLvtAnYbH8N/e0Cb89g==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/pdfmake": {
|
||||||
|
"version": "0.2.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/pdfmake/-/pdfmake-0.2.11.tgz",
|
||||||
|
"integrity": "sha512-gglgMQhnG6C2kco13DJlvokqTxL+XKxHwCejElH8fSCNF9ZCkRK6Mzo011jQ0zuug+YlIgn6BpcpZrARyWdW3Q==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/node": "*",
|
||||||
|
"@types/pdfkit": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@types/qs": {
|
"node_modules/@types/qs": {
|
||||||
"version": "6.9.18",
|
"version": "6.9.18",
|
||||||
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz",
|
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz",
|
||||||
@ -6177,6 +6252,15 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/brotli": {
|
||||||
|
"version": "1.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz",
|
||||||
|
"integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"base64-js": "^1.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/browserslist": {
|
"node_modules/browserslist": {
|
||||||
"version": "4.24.4",
|
"version": "4.24.4",
|
||||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
|
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
|
||||||
@ -6425,11 +6509,28 @@
|
|||||||
"node": ">=18"
|
"node": ">=18"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/call-bind": {
|
||||||
|
"version": "1.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
|
||||||
|
"integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"call-bind-apply-helpers": "^1.0.0",
|
||||||
|
"es-define-property": "^1.0.0",
|
||||||
|
"get-intrinsic": "^1.2.4",
|
||||||
|
"set-function-length": "^1.2.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/call-bind-apply-helpers": {
|
"node_modules/call-bind-apply-helpers": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
|
||||||
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
|
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"es-errors": "^1.3.0",
|
"es-errors": "^1.3.0",
|
||||||
@ -6443,7 +6544,6 @@
|
|||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
|
||||||
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
|
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"call-bind-apply-helpers": "^1.0.2",
|
"call-bind-apply-helpers": "^1.0.2",
|
||||||
@ -6707,7 +6807,6 @@
|
|||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
|
||||||
"integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
|
"integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.8"
|
"node": ">=0.8"
|
||||||
@ -7107,6 +7206,12 @@
|
|||||||
"node": ">= 8"
|
"node": ">= 8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/crypto-js": {
|
||||||
|
"version": "4.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
|
||||||
|
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/css-loader": {
|
"node_modules/css-loader": {
|
||||||
"version": "7.1.2",
|
"version": "7.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz",
|
||||||
@ -7227,6 +7332,26 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/deep-equal": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"is-arguments": "^1.1.1",
|
||||||
|
"is-date-object": "^1.0.5",
|
||||||
|
"is-regex": "^1.1.4",
|
||||||
|
"object-is": "^1.1.5",
|
||||||
|
"object-keys": "^1.1.1",
|
||||||
|
"regexp.prototype.flags": "^1.5.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/default-browser": {
|
"node_modules/default-browser": {
|
||||||
"version": "5.2.1",
|
"version": "5.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz",
|
||||||
@ -7270,6 +7395,23 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/define-data-property": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"es-define-property": "^1.0.0",
|
||||||
|
"es-errors": "^1.3.0",
|
||||||
|
"gopd": "^1.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/define-lazy-prop": {
|
"node_modules/define-lazy-prop": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
|
||||||
@ -7283,6 +7425,23 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/define-properties": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"define-data-property": "^1.0.1",
|
||||||
|
"has-property-descriptors": "^1.0.0",
|
||||||
|
"object-keys": "^1.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/depd": {
|
"node_modules/depd": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
|
||||||
@ -7322,6 +7481,12 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/dfa": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/di": {
|
"node_modules/di": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
|
||||||
@ -7418,7 +7583,6 @@
|
|||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
||||||
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"call-bind-apply-helpers": "^1.0.1",
|
"call-bind-apply-helpers": "^1.0.1",
|
||||||
@ -7700,7 +7864,6 @@
|
|||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
||||||
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
@ -7710,7 +7873,6 @@
|
|||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
|
||||||
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
|
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
@ -7727,7 +7889,6 @@
|
|||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
|
||||||
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
|
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"es-errors": "^1.3.0"
|
"es-errors": "^1.3.0"
|
||||||
@ -8446,7 +8607,15 @@
|
|||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||||
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
||||||
"dev": true,
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/functions-have-names": {
|
||||||
|
"version": "1.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
|
||||||
|
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
@ -8489,7 +8658,6 @@
|
|||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
||||||
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
|
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"call-bind-apply-helpers": "^1.0.2",
|
"call-bind-apply-helpers": "^1.0.2",
|
||||||
@ -8514,7 +8682,6 @@
|
|||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
|
||||||
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"dunder-proto": "^1.0.1",
|
"dunder-proto": "^1.0.1",
|
||||||
@ -8600,7 +8767,6 @@
|
|||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
||||||
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
@ -8632,11 +8798,22 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/has-property-descriptors": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"es-define-property": "^1.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/has-symbols": {
|
"node_modules/has-symbols": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
||||||
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
@ -8649,7 +8826,6 @@
|
|||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
|
||||||
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
|
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"has-symbols": "^1.0.3"
|
"has-symbols": "^1.0.3"
|
||||||
@ -8665,7 +8841,6 @@
|
|||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
||||||
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"function-bind": "^1.1.2"
|
"function-bind": "^1.1.2"
|
||||||
@ -9099,6 +9274,22 @@
|
|||||||
"node": ">= 10"
|
"node": ">= 10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/is-arguments": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"call-bound": "^1.0.2",
|
||||||
|
"has-tostringtag": "^1.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/is-arrayish": {
|
"node_modules/is-arrayish": {
|
||||||
"version": "0.2.1",
|
"version": "0.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
|
||||||
@ -9135,6 +9326,22 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/is-date-object": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"call-bound": "^1.0.2",
|
||||||
|
"has-tostringtag": "^1.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/is-docker": {
|
"node_modules/is-docker": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
|
||||||
@ -9266,7 +9473,6 @@
|
|||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
|
||||||
"integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
|
"integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"call-bound": "^1.0.2",
|
"call-bound": "^1.0.2",
|
||||||
@ -9498,6 +9704,12 @@
|
|||||||
"jiti": "bin/jiti.js"
|
"jiti": "bin/jiti.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/jpeg-exif": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/jpeg-exif/-/jpeg-exif-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-a+bKEcCjtuW5WTdgeXFzswSrdqi0jk4XlEtZlx5A94wCoBpFjfFTbo/Tra5SpNCl/YFZPvcV1dJc+TAYeg6ROQ==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/js-tokens": {
|
"node_modules/js-tokens": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||||
@ -10591,7 +10803,6 @@
|
|||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
||||||
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
@ -11425,6 +11636,31 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/object-is": {
|
||||||
|
"version": "1.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
|
||||||
|
"integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"call-bind": "^1.0.7",
|
||||||
|
"define-properties": "^1.2.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/object-keys": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/obuf": {
|
"node_modules/obuf": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
|
||||||
@ -11925,6 +12161,33 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/pdfmake": {
|
||||||
|
"version": "0.2.19",
|
||||||
|
"resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.19.tgz",
|
||||||
|
"integrity": "sha512-jVUILxOqAgcquxbGCz3Bo1/sGEuVLcReGYvo61oJ2EkkyfrlREd7TfLRF6jdF85aEQjxOj/6BD9uj0p+UfXNkw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@foliojs-fork/linebreak": "^1.1.2",
|
||||||
|
"@foliojs-fork/pdfkit": "^0.15.3",
|
||||||
|
"iconv-lite": "^0.6.3",
|
||||||
|
"xmldoc": "^2.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/pdfmake/node_modules/iconv-lite": {
|
||||||
|
"version": "0.6.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||||
|
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/picocolors": {
|
"node_modules/picocolors": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
||||||
@ -11982,6 +12245,11 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/png-js": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g=="
|
||||||
|
},
|
||||||
"node_modules/postcss": {
|
"node_modules/postcss": {
|
||||||
"version": "8.5.2",
|
"version": "8.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz",
|
||||||
@ -12426,6 +12694,26 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/regexp.prototype.flags": {
|
||||||
|
"version": "1.5.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
|
||||||
|
"integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"call-bind": "^1.0.8",
|
||||||
|
"define-properties": "^1.2.1",
|
||||||
|
"es-errors": "^1.3.0",
|
||||||
|
"get-proto": "^1.0.1",
|
||||||
|
"gopd": "^1.2.0",
|
||||||
|
"set-function-name": "^2.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/regexpu-core": {
|
"node_modules/regexpu-core": {
|
||||||
"version": "6.2.0",
|
"version": "6.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz",
|
||||||
@ -12766,7 +13054,6 @@
|
|||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/sass": {
|
"node_modules/sass": {
|
||||||
@ -12835,9 +13122,7 @@
|
|||||||
"version": "1.4.1",
|
"version": "1.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
|
||||||
"integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
|
"integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
|
||||||
"dev": true,
|
"license": "ISC"
|
||||||
"license": "ISC",
|
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"node_modules/saxes": {
|
"node_modules/saxes": {
|
||||||
"version": "5.0.1",
|
"version": "5.0.1",
|
||||||
@ -13100,6 +13385,38 @@
|
|||||||
"node": ">= 0.8"
|
"node": ">= 0.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/set-function-length": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
|
||||||
|
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"define-data-property": "^1.1.4",
|
||||||
|
"es-errors": "^1.3.0",
|
||||||
|
"function-bind": "^1.1.2",
|
||||||
|
"get-intrinsic": "^1.2.4",
|
||||||
|
"gopd": "^1.0.1",
|
||||||
|
"has-property-descriptors": "^1.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/set-function-name": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"define-data-property": "^1.1.4",
|
||||||
|
"es-errors": "^1.3.0",
|
||||||
|
"functions-have-names": "^1.2.3",
|
||||||
|
"has-property-descriptors": "^1.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/setimmediate": {
|
"node_modules/setimmediate": {
|
||||||
"version": "1.0.5",
|
"version": "1.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
|
||||||
@ -14011,6 +14328,12 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/tiny-inflate": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/tinyglobby": {
|
"node_modules/tinyglobby": {
|
||||||
"version": "0.2.13",
|
"version": "0.2.13",
|
||||||
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
|
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
|
||||||
@ -14237,6 +14560,16 @@
|
|||||||
"node": ">=4"
|
"node": ">=4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/unicode-properties": {
|
||||||
|
"version": "1.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz",
|
||||||
|
"integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"base64-js": "^1.3.0",
|
||||||
|
"unicode-trie": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/unicode-property-aliases-ecmascript": {
|
"node_modules/unicode-property-aliases-ecmascript": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
|
||||||
@ -14247,6 +14580,22 @@
|
|||||||
"node": ">=4"
|
"node": ">=4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/unicode-trie": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"pako": "^0.2.5",
|
||||||
|
"tiny-inflate": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unicode-trie/node_modules/pako": {
|
||||||
|
"version": "0.2.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
|
||||||
|
"integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/unicorn-magic": {
|
"node_modules/unicorn-magic": {
|
||||||
"version": "0.3.0",
|
"version": "0.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
|
||||||
@ -15455,6 +15804,18 @@
|
|||||||
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
|
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/xmldoc": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-sOOqgsjl3PU6iBw+fBUGAkTCE+JFK+sBaOL3pnZgzqk2/yvOD7RlFmZtDRJAEBzdpOYxSXyOQH4mjubdfs3MSg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"sax": "^1.2.4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/y18n": {
|
"node_modules/y18n": {
|
||||||
"version": "5.0.8",
|
"version": "5.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "cronogramas-primeng",
|
"name": "cronogramas",
|
||||||
"version": "0.0.0",
|
"version": "0.1.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"ng": "ng",
|
"ng": "ng",
|
||||||
"start": "ng serve",
|
"start": "ng serve",
|
||||||
@ -23,6 +23,7 @@
|
|||||||
"animate.css": "^4.1.1",
|
"animate.css": "^4.1.1",
|
||||||
"exceljs": "^4.4.0",
|
"exceljs": "^4.4.0",
|
||||||
"file-saver": "^2.0.5",
|
"file-saver": "^2.0.5",
|
||||||
|
"pdfmake": "^0.2.19",
|
||||||
"primeflex": "^4.0.0",
|
"primeflex": "^4.0.0",
|
||||||
"primeicons": "^7.0.0",
|
"primeicons": "^7.0.0",
|
||||||
"primeng": "^19.1.0",
|
"primeng": "^19.1.0",
|
||||||
@ -36,6 +37,7 @@
|
|||||||
"@angular/compiler-cli": "^19.2.0",
|
"@angular/compiler-cli": "^19.2.0",
|
||||||
"@types/file-saver": "^2.0.7",
|
"@types/file-saver": "^2.0.7",
|
||||||
"@types/jasmine": "~5.1.0",
|
"@types/jasmine": "~5.1.0",
|
||||||
|
"@types/pdfmake": "^0.2.11",
|
||||||
"@types/xlsx": "^0.0.35",
|
"@types/xlsx": "^0.0.35",
|
||||||
"jasmine-core": "~5.6.0",
|
"jasmine-core": "~5.6.0",
|
||||||
"karma": "~6.4.0",
|
"karma": "~6.4.0",
|
||||||
@ -44,5 +46,6 @@
|
|||||||
"karma-jasmine": "~5.1.0",
|
"karma-jasmine": "~5.1.0",
|
||||||
"karma-jasmine-html-reporter": "~2.1.0",
|
"karma-jasmine-html-reporter": "~2.1.0",
|
||||||
"typescript": "~5.7.2"
|
"typescript": "~5.7.2"
|
||||||
}
|
},
|
||||||
|
"description": "cronogramas - Proyecto generado desde template"
|
||||||
}
|
}
|
||||||
@ -7,6 +7,7 @@ import { provideAnimations } from '@angular/platform-browser/animations';
|
|||||||
import { providePrimeNG } from 'primeng/config';
|
import { providePrimeNG } from 'primeng/config';
|
||||||
import Aura from '@primeng/themes/aura';
|
import Aura from '@primeng/themes/aura';
|
||||||
import { authInterceptor } from './interceptors/auth.interceptor';
|
import { authInterceptor } from './interceptors/auth.interceptor';
|
||||||
|
import { MessageService } from 'primeng/api';
|
||||||
|
|
||||||
export const appConfig: ApplicationConfig = {
|
export const appConfig: ApplicationConfig = {
|
||||||
providers: [
|
providers: [
|
||||||
@ -24,6 +25,7 @@ export const appConfig: ApplicationConfig = {
|
|||||||
darkModeSelector: false || 'none'
|
darkModeSelector: false || 'none'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
}),
|
||||||
|
MessageService
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|||||||
28
src/app/components/alert-dialog/alert-dialog.component.html
Normal file
28
src/app/components/alert-dialog/alert-dialog.component.html
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<p-dialog
|
||||||
|
[(visible)]="visible"
|
||||||
|
[modal]="true"
|
||||||
|
[draggable]="false"
|
||||||
|
[resizable]="false"
|
||||||
|
[closeOnEscape]="true"
|
||||||
|
[style]="{width: '400px'}"
|
||||||
|
[contentStyle]="{'text-align': 'center', 'padding': '20px'}"
|
||||||
|
styleClass="alert-dialog"
|
||||||
|
[header]="title">
|
||||||
|
|
||||||
|
<div class="flex flex-column align-items-center">
|
||||||
|
<i class="pi text-8xl mb-4" [ngClass]="getIconClass()"></i>
|
||||||
|
<div class="text-xl font-semibold mb-3" *ngIf="title">{{ title }}</div>
|
||||||
|
<div class="text-center mb-5">{{ message }}</div>
|
||||||
|
|
||||||
|
<div class="flex justify-content-center gap-2">
|
||||||
|
<button *ngIf="showCancelButton" pButton (click)="cancel()"
|
||||||
|
class="p-button-outlined p-button-secondary"
|
||||||
|
[label]="cancelButtonText">
|
||||||
|
</button>
|
||||||
|
<button *ngIf="showConfirmButton" pButton (click)="confirm()"
|
||||||
|
class="p-button-primary"
|
||||||
|
[label]="confirmButtonText">
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</p-dialog>
|
||||||
11
src/app/components/alert-dialog/alert-dialog.component.scss
Normal file
11
src/app/components/alert-dialog/alert-dialog.component.scss
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
:host ::ng-deep {
|
||||||
|
.alert-dialog {
|
||||||
|
.p-dialog-header {
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-dialog-content {
|
||||||
|
overflow-y: visible;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
75
src/app/components/alert-dialog/alert-dialog.component.ts
Normal file
75
src/app/components/alert-dialog/alert-dialog.component.ts
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
import { Component, inject } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { DialogModule } from 'primeng/dialog';
|
||||||
|
import { ButtonModule } from 'primeng/button';
|
||||||
|
import { Subject } from 'rxjs';
|
||||||
|
|
||||||
|
export interface AlertDialogOptions {
|
||||||
|
visible: boolean;
|
||||||
|
title: string;
|
||||||
|
message: string;
|
||||||
|
icon: 'success' | 'error' | 'warning' | 'info' | 'question';
|
||||||
|
showConfirmButton: boolean;
|
||||||
|
confirmButtonText: string;
|
||||||
|
showCancelButton: boolean;
|
||||||
|
cancelButtonText: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-alert-dialog',
|
||||||
|
standalone: true,
|
||||||
|
imports: [CommonModule, DialogModule, ButtonModule],
|
||||||
|
templateUrl: './alert-dialog.component.html',
|
||||||
|
styleUrls: ['./alert-dialog.component.scss']
|
||||||
|
})
|
||||||
|
export class AlertDialogComponent {
|
||||||
|
visible = false;
|
||||||
|
title = '';
|
||||||
|
message = '';
|
||||||
|
icon: 'success' | 'error' | 'warning' | 'info' | 'question' = 'success';
|
||||||
|
showConfirmButton = true;
|
||||||
|
confirmButtonText = 'Aceptar';
|
||||||
|
showCancelButton = false;
|
||||||
|
cancelButtonText = 'Cancelar';
|
||||||
|
|
||||||
|
private confirmSubject = new Subject<boolean>();
|
||||||
|
public onConfirm = this.confirmSubject.asObservable();
|
||||||
|
|
||||||
|
show(options: Partial<AlertDialogOptions> = {}): void {
|
||||||
|
this.visible = true;
|
||||||
|
this.title = options.title || this.title;
|
||||||
|
this.message = options.message || this.message;
|
||||||
|
this.icon = options.icon || this.icon;
|
||||||
|
this.showConfirmButton = options.showConfirmButton !== undefined ? options.showConfirmButton : this.showConfirmButton;
|
||||||
|
this.confirmButtonText = options.confirmButtonText || this.confirmButtonText;
|
||||||
|
this.showCancelButton = options.showCancelButton !== undefined ? options.showCancelButton : this.showCancelButton;
|
||||||
|
this.cancelButtonText = options.cancelButtonText || this.cancelButtonText;
|
||||||
|
}
|
||||||
|
|
||||||
|
confirm(): void {
|
||||||
|
this.visible = false;
|
||||||
|
this.confirmSubject.next(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
cancel(): void {
|
||||||
|
this.visible = false;
|
||||||
|
this.confirmSubject.next(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
getIconClass(): string {
|
||||||
|
switch (this.icon) {
|
||||||
|
case 'success':
|
||||||
|
return 'pi-check-circle text-green-500';
|
||||||
|
case 'error':
|
||||||
|
return 'pi-times-circle text-red-500';
|
||||||
|
case 'warning':
|
||||||
|
return 'pi-exclamation-triangle text-yellow-500';
|
||||||
|
case 'info':
|
||||||
|
return 'pi-info-circle text-blue-500';
|
||||||
|
case 'question':
|
||||||
|
return 'pi-question-circle text-purple-500';
|
||||||
|
default:
|
||||||
|
return 'pi-check-circle text-green-500';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +1,7 @@
|
|||||||
|
|
||||||
<div class="layout-wrapper">
|
<div class="layout-wrapper">
|
||||||
|
<p-toast baseZIndex="2000"></p-toast>
|
||||||
|
|
||||||
<!-- Overlay para cerrar el sidebar al hacer clic fuera (solo en móviles) -->
|
<!-- Overlay para cerrar el sidebar al hacer clic fuera (solo en móviles) -->
|
||||||
<div *ngIf="isSidebarVisible && window.innerWidth <= 992" class="sidebar-overlay" (click)="toggleSidebar()"></div>
|
<div *ngIf="isSidebarVisible && window.innerWidth <= 992" class="sidebar-overlay" (click)="toggleSidebar()"></div>
|
||||||
|
|
||||||
|
|||||||
@ -5,6 +5,8 @@ import { NavbarComponent } from '../navbar/navbar.component';
|
|||||||
import { SidebarComponent } from '../sidebar/sidebar.component';
|
import { SidebarComponent } from '../sidebar/sidebar.component';
|
||||||
import { FooterComponent } from "../footer/footer.component";
|
import { FooterComponent } from "../footer/footer.component";
|
||||||
import { RouteAnimationsComponent } from '../route-animations/route-animations.component';
|
import { RouteAnimationsComponent } from '../route-animations/route-animations.component';
|
||||||
|
import { ToastModule } from 'primeng/toast';
|
||||||
|
import { MessageService } from 'primeng/api';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-layout',
|
selector: 'app-layout',
|
||||||
@ -14,11 +16,12 @@ import { RouteAnimationsComponent } from '../route-animations/route-animations.c
|
|||||||
NavbarComponent,
|
NavbarComponent,
|
||||||
SidebarComponent,
|
SidebarComponent,
|
||||||
FooterComponent,
|
FooterComponent,
|
||||||
RouteAnimationsComponent
|
RouteAnimationsComponent,
|
||||||
|
ToastModule
|
||||||
],
|
],
|
||||||
templateUrl: './layout.component.html',
|
templateUrl: './layout.component.html',
|
||||||
styleUrl: './layout.component.scss',
|
styleUrl: './layout.component.scss',
|
||||||
standalone: true,
|
standalone: true
|
||||||
})
|
})
|
||||||
export class LayoutComponent implements OnInit {
|
export class LayoutComponent implements OnInit {
|
||||||
isSidebarVisible: boolean = true;
|
isSidebarVisible: boolean = true;
|
||||||
|
|||||||
21
src/app/components/visor-pdf/visor-pdf.component.html
Normal file
21
src/app/components/visor-pdf/visor-pdf.component.html
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<div class="pdf-container">
|
||||||
|
<div class="pdf-viewer">
|
||||||
|
<iframe [src]="pdfSrc | safe" width="100%" height="100%"></iframe>
|
||||||
|
</div>
|
||||||
|
<div class="toolbar">
|
||||||
|
<button pButton type="button" class="p-button p-button-danger" (click)="descargarPDF()">
|
||||||
|
<i class="pi pi-file-pdf" style="margin-right: 8px;"></i>
|
||||||
|
Descargar PDF
|
||||||
|
</button>
|
||||||
|
<button pButton type="button" class="p-button p-button-success ml-2" (click)="enviarPDF()" [disabled]="enviando">
|
||||||
|
<ng-container *ngIf="!enviando; else cargando">
|
||||||
|
<i class="pi pi-send" style="margin-right: 8px;"></i>
|
||||||
|
Enviar
|
||||||
|
</ng-container>
|
||||||
|
<ng-template #cargando>
|
||||||
|
<p-progressSpinner [style]="{width: '20px', height: '20px'}" styleClass="custom-spinner" strokeWidth="4" fill="var(--surface-ground)" animationDuration=".5s"></p-progressSpinner>
|
||||||
|
<span style="margin-left: 8px;">Enviando...</span>
|
||||||
|
</ng-template>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
22
src/app/components/visor-pdf/visor-pdf.component.scss
Normal file
22
src/app/components/visor-pdf/visor-pdf.component.scss
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
.pdf-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbar {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: 10px;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pdf-viewer {
|
||||||
|
flex: 1;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
iframe {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
23
src/app/components/visor-pdf/visor-pdf.component.spec.ts
Normal file
23
src/app/components/visor-pdf/visor-pdf.component.spec.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { VisorPdfComponent } from './visor-pdf.component';
|
||||||
|
|
||||||
|
describe('VisorPdfComponent', () => {
|
||||||
|
let component: VisorPdfComponent;
|
||||||
|
let fixture: ComponentFixture<VisorPdfComponent>;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
await TestBed.configureTestingModule({
|
||||||
|
imports: [VisorPdfComponent]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
|
||||||
|
fixture = TestBed.createComponent(VisorPdfComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
73
src/app/components/visor-pdf/visor-pdf.component.ts
Normal file
73
src/app/components/visor-pdf/visor-pdf.component.ts
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
import { Component, OnInit, inject } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { DynamicDialogRef, DynamicDialogConfig } from 'primeng/dynamicdialog';
|
||||||
|
import { SafePipe } from '../../../pipes/safe.pipe';
|
||||||
|
import { ButtonModule } from 'primeng/button';
|
||||||
|
import { ToastModule } from 'primeng/toast';
|
||||||
|
import { ProgressSpinnerModule } from 'primeng/progressspinner';
|
||||||
|
import { MessageService } from 'primeng/api';
|
||||||
|
|
||||||
|
import { PdfService } from '../../services/pdf.service';
|
||||||
|
import { AlertService } from '../../services/alert.service';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-visor-pdf',
|
||||||
|
standalone: true,
|
||||||
|
imports: [
|
||||||
|
CommonModule,
|
||||||
|
SafePipe,
|
||||||
|
ButtonModule,
|
||||||
|
ToastModule,
|
||||||
|
ProgressSpinnerModule
|
||||||
|
],
|
||||||
|
templateUrl: './visor-pdf.component.html',
|
||||||
|
styleUrls: ['./visor-pdf.component.scss']
|
||||||
|
})
|
||||||
|
export class VisorPdfComponent implements OnInit {
|
||||||
|
product: any;
|
||||||
|
pdfSrc: string = '';
|
||||||
|
enviando: boolean = false;
|
||||||
|
|
||||||
|
// Inyectar servicios usando la nueva sintaxis de Angular
|
||||||
|
private dialogRef = inject(DynamicDialogRef);
|
||||||
|
private config = inject(DynamicDialogConfig);
|
||||||
|
private messageService = inject(MessageService);
|
||||||
|
private pdfService = inject(PdfService);
|
||||||
|
private alertService = inject(AlertService);
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
// Obtener el producto pasado a través del servicio de diálogo
|
||||||
|
this.product = this.config.data?.product;
|
||||||
|
|
||||||
|
// Generar el PDF
|
||||||
|
this.generarPDF();
|
||||||
|
}
|
||||||
|
|
||||||
|
generarPDF() {
|
||||||
|
this.pdfService.generateCronogramaPdf(this.product).then(dataUrl => {
|
||||||
|
this.pdfSrc = dataUrl;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
descargarPDF() {
|
||||||
|
this.pdfService.downloadCronogramaPdf('cronograma', this.product);
|
||||||
|
}
|
||||||
|
|
||||||
|
enviarPDF() {
|
||||||
|
this.enviando = true;
|
||||||
|
console.log('Enviando PDF...');
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
this.enviando = false;
|
||||||
|
console.log('Mostrando mensaje de envio...')
|
||||||
|
this.alertService.success(
|
||||||
|
'El cronograma ha sido enviado correctamente a la plataforma.',
|
||||||
|
'¡Enviado con éxito!'
|
||||||
|
);
|
||||||
|
}, 2000);
|
||||||
|
}
|
||||||
|
|
||||||
|
cerrar() {
|
||||||
|
this.dialogRef.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,18 +1,23 @@
|
|||||||
<div class="p-3 text-white">
|
<div class="p-3 text-white">
|
||||||
<!-- Tabla1 -->
|
<!-- Tabla1 -->
|
||||||
<div class="font-bold tituloTabla my-2">Cronogramas aprobados:</div>
|
<div class="font-bold tituloTabla my-2">Cronogramas aprobados:</div>
|
||||||
<p-table id="verde"
|
<p-table
|
||||||
[value]="products" stripedRows
|
id="verde"
|
||||||
|
[value]="products"
|
||||||
|
stripedRows
|
||||||
showGridlines
|
showGridlines
|
||||||
[paginator]="true"
|
[paginator]="true"
|
||||||
[rows]="5"
|
[rows]="5"
|
||||||
[showCurrentPageReport]="true"
|
[showCurrentPageReport]="true"
|
||||||
currentPageReportTemplate="Mostrando del {first} al {last} de un total de {totalRecords} registros"
|
currentPageReportTemplate="Mostrando del {first} al {last} de un total de {totalRecords} registros"
|
||||||
[rowsPerPageOptions]="[5, 10, 20]">
|
[rowsPerPageOptions]="[5, 10, 20]"
|
||||||
|
>
|
||||||
<ng-template #header>
|
<ng-template #header>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="bg-green-400 text-white font-bold">Empresa</th>
|
<th class="bg-green-400 text-white font-bold">Empresa</th>
|
||||||
<th class="bg-green-400 text-white font-bold">Código de cronograma</th>
|
<th class="bg-green-400 text-white font-bold">
|
||||||
|
Código de cronograma
|
||||||
|
</th>
|
||||||
<th class="bg-green-400 text-white font-bold">Nombre sistema</th>
|
<th class="bg-green-400 text-white font-bold">Nombre sistema</th>
|
||||||
<th class="bg-green-400 text-white font-bold">Tipo</th>
|
<th class="bg-green-400 text-white font-bold">Tipo</th>
|
||||||
</tr>
|
</tr>
|
||||||
@ -23,9 +28,15 @@
|
|||||||
<td>{{ product.codigoCronograma }}</td>
|
<td>{{ product.codigoCronograma }}</td>
|
||||||
<td>{{ product.codigoCronogramaAjuste }}</td>
|
<td>{{ product.codigoCronogramaAjuste }}</td>
|
||||||
<td>{{ product.tipoCarga }}</td>
|
<td>{{ product.tipoCarga }}</td>
|
||||||
<td style="background-color: #F8F9FA;border: none;width: 50px;">
|
<td style="background-color: #f8f9fa; border: none; width: 50px">
|
||||||
<button pTooltip="Firma digital" tooltipPosition="left" showDelay="300" style="background: transparent; border: none; cursor: pointer;">
|
<button
|
||||||
<i class="pi pi-pen-to-square" style="font-size: 24px;"></i>
|
pTooltip="Firma digital"
|
||||||
|
tooltipPosition="left"
|
||||||
|
(click)="firma(product)"
|
||||||
|
showDelay="300"
|
||||||
|
style="background: transparent; border: none; cursor: pointer"
|
||||||
|
>
|
||||||
|
<i class="pi pi-pen-to-square" style="font-size: 24px"></i>
|
||||||
</button>
|
</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -33,18 +44,23 @@
|
|||||||
</p-table>
|
</p-table>
|
||||||
|
|
||||||
<div class="font-bold tituloTabla my-2">Cronogramas rechazados:</div>
|
<div class="font-bold tituloTabla my-2">Cronogramas rechazados:</div>
|
||||||
<p-table id="ploma"
|
<p-table
|
||||||
[value]="products" stripedRows
|
id="ploma"
|
||||||
|
[value]="products"
|
||||||
|
stripedRows
|
||||||
showGridlines
|
showGridlines
|
||||||
[paginator]="true"
|
[paginator]="true"
|
||||||
[rows]="5"
|
[rows]="5"
|
||||||
[showCurrentPageReport]="true"
|
[showCurrentPageReport]="true"
|
||||||
currentPageReportTemplate="Mostrando del {first} al {last} de un total de {totalRecords} registros"
|
currentPageReportTemplate="Mostrando del {first} al {last} de un total de {totalRecords} registros"
|
||||||
[rowsPerPageOptions]="[5, 10, 20]">
|
[rowsPerPageOptions]="[5, 10, 20]"
|
||||||
|
>
|
||||||
<ng-template #header>
|
<ng-template #header>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="tablaPloma text-white font-bold">Empresa</th>
|
<th class="tablaPloma text-white font-bold">Empresa</th>
|
||||||
<th class="tablaPloma text-white font-bold">Código de cronograma</th>
|
<th class="tablaPloma text-white font-bold">
|
||||||
|
Código de cronograma
|
||||||
|
</th>
|
||||||
<th class="tablaPloma text-white font-bold">Nombre sistema</th>
|
<th class="tablaPloma text-white font-bold">Nombre sistema</th>
|
||||||
<th class="tablaPloma text-white font-bold">Tipo</th>
|
<th class="tablaPloma text-white font-bold">Tipo</th>
|
||||||
</tr>
|
</tr>
|
||||||
@ -55,9 +71,14 @@
|
|||||||
<td>{{ product.codigoCronograma }}</td>
|
<td>{{ product.codigoCronograma }}</td>
|
||||||
<td>{{ product.codigoCronogramaAjuste }}</td>
|
<td>{{ product.codigoCronogramaAjuste }}</td>
|
||||||
<td>{{ product.tipoCarga }}</td>
|
<td>{{ product.tipoCarga }}</td>
|
||||||
<td style="background-color: #F8F9FA;border: none;width: 50px;">
|
<td style="background-color: #f8f9fa; border: none; width: 50px">
|
||||||
<button pTooltip="Notificar a unidad de información o empresa" tooltipPosition="left" showDelay="300" style="background: transparent; border: none; cursor: pointer;">
|
<button
|
||||||
<i class="pi pi-arrow-circle-right" style="font-size: 24px;"></i>
|
pTooltip="Notificar a unidad de información o empresa"
|
||||||
|
tooltipPosition="left"
|
||||||
|
showDelay="300"
|
||||||
|
style="background: transparent; border: none; cursor: pointer"
|
||||||
|
>
|
||||||
|
<i class="pi pi-arrow-circle-right" style="font-size: 24px"></i>
|
||||||
</button>
|
</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@ -3,14 +3,21 @@ import { FormsModule } from '@angular/forms';
|
|||||||
import { TableModule } from 'primeng/table';
|
import { TableModule } from 'primeng/table';
|
||||||
import { InputTextModule } from 'primeng/inputtext';
|
import { InputTextModule } from 'primeng/inputtext';
|
||||||
import { TooltipModule } from 'primeng/tooltip';
|
import { TooltipModule } from 'primeng/tooltip';
|
||||||
|
import { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog';
|
||||||
|
import { VisorPdfComponent } from '../../components/visor-pdf/visor-pdf.component';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-resumen',
|
selector: 'app-resumen',
|
||||||
imports: [FormsModule, TableModule, InputTextModule, TooltipModule],
|
imports: [FormsModule, TableModule, InputTextModule, TooltipModule],
|
||||||
templateUrl: './resumen.component.html',
|
templateUrl: './resumen.component.html',
|
||||||
styleUrl: './resumen.component.scss'
|
styleUrl: './resumen.component.scss',
|
||||||
|
providers: [DialogService]
|
||||||
})
|
})
|
||||||
export class ResumenComponent {
|
export class ResumenComponent {
|
||||||
|
|
||||||
|
constructor(public dialogService: DialogService) { }
|
||||||
|
|
||||||
|
ref: DynamicDialogRef
|
||||||
products: any[] = [
|
products: any[] = [
|
||||||
{
|
{
|
||||||
empresa: 'Empresa A',
|
empresa: 'Empresa A',
|
||||||
@ -38,4 +45,24 @@ export class ResumenComponent {
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
firma(product: any): void {
|
||||||
|
console.log('Firma digital del producto:', product);
|
||||||
|
this.ref = this.dialogService.open(VisorPdfComponent, {
|
||||||
|
header: 'Visor PDF',
|
||||||
|
width: '80vw',
|
||||||
|
height: '80vh',
|
||||||
|
modal: true,
|
||||||
|
closable: true,
|
||||||
|
maximizable: true,
|
||||||
|
data:{
|
||||||
|
product: product
|
||||||
|
},
|
||||||
|
breakpoints: {
|
||||||
|
'960px': '75vw',
|
||||||
|
'640px': '90vw'
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
128
src/app/services/alert.service.ts
Normal file
128
src/app/services/alert.service.ts
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
import { Injectable, ComponentRef, createComponent, EnvironmentInjector, ApplicationRef } from '@angular/core';
|
||||||
|
import { AlertDialogComponent, AlertDialogOptions } from '../components/alert-dialog/alert-dialog.component';
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class AlertService {
|
||||||
|
private alertRef: ComponentRef<AlertDialogComponent> | null = null;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private injector: EnvironmentInjector,
|
||||||
|
private appRef: ApplicationRef
|
||||||
|
) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Muestra un mensaje de alerta tipo Sweet Alert
|
||||||
|
* @param options Opciones de configuración del alert
|
||||||
|
* @returns Una promesa que se resuelve con true (confirmar) o false (cancelar)
|
||||||
|
*/
|
||||||
|
show(options: Partial<AlertDialogOptions> = {}): Promise<boolean> {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
// Si ya existe un alert, lo eliminamos
|
||||||
|
this.closeCurrentAlert();
|
||||||
|
|
||||||
|
// Creamos el componente dinámicamente
|
||||||
|
this.alertRef = createComponent(AlertDialogComponent, {
|
||||||
|
environmentInjector: this.injector,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Agregamos a la aplicación y al DOM
|
||||||
|
document.body.appendChild(this.alertRef.location.nativeElement);
|
||||||
|
this.appRef.attachView(this.alertRef.hostView);
|
||||||
|
|
||||||
|
// Configuramos las opciones y mostramos
|
||||||
|
this.alertRef.instance.show(options);
|
||||||
|
|
||||||
|
// Manejamos la respuesta
|
||||||
|
const subscription = this.alertRef.instance.onConfirm.subscribe((result) => {
|
||||||
|
subscription.unsubscribe();
|
||||||
|
this.closeCurrentAlert();
|
||||||
|
resolve(result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Muestra un mensaje de éxito
|
||||||
|
* @param message Mensaje a mostrar
|
||||||
|
* @param title Título del alert (opcional)
|
||||||
|
*/
|
||||||
|
success(message: string, title: string = '¡Operación exitosa!'): Promise<boolean> {
|
||||||
|
return this.show({
|
||||||
|
title,
|
||||||
|
message,
|
||||||
|
icon: 'success',
|
||||||
|
showCancelButton: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Muestra un mensaje de error
|
||||||
|
* @param message Mensaje a mostrar
|
||||||
|
* @param title Título del alert (opcional)
|
||||||
|
*/
|
||||||
|
error(message: string, title: string = 'Error'): Promise<boolean> {
|
||||||
|
return this.show({
|
||||||
|
title,
|
||||||
|
message,
|
||||||
|
icon: 'error',
|
||||||
|
showCancelButton: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Muestra un mensaje de advertencia
|
||||||
|
* @param message Mensaje a mostrar
|
||||||
|
* @param title Título del alert (opcional)
|
||||||
|
*/
|
||||||
|
warning(message: string, title: string = 'Advertencia'): Promise<boolean> {
|
||||||
|
return this.show({
|
||||||
|
title,
|
||||||
|
message,
|
||||||
|
icon: 'warning',
|
||||||
|
showCancelButton: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Muestra un mensaje informativo
|
||||||
|
* @param message Mensaje a mostrar
|
||||||
|
* @param title Título del alert (opcional)
|
||||||
|
*/
|
||||||
|
info(message: string, title: string = 'Información'): Promise<boolean> {
|
||||||
|
return this.show({
|
||||||
|
title,
|
||||||
|
message,
|
||||||
|
icon: 'info',
|
||||||
|
showCancelButton: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Muestra un diálogo de confirmación
|
||||||
|
* @param message Mensaje a mostrar
|
||||||
|
* @param title Título del alert (opcional)
|
||||||
|
*/
|
||||||
|
confirm(message: string, title: string = '¿Está seguro?'): Promise<boolean> {
|
||||||
|
return this.show({
|
||||||
|
title,
|
||||||
|
message,
|
||||||
|
icon: 'question',
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonText: 'Sí, confirmar',
|
||||||
|
cancelButtonText: 'Cancelar'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cierra el alert actual si existe
|
||||||
|
*/
|
||||||
|
private closeCurrentAlert(): void {
|
||||||
|
if (this.alertRef) {
|
||||||
|
this.appRef.detachView(this.alertRef.hostView);
|
||||||
|
this.alertRef.location.nativeElement.remove();
|
||||||
|
this.alertRef = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -5,3 +5,5 @@ export * from './ajuste-pd.service';
|
|||||||
export * from './unidad-informacion.service';
|
export * from './unidad-informacion.service';
|
||||||
export * from './tipo-carga.service';
|
export * from './tipo-carga.service';
|
||||||
export * from './estado-aprobacion.service';
|
export * from './estado-aprobacion.service';
|
||||||
|
export * from './pdf.service';
|
||||||
|
export * from './alert.service';
|
||||||
|
|||||||
214
src/app/services/pdf.service.ts
Normal file
214
src/app/services/pdf.service.ts
Normal file
@ -0,0 +1,214 @@
|
|||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import pdfMake from 'pdfmake/build/pdfmake';
|
||||||
|
import pdfFonts from 'pdfmake/build/vfs_fonts';
|
||||||
|
import { TDocumentDefinitions } from 'pdfmake/interfaces';
|
||||||
|
|
||||||
|
pdfMake.vfs = pdfFonts.vfs;
|
||||||
|
|
||||||
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
|
export class PdfService {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Genera un PDF con la definición por defecto para cronogramas
|
||||||
|
* @param data Datos opcionales para personalizar el documento
|
||||||
|
* @returns Promise con la URL de datos del PDF generado
|
||||||
|
*/
|
||||||
|
generateCronogramaPdf(data?: any): Promise<string> {
|
||||||
|
const docDefinition = this.getCronogramaDocDefinition(data);
|
||||||
|
return this.generatePdfDataUrl(docDefinition);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Descarga un PDF con la definición de cronograma
|
||||||
|
* @param filename Nombre del archivo a descargar
|
||||||
|
* @param data Datos opcionales para personalizar el documento
|
||||||
|
*/
|
||||||
|
downloadCronogramaPdf(filename: string = 'cronograma', data?: any): void {
|
||||||
|
const docDefinition = this.getCronogramaDocDefinition(data);
|
||||||
|
pdfMake.createPdf(docDefinition).download(filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Genera una URL de datos a partir de la definición del documento
|
||||||
|
* @param docDefinition Definición del documento PDF
|
||||||
|
* @returns Promise con la URL de datos del PDF
|
||||||
|
*/
|
||||||
|
private generatePdfDataUrl(docDefinition: TDocumentDefinitions): Promise<string> {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
const pdfDocGenerator = pdfMake.createPdf(docDefinition);
|
||||||
|
pdfDocGenerator.getDataUrl((dataUrl) => {
|
||||||
|
resolve(dataUrl);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtiene la definición del documento para un cronograma
|
||||||
|
* @param data Datos opcionales para personalizar el documento
|
||||||
|
* @returns Definición del documento PDF
|
||||||
|
*/
|
||||||
|
private getCronogramaDocDefinition(data?: any): TDocumentDefinitions {
|
||||||
|
return {
|
||||||
|
content: [
|
||||||
|
// Encabezado con información de empresa y cronograma
|
||||||
|
{
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
width: '50%',
|
||||||
|
text: 'Empresa: Constructora Los Andes S.A.',
|
||||||
|
margin: [0, 0, 0, 5]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
width: '50%',
|
||||||
|
text: [
|
||||||
|
{ text: 'Cronograma: SC-23-45\n' },
|
||||||
|
{ text: 'Nombre sistema: Terminal Portuario Norte' }
|
||||||
|
],
|
||||||
|
alignment: 'right',
|
||||||
|
margin: [0, 0, 0, 5]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
// Título y subtítulo
|
||||||
|
{
|
||||||
|
text: 'CRONOGRAMA BASE DE OBRAS E INVERSIONES',
|
||||||
|
alignment: 'center',
|
||||||
|
bold: true,
|
||||||
|
fontSize: 12,
|
||||||
|
margin: [0, 10, 0, 0]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'ACTUALIZACIÓN PLAN DE DESARROLLO O NUEVA CONCESIÓN',
|
||||||
|
alignment: 'center',
|
||||||
|
bold: true,
|
||||||
|
fontSize: 11,
|
||||||
|
margin: [0, 0, 0, 10]
|
||||||
|
},
|
||||||
|
|
||||||
|
// Tabla principal
|
||||||
|
{
|
||||||
|
table: {
|
||||||
|
headerRows: 1,
|
||||||
|
widths: ['10%', '12%', '23%', '12%', '10%', '10%', '10%', '13%'],
|
||||||
|
body: [
|
||||||
|
[
|
||||||
|
{ text: 'ETAPA', style: 'tableHeader', alignment: 'center' },
|
||||||
|
{ text: 'CÓDIGO GLOSA', style: 'tableHeader', alignment: 'center' },
|
||||||
|
{ text: 'DESCRIPCIÓN GLOSA', style: 'tableHeader', alignment: 'center' },
|
||||||
|
{ text: 'MONTO INVERSIÓN UF', style: 'tableHeader', alignment: 'center' },
|
||||||
|
{ text: 'AÑO INICIO', style: 'tableHeader', alignment: 'center' },
|
||||||
|
{ text: 'AÑO TERMINO', style: 'tableHeader', alignment: 'center' },
|
||||||
|
{ text: 'MES TERMINO', style: 'tableHeader', alignment: 'center' },
|
||||||
|
{ text: 'NOTA', style: 'tableHeader', alignment: 'center' }
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ text: '1', alignment: 'center' },
|
||||||
|
{ text: 'INF-001', alignment: 'center' },
|
||||||
|
{ text: 'Estudios preliminares', alignment: 'left' },
|
||||||
|
{ text: '2,500', alignment: 'right' },
|
||||||
|
{ text: '2025', alignment: 'center' },
|
||||||
|
{ text: '2025', alignment: 'center' },
|
||||||
|
{ text: 'Julio', alignment: 'center' },
|
||||||
|
{ text: 'Fase inicial', alignment: 'left' }
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ text: '2', alignment: 'center' },
|
||||||
|
{ text: 'MOV-102', alignment: 'center' },
|
||||||
|
{ text: 'Movimiento de tierras', alignment: 'left' },
|
||||||
|
{ text: '15,750', alignment: 'right' },
|
||||||
|
{ text: '2025', alignment: 'center' },
|
||||||
|
{ text: '2026', alignment: 'center' },
|
||||||
|
{ text: 'Enero', alignment: 'center' },
|
||||||
|
{ text: 'En terreno', alignment: 'left' }
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ text: '3', alignment: 'center' },
|
||||||
|
{ text: 'CIM-203', alignment: 'center' },
|
||||||
|
{ text: 'Construcción de cimientos', alignment: 'left' },
|
||||||
|
{ text: '32,800', alignment: 'right' },
|
||||||
|
{ text: '2026', alignment: 'center' },
|
||||||
|
{ text: '2026', alignment: 'center' },
|
||||||
|
{ text: 'Mayo', alignment: 'center' },
|
||||||
|
{ text: 'Crítico', alignment: 'left' }
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ text: '4', alignment: 'center' },
|
||||||
|
{ text: 'EST-304', alignment: 'center' },
|
||||||
|
{ text: 'Estructura principal', alignment: 'left' },
|
||||||
|
{ text: '65,420', alignment: 'right' },
|
||||||
|
{ text: '2026', alignment: 'center' },
|
||||||
|
{ text: '2027', alignment: 'center' },
|
||||||
|
{ text: 'Febrero', alignment: 'center' },
|
||||||
|
{ text: 'Alta inversión', alignment: 'left' }
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ text: '5', alignment: 'center' },
|
||||||
|
{ text: 'TER-405', alignment: 'center' },
|
||||||
|
{ text: 'Terminaciones y acabados', alignment: 'left' },
|
||||||
|
{ text: '18,300', alignment: 'right' },
|
||||||
|
{ text: '2027', alignment: 'center' },
|
||||||
|
{ text: '2027', alignment: 'center' },
|
||||||
|
{ text: 'Octubre', alignment: 'center' },
|
||||||
|
{ text: 'Etapa final', alignment: 'left' }
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Total
|
||||||
|
{
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
width: '80%',
|
||||||
|
text: 'TOTAL:',
|
||||||
|
alignment: 'right',
|
||||||
|
bold: true,
|
||||||
|
margin: [0, 15, 10, 20]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
width: '20%',
|
||||||
|
text: '134,770 UF',
|
||||||
|
alignment: 'left',
|
||||||
|
bold: true,
|
||||||
|
margin: [0, 15, 0, 20]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
// Firma
|
||||||
|
{
|
||||||
|
text: 'X',
|
||||||
|
alignment: 'center',
|
||||||
|
bold: true,
|
||||||
|
fontSize: 14,
|
||||||
|
margin: [0, 15, 0, 0]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: 'Firma SSS',
|
||||||
|
alignment: 'center',
|
||||||
|
fontSize: 10,
|
||||||
|
margin: [0, 0, 0, 10]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
// Estilos
|
||||||
|
styles: {
|
||||||
|
tableHeader: {
|
||||||
|
bold: true,
|
||||||
|
fontSize: 10,
|
||||||
|
fillColor: '#f2f2f2'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Definiciones de página
|
||||||
|
pageSize: 'A4',
|
||||||
|
pageOrientation: 'portrait',
|
||||||
|
pageMargins: [40, 40, 40, 40]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
14
src/pipes/safe.pipe.ts
Normal file
14
src/pipes/safe.pipe.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import { Pipe, PipeTransform } from '@angular/core';
|
||||||
|
import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
|
||||||
|
|
||||||
|
@Pipe({
|
||||||
|
name: 'safe',
|
||||||
|
standalone: true
|
||||||
|
})
|
||||||
|
export class SafePipe implements PipeTransform {
|
||||||
|
constructor(private sanitizer: DomSanitizer) {}
|
||||||
|
|
||||||
|
transform(url: string): SafeResourceUrl {
|
||||||
|
return this.sanitizer.bypassSecurityTrustResourceUrl(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user