pixelon 0.9.0 → 0.9.3
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/ReactiveCrud/types.d.ts +2 -0
- 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 +384 -302
- package/dist/index.js +384 -301
- 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/components/atoms/chat/AudioWaves/AudioWaves(1).d.ts +0 -21
- package/dist/components/atoms/chat/AudioWaves/index(1).d.ts +0 -2
- package/dist/components/atoms/chat/DateDivider/DateDivider(1).d.ts +0 -7
- package/dist/components/atoms/chat/Loader/Loader(1).d.ts +0 -10
- package/dist/components/atoms/chat/Loader/index(1).d.ts +0 -2
- package/dist/components/atoms/chat/Select/index(1).d.ts +0 -2
- package/dist/components/atoms/lumi/Button/Button(1).d.ts +0 -17
- package/dist/components/atoms/lumi/Checkbox/Checkbox(1).d.ts +0 -5
- package/dist/components/atoms/lumi/Checkbox/index(1).d.ts +0 -2
- package/dist/components/atoms/lumi/Checkbox/index(2).d.ts +0 -2
- package/dist/components/atoms/lumi/Checkbox/types(1).d.ts +0 -93
- package/dist/components/atoms/lumi/CurrencyDisplay/index(1).d.ts +0 -2
- package/dist/components/atoms/lumi/DateDisplay/index(1).d.ts +0 -2
- package/dist/components/atoms/lumi/DateDisplay/index(2).d.ts +0 -2
- package/dist/components/atoms/lumi/DateInput/DateInput(1).d.ts +0 -27
- package/dist/components/atoms/lumi/DateInput/WebDatePicker(1).d.ts +0 -19
- package/dist/components/atoms/lumi/DateInput/WebDatePicker(2).d.ts +0 -19
- package/dist/components/atoms/lumi/Icon/Icon(1).d.ts +0 -52
- package/dist/components/atoms/lumi/Input/index(1).d.ts +0 -3
- package/dist/components/atoms/lumi/Popover/index(1).d.ts +0 -2
- package/dist/components/atoms/lumi/Popover/types(1).d.ts +0 -62
- package/dist/components/atoms/lumi/TextArea/index(1).d.ts +0 -2
- package/dist/components/atoms/lumi/TextArea/types(1).d.ts +0 -35
- package/dist/components/atoms/lumi/TimeInput/TimeInput(1).d.ts +0 -27
- package/dist/components/atoms/lumi/TimeInput/TimeInput(2).d.ts +0 -27
- package/dist/components/molecules/chat/FullscreenViewer/hooks/useSwipeGestures(1).d.ts +0 -12
- package/dist/components/molecules/chat/StructuredContent/StructuredContent(1).d.ts +0 -10
- package/dist/components/molecules/chat/StructuredContent/components/Cart/Cart.d.ts +0 -3
- package/dist/components/molecules/chat/StructuredContent/components/ProductCard/ProductCard.d.ts +0 -3
- package/dist/components/molecules/chat/StructuredContent/components/ProductCarousel/ProductCarousel.d.ts +0 -3
- package/dist/components/molecules/chat/StructuredContent/components/ProductManager/ProductManager.d.ts +0 -3
- package/dist/components/molecules/chat/StructuredContent/components/ReactiveCrud/PriceNegotiationChat.d.ts +0 -4
- package/dist/components/molecules/chat/StructuredContent/components/ReactiveForm/DynamicField(1).d.ts +0 -13
- package/dist/components/molecules/chat/StructuredContent/components/ReactiveForm/buildYupSchema(1).d.ts +0 -4
- package/dist/components/molecules/chat/StructuredContent/components/ReactiveForm/types(1).d.ts +0 -91
- package/dist/components/molecules/chat/StructuredContent/components/ReactiveForm/useReactiveEndpoints(1).d.ts +0 -17
- package/dist/components/molecules/chat/StructuredContent/components/ReactiveForm/useReactiveEndpoints(2).d.ts +0 -23
- package/dist/components/molecules/chat/StructuredContent/components/ReactiveForm/useReactiveForm(1).d.ts +0 -38
- package/dist/components/molecules/chat/StructuredContent/components/ReactiveMap/ReactiveMap.d.ts +0 -12
- package/dist/components/molecules/chat/StructuredContent/components/ReactiveMap/ReactiveMapChat.d.ts +0 -3
- package/dist/components/molecules/chat/StructuredContent/components/ReactiveMap/types.d.ts +0 -36
- package/dist/components/molecules/chat/StructuredContent/components/ServiceShortcuts/ServiceShortcutsChat.d.ts +0 -3
- package/dist/components/molecules/chat/StructuredContent/helpers/contentParser(1).d.ts +0 -7
- package/dist/components/molecules/chat/StructuredContent/index(1).d.ts +0 -2
- package/dist/components/molecules/lumi/Breadcrumb/Breadcrumb(1).d.ts +0 -10
- package/dist/components/molecules/lumi/Breadcrumb/Breadcrumb(2).d.ts +0 -10
- package/dist/components/molecules/lumi/Breadcrumb/types(1).d.ts +0 -105
- package/dist/components/molecules/lumi/Checkbox/Checkbox(1).d.ts +0 -11
- package/dist/components/molecules/lumi/Checkbox/index(1).d.ts +0 -4
- package/dist/components/molecules/lumi/Checkbox/use-cases/index(1).d.ts +0 -1
- package/dist/components/molecules/lumi/Checkbox/validation-helpers(1).d.ts +0 -151
- package/dist/components/molecules/lumi/DateInput/FormDateInput(1).d.ts +0 -12
- package/dist/components/molecules/lumi/DateInput/index(1).d.ts +0 -2
- package/dist/components/molecules/lumi/DateInput/use-cases/FormDateInputClearWithResetUseCase(1).d.ts +0 -21
- package/dist/components/molecules/lumi/DateInput/use-cases/FormDateInputErrorVisibilityUseCase(1).d.ts +0 -21
- package/dist/components/molecules/lumi/Drawer/Drawer(1).d.ts +0 -39
- package/dist/components/molecules/lumi/Drawer/index(1).d.ts +0 -2
- package/dist/components/molecules/lumi/DropdownMenu/DropdownMenu(1).d.ts +0 -22
- package/dist/components/molecules/lumi/DropdownMenu/index(1).d.ts +0 -2
- package/dist/components/molecules/lumi/DropdownMenu/types(1).d.ts +0 -29
- package/dist/components/molecules/lumi/Filter/FilterRow(1).d.ts +0 -13
- package/dist/components/molecules/lumi/Filter/helpers/conditionHelpers(1).d.ts +0 -14
- package/dist/components/molecules/lumi/Filter/index(1).d.ts +0 -5
- package/dist/components/molecules/lumi/Filter/types(1).d.ts +0 -115
- package/dist/components/molecules/lumi/Input/Input(1).d.ts +0 -12
- package/dist/components/molecules/lumi/Menu/Menu(1).d.ts +0 -18
- package/dist/components/molecules/lumi/Menu/MenuContext(1).d.ts +0 -41
- package/dist/components/molecules/lumi/Menu/MenuItem(1).d.ts +0 -6
- package/dist/components/molecules/lumi/Menu/MenuItem(2).d.ts +0 -6
- package/dist/components/molecules/lumi/Menu/MenuItemGroup(1).d.ts +0 -6
- package/dist/components/molecules/lumi/Menu/SubMenu(1).d.ts +0 -6
- package/dist/components/molecules/lumi/Menu/iconHelper(1).d.ts +0 -15
- package/dist/components/molecules/lumi/Menu/index(1).d.ts +0 -8
- package/dist/components/molecules/lumi/Menu/index(2).d.ts +0 -8
- package/dist/components/molecules/lumi/Menu/types(1).d.ts +0 -119
- package/dist/components/molecules/lumi/Pagination/Pagination(1).d.ts +0 -4
- package/dist/components/molecules/lumi/Pagination/index(1).d.ts +0 -2
- package/dist/components/molecules/lumi/Select/Select(1).d.ts +0 -14
- package/dist/components/molecules/lumi/Select/Select(2).d.ts +0 -14
- package/dist/components/molecules/lumi/Select/Select(3).d.ts +0 -14
- package/dist/components/molecules/lumi/Select/index(1).d.ts +0 -2
- package/dist/components/molecules/lumi/Select/index(2).d.ts +0 -2
- package/dist/components/molecules/lumi/Select/use-cases/FormSelectClearWithResetUseCase(1).d.ts +0 -21
- package/dist/components/molecules/lumi/Select/use-cases/FormSelectClearWithResetUseCase(2).d.ts +0 -21
- package/dist/components/molecules/lumi/Select/use-cases/index(1).d.ts +0 -2
- package/dist/components/molecules/lumi/Select/use-cases/index(2).d.ts +0 -2
- package/dist/components/molecules/lumi/SessionExpiryPrompt/SessionExpiryPrompt.d.ts +0 -25
- package/dist/components/molecules/lumi/SessionExpiryPrompt/index.d.ts +0 -1
- package/dist/components/molecules/lumi/Table/Table(1).d.ts +0 -6
- package/dist/components/molecules/lumi/Table/Table(2).d.ts +0 -6
- package/dist/components/molecules/lumi/Table/index(1).d.ts +0 -2
- package/dist/components/molecules/lumi/Table/types(1).d.ts +0 -177
- package/dist/components/molecules/lumi/Table/types(2).d.ts +0 -177
- package/dist/components/molecules/lumi/Tabs/Tabs(1).d.ts +0 -4
- package/dist/components/molecules/lumi/Tabs/Tabs(2).d.ts +0 -4
- package/dist/components/molecules/lumi/Tabs/index(1).d.ts +0 -2
- package/dist/components/molecules/lumi/Tabs/index(2).d.ts +0 -2
- package/dist/components/molecules/lumi/TimeInput/FormTimeInput(1).d.ts +0 -12
- package/dist/components/molecules/lumi/TimeInput/use-cases/FormTimeInputClearWithResetUseCase(1).d.ts +0 -21
- package/dist/components/molecules/lumi/TimeInput/use-cases/FormTimeInputErrorVisibilityUseCase(1).d.ts +0 -21
- package/dist/components/molecules/lumi/TimeInput/use-cases/index(1).d.ts +0 -4
- package/dist/components/organisms/chat/Chat/Chat(1).d.ts +0 -12
- package/dist/components/organisms/chat/Chat/hooks/useChatHandlers(1).d.ts +0 -15
- package/dist/components/organisms/chat/Chat/hooks/useKeyboardLock(1).d.ts +0 -15
- package/dist/components/organisms/chat/Chat/index(1).d.ts +0 -3
- package/dist/components/organisms/chat/Chat/store/index(1).d.ts +0 -4
- package/dist/components/organisms/chat/Chat/use-cases/GroupMessagesByDateUseCase(1).d.ts +0 -20
- package/dist/components/organisms/chat/index(1).d.ts +0 -3
- package/dist/components/organisms/chat/index(2).d.ts +0 -3
- package/dist/components/organisms/lumi/ActionBar/ActionBar(1).d.ts +0 -18
- package/dist/components/organisms/lumi/ActionBar/types(1).d.ts +0 -57
- package/dist/components/organisms/lumi/BaseNavbar/types(1).d.ts +0 -34
- package/dist/components/organisms/lumi/BaseWorkspace/BaseWorkspace(1).d.ts +0 -28
- package/dist/components/organisms/lumi/BaseWorkspace/index(1).d.ts +0 -2
- package/dist/components/organisms/lumi/Calendar/components/CalendarEvent(1).d.ts +0 -18
- package/dist/components/organisms/lumi/Calendar/components/CalendarEvent(2).d.ts +0 -18
- package/dist/components/organisms/lumi/Calendar/components/CalendarEvent(3).d.ts +0 -18
- package/dist/components/organisms/lumi/Calendar/components/CalendarHeader(1).d.ts +0 -14
- package/dist/components/organisms/lumi/Calendar/components/TimeGutter(1).d.ts +0 -10
- package/dist/components/organisms/lumi/Calendar/components/TimeGutter(2).d.ts +0 -10
- package/dist/components/organisms/lumi/Calendar/hooks/index(1).d.ts +0 -4
- package/dist/components/organisms/lumi/Calendar/hooks/useCalendarHeight(1).d.ts +0 -58
- package/dist/components/organisms/lumi/Calendar/hooks/useCalendarHeight(2).d.ts +0 -58
- package/dist/components/organisms/lumi/Calendar/hooks/useEventLayout(1).d.ts +0 -21
- package/dist/components/organisms/lumi/Calendar/hooks/useEventLayout(2).d.ts +0 -21
- package/dist/components/organisms/lumi/Calendar/hooks/useTimeSlots(1).d.ts +0 -14
- package/dist/components/organisms/lumi/Calendar/hooks/useTimeSlots(2).d.ts +0 -14
- package/dist/components/organisms/lumi/Calendar/hooks/useTimeSlots(3).d.ts +0 -14
- package/dist/components/organisms/lumi/Calendar/i18n/index(1).d.ts +0 -1
- package/dist/components/organisms/lumi/Calendar/i18n/index(2).d.ts +0 -1
- package/dist/components/organisms/lumi/Calendar/i18n/translations(1).d.ts +0 -34
- package/dist/components/organisms/lumi/Calendar/index(1).d.ts +0 -2
- package/dist/components/organisms/lumi/Calendar/utils/dateUtils(1).d.ts +0 -140
- package/dist/components/organisms/lumi/Calendar/utils/dateUtils(2).d.ts +0 -140
- package/dist/components/organisms/lumi/Calendar/utils/index(1).d.ts +0 -2
- package/dist/components/organisms/lumi/Calendar/utils/multiDayUtils(1).d.ts +0 -73
- package/dist/components/organisms/lumi/Calendar/views/DayView(1).d.ts +0 -17
- package/dist/components/organisms/lumi/Calendar/views/DayView(2).d.ts +0 -17
- package/dist/components/organisms/lumi/Calendar/views/MonthView(1).d.ts +0 -17
- package/dist/components/organisms/lumi/Calendar/views/MonthView(2).d.ts +0 -17
- package/dist/components/organisms/lumi/Calendar/views/WeekView(1).d.ts +0 -19
- package/dist/components/organisms/lumi/Calendar/views/WeekView(2).d.ts +0 -19
- package/dist/components/organisms/lumi/Calendar/views/YearView(1).d.ts +0 -13
- package/dist/components/organisms/lumi/Calendar/views/index(1).d.ts +0 -4
- package/dist/components/organisms/lumi/Calendar/views/index(2).d.ts +0 -4
- package/dist/components/organisms/lumi/DashboardNavbar/index(1).d.ts +0 -7
- package/dist/components/organisms/lumi/DashboardNavbar/types(1).d.ts +0 -52
- package/dist/components/organisms/lumi/DashboardWorkspace/DashboardWorkspace(1).d.ts +0 -23
- package/dist/components/organisms/lumi/DashboardWorkspace/DashboardWorkspace(2).d.ts +0 -23
- package/dist/components/organisms/lumi/DashboardWorkspace/index(1).d.ts +0 -7
- package/dist/components/organisms/lumi/DashboardWorkspace/index(2).d.ts +0 -7
- package/dist/components/organisms/lumi/DashboardWorkspace/types(1).d.ts +0 -60
- package/dist/components/organisms/lumi/DashboardWorkspace/types(2).d.ts +0 -60
- package/dist/components/organisms/lumi/DynamicForm/DynamicForm(1).d.ts +0 -21
- package/dist/components/organisms/lumi/DynamicForm/helpers/fieldMapper(1).d.ts +0 -17
- package/dist/components/organisms/lumi/DynamicForm/helpers/fieldMapper(2).d.ts +0 -17
- package/dist/components/organisms/lumi/DynamicForm/helpers/fieldRenderer(1).d.ts +0 -6
- package/dist/components/organisms/lumi/DynamicForm/helpers/fieldRenderer(2).d.ts +0 -6
- package/dist/components/organisms/lumi/DynamicForm/index(1).d.ts +0 -2
- package/dist/components/organisms/lumi/DynamicForm/index(2).d.ts +0 -2
- package/dist/components/organisms/lumi/DynamicForm/types(1).d.ts +0 -96
- package/dist/components/organisms/lumi/DynamicForm/types(2).d.ts +0 -96
- package/dist/components/organisms/lumi/FormDrawer/FormDrawer(1).d.ts +0 -5
- package/dist/components/organisms/lumi/FormDrawer/index(1).d.ts +0 -3
- package/dist/components/organisms/lumi/FormDrawer/types(1).d.ts +0 -61
- package/dist/components/organisms/lumi/FormDrawer/types(2).d.ts +0 -61
- package/dist/components/organisms/lumi/Stepper/StepIndicator(1).d.ts +0 -4
- package/dist/components/organisms/lumi/Stepper/Stepper(1).d.ts +0 -5
- package/dist/components/organisms/lumi/Stepper/index(1).d.ts +0 -3
- package/dist/components/organisms/lumi/Stepper/types(1).d.ts +0 -96
- package/dist/components/organisms/lumi/Stepper/types(2).d.ts +0 -96
- package/dist/components/organisms/lumi/index(1).d.ts +0 -10
- package/dist/components/organisms/lumi/index(2).d.ts +0 -10
- package/dist/components/templates/chat/ChatWidget/ChatWidget(1).d.ts +0 -10
- package/dist/components/templates/chat/ChatWidget/hooks/index(1).d.ts +0 -1
- package/dist/components/templates/chat/ChatWidget/index(1).d.ts +0 -2
- package/dist/components/templates/chat/ChatWidget/index(2).d.ts +0 -2
- package/dist/components/templates/chat/ChatWidget/types(1).d.ts +0 -90
- package/dist/components/templates/lumi/Base/hooks/index(1).d.ts +0 -2
- package/dist/components/templates/lumi/Base/hooks/useAppHeight(1).d.ts +0 -21
- package/dist/components/templates/lumi/Base/index(1).d.ts +0 -2
- package/dist/components/templates/lumi/Base/types(1).d.ts +0 -54
- package/dist/components/templates/lumi/Crud/Crud(1).d.ts +0 -6
- package/dist/components/templates/lumi/Crud/Crud(2).d.ts +0 -6
- package/dist/components/templates/lumi/Crud/ScrollToEnd.d.ts +0 -18
- package/dist/components/templates/lumi/Crud/helpers/fieldMapper(1).d.ts +0 -13
- package/dist/components/templates/lumi/Crud/hooks/useCrudActions(1).d.ts +0 -11
- package/dist/components/templates/lumi/Crud/index(1).d.ts +0 -2
- package/dist/components/templates/lumi/Crud/store/actions(1).d.ts +0 -45
- package/dist/components/templates/lumi/Crud/store/crudStore(1).d.ts +0 -8
- package/dist/components/templates/lumi/Crud/store/index(1).d.ts +0 -5
- package/dist/components/templates/lumi/Crud/store/types(1).d.ts +0 -71
- package/dist/components/templates/lumi/Dashboard/Dashboard(1).d.ts +0 -25
- package/dist/components/templates/lumi/Dashboard/hooks/index(1).d.ts +0 -12
- package/dist/components/templates/lumi/Dashboard/hooks/index(2).d.ts +0 -12
- package/dist/components/templates/lumi/Dashboard/hooks/useDashboardStore(1).d.ts +0 -34
- package/dist/components/templates/lumi/Dashboard/hooks/useScrollToTop(1).d.ts +0 -47
- package/dist/components/templates/lumi/Dashboard/index(1).d.ts +0 -10
- package/dist/components/templates/lumi/Dashboard/store/storeKeys(1).d.ts +0 -13
- package/dist/components/templates/lumi/Dashboard/store/types(1).d.ts +0 -73
- package/dist/components/templates/lumi/Dashboard/store/types(2).d.ts +0 -73
- package/dist/components/templates/lumi/Dashboard/types(1).d.ts +0 -114
- package/dist/components/templates/lumi/Dashboard/types(2).d.ts +0 -114
- package/dist/components/templates/lumi/index(1).d.ts +0 -3
- package/dist/core/chat/ChatConfigContext(1).d.ts +0 -36
- package/dist/index(1).esm.js +0 -19378
- package/dist/index(1).js +0 -19487
package/dist/index.js
CHANGED
|
@@ -7364,6 +7364,7 @@ const Input$1 = React.forwardRef(
|
|
|
7364
7364
|
);
|
|
7365
7365
|
Input$1.displayName = "Input";
|
|
7366
7366
|
|
|
7367
|
+
const sinTildes = (s) => s.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
|
7367
7368
|
const Select$1 = React.forwardRef(
|
|
7368
7369
|
({
|
|
7369
7370
|
options = [],
|
|
@@ -7412,7 +7413,7 @@ const Select$1 = React.forwardRef(
|
|
|
7412
7413
|
const selectorRef = React.useRef(null);
|
|
7413
7414
|
const [dropdownPosition, setDropdownPosition] = React.useState(null);
|
|
7414
7415
|
const filteredOptions = showSearch && searchValue ? options.filter(
|
|
7415
|
-
(option) => filterOption ? filterOption(searchValue, option) : option.label
|
|
7416
|
+
(option) => filterOption ? filterOption(searchValue, option) : sinTildes(option.label).includes(sinTildes(searchValue))
|
|
7416
7417
|
) : options;
|
|
7417
7418
|
const isOptionSelected = (option) => {
|
|
7418
7419
|
if (mode === "multiple") {
|
|
@@ -13206,19 +13207,19 @@ function mapFieldsToFormFields(fields, mode) {
|
|
|
13206
13207
|
}));
|
|
13207
13208
|
}
|
|
13208
13209
|
|
|
13209
|
-
const CLASS$
|
|
13210
|
+
const CLASS$h = `${COMPONENT_PREFIX}field-value`;
|
|
13210
13211
|
const FieldValue = ({
|
|
13211
13212
|
label,
|
|
13212
13213
|
children,
|
|
13213
13214
|
layout = "inline",
|
|
13214
13215
|
className
|
|
13215
|
-
}) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: [CLASS$
|
|
13216
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
13217
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
13216
|
+
}) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: [CLASS$h, `${CLASS$h}--${layout}`, className].filter(Boolean).join(" "), children: [
|
|
13217
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$h}__label`, children: label }),
|
|
13218
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$h}__value`, children })
|
|
13218
13219
|
] });
|
|
13219
13220
|
FieldValue.displayName = "FieldValue";
|
|
13220
13221
|
|
|
13221
|
-
const CLASS$
|
|
13222
|
+
const CLASS$g = `${COMPONENT_PREFIX}record-card`;
|
|
13222
13223
|
const RecordCard = ({
|
|
13223
13224
|
title,
|
|
13224
13225
|
summary,
|
|
@@ -13230,20 +13231,20 @@ const RecordCard = ({
|
|
|
13230
13231
|
className
|
|
13231
13232
|
}) => {
|
|
13232
13233
|
const cuerpoId = React.useId();
|
|
13233
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: [CLASS$
|
|
13234
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: [CLASS$g, open ? `${CLASS$g}--open` : "", className].filter(Boolean).join(" "), children: [
|
|
13234
13235
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
13235
13236
|
"button",
|
|
13236
13237
|
{
|
|
13237
13238
|
type: "button",
|
|
13238
|
-
className: `${CLASS$
|
|
13239
|
+
className: `${CLASS$g}__header`,
|
|
13239
13240
|
"aria-expanded": open,
|
|
13240
13241
|
"aria-controls": cuerpoId,
|
|
13241
13242
|
"aria-label": ariaLabel,
|
|
13242
13243
|
onClick: onToggle,
|
|
13243
13244
|
children: [
|
|
13244
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$
|
|
13245
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
13246
|
-
summary && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
13245
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$g}__heading`, children: [
|
|
13246
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$g}__title`, children: title }),
|
|
13247
|
+
summary && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$g}__summary`, children: summary })
|
|
13247
13248
|
] }),
|
|
13248
13249
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
13249
13250
|
Icon,
|
|
@@ -13251,22 +13252,22 @@ const RecordCard = ({
|
|
|
13251
13252
|
type: open ? "chevron-up" : "chevron-down",
|
|
13252
13253
|
width: 18,
|
|
13253
13254
|
height: 18,
|
|
13254
|
-
className: `${CLASS$
|
|
13255
|
+
className: `${CLASS$g}__chevron`,
|
|
13255
13256
|
"aria-hidden": true
|
|
13256
13257
|
}
|
|
13257
13258
|
)
|
|
13258
13259
|
]
|
|
13259
13260
|
}
|
|
13260
13261
|
),
|
|
13261
|
-
open && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$
|
|
13262
|
+
open && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$g}__body`, id: cuerpoId, children: [
|
|
13262
13263
|
children,
|
|
13263
|
-
actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$
|
|
13264
|
+
actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$g}__actions`, children: actions })
|
|
13264
13265
|
] })
|
|
13265
13266
|
] });
|
|
13266
13267
|
};
|
|
13267
13268
|
RecordCard.displayName = "RecordCard";
|
|
13268
13269
|
|
|
13269
|
-
const CLASS$
|
|
13270
|
+
const CLASS$f = `${COMPONENT_PREFIX}crud-cards`;
|
|
13270
13271
|
function summaryFields(fields) {
|
|
13271
13272
|
const visibles = fields.filter((f) => f.showInTable !== false);
|
|
13272
13273
|
const marcados = visibles.filter((f) => f.summary);
|
|
@@ -13285,13 +13286,13 @@ function CardList({
|
|
|
13285
13286
|
const claveResumen = new Set(resumen.map((f) => f.key));
|
|
13286
13287
|
const cuerpo = fields.filter((f) => f.showInTable !== false && !claveResumen.has(f.key));
|
|
13287
13288
|
if (loading && rows.length === 0) {
|
|
13288
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$
|
|
13289
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$f}__estado`, children: "Cargando..." });
|
|
13289
13290
|
}
|
|
13290
13291
|
if (rows.length === 0) {
|
|
13291
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$
|
|
13292
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$f}__estado`, children: emptyText });
|
|
13292
13293
|
}
|
|
13293
13294
|
const [principal, ...secundarios] = resumen;
|
|
13294
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: CLASS$
|
|
13295
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: CLASS$f, children: rows.map((row) => {
|
|
13295
13296
|
const key = rowKey(row);
|
|
13296
13297
|
const opciones = buildOptions?.(row) ?? [];
|
|
13297
13298
|
const titulo = principal ? renderFieldValue(principal, row) : key;
|
|
@@ -13308,14 +13309,14 @@ function CardList({
|
|
|
13308
13309
|
{
|
|
13309
13310
|
type: "button",
|
|
13310
13311
|
className: [
|
|
13311
|
-
`${CLASS$
|
|
13312
|
+
`${CLASS$f}__accion`,
|
|
13312
13313
|
o.disabled && o.disabledReason ? "is-con-motivo" : ""
|
|
13313
13314
|
].filter(Boolean).join(" "),
|
|
13314
13315
|
disabled: o.disabled,
|
|
13315
13316
|
onClick: () => void o.onClick(),
|
|
13316
13317
|
children: [
|
|
13317
13318
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: o.label }),
|
|
13318
|
-
o.disabled && o.disabledReason && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
13319
|
+
o.disabled && o.disabledReason && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$f}__motivo`, children: o.disabledReason })
|
|
13319
13320
|
]
|
|
13320
13321
|
},
|
|
13321
13322
|
o.label
|
|
@@ -13330,7 +13331,7 @@ function CardList({
|
|
|
13330
13331
|
}
|
|
13331
13332
|
CardList.displayName = "CardList";
|
|
13332
13333
|
|
|
13333
|
-
const CLASS$
|
|
13334
|
+
const CLASS$e = `${COMPONENT_PREFIX}crud-scroll-end`;
|
|
13334
13335
|
const MARGEN = 24;
|
|
13335
13336
|
const SELECTOR_CRUD = `.${COMPONENT_PREFIX}table-container, .${COMPONENT_PREFIX}crud-cards`;
|
|
13336
13337
|
const ScrollToEnd = ({
|
|
@@ -13374,7 +13375,7 @@ const ScrollToEnd = ({
|
|
|
13374
13375
|
s.scrollTo({ top: s.scrollHeight, behavior: "smooth" });
|
|
13375
13376
|
}, []);
|
|
13376
13377
|
if (!visible) return null;
|
|
13377
|
-
return /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: CLASS$
|
|
13378
|
+
return /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: CLASS$e, onClick: alFinal, "aria-label": label, title: label, children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { type: "chevron-down", width: 18, height: 18, "aria-hidden": true }) });
|
|
13378
13379
|
};
|
|
13379
13380
|
ScrollToEnd.displayName = "ScrollToEnd";
|
|
13380
13381
|
|
|
@@ -14059,7 +14060,7 @@ function Crud({
|
|
|
14059
14060
|
}
|
|
14060
14061
|
Crud.displayName = "Crud";
|
|
14061
14062
|
|
|
14062
|
-
const CLASS$
|
|
14063
|
+
const CLASS$d = "px-chat-reactive-crud__chat-link";
|
|
14063
14064
|
function Burbuja() {
|
|
14064
14065
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
14065
14066
|
"svg",
|
|
@@ -14086,7 +14087,7 @@ const ChatLinkCell = ({
|
|
|
14086
14087
|
if (targets.length === 1) {
|
|
14087
14088
|
const t = targets[0];
|
|
14088
14089
|
const texto = t.label ? `Abrir chat ${t.label}` : "Abrir chat";
|
|
14089
|
-
return /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: CLASS$
|
|
14090
|
+
return /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: CLASS$d, "aria-label": texto, title: texto, onClick: () => abrir(t.id), children: /* @__PURE__ */ jsxRuntime.jsx(Burbuja, {}) });
|
|
14090
14091
|
}
|
|
14091
14092
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
14092
14093
|
DropdownMenu,
|
|
@@ -14100,7 +14101,7 @@ const ChatLinkCell = ({
|
|
|
14100
14101
|
"button",
|
|
14101
14102
|
{
|
|
14102
14103
|
type: "button",
|
|
14103
|
-
className: CLASS$
|
|
14104
|
+
className: CLASS$d,
|
|
14104
14105
|
"aria-label": `Abrir chat (${targets.length} conversaciones)`,
|
|
14105
14106
|
title: "Abrir chat",
|
|
14106
14107
|
children: /* @__PURE__ */ jsxRuntime.jsx(Burbuja, {})
|
|
@@ -14164,9 +14165,11 @@ const currency = (value) => {
|
|
|
14164
14165
|
if (isNaN(n)) return String(value ?? "");
|
|
14165
14166
|
return n.toLocaleString("es-CO", { style: "currency", currency: "COP", maximumFractionDigits: 0 });
|
|
14166
14167
|
};
|
|
14168
|
+
const SOLO_FECHA = /^(\d{4})-(\d{2})-(\d{2})$/;
|
|
14167
14169
|
const date = (value) => {
|
|
14168
14170
|
if (!value) return "";
|
|
14169
|
-
const
|
|
14171
|
+
const m = SOLO_FECHA.exec(String(value));
|
|
14172
|
+
const d = m ? new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3])) : new Date(String(value));
|
|
14170
14173
|
if (isNaN(d.getTime())) return String(value);
|
|
14171
14174
|
return d.toLocaleDateString("es-CO", { year: "numeric", month: "2-digit", day: "2-digit" });
|
|
14172
14175
|
};
|
|
@@ -14417,7 +14420,7 @@ function uploadViaEventBus(eventBus, file, fileType) {
|
|
|
14417
14420
|
});
|
|
14418
14421
|
}
|
|
14419
14422
|
|
|
14420
|
-
const CLASS$
|
|
14423
|
+
const CLASS$c = `${COMPONENT_PREFIX$1}file-field`;
|
|
14421
14424
|
function iconoPorNombre(nombre) {
|
|
14422
14425
|
const ext = nombre.split(".").pop()?.toLowerCase() ?? "";
|
|
14423
14426
|
if (["png", "jpg", "jpeg", "gif", "webp", "heic", "heif"].includes(ext)) return ICON_TYPES.IMAGE;
|
|
@@ -14448,18 +14451,18 @@ const FileField = ({
|
|
|
14448
14451
|
const elegir = () => {
|
|
14449
14452
|
if (!disabled) inputRef.current?.click();
|
|
14450
14453
|
};
|
|
14451
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$
|
|
14452
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$
|
|
14454
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$c}${error ? ` ${CLASS$c}--error` : ""}`, children: [
|
|
14455
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$c}__label`, children: [
|
|
14453
14456
|
label,
|
|
14454
14457
|
required ? " *" : "",
|
|
14455
14458
|
multiple && hechos > 0 ? ` (${hechos})` : ""
|
|
14456
14459
|
] }),
|
|
14457
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$
|
|
14460
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$c}__box`, children: [
|
|
14458
14461
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
14459
14462
|
"input",
|
|
14460
14463
|
{
|
|
14461
14464
|
ref: inputRef,
|
|
14462
|
-
className: `${CLASS$
|
|
14465
|
+
className: `${CLASS$c}__native`,
|
|
14463
14466
|
type: "file",
|
|
14464
14467
|
accept,
|
|
14465
14468
|
multiple,
|
|
@@ -14470,14 +14473,14 @@ const FileField = ({
|
|
|
14470
14473
|
}
|
|
14471
14474
|
}
|
|
14472
14475
|
),
|
|
14473
|
-
/* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: `${CLASS$
|
|
14476
|
+
/* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: `${CLASS$c}__pick`, onClick: elegir, disabled, children: [
|
|
14474
14477
|
/* @__PURE__ */ jsxRuntime.jsx(Icon$1, { type: ICON_TYPES.UPLOAD, size: "small" }),
|
|
14475
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
14478
|
+
/* @__PURE__ */ jsxRuntime.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" })
|
|
14476
14479
|
] }),
|
|
14477
|
-
entries.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("ul", { className: `${CLASS$
|
|
14478
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
14479
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
14480
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$
|
|
14480
|
+
entries.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("ul", { className: `${CLASS$c}__list`, children: entries.map((e, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: `${CLASS$c}__item ${CLASS$c}__item--${e.status}`, children: [
|
|
14481
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$c}__kind`, "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(Icon$1, { type: iconoPorNombre(e.name), size: "small" }) }),
|
|
14482
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$c}__name`, children: e.name }),
|
|
14483
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$c}__state`, children: [
|
|
14481
14484
|
e.status === "uploading" && "Subiendo\u2026",
|
|
14482
14485
|
e.status === "done" && (pesoLegible(e.size) || "Listo"),
|
|
14483
14486
|
e.status === "error" && "No se pudo subir"
|
|
@@ -14486,7 +14489,7 @@ const FileField = ({
|
|
|
14486
14489
|
"button",
|
|
14487
14490
|
{
|
|
14488
14491
|
type: "button",
|
|
14489
|
-
className: `${CLASS$
|
|
14492
|
+
className: `${CLASS$c}__remove`,
|
|
14490
14493
|
onClick: () => onRemove(i),
|
|
14491
14494
|
"aria-label": `Quitar ${e.name}`,
|
|
14492
14495
|
disabled,
|
|
@@ -14495,8 +14498,8 @@ const FileField = ({
|
|
|
14495
14498
|
)
|
|
14496
14499
|
] }, `${e.name}-${i}`)) })
|
|
14497
14500
|
] }),
|
|
14498
|
-
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
14499
|
-
!error && subiendo && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
14501
|
+
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$c}__error`, children: error }),
|
|
14502
|
+
!error && subiendo && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$c}__hint`, children: "Espera a que terminen de subir." })
|
|
14500
14503
|
] });
|
|
14501
14504
|
};
|
|
14502
14505
|
|
|
@@ -14656,7 +14659,13 @@ function ActionFormDrawer({ action, row, idField, eventBus, onExecute, onClose }
|
|
|
14656
14659
|
options: f.options ?? optionsByField[f.name],
|
|
14657
14660
|
// SPEC-106 T8 — `uiProps` llega tal cual a la molécula, así que el desplegable dice lo
|
|
14658
14661
|
// que pasó de verdad en vez del «no hay» de siempre. Sin error, se queda el de siempre.
|
|
14659
|
-
...optionsErrorByField[f.name]
|
|
14662
|
+
...optionsErrorByField[f.name] || f.searchable ? {
|
|
14663
|
+
uiProps: {
|
|
14664
|
+
...optionsErrorByField[f.name] ? { notFoundContent: optionsErrorByField[f.name] } : {},
|
|
14665
|
+
...f.searchable ? { showSearch: true } : {}
|
|
14666
|
+
// SPEC-174
|
|
14667
|
+
}
|
|
14668
|
+
} : {},
|
|
14660
14669
|
// SPEC-128 — el dinero se escribe como se escribe AQUÍ.
|
|
14661
14670
|
//
|
|
14662
14671
|
// Los campos de moneda caían a `thousandSeparator ?? ','`, un valor por defecto en formato
|
|
@@ -15652,7 +15661,7 @@ function buildMarkerIcon(name, color = "#dc2626", heading = 0) {
|
|
|
15652
15661
|
return `data:image/svg+xml;charset=UTF-8,${encodeURIComponent(svg)}`;
|
|
15653
15662
|
}
|
|
15654
15663
|
|
|
15655
|
-
const CLASS$
|
|
15664
|
+
const CLASS$b = `${COMPONENT_PREFIX$1}map-view`;
|
|
15656
15665
|
const DEFAULT_CENTER = { lat: 4.711, lng: -74.0721 };
|
|
15657
15666
|
const DEFAULT_ZOOM = 12;
|
|
15658
15667
|
const DEFAULT_HEIGHT$1 = 320;
|
|
@@ -15953,23 +15962,23 @@ const MapView = ({
|
|
|
15953
15962
|
document.body.style.overflow = prev;
|
|
15954
15963
|
};
|
|
15955
15964
|
}, [expanded]);
|
|
15956
|
-
const rootClass = [CLASS$
|
|
15965
|
+
const rootClass = [CLASS$b, fullBleed && `${CLASS$b}--full-bleed`, className].filter(Boolean).join(" ");
|
|
15957
15966
|
if (overQuota) {
|
|
15958
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: rootClass, style: { height }, children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
15967
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: rootClass, style: { height }, children: /* @__PURE__ */ jsxRuntime.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." }) });
|
|
15959
15968
|
}
|
|
15960
15969
|
if (status === "error") {
|
|
15961
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: rootClass, style: { height }, children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
15970
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: rootClass, style: { height }, children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$b}__state ${CLASS$b}__state--error`, children: labels?.errorText ?? "No se pudo cargar el mapa." }) });
|
|
15962
15971
|
}
|
|
15963
15972
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: rootClass, style: fullBleed ? void 0 : { height }, children: [
|
|
15964
|
-
status !== "ready" && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
15965
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: nodeRef, className: `${CLASS$
|
|
15966
|
-
status === "ready" && list.length === 0 && allRoutes.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
15967
|
-
status === "ready" && onPointMove && list.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
15973
|
+
status !== "ready" && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$b}__state`, children: labels?.loadingText ?? "Cargando mapa\u2026" }),
|
|
15974
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: nodeRef, className: `${CLASS$b}__canvas`, "aria-label": "Mapa", role: "application" }),
|
|
15975
|
+
status === "ready" && list.length === 0 && allRoutes.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$b}__empty`, children: labels?.emptyText ?? "Sin ubicaciones para mostrar" }),
|
|
15976
|
+
status === "ready" && onPointMove && list.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$b}__empty`, children: labels?.moveHint ?? "Arrastra el pin o toca el mapa para ajustar" }),
|
|
15968
15977
|
status === "ready" && expandable && !fullBleed && /* @__PURE__ */ jsxRuntime.jsx(
|
|
15969
15978
|
"button",
|
|
15970
15979
|
{
|
|
15971
15980
|
type: "button",
|
|
15972
|
-
className: `${CLASS$
|
|
15981
|
+
className: `${CLASS$b}__expand`,
|
|
15973
15982
|
"aria-label": labels?.expandAria ?? "Ver el mapa en pantalla completa",
|
|
15974
15983
|
title: labels?.expandAria ?? "Pantalla completa",
|
|
15975
15984
|
onClick: () => setExpanded(true),
|
|
@@ -15977,7 +15986,7 @@ const MapView = ({
|
|
|
15977
15986
|
}
|
|
15978
15987
|
),
|
|
15979
15988
|
expanded && ReactDOM.createPortal(
|
|
15980
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$
|
|
15989
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$b}-fs`, role: "dialog", "aria-modal": "true", "aria-label": "Mapa", children: [
|
|
15981
15990
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
15982
15991
|
MapView,
|
|
15983
15992
|
{
|
|
@@ -15991,7 +16000,7 @@ const MapView = ({
|
|
|
15991
16000
|
"button",
|
|
15992
16001
|
{
|
|
15993
16002
|
type: "button",
|
|
15994
|
-
className: `${CLASS$
|
|
16003
|
+
className: `${CLASS$b}-fs__close`,
|
|
15995
16004
|
"aria-label": labels?.closeAria ?? "Cerrar el mapa",
|
|
15996
16005
|
onClick: () => setExpanded(false),
|
|
15997
16006
|
children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
@@ -16107,7 +16116,7 @@ function reverseGeocode(lat, lng) {
|
|
|
16107
16116
|
});
|
|
16108
16117
|
}
|
|
16109
16118
|
|
|
16110
|
-
const CLASS$
|
|
16119
|
+
const CLASS$a = `${COMPONENT_PREFIX$1}location-field`;
|
|
16111
16120
|
const GPS_TIMEOUT_MS = 1e4;
|
|
16112
16121
|
const CONFIRM_MAP_HEIGHT = 180;
|
|
16113
16122
|
const LocationField = ({
|
|
@@ -16180,16 +16189,16 @@ const LocationField = ({
|
|
|
16180
16189
|
}
|
|
16181
16190
|
};
|
|
16182
16191
|
const hasPoint = value?.lat != null && value?.lng != null;
|
|
16183
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$
|
|
16184
|
-
label && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$
|
|
16192
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$a}${error ? ` ${CLASS$a}--error` : ""}`, ref: boxRef, children: [
|
|
16193
|
+
label && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$a}__label`, children: [
|
|
16185
16194
|
label,
|
|
16186
16195
|
required ? " *" : ""
|
|
16187
16196
|
] }),
|
|
16188
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$
|
|
16197
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$a}__row`, children: [
|
|
16189
16198
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
16190
16199
|
"input",
|
|
16191
16200
|
{
|
|
16192
|
-
className: `${CLASS$
|
|
16201
|
+
className: `${CLASS$a}__input`,
|
|
16193
16202
|
type: "text",
|
|
16194
16203
|
value: text,
|
|
16195
16204
|
disabled,
|
|
@@ -16203,7 +16212,7 @@ const LocationField = ({
|
|
|
16203
16212
|
"button",
|
|
16204
16213
|
{
|
|
16205
16214
|
type: "button",
|
|
16206
|
-
className: `${CLASS$
|
|
16215
|
+
className: `${CLASS$a}__gps`,
|
|
16207
16216
|
onClick: useMyLocation,
|
|
16208
16217
|
disabled: disabled || gps === "locating",
|
|
16209
16218
|
title: labels?.useMyLocation ?? "Enviar mi ubicaci\xF3n",
|
|
@@ -16217,11 +16226,11 @@ const LocationField = ({
|
|
|
16217
16226
|
}
|
|
16218
16227
|
)
|
|
16219
16228
|
] }),
|
|
16220
|
-
open && suggestions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("ul", { className: `${CLASS$
|
|
16221
|
-
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
16222
|
-
gps === "denied" && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
16223
|
-
gps === "unavailable" && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
16224
|
-
hasPoint && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$
|
|
16229
|
+
open && suggestions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("ul", { className: `${CLASS$a}__suggestions`, children: suggestions.map((s) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => void pickSuggestion(s.id, s.description), children: s.description }) }, s.id)) }),
|
|
16230
|
+
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$a}__error`, children: error }),
|
|
16231
|
+
gps === "denied" && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$a}__hint ${CLASS$a}__hint--warn`, children: labels?.permissionDenied ?? "No diste permiso de ubicaci\xF3n. Puedes escribir la direcci\xF3n." }),
|
|
16232
|
+
gps === "unavailable" && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$a}__hint ${CLASS$a}__hint--warn`, children: labels?.unavailable ?? "No pudimos obtener tu ubicaci\xF3n. Puedes escribir la direcci\xF3n." }),
|
|
16233
|
+
hasPoint && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$a}__confirm`, children: [
|
|
16225
16234
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
16226
16235
|
MapView,
|
|
16227
16236
|
{
|
|
@@ -16231,7 +16240,7 @@ const LocationField = ({
|
|
|
16231
16240
|
onPointMove: (id, lat, lng) => void movePoint(id, lat, lng)
|
|
16232
16241
|
}
|
|
16233
16242
|
),
|
|
16234
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
16243
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$a}__hint`, children: labels?.confirmHint ?? "Verifica que el punto sea correcto." })
|
|
16235
16244
|
] })
|
|
16236
16245
|
] });
|
|
16237
16246
|
};
|
|
@@ -16297,7 +16306,7 @@ function toRenderField(f, loaded, eventBus, mapsApiKey, loadError) {
|
|
|
16297
16306
|
align: f.align,
|
|
16298
16307
|
// SPEC-106 T8 — con un fallo de carga, el desplegable dice que no se pudo preguntar en vez
|
|
16299
16308
|
// de «no hay opciones disponibles», que es una respuesta y no la tenemos.
|
|
16300
|
-
uiProps: loadError ? { options: options ?? [], notFoundContent: loadError } : options ? { options } : void 0,
|
|
16309
|
+
uiProps: loadError ? { options: options ?? [], notFoundContent: loadError, ...f.searchable ? { showSearch: true } : {} } : options ? { options, ...f.searchable ? { showSearch: true } : {} } : void 0,
|
|
16301
16310
|
formatValue
|
|
16302
16311
|
};
|
|
16303
16312
|
}
|
|
@@ -16854,7 +16863,7 @@ function markFitOutliers(points, radiusKm = FIT_RADIUS_KM) {
|
|
|
16854
16863
|
return { points: marcados, outside };
|
|
16855
16864
|
}
|
|
16856
16865
|
|
|
16857
|
-
const CLASS$
|
|
16866
|
+
const CLASS$9 = `${COMPONENT_PREFIX$1}services-map`;
|
|
16858
16867
|
const DEFAULT_HEIGHT = 340;
|
|
16859
16868
|
function readNumber(row, field) {
|
|
16860
16869
|
if (!field) return void 0;
|
|
@@ -16980,7 +16989,7 @@ const ServicesMap = ({ config, eventBus, apiKey, filter, fill }) => {
|
|
|
16980
16989
|
[livePoints]
|
|
16981
16990
|
);
|
|
16982
16991
|
const nadaQueDibujar = rows !== null && allPoints.length === 0 && route.length === 0;
|
|
16983
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: fill ? `${CLASS$
|
|
16992
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: fill ? `${CLASS$9} ${CLASS$9}--fill` : CLASS$9, children: rows === null ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$9}__state`, children: labels.loadingText ?? "Cargando ubicaciones\u2026" }) : nadaQueDibujar ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$9}__state`, children: lineaSinMapa(labels, missing, failed) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
16984
16993
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
16985
16994
|
MapView,
|
|
16986
16995
|
{
|
|
@@ -16994,20 +17003,20 @@ const ServicesMap = ({ config, eventBus, apiKey, filter, fill }) => {
|
|
|
16994
17003
|
labels: { emptyText: labels.emptyText }
|
|
16995
17004
|
}
|
|
16996
17005
|
),
|
|
16997
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$
|
|
16998
|
-
livePoints.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: `${CLASS$
|
|
17006
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$9}__notes`, children: [
|
|
17007
|
+
livePoints.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: `${CLASS$9}__note ${CLASS$9}__note--live`, children: [
|
|
16999
17008
|
(config.live?.labels?.liveText ?? "{n} en movimiento").replace(
|
|
17000
17009
|
"{n}",
|
|
17001
17010
|
String(livePoints.length)
|
|
17002
17011
|
),
|
|
17003
17012
|
simulated > 0 && ` \xB7 ${config.live?.labels?.simulatedText ?? "incluye posiciones simuladas"}`
|
|
17004
17013
|
] }),
|
|
17005
|
-
missing > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
17006
|
-
outside > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
17014
|
+
missing > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$9}__note`, children: ((missing === 1 ? labels.missingTextOne : void 0) ?? labels.missingText ?? "{n} sin ubicaci\xF3n registrada").replace("{n}", String(missing)) }),
|
|
17015
|
+
outside > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$9}__note`, children: (labels.outsideText ?? "{n} fuera de la zona (aleja el mapa para verlos)").replace(
|
|
17007
17016
|
"{n}",
|
|
17008
17017
|
String(outside)
|
|
17009
17018
|
) }),
|
|
17010
|
-
failed && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
17019
|
+
failed && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$9}__note`, children: "No se pudieron cargar las ubicaciones." })
|
|
17011
17020
|
] })
|
|
17012
17021
|
] }) });
|
|
17013
17022
|
};
|
|
@@ -17023,7 +17032,7 @@ function lineaSinMapa(labels, missing, failed) {
|
|
|
17023
17032
|
return labels.emptyText ?? "Sin ubicaciones para mostrar";
|
|
17024
17033
|
}
|
|
17025
17034
|
|
|
17026
|
-
const CLASS$
|
|
17035
|
+
const CLASS$8 = `${COMPONENT_PREFIX$1}service-shortcuts`;
|
|
17027
17036
|
const ICONS = {
|
|
17028
17037
|
// SPEC-126 — quien DESPACHA tambien necesita sus puertas, y una de ellas son las conversaciones
|
|
17029
17038
|
// de sus servicios. Los cinco iconos que habia eran todos de quien PIDE una grua.
|
|
@@ -17077,16 +17086,16 @@ const ServiceShortcuts = ({
|
|
|
17077
17086
|
}) => {
|
|
17078
17087
|
if (!options?.length) return null;
|
|
17079
17088
|
const elegido = !!selectedId;
|
|
17080
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: [CLASS$
|
|
17089
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: [CLASS$8, elegido ? `${CLASS$8}--used` : ""].filter(Boolean).join(" "), children: options.map((o) => {
|
|
17081
17090
|
const esElegido = o.id === selectedId;
|
|
17082
17091
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
17083
17092
|
"button",
|
|
17084
17093
|
{
|
|
17085
17094
|
type: "button",
|
|
17086
17095
|
className: [
|
|
17087
|
-
`${CLASS$
|
|
17088
|
-
elegido ? `${CLASS$
|
|
17089
|
-
esElegido ? `${CLASS$
|
|
17096
|
+
`${CLASS$8}__item`,
|
|
17097
|
+
elegido ? `${CLASS$8}__item--off` : "",
|
|
17098
|
+
esElegido ? `${CLASS$8}__item--chosen` : ""
|
|
17090
17099
|
].filter(Boolean).join(" "),
|
|
17091
17100
|
disabled: elegido,
|
|
17092
17101
|
"aria-disabled": elegido,
|
|
@@ -17098,12 +17107,12 @@ const ServiceShortcuts = ({
|
|
|
17098
17107
|
else if (o.route) eventBus?.emit(CHAT_EVENT.NAVIGATE, { route: o.route });
|
|
17099
17108
|
},
|
|
17100
17109
|
children: [
|
|
17101
|
-
o.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
17102
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$
|
|
17103
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
17104
|
-
o.hint && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
17110
|
+
o.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$8}__icon`, children: ICONS[o.icon] }),
|
|
17111
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$8}__text`, children: [
|
|
17112
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$8}__label`, children: o.label }),
|
|
17113
|
+
o.hint && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$8}__hint`, children: o.hint })
|
|
17105
17114
|
] }),
|
|
17106
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
17115
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$8}__arrow`, children: esElegido ? CHECK : elegido ? null : /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "9 18 15 12 9 6" }) }) })
|
|
17107
17116
|
]
|
|
17108
17117
|
},
|
|
17109
17118
|
o.id
|
|
@@ -17672,19 +17681,19 @@ function ChatNavigatorChat({ component, eventBus }) {
|
|
|
17672
17681
|
] });
|
|
17673
17682
|
}
|
|
17674
17683
|
|
|
17675
|
-
const CLASS$
|
|
17684
|
+
const CLASS$7 = `${COMPONENT_PREFIX$1}user-tools`;
|
|
17676
17685
|
const UserTools = ({ config, onChange, onAction, className }) => {
|
|
17677
17686
|
const { title, description, items } = config;
|
|
17678
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: [CLASS$
|
|
17679
|
-
title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: `${CLASS$
|
|
17680
|
-
description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
17681
|
-
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: `${CLASS$
|
|
17687
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: [CLASS$7, className].filter(Boolean).join(" "), children: [
|
|
17688
|
+
title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: `${CLASS$7}__title`, children: title }),
|
|
17689
|
+
description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$7}__description`, children: description }),
|
|
17690
|
+
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: `${CLASS$7}__list`, children: items.map((item) => /* @__PURE__ */ jsxRuntime.jsx("li", { className: `${CLASS$7}__item`, children: item.kind === "action" ? (
|
|
17682
17691
|
// SPEC-139 T9 — un ajuste que se pulsa: mismo renglón (etiqueta y pista), y en vez
|
|
17683
17692
|
// de la caja, un botón que dice lo que hace.
|
|
17684
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$
|
|
17685
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$
|
|
17686
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
17687
|
-
item.hint && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
17693
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$7}__action`, children: [
|
|
17694
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$7}__text`, children: [
|
|
17695
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$7}__label`, children: item.label }),
|
|
17696
|
+
item.hint && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$7}__hint`, children: item.hint })
|
|
17688
17697
|
] }),
|
|
17689
17698
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17690
17699
|
Button,
|
|
@@ -17703,13 +17712,13 @@ const UserTools = ({ config, onChange, onAction, className }) => {
|
|
|
17703
17712
|
checked: Boolean(item.value),
|
|
17704
17713
|
disabled: item.disabled,
|
|
17705
17714
|
onChange: (checked) => onChange?.(item.id, checked),
|
|
17706
|
-
label: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$
|
|
17707
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
17708
|
-
item.hint && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
17715
|
+
label: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$7}__text`, children: [
|
|
17716
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$7}__label`, children: item.label }),
|
|
17717
|
+
item.hint && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$7}__hint`, children: item.hint })
|
|
17709
17718
|
] })
|
|
17710
17719
|
}
|
|
17711
17720
|
) }, item.id)) }),
|
|
17712
|
-
items.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
17721
|
+
items.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$7}__empty`, children: "No hay herramientas disponibles por ahora." })
|
|
17713
17722
|
] });
|
|
17714
17723
|
};
|
|
17715
17724
|
UserTools.displayName = "UserTools";
|
|
@@ -18319,7 +18328,7 @@ const ChatHeader = ({
|
|
|
18319
18328
|
] });
|
|
18320
18329
|
};
|
|
18321
18330
|
|
|
18322
|
-
const CLASS$
|
|
18331
|
+
const CLASS$6 = `${COMPONENT_PREFIX$1}floating-actions`;
|
|
18323
18332
|
const ICON_VALUES = new Set(Object.values(ICON_TYPES));
|
|
18324
18333
|
function renderIcon(icon) {
|
|
18325
18334
|
if (typeof icon === "string" && ICON_VALUES.has(icon)) {
|
|
@@ -18328,23 +18337,23 @@ function renderIcon(icon) {
|
|
|
18328
18337
|
return icon;
|
|
18329
18338
|
}
|
|
18330
18339
|
function Side({ buttons, align, eventBus }) {
|
|
18331
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$
|
|
18340
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$6}__group ${CLASS$6}__group--${align}`, children: buttons.map((b) => {
|
|
18332
18341
|
const emit = () => {
|
|
18333
18342
|
if (b.disabled) return;
|
|
18334
18343
|
eventBus.emit(b.event, b.payload);
|
|
18335
18344
|
};
|
|
18336
18345
|
if (b.custom) {
|
|
18337
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$
|
|
18346
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$6}__slot`, children: [
|
|
18338
18347
|
b.custom,
|
|
18339
|
-
b.panel && b.open && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$
|
|
18348
|
+
b.panel && b.open && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$6}__panel ${CLASS$6}__panel--${align}`, children: b.panel })
|
|
18340
18349
|
] }, b.id);
|
|
18341
18350
|
}
|
|
18342
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$
|
|
18351
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$6}__slot`, children: [
|
|
18343
18352
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
18344
18353
|
"button",
|
|
18345
18354
|
{
|
|
18346
18355
|
type: "button",
|
|
18347
|
-
className: [`${CLASS$
|
|
18356
|
+
className: [`${CLASS$6}__button`, b.active ? `${CLASS$6}__button--active` : ""].filter(Boolean).join(" "),
|
|
18348
18357
|
"aria-label": b.ariaLabel,
|
|
18349
18358
|
title: b.ariaLabel,
|
|
18350
18359
|
"aria-pressed": b.active,
|
|
@@ -18352,16 +18361,16 @@ function Side({ buttons, align, eventBus }) {
|
|
|
18352
18361
|
onClick: emit,
|
|
18353
18362
|
children: [
|
|
18354
18363
|
renderIcon(b.icon),
|
|
18355
|
-
b.badge != null && b.badge !== "" && b.badge !== 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
18364
|
+
b.badge != null && b.badge !== "" && b.badge !== 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$6}__badge`, children: b.badge })
|
|
18356
18365
|
]
|
|
18357
18366
|
}
|
|
18358
18367
|
),
|
|
18359
|
-
b.panel && b.open && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$
|
|
18368
|
+
b.panel && b.open && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$6}__panel ${CLASS$6}__panel--${align}`, children: b.panel })
|
|
18360
18369
|
] }, b.id);
|
|
18361
18370
|
}) });
|
|
18362
18371
|
}
|
|
18363
18372
|
const ChatFloatingActions = ({ eventBus, left = [], right = [], offset = 12, glass = false }) => {
|
|
18364
|
-
const cls = [CLASS$
|
|
18373
|
+
const cls = [CLASS$6, glass ? `${CLASS$6}--glass` : ""].filter(Boolean).join(" ");
|
|
18365
18374
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cls, style: { paddingLeft: offset, paddingRight: offset }, children: [
|
|
18366
18375
|
/* @__PURE__ */ jsxRuntime.jsx(Side, { buttons: left, align: "left", eventBus }),
|
|
18367
18376
|
/* @__PURE__ */ jsxRuntime.jsx(Side, { buttons: right, align: "right", eventBus })
|
|
@@ -18794,7 +18803,7 @@ const UserMessage = ({
|
|
|
18794
18803
|
] }) });
|
|
18795
18804
|
};
|
|
18796
18805
|
|
|
18797
|
-
const CLASS$
|
|
18806
|
+
const CLASS$5 = `${COMPONENT_PREFIX$1}photo-picker`;
|
|
18798
18807
|
const PhotoPicker = ({
|
|
18799
18808
|
label,
|
|
18800
18809
|
hint,
|
|
@@ -18819,8 +18828,8 @@ const PhotoPicker = ({
|
|
|
18819
18828
|
void onFiles(e.target.files);
|
|
18820
18829
|
e.target.value = "";
|
|
18821
18830
|
};
|
|
18822
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$
|
|
18823
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$
|
|
18831
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$5}${error ? ` ${CLASS$5}--error` : ""}`, children: [
|
|
18832
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$5}__label`, children: [
|
|
18824
18833
|
label,
|
|
18825
18834
|
required ? " *" : "",
|
|
18826
18835
|
hechas > 0 ? ` (${hechas}${max ? `/${max}` : ""})` : ""
|
|
@@ -18829,7 +18838,7 @@ const PhotoPicker = ({
|
|
|
18829
18838
|
"input",
|
|
18830
18839
|
{
|
|
18831
18840
|
ref: galeriaRef,
|
|
18832
|
-
className: `${CLASS$
|
|
18841
|
+
className: `${CLASS$5}__native`,
|
|
18833
18842
|
type: "file",
|
|
18834
18843
|
accept: "image/*",
|
|
18835
18844
|
multiple: max !== 1,
|
|
@@ -18842,7 +18851,7 @@ const PhotoPicker = ({
|
|
|
18842
18851
|
"input",
|
|
18843
18852
|
{
|
|
18844
18853
|
ref: camaraRef,
|
|
18845
|
-
className: `${CLASS$
|
|
18854
|
+
className: `${CLASS$5}__native`,
|
|
18846
18855
|
type: "file",
|
|
18847
18856
|
accept: "image/*",
|
|
18848
18857
|
capture: "environment",
|
|
@@ -18851,15 +18860,15 @@ const PhotoPicker = ({
|
|
|
18851
18860
|
"data-testid": "photo-picker-camera"
|
|
18852
18861
|
}
|
|
18853
18862
|
),
|
|
18854
|
-
entries.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("ul", { className: `${CLASS$
|
|
18855
|
-
e.previewUrl ? /* @__PURE__ */ jsxRuntime.jsx("img", { className: `${CLASS$
|
|
18856
|
-
e.status === "uploading" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
18857
|
-
e.status === "error" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
18863
|
+
entries.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("ul", { className: `${CLASS$5}__grid`, children: entries.map((e, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: `${CLASS$5}__thumb ${CLASS$5}__thumb--${e.status}`, children: [
|
|
18864
|
+
e.previewUrl ? /* @__PURE__ */ jsxRuntime.jsx("img", { className: `${CLASS$5}__img`, src: e.previewUrl, alt: e.name }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$5}__placeholder`, "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(Icon$1, { type: ICON_TYPES.IMAGE }) }),
|
|
18865
|
+
e.status === "uploading" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$5}__state`, children: "Subiendo\u2026" }),
|
|
18866
|
+
e.status === "error" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$5}__state ${CLASS$5}__state--error`, children: "No se pudo subir" }),
|
|
18858
18867
|
onRemove && e.status !== "uploading" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18859
18868
|
"button",
|
|
18860
18869
|
{
|
|
18861
18870
|
type: "button",
|
|
18862
|
-
className: `${CLASS$
|
|
18871
|
+
className: `${CLASS$5}__remove`,
|
|
18863
18872
|
onClick: () => onRemove(i),
|
|
18864
18873
|
"aria-label": `Quitar ${e.name}`,
|
|
18865
18874
|
disabled,
|
|
@@ -18867,12 +18876,12 @@ const PhotoPicker = ({
|
|
|
18867
18876
|
}
|
|
18868
18877
|
)
|
|
18869
18878
|
] }, `${e.name}-${i}`)) }),
|
|
18870
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$
|
|
18879
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$5}__actions`, children: [
|
|
18871
18880
|
capture && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18872
18881
|
"button",
|
|
18873
18882
|
{
|
|
18874
18883
|
type: "button",
|
|
18875
|
-
className: `${CLASS$
|
|
18884
|
+
className: `${CLASS$5}__pick`,
|
|
18876
18885
|
onClick: () => elegir(camaraRef),
|
|
18877
18886
|
disabled: disabled || lleno,
|
|
18878
18887
|
children: [
|
|
@@ -18885,7 +18894,7 @@ const PhotoPicker = ({
|
|
|
18885
18894
|
"button",
|
|
18886
18895
|
{
|
|
18887
18896
|
type: "button",
|
|
18888
|
-
className: `${CLASS$
|
|
18897
|
+
className: `${CLASS$5}__pick ${CLASS$5}__pick--secondary`,
|
|
18889
18898
|
onClick: () => elegir(galeriaRef),
|
|
18890
18899
|
disabled: disabled || lleno,
|
|
18891
18900
|
children: [
|
|
@@ -18895,13 +18904,13 @@ const PhotoPicker = ({
|
|
|
18895
18904
|
}
|
|
18896
18905
|
)
|
|
18897
18906
|
] }),
|
|
18898
|
-
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
18899
|
-
!error && subiendo && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
18900
|
-
!error && !subiendo && hint && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
18907
|
+
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$5}__error`, children: error }),
|
|
18908
|
+
!error && subiendo && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$5}__hint`, children: "Espera a que terminen de subir." }),
|
|
18909
|
+
!error && !subiendo && hint && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$5}__hint`, children: hint })
|
|
18901
18910
|
] });
|
|
18902
18911
|
};
|
|
18903
18912
|
|
|
18904
|
-
const CLASS$
|
|
18913
|
+
const CLASS$4 = `${COMPONENT_PREFIX$1}credentials-card`;
|
|
18905
18914
|
async function copiar(texto) {
|
|
18906
18915
|
try {
|
|
18907
18916
|
await navigator.clipboard.writeText(texto);
|
|
@@ -18918,15 +18927,15 @@ const Fila = ({ row }) => {
|
|
|
18918
18927
|
const t = setTimeout(() => setCopiado(false), 1800);
|
|
18919
18928
|
return () => clearTimeout(t);
|
|
18920
18929
|
}, [copiado]);
|
|
18921
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: `${CLASS$
|
|
18922
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
18923
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$
|
|
18924
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$
|
|
18930
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: `${CLASS$4}__row`, children: [
|
|
18931
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$4}__label`, children: row.label }),
|
|
18932
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$4}__value`, "data-testid": `credential-${row.label}`, children: visible ? row.value : "\u2022".repeat(Math.min(row.value.length, 12)) }),
|
|
18933
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$4}__tools`, children: [
|
|
18925
18934
|
row.masked && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18926
18935
|
"button",
|
|
18927
18936
|
{
|
|
18928
18937
|
type: "button",
|
|
18929
|
-
className: `${CLASS$
|
|
18938
|
+
className: `${CLASS$4}__tool`,
|
|
18930
18939
|
onClick: () => setVisible((v) => !v),
|
|
18931
18940
|
"aria-label": visible ? `Ocultar ${row.label}` : `Ver ${row.label}`,
|
|
18932
18941
|
children: visible ? "Ocultar" : "Ver"
|
|
@@ -18936,7 +18945,7 @@ const Fila = ({ row }) => {
|
|
|
18936
18945
|
"button",
|
|
18937
18946
|
{
|
|
18938
18947
|
type: "button",
|
|
18939
|
-
className: `${CLASS$
|
|
18948
|
+
className: `${CLASS$4}__tool`,
|
|
18940
18949
|
onClick: async () => setCopiado(await copiar(row.value)),
|
|
18941
18950
|
"aria-label": `Copiar ${row.label}`,
|
|
18942
18951
|
children: copiado ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
@@ -18955,15 +18964,256 @@ const CredentialsCard = ({
|
|
|
18955
18964
|
note,
|
|
18956
18965
|
action,
|
|
18957
18966
|
className
|
|
18958
|
-
}) => /* @__PURE__ */ jsxRuntime.jsxs("section", { className: [CLASS$
|
|
18959
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: `${CLASS$
|
|
18960
|
-
intro && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
18961
|
-
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: `${CLASS$
|
|
18962
|
-
note && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$
|
|
18963
|
-
action && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$
|
|
18967
|
+
}) => /* @__PURE__ */ jsxRuntime.jsxs("section", { className: [CLASS$4, className].filter(Boolean).join(" "), "aria-label": title, children: [
|
|
18968
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: `${CLASS$4}__title`, children: title }),
|
|
18969
|
+
intro && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$4}__intro`, children: intro }),
|
|
18970
|
+
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: `${CLASS$4}__rows`, children: rows.map((r) => /* @__PURE__ */ jsxRuntime.jsx(Fila, { row: r }, r.label)) }),
|
|
18971
|
+
note && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$4}__note`, children: note }),
|
|
18972
|
+
action && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$4}__action`, children: /* @__PURE__ */ jsxRuntime.jsx(Button, { fullWidth: true, onClick: action.onClick, disabled: action.disabled, children: action.label }) })
|
|
18964
18973
|
] });
|
|
18965
18974
|
CredentialsCard.displayName = "CredentialsCard";
|
|
18966
18975
|
|
|
18976
|
+
const TextArea = React.forwardRef(
|
|
18977
|
+
({
|
|
18978
|
+
label,
|
|
18979
|
+
error,
|
|
18980
|
+
status,
|
|
18981
|
+
variant = "outlined",
|
|
18982
|
+
fullWidth = false,
|
|
18983
|
+
size = "middle",
|
|
18984
|
+
allowClear = false,
|
|
18985
|
+
onClear,
|
|
18986
|
+
minRows = 3,
|
|
18987
|
+
maxRows,
|
|
18988
|
+
resize = "vertical",
|
|
18989
|
+
showCount = false,
|
|
18990
|
+
maxLength,
|
|
18991
|
+
footer,
|
|
18992
|
+
className = "",
|
|
18993
|
+
value,
|
|
18994
|
+
onChange,
|
|
18995
|
+
disabled,
|
|
18996
|
+
...props
|
|
18997
|
+
}, ref) => {
|
|
18998
|
+
const [internalValue, setInternalValue] = React.useState("");
|
|
18999
|
+
const textareaRef = React.useRef(null);
|
|
19000
|
+
React.useEffect(() => {
|
|
19001
|
+
if (value !== void 0) {
|
|
19002
|
+
setInternalValue(String(value));
|
|
19003
|
+
}
|
|
19004
|
+
}, [value]);
|
|
19005
|
+
const adjustHeight = React.useCallback(() => {
|
|
19006
|
+
const textarea = textareaRef.current;
|
|
19007
|
+
if (!textarea || resize === "none") return;
|
|
19008
|
+
textarea.style.height = "auto";
|
|
19009
|
+
const lineHeight = parseInt(getComputedStyle(textarea).lineHeight) || 20;
|
|
19010
|
+
const paddingY = 16;
|
|
19011
|
+
const minHeight = minRows * lineHeight + paddingY;
|
|
19012
|
+
const maxHeight = maxRows ? maxRows * lineHeight + paddingY : Infinity;
|
|
19013
|
+
const newHeight = Math.min(
|
|
19014
|
+
Math.max(textarea.scrollHeight, minHeight),
|
|
19015
|
+
maxHeight
|
|
19016
|
+
);
|
|
19017
|
+
textarea.style.height = `${newHeight}px`;
|
|
19018
|
+
}, [minRows, maxRows, resize]);
|
|
19019
|
+
React.useEffect(() => {
|
|
19020
|
+
if (resize !== "none") {
|
|
19021
|
+
adjustHeight();
|
|
19022
|
+
}
|
|
19023
|
+
}, [internalValue, adjustHeight, resize]);
|
|
19024
|
+
const handleChange = React.useCallback(
|
|
19025
|
+
(e) => {
|
|
19026
|
+
const newValue = e.target.value;
|
|
19027
|
+
if (maxLength && newValue.length > maxLength) {
|
|
19028
|
+
return;
|
|
19029
|
+
}
|
|
19030
|
+
setInternalValue(newValue);
|
|
19031
|
+
onChange?.(e);
|
|
19032
|
+
},
|
|
19033
|
+
[onChange, maxLength]
|
|
19034
|
+
);
|
|
19035
|
+
const handleClear = React.useCallback(() => {
|
|
19036
|
+
setInternalValue("");
|
|
19037
|
+
onClear?.();
|
|
19038
|
+
if (onChange && textareaRef.current) {
|
|
19039
|
+
const syntheticEvent = {
|
|
19040
|
+
target: { value: "" },
|
|
19041
|
+
currentTarget: { value: "" }
|
|
19042
|
+
};
|
|
19043
|
+
onChange(syntheticEvent);
|
|
19044
|
+
}
|
|
19045
|
+
textareaRef.current?.focus();
|
|
19046
|
+
}, [onChange, onClear]);
|
|
19047
|
+
const showClearIcon = Boolean(allowClear && internalValue && !disabled);
|
|
19048
|
+
const characterCount = internalValue.length;
|
|
19049
|
+
const wrapperClasses = [
|
|
19050
|
+
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper`,
|
|
19051
|
+
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--${variant}`,
|
|
19052
|
+
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--${size}`,
|
|
19053
|
+
error && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--error`,
|
|
19054
|
+
status && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--${status}`,
|
|
19055
|
+
fullWidth && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--full-width`
|
|
19056
|
+
].filter(Boolean).join(" ");
|
|
19057
|
+
const textareaClasses = [
|
|
19058
|
+
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}`,
|
|
19059
|
+
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}--resize-${resize}`,
|
|
19060
|
+
showClearIcon && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}--with-clear`,
|
|
19061
|
+
className
|
|
19062
|
+
].filter(Boolean).join(" ");
|
|
19063
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: wrapperClasses, children: [
|
|
19064
|
+
label && /* @__PURE__ */ jsxRuntime.jsx(
|
|
19065
|
+
"label",
|
|
19066
|
+
{
|
|
19067
|
+
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__label`,
|
|
19068
|
+
children: label
|
|
19069
|
+
}
|
|
19070
|
+
),
|
|
19071
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
19072
|
+
"div",
|
|
19073
|
+
{
|
|
19074
|
+
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__container`,
|
|
19075
|
+
children: [
|
|
19076
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
19077
|
+
"textarea",
|
|
19078
|
+
{
|
|
19079
|
+
ref: (node) => {
|
|
19080
|
+
textareaRef.current = node;
|
|
19081
|
+
if (typeof ref === "function") {
|
|
19082
|
+
ref(node);
|
|
19083
|
+
} else if (ref) {
|
|
19084
|
+
ref.current = node;
|
|
19085
|
+
}
|
|
19086
|
+
},
|
|
19087
|
+
className: textareaClasses,
|
|
19088
|
+
value: internalValue,
|
|
19089
|
+
onChange: handleChange,
|
|
19090
|
+
disabled,
|
|
19091
|
+
rows: minRows,
|
|
19092
|
+
maxLength,
|
|
19093
|
+
...props
|
|
19094
|
+
}
|
|
19095
|
+
),
|
|
19096
|
+
showClearIcon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
19097
|
+
Button,
|
|
19098
|
+
{
|
|
19099
|
+
variant: "ghost",
|
|
19100
|
+
size: "small",
|
|
19101
|
+
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__clear`,
|
|
19102
|
+
onClick: handleClear,
|
|
19103
|
+
"aria-label": "Clear textarea",
|
|
19104
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(Icon, { type: LUMI_ICON_TYPES.CLOSE, size: "small" })
|
|
19105
|
+
}
|
|
19106
|
+
)
|
|
19107
|
+
]
|
|
19108
|
+
}
|
|
19109
|
+
),
|
|
19110
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
19111
|
+
"div",
|
|
19112
|
+
{
|
|
19113
|
+
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__footer`,
|
|
19114
|
+
children: [
|
|
19115
|
+
error && /* @__PURE__ */ jsxRuntime.jsx(
|
|
19116
|
+
"span",
|
|
19117
|
+
{
|
|
19118
|
+
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__error`,
|
|
19119
|
+
children: error
|
|
19120
|
+
}
|
|
19121
|
+
),
|
|
19122
|
+
footer && /* @__PURE__ */ jsxRuntime.jsx(
|
|
19123
|
+
"div",
|
|
19124
|
+
{
|
|
19125
|
+
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__custom-footer`,
|
|
19126
|
+
children: footer
|
|
19127
|
+
}
|
|
19128
|
+
),
|
|
19129
|
+
showCount && /* @__PURE__ */ jsxRuntime.jsx(
|
|
19130
|
+
"span",
|
|
19131
|
+
{
|
|
19132
|
+
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__count`,
|
|
19133
|
+
children: maxLength ? `${characterCount}/${maxLength}` : characterCount
|
|
19134
|
+
}
|
|
19135
|
+
)
|
|
19136
|
+
]
|
|
19137
|
+
}
|
|
19138
|
+
)
|
|
19139
|
+
] });
|
|
19140
|
+
}
|
|
19141
|
+
);
|
|
19142
|
+
TextArea.displayName = "TextArea";
|
|
19143
|
+
|
|
19144
|
+
const CLASS$3 = `${COMPONENT_PREFIX$1}support-request-form`;
|
|
19145
|
+
const VACIO = { name: "", email: "", phone: "", subject: "", message: "" };
|
|
19146
|
+
function faltantes(v) {
|
|
19147
|
+
if (v.name.trim().length < 2) return "Escribe tu nombre.";
|
|
19148
|
+
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v.email.trim())) return "Escribe un correo v\xE1lido.";
|
|
19149
|
+
if (v.subject.trim().length < 3) return "Escribe de qu\xE9 se trata.";
|
|
19150
|
+
if (v.message.trim().length < 10) return "Cu\xE9ntanos un poco m\xE1s (al menos 10 caracteres).";
|
|
19151
|
+
return null;
|
|
19152
|
+
}
|
|
19153
|
+
const SupportRequestForm = ({
|
|
19154
|
+
title = "D\xE9janos tu solicitud",
|
|
19155
|
+
intro,
|
|
19156
|
+
note = "Te respondemos al correo que dejes.",
|
|
19157
|
+
initial,
|
|
19158
|
+
onSubmit,
|
|
19159
|
+
sent = false,
|
|
19160
|
+
sentLabel = "Solicitud enviada",
|
|
19161
|
+
submitLabel = "Enviar",
|
|
19162
|
+
className
|
|
19163
|
+
}) => {
|
|
19164
|
+
const [values, setValues] = React.useState({ ...VACIO, ...initial });
|
|
19165
|
+
const [error, setError] = React.useState(null);
|
|
19166
|
+
const [enviando, setEnviando] = React.useState(false);
|
|
19167
|
+
const set = (campo) => (e) => setValues((v) => ({ ...v, [campo]: e.target.value }));
|
|
19168
|
+
const enviar = async (e) => {
|
|
19169
|
+
e.preventDefault();
|
|
19170
|
+
if (sent || enviando) return;
|
|
19171
|
+
const falta = faltantes(values);
|
|
19172
|
+
if (falta) {
|
|
19173
|
+
setError(falta);
|
|
19174
|
+
return;
|
|
19175
|
+
}
|
|
19176
|
+
setError(null);
|
|
19177
|
+
setEnviando(true);
|
|
19178
|
+
try {
|
|
19179
|
+
await onSubmit({ ...values, name: values.name.trim(), email: values.email.trim(), phone: values.phone.trim(), subject: values.subject.trim(), message: values.message.trim() });
|
|
19180
|
+
} catch (err) {
|
|
19181
|
+
setError(err instanceof Error && err.message ? err.message : "No se pudo enviar. Int\xE9ntalo de nuevo.");
|
|
19182
|
+
} finally {
|
|
19183
|
+
setEnviando(false);
|
|
19184
|
+
}
|
|
19185
|
+
};
|
|
19186
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
19187
|
+
"form",
|
|
19188
|
+
{
|
|
19189
|
+
className: [CLASS$3, sent ? `${CLASS$3}--sent` : "", className].filter(Boolean).join(" "),
|
|
19190
|
+
onSubmit: enviar,
|
|
19191
|
+
noValidate: true,
|
|
19192
|
+
children: [
|
|
19193
|
+
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: `${CLASS$3}__title`, children: title }),
|
|
19194
|
+
intro && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$3}__intro`, children: intro }),
|
|
19195
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$3}__fields`, children: [
|
|
19196
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$3}__row`, children: [
|
|
19197
|
+
/* @__PURE__ */ jsxRuntime.jsx(Input$1, { label: "Nombre", value: values.name, onChange: set("name"), fullWidth: true, disabled: sent, autoComplete: "name" }),
|
|
19198
|
+
/* @__PURE__ */ jsxRuntime.jsx(Input$1, { label: "Tel\xE9fono (opcional)", value: values.phone, onChange: set("phone"), fullWidth: true, disabled: sent, inputMode: "tel", autoComplete: "tel" })
|
|
19199
|
+
] }),
|
|
19200
|
+
/* @__PURE__ */ jsxRuntime.jsx(Input$1, { label: "Correo", type: "email", value: values.email, onChange: set("email"), fullWidth: true, disabled: sent, inputMode: "email", autoComplete: "email" }),
|
|
19201
|
+
/* @__PURE__ */ jsxRuntime.jsx(Input$1, { label: "Asunto", value: values.subject, onChange: set("subject"), fullWidth: true, disabled: sent }),
|
|
19202
|
+
/* @__PURE__ */ jsxRuntime.jsx(TextArea, { label: "Mensaje", value: values.message, onChange: set("message"), fullWidth: true, disabled: sent, minRows: 3, maxLength: 4e3, showCount: true })
|
|
19203
|
+
] }),
|
|
19204
|
+
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$3}__error`, role: "alert", children: error }),
|
|
19205
|
+
sent ? /* @__PURE__ */ jsxRuntime.jsxs("p", { className: `${CLASS$3}__done`, role: "status", children: [
|
|
19206
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon$1, { type: ICON_TYPES.CHECK, size: "small" }),
|
|
19207
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: sentLabel })
|
|
19208
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
19209
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$3}__actions`, children: /* @__PURE__ */ jsxRuntime.jsx(Button, { type: "submit", variant: "primary", isLoading: enviando, disabled: enviando, children: submitLabel }) }),
|
|
19210
|
+
note && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$3}__note`, children: note })
|
|
19211
|
+
] })
|
|
19212
|
+
]
|
|
19213
|
+
}
|
|
19214
|
+
);
|
|
19215
|
+
};
|
|
19216
|
+
|
|
18967
19217
|
const FADE_AFTER_MS = 4e3;
|
|
18968
19218
|
const NewMessageDivider = ({
|
|
18969
19219
|
label = "Nuevo mensaje",
|
|
@@ -20910,174 +21160,6 @@ const Loader = React.forwardRef(
|
|
|
20910
21160
|
);
|
|
20911
21161
|
Loader.displayName = "LumiLoader";
|
|
20912
21162
|
|
|
20913
|
-
const TextArea = React.forwardRef(
|
|
20914
|
-
({
|
|
20915
|
-
label,
|
|
20916
|
-
error,
|
|
20917
|
-
status,
|
|
20918
|
-
variant = "outlined",
|
|
20919
|
-
fullWidth = false,
|
|
20920
|
-
size = "middle",
|
|
20921
|
-
allowClear = false,
|
|
20922
|
-
onClear,
|
|
20923
|
-
minRows = 3,
|
|
20924
|
-
maxRows,
|
|
20925
|
-
resize = "vertical",
|
|
20926
|
-
showCount = false,
|
|
20927
|
-
maxLength,
|
|
20928
|
-
footer,
|
|
20929
|
-
className = "",
|
|
20930
|
-
value,
|
|
20931
|
-
onChange,
|
|
20932
|
-
disabled,
|
|
20933
|
-
...props
|
|
20934
|
-
}, ref) => {
|
|
20935
|
-
const [internalValue, setInternalValue] = React.useState("");
|
|
20936
|
-
const textareaRef = React.useRef(null);
|
|
20937
|
-
React.useEffect(() => {
|
|
20938
|
-
if (value !== void 0) {
|
|
20939
|
-
setInternalValue(String(value));
|
|
20940
|
-
}
|
|
20941
|
-
}, [value]);
|
|
20942
|
-
const adjustHeight = React.useCallback(() => {
|
|
20943
|
-
const textarea = textareaRef.current;
|
|
20944
|
-
if (!textarea || resize === "none") return;
|
|
20945
|
-
textarea.style.height = "auto";
|
|
20946
|
-
const lineHeight = parseInt(getComputedStyle(textarea).lineHeight) || 20;
|
|
20947
|
-
const paddingY = 16;
|
|
20948
|
-
const minHeight = minRows * lineHeight + paddingY;
|
|
20949
|
-
const maxHeight = maxRows ? maxRows * lineHeight + paddingY : Infinity;
|
|
20950
|
-
const newHeight = Math.min(
|
|
20951
|
-
Math.max(textarea.scrollHeight, minHeight),
|
|
20952
|
-
maxHeight
|
|
20953
|
-
);
|
|
20954
|
-
textarea.style.height = `${newHeight}px`;
|
|
20955
|
-
}, [minRows, maxRows, resize]);
|
|
20956
|
-
React.useEffect(() => {
|
|
20957
|
-
if (resize !== "none") {
|
|
20958
|
-
adjustHeight();
|
|
20959
|
-
}
|
|
20960
|
-
}, [internalValue, adjustHeight, resize]);
|
|
20961
|
-
const handleChange = React.useCallback(
|
|
20962
|
-
(e) => {
|
|
20963
|
-
const newValue = e.target.value;
|
|
20964
|
-
if (maxLength && newValue.length > maxLength) {
|
|
20965
|
-
return;
|
|
20966
|
-
}
|
|
20967
|
-
setInternalValue(newValue);
|
|
20968
|
-
onChange?.(e);
|
|
20969
|
-
},
|
|
20970
|
-
[onChange, maxLength]
|
|
20971
|
-
);
|
|
20972
|
-
const handleClear = React.useCallback(() => {
|
|
20973
|
-
setInternalValue("");
|
|
20974
|
-
onClear?.();
|
|
20975
|
-
if (onChange && textareaRef.current) {
|
|
20976
|
-
const syntheticEvent = {
|
|
20977
|
-
target: { value: "" },
|
|
20978
|
-
currentTarget: { value: "" }
|
|
20979
|
-
};
|
|
20980
|
-
onChange(syntheticEvent);
|
|
20981
|
-
}
|
|
20982
|
-
textareaRef.current?.focus();
|
|
20983
|
-
}, [onChange, onClear]);
|
|
20984
|
-
const showClearIcon = Boolean(allowClear && internalValue && !disabled);
|
|
20985
|
-
const characterCount = internalValue.length;
|
|
20986
|
-
const wrapperClasses = [
|
|
20987
|
-
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper`,
|
|
20988
|
-
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--${variant}`,
|
|
20989
|
-
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--${size}`,
|
|
20990
|
-
error && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--error`,
|
|
20991
|
-
status && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--${status}`,
|
|
20992
|
-
fullWidth && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper--full-width`
|
|
20993
|
-
].filter(Boolean).join(" ");
|
|
20994
|
-
const textareaClasses = [
|
|
20995
|
-
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}`,
|
|
20996
|
-
`${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}--resize-${resize}`,
|
|
20997
|
-
showClearIcon && `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}--with-clear`,
|
|
20998
|
-
className
|
|
20999
|
-
].filter(Boolean).join(" ");
|
|
21000
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: wrapperClasses, children: [
|
|
21001
|
-
label && /* @__PURE__ */ jsxRuntime.jsx(
|
|
21002
|
-
"label",
|
|
21003
|
-
{
|
|
21004
|
-
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__label`,
|
|
21005
|
-
children: label
|
|
21006
|
-
}
|
|
21007
|
-
),
|
|
21008
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
21009
|
-
"div",
|
|
21010
|
-
{
|
|
21011
|
-
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__container`,
|
|
21012
|
-
children: [
|
|
21013
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
21014
|
-
"textarea",
|
|
21015
|
-
{
|
|
21016
|
-
ref: (node) => {
|
|
21017
|
-
textareaRef.current = node;
|
|
21018
|
-
if (typeof ref === "function") {
|
|
21019
|
-
ref(node);
|
|
21020
|
-
} else if (ref) {
|
|
21021
|
-
ref.current = node;
|
|
21022
|
-
}
|
|
21023
|
-
},
|
|
21024
|
-
className: textareaClasses,
|
|
21025
|
-
value: internalValue,
|
|
21026
|
-
onChange: handleChange,
|
|
21027
|
-
disabled,
|
|
21028
|
-
rows: minRows,
|
|
21029
|
-
maxLength,
|
|
21030
|
-
...props
|
|
21031
|
-
}
|
|
21032
|
-
),
|
|
21033
|
-
showClearIcon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
21034
|
-
Button,
|
|
21035
|
-
{
|
|
21036
|
-
variant: "ghost",
|
|
21037
|
-
size: "small",
|
|
21038
|
-
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__clear`,
|
|
21039
|
-
onClick: handleClear,
|
|
21040
|
-
"aria-label": "Clear textarea",
|
|
21041
|
-
icon: /* @__PURE__ */ jsxRuntime.jsx(Icon, { type: LUMI_ICON_TYPES.CLOSE, size: "small" })
|
|
21042
|
-
}
|
|
21043
|
-
)
|
|
21044
|
-
]
|
|
21045
|
-
}
|
|
21046
|
-
),
|
|
21047
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
21048
|
-
"div",
|
|
21049
|
-
{
|
|
21050
|
-
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__footer`,
|
|
21051
|
-
children: [
|
|
21052
|
-
error && /* @__PURE__ */ jsxRuntime.jsx(
|
|
21053
|
-
"span",
|
|
21054
|
-
{
|
|
21055
|
-
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__error`,
|
|
21056
|
-
children: error
|
|
21057
|
-
}
|
|
21058
|
-
),
|
|
21059
|
-
footer && /* @__PURE__ */ jsxRuntime.jsx(
|
|
21060
|
-
"div",
|
|
21061
|
-
{
|
|
21062
|
-
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__custom-footer`,
|
|
21063
|
-
children: footer
|
|
21064
|
-
}
|
|
21065
|
-
),
|
|
21066
|
-
showCount && /* @__PURE__ */ jsxRuntime.jsx(
|
|
21067
|
-
"span",
|
|
21068
|
-
{
|
|
21069
|
-
className: `${COMPONENT_PREFIX}${COMPONENT_TYPES.TEXTAREA}-wrapper__count`,
|
|
21070
|
-
children: maxLength ? `${characterCount}/${maxLength}` : characterCount
|
|
21071
|
-
}
|
|
21072
|
-
)
|
|
21073
|
-
]
|
|
21074
|
-
}
|
|
21075
|
-
)
|
|
21076
|
-
] });
|
|
21077
|
-
}
|
|
21078
|
-
);
|
|
21079
|
-
TextArea.displayName = "TextArea";
|
|
21080
|
-
|
|
21081
21163
|
const MenuContext = React.createContext(void 0);
|
|
21082
21164
|
const MenuProvider = MenuContext.Provider;
|
|
21083
21165
|
const useMenuContext = () => {
|
|
@@ -25417,6 +25499,7 @@ exports.ReactiveCrud = ReactiveCrud;
|
|
|
25417
25499
|
exports.ServiceShortcuts = ServiceShortcuts;
|
|
25418
25500
|
exports.ServicesMap = ServicesMap;
|
|
25419
25501
|
exports.SessionExpiryPrompt = SessionExpiryPrompt;
|
|
25502
|
+
exports.SupportRequestForm = SupportRequestForm;
|
|
25420
25503
|
exports.UserTools = UserTools;
|
|
25421
25504
|
exports.chatEventBus = chatEventBus;
|
|
25422
25505
|
exports.clearChatComponents = clearChatComponents;
|