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.
Files changed (216) hide show
  1. package/dist/components/molecules/chat/StructuredContent/components/ReactiveCrud/types.d.ts +2 -0
  2. package/dist/components/molecules/chat/StructuredContent/components/SupportRequestForm/SupportRequestForm.d.ts +25 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.esm.js +384 -302
  5. package/dist/index.js +384 -301
  6. package/dist/styles.css +1 -1
  7. package/dist/styles.css.map +1 -1
  8. package/package.json +1 -1
  9. package/src/styles/index.scss +1 -0
  10. package/dist/components/atoms/chat/AudioWaves/AudioWaves(1).d.ts +0 -21
  11. package/dist/components/atoms/chat/AudioWaves/index(1).d.ts +0 -2
  12. package/dist/components/atoms/chat/DateDivider/DateDivider(1).d.ts +0 -7
  13. package/dist/components/atoms/chat/Loader/Loader(1).d.ts +0 -10
  14. package/dist/components/atoms/chat/Loader/index(1).d.ts +0 -2
  15. package/dist/components/atoms/chat/Select/index(1).d.ts +0 -2
  16. package/dist/components/atoms/lumi/Button/Button(1).d.ts +0 -17
  17. package/dist/components/atoms/lumi/Checkbox/Checkbox(1).d.ts +0 -5
  18. package/dist/components/atoms/lumi/Checkbox/index(1).d.ts +0 -2
  19. package/dist/components/atoms/lumi/Checkbox/index(2).d.ts +0 -2
  20. package/dist/components/atoms/lumi/Checkbox/types(1).d.ts +0 -93
  21. package/dist/components/atoms/lumi/CurrencyDisplay/index(1).d.ts +0 -2
  22. package/dist/components/atoms/lumi/DateDisplay/index(1).d.ts +0 -2
  23. package/dist/components/atoms/lumi/DateDisplay/index(2).d.ts +0 -2
  24. package/dist/components/atoms/lumi/DateInput/DateInput(1).d.ts +0 -27
  25. package/dist/components/atoms/lumi/DateInput/WebDatePicker(1).d.ts +0 -19
  26. package/dist/components/atoms/lumi/DateInput/WebDatePicker(2).d.ts +0 -19
  27. package/dist/components/atoms/lumi/Icon/Icon(1).d.ts +0 -52
  28. package/dist/components/atoms/lumi/Input/index(1).d.ts +0 -3
  29. package/dist/components/atoms/lumi/Popover/index(1).d.ts +0 -2
  30. package/dist/components/atoms/lumi/Popover/types(1).d.ts +0 -62
  31. package/dist/components/atoms/lumi/TextArea/index(1).d.ts +0 -2
  32. package/dist/components/atoms/lumi/TextArea/types(1).d.ts +0 -35
  33. package/dist/components/atoms/lumi/TimeInput/TimeInput(1).d.ts +0 -27
  34. package/dist/components/atoms/lumi/TimeInput/TimeInput(2).d.ts +0 -27
  35. package/dist/components/molecules/chat/FullscreenViewer/hooks/useSwipeGestures(1).d.ts +0 -12
  36. package/dist/components/molecules/chat/StructuredContent/StructuredContent(1).d.ts +0 -10
  37. package/dist/components/molecules/chat/StructuredContent/components/Cart/Cart.d.ts +0 -3
  38. package/dist/components/molecules/chat/StructuredContent/components/ProductCard/ProductCard.d.ts +0 -3
  39. package/dist/components/molecules/chat/StructuredContent/components/ProductCarousel/ProductCarousel.d.ts +0 -3
  40. package/dist/components/molecules/chat/StructuredContent/components/ProductManager/ProductManager.d.ts +0 -3
  41. package/dist/components/molecules/chat/StructuredContent/components/ReactiveCrud/PriceNegotiationChat.d.ts +0 -4
  42. package/dist/components/molecules/chat/StructuredContent/components/ReactiveForm/DynamicField(1).d.ts +0 -13
  43. package/dist/components/molecules/chat/StructuredContent/components/ReactiveForm/buildYupSchema(1).d.ts +0 -4
  44. package/dist/components/molecules/chat/StructuredContent/components/ReactiveForm/types(1).d.ts +0 -91
  45. package/dist/components/molecules/chat/StructuredContent/components/ReactiveForm/useReactiveEndpoints(1).d.ts +0 -17
  46. package/dist/components/molecules/chat/StructuredContent/components/ReactiveForm/useReactiveEndpoints(2).d.ts +0 -23
  47. package/dist/components/molecules/chat/StructuredContent/components/ReactiveForm/useReactiveForm(1).d.ts +0 -38
  48. package/dist/components/molecules/chat/StructuredContent/components/ReactiveMap/ReactiveMap.d.ts +0 -12
  49. package/dist/components/molecules/chat/StructuredContent/components/ReactiveMap/ReactiveMapChat.d.ts +0 -3
  50. package/dist/components/molecules/chat/StructuredContent/components/ReactiveMap/types.d.ts +0 -36
  51. package/dist/components/molecules/chat/StructuredContent/components/ServiceShortcuts/ServiceShortcutsChat.d.ts +0 -3
  52. package/dist/components/molecules/chat/StructuredContent/helpers/contentParser(1).d.ts +0 -7
  53. package/dist/components/molecules/chat/StructuredContent/index(1).d.ts +0 -2
  54. package/dist/components/molecules/lumi/Breadcrumb/Breadcrumb(1).d.ts +0 -10
  55. package/dist/components/molecules/lumi/Breadcrumb/Breadcrumb(2).d.ts +0 -10
  56. package/dist/components/molecules/lumi/Breadcrumb/types(1).d.ts +0 -105
  57. package/dist/components/molecules/lumi/Checkbox/Checkbox(1).d.ts +0 -11
  58. package/dist/components/molecules/lumi/Checkbox/index(1).d.ts +0 -4
  59. package/dist/components/molecules/lumi/Checkbox/use-cases/index(1).d.ts +0 -1
  60. package/dist/components/molecules/lumi/Checkbox/validation-helpers(1).d.ts +0 -151
  61. package/dist/components/molecules/lumi/DateInput/FormDateInput(1).d.ts +0 -12
  62. package/dist/components/molecules/lumi/DateInput/index(1).d.ts +0 -2
  63. package/dist/components/molecules/lumi/DateInput/use-cases/FormDateInputClearWithResetUseCase(1).d.ts +0 -21
  64. package/dist/components/molecules/lumi/DateInput/use-cases/FormDateInputErrorVisibilityUseCase(1).d.ts +0 -21
  65. package/dist/components/molecules/lumi/Drawer/Drawer(1).d.ts +0 -39
  66. package/dist/components/molecules/lumi/Drawer/index(1).d.ts +0 -2
  67. package/dist/components/molecules/lumi/DropdownMenu/DropdownMenu(1).d.ts +0 -22
  68. package/dist/components/molecules/lumi/DropdownMenu/index(1).d.ts +0 -2
  69. package/dist/components/molecules/lumi/DropdownMenu/types(1).d.ts +0 -29
  70. package/dist/components/molecules/lumi/Filter/FilterRow(1).d.ts +0 -13
  71. package/dist/components/molecules/lumi/Filter/helpers/conditionHelpers(1).d.ts +0 -14
  72. package/dist/components/molecules/lumi/Filter/index(1).d.ts +0 -5
  73. package/dist/components/molecules/lumi/Filter/types(1).d.ts +0 -115
  74. package/dist/components/molecules/lumi/Input/Input(1).d.ts +0 -12
  75. package/dist/components/molecules/lumi/Menu/Menu(1).d.ts +0 -18
  76. package/dist/components/molecules/lumi/Menu/MenuContext(1).d.ts +0 -41
  77. package/dist/components/molecules/lumi/Menu/MenuItem(1).d.ts +0 -6
  78. package/dist/components/molecules/lumi/Menu/MenuItem(2).d.ts +0 -6
  79. package/dist/components/molecules/lumi/Menu/MenuItemGroup(1).d.ts +0 -6
  80. package/dist/components/molecules/lumi/Menu/SubMenu(1).d.ts +0 -6
  81. package/dist/components/molecules/lumi/Menu/iconHelper(1).d.ts +0 -15
  82. package/dist/components/molecules/lumi/Menu/index(1).d.ts +0 -8
  83. package/dist/components/molecules/lumi/Menu/index(2).d.ts +0 -8
  84. package/dist/components/molecules/lumi/Menu/types(1).d.ts +0 -119
  85. package/dist/components/molecules/lumi/Pagination/Pagination(1).d.ts +0 -4
  86. package/dist/components/molecules/lumi/Pagination/index(1).d.ts +0 -2
  87. package/dist/components/molecules/lumi/Select/Select(1).d.ts +0 -14
  88. package/dist/components/molecules/lumi/Select/Select(2).d.ts +0 -14
  89. package/dist/components/molecules/lumi/Select/Select(3).d.ts +0 -14
  90. package/dist/components/molecules/lumi/Select/index(1).d.ts +0 -2
  91. package/dist/components/molecules/lumi/Select/index(2).d.ts +0 -2
  92. package/dist/components/molecules/lumi/Select/use-cases/FormSelectClearWithResetUseCase(1).d.ts +0 -21
  93. package/dist/components/molecules/lumi/Select/use-cases/FormSelectClearWithResetUseCase(2).d.ts +0 -21
  94. package/dist/components/molecules/lumi/Select/use-cases/index(1).d.ts +0 -2
  95. package/dist/components/molecules/lumi/Select/use-cases/index(2).d.ts +0 -2
  96. package/dist/components/molecules/lumi/SessionExpiryPrompt/SessionExpiryPrompt.d.ts +0 -25
  97. package/dist/components/molecules/lumi/SessionExpiryPrompt/index.d.ts +0 -1
  98. package/dist/components/molecules/lumi/Table/Table(1).d.ts +0 -6
  99. package/dist/components/molecules/lumi/Table/Table(2).d.ts +0 -6
  100. package/dist/components/molecules/lumi/Table/index(1).d.ts +0 -2
  101. package/dist/components/molecules/lumi/Table/types(1).d.ts +0 -177
  102. package/dist/components/molecules/lumi/Table/types(2).d.ts +0 -177
  103. package/dist/components/molecules/lumi/Tabs/Tabs(1).d.ts +0 -4
  104. package/dist/components/molecules/lumi/Tabs/Tabs(2).d.ts +0 -4
  105. package/dist/components/molecules/lumi/Tabs/index(1).d.ts +0 -2
  106. package/dist/components/molecules/lumi/Tabs/index(2).d.ts +0 -2
  107. package/dist/components/molecules/lumi/TimeInput/FormTimeInput(1).d.ts +0 -12
  108. package/dist/components/molecules/lumi/TimeInput/use-cases/FormTimeInputClearWithResetUseCase(1).d.ts +0 -21
  109. package/dist/components/molecules/lumi/TimeInput/use-cases/FormTimeInputErrorVisibilityUseCase(1).d.ts +0 -21
  110. package/dist/components/molecules/lumi/TimeInput/use-cases/index(1).d.ts +0 -4
  111. package/dist/components/organisms/chat/Chat/Chat(1).d.ts +0 -12
  112. package/dist/components/organisms/chat/Chat/hooks/useChatHandlers(1).d.ts +0 -15
  113. package/dist/components/organisms/chat/Chat/hooks/useKeyboardLock(1).d.ts +0 -15
  114. package/dist/components/organisms/chat/Chat/index(1).d.ts +0 -3
  115. package/dist/components/organisms/chat/Chat/store/index(1).d.ts +0 -4
  116. package/dist/components/organisms/chat/Chat/use-cases/GroupMessagesByDateUseCase(1).d.ts +0 -20
  117. package/dist/components/organisms/chat/index(1).d.ts +0 -3
  118. package/dist/components/organisms/chat/index(2).d.ts +0 -3
  119. package/dist/components/organisms/lumi/ActionBar/ActionBar(1).d.ts +0 -18
  120. package/dist/components/organisms/lumi/ActionBar/types(1).d.ts +0 -57
  121. package/dist/components/organisms/lumi/BaseNavbar/types(1).d.ts +0 -34
  122. package/dist/components/organisms/lumi/BaseWorkspace/BaseWorkspace(1).d.ts +0 -28
  123. package/dist/components/organisms/lumi/BaseWorkspace/index(1).d.ts +0 -2
  124. package/dist/components/organisms/lumi/Calendar/components/CalendarEvent(1).d.ts +0 -18
  125. package/dist/components/organisms/lumi/Calendar/components/CalendarEvent(2).d.ts +0 -18
  126. package/dist/components/organisms/lumi/Calendar/components/CalendarEvent(3).d.ts +0 -18
  127. package/dist/components/organisms/lumi/Calendar/components/CalendarHeader(1).d.ts +0 -14
  128. package/dist/components/organisms/lumi/Calendar/components/TimeGutter(1).d.ts +0 -10
  129. package/dist/components/organisms/lumi/Calendar/components/TimeGutter(2).d.ts +0 -10
  130. package/dist/components/organisms/lumi/Calendar/hooks/index(1).d.ts +0 -4
  131. package/dist/components/organisms/lumi/Calendar/hooks/useCalendarHeight(1).d.ts +0 -58
  132. package/dist/components/organisms/lumi/Calendar/hooks/useCalendarHeight(2).d.ts +0 -58
  133. package/dist/components/organisms/lumi/Calendar/hooks/useEventLayout(1).d.ts +0 -21
  134. package/dist/components/organisms/lumi/Calendar/hooks/useEventLayout(2).d.ts +0 -21
  135. package/dist/components/organisms/lumi/Calendar/hooks/useTimeSlots(1).d.ts +0 -14
  136. package/dist/components/organisms/lumi/Calendar/hooks/useTimeSlots(2).d.ts +0 -14
  137. package/dist/components/organisms/lumi/Calendar/hooks/useTimeSlots(3).d.ts +0 -14
  138. package/dist/components/organisms/lumi/Calendar/i18n/index(1).d.ts +0 -1
  139. package/dist/components/organisms/lumi/Calendar/i18n/index(2).d.ts +0 -1
  140. package/dist/components/organisms/lumi/Calendar/i18n/translations(1).d.ts +0 -34
  141. package/dist/components/organisms/lumi/Calendar/index(1).d.ts +0 -2
  142. package/dist/components/organisms/lumi/Calendar/utils/dateUtils(1).d.ts +0 -140
  143. package/dist/components/organisms/lumi/Calendar/utils/dateUtils(2).d.ts +0 -140
  144. package/dist/components/organisms/lumi/Calendar/utils/index(1).d.ts +0 -2
  145. package/dist/components/organisms/lumi/Calendar/utils/multiDayUtils(1).d.ts +0 -73
  146. package/dist/components/organisms/lumi/Calendar/views/DayView(1).d.ts +0 -17
  147. package/dist/components/organisms/lumi/Calendar/views/DayView(2).d.ts +0 -17
  148. package/dist/components/organisms/lumi/Calendar/views/MonthView(1).d.ts +0 -17
  149. package/dist/components/organisms/lumi/Calendar/views/MonthView(2).d.ts +0 -17
  150. package/dist/components/organisms/lumi/Calendar/views/WeekView(1).d.ts +0 -19
  151. package/dist/components/organisms/lumi/Calendar/views/WeekView(2).d.ts +0 -19
  152. package/dist/components/organisms/lumi/Calendar/views/YearView(1).d.ts +0 -13
  153. package/dist/components/organisms/lumi/Calendar/views/index(1).d.ts +0 -4
  154. package/dist/components/organisms/lumi/Calendar/views/index(2).d.ts +0 -4
  155. package/dist/components/organisms/lumi/DashboardNavbar/index(1).d.ts +0 -7
  156. package/dist/components/organisms/lumi/DashboardNavbar/types(1).d.ts +0 -52
  157. package/dist/components/organisms/lumi/DashboardWorkspace/DashboardWorkspace(1).d.ts +0 -23
  158. package/dist/components/organisms/lumi/DashboardWorkspace/DashboardWorkspace(2).d.ts +0 -23
  159. package/dist/components/organisms/lumi/DashboardWorkspace/index(1).d.ts +0 -7
  160. package/dist/components/organisms/lumi/DashboardWorkspace/index(2).d.ts +0 -7
  161. package/dist/components/organisms/lumi/DashboardWorkspace/types(1).d.ts +0 -60
  162. package/dist/components/organisms/lumi/DashboardWorkspace/types(2).d.ts +0 -60
  163. package/dist/components/organisms/lumi/DynamicForm/DynamicForm(1).d.ts +0 -21
  164. package/dist/components/organisms/lumi/DynamicForm/helpers/fieldMapper(1).d.ts +0 -17
  165. package/dist/components/organisms/lumi/DynamicForm/helpers/fieldMapper(2).d.ts +0 -17
  166. package/dist/components/organisms/lumi/DynamicForm/helpers/fieldRenderer(1).d.ts +0 -6
  167. package/dist/components/organisms/lumi/DynamicForm/helpers/fieldRenderer(2).d.ts +0 -6
  168. package/dist/components/organisms/lumi/DynamicForm/index(1).d.ts +0 -2
  169. package/dist/components/organisms/lumi/DynamicForm/index(2).d.ts +0 -2
  170. package/dist/components/organisms/lumi/DynamicForm/types(1).d.ts +0 -96
  171. package/dist/components/organisms/lumi/DynamicForm/types(2).d.ts +0 -96
  172. package/dist/components/organisms/lumi/FormDrawer/FormDrawer(1).d.ts +0 -5
  173. package/dist/components/organisms/lumi/FormDrawer/index(1).d.ts +0 -3
  174. package/dist/components/organisms/lumi/FormDrawer/types(1).d.ts +0 -61
  175. package/dist/components/organisms/lumi/FormDrawer/types(2).d.ts +0 -61
  176. package/dist/components/organisms/lumi/Stepper/StepIndicator(1).d.ts +0 -4
  177. package/dist/components/organisms/lumi/Stepper/Stepper(1).d.ts +0 -5
  178. package/dist/components/organisms/lumi/Stepper/index(1).d.ts +0 -3
  179. package/dist/components/organisms/lumi/Stepper/types(1).d.ts +0 -96
  180. package/dist/components/organisms/lumi/Stepper/types(2).d.ts +0 -96
  181. package/dist/components/organisms/lumi/index(1).d.ts +0 -10
  182. package/dist/components/organisms/lumi/index(2).d.ts +0 -10
  183. package/dist/components/templates/chat/ChatWidget/ChatWidget(1).d.ts +0 -10
  184. package/dist/components/templates/chat/ChatWidget/hooks/index(1).d.ts +0 -1
  185. package/dist/components/templates/chat/ChatWidget/index(1).d.ts +0 -2
  186. package/dist/components/templates/chat/ChatWidget/index(2).d.ts +0 -2
  187. package/dist/components/templates/chat/ChatWidget/types(1).d.ts +0 -90
  188. package/dist/components/templates/lumi/Base/hooks/index(1).d.ts +0 -2
  189. package/dist/components/templates/lumi/Base/hooks/useAppHeight(1).d.ts +0 -21
  190. package/dist/components/templates/lumi/Base/index(1).d.ts +0 -2
  191. package/dist/components/templates/lumi/Base/types(1).d.ts +0 -54
  192. package/dist/components/templates/lumi/Crud/Crud(1).d.ts +0 -6
  193. package/dist/components/templates/lumi/Crud/Crud(2).d.ts +0 -6
  194. package/dist/components/templates/lumi/Crud/ScrollToEnd.d.ts +0 -18
  195. package/dist/components/templates/lumi/Crud/helpers/fieldMapper(1).d.ts +0 -13
  196. package/dist/components/templates/lumi/Crud/hooks/useCrudActions(1).d.ts +0 -11
  197. package/dist/components/templates/lumi/Crud/index(1).d.ts +0 -2
  198. package/dist/components/templates/lumi/Crud/store/actions(1).d.ts +0 -45
  199. package/dist/components/templates/lumi/Crud/store/crudStore(1).d.ts +0 -8
  200. package/dist/components/templates/lumi/Crud/store/index(1).d.ts +0 -5
  201. package/dist/components/templates/lumi/Crud/store/types(1).d.ts +0 -71
  202. package/dist/components/templates/lumi/Dashboard/Dashboard(1).d.ts +0 -25
  203. package/dist/components/templates/lumi/Dashboard/hooks/index(1).d.ts +0 -12
  204. package/dist/components/templates/lumi/Dashboard/hooks/index(2).d.ts +0 -12
  205. package/dist/components/templates/lumi/Dashboard/hooks/useDashboardStore(1).d.ts +0 -34
  206. package/dist/components/templates/lumi/Dashboard/hooks/useScrollToTop(1).d.ts +0 -47
  207. package/dist/components/templates/lumi/Dashboard/index(1).d.ts +0 -10
  208. package/dist/components/templates/lumi/Dashboard/store/storeKeys(1).d.ts +0 -13
  209. package/dist/components/templates/lumi/Dashboard/store/types(1).d.ts +0 -73
  210. package/dist/components/templates/lumi/Dashboard/store/types(2).d.ts +0 -73
  211. package/dist/components/templates/lumi/Dashboard/types(1).d.ts +0 -114
  212. package/dist/components/templates/lumi/Dashboard/types(2).d.ts +0 -114
  213. package/dist/components/templates/lumi/index(1).d.ts +0 -3
  214. package/dist/core/chat/ChatConfigContext(1).d.ts +0 -36
  215. package/dist/index(1).esm.js +0 -19378
  216. 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.toLowerCase().includes(searchValue.toLowerCase())
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$g = `${COMPONENT_PREFIX}field-value`;
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$g, `${CLASS$g}--${layout}`, className].filter(Boolean).join(" "), children: [
13216
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$g}__label`, children: label }),
13217
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$g}__value`, children })
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$f = `${COMPONENT_PREFIX}record-card`;
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$f, open ? `${CLASS$f}--open` : "", className].filter(Boolean).join(" "), children: [
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$f}__header`,
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$f}__heading`, children: [
13245
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$f}__title`, children: title }),
13246
- summary && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$f}__summary`, children: summary })
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$f}__chevron`,
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$f}__body`, id: cuerpoId, children: [
13262
+ open && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$g}__body`, id: cuerpoId, children: [
13262
13263
  children,
13263
- actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$f}__actions`, children: actions })
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$e = `${COMPONENT_PREFIX}crud-cards`;
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$e}__estado`, children: "Cargando..." });
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$e}__estado`, children: emptyText });
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$e, children: rows.map((row) => {
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$e}__accion`,
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$e}__motivo`, children: o.disabledReason })
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$d = `${COMPONENT_PREFIX}crud-scroll-end`;
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$d, onClick: alFinal, "aria-label": label, title: label, children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { type: "chevron-down", width: 18, height: 18, "aria-hidden": true }) });
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$c = "px-chat-reactive-crud__chat-link";
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$c, "aria-label": texto, title: texto, onClick: () => abrir(t.id), children: /* @__PURE__ */ jsxRuntime.jsx(Burbuja, {}) });
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$c,
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 d = new Date(String(value));
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$b = `${COMPONENT_PREFIX$1}file-field`;
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$b}${error ? ` ${CLASS$b}--error` : ""}`, children: [
14452
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$b}__label`, children: [
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$b}__box`, children: [
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$b}__native`,
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$b}__pick`, onClick: elegir, disabled, children: [
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$b}__pick-text`, children: entries.length === 0 ? multiple ? "Toca para elegir archivos" : "Toca para elegir un archivo" : multiple ? "A\xF1adir m\xE1s" : "Cambiar archivo" })
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$b}__list`, children: entries.map((e, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: `${CLASS$b}__item ${CLASS$b}__item--${e.status}`, children: [
14478
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$b}__kind`, "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(Icon$1, { type: iconoPorNombre(e.name), size: "small" }) }),
14479
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$b}__name`, children: e.name }),
14480
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$b}__state`, children: [
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$b}__remove`,
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$b}__error`, children: error }),
14499
- !error && subiendo && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$b}__hint`, children: "Espera a que terminen de subir." })
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] ? { uiProps: { notFoundContent: 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$a = `${COMPONENT_PREFIX$1}map-view`;
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$a, fullBleed && `${CLASS$a}--full-bleed`, className].filter(Boolean).join(" ");
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$a}__state ${CLASS$a}__state--error`, children: labels?.quotaText ?? "Se alcanz\xF3 el l\xEDmite diario de uso del mapa. Intenta ma\xF1ana." }) });
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$a}__state ${CLASS$a}__state--error`, children: labels?.errorText ?? "No se pudo cargar el mapa." }) });
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$a}__state`, children: labels?.loadingText ?? "Cargando mapa\u2026" }),
15965
- /* @__PURE__ */ jsxRuntime.jsx("div", { ref: nodeRef, className: `${CLASS$a}__canvas`, "aria-label": "Mapa", role: "application" }),
15966
- status === "ready" && list.length === 0 && allRoutes.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$a}__empty`, children: labels?.emptyText ?? "Sin ubicaciones para mostrar" }),
15967
- status === "ready" && onPointMove && list.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$a}__empty`, children: labels?.moveHint ?? "Arrastra el pin o toca el mapa para ajustar" }),
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$a}__expand`,
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$a}-fs`, role: "dialog", "aria-modal": "true", "aria-label": "Mapa", children: [
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$a}-fs__close`,
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$9 = `${COMPONENT_PREFIX$1}location-field`;
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$9}${error ? ` ${CLASS$9}--error` : ""}`, ref: boxRef, children: [
16184
- label && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$9}__label`, children: [
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$9}__row`, children: [
16197
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$a}__row`, children: [
16189
16198
  /* @__PURE__ */ jsxRuntime.jsx(
16190
16199
  "input",
16191
16200
  {
16192
- className: `${CLASS$9}__input`,
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$9}__gps`,
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$9}__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)) }),
16221
- error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$9}__error`, children: error }),
16222
- gps === "denied" && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$9}__hint ${CLASS$9}__hint--warn`, children: labels?.permissionDenied ?? "No diste permiso de ubicaci\xF3n. Puedes escribir la direcci\xF3n." }),
16223
- gps === "unavailable" && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$9}__hint ${CLASS$9}__hint--warn`, children: labels?.unavailable ?? "No pudimos obtener tu ubicaci\xF3n. Puedes escribir la direcci\xF3n." }),
16224
- hasPoint && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${CLASS$9}__confirm`, children: [
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$9}__hint`, children: labels?.confirmHint ?? "Verifica que el punto sea correcto." })
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$8 = `${COMPONENT_PREFIX$1}services-map`;
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$8} ${CLASS$8}--fill` : CLASS$8, children: rows === null ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$8}__state`, children: labels.loadingText ?? "Cargando ubicaciones\u2026" }) : nadaQueDibujar ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$8}__state`, children: lineaSinMapa(labels, missing, failed) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
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$8}__notes`, children: [
16998
- livePoints.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: `${CLASS$8}__note ${CLASS$8}__note--live`, children: [
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$8}__note`, children: ((missing === 1 ? labels.missingTextOne : void 0) ?? labels.missingText ?? "{n} sin ubicaci\xF3n registrada").replace("{n}", String(missing)) }),
17006
- outside > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$8}__note`, children: (labels.outsideText ?? "{n} fuera de la zona (aleja el mapa para verlos)").replace(
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$8}__note`, children: "No se pudieron cargar las ubicaciones." })
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$7 = `${COMPONENT_PREFIX$1}service-shortcuts`;
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$7, elegido ? `${CLASS$7}--used` : ""].filter(Boolean).join(" "), children: options.map((o) => {
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$7}__item`,
17088
- elegido ? `${CLASS$7}__item--off` : "",
17089
- esElegido ? `${CLASS$7}__item--chosen` : ""
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$7}__icon`, children: ICONS[o.icon] }),
17102
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$7}__text`, children: [
17103
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$7}__label`, children: o.label }),
17104
- o.hint && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$7}__hint`, children: o.hint })
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$7}__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" }) }) })
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$6 = `${COMPONENT_PREFIX$1}user-tools`;
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$6, className].filter(Boolean).join(" "), children: [
17679
- title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: `${CLASS$6}__title`, children: title }),
17680
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$6}__description`, children: description }),
17681
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: `${CLASS$6}__list`, children: items.map((item) => /* @__PURE__ */ jsxRuntime.jsx("li", { className: `${CLASS$6}__item`, children: item.kind === "action" ? (
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$6}__action`, children: [
17685
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$6}__text`, children: [
17686
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$6}__label`, children: item.label }),
17687
- item.hint && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$6}__hint`, children: item.hint })
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$6}__text`, children: [
17707
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$6}__label`, children: item.label }),
17708
- item.hint && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$6}__hint`, children: item.hint })
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$6}__empty`, children: "No hay herramientas disponibles por ahora." })
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$5 = `${COMPONENT_PREFIX$1}floating-actions`;
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$5}__group ${CLASS$5}__group--${align}`, children: buttons.map((b) => {
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$5}__slot`, children: [
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$5}__panel ${CLASS$5}__panel--${align}`, children: b.panel })
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$5}__slot`, children: [
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$5}__button`, b.active ? `${CLASS$5}__button--active` : ""].filter(Boolean).join(" "),
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$5}__badge`, children: b.badge })
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$5}__panel ${CLASS$5}__panel--${align}`, children: b.panel })
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$5, glass ? `${CLASS$5}--glass` : ""].filter(Boolean).join(" ");
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$4 = `${COMPONENT_PREFIX$1}photo-picker`;
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$4}${error ? ` ${CLASS$4}--error` : ""}`, children: [
18823
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$4}__label`, children: [
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$4}__native`,
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$4}__native`,
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$4}__grid`, children: entries.map((e, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: `${CLASS$4}__thumb ${CLASS$4}__thumb--${e.status}`, children: [
18855
- e.previewUrl ? /* @__PURE__ */ jsxRuntime.jsx("img", { className: `${CLASS$4}__img`, src: e.previewUrl, alt: e.name }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$4}__placeholder`, "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(Icon$1, { type: ICON_TYPES.IMAGE }) }),
18856
- e.status === "uploading" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$4}__state`, children: "Subiendo\u2026" }),
18857
- e.status === "error" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$4}__state ${CLASS$4}__state--error`, children: "No se pudo subir" }),
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$4}__remove`,
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$4}__actions`, children: [
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$4}__pick`,
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$4}__pick ${CLASS$4}__pick--secondary`,
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$4}__error`, children: error }),
18899
- !error && subiendo && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$4}__hint`, children: "Espera a que terminen de subir." }),
18900
- !error && !subiendo && hint && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$4}__hint`, children: hint })
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$3 = `${COMPONENT_PREFIX$1}credentials-card`;
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$3}__row`, children: [
18922
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$3}__label`, children: row.label }),
18923
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${CLASS$3}__value`, "data-testid": `credential-${row.label}`, children: visible ? row.value : "\u2022".repeat(Math.min(row.value.length, 12)) }),
18924
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `${CLASS$3}__tools`, children: [
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$3}__tool`,
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$3}__tool`,
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$3, className].filter(Boolean).join(" "), "aria-label": title, children: [
18959
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: `${CLASS$3}__title`, children: title }),
18960
- intro && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$3}__intro`, children: intro }),
18961
- /* @__PURE__ */ jsxRuntime.jsx("ul", { className: `${CLASS$3}__rows`, children: rows.map((r) => /* @__PURE__ */ jsxRuntime.jsx(Fila, { row: r }, r.label)) }),
18962
- note && /* @__PURE__ */ jsxRuntime.jsx("p", { className: `${CLASS$3}__note`, children: note }),
18963
- action && /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${CLASS$3}__action`, children: /* @__PURE__ */ jsxRuntime.jsx(Button, { fullWidth: true, onClick: action.onClick, disabled: action.disabled, children: action.label }) })
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;