@empathyco/x-components 8.13.3 → 8.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,21 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [8.14.0](https://github.com/empathyco/x/compare/@empathyco/x-components@8.13.4...@empathyco/x-components@8.14.0) (2026-08-28)
7
+
8
+ ### Features
9
+
10
+ * **skills:** add basic agent skills (skills-npm convention) to all publishable packages (#2164)
11
+
12
+
13
+ ## [8.13.4](https://github.com/empathyco/x/compare/@empathyco/x-components@8.13.3...@empathyco/x-components@8.13.4) (2026-08-27)
14
+
15
+ **Note:** Version bump only for package @empathyco/x-components
16
+
17
+
18
+
19
+
20
+
6
21
  ## [8.13.3](https://github.com/empathyco/x/compare/@empathyco/x-components@8.13.2...@empathyco/x-components@8.13.3) (2026-08-25)
7
22
 
8
23
  ### Code Refactoring
package/js/x-bus/x-bus.js CHANGED
@@ -110,6 +110,10 @@ class XPriorityBus {
110
110
  metadata: eventMetadata,
111
111
  };
112
112
  emitter.next(payloadObj);
113
+ if (this.isXDebugEnabled()) {
114
+ // eslint-disable-next-line no-console
115
+ console.debug('XEvent', key, payloadObj);
116
+ }
113
117
  this.emitCallbacks.forEach(callback => {
114
118
  callback(key, payloadObj);
115
119
  });
@@ -129,6 +133,18 @@ class XPriorityBus {
129
133
  this.pendingPopsIds.forEach(clearTimeout);
130
134
  this.pendingPopsIds.length = 0;
131
135
  }
136
+ /**
137
+ * Checks whether the `xdebug` query param is set to `true` in the current URL, to
138
+ * enable debug logging of the emitted events.
139
+ *
140
+ * @returns True if the `xdebug` query param is set to `true` in the URL.
141
+ *
142
+ * @internal
143
+ */
144
+ isXDebugEnabled() {
145
+ return (typeof window !== 'undefined' &&
146
+ new URLSearchParams(window.location.search).get('xdebug') === 'true');
147
+ }
132
148
  /**
133
149
  * Retrieves an observable for the event. See {@link XBus.on}.
134
150
  *
@@ -1 +1 @@
1
- {"version":3,"file":"x-bus.js","sources":["../../../src/x-bus/x-bus.ts"],"sourcesContent":["import type { AnyFunction, Dictionary } from '@empathyco/x-utils'\nimport type { Observable } from 'rxjs'\nimport type {\n EmittedData,\n Emitter,\n Emitters,\n EventPayload,\n Priority,\n SubjectPayload,\n XBus,\n XPriorityBusEventMetadata,\n XPriorityQueueNodeData,\n} from './x-bus.types'\nimport type { XPriorityQueue } from './x-priority-queue.types'\nimport { ReplaySubject } from 'rxjs'\nimport { map } from 'rxjs/operators'\nimport { BaseXPriorityQueue } from './x-priority-queue'\n\n/**\n * A default {@link XBus} implementation using a\n * {@link XPriorityQueue | priority queue} as its data structure to\n * prioritise the emission of events. The priorities are preconfigured based on event naming.\n *\n * @public\n */\nexport class XPriorityBus<\n SomeEvents extends Dictionary,\n SomeEventMetadata extends XPriorityBusEventMetadata,\n> implements XBus<SomeEvents, SomeEventMetadata> {\n /**\n * A {@link XPriorityQueue | priority queue} to store the events to\n * emit.\n *\n * @internal\n */\n protected queue: XPriorityQueue<SomeEvents, XPriorityQueueNodeData<SomeEvents, SomeEventMetadata>>\n\n /**\n * A dictionary associating a priority to a key.\n *\n * @example\n * ```ts\n * const priorities: Dictionary<number> = {\n * '^StartsWith': 2,\n * Contains: 4,\n * EndWith$: 8\n * }\n * ```\n *\n * @internal\n */\n protected priorities: Dictionary<Priority>\n\n /**\n * The default value to use as priority for an event that doesn't have defined neither a custom\n * priority nor its name doesn't match any key of the {@link XPriorityBus.priorities | priorities} dictionary.\n *\n * @internal\n */\n protected defaultEventPriority: number\n\n /**\n * A list of functions to execute when an event is emitted.\n *\n * @internal\n */\n protected emitCallbacks: AnyFunction[]\n\n /**\n * A dictionary to store the created event emitters.\n *\n * @internal\n */\n protected emitters: Emitters<SomeEvents, SomeEventMetadata> = {}\n\n /**\n * A pending flush operation timeout identifier or undefined if there's none pending.\n *\n * @internal\n */\n protected pendingFlushId?: number\n\n /**\n * A list of pending pop operations timeout identifiers.\n *\n * @internal\n */\n protected pendingPopsIds: number[] = []\n\n /**\n * Creates a new instance of a {@link XPriorityBus}.\n *\n * @param config - A configuration object to initialise the bus.\n * - param config.queue - A {@link XPriorityQueue | priority queue} to store the events.\n * - param config.priorities - A Dictionary defining the priorities associated to a given string.\n * - param config.emitCallbacks - A list of functions to execute when an event is emitted.\n * - param config.defaultEventPriority - A default priority to assigned to an event.\n */\n public constructor(\n config: {\n queue?: XPriorityQueue<SomeEvents, XPriorityQueueNodeData<SomeEvents, SomeEventMetadata>>\n priorities?: Dictionary<number>\n emitCallbacks?: AnyFunction[]\n defaultEventPriority?: number\n } = {},\n ) {\n this.queue =\n config.queue ??\n new BaseXPriorityQueue<SomeEvents, XPriorityQueueNodeData<SomeEvents, SomeEventMetadata>>()\n this.priorities = config.priorities ?? {}\n this.emitCallbacks = config.emitCallbacks ?? []\n this.defaultEventPriority = config.defaultEventPriority ?? Number.MIN_SAFE_INTEGER\n }\n\n /**\n * Emits an event. See {@link XBus.emit}.\n *\n * @param event - Event to be emitted.\n * @param payload - Event payload.\n * @param metadata - Extra event data.\n *\n * @returns A promise that is resolved the moment the event is emitted.\n */\n // eslint-disable-next-line ts/promise-function-async\n emit<SomeEvent extends keyof SomeEvents>(\n event: SomeEvent,\n // TODO: Fix optional argument.\n payload?: EventPayload<SomeEvents, SomeEvent>,\n metadata = {} as SomeEventMetadata,\n ): Promise<EmittedData<SomeEvents, SomeEvent, SomeEventMetadata>> {\n return new Promise(resolve => {\n this.queue.push(event, this.getEventPriority(event, metadata), {\n // This type assertion is done because payload is optional.\n eventPayload: payload as EventPayload<SomeEvents, SomeEvent>,\n eventMetadata: metadata,\n replaceable: metadata.replaceable || false,\n // @ts-expect-error TODO: Fix type.\n resolve,\n })\n\n this.flushQueue()\n })\n }\n\n /**.\n * Retrieves the event priority based on:\n * - the defined event metadata priority\n * - the priority associated to the matching preconfigured priority key\n * - the configured {@link XPriorityBus.defaultEventPriority | defaultEventPriority} is assigned (by default, the min safe integer).\n *\n * @param event - The event to get the priority from.\n * @param metadata - The event metadata.\n *\n * @returns The priority for the given event.\n *\n * @internal\n */\n protected getEventPriority(event: keyof SomeEvents, metadata: SomeEventMetadata): Priority {\n if (metadata.priority != null) {\n return metadata.priority\n }\n\n const matchingKey = Object.keys(this.priorities).find(key => String(event).includes(key))\n if (matchingKey) {\n return this.priorities[matchingKey]\n }\n\n return this.defaultEventPriority\n }\n\n /**\n * Processes the events stored in the\n * {@link XPriorityQueue | priority queue} and resolves each event\n * whenever it is emitted.\n *\n * @remarks If another 'flushQueue' operation is running, it is discarded and a new one is\n * executed. The pending popping operations are also discarded.\n *\n * @internal\n */\n protected flushQueue(): void {\n clearTimeout(this.pendingFlushId)\n this.clearPendingPopsIds()\n\n this.pendingFlushId = window.setTimeout(() => {\n for (let i = 0; i < this.queue.size(); ++i) {\n const popTimeoutId = window.setTimeout(() => {\n const {\n key,\n data: { eventPayload, eventMetadata, resolve },\n } = this.queue.pop()!\n const emitter = this.getEmitter(key)\n const payloadObj = {\n eventPayload,\n metadata: eventMetadata,\n }\n\n emitter.next(payloadObj)\n\n this.emitCallbacks.forEach(callback => {\n callback(key, payloadObj)\n })\n resolve({ event: key, ...payloadObj })\n\n this.pendingPopsIds = this.pendingPopsIds.filter(timeoutId => timeoutId !== popTimeoutId)\n })\n\n this.pendingPopsIds.push(popTimeoutId)\n }\n })\n }\n\n /**\n * Discards existing pending pop operations and empties the array.\n *\n * @internal\n */\n private clearPendingPopsIds(): void {\n this.pendingPopsIds.forEach(clearTimeout)\n this.pendingPopsIds.length = 0\n }\n\n /**\n * Retrieves an observable for the event. See {@link XBus.on}.\n *\n * @param event - Event to retrieve the observable for.\n * @param withMetadata - Option to retrieve an observable with extra data about the event.\n *\n * @returns The emitter for the event passed.\n */\n on<SomeEvent extends keyof SomeEvents>(\n event: SomeEvent,\n withMetadata = false,\n ): typeof withMetadata extends true\n ? Observable<SubjectPayload<EventPayload<SomeEvents, SomeEvent>, SomeEventMetadata>>\n : Observable<EventPayload<SomeEvents, SomeEvent>> {\n // TODO: This type should work, but inference isn't working as expected. Check when updating ts.\n return withMetadata\n ? // @ts-expect-error Type is not assignable to type EventPayload<SomeEvents, SomeEvent\n this.getEmitter(event).asObservable()\n : this.getEmitter(event).pipe(\n map<\n SubjectPayload<EventPayload<SomeEvents, SomeEvent>, SomeEventMetadata>,\n EventPayload<SomeEvents, SomeEvent>\n >(value => value.eventPayload),\n )\n }\n\n /**\n * Retrieves an event {@link Emitter} for the given event.\n *\n * @param event - The event to retrieve the {@link Emitter} for.\n *\n * @returns The {@link Emitters} for the passed event.\n *\n * @internal\n */\n protected getEmitter<SomeEvent extends keyof SomeEvents>(\n event: SomeEvent,\n ): Emitter<SomeEvents, SomeEvent, SomeEventMetadata> {\n if (!this.emitters[event]) {\n this.createEmitter(event)\n }\n\n return this.emitters[event]!\n }\n\n /**\n * Creates an event {@link Emitter} for the given event.\n *\n * @remarks The emitter is implemented with a\n * {@Link https://www.learnrxjs.io/learn-rxjs/subjects/replaysubject | ReplaySubject} to allow any\n * new subscriber receive the last emitted value.\n *\n * @param event - The event to create the {@link Emitter} for.\n *\n * @internal\n */\n protected createEmitter<SomeEvent extends keyof SomeEvents>(event: SomeEvent): void {\n this.emitters[event] = new ReplaySubject<\n SubjectPayload<EventPayload<SomeEvents, SomeEvent>, SomeEventMetadata>\n >(1)\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"x-bus.js","sources":["../../../src/x-bus/x-bus.ts"],"sourcesContent":["import type { AnyFunction, Dictionary } from '@empathyco/x-utils'\nimport type { Observable } from 'rxjs'\nimport type {\n EmittedData,\n Emitter,\n Emitters,\n EventPayload,\n Priority,\n SubjectPayload,\n XBus,\n XPriorityBusEventMetadata,\n XPriorityQueueNodeData,\n} from './x-bus.types'\nimport type { XPriorityQueue } from './x-priority-queue.types'\nimport { ReplaySubject } from 'rxjs'\nimport { map } from 'rxjs/operators'\nimport { BaseXPriorityQueue } from './x-priority-queue'\n\n/**\n * A default {@link XBus} implementation using a\n * {@link XPriorityQueue | priority queue} as its data structure to\n * prioritise the emission of events. The priorities are preconfigured based on event naming.\n *\n * @public\n */\nexport class XPriorityBus<\n SomeEvents extends Dictionary,\n SomeEventMetadata extends XPriorityBusEventMetadata,\n> implements XBus<SomeEvents, SomeEventMetadata> {\n /**\n * A {@link XPriorityQueue | priority queue} to store the events to\n * emit.\n *\n * @internal\n */\n protected queue: XPriorityQueue<SomeEvents, XPriorityQueueNodeData<SomeEvents, SomeEventMetadata>>\n\n /**\n * A dictionary associating a priority to a key.\n *\n * @example\n * ```ts\n * const priorities: Dictionary<number> = {\n * '^StartsWith': 2,\n * Contains: 4,\n * EndWith$: 8\n * }\n * ```\n *\n * @internal\n */\n protected priorities: Dictionary<Priority>\n\n /**\n * The default value to use as priority for an event that doesn't have defined neither a custom\n * priority nor its name doesn't match any key of the {@link XPriorityBus.priorities | priorities} dictionary.\n *\n * @internal\n */\n protected defaultEventPriority: number\n\n /**\n * A list of functions to execute when an event is emitted.\n *\n * @internal\n */\n protected emitCallbacks: AnyFunction[]\n\n /**\n * A dictionary to store the created event emitters.\n *\n * @internal\n */\n protected emitters: Emitters<SomeEvents, SomeEventMetadata> = {}\n\n /**\n * A pending flush operation timeout identifier or undefined if there's none pending.\n *\n * @internal\n */\n protected pendingFlushId?: number\n\n /**\n * A list of pending pop operations timeout identifiers.\n *\n * @internal\n */\n protected pendingPopsIds: number[] = []\n\n /**\n * Creates a new instance of a {@link XPriorityBus}.\n *\n * @param config - A configuration object to initialise the bus.\n * - param config.queue - A {@link XPriorityQueue | priority queue} to store the events.\n * - param config.priorities - A Dictionary defining the priorities associated to a given string.\n * - param config.emitCallbacks - A list of functions to execute when an event is emitted.\n * - param config.defaultEventPriority - A default priority to assigned to an event.\n */\n public constructor(\n config: {\n queue?: XPriorityQueue<SomeEvents, XPriorityQueueNodeData<SomeEvents, SomeEventMetadata>>\n priorities?: Dictionary<number>\n emitCallbacks?: AnyFunction[]\n defaultEventPriority?: number\n } = {},\n ) {\n this.queue =\n config.queue ??\n new BaseXPriorityQueue<SomeEvents, XPriorityQueueNodeData<SomeEvents, SomeEventMetadata>>()\n this.priorities = config.priorities ?? {}\n this.emitCallbacks = config.emitCallbacks ?? []\n this.defaultEventPriority = config.defaultEventPriority ?? Number.MIN_SAFE_INTEGER\n }\n\n /**\n * Emits an event. See {@link XBus.emit}.\n *\n * @param event - Event to be emitted.\n * @param payload - Event payload.\n * @param metadata - Extra event data.\n *\n * @returns A promise that is resolved the moment the event is emitted.\n */\n // eslint-disable-next-line ts/promise-function-async\n emit<SomeEvent extends keyof SomeEvents>(\n event: SomeEvent,\n // TODO: Fix optional argument.\n payload?: EventPayload<SomeEvents, SomeEvent>,\n metadata = {} as SomeEventMetadata,\n ): Promise<EmittedData<SomeEvents, SomeEvent, SomeEventMetadata>> {\n return new Promise(resolve => {\n this.queue.push(event, this.getEventPriority(event, metadata), {\n // This type assertion is done because payload is optional.\n eventPayload: payload as EventPayload<SomeEvents, SomeEvent>,\n eventMetadata: metadata,\n replaceable: metadata.replaceable || false,\n // @ts-expect-error TODO: Fix type.\n resolve,\n })\n\n this.flushQueue()\n })\n }\n\n /**.\n * Retrieves the event priority based on:\n * - the defined event metadata priority\n * - the priority associated to the matching preconfigured priority key\n * - the configured {@link XPriorityBus.defaultEventPriority | defaultEventPriority} is assigned (by default, the min safe integer).\n *\n * @param event - The event to get the priority from.\n * @param metadata - The event metadata.\n *\n * @returns The priority for the given event.\n *\n * @internal\n */\n protected getEventPriority(event: keyof SomeEvents, metadata: SomeEventMetadata): Priority {\n if (metadata.priority != null) {\n return metadata.priority\n }\n\n const matchingKey = Object.keys(this.priorities).find(key => String(event).includes(key))\n if (matchingKey) {\n return this.priorities[matchingKey]\n }\n\n return this.defaultEventPriority\n }\n\n /**\n * Processes the events stored in the\n * {@link XPriorityQueue | priority queue} and resolves each event\n * whenever it is emitted.\n *\n * @remarks If another 'flushQueue' operation is running, it is discarded and a new one is\n * executed. The pending popping operations are also discarded.\n *\n * @internal\n */\n protected flushQueue(): void {\n clearTimeout(this.pendingFlushId)\n this.clearPendingPopsIds()\n\n this.pendingFlushId = window.setTimeout(() => {\n for (let i = 0; i < this.queue.size(); ++i) {\n const popTimeoutId = window.setTimeout(() => {\n const {\n key,\n data: { eventPayload, eventMetadata, resolve },\n } = this.queue.pop()!\n const emitter = this.getEmitter(key)\n const payloadObj = {\n eventPayload,\n metadata: eventMetadata,\n }\n\n emitter.next(payloadObj)\n\n if (this.isXDebugEnabled()) {\n // eslint-disable-next-line no-console\n console.debug('XEvent', key, payloadObj)\n }\n\n this.emitCallbacks.forEach(callback => {\n callback(key, payloadObj)\n })\n resolve({ event: key, ...payloadObj })\n\n this.pendingPopsIds = this.pendingPopsIds.filter(timeoutId => timeoutId !== popTimeoutId)\n })\n\n this.pendingPopsIds.push(popTimeoutId)\n }\n })\n }\n\n /**\n * Discards existing pending pop operations and empties the array.\n *\n * @internal\n */\n private clearPendingPopsIds(): void {\n this.pendingPopsIds.forEach(clearTimeout)\n this.pendingPopsIds.length = 0\n }\n\n /**\n * Checks whether the `xdebug` query param is set to `true` in the current URL, to\n * enable debug logging of the emitted events.\n *\n * @returns True if the `xdebug` query param is set to `true` in the URL.\n *\n * @internal\n */\n private isXDebugEnabled(): boolean {\n return (\n typeof window !== 'undefined' &&\n new URLSearchParams(window.location.search).get('xdebug') === 'true'\n )\n }\n\n /**\n * Retrieves an observable for the event. See {@link XBus.on}.\n *\n * @param event - Event to retrieve the observable for.\n * @param withMetadata - Option to retrieve an observable with extra data about the event.\n *\n * @returns The emitter for the event passed.\n */\n on<SomeEvent extends keyof SomeEvents>(\n event: SomeEvent,\n withMetadata = false,\n ): typeof withMetadata extends true\n ? Observable<SubjectPayload<EventPayload<SomeEvents, SomeEvent>, SomeEventMetadata>>\n : Observable<EventPayload<SomeEvents, SomeEvent>> {\n // TODO: This type should work, but inference isn't working as expected. Check when updating ts.\n return withMetadata\n ? // @ts-expect-error Type is not assignable to type EventPayload<SomeEvents, SomeEvent\n this.getEmitter(event).asObservable()\n : this.getEmitter(event).pipe(\n map<\n SubjectPayload<EventPayload<SomeEvents, SomeEvent>, SomeEventMetadata>,\n EventPayload<SomeEvents, SomeEvent>\n >(value => value.eventPayload),\n )\n }\n\n /**\n * Retrieves an event {@link Emitter} for the given event.\n *\n * @param event - The event to retrieve the {@link Emitter} for.\n *\n * @returns The {@link Emitters} for the passed event.\n *\n * @internal\n */\n protected getEmitter<SomeEvent extends keyof SomeEvents>(\n event: SomeEvent,\n ): Emitter<SomeEvents, SomeEvent, SomeEventMetadata> {\n if (!this.emitters[event]) {\n this.createEmitter(event)\n }\n\n return this.emitters[event]!\n }\n\n /**\n * Creates an event {@link Emitter} for the given event.\n *\n * @remarks The emitter is implemented with a\n * {@Link https://www.learnrxjs.io/learn-rxjs/subjects/replaysubject | ReplaySubject} to allow any\n * new subscriber receive the last emitted value.\n *\n * @param event - The event to create the {@link Emitter} for.\n *\n * @internal\n */\n protected createEmitter<SomeEvent extends keyof SomeEvents>(event: SomeEvent): void {\n this.emitters[event] = new ReplaySubject<\n SubjectPayload<EventPayload<SomeEvents, SomeEvent>, SomeEventMetadata>\n >(1)\n }\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@empathyco/x-components",
3
- "version": "8.13.3",
3
+ "version": "8.14.0",
4
4
  "description": "Empathy X Components",
5
5
  "author": "Empathy Systems Corporation S.L.",
6
6
  "license": "Apache-2.0",
@@ -67,10 +67,10 @@
67
67
  "vuex": "4.0.2"
68
68
  },
69
69
  "dependencies": {
70
- "@empathyco/x-adapter": "8.1.9",
71
- "@empathyco/x-adapter-platform": "1.9.2",
72
- "@empathyco/x-types": "10.8.1",
73
- "@empathyco/x-utils": "1.0.10",
70
+ "@empathyco/x-adapter": "8.2.0",
71
+ "@empathyco/x-adapter-platform": "1.10.0",
72
+ "@empathyco/x-types": "10.9.0",
73
+ "@empathyco/x-utils": "1.1.0",
74
74
  "@vue/devtools-api": "~6.6.4",
75
75
  "@vueuse/core": "~12.8.2",
76
76
  "js-md5": "~0.8.3",
@@ -82,7 +82,7 @@
82
82
  },
83
83
  "devDependencies": {
84
84
  "@babel/preset-env": "8.0.2",
85
- "@empathyco/x-design-system": "1.0.8",
85
+ "@empathyco/x-design-system": "1.1.0",
86
86
  "@microsoft/api-documenter": "7.30.7",
87
87
  "@microsoft/api-extractor": "7.58.9",
88
88
  "@tailwindcss/vite": "4.3.1",
@@ -117,5 +117,5 @@
117
117
  "access": "public",
118
118
  "directory": "dist"
119
119
  },
120
- "gitHead": "561345b69c6b6c35912578460353262ce67fdb11"
120
+ "gitHead": "8c0652d19cb33994ce6221c0cd1f36a9e1acdec6"
121
121
  }
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: x-components
3
+ description: 'Use when importing, using, or debugging components from x-components.'
4
+ ---
5
+
6
+ # x-components
7
+
8
+ Biblioteca de componentes Vue 3 para combinar y crear tu propia experiencia de búsqueda (o cualquier otra interfaz). También se documenta en https://docs.empathy.co (build search UI → web x components).
9
+
10
+ ## Componentes disponibles
11
+
12
+ - `AutoProgressBar` — barra de progreso automática para peticiones en curso.
13
+ - `BaseDropdown` — dropdown reutilizable con items.
14
+ - `BaseEventButton` — botón que emite eventos al hacer clic.
15
+ - `BaseGrid` — grid para mostrar una lista de results.
16
+ - `BaseKeyboardNavigation` — navegación por teclado dentro de un componente.
17
+ - `BaseRating` — valoración tipo estrellas.
18
+ - `BaseSlider` — slider (basado en noUiSlider) para rangos numéricos.
19
+ - `BaseSwitch` — switch/toggle accesible.
20
+ - `BaseTeleport` — wrapper para teleportar contenido.
21
+ - `BaseVariableColumnGrid` — grid con número de columnas variable.
22
+ - `BaseColumnPickerDropdown` / `BaseColumnPickerList` — selectores de columnas del grid.
23
+ - `BaseCurrency` — formatea un precio en la divisa configurada.
24
+ - `Highlight` — resalta el texto de una query dentro de un resultado.
25
+ - `ItemsList` — lista básica de items (suggestions, etc.).
26
+ - `Message` — mensaje de estado (loading, error, vacío).
27
+ - `PageLoaderButton` — botón para cargar la siguiente página.
28
+ - `PageSelector` — selector de página del paginador.
29
+ - `SlidingPanel` — panel lateral deslizante.
30
+ - `BaseTogglePanel` / `BaseHeaderTogglePanel` / `BaseTabsPanel` / `BaseIdTogglePanel` — paneles colapsables y por pestañas.
31
+ - `BaseModal` / `MainModal` — modales con eventos de abrir/cerrar.
32
+ - `SortDropdown` / `SortList` / `SortPickerList` — selectores de ordenación.
33
+ - `BaseSuggestions` / `BaseSuggestion` — lista e item de sugerencias.
34
+ - `BaseResult*` — piezas del resultado: `image`, `fallback-image`, `placeholder-image`, `current-price`, `previous-price`, `rating`, `link`, `add-to-cart`.
35
+ - `ResultVariantSelector` / `ResultVariantsProvider` — selección de variantes de producto.
36
+ - `BaseScroll` — scroll con estado de posición.
37
+ - `SnippetCallbacks` — callbacks de ciclo de vida del snippet.
38
+ - `LocationProvider` / `DisplayClickProvider` / `DisplayEmitter` — providers/emitter de contexto.
39
+ - `GlobalXBus` — instancia global del X-Bus de eventos.
40
+ - `Icons` — iconos SVG inline (search, cart, chevron, sort, etc.).
41
+ - `Animations` — animaciones reutilizables (fade, cross-fade, collapse, staggered, etc.).
42
+
43
+ ## Instalación
44
+
45
+ ```
46
+ npm install @empathyco/x-components
47
+ ```
@@ -119,6 +119,15 @@ export declare class XPriorityBus<SomeEvents extends Dictionary, SomeEventMetada
119
119
  * @internal
120
120
  */
121
121
  private clearPendingPopsIds;
122
+ /**
123
+ * Checks whether the `xdebug` query param is set to `true` in the current URL, to
124
+ * enable debug logging of the emitted events.
125
+ *
126
+ * @returns True if the `xdebug` query param is set to `true` in the URL.
127
+ *
128
+ * @internal
129
+ */
130
+ private isXDebugEnabled;
122
131
  /**
123
132
  * Retrieves an observable for the event. See {@link XBus.on}.
124
133
  *
@@ -1 +1 @@
1
- {"version":3,"file":"x-bus.d.ts","sourceRoot":"","sources":["../../../../src/x-bus/x-bus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACtC,OAAO,KAAK,EACV,WAAW,EACX,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,IAAI,EACJ,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAK9D;;;;;;GAMG;AACH,qBAAa,YAAY,CACvB,UAAU,SAAS,UAAU,EAC7B,iBAAiB,SAAS,yBAAyB,CACnD,YAAW,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC;IAC9C;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,UAAU,EAAE,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAA;IAElG;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAA;IAE1C;;;;;OAKG;IACH,SAAS,CAAC,oBAAoB,EAAE,MAAM,CAAA;IAEtC;;;;OAIG;IACH,SAAS,CAAC,aAAa,EAAE,WAAW,EAAE,CAAA;IAEtC;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAK;IAEhE;;;;OAIG;IACH,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAEjC;;;;OAIG;IACH,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,CAAK;IAEvC;;;;;;;;OAQG;gBAED,MAAM,GAAE;QACN,KAAK,CAAC,EAAE,cAAc,CAAC,UAAU,EAAE,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAA;QACzF,UAAU,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;QAC/B,aAAa,CAAC,EAAE,WAAW,EAAE,CAAA;QAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAA;KACzB;IAUR;;;;;;;;OAQG;IAEH,IAAI,CAAC,SAAS,SAAS,MAAM,UAAU,EACrC,KAAK,EAAE,SAAS,EAEhB,OAAO,CAAC,EAAE,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,EAC7C,QAAQ,GAAS,iBAAiB,GACjC,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAejE;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,UAAU,EAAE,QAAQ,EAAE,iBAAiB,GAAG,QAAQ;IAa1F;;;;;;;;;OASG;IACH,SAAS,CAAC,UAAU,IAAI,IAAI;IAgC5B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;;;;;;OAOG;IACH,EAAE,CAAC,SAAS,SAAS,MAAM,UAAU,EACnC,KAAK,EAAE,SAAS,EAChB,YAAY,UAAQ,GACnB,OAAO,YAAY,SAAS,IAAI,GAC/B,UAAU,CAAC,cAAc,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAClF,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAanD;;;;;;;;OAQG;IACH,SAAS,CAAC,UAAU,CAAC,SAAS,SAAS,MAAM,UAAU,EACrD,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,iBAAiB,CAAC;IAQpD;;;;;;;;;;OAUG;IACH,SAAS,CAAC,aAAa,CAAC,SAAS,SAAS,MAAM,UAAU,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;CAKpF"}
1
+ {"version":3,"file":"x-bus.d.ts","sourceRoot":"","sources":["../../../../src/x-bus/x-bus.ts"],"names":[],"mappings":"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"}