labx-components 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/angular-lib/ng-package.json +7 -0
  2. package/angular-lib/package.json +8 -0
  3. package/angular-lib/src/lib/angular-component-lib/utils.ts +65 -0
  4. package/angular-lib/src/lib/components.ts +94 -0
  5. package/{dist-angular/index.js → angular-lib/src/lib/index.ts} +5 -3
  6. package/angular-lib/src/lib/text-value-accessor.ts +24 -0
  7. package/angular-lib/src/lib/value-accessor.ts +39 -0
  8. package/angular-lib/src/public-api.ts +2 -0
  9. package/angular-lib/tsconfig.lib.json +24 -0
  10. package/dist/labx-components/index-DYSVGjqR.js +4585 -0
  11. package/dist/labx-components/index-DYSVGjqR.js.map +1 -0
  12. package/dist/labx-components/index.esm.js +18 -1
  13. package/dist/labx-components/index.esm.js.map +1 -0
  14. package/dist/labx-components/labx-button.entry.js +34 -0
  15. package/dist/labx-components/labx-button.entry.js.map +1 -0
  16. package/dist/labx-components/labx-components.css +67 -1
  17. package/dist/labx-components/labx-components.esm.js +50 -1
  18. package/dist/labx-components/labx-components.esm.js.map +1 -0
  19. package/dist/labx-components/labx-icon.entry.js +24 -0
  20. package/dist/labx-components/labx-icon.entry.js.map +1 -0
  21. package/dist/{esm/labx-button_3.entry.js → labx-components/labx-input.entry.js} +6 -49
  22. package/dist/labx-components/labx-input.entry.js.map +1 -0
  23. package/dist-angular/fesm2022/labx-components-angular.mjs +170 -0
  24. package/dist-angular/fesm2022/labx-components-angular.mjs.map +1 -0
  25. package/dist-angular/types/labx-components-angular.d.ts +46 -0
  26. package/dist-angular/types/labx-components-angular.d.ts.map +1 -0
  27. package/package.json +11 -7
  28. package/dist/cjs/index-eATbt1kz.js +0 -1519
  29. package/dist/cjs/index.cjs.js +0 -7
  30. package/dist/cjs/labx-button_3.cjs.entry.js +0 -104
  31. package/dist/cjs/labx-components.cjs.js +0 -24
  32. package/dist/cjs/loader.cjs.js +0 -12
  33. package/dist/collection/collection-manifest.json +0 -15
  34. package/dist/collection/components/labx-button/labx-button.css +0 -74
  35. package/dist/collection/components/labx-button/labx-button.js +0 -135
  36. package/dist/collection/components/labx-icon/labx-icon.css +0 -26
  37. package/dist/collection/components/labx-icon/labx-icon.js +0 -87
  38. package/dist/collection/components/labx-input/labx-input.css +0 -117
  39. package/dist/collection/components/labx-input/labx-input.js +0 -183
  40. package/dist/collection/index.js +0 -10
  41. package/dist/collection/utils/utils.js +0 -3
  42. package/dist/collection/utils/utils.unit.test.js +0 -16
  43. package/dist/components/index.js +0 -1
  44. package/dist/components/labx-button.js +0 -1
  45. package/dist/components/labx-icon.js +0 -1
  46. package/dist/components/labx-input.js +0 -1
  47. package/dist/components/p-Dv2D1yhm.js +0 -1
  48. package/dist/esm/index-ByAEYo1n.js +0 -1510
  49. package/dist/esm/index.js +0 -5
  50. package/dist/esm/labx-components.js +0 -20
  51. package/dist/esm/loader.js +0 -10
  52. package/dist/index.cjs.js +0 -1
  53. package/dist/index.js +0 -1
  54. package/dist/labx-components/p-42d69adf.entry.js +0 -1
  55. package/dist/labx-components/p-ByAEYo1n.js +0 -2
  56. package/dist-angular/angular-component-lib/utils.d.ts +0 -9
  57. package/dist-angular/angular-component-lib/utils.js +0 -58
  58. package/dist-angular/components.d.ts +0 -33
  59. package/dist-angular/components.js +0 -92
  60. package/dist-angular/index.d.ts +0 -2
  61. package/dist-angular/text-value-accessor.d.ts +0 -5
  62. package/dist-angular/text-value-accessor.js +0 -31
  63. package/dist-angular/value-accessor.d.ts +0 -15
  64. package/dist-angular/value-accessor.js +0 -44
