From 4c098256110d590f834ed24206612860a0f9a7fe Mon Sep 17 00:00:00 2001 From: ma7payne Date: Tue, 8 Jul 2025 12:38:12 -0300 Subject: [PATCH] feat(plex): ajustes en multiples componentes --- package-lock.json | 580 -------------------- package.json | 1 - src/lib/button/button.component.spec.ts | 178 ------ src/lib/css/plex-menu.scss | 7 +- src/lib/css/plex-select.scss | 2 +- src/lib/css/plex-slider.scss | 30 - src/lib/css/plex-text.scss | 9 + src/lib/datetime/datetime.component.spec.ts | 182 ------ src/lib/menu/menu.component.ts | 36 +- src/lib/options/options.component.spec.ts | 153 ------ src/lib/slider/slider.component.ts | 41 +- src/lib/text/text.component.ts | 7 +- tsconfig.json | 4 + tsconfig.spec.json | 35 -- 14 files changed, 56 insertions(+), 1209 deletions(-) delete mode 100644 src/lib/button/button.component.spec.ts delete mode 100644 src/lib/datetime/datetime.component.spec.ts delete mode 100644 src/lib/options/options.component.spec.ts delete mode 100644 tsconfig.spec.json diff --git a/package-lock.json b/package-lock.json index e87a9621..01f28dc5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,7 +57,6 @@ "@angular-eslint/eslint-plugin": "^15.2.1", "@angular-eslint/eslint-plugin-template": "^15.2.1", "@angular-eslint/template-parser": "^15.2.1", - "@types/jest": "^30.0.0", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", "eslint-plugin-import": "^2.29.2", @@ -3293,79 +3292,6 @@ "node": ">=8" } }, - "node_modules/@jest/diff-sequences": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", - "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", - "dev": true, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.4.tgz", - "integrity": "sha512-EgXecHDNfANeqOkcak0DxsoVI4qkDUsR7n/Lr2vtmTBjwLPBnnPOF71S11Q8IObWzxm2QgQoY6f9hzrRD3gHRA==", - "dev": true, - "dependencies": { - "@jest/get-type": "30.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/get-type": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz", - "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==", - "dev": true, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/pattern": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", - "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -3809,12 +3735,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true - }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -4020,40 +3940,6 @@ "resolved": "https://registry.npmjs.org/@types/intro.js/-/intro.js-2.4.8.tgz", "integrity": "sha512-cFeswci+krdp/DTyRPFNctz1AJseD43vRT1Mn+fn1FFMitpM657PlYkoLZ4HDoyp3L9Ixm6MgUBv151/8c5yUA==" }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "30.0.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", - "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", - "dev": true, - "dependencies": { - "expect": "^30.0.0", - "pretty-format": "^30.0.0" - } - }, "node_modules/@types/jquery": { "version": "3.5.32", "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.32.tgz", @@ -4172,12 +4058,6 @@ "@types/node": "*" } }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true - }, "node_modules/@types/tether-shepherd": { "version": "1.2.32", "resolved": "https://registry.npmjs.org/@types/tether-shepherd/-/tether-shepherd-1.2.32.tgz", @@ -4192,21 +4072,6 @@ "@types/node": "*" } }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true - }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", @@ -7916,23 +7781,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/expect": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.4.tgz", - "integrity": "sha512-dDLGjnP2cKbEppxVICxI/Uf4YemmGMPNy0QytCbfafbpYk9AFQsxb8Uyrxii0RPK7FWgLGlSem+07WirwS3cFQ==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "30.0.4", - "@jest/get-type": "30.0.1", - "jest-matcher-utils": "30.0.4", - "jest-message-util": "30.0.2", - "jest-mock": "30.0.2", - "jest-util": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, "node_modules/exponential-backoff": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", @@ -10449,123 +10297,6 @@ "colors": "1.4.0" } }, - "node_modules/jest-diff": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.4.tgz", - "integrity": "sha512-TSjceIf6797jyd+R64NXqicttROD+Qf98fex7CowmlSn7f8+En0da1Dglwr1AXxDtVizoxXYZBlUQwNhoOXkNw==", - "dev": true, - "dependencies": { - "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.0.1", - "chalk": "^4.1.2", - "pretty-format": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.4.tgz", - "integrity": "sha512-ubCewJ54YzeAZ2JeHHGVoU+eDIpQFsfPQs0xURPWoNiO42LGJ+QGgfSf+hFIRplkZDkhH5MOvuxHKXRTUU3dUQ==", - "dev": true, - "dependencies": { - "@jest/get-type": "30.0.1", - "chalk": "^4.1.2", - "jest-diff": "30.0.4", - "pretty-format": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", - "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.1", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-mock": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.2.tgz", - "integrity": "sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==", - "dev": true, - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "jest-util": "30.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-regex-util": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", - "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", - "dev": true, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "dependencies": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-util/node_modules/ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/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, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -13202,32 +12933,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pretty-format": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", - "dev": true, - "dependencies": { - "@jest/schemas": "30.0.1", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/proc-log": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", @@ -13418,12 +13123,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "node_modules/read-package-json": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", @@ -14907,27 +14606,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -18961,61 +18639,6 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, - "@jest/diff-sequences": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", - "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", - "dev": true - }, - "@jest/expect-utils": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.4.tgz", - "integrity": "sha512-EgXecHDNfANeqOkcak0DxsoVI4qkDUsR7n/Lr2vtmTBjwLPBnnPOF71S11Q8IObWzxm2QgQoY6f9hzrRD3gHRA==", - "dev": true, - "requires": { - "@jest/get-type": "30.0.1" - } - }, - "@jest/get-type": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz", - "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==", - "dev": true - }, - "@jest/pattern": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", - "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", - "dev": true, - "requires": { - "@types/node": "*", - "jest-regex-util": "30.0.1" - } - }, - "@jest/schemas": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", - "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.34.0" - } - }, - "@jest/types": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", - "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", - "dev": true, - "requires": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - } - }, "@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -19356,12 +18979,6 @@ "tuf-js": "^1.1.7" } }, - "@sinclair/typebox": { - "version": "0.34.37", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", - "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", - "dev": true - }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -19554,40 +19171,6 @@ "resolved": "https://registry.npmjs.org/@types/intro.js/-/intro.js-2.4.8.tgz", "integrity": "sha512-cFeswci+krdp/DTyRPFNctz1AJseD43vRT1Mn+fn1FFMitpM657PlYkoLZ4HDoyp3L9Ixm6MgUBv151/8c5yUA==" }, - "@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "30.0.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", - "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", - "dev": true, - "requires": { - "expect": "^30.0.0", - "pretty-format": "^30.0.0" - } - }, "@types/jquery": { "version": "3.5.32", "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.32.tgz", @@ -19706,12 +19289,6 @@ "@types/node": "*" } }, - "@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true - }, "@types/tether-shepherd": { "version": "1.2.32", "resolved": "https://registry.npmjs.org/@types/tether-shepherd/-/tether-shepherd-1.2.32.tgz", @@ -19726,21 +19303,6 @@ "@types/node": "*" } }, - "@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true - }, "@typescript-eslint/eslint-plugin": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", @@ -22471,20 +22033,6 @@ } } }, - "expect": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.4.tgz", - "integrity": "sha512-dDLGjnP2cKbEppxVICxI/Uf4YemmGMPNy0QytCbfafbpYk9AFQsxb8Uyrxii0RPK7FWgLGlSem+07WirwS3cFQ==", - "dev": true, - "requires": { - "@jest/expect-utils": "30.0.4", - "@jest/get-type": "30.0.1", - "jest-matcher-utils": "30.0.4", - "jest-message-util": "30.0.2", - "jest-mock": "30.0.2", - "jest-util": "30.0.2" - } - }, "exponential-backoff": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", @@ -24306,92 +23854,6 @@ "colors": "1.4.0" } }, - "jest-diff": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.4.tgz", - "integrity": "sha512-TSjceIf6797jyd+R64NXqicttROD+Qf98fex7CowmlSn7f8+En0da1Dglwr1AXxDtVizoxXYZBlUQwNhoOXkNw==", - "dev": true, - "requires": { - "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.0.1", - "chalk": "^4.1.2", - "pretty-format": "30.0.2" - } - }, - "jest-matcher-utils": { - "version": "30.0.4", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.4.tgz", - "integrity": "sha512-ubCewJ54YzeAZ2JeHHGVoU+eDIpQFsfPQs0xURPWoNiO42LGJ+QGgfSf+hFIRplkZDkhH5MOvuxHKXRTUU3dUQ==", - "dev": true, - "requires": { - "@jest/get-type": "30.0.1", - "chalk": "^4.1.2", - "jest-diff": "30.0.4", - "pretty-format": "30.0.2" - } - }, - "jest-message-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", - "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.0.1", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - } - }, - "jest-mock": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.2.tgz", - "integrity": "sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==", - "dev": true, - "requires": { - "@jest/types": "30.0.1", - "@types/node": "*", - "jest-util": "30.0.2" - } - }, - "jest-regex-util": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", - "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", - "dev": true - }, - "jest-util": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", - "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", - "dev": true, - "requires": { - "@jest/types": "30.0.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "dependencies": { - "ci-info": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz", - "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==", - "dev": true - }, - "picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true - } - } - }, "jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -26364,25 +25826,6 @@ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true }, - "pretty-format": { - "version": "30.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", - "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", - "dev": true, - "requires": { - "@jest/schemas": "30.0.1", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, "proc-log": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", @@ -26527,12 +25970,6 @@ } } }, - "react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "read-package-json": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", @@ -27642,23 +27079,6 @@ } } }, - "stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", diff --git a/package.json b/package.json index 66e4bc54..754d859e 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,6 @@ "@angular-eslint/eslint-plugin": "^15.2.1", "@angular-eslint/eslint-plugin-template": "^15.2.1", "@angular-eslint/template-parser": "^15.2.1", - "@types/jest": "^30.0.0", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", "eslint-plugin-import": "^2.29.2", diff --git a/src/lib/button/button.component.spec.ts b/src/lib/button/button.component.spec.ts deleted file mode 100644 index 023f37be..00000000 --- a/src/lib/button/button.component.spec.ts +++ /dev/null @@ -1,178 +0,0 @@ - -import { Component, DebugElement, Type, ViewChild, ViewEncapsulation } from '@angular/core'; -import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; -import { FormsModule } from '@angular/forms'; -import { BrowserModule, By } from '@angular/platform-browser'; -import { Plex } from '../core/service'; -import { PlexModule } from '../module'; -import { PlexButtonComponent } from './button.component'; - -describe('PlexButtonComponent', () => { - - describe('input simple text', () => { - let fixture: ComponentFixture; - let button: PlexButtonComponent; - let native: HTMLInputElement; - - beforeEach(fakeAsync(() => { - fixture = createTestingModule( - PlexButtonTestComponent, - ``); - button = fixture.componentInstance.plexButton; - native = getElement(fixture, 'plex-button').nativeElement; - })); - - it('button click fired', fakeAsync(() => { - spyOn(fixture.componentInstance, 'onChange'); - tickAndDetectChanges(fixture); - dispatchClick(native); - expect(fixture.componentInstance.onChange).toHaveBeenCalledTimes(1); - })); - - it('button label', fakeAsync(() => { - tickAndDetectChanges(fixture); - const element = getElement(fixture, 'plex-button span'); - expect(element.nativeElement.textContent).toBe(' HOLA '); - })); - }); - - describe('button icon', () => { - let fixture; - it('button icon', fakeAsync(() => { - fixture = createTestingModule( - PlexButtonTestComponent, - ``); - - tickAndDetectChanges(fixture); - const element = getElement(fixture, 'plex-button'); - expect(element.nativeElement).toBeDefined(); - expect(element.nativeElement.getAttribute('icon')).toBe('pencil'); - })); - }); - - describe('button text in ng-content', () => { - it('button icon', fakeAsync(() => { - const fixture = createTestingModule( - PlexButtonTestComponent, - `HOLA`); - - tickAndDetectChanges(fixture); - const element = getElement(fixture, 'plex-button button'); - expect(element.nativeElement).toBeDefined(); - expect(element.nativeElement.textContent).toBe('HOLA'); - })); - }); -}); - - -function dispatchClick(element) { - element.dispatchEvent(new Event('click')); -} - -export function tickAndDetectChanges(fixture: ComponentFixture) { - fixture.detectChanges(); - tick(); -} - -export function getPlexElement(fixture: ComponentFixture): DebugElement { - return fixture.debugElement.query(By.css('plex-button')); -} - -export function getElement(fixture: ComponentFixture, selector: string): DebugElement { - return fixture.debugElement.query(By.css(selector)); -} - -export function triggerKeyEvent(event: string, element: DebugElement, which: number, key = ''): void { - element.triggerEventHandler(event, { - which, - key, - preventDefault: () => { }, - }); -} - -@Component({ - template: `` -}) -class PlexButtonTestComponent { - @ViewChild(PlexButtonComponent) plexButton: PlexButtonComponent; - text = 'hola'; - - onChange(_: Event) { - } - - onFocus(_: Event) { - } - - onBlur(_: Event) { - } - - onOpen() { - } - - onClose() { - } - - onAdd() { - } - - onRemove() { - } - - onClear() { - } - - onSearch() { - } - - onScroll() { - } - - onScrollToEnd() { - } -} - -@Component({ - template: ``, - encapsulation: ViewEncapsulation.ShadowDom, -}) -class EncapsulatedPlexButtonTestComponent extends PlexButtonTestComponent { - @ViewChild(PlexButtonComponent, { static: true }) select: PlexButtonComponent; -} - -function createTestingModule(cmp: Type, template: string): ComponentFixture { - - TestBed.configureTestingModule({ - imports: [BrowserModule, PlexModule, FormsModule], - declarations: [cmp], - providers: [Plex], - teardown: { destroyAfterEach: false } -}) - .overrideComponent(cmp, { - set: { - template - } - }); - - - TestBed.compileComponents(); - - const fixture = TestBed.createComponent(cmp); - fixture.detectChanges(); - return fixture; -} - -function createEvent(target = {}) { - return { - preventDefault: () => { - }, - target: { - className: '', - tagName: '', - classList: { - contains: () => { - } - }, - ...target - } - }; -} diff --git a/src/lib/css/plex-menu.scss b/src/lib/css/plex-menu.scss index a429961b..9741b2ac 100644 --- a/src/lib/css/plex-menu.scss +++ b/src/lib/css/plex-menu.scss @@ -38,10 +38,15 @@ padding: 5px 0; padding-left: unset; list-style: none; + display: flex; + flex-direction: column; a { font-size: 0.85rem; - padding-left: 50px; + } + + li { + margin-left: 28px; } } } \ No newline at end of file diff --git a/src/lib/css/plex-select.scss b/src/lib/css/plex-select.scss index 4880a371..42c6e1da 100644 --- a/src/lib/css/plex-select.scss +++ b/src/lib/css/plex-select.scss @@ -152,7 +152,7 @@ $selectize-caret-margin-rtl: 0 4px 0 -2px !default; display: -moz-inline-stack; display: inline-block; zoom: 1; - *display: inline; + display: inline; } .selectize-control.multi & > div { diff --git a/src/lib/css/plex-slider.scss b/src/lib/css/plex-slider.scss index 3b0a30b3..7d222278 100644 --- a/src/lib/css/plex-slider.scss +++ b/src/lib/css/plex-slider.scss @@ -67,36 +67,6 @@ plex-slider { } } } - - // dots - .plex-dots-wrapper { - position: absolute; - top: calc(var(--sliderHeight) + 3px); - left: calc(var(--sliderWidth) / 2); - width: 100%; - display: flex; - justify-content: center; - - >.plex-dot { - padding: 6px; - border-radius: 50%; - border: solid 1px gray; - background-color: white; - margin: 0 5px; - opacity: .5; - transition: background-color .5s ease-out; - - &:hover { - cursor: pointer; - opacity: 1; - } - - &.active { - opacity: .75; - background-color: $blue; - } - } - } } } diff --git a/src/lib/css/plex-text.scss b/src/lib/css/plex-text.scss index 16c84a62..464660f3 100644 --- a/src/lib/css/plex-text.scss +++ b/src/lib/css/plex-text.scss @@ -85,4 +85,13 @@ plex-layout-sidebar[type="invert"] { .text-editor { color: black; } +} + +// Fix para cambiar texto del botón "confirmar" de ingreso de texto con link +.st-input-button { + font-size: 0; +} +.st-input-button::after { + content: 'Confirmar'; + font-size: 14px; } \ No newline at end of file diff --git a/src/lib/datetime/datetime.component.spec.ts b/src/lib/datetime/datetime.component.spec.ts deleted file mode 100644 index 865a7f3e..00000000 --- a/src/lib/datetime/datetime.component.spec.ts +++ /dev/null @@ -1,182 +0,0 @@ - -import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; -import { By, BrowserModule } from '@angular/platform-browser'; -import { Component, DebugElement, Type, ViewChild } from '@angular/core'; - -import { PlexDateTimeComponent } from './datetime.component'; -import { PlexModule } from '../module'; -import { FormsModule } from '@angular/forms'; -import { Plex } from '../core/service'; - -describe('PlexDateTimeComponent', () => { - describe('input simple text', () => { - let fixture: ComponentFixture; - let datetime: PlexDateTimeComponent; - let input: HTMLInputElement; - let nativeText: HTMLInputElement; - - beforeEach(fakeAsync(() => { - fixture = createTestingModule( - PlexDateTimeTestComponent, - ` - `); - datetime = fixture.componentInstance.plexDateTime; - input = getElement(fixture, 'plex-datetime input').nativeElement; - nativeText = getElement(fixture, 'plex-datetime').nativeElement; - })); - - it('writing must update Input variable', fakeAsync(() => { - tickAndDetectChanges(fixture); - writeText(input, '01/01/2019'); - tickAndDetectChanges(fixture); - expect(fixture.componentInstance.text.toJSON().substr(0, 10)).toBe('2019-01-01'); - })); - - it('changing input var must update html DOM', fakeAsync(() => { - tickAndDetectChanges(fixture); - fixture.componentInstance.text = new Date(2019, 0, 1); - tickAndDetectChanges(fixture); - expect(input.value).toBe('01/01/2019'); - })); - - it('after write change must be called', fakeAsync(() => { - spyOn(fixture.componentInstance, 'onChange'); - writeText(input, '01/01/2019'); - tickAndDetectChanges(fixture); - expect(fixture.componentInstance.onChange).toHaveBeenCalled(); - })); - - it('focus on click', fakeAsync(() => { - spyOn(fixture.componentInstance, 'onFocus'); - nativeText.dispatchEvent(new Event('focus')); - - tickAndDetectChanges(fixture); - expect(fixture.componentInstance.onFocus).toHaveBeenCalled(); - })); - }); - - describe('readonly check', () => { - let fixture: ComponentFixture; - let input: HTMLInputElement; - - beforeEach(fakeAsync(() => { - fixture = createTestingModule( - PlexDateTimeTestComponent, - ` - `); - input = getElement(fixture, 'plex-datetime input').nativeElement; - })); - - it('readonly properties', fakeAsync(() => { - const readonly = getElement(fixture, 'plex-datetime input').nativeElement.getAttribute('readonly'); - expect(readonly).toBeDefined(); - })); - - }); - - describe('input debounce text', () => { - let fixture: ComponentFixture; - let text: PlexDateTimeComponent; - let input: HTMLInputElement; - let nativeText: HTMLInputElement; - - beforeEach(fakeAsync(() => { - fixture = createTestingModule( - PlexDateTimeTestComponent, - ` - `); - text = fixture.componentInstance.plexDateTime; - input = getElement(fixture, 'plex-datetime input').nativeElement; - nativeText = getElement(fixture, 'plex-datetime').nativeElement; - })); - - it('after write change must be called', fakeAsync(() => { - spyOn(fixture.componentInstance, 'onChange'); - writeText(input, '01/01/2019'); - tickAndDetectChanges(fixture); - expect(fixture.componentInstance.onChange).toHaveBeenCalledTimes(0); - tick(1100); - expect(fixture.componentInstance.onChange).toHaveBeenCalled(); - })); - - }); -}); - -function writeText(element, text) { - element.value = text; - element.dispatchEvent(new Event('input')); -} - -function tickAndDetectChanges(fixture: ComponentFixture) { - fixture.detectChanges(); - tick(); -} - -function getElement(fixture: ComponentFixture, selector: string): DebugElement { - return fixture.debugElement.query(By.css(selector)); -} - - -@Component({ - template: `` -}) -class PlexDateTimeTestComponent { - @ViewChild(PlexDateTimeComponent) plexDateTime: PlexDateTimeComponent; - text; - - onChange(_: Event) { - } - - onFocus(_: Event) { - } - - onBlur(_: Event) { - } - - onOpen() { - } - - onClose() { - } - - onAdd() { - } - - onRemove() { - } - - onClear() { - } - - onSearch() { - } - - onScroll() { - } - - onScrollToEnd() { - } -} - -function createTestingModule(cmp: Type, template: string): ComponentFixture { - - TestBed.configureTestingModule({ - imports: [BrowserModule, PlexModule, FormsModule], - declarations: [cmp], - providers: [Plex], - teardown: { destroyAfterEach: false } -}) - .overrideComponent(cmp, { - set: { - template - } - }); - - - TestBed.compileComponents(); - - const fixture = TestBed.createComponent(cmp); - fixture.detectChanges(); - return fixture; -} - diff --git a/src/lib/menu/menu.component.ts b/src/lib/menu/menu.component.ts index 20e779c5..4be7fd74 100644 --- a/src/lib/menu/menu.component.ts +++ b/src/lib/menu/menu.component.ts @@ -1,5 +1,7 @@ -import { Component, Input, Output, Renderer2, EventEmitter } from '@angular/core'; +import { Component, Input, Output, Renderer2, EventEmitter, AfterViewInit } from '@angular/core'; import { Plex } from '../core/service'; +import { NavigationEnd, Router } from '@angular/router'; +import { filter } from 'rxjs'; @Component({ selector: 'plex-menu', @@ -54,7 +56,7 @@ import { Plex } from '../core/service'; `, }) -export class PlexMenuComponent { +export class PlexMenuComponent implements AfterViewInit { @Input() menu: any[] = []; @Input() menuOpen = false; @Input() static = false; @@ -62,9 +64,19 @@ export class PlexMenuComponent { @Output() collapseMenu = new EventEmitter(); @Output() selected = new EventEmitter(); - constructor(public plex: Plex, private renderer: Renderer2) { } + constructor(public plex: Plex, private renderer: Renderer2, private router: Router) { } private unlisten: Function; + private currentRoute = ''; + + ngAfterViewInit() { + this.router.events + .pipe(filter(event => event instanceof NavigationEnd)) + .subscribe((event: NavigationEnd) => { + this.currentRoute = event.urlAfterRedirects; + console.log('Ruta activa:', this.currentRoute); + }); + } public toggleMenu() { if (!this.static) { @@ -76,16 +88,30 @@ export class PlexMenuComponent { this.toggleMenu(); this.unlisten(); }); + + this.collapseMenuExceptActive(); } else { if (this.unlisten) { this.unlisten(); } - - this.plex.collapse(); } } } + private collapseMenuExceptActive() { + if (this.menu) { + this.menu.forEach(item => { + if (item.submodulos) { + const hasActiveRoute = item.submodulos.some(subItem => this.currentRoute === subItem.route || this.currentRoute === "/" + subItem.route); + + item.collapsed = !hasActiveRoute; + } else { + item.collapsed = true; + } + }); + } + } + public toggleSubmenu(e, item) { e.stopPropagation(); item.collapsed = !item.collapsed; diff --git a/src/lib/options/options.component.spec.ts b/src/lib/options/options.component.spec.ts deleted file mode 100644 index e848d269..00000000 --- a/src/lib/options/options.component.spec.ts +++ /dev/null @@ -1,153 +0,0 @@ - -import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; -import { By, BrowserModule } from '@angular/platform-browser'; -import { Component, DebugElement, Type, ViewChild, ViewEncapsulation } from '@angular/core'; - -import { PlexOptionsComponent, IPlexOptionsItems } from './options.component'; -import { PlexModule } from '../module'; -import { FormsModule } from '@angular/forms'; - -describe('PlexOptionsComponent', () => { - let fixture: ComponentFixture; - let options: PlexOptionsComponent; - - beforeEach(fakeAsync(() => { - fixture = createTestingModule( - PlexOptionsTestComponent, - `` - ); - options = fixture.componentInstance.component; - tickAndDetectChanges(fixture); - })); - - - it('have 3 buttons', fakeAsync(() => { - const elements = getElementAll(fixture, 'plex-options button'); - expect(elements.length).toBe(fixture.componentInstance.items.length); - })); - - it('first item is active', fakeAsync(() => { - expect(options.active).toBe(fixture.componentInstance.items[0].key); - })); - - it('display label', fakeAsync(() => { - const elements = getElementAll(fixture, 'plex-options button'); - - elements.forEach((elem, index) => { - const elementRef = elem.nativeElement; - const text = elementRef.innerText; - expect(text).toBe(fixture.componentInstance.items[index].label); - }); - })); - - it('activated must be called on click', fakeAsync(() => { - - spyOn(fixture.componentInstance, 'onChange'); - - const elements = getElementAll(fixture, 'plex-options button'); - const secondButton = elements[1].nativeElement; - secondButton.dispatchEvent(new Event('click')); - - tickAndDetectChanges(fixture); - - expect(fixture.componentInstance.onChange).toHaveBeenCalledWith('b' as any); - - expect(options.active).toBe('b'); - - })); - - it('change item must update active', fakeAsync(() => { - fixture.componentInstance.items = [ - { key: 'd', label: 'D' }, - { key: 'e', label: 'E' }, - ]; - - spyOn(fixture.componentInstance, 'onChange'); - - tickAndDetectChanges(fixture); - - const elements = getElementAll(fixture, 'plex-options button'); - - expect(options.active).toBe('d'); - - elements.forEach((elem, index) => { - const elementRef = elem.nativeElement; - const text = elementRef.innerText; - expect(text).toBe(fixture.componentInstance.items[index].label); - }); - - expect(fixture.componentInstance.onChange).toHaveBeenCalledWith('d' as any); - })); - - it('change item but preserve active key', fakeAsync(() => { - fixture.componentInstance.items = [ - { key: 'a', label: 'A' }, - { key: 'j', label: 'J' }, - ]; - - spyOn(fixture.componentInstance, 'onChange'); - - tickAndDetectChanges(fixture); - - expect(options.active).toBe('a'); - - expect(fixture.componentInstance.onChange).toHaveBeenCalledTimes(0); - })); - -}); - - -export function tickAndDetectChanges(fixture: ComponentFixture) { - fixture.detectChanges(); - tick(); -} - - -export function getElement(fixture: ComponentFixture, selector: string): DebugElement { - return fixture.debugElement.query(By.css(selector)); -} - -export function getElementAll(fixture: ComponentFixture, selector: string): DebugElement[] { - return fixture.debugElement.queryAll(By.css(selector)); -} - - -@Component({ - template: `` -}) -class PlexOptionsTestComponent { - @ViewChild(PlexOptionsComponent) component: PlexOptionsComponent; - - items: IPlexOptionsItems[] = [ - { key: 'a', label: 'A' }, - { key: 'b', label: 'B' }, - { key: 'C', label: 'C' }, - ]; - - onChange(_: Event) { - } - - -} - -function createTestingModule(cmp: Type, template: string): ComponentFixture { - - TestBed.configureTestingModule({ - imports: [BrowserModule, PlexModule, FormsModule], - declarations: [cmp], - teardown: { destroyAfterEach: false } -}) - .overrideComponent(cmp, { - set: { - template - } - }); - - - TestBed.compileComponents(); - - const fixture = TestBed.createComponent(cmp); - fixture.detectChanges(); - return fixture; -} - diff --git a/src/lib/slider/slider.component.ts b/src/lib/slider/slider.component.ts index a92fe1ee..50c45586 100644 --- a/src/lib/slider/slider.component.ts +++ b/src/lib/slider/slider.component.ts @@ -11,7 +11,7 @@ export type PlexVisualizadorItem = FileObject | string; @Component({ selector: 'plex-slider', - template: `
+ template: `
@@ -27,11 +27,6 @@ export type PlexVisualizadorItem = FileObject | string; [disabled]="scrollStop"> -
- - -
`, }) @@ -50,14 +45,12 @@ export class PlexSliderComponent implements AfterViewInit { public totalWidth: number; public scrollStop = false; public onScrolling = false; - public dots; constructor( private elRef: ElementRef, private ref: ChangeDetectorRef ) { } - dotsCount; ngAfterViewInit(): void { // obtengo cantidad de elementos en slider @@ -67,8 +60,6 @@ export class PlexSliderComponent implements AfterViewInit { // define custom para el ancho del contenido del slider if (this.items > 0) { this.gridContainer.nativeElement.style.setProperty('--item-length', this.items); - - this.dotsCount = Array(this.items); } this.getRestantes(); @@ -121,34 +112,4 @@ export class PlexSliderComponent implements AfterViewInit { startIndex: number; endIndex: number; - - onScroll() { - const leftPosition = this.gridContainer.nativeElement.scrollLeft; - - const numeroDeItemsVisibles = Math.round(this.gridWidth / this.itemSize); - - - const centro = Math.round(leftPosition / this.itemSize); - this.startIndex = centro; - this.endIndex = centro + numeroDeItemsVisibles; - - const finalScroll = this.totalWidth; - const currentScroll = (leftPosition + this.gridWidth) * 1.03; - - - if (leftPosition > 0) { - this.onScrolling = true; - } else { - this.onScrolling = false; - } - - if (currentScroll >= finalScroll) { - this.scrollStop = true; - } else { - this.scrollStop = false; - } - - - } - } diff --git a/src/lib/text/text.component.ts b/src/lib/text/text.component.ts index de26dff6..a8b8df74 100644 --- a/src/lib/text/text.component.ts +++ b/src/lib/text/text.component.ts @@ -1,13 +1,12 @@ import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnInit, Optional, Output, Renderer2, Self, ViewChild } from '@angular/core'; import { ControlValueAccessor, UntypedFormControl, NgControl } from '@angular/forms'; -import { BOLD_BUTTON, EditorConfig, FONT_SIZE_SELECT, ITALIC_BUTTON, JUSTIFY_CENTER_BUTTON, JUSTIFY_LEFT_BUTTON, JUSTIFY_RIGHT_BUTTON, UNDERLINE_BUTTON, UNORDERED_LIST_BUTTON } from 'ngx-simple-text-editor'; +import { BOLD_BUTTON, EditorConfig, FONT_SIZE_SELECT, ITALIC_BUTTON, JUSTIFY_CENTER_BUTTON, JUSTIFY_LEFT_BUTTON, LINK_INPUT, UNLINK_BUTTON, JUSTIFY_RIGHT_BUTTON, UNDERLINE_BUTTON, UNORDERED_LIST_BUTTON } from 'ngx-simple-text-editor'; import { hasRequiredValidator } from '../core/validator.functions'; @Component({ selector: 'plex-text', template: `
-