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/index.esm.js CHANGED
@@ -13185,19 +13185,19 @@ function mapFieldsToFormFields(fields, mode) {
13185
13185
  }));
13186
13186
  }
13187
13187
 
13188
- const CLASS$g = `${COMPONENT_PREFIX}field-value`;
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$g, `${CLASS$g}--${layout}`, className].filter(Boolean).join(" "), children: [
13195
- /* @__PURE__ */ jsx("span", { className: `${CLASS$g}__label`, children: label }),
13196
- /* @__PURE__ */ jsx("span", { className: `${CLASS$g}__value`, children })
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$f = `${COMPONENT_PREFIX}record-card`;
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$f, open ? `${CLASS$f}--open` : "", className].filter(Boolean).join(" "), children: [
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$f}__header`,
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$f}__heading`, children: [
13224
- /* @__PURE__ */ jsx("span", { className: `${CLASS$f}__title`, children: title }),
13225
- summary && /* @__PURE__ */ jsx("span", { className: `${CLASS$f}__summary`, children: summary })
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$f}__chevron`,
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$f}__body`, id: cuerpoId, children: [
13240
+ open && /* @__PURE__ */ jsxs("div", { className: `${CLASS$g}__body`, id: cuerpoId, children: [
13241
13241
  children,
13242
- actions && /* @__PURE__ */ jsx("div", { className: `${CLASS$f}__actions`, children: actions })
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$e = `${COMPONENT_PREFIX}crud-cards`;
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$e}__estado`, children: "Cargando..." });
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$e}__estado`, children: emptyText });
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$e, children: rows.map((row) => {
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$e}__accion`,
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$e}__motivo`, children: o.disabledReason })
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$d = `${COMPONENT_PREFIX}crud-scroll-end`;
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$d, onClick: alFinal, "aria-label": label, title: label, children: /* @__PURE__ */ jsx(Icon, { type: "chevron-down", width: 18, height: 18, "aria-hidden": true }) });
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$c = "px-chat-reactive-crud__chat-link";
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$c, "aria-label": texto, title: texto, onClick: () => abrir(t.id), children: /* @__PURE__ */ jsx(Burbuja, {}) });
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$c,
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$b = `${COMPONENT_PREFIX$1}file-field`;
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$b}${error ? ` ${CLASS$b}--error` : ""}`, children: [
14431
- /* @__PURE__ */ jsxs("span", { className: `${CLASS$b}__label`, children: [
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$b}__box`, children: [
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$b}__native`,
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$b}__pick`, onClick: elegir, disabled, children: [
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$b}__pick-text`, children: entries.length === 0 ? multiple ? "Toca para elegir archivos" : "Toca para elegir un archivo" : multiple ? "A\xF1adir m\xE1s" : "Cambiar archivo" })
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$b}__list`, children: entries.map((e, i) => /* @__PURE__ */ jsxs("li", { className: `${CLASS$b}__item ${CLASS$b}__item--${e.status}`, children: [
14457
- /* @__PURE__ */ jsx("span", { className: `${CLASS$b}__kind`, "aria-hidden": "true", children: /* @__PURE__ */ jsx(Icon$1, { type: iconoPorNombre(e.name), size: "small" }) }),
14458
- /* @__PURE__ */ jsx("span", { className: `${CLASS$b}__name`, children: e.name }),
14459
- /* @__PURE__ */ jsxs("span", { className: `${CLASS$b}__state`, children: [
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$b}__remove`,
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$b}__error`, children: error }),
14478
- !error && subiendo && /* @__PURE__ */ jsx("p", { className: `${CLASS$b}__hint`, children: "Espera a que terminen de subir." })
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$a = `${COMPONENT_PREFIX$1}map-view`;
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$a, fullBleed && `${CLASS$a}--full-bleed`, className].filter(Boolean).join(" ");
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$a}__state ${CLASS$a}__state--error`, children: labels?.quotaText ?? "Se alcanz\xF3 el l\xEDmite diario de uso del mapa. Intenta ma\xF1ana." }) });
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$a}__state ${CLASS$a}__state--error`, children: labels?.errorText ?? "No se pudo cargar el mapa." }) });
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$a}__state`, children: labels?.loadingText ?? "Cargando mapa\u2026" }),
15944
- /* @__PURE__ */ jsx("div", { ref: nodeRef, className: `${CLASS$a}__canvas`, "aria-label": "Mapa", role: "application" }),
15945
- status === "ready" && list.length === 0 && allRoutes.length === 0 && /* @__PURE__ */ jsx("p", { className: `${CLASS$a}__empty`, children: labels?.emptyText ?? "Sin ubicaciones para mostrar" }),
15946
- status === "ready" && onPointMove && list.length > 0 && /* @__PURE__ */ jsx("p", { className: `${CLASS$a}__empty`, children: labels?.moveHint ?? "Arrastra el pin o toca el mapa para ajustar" }),
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$a}__expand`,
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$a}-fs`, role: "dialog", "aria-modal": "true", "aria-label": "Mapa", children: [
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$a}-fs__close`,
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$9 = `${COMPONENT_PREFIX$1}location-field`;
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$9}${error ? ` ${CLASS$9}--error` : ""}`, ref: boxRef, children: [
16163
- label && /* @__PURE__ */ jsxs("span", { className: `${CLASS$9}__label`, children: [
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$9}__row`, children: [
16167
+ /* @__PURE__ */ jsxs("div", { className: `${CLASS$a}__row`, children: [
16168
16168
  /* @__PURE__ */ jsx(
16169
16169
  "input",
16170
16170
  {
16171
- className: `${CLASS$9}__input`,
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$9}__gps`,
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$9}__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$9}__error`, children: error }),
16201
- gps === "denied" && /* @__PURE__ */ jsx("p", { className: `${CLASS$9}__hint ${CLASS$9}__hint--warn`, children: labels?.permissionDenied ?? "No diste permiso de ubicaci\xF3n. Puedes escribir la direcci\xF3n." }),
16202
- gps === "unavailable" && /* @__PURE__ */ jsx("p", { className: `${CLASS$9}__hint ${CLASS$9}__hint--warn`, children: labels?.unavailable ?? "No pudimos obtener tu ubicaci\xF3n. Puedes escribir la direcci\xF3n." }),
16203
- hasPoint && /* @__PURE__ */ jsxs("div", { className: `${CLASS$9}__confirm`, children: [
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$9}__hint`, children: labels?.confirmHint ?? "Verifica que el punto sea correcto." })
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$8 = `${COMPONENT_PREFIX$1}services-map`;
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$8} ${CLASS$8}--fill` : CLASS$8, children: rows === null ? /* @__PURE__ */ jsx("p", { className: `${CLASS$8}__state`, children: labels.loadingText ?? "Cargando ubicaciones\u2026" }) : nadaQueDibujar ? /* @__PURE__ */ jsx("p", { className: `${CLASS$8}__state`, children: lineaSinMapa(labels, missing, failed) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
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$8}__notes`, children: [
16977
- livePoints.length > 0 && /* @__PURE__ */ jsxs("p", { className: `${CLASS$8}__note ${CLASS$8}__note--live`, children: [
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$8}__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$8}__note`, children: (labels.outsideText ?? "{n} fuera de la zona (aleja el mapa para verlos)").replace(
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$8}__note`, children: "No se pudieron cargar las ubicaciones." })
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$7 = `${COMPONENT_PREFIX$1}service-shortcuts`;
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$7, elegido ? `${CLASS$7}--used` : ""].filter(Boolean).join(" "), children: options.map((o) => {
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$7}__item`,
17067
- elegido ? `${CLASS$7}__item--off` : "",
17068
- esElegido ? `${CLASS$7}__item--chosen` : ""
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$7}__icon`, children: ICONS[o.icon] }),
17081
- /* @__PURE__ */ jsxs("span", { className: `${CLASS$7}__text`, children: [
17082
- /* @__PURE__ */ jsx("span", { className: `${CLASS$7}__label`, children: o.label }),
17083
- o.hint && /* @__PURE__ */ jsx("span", { className: `${CLASS$7}__hint`, children: o.hint })
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$7}__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" }) }) })
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$6 = `${COMPONENT_PREFIX$1}user-tools`;
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$6, className].filter(Boolean).join(" "), children: [
17658
- title && /* @__PURE__ */ jsx("h2", { className: `${CLASS$6}__title`, children: title }),
17659
- description && /* @__PURE__ */ jsx("p", { className: `${CLASS$6}__description`, children: description }),
17660
- /* @__PURE__ */ jsx("ul", { className: `${CLASS$6}__list`, children: items.map((item) => /* @__PURE__ */ jsx("li", { className: `${CLASS$6}__item`, children: item.kind === "action" ? (
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$6}__action`, children: [
17664
- /* @__PURE__ */ jsxs("span", { className: `${CLASS$6}__text`, children: [
17665
- /* @__PURE__ */ jsx("span", { className: `${CLASS$6}__label`, children: item.label }),
17666
- item.hint && /* @__PURE__ */ jsx("span", { className: `${CLASS$6}__hint`, children: item.hint })
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$6}__text`, children: [
17686
- /* @__PURE__ */ jsx("span", { className: `${CLASS$6}__label`, children: item.label }),
17687
- item.hint && /* @__PURE__ */ jsx("span", { className: `${CLASS$6}__hint`, children: item.hint })
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$6}__empty`, children: "No hay herramientas disponibles por ahora." })
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$5 = `${COMPONENT_PREFIX$1}floating-actions`;
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$5}__group ${CLASS$5}__group--${align}`, children: buttons.map((b) => {
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$5}__slot`, children: [
18316
+ return /* @__PURE__ */ jsxs("div", { className: `${CLASS$6}__slot`, children: [
18317
18317
  b.custom,
18318
- b.panel && b.open && /* @__PURE__ */ jsx("div", { className: `${CLASS$5}__panel ${CLASS$5}__panel--${align}`, children: b.panel })
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$5}__slot`, children: [
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$5}__button`, b.active ? `${CLASS$5}__button--active` : ""].filter(Boolean).join(" "),
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$5}__badge`, children: b.badge })
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$5}__panel ${CLASS$5}__panel--${align}`, children: b.panel })
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$5, glass ? `${CLASS$5}--glass` : ""].filter(Boolean).join(" ");
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$4 = `${COMPONENT_PREFIX$1}photo-picker`;
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$4}${error ? ` ${CLASS$4}--error` : ""}`, children: [
18802
- /* @__PURE__ */ jsxs("span", { className: `${CLASS$4}__label`, children: [
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$4}__native`,
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$4}__native`,
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$4}__grid`, children: entries.map((e, i) => /* @__PURE__ */ jsxs("li", { className: `${CLASS$4}__thumb ${CLASS$4}__thumb--${e.status}`, children: [
18834
- e.previewUrl ? /* @__PURE__ */ jsx("img", { className: `${CLASS$4}__img`, src: e.previewUrl, alt: e.name }) : /* @__PURE__ */ jsx("span", { className: `${CLASS$4}__placeholder`, "aria-hidden": "true", children: /* @__PURE__ */ jsx(Icon$1, { type: ICON_TYPES.IMAGE }) }),
18835
- e.status === "uploading" && /* @__PURE__ */ jsx("span", { className: `${CLASS$4}__state`, children: "Subiendo\u2026" }),
18836
- e.status === "error" && /* @__PURE__ */ jsx("span", { className: `${CLASS$4}__state ${CLASS$4}__state--error`, children: "No se pudo subir" }),
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$4}__remove`,
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$4}__actions`, children: [
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$4}__pick`,
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$4}__pick ${CLASS$4}__pick--secondary`,
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$4}__error`, children: error }),
18878
- !error && subiendo && /* @__PURE__ */ jsx("p", { className: `${CLASS$4}__hint`, children: "Espera a que terminen de subir." }),
18879
- !error && !subiendo && hint && /* @__PURE__ */ jsx("p", { className: `${CLASS$4}__hint`, children: hint })
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$3 = `${COMPONENT_PREFIX$1}credentials-card`;
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$3}__row`, children: [
18901
- /* @__PURE__ */ jsx("span", { className: `${CLASS$3}__label`, children: row.label }),
18902
- /* @__PURE__ */ jsx("span", { className: `${CLASS$3}__value`, "data-testid": `credential-${row.label}`, children: visible ? row.value : "\u2022".repeat(Math.min(row.value.length, 12)) }),
18903
- /* @__PURE__ */ jsxs("span", { className: `${CLASS$3}__tools`, children: [
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$3}__tool`,
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$3}__tool`,
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$3, className].filter(Boolean).join(" "), "aria-label": title, children: [
18938
- /* @__PURE__ */ jsx("h3", { className: `${CLASS$3}__title`, children: title }),
18939
- intro && /* @__PURE__ */ jsx("p", { className: `${CLASS$3}__intro`, children: intro }),
18940
- /* @__PURE__ */ jsx("ul", { className: `${CLASS$3}__rows`, children: rows.map((r) => /* @__PURE__ */ jsx(Fila, { row: r }, r.label)) }),
18941
- note && /* @__PURE__ */ jsx("p", { className: `${CLASS$3}__note`, children: note }),
18942
- action && /* @__PURE__ */ jsx("div", { className: `${CLASS$3}__action`, children: /* @__PURE__ */ jsx(Button, { fullWidth: true, onClick: action.onClick, disabled: action.disabled, children: action.label }) })
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 };