@@ -1,7 +0,0 @@
1
- 'use strict';
2
-
3
- function format(first, middle, last) {
4
- return (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : '');
5
- }
6
-
7
- exports.format = format;
@@ -1,104 +0,0 @@
1
- 'use strict';
2
-
3
- var index = require('./index-eATbt1kz.js');
4
-
5
- const labxButtonCss = () => `:host{display:inline-block}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 20px;border:2px solid transparent;border-radius:8px;cursor:pointer;font-family:inherit;font-size:14px;font-weight:600;line-height:1;text-decoration:none;white-space:nowrap;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease}.btn:focus-visible{outline:3px solid var(--color-primary-light);outline-offset:2px}.btn--primary{background-color:var(--color-primary);border-color:var(--color-primary);color:var(--color-bg-surface)}.btn--primary:hover:not(:disabled){background-color:var(--color-primary-hover);border-color:var(--color-primary-hover)}.btn--secondary{background-color:transparent;border-color:var(--color-primary);color:var(--color-primary)}.btn--secondary:hover:not(:disabled){background-color:var(--color-primary-light)}.btn--danger{background-color:var(--color-danger);border-color:var(--color-danger);color:var(--color-bg-surface)}.btn--danger:hover:not(:disabled){background-color:var(--color-danger-light);border-color:var(--color-danger);color:var(--color-danger)}.btn:disabled{background-color:var(--color-bg-subtle);border-color:var(--color-border);color:var(--color-disabled);cursor:not-allowed}`;
6
-
7
- const LabxButton = class {
8
- constructor(hostRef) {
9
- index.registerInstance(this, hostRef);
10
- this.labxClick = index.createEvent(this, "labxClick");
11
- }
12
- /** Texto del botón */
13
- label = 'Button';
14
- /** Estilo visual: primary | secondary | danger */
15
- variant = 'primary';
16
- /** Deshabilita el botón */
17
- disabled = false;
18
- /** Tipo HTML del botón */
19
- type = 'button';
20
- /** Se emite cuando el botón es clickeado */
21
- labxClick;
22
- handleClick() {
23
- if (!this.disabled) {
24
- this.labxClick.emit();
25
- }
26
- }
27
- render() {
28
- return (index.h(index.Host, { key: '76d607e0f7612ef141b30d884166181402e4e6a0' }, index.h("button", { key: 'cd3204b93d8791529784d04ccf80a566221aab74', type: this.type, disabled: this.disabled, class: `btn btn--${this.variant}`, onClick: () => this.handleClick() }, this.label)));
29
- }
30
- };
31
- LabxButton.style = labxButtonCss();
32
-
33
- const labxIconCss = () => `:host{display:inline-flex;align-items:center;justify-content:center;color:inherit}.icon{font-family:'Material Symbols Outlined';font-weight:normal;font-style:normal;font-size:inherit;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;font-variation-settings:'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 20}.icon--filled{font-variation-settings:'FILL' 1, 'wght' 400, 'GRAD' 0, 'opsz' 20}`;
34
-
35
- const LabxIcon = class {
36
- constructor(hostRef) {
37
- index.registerInstance(this, hostRef);
38
- }
39
- /** Nombre del ícono de Material Symbols (ej: "email", "search", "close") */
40
- name;
41
- /** Tamaño en px */
42
- size = 20;
43
- /** Filled (true) u Outlined (false) */
44
- filled = false;
45
- render() {
46
- return (index.h(index.Host, { key: '30e38c191019432490921f13c23fc91f96952e90', style: { fontSize: `${this.size}px` } }, index.h("span", { key: '9ff64363cdb1fcb0f0eec24e13a2fc623506972f', class: { 'icon': true, 'icon--filled': this.filled } }, this.name)));
47
- }
48
- };
49
- LabxIcon.style = labxIconCss();
50
-
51
- const labxInputCss = () => `:host{display:block}.input-wrapper{position:relative;display:flex;align-items:center;background-color:var(--color-bg-surface);border:2px solid var(--color-border);border-radius:8px;transition:border-color 0.2s ease}.input-wrapper--focused{border-color:var(--color-primary)}.input-wrapper--error{border-color:var(--color-danger)}.input-wrapper--disabled{background-color:var(--color-bg-subtle);cursor:not-allowed}.input{width:100%;padding:20px 14px 6px 14px;border:none;outline:none;background:transparent;font-family:inherit;font-size:14px;color:var(--color-text-default);cursor:inherit}.input:disabled{color:var(--color-disabled);cursor:not-allowed}.input-wrapper--icon-left .input{padding-left:40px}.input-wrapper--icon-right .input{padding-right:40px}.input-label{position:absolute;left:14px;top:50%;transform:translateY(-50%);font-size:14px;color:var(--color-text-muted);pointer-events:none;transition:top 0.2s ease, font-size 0.2s ease, color 0.2s ease}.input-label--floating{top:7px;transform:none;font-size:11px;color:var(--color-primary)}.input-wrapper--error .input-label--floating{color:var(--color-danger)}.input-wrapper--icon-left .input-label{left:40px}.input-icon{position:absolute;display:flex;align-items:center;justify-content:center;width:20px;height:20px;color:var(--color-text-muted);pointer-events:none}.input-icon--left{left:12px}.input-icon--right{right:12px}.input-error{display:block;margin-top:4px;padding-left:4px;font-size:12px;color:var(--color-danger)}`;
52
-
53
- const LabxInput = class {
54
- constructor(hostRef) {
55
- index.registerInstance(this, hostRef);
56
- this.labxChange = index.createEvent(this, "labxChange");
57
- }
58
- /** Texto del label flotante */
59
- label;
60
- /** Valor del input */
61
- value = '';
62
- /** Type HTML del input */
63
- type = 'text';
64
- /** Deshabilita el input */
65
- disabled = false;
66
- /** Mensaje de error */
67
- error;
68
- /** El input tiene foco actualmente */
69
- focused = false;
70
- /** true si el slot icon-left tiene contenido */
71
- hasIconLeft = false;
72
- /** true si el slot icon-right tiene contenido */
73
- hasIconRight = false;
74
- /** Se emite cuando el valor cambia */
75
- labxChange;
76
- handleInput(e) {
77
- this.value = e.target.value;
78
- this.labxChange.emit(this.value);
79
- }
80
- onSlotChange(side, e) {
81
- const slot = e.target;
82
- const hasContent = slot.assignedNodes().length > 0;
83
- if (side === 'left')
84
- this.hasIconLeft = hasContent;
85
- else
86
- this.hasIconRight = hasContent;
87
- }
88
- render() {
89
- const isFloating = this.focused || this.value?.length > 0;
90
- return (index.h(index.Host, { key: '357eb1c2b3c395801c8d7249c3e649f5ddd33bda' }, index.h("div", { key: '1bc8515582f79c560196c7631cef3de31344234e', class: {
91
- 'input-wrapper': true,
92
- 'input-wrapper--focused': this.focused,
93
- 'input-wrapper--error': !!this.error,
94
- 'input-wrapper--disabled': this.disabled,
95
- 'input-wrapper--icon-left': this.hasIconLeft,
96
- 'input-wrapper--icon-right': this.hasIconRight,
97
- } }, index.h("span", { key: 'd3da76f5d96c55179870583faf5931c6008188ec', class: "input-icon input-icon--left" }, index.h("slot", { key: 'eeea94735ef34585bd88eef2e6d753f58733aeb7', name: "icon-left", onSlotchange: (e) => this.onSlotChange('left', e) })), index.h("input", { key: '2792b2634677fe2ebe272248bd75fbd0e993080a', class: "input", type: this.type, value: this.value, disabled: this.disabled, onInput: (e) => this.handleInput(e), onFocus: () => (this.focused = true), onBlur: () => (this.focused = false) }), this.label && (index.h("label", { key: '0d1ae4db30645f2a4a1927f0495b053620d5a3d5', class: { 'input-label': true, 'input-label--floating': isFloating } }, this.label)), index.h("span", { key: '4e25bc9f95998d3d94f36306a353859fa67fc5f3', class: "input-icon input-icon--right" }, index.h("slot", { key: '2492d04ec309a636128fd7da1729875e2c0c93d5', name: "icon-right", onSlotchange: (e) => this.onSlotChange('right', e) }))), this.error && index.h("span", { key: 'bfde298513f8d55f4b36b51afee6565d312f52d3', class: "input-error" }, this.error)));
98
- }
99
- };
100
- LabxInput.style = labxInputCss();
101
-
102
- exports.labx_button = LabxButton;
103
- exports.labx_icon = LabxIcon;
104
- exports.labx_input = LabxInput;
@@ -1,24 +0,0 @@
1
- 'use strict';
2
-
3
- var index = require('./index-eATbt1kz.js');
4
-
5
- var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
6
- /*
7
- Stencil Client Patch Browser v4.43.3 | MIT Licensed | https://stenciljs.com
8
- */
9
-
10
- var patchBrowser = () => {
11
- const importMeta = (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('labx-components.cjs.js', document.baseURI).href));
12
- const opts = {};
13
- if (importMeta !== "") {
14
- opts.resourcesUrl = new URL(".", importMeta).href;
15
- }
16
- return index.promiseResolve(opts);
17
- };
18
-
19
- patchBrowser().then(async (options) => {
20
- await index.globalScripts();
21
- return index.bootstrapLazy([["labx-button_3.cjs",[[513,"labx-button",{"label":[1],"variant":[1],"disabled":[4],"type":[1]}],[513,"labx-icon",{"name":[1],"size":[2],"filled":[4]}],[769,"labx-input",{"label":[1],"value":[1537],"type":[1],"disabled":[4],"error":[1],"focused":[32],"hasIconLeft":[32],"hasIconRight":[32]}]]]], options);
22
- });
23
-
24
- exports.setNonce = index.setNonce;
@@ -1,12 +0,0 @@
1
- 'use strict';
2
-
3
- var index = require('./index-eATbt1kz.js');
4
-
5
- const defineCustomElements = async (win, options) => {
6
- if (typeof window === 'undefined') return undefined;
7
- await index.globalScripts();
8
- return index.bootstrapLazy([["labx-button_3.cjs",[[513,"labx-button",{"label":[1],"variant":[1],"disabled":[4],"type":[1]}],[513,"labx-icon",{"name":[1],"size":[2],"filled":[4]}],[769,"labx-input",{"label":[1],"value":[1537],"type":[1],"disabled":[4],"error":[1],"focused":[32],"hasIconLeft":[32],"hasIconRight":[32]}]]]], options);
9
- };
10
-
11
- exports.setNonce = index.setNonce;
12
- exports.defineCustomElements = defineCustomElements;
@@ -1,15 +0,0 @@
1
- {
2
- "entries": [
3
- "components/labx-button/labx-button.js",
4
- "components/labx-icon/labx-icon.js",
5
- "components/labx-input/labx-input.js"
6
- ],
7
- "mixins": [],
8
- "compiler": {
9
- "name": "@stencil/core",
10
- "version": "4.43.3",
11
- "typescriptVersion": "5.8.3"
12
- },
13
- "collections": [],
14
- "bundles": []
15
- }
@@ -1,74 +0,0 @@
1
- :host {
2
- display: inline-block;
3
- }
4
-
5
- /* ─── Base ───────────────────────────────────────────── */
6
- .btn {
7
- display: inline-flex;
8
- align-items: center;
9
- justify-content: center;
10
- gap: 8px;
11
-
12
- padding: 10px 20px;
13
- border: 2px solid transparent;
14
- border-radius: 8px;
15
- cursor: pointer;
16
-
17
- font-family: inherit;
18
- font-size: 14px;
19
- font-weight: 600;
20
- line-height: 1;
21
- text-decoration: none;
22
- white-space: nowrap;
23
-
24
- transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
25
- }
26
-
27
- .btn:focus-visible {
28
- outline: 3px solid var(--color-primary-light);
29
- outline-offset: 2px;
30
- }
31
-
32
- /* ─── Variant: Primary ───────────────────────────────── */
33
- .btn--primary {
34
- background-color: var(--color-primary);
35
- border-color: var(--color-primary);
36
- color: var(--color-bg-surface);
37
- }
38
-
39
- .btn--primary:hover:not(:disabled) {
40
- background-color: var(--color-primary-hover);
41
- border-color: var(--color-primary-hover);
42
- }
43
-
44
- /* ─── Variant: Secondary ─────────────────────────────── */
45
- .btn--secondary {
46
- background-color: transparent;
47
- border-color: var(--color-primary);
48
- color: var(--color-primary);
49
- }
50
-
51
- .btn--secondary:hover:not(:disabled) {
52
- background-color: var(--color-primary-light);
53
- }
54
-
55
- /* ─── Variant: Danger ────────────────────────────────── */
56
- .btn--danger {
57
- background-color: var(--color-danger);
58
- border-color: var(--color-danger);
59
- color: var(--color-bg-surface);
60
- }
61
-
62
- .btn--danger:hover:not(:disabled) {
63
- background-color: var(--color-danger-light);
64
- border-color: var(--color-danger);
65
- color: var(--color-danger);
66
- }
67
-
68
- /* ─── Disabled ───────────────────────────────────────── */
69
- .btn:disabled {
70
- background-color: var(--color-bg-subtle);
71
- border-color: var(--color-border);
72
- color: var(--color-disabled);
73
- cursor: not-allowed;
74
- }
@@ -1,135 +0,0 @@
1
- import { Host, h } from "@stencil/core";
2
- export class LabxButton {
3
- /** Texto del botón */
4
- label = 'Button';
5
- /** Estilo visual: primary | secondary | danger */
6
- variant = 'primary';
7
- /** Deshabilita el botón */
8
- disabled = false;
9
- /** Tipo HTML del botón */
10
- type = 'button';
11
- /** Se emite cuando el botón es clickeado */
12
- labxClick;
13
- handleClick() {
14
- if (!this.disabled) {
15
- this.labxClick.emit();
16
- }
17
- }
18
- render() {
19
- return (h(Host, { key: '76d607e0f7612ef141b30d884166181402e4e6a0' }, h("button", { key: 'cd3204b93d8791529784d04ccf80a566221aab74', type: this.type, disabled: this.disabled, class: `btn btn--${this.variant}`, onClick: () => this.handleClick() }, this.label)));
20
- }
21
- static get is() { return "labx-button"; }
22
- static get encapsulation() { return "shadow"; }
23
- static get originalStyleUrls() {
24
- return {
25
- "$": ["labx-button.css"]
26
- };
27
- }
28
- static get styleUrls() {
29
- return {
30
- "$": ["labx-button.css"]
31
- };
32
- }
33
- static get properties() {
34
- return {
35
- "label": {
36
- "type": "string",
37
- "mutable": false,
38
- "complexType": {
39
- "original": "string",
40
- "resolved": "string",
41
- "references": {}
42
- },
43
- "required": false,
44
- "optional": false,
45
- "docs": {
46
- "tags": [],
47
- "text": "Texto del bot\u00F3n"
48
- },
49
- "getter": false,
50
- "setter": false,
51
- "reflect": false,
52
- "attribute": "label",
53
- "defaultValue": "'Button'"
54
- },
55
- "variant": {
56
- "type": "string",
57
- "mutable": false,
58
- "complexType": {
59
- "original": "'primary' | 'secondary' | 'danger'",
60
- "resolved": "\"danger\" | \"primary\" | \"secondary\"",
61
- "references": {}
62
- },
63
- "required": false,
64
- "optional": false,
65
- "docs": {
66
- "tags": [],
67
- "text": "Estilo visual: primary | secondary | danger"
68
- },
69
- "getter": false,
70
- "setter": false,
71
- "reflect": false,
72
- "attribute": "variant",
73
- "defaultValue": "'primary'"
74
- },
75
- "disabled": {
76
- "type": "boolean",
77
- "mutable": false,
78
- "complexType": {
79
- "original": "boolean",
80
- "resolved": "boolean",
81
- "references": {}
82
- },
83
- "required": false,
84
- "optional": false,
85
- "docs": {
86
- "tags": [],
87
- "text": "Deshabilita el bot\u00F3n"
88
- },
89
- "getter": false,
90
- "setter": false,
91
- "reflect": false,
92
- "attribute": "disabled",
93
- "defaultValue": "false"
94
- },
95
- "type": {
96
- "type": "string",
97
- "mutable": false,
98
- "complexType": {
99
- "original": "'button' | 'submit' | 'reset'",
100
- "resolved": "\"button\" | \"reset\" | \"submit\"",
101
- "references": {}
102
- },
103
- "required": false,
104
- "optional": false,
105
- "docs": {
106
- "tags": [],
107
- "text": "Tipo HTML del bot\u00F3n"
108
- },
109
- "getter": false,
110
- "setter": false,
111
- "reflect": false,
112
- "attribute": "type",
113
- "defaultValue": "'button'"
114
- }
115
- };
116
- }
117
- static get events() {
118
- return [{
119
- "method": "labxClick",
120
- "name": "labxClick",
121
- "bubbles": true,
122
- "cancelable": true,
123
- "composed": true,
124
- "docs": {
125
- "tags": [],
126
- "text": "Se emite cuando el bot\u00F3n es clickeado"
127
- },
128
- "complexType": {
129
- "original": "void",
130
- "resolved": "void",
131
- "references": {}
132
- }
133
- }];
134
- }
135
- }
@@ -1,26 +0,0 @@
1
- :host {
2
- display: inline-flex;
3
- align-items: center;
4
- justify-content: center;
5
- color: inherit;
6
- }
7
-
8
- .icon {
9
- font-family: 'Material Symbols Outlined';
10
- font-weight: normal;
11
- font-style: normal;
12
- font-size: inherit;
13
- line-height: 1;
14
- letter-spacing: normal;
15
- text-transform: none;
16
- white-space: nowrap;
17
- word-wrap: normal;
18
- direction: ltr;
19
-
20
- /* Sin relleno por defecto */
21
- font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 20;
22
- }
23
-
24
- .icon--filled {
25
- font-variation-settings: 'FILL' 1, 'wght' 400, 'GRAD' 0, 'opsz' 20;
26
- }
@@ -1,87 +0,0 @@
1
- import { Host, h } from "@stencil/core";
2
- export class LabxIcon {
3
- /** Nombre del ícono de Material Symbols (ej: "email", "search", "close") */
4
- name;
5
- /** Tamaño en px */
6
- size = 20;
7
- /** Filled (true) u Outlined (false) */
8
- filled = false;
9
- render() {
10
- return (h(Host, { key: '30e38c191019432490921f13c23fc91f96952e90', style: { fontSize: `${this.size}px` } }, h("span", { key: '9ff64363cdb1fcb0f0eec24e13a2fc623506972f', class: { 'icon': true, 'icon--filled': this.filled } }, this.name)));
11
- }
12
- static get is() { return "labx-icon"; }
13
- static get encapsulation() { return "shadow"; }
14
- static get originalStyleUrls() {
15
- return {
16
- "$": ["labx-icon.css"]
17
- };
18
- }
19
- static get styleUrls() {
20
- return {
21
- "$": ["labx-icon.css"]
22
- };
23
- }
24
- static get properties() {
25
- return {
26
- "name": {
27
- "type": "string",
28
- "mutable": false,
29
- "complexType": {
30
- "original": "string",
31
- "resolved": "string",
32
- "references": {}
33
- },
34
- "required": true,
35
- "optional": false,
36
- "docs": {
37
- "tags": [],
38
- "text": "Nombre del \u00EDcono de Material Symbols (ej: \"email\", \"search\", \"close\")"
39
- },
40
- "getter": false,
41
- "setter": false,
42
- "reflect": false,
43
- "attribute": "name"
44
- },
45
- "size": {
46
- "type": "number",
47
- "mutable": false,
48
- "complexType": {
49
- "original": "number",
50
- "resolved": "number",
51
- "references": {}
52
- },
53
- "required": false,
54
- "optional": false,
55
- "docs": {
56
- "tags": [],
57
- "text": "Tama\u00F1o en px"
58
- },
59
- "getter": false,
60
- "setter": false,
61
- "reflect": false,
62
- "attribute": "size",
63
- "defaultValue": "20"
64
- },
65
- "filled": {
66
- "type": "boolean",
67
- "mutable": false,
68
- "complexType": {
69
- "original": "boolean",
70
- "resolved": "boolean",
71
- "references": {}
72
- },
73
- "required": false,
74
- "optional": false,
75
- "docs": {
76
- "tags": [],
77
- "text": "Filled (true) u Outlined (false)"
78
- },
79
- "getter": false,
80
- "setter": false,
81
- "reflect": false,
82
- "attribute": "filled",
83
- "defaultValue": "false"
84
- }
85
- };
86
- }
87
- }
@@ -1,117 +0,0 @@
1
- :host {
2
- display: block;
3
- }
4
-
5
- /* ─── Wrapper ────────────────────────────────────────── */
6
- .input-wrapper {
7
- position: relative;
8
- display: flex;
9
- align-items: center;
10
-
11
- background-color: var(--color-bg-surface);
12
- border: 2px solid var(--color-border);
13
- border-radius: 8px;
14
-
15
- transition: border-color 0.2s ease;
16
- }
17
-
18
- .input-wrapper--focused {
19
- border-color: var(--color-primary);
20
- }
21
-
22
- .input-wrapper--error {
23
- border-color: var(--color-danger);
24
- }
25
-
26
- .input-wrapper--disabled {
27
- background-color: var(--color-bg-subtle);
28
- cursor: not-allowed;
29
- }
30
-
31
- /* ─── Input ──────────────────────────────────────────── */
32
- .input {
33
- width: 100%;
34
- padding: 20px 14px 6px 14px;
35
- border: none;
36
- outline: none;
37
- background: transparent;
38
-
39
- font-family: inherit;
40
- font-size: 14px;
41
- color: var(--color-text-default);
42
-
43
- cursor: inherit;
44
- }
45
-
46
- .input:disabled {
47
- color: var(--color-disabled);
48
- cursor: not-allowed;
49
- }
50
-
51
- /* Ajuste de padding cuando hay íconos */
52
- .input-wrapper--icon-left .input {
53
- padding-left: 40px;
54
- }
55
-
56
- .input-wrapper--icon-right .input {
57
- padding-right: 40px;
58
- }
59
-
60
- /* ─── Label flotante ─────────────────────────────────── */
61
- .input-label {
62
- position: absolute;
63
- left: 14px;
64
- top: 50%;
65
- transform: translateY(-50%);
66
-
67
- font-size: 14px;
68
- color: var(--color-text-muted);
69
- pointer-events: none;
70
-
71
- transition: top 0.2s ease, font-size 0.2s ease, color 0.2s ease;
72
- }
73
-
74
- .input-label--floating {
75
- top: 7px;
76
- transform: none;
77
- font-size: 11px;
78
- color: var(--color-primary);
79
- }
80
-
81
- .input-wrapper--error .input-label--floating {
82
- color: var(--color-danger);
83
- }
84
-
85
- /* Ajuste del label cuando hay ícono izquierdo */
86
- .input-wrapper--icon-left .input-label {
87
- left: 40px;
88
- }
89
-
90
- /* ─── Íconos ─────────────────────────────────────────── */
91
- .input-icon {
92
- position: absolute;
93
- display: flex;
94
- align-items: center;
95
- justify-content: center;
96
- width: 20px;
97
- height: 20px;
98
- color: var(--color-text-muted);
99
- pointer-events: none;
100
- }
101
-
102
- .input-icon--left {
103
- left: 12px;
104
- }
105
-
106
- .input-icon--right {
107
- right: 12px;
108
- }
109
-
110
- /* ─── Error ──────────────────────────────────────────── */
111
- .input-error {
112
- display: block;
113
- margin-top: 4px;
114
- padding-left: 4px;
115
- font-size: 12px;
116
- color: var(--color-danger);
117
- }