labx-components 0.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.
- package/LICENSE +21 -0
- package/dist/cjs/index-Dw9X5FBB.js +1519 -0
- package/dist/cjs/index.cjs.js +7 -0
- package/dist/cjs/labx-button_3.cjs.entry.js +104 -0
- package/dist/cjs/labx-components.cjs.js +24 -0
- package/dist/cjs/loader.cjs.js +12 -0
- package/dist/collection/collection-manifest.json +15 -0
- package/dist/collection/components/labx-button/labx-button.css +74 -0
- package/dist/collection/components/labx-button/labx-button.js +135 -0
- package/dist/collection/components/labx-icon/labx-icon.css +26 -0
- package/dist/collection/components/labx-icon/labx-icon.js +87 -0
- package/dist/collection/components/labx-input/labx-input.css +117 -0
- package/dist/collection/components/labx-input/labx-input.js +183 -0
- package/dist/collection/index.js +10 -0
- package/dist/collection/utils/utils.js +3 -0
- package/dist/collection/utils/utils.unit.test.js +16 -0
- package/dist/components/index.d.ts +35 -0
- package/dist/components/index.js +1 -0
- package/dist/components/labx-button.d.ts +11 -0
- package/dist/components/labx-button.js +1 -0
- package/dist/components/labx-icon.d.ts +11 -0
- package/dist/components/labx-icon.js +1 -0
- package/dist/components/labx-input.d.ts +11 -0
- package/dist/components/labx-input.js +1 -0
- package/dist/components/p-DEM5hG4h.js +1 -0
- package/dist/esm/index-dLjo-EBs.js +1510 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/labx-button_3.entry.js +100 -0
- package/dist/esm/labx-components.js +20 -0
- package/dist/esm/loader.js +10 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -0
- package/dist/labx-components/index.esm.js +1 -0
- package/dist/labx-components/labx-components.css +1 -0
- package/dist/labx-components/labx-components.esm.js +1 -0
- package/dist/labx-components/p-956be281.entry.js +1 -0
- package/dist/labx-components/p-dLjo-EBs.js +2 -0
- package/dist/types/components/labx-button/labx-button.d.ts +15 -0
- package/dist/types/components/labx-icon/labx-icon.d.ts +9 -0
- package/dist/types/components/labx-input/labx-input.d.ts +24 -0
- package/dist/types/components.d.ts +237 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/stencil-public-runtime.d.ts +1860 -0
- package/dist/types/utils/utils.d.ts +1 -0
- package/dist/types/utils/utils.unit.test.d.ts +1 -0
- package/dist-angular/angular-component-lib/utils.ts +65 -0
- package/dist-angular/components.ts +94 -0
- package/dist-angular/index.ts +8 -0
- package/dist-angular/text-value-accessor.ts +24 -0
- package/dist-angular/value-accessor.ts +39 -0
- package/loader/cdn.js +1 -0
- package/loader/index.cjs.js +1 -0
- package/loader/index.d.ts +24 -0
- package/loader/index.es2017.js +1 -0
- package/loader/index.js +2 -0
- package/package.json +57 -0
- package/readme.md +111 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./index-Dw9X5FBB.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;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./index-Dw9X5FBB.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;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./index-Dw9X5FBB.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;
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
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
|
+
}
|