pixelon 0.9.0 → 0.9.2
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/dist/components/molecules/chat/StructuredContent/components/SupportRequestForm/SupportRequestForm.d.ts +25 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.esm.js +371 -298
- package/dist/index.js +371 -297
- package/dist/styles.css +1 -1
- package/dist/styles.css.map +1 -1
- package/package.json +1 -1
- package/src/styles/index.scss +1 -0
package/dist/index.esm.js
CHANGED
|
@@ -13185,19 +13185,19 @@ function mapFieldsToFormFields(fields, mode) {
|
|
|
13185
13185
|
}));
|
|
13186
13186
|
}
|
|
13187
13187
|
|
|
13188
|
-
const CLASS$
|
|
13188
|
+
const CLASS$h = `${COMPONENT_PREFIX}field-value`;
|
|
13189
13189
|
const FieldValue = ({
|
|
13190
13190
|
label,
|
|
13191
13191
|
children,
|
|
13192
13192
|
layout = "inline",
|
|
13193
13193
|
className
|
|
13194
|
-
}) => /* @__PURE__ */ jsxs("div", { className: [CLASS$
|
|
13195
|
-
/* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
13196
|
-
/* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
13194
|
+
}) => /* @__PURE__ */ jsxs("div", { className: [CLASS$h, `${CLASS$h}--${layout}`, className].filter(Boolean).join(" "), children: [
|
|
13195
|
+
/* @__PURE__ */ jsx("span", { className: `${CLASS$h}__label`, children: label }),
|
|
13196
|
+
/* @__PURE__ */ jsx("span", { className: `${CLASS$h}__value`, children })
|
|
13197
13197
|
] });
|
|
13198
13198
|
FieldValue.displayName = "FieldValue";
|
|
13199
13199
|
|
|
13200
|
-
const CLASS$
|
|
13200
|
+
const CLASS$g = `${COMPONENT_PREFIX}record-card`;
|
|
13201
13201
|
const RecordCard = ({
|
|
13202
13202
|
title,
|
|
13203
13203
|
summary,
|
|
@@ -13209,20 +13209,20 @@ const RecordCard = ({
|
|
|
13209
13209
|
className
|
|
13210
13210
|
}) => {
|
|
13211
13211
|
const cuerpoId = useId();
|
|
13212
|
-
return /* @__PURE__ */ jsxs("div", { className: [CLASS$
|
|
13212
|
+
return /* @__PURE__ */ jsxs("div", { className: [CLASS$g, open ? `${CLASS$g}--open` : "", className].filter(Boolean).join(" "), children: [
|
|
13213
13213
|
/* @__PURE__ */ jsxs(
|
|
13214
13214
|
"button",
|
|
13215
13215
|
{
|
|
13216
13216
|
type: "button",
|
|
13217
|
-
className: `${CLASS$
|
|
13217
|
+
className: `${CLASS$g}__header`,
|
|
13218
13218
|
"aria-expanded": open,
|
|
13219
13219
|
"aria-controls": cuerpoId,
|
|
13220
13220
|
"aria-label": ariaLabel,
|
|
13221
13221
|
onClick: onToggle,
|
|
13222
13222
|
children: [
|
|
13223
|
-
/* @__PURE__ */ jsxs("span", { className: `${CLASS$
|
|
13224
|
-
/* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
13225
|
-
summary && /* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
13223
|
+
/* @__PURE__ */ jsxs("span", { className: `${CLASS$g}__heading`, children: [
|
|
13224
|
+
/* @__PURE__ */ jsx("span", { className: `${CLASS$g}__title`, children: title }),
|
|
13225
|
+
summary && /* @__PURE__ */ jsx("span", { className: `${CLASS$g}__summary`, children: summary })
|
|
13226
13226
|
] }),
|
|
13227
13227
|
/* @__PURE__ */ jsx(
|
|
13228
13228
|
Icon,
|
|
@@ -13230,22 +13230,22 @@ const RecordCard = ({
|
|
|
13230
13230
|
type: open ? "chevron-up" : "chevron-down",
|
|
13231
13231
|
width: 18,
|
|
13232
13232
|
height: 18,
|
|
13233
|
-
className: `${CLASS$
|
|
13233
|
+
className: `${CLASS$g}__chevron`,
|
|
13234
13234
|
"aria-hidden": true
|
|
13235
13235
|
}
|
|
13236
13236
|
)
|
|
13237
13237
|
]
|
|
13238
13238
|
}
|
|
13239
13239
|
),
|
|
13240
|
-
open && /* @__PURE__ */ jsxs("div", { className: `${CLASS$
|
|
13240
|
+
open && /* @__PURE__ */ jsxs("div", { className: `${CLASS$g}__body`, id: cuerpoId, children: [
|
|
13241
13241
|
children,
|
|
13242
|
-
actions && /* @__PURE__ */ jsx("div", { className: `${CLASS$
|
|
13242
|
+
actions && /* @__PURE__ */ jsx("div", { className: `${CLASS$g}__actions`, children: actions })
|
|
13243
13243
|
] })
|
|
13244
13244
|
] });
|
|
13245
13245
|
};
|
|
13246
13246
|
RecordCard.displayName = "RecordCard";
|
|
13247
13247
|
|
|
13248
|
-
const CLASS$
|
|
13248
|
+
const CLASS$f = `${COMPONENT_PREFIX}crud-cards`;
|
|
13249
13249
|
function summaryFields(fields) {
|
|
13250
13250
|
const visibles = fields.filter((f) => f.showInTable !== false);
|
|
13251
13251
|
const marcados = visibles.filter((f) => f.summary);
|
|
@@ -13264,13 +13264,13 @@ function CardList({
|
|
|
13264
13264
|
const claveResumen = new Set(resumen.map((f) => f.key));
|
|
13265
13265
|
const cuerpo = fields.filter((f) => f.showInTable !== false && !claveResumen.has(f.key));
|
|
13266
13266
|
if (loading && rows.length === 0) {
|
|
13267
|
-
return /* @__PURE__ */ jsx("div", { className: `${CLASS$
|
|
13267
|
+
return /* @__PURE__ */ jsx("div", { className: `${CLASS$f}__estado`, children: "Cargando..." });
|
|
13268
13268
|
}
|
|
13269
13269
|
if (rows.length === 0) {
|
|
13270
|
-
return /* @__PURE__ */ jsx("div", { className: `${CLASS$
|
|
13270
|
+
return /* @__PURE__ */ jsx("div", { className: `${CLASS$f}__estado`, children: emptyText });
|
|
13271
13271
|
}
|
|
13272
13272
|
const [principal, ...secundarios] = resumen;
|
|
13273
|
-
return /* @__PURE__ */ jsx("div", { className: CLASS$
|
|
13273
|
+
return /* @__PURE__ */ jsx("div", { className: CLASS$f, children: rows.map((row) => {
|
|
13274
13274
|
const key = rowKey(row);
|
|
13275
13275
|
const opciones = buildOptions?.(row) ?? [];
|
|
13276
13276
|
const titulo = principal ? renderFieldValue(principal, row) : key;
|
|
@@ -13287,14 +13287,14 @@ function CardList({
|
|
|
13287
13287
|
{
|
|
13288
13288
|
type: "button",
|
|
13289
13289
|
className: [
|
|
13290
|
-
`${CLASS$
|
|
13290
|
+
`${CLASS$f}__accion`,
|
|
13291
13291
|
o.disabled && o.disabledReason ? "is-con-motivo" : ""
|
|
13292
13292
|
].filter(Boolean).join(" "),
|
|
13293
13293
|
disabled: o.disabled,
|
|
13294
13294
|
onClick: () => void o.onClick(),
|
|
13295
13295
|
children: [
|
|
13296
13296
|
/* @__PURE__ */ jsx("span", { children: o.label }),
|
|
13297
|
-
o.disabled && o.disabledReason && /* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
13297
|
+
o.disabled && o.disabledReason && /* @__PURE__ */ jsx("span", { className: `${CLASS$f}__motivo`, children: o.disabledReason })
|
|
13298
13298
|
]
|
|
13299
13299
|
},
|
|
13300
13300
|
o.label
|
|
@@ -13309,7 +13309,7 @@ function CardList({
|
|
|
13309
13309
|
}
|
|
13310
13310
|
CardList.displayName = "CardList";
|
|
13311
13311
|
|
|
13312
|
-
const CLASS$
|
|
13312
|
+
const CLASS$e = `${COMPONENT_PREFIX}crud-scroll-end`;
|
|
13313
13313
|
const MARGEN = 24;
|
|
13314
13314
|
const SELECTOR_CRUD = `.${COMPONENT_PREFIX}table-container, .${COMPONENT_PREFIX}crud-cards`;
|
|
13315
13315
|
const ScrollToEnd = ({
|
|
@@ -13353,7 +13353,7 @@ const ScrollToEnd = ({
|
|
|
13353
13353
|
s.scrollTo({ top: s.scrollHeight, behavior: "smooth" });
|
|
13354
13354
|
}, []);
|
|
13355
13355
|
if (!visible) return null;
|
|
13356
|
-
return /* @__PURE__ */ jsx("button", { type: "button", className: CLASS$
|
|
13356
|
+
return /* @__PURE__ */ jsx("button", { type: "button", className: CLASS$e, onClick: alFinal, "aria-label": label, title: label, children: /* @__PURE__ */ jsx(Icon, { type: "chevron-down", width: 18, height: 18, "aria-hidden": true }) });
|
|
13357
13357
|
};
|
|
13358
13358
|
ScrollToEnd.displayName = "ScrollToEnd";
|
|
13359
13359
|
|
|
@@ -14038,7 +14038,7 @@ function Crud({
|
|
|
14038
14038
|
}
|
|
14039
14039
|
Crud.displayName = "Crud";
|
|
14040
14040
|
|
|
14041
|
-
const CLASS$
|
|
14041
|
+
const CLASS$d = "px-chat-reactive-crud__chat-link";
|
|
14042
14042
|
function Burbuja() {
|
|
14043
14043
|
return /* @__PURE__ */ jsx(
|
|
14044
14044
|
"svg",
|
|
@@ -14065,7 +14065,7 @@ const ChatLinkCell = ({
|
|
|
14065
14065
|
if (targets.length === 1) {
|
|
14066
14066
|
const t = targets[0];
|
|
14067
14067
|
const texto = t.label ? `Abrir chat ${t.label}` : "Abrir chat";
|
|
14068
|
-
return /* @__PURE__ */ jsx("button", { type: "button", className: CLASS$
|
|
14068
|
+
return /* @__PURE__ */ jsx("button", { type: "button", className: CLASS$d, "aria-label": texto, title: texto, onClick: () => abrir(t.id), children: /* @__PURE__ */ jsx(Burbuja, {}) });
|
|
14069
14069
|
}
|
|
14070
14070
|
return /* @__PURE__ */ jsx(
|
|
14071
14071
|
DropdownMenu,
|
|
@@ -14079,7 +14079,7 @@ const ChatLinkCell = ({
|
|
|
14079
14079
|
"button",
|
|
14080
14080
|
{
|
|
14081
14081
|
type: "button",
|
|
14082
|
-
className: CLASS$
|
|
14082
|
+
className: CLASS$d,
|
|
14083
14083
|
"aria-label": `Abrir chat (${targets.length} conversaciones)`,
|
|
14084
14084
|
title: "Abrir chat",
|
|
14085
14085
|
children: /* @__PURE__ */ jsx(Burbuja, {})
|
|
@@ -14396,7 +14396,7 @@ function uploadViaEventBus(eventBus, file, fileType) {
|
|
|
14396
14396
|
});
|
|
14397
14397
|
}
|
|
14398
14398
|
|
|
14399
|
-
const CLASS$
|
|
14399
|
+
const CLASS$c = `${COMPONENT_PREFIX$1}file-field`;
|
|
14400
14400
|
function iconoPorNombre(nombre) {
|
|
14401
14401
|
const ext = nombre.split(".").pop()?.toLowerCase() ?? "";
|
|
14402
14402
|
if (["png", "jpg", "jpeg", "gif", "webp", "heic", "heif"].includes(ext)) return ICON_TYPES.IMAGE;
|
|
@@ -14427,18 +14427,18 @@ const FileField = ({
|
|
|
14427
14427
|
const elegir = () => {
|
|
14428
14428
|
if (!disabled) inputRef.current?.click();
|
|
14429
14429
|
};
|
|
14430
|
-
return /* @__PURE__ */ jsxs("div", { className: `${CLASS$
|
|
14431
|
-
/* @__PURE__ */ jsxs("span", { className: `${CLASS$
|
|
14430
|
+
return /* @__PURE__ */ jsxs("div", { className: `${CLASS$c}${error ? ` ${CLASS$c}--error` : ""}`, children: [
|
|
14431
|
+
/* @__PURE__ */ jsxs("span", { className: `${CLASS$c}__label`, children: [
|
|
14432
14432
|
label,
|
|
14433
14433
|
required ? " *" : "",
|
|
14434
14434
|
multiple && hechos > 0 ? ` (${hechos})` : ""
|
|
14435
14435
|
] }),
|
|
14436
|
-
/* @__PURE__ */ jsxs("div", { className: `${CLASS$
|
|
14436
|
+
/* @__PURE__ */ jsxs("div", { className: `${CLASS$c}__box`, children: [
|
|
14437
14437
|
/* @__PURE__ */ jsx(
|
|
14438
14438
|
"input",
|
|
14439
14439
|
{
|
|
14440
14440
|
ref: inputRef,
|
|
14441
|
-
className: `${CLASS$
|
|
14441
|
+
className: `${CLASS$c}__native`,
|
|
14442
14442
|
type: "file",
|
|
14443
14443
|
accept,
|
|
14444
14444
|
multiple,
|
|
@@ -14449,14 +14449,14 @@ const FileField = ({
|
|
|
14449
14449
|
}
|
|
14450
14450
|
}
|
|
14451
14451
|
),
|
|
14452
|
-
/* @__PURE__ */ jsxs("button", { type: "button", className: `${CLASS$
|
|
14452
|
+
/* @__PURE__ */ jsxs("button", { type: "button", className: `${CLASS$c}__pick`, onClick: elegir, disabled, children: [
|
|
14453
14453
|
/* @__PURE__ */ jsx(Icon$1, { type: ICON_TYPES.UPLOAD, size: "small" }),
|
|
14454
|
-
/* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
14454
|
+
/* @__PURE__ */ jsx("span", { className: `${CLASS$c}__pick-text`, children: entries.length === 0 ? multiple ? "Toca para elegir archivos" : "Toca para elegir un archivo" : multiple ? "A\xF1adir m\xE1s" : "Cambiar archivo" })
|
|
14455
14455
|
] }),
|
|
14456
|
-
entries.length > 0 && /* @__PURE__ */ jsx("ul", { className: `${CLASS$
|
|
14457
|
-
/* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
14458
|
-
/* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
14459
|
-
/* @__PURE__ */ jsxs("span", { className: `${CLASS$
|
|
14456
|
+
entries.length > 0 && /* @__PURE__ */ jsx("ul", { className: `${CLASS$c}__list`, children: entries.map((e, i) => /* @__PURE__ */ jsxs("li", { className: `${CLASS$c}__item ${CLASS$c}__item--${e.status}`, children: [
|
|
14457
|
+
/* @__PURE__ */ jsx("span", { className: `${CLASS$c}__kind`, "aria-hidden": "true", children: /* @__PURE__ */ jsx(Icon$1, { type: iconoPorNombre(e.name), size: "small" }) }),
|
|
14458
|
+
/* @__PURE__ */ jsx("span", { className: `${CLASS$c}__name`, children: e.name }),
|
|
14459
|
+
/* @__PURE__ */ jsxs("span", { className: `${CLASS$c}__state`, children: [
|
|
14460
14460
|
e.status === "uploading" && "Subiendo\u2026",
|
|
14461
14461
|
e.status === "done" && (pesoLegible(e.size) || "Listo"),
|
|
14462
14462
|
e.status === "error" && "No se pudo subir"
|
|
@@ -14465,7 +14465,7 @@ const FileField = ({
|
|
|
14465
14465
|
"button",
|
|
14466
14466
|
{
|
|
14467
14467
|
type: "button",
|
|
14468
|
-
className: `${CLASS$
|
|
14468
|
+
className: `${CLASS$c}__remove`,
|
|
14469
14469
|
onClick: () => onRemove(i),
|
|
14470
14470
|
"aria-label": `Quitar ${e.name}`,
|
|
14471
14471
|
disabled,
|
|
@@ -14474,8 +14474,8 @@ const FileField = ({
|
|
|
14474
14474
|
)
|
|
14475
14475
|
] }, `${e.name}-${i}`)) })
|
|
14476
14476
|
] }),
|
|
14477
|
-
error && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
14478
|
-
!error && subiendo && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
14477
|
+
error && /* @__PURE__ */ jsx("p", { className: `${CLASS$c}__error`, children: error }),
|
|
14478
|
+
!error && subiendo && /* @__PURE__ */ jsx("p", { className: `${CLASS$c}__hint`, children: "Espera a que terminen de subir." })
|
|
14479
14479
|
] });
|
|
14480
14480
|
};
|
|
14481
14481
|
|
|
@@ -15631,7 +15631,7 @@ function buildMarkerIcon(name, color = "#dc2626", heading = 0) {
|
|
|
15631
15631
|
return `data:image/svg+xml;charset=UTF-8,${encodeURIComponent(svg)}`;
|
|
15632
15632
|
}
|
|
15633
15633
|
|
|
15634
|
-
const CLASS$
|
|
15634
|
+
const CLASS$b = `${COMPONENT_PREFIX$1}map-view`;
|
|
15635
15635
|
const DEFAULT_CENTER = { lat: 4.711, lng: -74.0721 };
|
|
15636
15636
|
const DEFAULT_ZOOM = 12;
|
|
15637
15637
|
const DEFAULT_HEIGHT$1 = 320;
|
|
@@ -15932,23 +15932,23 @@ const MapView = ({
|
|
|
15932
15932
|
document.body.style.overflow = prev;
|
|
15933
15933
|
};
|
|
15934
15934
|
}, [expanded]);
|
|
15935
|
-
const rootClass = [CLASS$
|
|
15935
|
+
const rootClass = [CLASS$b, fullBleed && `${CLASS$b}--full-bleed`, className].filter(Boolean).join(" ");
|
|
15936
15936
|
if (overQuota) {
|
|
15937
|
-
return /* @__PURE__ */ jsx("div", { className: rootClass, style: { height }, children: /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
15937
|
+
return /* @__PURE__ */ jsx("div", { className: rootClass, style: { height }, children: /* @__PURE__ */ jsx("p", { className: `${CLASS$b}__state ${CLASS$b}__state--error`, children: labels?.quotaText ?? "Se alcanz\xF3 el l\xEDmite diario de uso del mapa. Intenta ma\xF1ana." }) });
|
|
15938
15938
|
}
|
|
15939
15939
|
if (status === "error") {
|
|
15940
|
-
return /* @__PURE__ */ jsx("div", { className: rootClass, style: { height }, children: /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
15940
|
+
return /* @__PURE__ */ jsx("div", { className: rootClass, style: { height }, children: /* @__PURE__ */ jsx("p", { className: `${CLASS$b}__state ${CLASS$b}__state--error`, children: labels?.errorText ?? "No se pudo cargar el mapa." }) });
|
|
15941
15941
|
}
|
|
15942
15942
|
return /* @__PURE__ */ jsxs("div", { className: rootClass, style: fullBleed ? void 0 : { height }, children: [
|
|
15943
|
-
status !== "ready" && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
15944
|
-
/* @__PURE__ */ jsx("div", { ref: nodeRef, className: `${CLASS$
|
|
15945
|
-
status === "ready" && list.length === 0 && allRoutes.length === 0 && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
15946
|
-
status === "ready" && onPointMove && list.length > 0 && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
15943
|
+
status !== "ready" && /* @__PURE__ */ jsx("p", { className: `${CLASS$b}__state`, children: labels?.loadingText ?? "Cargando mapa\u2026" }),
|
|
15944
|
+
/* @__PURE__ */ jsx("div", { ref: nodeRef, className: `${CLASS$b}__canvas`, "aria-label": "Mapa", role: "application" }),
|
|
15945
|
+
status === "ready" && list.length === 0 && allRoutes.length === 0 && /* @__PURE__ */ jsx("p", { className: `${CLASS$b}__empty`, children: labels?.emptyText ?? "Sin ubicaciones para mostrar" }),
|
|
15946
|
+
status === "ready" && onPointMove && list.length > 0 && /* @__PURE__ */ jsx("p", { className: `${CLASS$b}__empty`, children: labels?.moveHint ?? "Arrastra el pin o toca el mapa para ajustar" }),
|
|
15947
15947
|
status === "ready" && expandable && !fullBleed && /* @__PURE__ */ jsx(
|
|
15948
15948
|
"button",
|
|
15949
15949
|
{
|
|
15950
15950
|
type: "button",
|
|
15951
|
-
className: `${CLASS$
|
|
15951
|
+
className: `${CLASS$b}__expand`,
|
|
15952
15952
|
"aria-label": labels?.expandAria ?? "Ver el mapa en pantalla completa",
|
|
15953
15953
|
title: labels?.expandAria ?? "Pantalla completa",
|
|
15954
15954
|
onClick: () => setExpanded(true),
|
|
@@ -15956,7 +15956,7 @@ const MapView = ({
|
|
|
15956
15956
|
}
|
|
15957
15957
|
),
|
|
15958
15958
|
expanded && createPortal(
|
|
15959
|
-
/* @__PURE__ */ jsxs("div", { className: `${CLASS$
|
|
15959
|
+
/* @__PURE__ */ jsxs("div", { className: `${CLASS$b}-fs`, role: "dialog", "aria-modal": "true", "aria-label": "Mapa", children: [
|
|
15960
15960
|
/* @__PURE__ */ jsx(
|
|
15961
15961
|
MapView,
|
|
15962
15962
|
{
|
|
@@ -15970,7 +15970,7 @@ const MapView = ({
|
|
|
15970
15970
|
"button",
|
|
15971
15971
|
{
|
|
15972
15972
|
type: "button",
|
|
15973
|
-
className: `${CLASS$
|
|
15973
|
+
className: `${CLASS$b}-fs__close`,
|
|
15974
15974
|
"aria-label": labels?.closeAria ?? "Cerrar el mapa",
|
|
15975
15975
|
onClick: () => setExpanded(false),
|
|
15976
15976
|
children: /* @__PURE__ */ jsxs("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
@@ -16086,7 +16086,7 @@ function reverseGeocode(lat, lng) {
|
|
|
16086
16086
|
});
|
|
16087
16087
|
}
|
|
16088
16088
|
|
|
16089
|
-
const CLASS$
|
|
16089
|
+
const CLASS$a = `${COMPONENT_PREFIX$1}location-field`;
|
|
16090
16090
|
const GPS_TIMEOUT_MS = 1e4;
|
|
16091
16091
|
const CONFIRM_MAP_HEIGHT = 180;
|
|
16092
16092
|
const LocationField = ({
|
|
@@ -16159,16 +16159,16 @@ const LocationField = ({
|
|
|
16159
16159
|
}
|
|
16160
16160
|
};
|
|
16161
16161
|
const hasPoint = value?.lat != null && value?.lng != null;
|
|
16162
|
-
return /* @__PURE__ */ jsxs("div", { className: `${CLASS$
|
|
16163
|
-
label && /* @__PURE__ */ jsxs("span", { className: `${CLASS$
|
|
16162
|
+
return /* @__PURE__ */ jsxs("div", { className: `${CLASS$a}${error ? ` ${CLASS$a}--error` : ""}`, ref: boxRef, children: [
|
|
16163
|
+
label && /* @__PURE__ */ jsxs("span", { className: `${CLASS$a}__label`, children: [
|
|
16164
16164
|
label,
|
|
16165
16165
|
required ? " *" : ""
|
|
16166
16166
|
] }),
|
|
16167
|
-
/* @__PURE__ */ jsxs("div", { className: `${CLASS$
|
|
16167
|
+
/* @__PURE__ */ jsxs("div", { className: `${CLASS$a}__row`, children: [
|
|
16168
16168
|
/* @__PURE__ */ jsx(
|
|
16169
16169
|
"input",
|
|
16170
16170
|
{
|
|
16171
|
-
className: `${CLASS$
|
|
16171
|
+
className: `${CLASS$a}__input`,
|
|
16172
16172
|
type: "text",
|
|
16173
16173
|
value: text,
|
|
16174
16174
|
disabled,
|
|
@@ -16182,7 +16182,7 @@ const LocationField = ({
|
|
|
16182
16182
|
"button",
|
|
16183
16183
|
{
|
|
16184
16184
|
type: "button",
|
|
16185
|
-
className: `${CLASS$
|
|
16185
|
+
className: `${CLASS$a}__gps`,
|
|
16186
16186
|
onClick: useMyLocation,
|
|
16187
16187
|
disabled: disabled || gps === "locating",
|
|
16188
16188
|
title: labels?.useMyLocation ?? "Enviar mi ubicaci\xF3n",
|
|
@@ -16196,11 +16196,11 @@ const LocationField = ({
|
|
|
16196
16196
|
}
|
|
16197
16197
|
)
|
|
16198
16198
|
] }),
|
|
16199
|
-
open && suggestions.length > 0 && /* @__PURE__ */ jsx("ul", { className: `${CLASS$
|
|
16200
|
-
error && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
16201
|
-
gps === "denied" && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
16202
|
-
gps === "unavailable" && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
16203
|
-
hasPoint && /* @__PURE__ */ jsxs("div", { className: `${CLASS$
|
|
16199
|
+
open && suggestions.length > 0 && /* @__PURE__ */ jsx("ul", { className: `${CLASS$a}__suggestions`, children: suggestions.map((s) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void pickSuggestion(s.id, s.description), children: s.description }) }, s.id)) }),
|
|
16200
|
+
error && /* @__PURE__ */ jsx("p", { className: `${CLASS$a}__error`, children: error }),
|
|
16201
|
+
gps === "denied" && /* @__PURE__ */ jsx("p", { className: `${CLASS$a}__hint ${CLASS$a}__hint--warn`, children: labels?.permissionDenied ?? "No diste permiso de ubicaci\xF3n. Puedes escribir la direcci\xF3n." }),
|
|
16202
|
+
gps === "unavailable" && /* @__PURE__ */ jsx("p", { className: `${CLASS$a}__hint ${CLASS$a}__hint--warn`, children: labels?.unavailable ?? "No pudimos obtener tu ubicaci\xF3n. Puedes escribir la direcci\xF3n." }),
|
|
16203
|
+
hasPoint && /* @__PURE__ */ jsxs("div", { className: `${CLASS$a}__confirm`, children: [
|
|
16204
16204
|
/* @__PURE__ */ jsx(
|
|
16205
16205
|
MapView,
|
|
16206
16206
|
{
|
|
@@ -16210,7 +16210,7 @@ const LocationField = ({
|
|
|
16210
16210
|
onPointMove: (id, lat, lng) => void movePoint(id, lat, lng)
|
|
16211
16211
|
}
|
|
16212
16212
|
),
|
|
16213
|
-
/* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
16213
|
+
/* @__PURE__ */ jsx("p", { className: `${CLASS$a}__hint`, children: labels?.confirmHint ?? "Verifica que el punto sea correcto." })
|
|
16214
16214
|
] })
|
|
16215
16215
|
] });
|
|
16216
16216
|
};
|
|
@@ -16833,7 +16833,7 @@ function markFitOutliers(points, radiusKm = FIT_RADIUS_KM) {
|
|
|
16833
16833
|
return { points: marcados, outside };
|
|
16834
16834
|
}
|
|
16835
16835
|
|
|
16836
|
-
const CLASS$
|
|
16836
|
+
const CLASS$9 = `${COMPONENT_PREFIX$1}services-map`;
|
|
16837
16837
|
const DEFAULT_HEIGHT = 340;
|
|
16838
16838
|
function readNumber(row, field) {
|
|
16839
16839
|
if (!field) return void 0;
|
|
@@ -16959,7 +16959,7 @@ const ServicesMap = ({ config, eventBus, apiKey, filter, fill }) => {
|
|
|
16959
16959
|
[livePoints]
|
|
16960
16960
|
);
|
|
16961
16961
|
const nadaQueDibujar = rows !== null && allPoints.length === 0 && route.length === 0;
|
|
16962
|
-
return /* @__PURE__ */ jsx("div", { className: fill ? `${CLASS$
|
|
16962
|
+
return /* @__PURE__ */ jsx("div", { className: fill ? `${CLASS$9} ${CLASS$9}--fill` : CLASS$9, children: rows === null ? /* @__PURE__ */ jsx("p", { className: `${CLASS$9}__state`, children: labels.loadingText ?? "Cargando ubicaciones\u2026" }) : nadaQueDibujar ? /* @__PURE__ */ jsx("p", { className: `${CLASS$9}__state`, children: lineaSinMapa(labels, missing, failed) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
16963
16963
|
/* @__PURE__ */ jsx(
|
|
16964
16964
|
MapView,
|
|
16965
16965
|
{
|
|
@@ -16973,20 +16973,20 @@ const ServicesMap = ({ config, eventBus, apiKey, filter, fill }) => {
|
|
|
16973
16973
|
labels: { emptyText: labels.emptyText }
|
|
16974
16974
|
}
|
|
16975
16975
|
),
|
|
16976
|
-
/* @__PURE__ */ jsxs("div", { className: `${CLASS$
|
|
16977
|
-
livePoints.length > 0 && /* @__PURE__ */ jsxs("p", { className: `${CLASS$
|
|
16976
|
+
/* @__PURE__ */ jsxs("div", { className: `${CLASS$9}__notes`, children: [
|
|
16977
|
+
livePoints.length > 0 && /* @__PURE__ */ jsxs("p", { className: `${CLASS$9}__note ${CLASS$9}__note--live`, children: [
|
|
16978
16978
|
(config.live?.labels?.liveText ?? "{n} en movimiento").replace(
|
|
16979
16979
|
"{n}",
|
|
16980
16980
|
String(livePoints.length)
|
|
16981
16981
|
),
|
|
16982
16982
|
simulated > 0 && ` \xB7 ${config.live?.labels?.simulatedText ?? "incluye posiciones simuladas"}`
|
|
16983
16983
|
] }),
|
|
16984
|
-
missing > 0 && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
16985
|
-
outside > 0 && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
16984
|
+
missing > 0 && /* @__PURE__ */ jsx("p", { className: `${CLASS$9}__note`, children: ((missing === 1 ? labels.missingTextOne : void 0) ?? labels.missingText ?? "{n} sin ubicaci\xF3n registrada").replace("{n}", String(missing)) }),
|
|
16985
|
+
outside > 0 && /* @__PURE__ */ jsx("p", { className: `${CLASS$9}__note`, children: (labels.outsideText ?? "{n} fuera de la zona (aleja el mapa para verlos)").replace(
|
|
16986
16986
|
"{n}",
|
|
16987
16987
|
String(outside)
|
|
16988
16988
|
) }),
|
|
16989
|
-
failed && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
16989
|
+
failed && /* @__PURE__ */ jsx("p", { className: `${CLASS$9}__note`, children: "No se pudieron cargar las ubicaciones." })
|
|
16990
16990
|
] })
|
|
16991
16991
|
] }) });
|
|
16992
16992
|
};
|
|
@@ -17002,7 +17002,7 @@ function lineaSinMapa(labels, missing, failed) {
|
|
|
17002
17002
|
return labels.emptyText ?? "Sin ubicaciones para mostrar";
|
|
17003
17003
|
}
|
|
17004
17004
|
|
|
17005
|
-
const CLASS$
|
|
17005
|
+
const CLASS$8 = `${COMPONENT_PREFIX$1}service-shortcuts`;
|
|
17006
17006
|
const ICONS = {
|
|
17007
17007
|
// SPEC-126 — quien DESPACHA tambien necesita sus puertas, y una de ellas son las conversaciones
|
|
17008
17008
|
// de sus servicios. Los cinco iconos que habia eran todos de quien PIDE una grua.
|
|
@@ -17056,16 +17056,16 @@ const ServiceShortcuts = ({
|
|
|
17056
17056
|
}) => {
|
|
17057
17057
|
if (!options?.length) return null;
|
|
17058
17058
|
const elegido = !!selectedId;
|
|
17059
|
-
return /* @__PURE__ */ jsx("div", { className: [CLASS$
|
|
17059
|
+
return /* @__PURE__ */ jsx("div", { className: [CLASS$8, elegido ? `${CLASS$8}--used` : ""].filter(Boolean).join(" "), children: options.map((o) => {
|
|
17060
17060
|
const esElegido = o.id === selectedId;
|
|
17061
17061
|
return /* @__PURE__ */ jsxs(
|
|
17062
17062
|
"button",
|
|
17063
17063
|
{
|
|
17064
17064
|
type: "button",
|
|
17065
17065
|
className: [
|
|
17066
|
-
`${CLASS$
|
|
17067
|
-
elegido ? `${CLASS$
|
|
17068
|
-
esElegido ? `${CLASS$
|
|
17066
|
+
`${CLASS$8}__item`,
|
|
17067
|
+
elegido ? `${CLASS$8}__item--off` : "",
|
|
17068
|
+
esElegido ? `${CLASS$8}__item--chosen` : ""
|
|
17069
17069
|
].filter(Boolean).join(" "),
|
|
17070
17070
|
disabled: elegido,
|
|
17071
17071
|
"aria-disabled": elegido,
|
|
@@ -17077,12 +17077,12 @@ const ServiceShortcuts = ({
|
|
|
17077
17077
|
else if (o.route) eventBus?.emit(CHAT_EVENT.NAVIGATE, { route: o.route });
|
|
17078
17078
|
},
|
|
17079
17079
|
children: [
|
|
17080
|
-
o.icon && /* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
17081
|
-
/* @__PURE__ */ jsxs("span", { className: `${CLASS$
|
|
17082
|
-
/* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
17083
|
-
o.hint && /* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
17080
|
+
o.icon && /* @__PURE__ */ jsx("span", { className: `${CLASS$8}__icon`, children: ICONS[o.icon] }),
|
|
17081
|
+
/* @__PURE__ */ jsxs("span", { className: `${CLASS$8}__text`, children: [
|
|
17082
|
+
/* @__PURE__ */ jsx("span", { className: `${CLASS$8}__label`, children: o.label }),
|
|
17083
|
+
o.hint && /* @__PURE__ */ jsx("span", { className: `${CLASS$8}__hint`, children: o.hint })
|
|
17084
17084
|
] }),
|
|
17085
|
-
/* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
17085
|
+
/* @__PURE__ */ jsx("span", { className: `${CLASS$8}__arrow`, children: esElegido ? CHECK : elegido ? null : /* @__PURE__ */ jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("polyline", { points: "9 18 15 12 9 6" }) }) })
|
|
17086
17086
|
]
|
|
17087
17087
|
},
|
|
17088
17088
|
o.id
|
|
@@ -17651,19 +17651,19 @@ function ChatNavigatorChat({ component, eventBus }) {
|
|
|
17651
17651
|
] });
|
|
17652
17652
|
}
|
|
17653
17653
|
|
|
17654
|
-
const CLASS$
|
|
17654
|
+
const CLASS$7 = `${COMPONENT_PREFIX$1}user-tools`;
|
|
17655
17655
|
const UserTools = ({ config, onChange, onAction, className }) => {
|
|
17656
17656
|
const { title, description, items } = config;
|
|
17657
|
-
return /* @__PURE__ */ jsxs("section", { className: [CLASS$
|
|
17658
|
-
title && /* @__PURE__ */ jsx("h2", { className: `${CLASS$
|
|
17659
|
-
description && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
17660
|
-
/* @__PURE__ */ jsx("ul", { className: `${CLASS$
|
|
17657
|
+
return /* @__PURE__ */ jsxs("section", { className: [CLASS$7, className].filter(Boolean).join(" "), children: [
|
|
17658
|
+
title && /* @__PURE__ */ jsx("h2", { className: `${CLASS$7}__title`, children: title }),
|
|
17659
|
+
description && /* @__PURE__ */ jsx("p", { className: `${CLASS$7}__description`, children: description }),
|
|
17660
|
+
/* @__PURE__ */ jsx("ul", { className: `${CLASS$7}__list`, children: items.map((item) => /* @__PURE__ */ jsx("li", { className: `${CLASS$7}__item`, children: item.kind === "action" ? (
|
|
17661
17661
|
// SPEC-139 T9 — un ajuste que se pulsa: mismo renglón (etiqueta y pista), y en vez
|
|
17662
17662
|
// de la caja, un botón que dice lo que hace.
|
|
17663
|
-
/* @__PURE__ */ jsxs("div", { className: `${CLASS$
|
|
17664
|
-
/* @__PURE__ */ jsxs("span", { className: `${CLASS$
|
|
17665
|
-
/* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
17666
|
-
item.hint && /* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
17663
|
+
/* @__PURE__ */ jsxs("div", { className: `${CLASS$7}__action`, children: [
|
|
17664
|
+
/* @__PURE__ */ jsxs("span", { className: `${CLASS$7}__text`, children: [
|
|
17665
|
+
/* @__PURE__ */ jsx("span", { className: `${CLASS$7}__label`, children: item.label }),
|
|
17666
|
+
item.hint && /* @__PURE__ */ jsx("span", { className: `${CLASS$7}__hint`, children: item.hint })
|
|
17667
17667
|
] }),
|
|
17668
17668
|
/* @__PURE__ */ jsx(
|
|
17669
17669
|
Button,
|
|
@@ -17682,13 +17682,13 @@ const UserTools = ({ config, onChange, onAction, className }) => {
|
|
|
17682
17682
|
checked: Boolean(item.value),
|
|
17683
17683
|
disabled: item.disabled,
|
|
17684
17684
|
onChange: (checked) => onChange?.(item.id, checked),
|
|
17685
|
-
label: /* @__PURE__ */ jsxs("span", { className: `${CLASS$
|
|
17686
|
-
/* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
17687
|
-
item.hint && /* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
17685
|
+
label: /* @__PURE__ */ jsxs("span", { className: `${CLASS$7}__text`, children: [
|
|
17686
|
+
/* @__PURE__ */ jsx("span", { className: `${CLASS$7}__label`, children: item.label }),
|
|
17687
|
+
item.hint && /* @__PURE__ */ jsx("span", { className: `${CLASS$7}__hint`, children: item.hint })
|
|
17688
17688
|
] })
|
|
17689
17689
|
}
|
|
17690
17690
|
) }, item.id)) }),
|
|
17691
|
-
items.length === 0 && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
17691
|
+
items.length === 0 && /* @__PURE__ */ jsx("p", { className: `${CLASS$7}__empty`, children: "No hay herramientas disponibles por ahora." })
|
|
17692
17692
|
] });
|
|
17693
17693
|
};
|
|
17694
17694
|
UserTools.displayName = "UserTools";
|
|
@@ -18298,7 +18298,7 @@ const ChatHeader = ({
|
|
|
18298
18298
|
] });
|
|
18299
18299
|
};
|
|
18300
18300
|
|
|
18301
|
-
const CLASS$
|
|
18301
|
+
const CLASS$6 = `${COMPONENT_PREFIX$1}floating-actions`;
|
|
18302
18302
|
const ICON_VALUES = new Set(Object.values(ICON_TYPES));
|
|
18303
18303
|
function renderIcon(icon) {
|
|
18304
18304
|
if (typeof icon === "string" && ICON_VALUES.has(icon)) {
|
|
@@ -18307,23 +18307,23 @@ function renderIcon(icon) {
|
|
|
18307
18307
|
return icon;
|
|
18308
18308
|
}
|
|
18309
18309
|
function Side({ buttons, align, eventBus }) {
|
|
18310
|
-
return /* @__PURE__ */ jsx("div", { className: `${CLASS$
|
|
18310
|
+
return /* @__PURE__ */ jsx("div", { className: `${CLASS$6}__group ${CLASS$6}__group--${align}`, children: buttons.map((b) => {
|
|
18311
18311
|
const emit = () => {
|
|
18312
18312
|
if (b.disabled) return;
|
|
18313
18313
|
eventBus.emit(b.event, b.payload);
|
|
18314
18314
|
};
|
|
18315
18315
|
if (b.custom) {
|
|
18316
|
-
return /* @__PURE__ */ jsxs("div", { className: `${CLASS$
|
|
18316
|
+
return /* @__PURE__ */ jsxs("div", { className: `${CLASS$6}__slot`, children: [
|
|
18317
18317
|
b.custom,
|
|
18318
|
-
b.panel && b.open && /* @__PURE__ */ jsx("div", { className: `${CLASS$
|
|
18318
|
+
b.panel && b.open && /* @__PURE__ */ jsx("div", { className: `${CLASS$6}__panel ${CLASS$6}__panel--${align}`, children: b.panel })
|
|
18319
18319
|
] }, b.id);
|
|
18320
18320
|
}
|
|
18321
|
-
return /* @__PURE__ */ jsxs("div", { className: `${CLASS$
|
|
18321
|
+
return /* @__PURE__ */ jsxs("div", { className: `${CLASS$6}__slot`, children: [
|
|
18322
18322
|
/* @__PURE__ */ jsxs(
|
|
18323
18323
|
"button",
|
|
18324
18324
|
{
|
|
18325
18325
|
type: "button",
|
|
18326
|
-
className: [`${CLASS$
|
|
18326
|
+
className: [`${CLASS$6}__button`, b.active ? `${CLASS$6}__button--active` : ""].filter(Boolean).join(" "),
|
|
18327
18327
|
"aria-label": b.ariaLabel,
|
|
18328
18328
|
title: b.ariaLabel,
|
|
18329
18329
|
"aria-pressed": b.active,
|
|
@@ -18331,16 +18331,16 @@ function Side({ buttons, align, eventBus }) {
|
|
|
18331
18331
|
onClick: emit,
|
|
18332
18332
|
children: [
|
|
18333
18333
|
renderIcon(b.icon),
|
|
18334
|
-
b.badge != null && b.badge !== "" && b.badge !== 0 && /* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
18334
|
+
b.badge != null && b.badge !== "" && b.badge !== 0 && /* @__PURE__ */ jsx("span", { className: `${CLASS$6}__badge`, children: b.badge })
|
|
18335
18335
|
]
|
|
18336
18336
|
}
|
|
18337
18337
|
),
|
|
18338
|
-
b.panel && b.open && /* @__PURE__ */ jsx("div", { className: `${CLASS$
|
|
18338
|
+
b.panel && b.open && /* @__PURE__ */ jsx("div", { className: `${CLASS$6}__panel ${CLASS$6}__panel--${align}`, children: b.panel })
|
|
18339
18339
|
] }, b.id);
|
|
18340
18340
|
}) });
|
|
18341
18341
|
}
|
|
18342
18342
|
const ChatFloatingActions = ({ eventBus, left = [], right = [], offset = 12, glass = false }) => {
|
|
18343
|
-
const cls = [CLASS$
|
|
18343
|
+
const cls = [CLASS$6, glass ? `${CLASS$6}--glass` : ""].filter(Boolean).join(" ");
|
|
18344
18344
|
return /* @__PURE__ */ jsxs("div", { className: cls, style: { paddingLeft: offset, paddingRight: offset }, children: [
|
|
18345
18345
|
/* @__PURE__ */ jsx(Side, { buttons: left, align: "left", eventBus }),
|
|
18346
18346
|
/* @__PURE__ */ jsx(Side, { buttons: right, align: "right", eventBus })
|
|
@@ -18773,7 +18773,7 @@ const UserMessage = ({
|
|
|
18773
18773
|
] }) });
|
|
18774
18774
|
};
|
|
18775
18775
|
|
|
18776
|
-
const CLASS$
|
|
18776
|
+
const CLASS$5 = `${COMPONENT_PREFIX$1}photo-picker`;
|
|
18777
18777
|
const PhotoPicker = ({
|
|
18778
18778
|
label,
|
|
18779
18779
|
hint,
|
|
@@ -18798,8 +18798,8 @@ const PhotoPicker = ({
|
|
|
18798
18798
|
void onFiles(e.target.files);
|
|
18799
18799
|
e.target.value = "";
|
|
18800
18800
|
};
|
|
18801
|
-
return /* @__PURE__ */ jsxs("div", { className: `${CLASS$
|
|
18802
|
-
/* @__PURE__ */ jsxs("span", { className: `${CLASS$
|
|
18801
|
+
return /* @__PURE__ */ jsxs("div", { className: `${CLASS$5}${error ? ` ${CLASS$5}--error` : ""}`, children: [
|
|
18802
|
+
/* @__PURE__ */ jsxs("span", { className: `${CLASS$5}__label`, children: [
|
|
18803
18803
|
label,
|
|
18804
18804
|
required ? " *" : "",
|
|
18805
18805
|
hechas > 0 ? ` (${hechas}${max ? `/${max}` : ""})` : ""
|
|
@@ -18808,7 +18808,7 @@ const PhotoPicker = ({
|
|
|
18808
18808
|
"input",
|
|
18809
18809
|
{
|
|
18810
18810
|
ref: galeriaRef,
|
|
18811
|
-
className: `${CLASS$
|
|
18811
|
+
className: `${CLASS$5}__native`,
|
|
18812
18812
|
type: "file",
|
|
18813
18813
|
accept: "image/*",
|
|
18814
18814
|
multiple: max !== 1,
|
|
@@ -18821,7 +18821,7 @@ const PhotoPicker = ({
|
|
|
18821
18821
|
"input",
|
|
18822
18822
|
{
|
|
18823
18823
|
ref: camaraRef,
|
|
18824
|
-
className: `${CLASS$
|
|
18824
|
+
className: `${CLASS$5}__native`,
|
|
18825
18825
|
type: "file",
|
|
18826
18826
|
accept: "image/*",
|
|
18827
18827
|
capture: "environment",
|
|
@@ -18830,15 +18830,15 @@ const PhotoPicker = ({
|
|
|
18830
18830
|
"data-testid": "photo-picker-camera"
|
|
18831
18831
|
}
|
|
18832
18832
|
),
|
|
18833
|
-
entries.length > 0 && /* @__PURE__ */ jsx("ul", { className: `${CLASS$
|
|
18834
|
-
e.previewUrl ? /* @__PURE__ */ jsx("img", { className: `${CLASS$
|
|
18835
|
-
e.status === "uploading" && /* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
18836
|
-
e.status === "error" && /* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
18833
|
+
entries.length > 0 && /* @__PURE__ */ jsx("ul", { className: `${CLASS$5}__grid`, children: entries.map((e, i) => /* @__PURE__ */ jsxs("li", { className: `${CLASS$5}__thumb ${CLASS$5}__thumb--${e.status}`, children: [
|
|
18834
|
+
e.previewUrl ? /* @__PURE__ */ jsx("img", { className: `${CLASS$5}__img`, src: e.previewUrl, alt: e.name }) : /* @__PURE__ */ jsx("span", { className: `${CLASS$5}__placeholder`, "aria-hidden": "true", children: /* @__PURE__ */ jsx(Icon$1, { type: ICON_TYPES.IMAGE }) }),
|
|
18835
|
+
e.status === "uploading" && /* @__PURE__ */ jsx("span", { className: `${CLASS$5}__state`, children: "Subiendo\u2026" }),
|
|
18836
|
+
e.status === "error" && /* @__PURE__ */ jsx("span", { className: `${CLASS$5}__state ${CLASS$5}__state--error`, children: "No se pudo subir" }),
|
|
18837
18837
|
onRemove && e.status !== "uploading" && /* @__PURE__ */ jsx(
|
|
18838
18838
|
"button",
|
|
18839
18839
|
{
|
|
18840
18840
|
type: "button",
|
|
18841
|
-
className: `${CLASS$
|
|
18841
|
+
className: `${CLASS$5}__remove`,
|
|
18842
18842
|
onClick: () => onRemove(i),
|
|
18843
18843
|
"aria-label": `Quitar ${e.name}`,
|
|
18844
18844
|
disabled,
|
|
@@ -18846,12 +18846,12 @@ const PhotoPicker = ({
|
|
|
18846
18846
|
}
|
|
18847
18847
|
)
|
|
18848
18848
|
] }, `${e.name}-${i}`)) }),
|
|
18849
|
-
/* @__PURE__ */ jsxs("div", { className: `${CLASS$
|
|
18849
|
+
/* @__PURE__ */ jsxs("div", { className: `${CLASS$5}__actions`, children: [
|
|
18850
18850
|
capture && /* @__PURE__ */ jsxs(
|
|
18851
18851
|
"button",
|
|
18852
18852
|
{
|
|
18853
18853
|
type: "button",
|
|
18854
|
-
className: `${CLASS$
|
|
18854
|
+
className: `${CLASS$5}__pick`,
|
|
18855
18855
|
onClick: () => elegir(camaraRef),
|
|
18856
18856
|
disabled: disabled || lleno,
|
|
18857
18857
|
children: [
|
|
@@ -18864,7 +18864,7 @@ const PhotoPicker = ({
|
|
|
18864
18864
|
"button",
|
|
18865
18865
|
{
|
|
18866
18866
|
type: "button",
|
|
18867
|
-
className: `${CLASS$
|
|
18867
|
+
className: `${CLASS$5}__pick ${CLASS$5}__pick--secondary`,
|
|
18868
18868
|
onClick: () => elegir(galeriaRef),
|
|
18869
18869
|
disabled: disabled || lleno,
|
|
18870
18870
|
children: [
|
|
@@ -18874,13 +18874,13 @@ const PhotoPicker = ({
|
|
|
18874
18874
|
}
|
|
18875
18875
|
)
|
|
18876
18876
|
] }),
|
|
18877
|
-
error && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
18878
|
-
!error && subiendo && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
18879
|
-
!error && !subiendo && hint && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
18877
|
+
error && /* @__PURE__ */ jsx("p", { className: `${CLASS$5}__error`, children: error }),
|
|
18878
|
+
!error && subiendo && /* @__PURE__ */ jsx("p", { className: `${CLASS$5}__hint`, children: "Espera a que terminen de subir." }),
|
|
18879
|
+
!error && !subiendo && hint && /* @__PURE__ */ jsx("p", { className: `${CLASS$5}__hint`, children: hint })
|
|
18880
18880
|
] });
|
|
18881
18881
|
};
|
|
18882
18882
|
|
|
18883
|
-
const CLASS$
|
|
18883
|
+
const CLASS$4 = `${COMPONENT_PREFIX$1}credentials-card`;
|
|
18884
18884
|
async function copiar(texto) {
|
|
18885
18885
|
try {
|
|
18886
18886
|
await navigator.clipboard.writeText(texto);
|
|
@@ -18897,15 +18897,15 @@ const Fila = ({ row }) => {
|
|
|
18897
18897
|
const t = setTimeout(() => setCopiado(false), 1800);
|
|
18898
18898
|
return () => clearTimeout(t);
|
|
18899
18899
|
}, [copiado]);
|
|
18900
|
-
return /* @__PURE__ */ jsxs("li", { className: `${CLASS$
|
|
18901
|
-
/* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
18902
|
-
/* @__PURE__ */ jsx("span", { className: `${CLASS$
|
|
18903
|
-
/* @__PURE__ */ jsxs("span", { className: `${CLASS$
|
|
18900
|
+
return /* @__PURE__ */ jsxs("li", { className: `${CLASS$4}__row`, children: [
|
|
18901
|
+
/* @__PURE__ */ jsx("span", { className: `${CLASS$4}__label`, children: row.label }),
|
|
18902
|
+
/* @__PURE__ */ jsx("span", { className: `${CLASS$4}__value`, "data-testid": `credential-${row.label}`, children: visible ? row.value : "\u2022".repeat(Math.min(row.value.length, 12)) }),
|
|
18903
|
+
/* @__PURE__ */ jsxs("span", { className: `${CLASS$4}__tools`, children: [
|
|
18904
18904
|
row.masked && /* @__PURE__ */ jsx(
|
|
18905
18905
|
"button",
|
|
18906
18906
|
{
|
|
18907
18907
|
type: "button",
|
|
18908
|
-
className: `${CLASS$
|
|
18908
|
+
className: `${CLASS$4}__tool`,
|
|
18909
18909
|
onClick: () => setVisible((v) => !v),
|
|
18910
18910
|
"aria-label": visible ? `Ocultar ${row.label}` : `Ver ${row.label}`,
|
|
18911
18911
|
children: visible ? "Ocultar" : "Ver"
|
|
@@ -18915,7 +18915,7 @@ const Fila = ({ row }) => {
|
|
|
18915
18915
|
"button",
|
|
18916
18916
|
{
|
|
18917
18917
|
type: "button",
|
|
18918
|
-
className: `${CLASS$
|
|
18918
|
+
className: `${CLASS$4}__tool`,
|
|
18919
18919
|
onClick: async () => setCopiado(await copiar(row.value)),
|
|
18920
18920
|
"aria-label": `Copiar ${row.label}`,
|
|
18921
18921
|
children: copiado ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -18934,15 +18934,256 @@ const CredentialsCard = ({
|
|
|
18934
18934
|
note,
|
|
18935
18935
|
action,
|
|
18936
18936
|
className
|
|
18937
|
-
}) => /* @__PURE__ */ jsxs("section", { className: [CLASS$
|
|
18938
|
-
/* @__PURE__ */ jsx("h3", { className: `${CLASS$
|
|
18939
|
-
intro && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
18940
|
-
/* @__PURE__ */ jsx("ul", { className: `${CLASS$
|
|
18941
|
-
note && /* @__PURE__ */ jsx("p", { className: `${CLASS$
|
|
18942
|
-
action && /* @__PURE__ */ jsx("div", { className: `${CLASS$
|
|
18937
|
+
}) => /* @__PURE__ */ jsxs("section", { className: [CLASS$4, className].filter(Boolean).join(" "), "aria-label": title, children: [
|
|
18938
|
+
/* @__PURE__ */ jsx("h3", { className: `${CLASS$4}__title`, children: title }),
|
|
18939
|
+
intro && /* @__PURE__ */ jsx("p", { className: `${CLASS$4}__intro`, children: intro }),
|
|
18940
|
+
/* @__PURE__ */ jsx("ul", { className: `${CLASS$4}__rows`, children: rows.map((r) => /* @__PURE__ */ jsx(Fila, { row: r }, r.label)) }),
|
|
18941
|
+
note && /* @__PURE__ */ jsx("p", { className: `${CLASS$4}__note`, children: note }),
|
|
18942
|
+
action && /* @__PURE__ */ jsx("div", { className: `${CLASS$4}__action`, children: /* @__PURE__ */ jsx(Button, { fullWidth: true, onClick: action.onClick, disabled: action.disabled, children: action.label }) })
|
|
18943
18943
|
] });
|
|
18944
18944
|
CredentialsCard.displayName = "CredentialsCard";
|
|
18945
18945
|
|
|
18946
|
+
const TextArea = forwardRef(
|
|
18947
|
+
({
|
|
18948
|
+
label,
|
|
18949
|
+
error,
|
|
18950
|
+
status,
|
|
18951
|
+
variant = "outlined",
|
|
18952
|
+
fullWidth = false,
|
|
18953
|
+
size = "middle",
|
|
18954
|
+
allowClear = false,
|
|
18955
|
+
onClear,
|
|
18956
|
+
minRows = 3,
|
|
18957
|
+
maxRows,
|
|
18958
|
+
resize = "vertical",
|
|
18959
|
+
showCount = false,
|
|
18960
|
+
maxLength,
|
|
18961
|
+
footer,
|
|
18962
|
+
className = "",
|
|
18963
|
+
value,
|
|
18964
|
+
onChange,
|
|
18965
|
+
disabled,
|
|
18966
|
+
...props
|
|
18967
|
+
}, ref) => {
|
|
18968
|
+
const [internalValue, setInternalValue] = useState("");
|
|
18969
|
+
const textareaRef = useRef(null);
|
|
18970
|
+
useEffect(() => {
|
|
18971
|
+
if (value !== void 0) {
|
|
18972
|
+
setInternalValue(String(value));
|
|
18973
|
+
}
|
|
18974
|
+
}, [value]);
|
|
18975
|
+
const adjustHeight = useCallback(() => {
|
|
18976
|
+
const textarea = textareaRef.current;
|
|
18977
|
+
if (!textarea || resize === "none") return;
|
|
18978
|
+
textarea.style.height = "auto";
|
|
18979
|
+
const lineHeight = parseInt(getComputedStyle(textarea).lineHeight) || 20;
|
|
18980
|
+
const paddingY = 16;
|
|
18981
|
+
const minHeight = minRows * lineHeight + paddingY;
|
|
18982
|
+
const maxHeight = maxRows ? maxRows * lineHeight + paddingY : Infinity;
|
|
18983
|
+
const newHeight = Math.min(
|
|
18984
|
+
Math.max(textarea.scrollHeight, minHeight),
|
|
18985
|
+
maxHeight
|
|
18986
|
+
);
|
|
18987
|
+
textarea.style.height = `${newHeight}px`;
|
|
18988
|
+
}, [minRows, maxRows, resize]);
|
|
18989
|
+
useEffect(() => {
|
|
18990
|
+
if (resize !== "none") {
|
|
18991
|
+
adjustHeight();
|
|
18992
|
+
}
|
|
18993
|
+
}, [internalValue, adjustHeight, resize]);
|
|
18994
|
+
const handleChange = useCallback(
|
|
18995
|
+
(e) => {
|
|
18996
|
+
const newValue = e.target.value;
|
|
18997
|
+
if (maxLength && newValue.length > maxLength) {
|
|
18998
|
+
return;
|
|
18999
|
+
}
|
|
19000
|
+
setInternalValue(newValue);
|
|
19001
|
+
onChange?.(e);
|
|
19002
|
+
},
|
|
19003
|
+
[onChange, maxLength]
|
|
19004
|
+
);
|
|
19005
|
+
const handleClear = useCallback(() => {
|
|
19006
|
+
setInternalValue("");
|
|
19007
|
+
onClear?.();
|
|
19008
|
+
if (onChange && textareaRef.current) {
|
|
19009
|
+
const syntheticEvent = {
|
|
19010
|
+
target: { value: "" },
|
|
19011
|
+
currentTarget: { value: "" }
|
|
19012
|
+
};
|
|
19013
|
+
onChange(syntheticEvent);
|
|
19014
|
+
}
|
|
19015
|
+
textareaRef.current?.focus();
|
|
19016
|
+
}, [onChange, onClear]);
|
|
19017
|
+
const showClearIcon = Boolean(allowClear && internalValue && !disabled);
|
|
19018
|
+
const characterCount = internalValue.length;
|
|
19019
|
+
const wrapperClasses = [
|
|
19020
|
+
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper`,
|
|
19021
|
+
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--${variant}`,
|
|
19022
|
+
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--${size}`,
|
|
19023
|
+
error && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--error`,
|
|
19024
|
+
status && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--${status}`,
|
|
19025
|
+
fullWidth && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--full-width`
|
|
19026
|
+
].filter(Boolean).join(" ");
|
|
19027
|
+
const textareaClasses = [
|
|
19028
|
+
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}`,
|
|
19029
|
+
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}--resize-${resize}`,
|
|
19030
|
+
showClearIcon && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}--with-clear`,
|
|
19031
|
+
className
|
|
19032
|
+
].filter(Boolean).join(" ");
|
|
19033
|
+
return /* @__PURE__ */ jsxs("div", { className: wrapperClasses, children: [
|
|
19034
|
+
label && /* @__PURE__ */ jsx(
|
|
19035
|
+
"label",
|
|
19036
|
+
{
|
|
19037
|
+
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__label`,
|
|
19038
|
+
children: label
|
|
19039
|
+
}
|
|
19040
|
+
),
|
|
19041
|
+
/* @__PURE__ */ jsxs(
|
|
19042
|
+
"div",
|
|
19043
|
+
{
|
|
19044
|
+
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__container`,
|
|
19045
|
+
children: [
|
|
19046
|
+
/* @__PURE__ */ jsx(
|
|
19047
|
+
"textarea",
|
|
19048
|
+
{
|
|
19049
|
+
ref: (node) => {
|
|
19050
|
+
textareaRef.current = node;
|
|
19051
|
+
if (typeof ref === "function") {
|
|
19052
|
+
ref(node);
|
|
19053
|
+
} else if (ref) {
|
|
19054
|
+
ref.current = node;
|
|
19055
|
+
}
|
|
19056
|
+
},
|
|
19057
|
+
className: textareaClasses,
|
|
19058
|
+
value: internalValue,
|
|
19059
|
+
onChange: handleChange,
|
|
19060
|
+
disabled,
|
|
19061
|
+
rows: minRows,
|
|
19062
|
+
maxLength,
|
|
19063
|
+
...props
|
|
19064
|
+
}
|
|
19065
|
+
),
|
|
19066
|
+
showClearIcon && /* @__PURE__ */ jsx(
|
|
19067
|
+
Button,
|
|
19068
|
+
{
|
|
19069
|
+
variant: "ghost",
|
|
19070
|
+
size: "small",
|
|
19071
|
+
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__clear`,
|
|
19072
|
+
onClick: handleClear,
|
|
19073
|
+
"aria-label": "Clear textarea",
|
|
19074
|
+
icon: /* @__PURE__ */ jsx(Icon, { type: LUMI_ICON_TYPES.CLOSE, size: "small" })
|
|
19075
|
+
}
|
|
19076
|
+
)
|
|
19077
|
+
]
|
|
19078
|
+
}
|
|
19079
|
+
),
|
|
19080
|
+
/* @__PURE__ */ jsxs(
|
|
19081
|
+
"div",
|
|
19082
|
+
{
|
|
19083
|
+
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__footer`,
|
|
19084
|
+
children: [
|
|
19085
|
+
error && /* @__PURE__ */ jsx(
|
|
19086
|
+
"span",
|
|
19087
|
+
{
|
|
19088
|
+
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__error`,
|
|
19089
|
+
children: error
|
|
19090
|
+
}
|
|
19091
|
+
),
|
|
19092
|
+
footer && /* @__PURE__ */ jsx(
|
|
19093
|
+
"div",
|
|
19094
|
+
{
|
|
19095
|
+
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__custom-footer`,
|
|
19096
|
+
children: footer
|
|
19097
|
+
}
|
|
19098
|
+
),
|
|
19099
|
+
showCount && /* @__PURE__ */ jsx(
|
|
19100
|
+
"span",
|
|
19101
|
+
{
|
|
19102
|
+
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__count`,
|
|
19103
|
+
children: maxLength ? `${characterCount}/${maxLength}` : characterCount
|
|
19104
|
+
}
|
|
19105
|
+
)
|
|
19106
|
+
]
|
|
19107
|
+
}
|
|
19108
|
+
)
|
|
19109
|
+
] });
|
|
19110
|
+
}
|
|
19111
|
+
);
|
|
19112
|
+
TextArea.displayName = "TextArea";
|
|
19113
|
+
|
|
19114
|
+
const CLASS$3 = `${COMPONENT_PREFIX$1}support-request-form`;
|
|
19115
|
+
const VACIO = { name: "", email: "", phone: "", subject: "", message: "" };
|
|
19116
|
+
function faltantes(v) {
|
|
19117
|
+
if (v.name.trim().length < 2) return "Escribe tu nombre.";
|
|
19118
|
+
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v.email.trim())) return "Escribe un correo v\xE1lido.";
|
|
19119
|
+
if (v.subject.trim().length < 3) return "Escribe de qu\xE9 se trata.";
|
|
19120
|
+
if (v.message.trim().length < 10) return "Cu\xE9ntanos un poco m\xE1s (al menos 10 caracteres).";
|
|
19121
|
+
return null;
|
|
19122
|
+
}
|
|
19123
|
+
const SupportRequestForm = ({
|
|
19124
|
+
title = "D\xE9janos tu solicitud",
|
|
19125
|
+
intro,
|
|
19126
|
+
note = "Te respondemos al correo que dejes.",
|
|
19127
|
+
initial,
|
|
19128
|
+
onSubmit,
|
|
19129
|
+
sent = false,
|
|
19130
|
+
sentLabel = "Solicitud enviada",
|
|
19131
|
+
submitLabel = "Enviar",
|
|
19132
|
+
className
|
|
19133
|
+
}) => {
|
|
19134
|
+
const [values, setValues] = useState({ ...VACIO, ...initial });
|
|
19135
|
+
const [error, setError] = useState(null);
|
|
19136
|
+
const [enviando, setEnviando] = useState(false);
|
|
19137
|
+
const set = (campo) => (e) => setValues((v) => ({ ...v, [campo]: e.target.value }));
|
|
19138
|
+
const enviar = async (e) => {
|
|
19139
|
+
e.preventDefault();
|
|
19140
|
+
if (sent || enviando) return;
|
|
19141
|
+
const falta = faltantes(values);
|
|
19142
|
+
if (falta) {
|
|
19143
|
+
setError(falta);
|
|
19144
|
+
return;
|
|
19145
|
+
}
|
|
19146
|
+
setError(null);
|
|
19147
|
+
setEnviando(true);
|
|
19148
|
+
try {
|
|
19149
|
+
await onSubmit({ ...values, name: values.name.trim(), email: values.email.trim(), phone: values.phone.trim(), subject: values.subject.trim(), message: values.message.trim() });
|
|
19150
|
+
} catch (err) {
|
|
19151
|
+
setError(err instanceof Error && err.message ? err.message : "No se pudo enviar. Int\xE9ntalo de nuevo.");
|
|
19152
|
+
} finally {
|
|
19153
|
+
setEnviando(false);
|
|
19154
|
+
}
|
|
19155
|
+
};
|
|
19156
|
+
return /* @__PURE__ */ jsxs(
|
|
19157
|
+
"form",
|
|
19158
|
+
{
|
|
19159
|
+
className: [CLASS$3, sent ? `${CLASS$3}--sent` : "", className].filter(Boolean).join(" "),
|
|
19160
|
+
onSubmit: enviar,
|
|
19161
|
+
noValidate: true,
|
|
19162
|
+
children: [
|
|
19163
|
+
/* @__PURE__ */ jsx("h4", { className: `${CLASS$3}__title`, children: title }),
|
|
19164
|
+
intro && /* @__PURE__ */ jsx("p", { className: `${CLASS$3}__intro`, children: intro }),
|
|
19165
|
+
/* @__PURE__ */ jsxs("div", { className: `${CLASS$3}__fields`, children: [
|
|
19166
|
+
/* @__PURE__ */ jsxs("div", { className: `${CLASS$3}__row`, children: [
|
|
19167
|
+
/* @__PURE__ */ jsx(Input$1, { label: "Nombre", value: values.name, onChange: set("name"), fullWidth: true, disabled: sent, autoComplete: "name" }),
|
|
19168
|
+
/* @__PURE__ */ jsx(Input$1, { label: "Tel\xE9fono (opcional)", value: values.phone, onChange: set("phone"), fullWidth: true, disabled: sent, inputMode: "tel", autoComplete: "tel" })
|
|
19169
|
+
] }),
|
|
19170
|
+
/* @__PURE__ */ jsx(Input$1, { label: "Correo", type: "email", value: values.email, onChange: set("email"), fullWidth: true, disabled: sent, inputMode: "email", autoComplete: "email" }),
|
|
19171
|
+
/* @__PURE__ */ jsx(Input$1, { label: "Asunto", value: values.subject, onChange: set("subject"), fullWidth: true, disabled: sent }),
|
|
19172
|
+
/* @__PURE__ */ jsx(TextArea, { label: "Mensaje", value: values.message, onChange: set("message"), fullWidth: true, disabled: sent, minRows: 3, maxLength: 4e3, showCount: true })
|
|
19173
|
+
] }),
|
|
19174
|
+
error && /* @__PURE__ */ jsx("p", { className: `${CLASS$3}__error`, role: "alert", children: error }),
|
|
19175
|
+
sent ? /* @__PURE__ */ jsxs("p", { className: `${CLASS$3}__done`, role: "status", children: [
|
|
19176
|
+
/* @__PURE__ */ jsx(Icon$1, { type: ICON_TYPES.CHECK, size: "small" }),
|
|
19177
|
+
/* @__PURE__ */ jsx("span", { children: sentLabel })
|
|
19178
|
+
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19179
|
+
/* @__PURE__ */ jsx("div", { className: `${CLASS$3}__actions`, children: /* @__PURE__ */ jsx(Button, { type: "submit", variant: "primary", isLoading: enviando, disabled: enviando, children: submitLabel }) }),
|
|
19180
|
+
note && /* @__PURE__ */ jsx("p", { className: `${CLASS$3}__note`, children: note })
|
|
19181
|
+
] })
|
|
19182
|
+
]
|
|
19183
|
+
}
|
|
19184
|
+
);
|
|
19185
|
+
};
|
|
19186
|
+
|
|
18946
19187
|
const FADE_AFTER_MS = 4e3;
|
|
18947
19188
|
const NewMessageDivider = ({
|
|
18948
19189
|
label = "Nuevo mensaje",
|
|
@@ -20889,174 +21130,6 @@ const Loader = React.forwardRef(
|
|
|
20889
21130
|
);
|
|
20890
21131
|
Loader.displayName = "LumiLoader";
|
|
20891
21132
|
|
|
20892
|
-
const TextArea = forwardRef(
|
|
20893
|
-
({
|
|
20894
|
-
label,
|
|
20895
|
-
error,
|
|
20896
|
-
status,
|
|
20897
|
-
variant = "outlined",
|
|
20898
|
-
fullWidth = false,
|
|
20899
|
-
size = "middle",
|
|
20900
|
-
allowClear = false,
|
|
20901
|
-
onClear,
|
|
20902
|
-
minRows = 3,
|
|
20903
|
-
maxRows,
|
|
20904
|
-
resize = "vertical",
|
|
20905
|
-
showCount = false,
|
|
20906
|
-
maxLength,
|
|
20907
|
-
footer,
|
|
20908
|
-
className = "",
|
|
20909
|
-
value,
|
|
20910
|
-
onChange,
|
|
20911
|
-
disabled,
|
|
20912
|
-
...props
|
|
20913
|
-
}, ref) => {
|
|
20914
|
-
const [internalValue, setInternalValue] = useState("");
|
|
20915
|
-
const textareaRef = useRef(null);
|
|
20916
|
-
useEffect(() => {
|
|
20917
|
-
if (value !== void 0) {
|
|
20918
|
-
setInternalValue(String(value));
|
|
20919
|
-
}
|
|
20920
|
-
}, [value]);
|
|
20921
|
-
const adjustHeight = useCallback(() => {
|
|
20922
|
-
const textarea = textareaRef.current;
|
|
20923
|
-
if (!textarea || resize === "none") return;
|
|
20924
|
-
textarea.style.height = "auto";
|
|
20925
|
-
const lineHeight = parseInt(getComputedStyle(textarea).lineHeight) || 20;
|
|
20926
|
-
const paddingY = 16;
|
|
20927
|
-
const minHeight = minRows * lineHeight + paddingY;
|
|
20928
|
-
const maxHeight = maxRows ? maxRows * lineHeight + paddingY : Infinity;
|
|
20929
|
-
const newHeight = Math.min(
|
|
20930
|
-
Math.max(textarea.scrollHeight, minHeight),
|
|
20931
|
-
maxHeight
|
|
20932
|
-
);
|
|
20933
|
-
textarea.style.height = `${newHeight}px`;
|
|
20934
|
-
}, [minRows, maxRows, resize]);
|
|
20935
|
-
useEffect(() => {
|
|
20936
|
-
if (resize !== "none") {
|
|
20937
|
-
adjustHeight();
|
|
20938
|
-
}
|
|
20939
|
-
}, [internalValue, adjustHeight, resize]);
|
|
20940
|
-
const handleChange = useCallback(
|
|
20941
|
-
(e) => {
|
|
20942
|
-
const newValue = e.target.value;
|
|
20943
|
-
if (maxLength && newValue.length > maxLength) {
|
|
20944
|
-
return;
|
|
20945
|
-
}
|
|
20946
|
-
setInternalValue(newValue);
|
|
20947
|
-
onChange?.(e);
|
|
20948
|
-
},
|
|
20949
|
-
[onChange, maxLength]
|
|
20950
|
-
);
|
|
20951
|
-
const handleClear = useCallback(() => {
|
|
20952
|
-
setInternalValue("");
|
|
20953
|
-
onClear?.();
|
|
20954
|
-
if (onChange && textareaRef.current) {
|
|
20955
|
-
const syntheticEvent = {
|
|
20956
|
-
target: { value: "" },
|
|
20957
|
-
currentTarget: { value: "" }
|
|
20958
|
-
};
|
|
20959
|
-
onChange(syntheticEvent);
|
|
20960
|
-
}
|
|
20961
|
-
textareaRef.current?.focus();
|
|
20962
|
-
}, [onChange, onClear]);
|
|
20963
|
-
const showClearIcon = Boolean(allowClear && internalValue && !disabled);
|
|
20964
|
-
const characterCount = internalValue.length;
|
|
20965
|
-
const wrapperClasses = [
|
|
20966
|
-
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper`,
|
|
20967
|
-
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--${variant}`,
|
|
20968
|
-
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--${size}`,
|
|
20969
|
-
error && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--error`,
|
|
20970
|
-
status && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--${status}`,
|
|
20971
|
-
fullWidth && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--full-width`
|
|
20972
|
-
].filter(Boolean).join(" ");
|
|
20973
|
-
const textareaClasses = [
|
|
20974
|
-
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}`,
|
|
20975
|
-
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}--resize-${resize}`,
|
|
20976
|
-
showClearIcon && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}--with-clear`,
|
|
20977
|
-
className
|
|
20978
|
-
].filter(Boolean).join(" ");
|
|
20979
|
-
return /* @__PURE__ */ jsxs("div", { className: wrapperClasses, children: [
|
|
20980
|
-
label && /* @__PURE__ */ jsx(
|
|
20981
|
-
"label",
|
|
20982
|
-
{
|
|
20983
|
-
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__label`,
|
|
20984
|
-
children: label
|
|
20985
|
-
}
|
|
20986
|
-
),
|
|
20987
|
-
/* @__PURE__ */ jsxs(
|
|
20988
|
-
"div",
|
|
20989
|
-
{
|
|
20990
|
-
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__container`,
|
|
20991
|
-
children: [
|
|
20992
|
-
/* @__PURE__ */ jsx(
|
|
20993
|
-
"textarea",
|
|
20994
|
-
{
|
|
20995
|
-
ref: (node) => {
|
|
20996
|
-
textareaRef.current = node;
|
|
20997
|
-
if (typeof ref === "function") {
|
|
20998
|
-
ref(node);
|
|
20999
|
-
} else if (ref) {
|
|
21000
|
-
ref.current = node;
|
|
21001
|
-
}
|
|
21002
|
-
},
|
|
21003
|
-
className: textareaClasses,
|
|
21004
|
-
value: internalValue,
|
|
21005
|
-
onChange: handleChange,
|
|
21006
|
-
disabled,
|
|
21007
|
-
rows: minRows,
|
|
21008
|
-
maxLength,
|
|
21009
|
-
...props
|
|
21010
|
-
}
|
|
21011
|
-
),
|
|
21012
|
-
showClearIcon && /* @__PURE__ */ jsx(
|
|
21013
|
-
Button,
|
|
21014
|
-
{
|
|
21015
|
-
variant: "ghost",
|
|
21016
|
-
size: "small",
|
|
21017
|
-
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__clear`,
|
|
21018
|
-
onClick: handleClear,
|
|
21019
|
-
"aria-label": "Clear textarea",
|
|
21020
|
-
icon: /* @__PURE__ */ jsx(Icon, { type: LUMI_ICON_TYPES.CLOSE, size: "small" })
|
|
21021
|
-
}
|
|
21022
|
-
)
|
|
21023
|
-
]
|
|
21024
|
-
}
|
|
21025
|
-
),
|
|
21026
|
-
/* @__PURE__ */ jsxs(
|
|
21027
|
-
"div",
|
|
21028
|
-
{
|
|
21029
|
-
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__footer`,
|
|
21030
|
-
children: [
|
|
21031
|
-
error && /* @__PURE__ */ jsx(
|
|
21032
|
-
"span",
|
|
21033
|
-
{
|
|
21034
|
-
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__error`,
|
|
21035
|
-
children: error
|
|
21036
|
-
}
|
|
21037
|
-
),
|
|
21038
|
-
footer && /* @__PURE__ */ jsx(
|
|
21039
|
-
"div",
|
|
21040
|
-
{
|
|
21041
|
-
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__custom-footer`,
|
|
21042
|
-
children: footer
|
|
21043
|
-
}
|
|
21044
|
-
),
|
|
21045
|
-
showCount && /* @__PURE__ */ jsx(
|
|
21046
|
-
"span",
|
|
21047
|
-
{
|
|
21048
|
-
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__count`,
|
|
21049
|
-
children: maxLength ? `${characterCount}/${maxLength}` : characterCount
|
|
21050
|
-
}
|
|
21051
|
-
)
|
|
21052
|
-
]
|
|
21053
|
-
}
|
|
21054
|
-
)
|
|
21055
|
-
] });
|
|
21056
|
-
}
|
|
21057
|
-
);
|
|
21058
|
-
TextArea.displayName = "TextArea";
|
|
21059
|
-
|
|
21060
21133
|
const MenuContext = createContext(void 0);
|
|
21061
21134
|
const MenuProvider = MenuContext.Provider;
|
|
21062
21135
|
const useMenuContext = () => {
|
|
@@ -25296,4 +25369,4 @@ function buildBreadcrumbPath(items, targetKey, currentPath = []) {
|
|
|
25296
25369
|
return [];
|
|
25297
25370
|
}
|
|
25298
25371
|
|
|
25299
|
-
export { ActionFormDrawer, BottomSheet, CHAT_CONFIG_DEFAULTS, CHAT_EVENT, ICON_TYPES as CHAT_ICON_TYPES, CarouselDisplay, Chat, AssistantMessage as ChatAssistantMessage, AssistantThinkingIndicator as ChatAssistantThinkingIndicator, AttachmentPreview as ChatAttachmentPreview, Avatar as ChatAvatar, Button$1 as ChatButton, ChatConfigProvider, DateDivider as ChatDateDivider, FileViewer as ChatFileViewer, ChatFloatingActions, FullscreenViewer as ChatFullscreenViewer, ChatHeader as ChatHeaderComponent, Icon$1 as ChatIcon, Input$2 as ChatInput, ChatInput as ChatInputComponent, Link as ChatLink, Loader$1 as ChatLoader, Logo as ChatLogo, MessageStatus as ChatMessageStatus, Modal as ChatModal, ChatNavigator, Select$2 as ChatSelect, SelectMenu as ChatSelectMenu, StructuredContent as ChatStructuredContent, Text as ChatText, Textarea as ChatTextarea, UserAttachments as ChatUserAttachments, UserMessage as ChatUserMessage, ChatWidget, CredentialsCard, FileField, BADGE_VARIANTS as LUMI_BADGE_VARIANTS, DEFAULT_TITLES as LUMI_DEFAULT_TITLES, LUMI_ICON_TYPES, LiveIndicator, LocationField, ActionBar as LumiActionBar, Badge as LumiBadge, Base as LumiBase, BaseNavbar as LumiBaseNavbar, BaseWorkspace as LumiBaseWorkspace, Breadcrumb as LumiBreadcrumb, BreadcrumbItem as LumiBreadcrumbItem, BreadcrumbSeparator as LumiBreadcrumbSeparator, Button as LumiButton, Calendar as LumiCalendar, Card as LumiCard, Checkbox$1 as LumiCheckbox, Crud as LumiCrud, CurrencyDisplay as LumiCurrencyDisplay, Dashboard as LumiDashboard, DashboardNavbar as LumiDashboardNavbar, DashboardSidebar as LumiDashboardSidebar, DashboardWorkspace as LumiDashboardWorkspace, DateDisplay as LumiDateDisplay, DateInput$1 as LumiDateInput, Drawer as LumiDrawer, DropdownMenu as LumiDropdownMenu, DynamicForm as LumiDynamicForm, FieldValue as LumiFieldValue, Filter as LumiFilter, FilterRow as LumiFilterRow, Checkbox as LumiFormCheckbox, DateInput as LumiFormDateInput, FormDrawer as LumiFormDrawer, Input as LumiFormInput, Select as LumiFormSelect, TimeInput as LumiFormTimeInput, Icon as LumiIcon, Input$1 as LumiInput, Loader as LumiLoader, Menu as LumiMenu, MenuItem as LumiMenuItem, MenuItemGroup as LumiMenuItemGroup, Notification as LumiNotification, Pagination as LumiPagination, Popover as LumiPopover, QRCode as LumiQRCode, RecordCard as LumiRecordCard, Select$1 as LumiSelect, StepIndicator as LumiStepIndicator, Stepper as LumiStepper, SubMenu as LumiSubMenu, Table as LumiTable, Tabs as LumiTabs, TextArea as LumiTextArea, TimeInput$1 as LumiTimeInput, Tooltip as LumiTooltip, MapView, PhotoPicker, ReactiveCrud, ServiceShortcuts, ServicesMap, SessionExpiryPrompt, UserTools, chatEventBus, clearChatComponents, createDeepPropertySubscriber, createEventBus, createStore, createStoreMerger, deepMerge, disabledReasonFor, fetchViaEventBus, getLastFleetSnapshot, matchesDisabledWhen, matchesDoneWhen, matchesVisibleWhen, registerChatComponents, setLastFleetSnapshot, useChatConfig, useReactiveCrud };
|
|
25372
|
+
export { ActionFormDrawer, BottomSheet, CHAT_CONFIG_DEFAULTS, CHAT_EVENT, ICON_TYPES as CHAT_ICON_TYPES, CarouselDisplay, Chat, AssistantMessage as ChatAssistantMessage, AssistantThinkingIndicator as ChatAssistantThinkingIndicator, AttachmentPreview as ChatAttachmentPreview, Avatar as ChatAvatar, Button$1 as ChatButton, ChatConfigProvider, DateDivider as ChatDateDivider, FileViewer as ChatFileViewer, ChatFloatingActions, FullscreenViewer as ChatFullscreenViewer, ChatHeader as ChatHeaderComponent, Icon$1 as ChatIcon, Input$2 as ChatInput, ChatInput as ChatInputComponent, Link as ChatLink, Loader$1 as ChatLoader, Logo as ChatLogo, MessageStatus as ChatMessageStatus, Modal as ChatModal, ChatNavigator, Select$2 as ChatSelect, SelectMenu as ChatSelectMenu, StructuredContent as ChatStructuredContent, Text as ChatText, Textarea as ChatTextarea, UserAttachments as ChatUserAttachments, UserMessage as ChatUserMessage, ChatWidget, CredentialsCard, FileField, BADGE_VARIANTS as LUMI_BADGE_VARIANTS, DEFAULT_TITLES as LUMI_DEFAULT_TITLES, LUMI_ICON_TYPES, LiveIndicator, LocationField, ActionBar as LumiActionBar, Badge as LumiBadge, Base as LumiBase, BaseNavbar as LumiBaseNavbar, BaseWorkspace as LumiBaseWorkspace, Breadcrumb as LumiBreadcrumb, BreadcrumbItem as LumiBreadcrumbItem, BreadcrumbSeparator as LumiBreadcrumbSeparator, Button as LumiButton, Calendar as LumiCalendar, Card as LumiCard, Checkbox$1 as LumiCheckbox, Crud as LumiCrud, CurrencyDisplay as LumiCurrencyDisplay, Dashboard as LumiDashboard, DashboardNavbar as LumiDashboardNavbar, DashboardSidebar as LumiDashboardSidebar, DashboardWorkspace as LumiDashboardWorkspace, DateDisplay as LumiDateDisplay, DateInput$1 as LumiDateInput, Drawer as LumiDrawer, DropdownMenu as LumiDropdownMenu, DynamicForm as LumiDynamicForm, FieldValue as LumiFieldValue, Filter as LumiFilter, FilterRow as LumiFilterRow, Checkbox as LumiFormCheckbox, DateInput as LumiFormDateInput, FormDrawer as LumiFormDrawer, Input as LumiFormInput, Select as LumiFormSelect, TimeInput as LumiFormTimeInput, Icon as LumiIcon, Input$1 as LumiInput, Loader as LumiLoader, Menu as LumiMenu, MenuItem as LumiMenuItem, MenuItemGroup as LumiMenuItemGroup, Notification as LumiNotification, Pagination as LumiPagination, Popover as LumiPopover, QRCode as LumiQRCode, RecordCard as LumiRecordCard, Select$1 as LumiSelect, StepIndicator as LumiStepIndicator, Stepper as LumiStepper, SubMenu as LumiSubMenu, Table as LumiTable, Tabs as LumiTabs, TextArea as LumiTextArea, TimeInput$1 as LumiTimeInput, Tooltip as LumiTooltip, MapView, PhotoPicker, ReactiveCrud, ServiceShortcuts, ServicesMap, SessionExpiryPrompt, SupportRequestForm, UserTools, chatEventBus, clearChatComponents, createDeepPropertySubscriber, createEventBus, createStore, createStoreMerger, deepMerge, disabledReasonFor, fetchViaEventBus, getLastFleetSnapshot, matchesDisabledWhen, matchesDoneWhen, matchesVisibleWhen, registerChatComponents, setLastFleetSnapshot, useChatConfig, useReactiveCrud };
|