pixel-react 1.21.98 → 1.21.99

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.
@@ -1,7 +1,8 @@
1
1
  import { useEffect } from 'react';
2
- import { delegate, hideAll } from 'tippy.js';
2
+ import tippy, { hideAll } from 'tippy.js';
3
3
  import 'tippy.js/dist/tippy.css';
4
4
  import './TooltipService.scss';
5
+ const TOOLTIP_TARGET = '[data-tooltip], [data-tooltip-id], [data-tooltip-overflow]';
5
6
  const VALID_PLACEMENTS = new Set([
6
7
  'auto',
7
8
  'auto-start',
@@ -19,6 +20,30 @@ const VALID_PLACEMENTS = new Set([
19
20
  'left-start',
20
21
  'left-end',
21
22
  ]);
23
+ const TOOLTIP_PROPS = {
24
+ arrow: false,
25
+ theme: 'ff-global-tooltip',
26
+ appendTo: () => document.body,
27
+ allowHTML: true,
28
+ popperOptions: {
29
+ modifiers: [
30
+ {
31
+ name: 'preventOverflow',
32
+ options: {
33
+ altAxis: true,
34
+ padding: 8,
35
+ },
36
+ },
37
+ {
38
+ name: 'flip',
39
+ options: {
40
+ padding: 8,
41
+ fallbackPlacements: ['top', 'right', 'left'],
42
+ },
43
+ },
44
+ ],
45
+ },
46
+ };
22
47
  const getTooltipContent = (reference) => {
23
48
  const contentNode = document.createElement('div');
24
49
  // Accept template content via id
@@ -45,7 +70,12 @@ const getTooltipContent = (reference) => {
45
70
  return contentNode;
46
71
  }
47
72
  }
48
- const rawText = reference.getAttribute('data-tooltip') || '';
73
+ // An overflow-only element without its own text shows the text it cuts off
74
+ const rawText = reference.getAttribute('data-tooltip') ||
75
+ (reference.hasAttribute('data-tooltip-overflow')
76
+ ? reference.textContent
77
+ : '') ||
78
+ '';
49
79
  if (!rawText.trim())
50
80
  return '';
51
81
  const text = rawText
@@ -79,118 +109,185 @@ const getTooltipContent = (reference) => {
79
109
  }
80
110
  return contentNode;
81
111
  };
82
- const TooltipService = () => {
83
- useEffect(() => {
84
- const hideTooltipsOnScroll = (event) => {
85
- const target = event.target;
86
- if (target instanceof Element && target.closest('[data-tippy-root]')) {
87
- return;
112
+ // One-line ellipsis cut-off, read only when the element is hovered
113
+ const isClipped = (element) => element.scrollWidth > element.clientWidth + 0.5;
114
+ // The innermost element with something to show. A `data-tooltip-overflow`
115
+ // element counts only while its text is cut off; otherwise the next one out is tried.
116
+ const findTooltipTarget = (start) => {
117
+ let element = start.closest(TOOLTIP_TARGET);
118
+ while (element) {
119
+ const overflowOnly = element.hasAttribute('data-tooltip-overflow');
120
+ if ((!overflowOnly || isClipped(element)) &&
121
+ getTooltipContent(element) !== '') {
122
+ return element;
123
+ }
124
+ element = element.parentElement?.closest(TOOLTIP_TARGET) ?? null;
125
+ }
126
+ return null;
127
+ };
128
+ // Tippy's own ARIA, except where it would be wrong: a hoverable tooltip is not
129
+ // interactive, so it still describes its element and sets no aria-expanded;
130
+ // and text shown only because an ellipsis cuts it off repeats what the element
131
+ // already says, so it is not added as a description
132
+ const getAria = (reference) => {
133
+ if (reference.hasAttribute('data-tooltip-interactive'))
134
+ return {};
135
+ const repeatsOwnText = reference.hasAttribute('data-tooltip-overflow') &&
136
+ !reference.hasAttribute('data-tooltip') &&
137
+ !reference.hasAttribute('data-tooltip-id');
138
+ if (!repeatsOwnText && !reference.hasAttribute('data-tooltip-hoverable')) {
139
+ return {};
140
+ }
141
+ return {
142
+ aria: { expanded: false, content: repeatsOwnText ? null : 'describedby' },
143
+ };
144
+ };
145
+ const getPlacement = (reference) => {
146
+ // placement attribute for tooltip
147
+ const normalizedPlacement = reference
148
+ .getAttribute('data-tooltip-placement')
149
+ ?.trim()
150
+ .toLowerCase();
151
+ return normalizedPlacement && VALID_PLACEMENTS.has(normalizedPlacement)
152
+ ? normalizedPlacement
153
+ : 'bottom';
154
+ };
155
+ /**
156
+ * Shows at most one tooltip at a time. The instance is created when its element
157
+ * is hovered or focused and destroyed when it hides, so nothing is kept for
158
+ * elements that were hovered and later removed (e.g. virtualized rows).
159
+ */
160
+ const startTooltips = () => {
161
+ let active = null;
162
+ // Closed with Escape: stays hidden until the pointer or focus leaves it
163
+ let dismissed = null;
164
+ // While a tooltip shows: refresh it when its attributes change, and drop it
165
+ // when its element leaves the page
166
+ const activeObserver = new MutationObserver((records) => {
167
+ if (!active)
168
+ return;
169
+ if (!active.reference.isConnected) {
170
+ destroyActive();
171
+ return;
172
+ }
173
+ if (records.some((record) => record.type === 'attributes')) {
174
+ const content = getTooltipContent(active.reference);
175
+ if (content === '') {
176
+ destroyActive();
88
177
  }
89
- hideAll({ duration: 0 });
90
- };
91
- window.addEventListener('scroll', hideTooltipsOnScroll, true);
92
- const instance = delegate(document.body, {
93
- target: '[data-tooltip], [data-tooltip-id]',
94
- arrow: false,
95
- placement: 'bottom',
96
- theme: 'ff-global-tooltip',
97
- appendTo: document.body,
98
- allowHTML: true,
99
- popperOptions: {
100
- modifiers: [
101
- {
102
- name: 'preventOverflow',
103
- options: {
104
- altAxis: true,
105
- padding: 8,
106
- },
107
- },
108
- {
109
- name: 'flip',
110
- options: {
111
- padding: 8,
112
- fallbackPlacements: ['top', 'right', 'left'],
113
- },
114
- },
115
- ],
116
- },
117
- content(reference) {
118
- return getTooltipContent(reference);
119
- },
120
- onShow(tippyInstance) {
121
- const { reference } = tippyInstance;
122
- if (!document.body.contains(reference)) {
123
- return false;
124
- }
125
- const latestContent = getTooltipContent(reference);
126
- // If no tooltip content is currently available, prevent showing.
127
- if (latestContent === '') {
178
+ else {
179
+ active.setContent(content);
180
+ }
181
+ }
182
+ });
183
+ const destroyActive = () => {
184
+ activeObserver.disconnect();
185
+ active?.destroy();
186
+ active = null;
187
+ };
188
+ const show = (reference) => {
189
+ destroyActive();
190
+ // Another copy of this service (e.g. from a second bundle) already handles it
191
+ if (reference._tippy)
192
+ return;
193
+ active = tippy(reference, {
194
+ ...TOOLTIP_PROPS,
195
+ content: getTooltipContent(reference),
196
+ placement: getPlacement(reference),
197
+ // This is specific tooltip attributefor interactive. A hoverable
198
+ // tooltip uses it only so the pointer can move onto it (WCAG 1.4.13).
199
+ interactive: reference.hasAttribute('data-tooltip-interactive') ||
200
+ reference.hasAttribute('data-tooltip-hoverable'),
201
+ ...getAria(reference),
202
+ showOnCreate: true,
203
+ onShow(instance) {
204
+ if (!instance.reference.isConnected)
128
205
  return false;
129
- }
130
- // This is specific tooltip attributefor interactive
131
- const isInteractive = tippyInstance.reference.hasAttribute('data-tooltip-interactive');
132
- // placement attribute for tooltip
133
- const rawPlacement = tippyInstance.reference.getAttribute('data-tooltip-placement');
134
- const normalizedPlacement = rawPlacement?.trim().toLowerCase();
135
- const placement = normalizedPlacement && VALID_PLACEMENTS.has(normalizedPlacement)
136
- ? normalizedPlacement
137
- : 'bottom';
138
- tippyInstance.setProps({
139
- interactive: isInteractive,
140
- placement,
141
- content: latestContent,
142
- });
143
206
  },
144
- onCreate(tippyInstance) {
145
- const attrObserver = new MutationObserver(() => {
146
- if (tippyInstance.state.isVisible) {
147
- const newContent = getTooltipContent(tippyInstance.reference);
148
- if (newContent === '') {
149
- tippyInstance.hide();
150
- }
151
- else {
152
- tippyInstance.setContent(newContent);
153
- }
154
- }
155
- });
156
- attrObserver.observe(tippyInstance.reference, {
157
- attributes: true,
158
- attributeFilter: ['data-tooltip', 'data-tooltip-id'],
159
- });
160
- tippyInstance._attrObserver = attrObserver;
161
- const parentEl = tippyInstance.reference.parentElement;
162
- if (parentEl) {
163
- const domObserver = new MutationObserver(() => {
164
- if (!document.body.contains(tippyInstance.reference)) {
165
- tippyInstance.hide();
166
- tippyInstance.destroy();
167
- }
168
- });
169
- domObserver.observe(parentEl, { childList: true });
170
- tippyInstance._domObserver = domObserver;
171
- }
172
- },
173
- onDestroy(tippyInstance) {
174
- tippyInstance._attrObserver?.disconnect();
175
- tippyInstance._domObserver?.disconnect();
176
- },
177
- onMount(tippyInstance) {
178
- const isExplicitlyInteractive = tippyInstance.reference.hasAttribute('data-tooltip-interactive');
207
+ onMount(instance) {
208
+ const isExplicitlyInteractive = instance.reference.hasAttribute('data-tooltip-interactive');
179
209
  if (!isExplicitlyInteractive) {
180
- const tippyBox = tippyInstance.popper.querySelector('.tippy-box');
210
+ const tippyBox = instance.popper.querySelector('.tippy-box');
181
211
  if (tippyBox && tippyBox.scrollHeight > tippyBox.clientHeight) {
182
- tippyInstance.setProps({ interactive: true });
212
+ instance.setProps({ interactive: true });
183
213
  }
184
214
  }
185
215
  },
216
+ onHidden(instance) {
217
+ if (instance === active) {
218
+ destroyActive();
219
+ }
220
+ else {
221
+ instance.destroy();
222
+ }
223
+ },
224
+ });
225
+ activeObserver.observe(reference, {
226
+ attributes: true,
227
+ attributeFilter: ['data-tooltip', 'data-tooltip-id'],
186
228
  });
229
+ activeObserver.observe(document.body, { childList: true, subtree: true });
230
+ };
231
+ const handlePointerOrFocus = (event) => {
232
+ const { target } = event;
233
+ if (!(target instanceof Element))
234
+ return;
235
+ // Moving into an interactive tooltip keeps it open
236
+ if (active?.popper.contains(target))
237
+ return;
238
+ if (dismissed && !dismissed.contains(target))
239
+ dismissed = null;
240
+ // Nothing new under the pointer: the shown tooltip hides itself on mouseleave
241
+ const closest = target.closest(TOOLTIP_TARGET);
242
+ if (!closest || closest === active?.reference)
243
+ return;
244
+ const reference = findTooltipTarget(closest);
245
+ if (reference &&
246
+ reference !== active?.reference &&
247
+ reference !== dismissed) {
248
+ show(reference);
249
+ }
250
+ };
251
+ // Escape hides the tooltip without moving the pointer or focus (WCAG 1.4.13)
252
+ const hideOnEscape = (event) => {
253
+ if (event.key !== 'Escape' || !active)
254
+ return;
255
+ dismissed = active.reference;
256
+ destroyActive();
257
+ };
258
+ const hideTooltipsOnScroll = (event) => {
259
+ const target = event.target;
260
+ if (target instanceof Element && target.closest('[data-tippy-root]')) {
261
+ return;
262
+ }
263
+ hideAll({ duration: 0 });
264
+ destroyActive();
265
+ };
266
+ document.addEventListener('mouseover', handlePointerOrFocus);
267
+ document.addEventListener('focusin', handlePointerOrFocus);
268
+ document.addEventListener('keydown', hideOnEscape);
269
+ window.addEventListener('scroll', hideTooltipsOnScroll, true);
270
+ return () => {
271
+ document.removeEventListener('mouseover', handlePointerOrFocus);
272
+ document.removeEventListener('focusin', handlePointerOrFocus);
273
+ document.removeEventListener('keydown', hideOnEscape);
274
+ window.removeEventListener('scroll', hideTooltipsOnScroll, true);
275
+ destroyActive();
276
+ };
277
+ };
278
+ // Every mounted TooltipService shares one set of listeners
279
+ let mountedServices = 0;
280
+ let stopTooltips = null;
281
+ const TooltipService = () => {
282
+ useEffect(() => {
283
+ mountedServices += 1;
284
+ if (mountedServices === 1)
285
+ stopTooltips = startTooltips();
187
286
  return () => {
188
- window.removeEventListener('scroll', hideTooltipsOnScroll, true);
189
- if (Array.isArray(instance)) {
190
- instance.forEach((i) => i.destroy());
191
- }
192
- else {
193
- instance.destroy();
287
+ mountedServices -= 1;
288
+ if (mountedServices === 0) {
289
+ stopTooltips?.();
290
+ stopTooltips = null;
194
291
  }
195
292
  };
196
293
  }, []);
@@ -1 +1 @@
1
- {"version":3,"file":"TooltipService.js","sourceRoot":"","sources":["../../../src/components/TooltipService/TooltipService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,yBAAyB,CAAC;AACjC,OAAO,uBAAuB,CAAC;AAE/B,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAqB;IACnD,MAAM;IACN,YAAY;IACZ,UAAU;IACV,KAAK;IACL,WAAW;IACX,SAAS;IACT,QAAQ;IACR,cAAc;IACd,YAAY;IACZ,OAAO;IACP,aAAa;IACb,WAAW;IACX,MAAM;IACN,YAAY;IACZ,UAAU;CACX,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,SAAkB,EAAoB,EAAE;IACjE,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAElD,iCAAiC;IACjC,MAAM,UAAU,GAAG,SAAS,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAC7D,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,UAAU,EAAE,CAAC;YACf,uBAAuB;YACvB,IAAI,WAAW,GAAG,UAAU,CAAC,SAAS;iBACnC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;iBAC/B,IAAI,EAAE,CAAC;YAEV,2GAA2G;YAC3G,IACE,WAAW,KAAK,IAAI;gBACpB,WAAW,KAAK,IAAI;gBACpB,WAAW,KAAK,cAAc,EAC9B,CAAC;gBACD,WAAW,GAAG,EAAE,CAAC;YACnB,CAAC;YAED,0GAA0G;YAC1G,IACE,WAAW,KAAK,EAAE;gBAClB,oCAAoC,CAAC,IAAI,CAAC,WAAW,CAAC,EACtD,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,WAAW,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;YAC7C,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC7D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAE/B,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;IAEV,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,kDAAkD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE9E,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC;IACnE,gGAAgG;IAChG,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,UAAU,EAAE,CAAC;YACf,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;YAE3C,IAAI,OAAO,EAAE,CAAC;gBACZ,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;QAC3C,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC;IACjC,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,GAAG,EAAE;IAC1B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,oBAAoB,GAAG,CAAC,KAAY,EAAQ,EAAE;YAClD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC5B,IAAI,MAAM,YAAY,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBACrE,OAAO;YACT,CAAC;YACD,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,IAAI,CAAC,CAAC;QAE9D,MAAM,QAAQ,GAAwC,QAAQ,CAC5D,QAAQ,CAAC,IAAI,EACb;YACE,MAAM,EAAE,mCAAmC;YAC3C,KAAK,EAAE,KAAK;YACZ,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE,mBAAmB;YAC1B,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,SAAS,EAAE,IAAI;YACf,aAAa,EAAE;gBACb,SAAS,EAAE;oBACT;wBACE,IAAI,EAAE,iBAAiB;wBACvB,OAAO,EAAE;4BACP,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE,CAAC;yBACX;qBACF;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACP,OAAO,EAAE,CAAC;4BACV,kBAAkB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC;yBAC7C;qBACF;iBACF;aACF;YACD,OAAO,CAAC,SAAS;gBACf,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;YACD,MAAM,CAAC,aAAa;gBAClB,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;gBAEpC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACvC,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBAEnD,iEAAiE;gBACjE,IAAI,aAAa,KAAK,EAAE,EAAE,CAAC;oBACzB,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,qDAAqD;gBACrD,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC,YAAY,CACxD,0BAA0B,CAC3B,CAAC;gBAEF,mCAAmC;gBACnC,MAAM,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC,YAAY,CACvD,wBAAwB,CACzB,CAAC;gBACF,MAAM,mBAAmB,GAAG,YAAY,EAAE,IAAI,EAAE,CAAC,WAAW,EAEpD,CAAC;gBACT,MAAM,SAAS,GACb,mBAAmB,IAAI,gBAAgB,CAAC,GAAG,CAAC,mBAAmB,CAAC;oBAC9D,CAAC,CAAC,mBAAmB;oBACrB,CAAC,CAAC,QAAQ,CAAC;gBAEf,aAAa,CAAC,QAAQ,CAAC;oBACrB,WAAW,EAAE,aAAa;oBAC1B,SAAS;oBACT,OAAO,EAAE,aAAa;iBACvB,CAAC,CAAC;YACL,CAAC;YACD,QAAQ,CAAC,aAAa;gBACpB,MAAM,YAAY,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;oBAC7C,IAAI,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;wBAClC,MAAM,UAAU,GAAG,iBAAiB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;wBAC9D,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;4BACtB,aAAa,CAAC,IAAI,EAAE,CAAC;wBACvB,CAAC;6BAAM,CAAC;4BACN,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;wBACvC,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CAAC;gBACH,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE;oBAC5C,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC;iBACrD,CAAC,CAAC;gBACF,aAAqB,CAAC,aAAa,GAAG,YAAY,CAAC;gBAEpD,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC;gBACvD,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,WAAW,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;wBAC5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;4BACrD,aAAa,CAAC,IAAI,EAAE,CAAC;4BACrB,aAAa,CAAC,OAAO,EAAE,CAAC;wBAC1B,CAAC;oBACH,CAAC,CAAC,CAAC;oBACH,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAClD,aAAqB,CAAC,YAAY,GAAG,WAAW,CAAC;gBACpD,CAAC;YACH,CAAC;YACD,SAAS,CAAC,aAAa;gBACpB,aAAqB,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC;gBAClD,aAAqB,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC;YACpD,CAAC;YACD,OAAO,CAAC,aAAa;gBACnB,MAAM,uBAAuB,GAAG,aAAa,CAAC,SAAS,CAAC,YAAY,CAClE,0BAA0B,CAC3B,CAAC;gBAEF,IAAI,CAAC,uBAAuB,EAAE,CAAC;oBAC7B,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;oBAClE,IAAI,QAAQ,IAAI,QAAQ,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;wBAC9D,aAAa,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;oBAChD,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CACF,CAAC;QAEF,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,IAAI,CAAC,CAAC;YACjE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"TooltipService.js","sourceRoot":"","sources":["../../../src/components/TooltipService/TooltipService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { RefObject } from 'react';
2
+ /**
3
+ * Remembers the element that had focus when `isOpen` became true, read during
4
+ * render — before children with autoFocus take focus — so it can be restored.
5
+ */
6
+ export declare const useOpenerElement: (isOpen: boolean) => import("react").MutableRefObject<HTMLElement | null>;
7
+ interface FocusTrapOptions {
8
+ active: boolean;
9
+ /** Element to focus on activation; defaults to the first focusable child. */
10
+ initialFocusRef?: RefObject<HTMLElement>;
11
+ /** Return focus to the element that was focused before activation. */
12
+ restoreFocus?: boolean;
13
+ /** Explicit element to return focus to (see useOpenerElement). */
14
+ returnFocusRef?: RefObject<HTMLElement | null>;
15
+ /**
16
+ * Keep Tab/Shift+Tab inside the container (modal). When false, focus only
17
+ * moves in on activation and back out afterwards (non-modal panel).
18
+ */
19
+ trapTab?: boolean;
20
+ }
21
+ export declare const isTopMostFocusTrap: (container: HTMLElement | null) => boolean;
22
+ export declare const getTopMostFocusTrap: () => HTMLElement | null;
23
+ /**
24
+ * Moves keyboard focus into a dialog when it opens, optionally keeps it there
25
+ * while it is modal, and restores it to the trigger afterwards — WCAG 2.4.3
26
+ * Focus Order and 2.1.2 No Keyboard Trap (focus is released on close).
27
+ */
28
+ declare const useFocusTrap: (containerRef: RefObject<HTMLElement>, { active, initialFocusRef, restoreFocus, trapTab, returnFocusRef, }: FocusTrapOptions) => void;
29
+ export default useFocusTrap;
@@ -0,0 +1,97 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { getFocusableElements } from '../utils/a11y/a11y';
3
+ /**
4
+ * Remembers the element that had focus when `isOpen` became true, read during
5
+ * render — before children with autoFocus take focus — so it can be restored.
6
+ */
7
+ export const useOpenerElement = (isOpen) => {
8
+ const openerRef = useRef(null);
9
+ const wasOpenRef = useRef(false);
10
+ if (isOpen && !wasOpenRef.current && typeof document !== 'undefined') {
11
+ const focused = document.activeElement;
12
+ openerRef.current =
13
+ focused instanceof HTMLElement && focused !== document.body
14
+ ? focused
15
+ : null;
16
+ }
17
+ wasOpenRef.current = isOpen;
18
+ return openerRef;
19
+ };
20
+ // Traps are stacked so only the top-most dialog handles Tab and Escape.
21
+ const trapStack = [];
22
+ export const isTopMostFocusTrap = (container) => !!container && trapStack[trapStack.length - 1] === container;
23
+ export const getTopMostFocusTrap = () => trapStack[trapStack.length - 1] ?? null;
24
+ /**
25
+ * Moves keyboard focus into a dialog when it opens, optionally keeps it there
26
+ * while it is modal, and restores it to the trigger afterwards — WCAG 2.4.3
27
+ * Focus Order and 2.1.2 No Keyboard Trap (focus is released on close).
28
+ */
29
+ const useFocusTrap = (containerRef, { active, initialFocusRef, restoreFocus = true, trapTab = true, returnFocusRef, }) => {
30
+ useEffect(() => {
31
+ const container = containerRef.current;
32
+ if (!active || !container)
33
+ return undefined;
34
+ const focusedNow = document.activeElement instanceof HTMLElement
35
+ ? document.activeElement
36
+ : null;
37
+ // Prefer the opener captured at render; otherwise whatever had focus,
38
+ // unless that is already inside the container (e.g. an autoFocus field).
39
+ const previouslyFocused = returnFocusRef?.current ??
40
+ (focusedNow && !container.contains(focusedNow) ? focusedNow : null);
41
+ if (trapTab)
42
+ trapStack.push(container);
43
+ // Deferred so children using autoFocus win, and portal content is laid out.
44
+ const frame = requestAnimationFrame(() => {
45
+ if (container.contains(document.activeElement))
46
+ return;
47
+ const target = initialFocusRef?.current ??
48
+ getFocusableElements(container)[0] ??
49
+ container;
50
+ target.focus({ preventScroll: true });
51
+ });
52
+ const handleKeyDown = (event) => {
53
+ if (event.key !== 'Tab' ||
54
+ // Composite widgets (e.g. a spreadsheet) may use Tab internally.
55
+ event.defaultPrevented ||
56
+ !isTopMostFocusTrap(container)) {
57
+ return;
58
+ }
59
+ const focusable = getFocusableElements(container);
60
+ const first = focusable[0];
61
+ const last = focusable[focusable.length - 1];
62
+ if (!first || !last) {
63
+ event.preventDefault();
64
+ container.focus({ preventScroll: true });
65
+ return;
66
+ }
67
+ const activeElement = document.activeElement;
68
+ const focusIsOutside = !container.contains(activeElement);
69
+ if (event.shiftKey && (activeElement === first || focusIsOutside)) {
70
+ event.preventDefault();
71
+ last.focus();
72
+ }
73
+ else if (!event.shiftKey && (activeElement === last || focusIsOutside)) {
74
+ event.preventDefault();
75
+ first.focus();
76
+ }
77
+ };
78
+ if (trapTab)
79
+ document.addEventListener('keydown', handleKeyDown);
80
+ return () => {
81
+ cancelAnimationFrame(frame);
82
+ document.removeEventListener('keydown', handleKeyDown);
83
+ const index = trapStack.lastIndexOf(container);
84
+ if (index !== -1)
85
+ trapStack.splice(index, 1);
86
+ // Only restore when focus would otherwise be lost (inside the closing
87
+ // container or already on <body>), never steal it from elsewhere.
88
+ const focused = document.activeElement;
89
+ const focusWouldBeLost = !focused || focused === document.body || container.contains(focused);
90
+ if (restoreFocus && focusWouldBeLost && previouslyFocused?.isConnected) {
91
+ previouslyFocused.focus({ preventScroll: true });
92
+ }
93
+ };
94
+ }, [active, containerRef, initialFocusRef, restoreFocus, trapTab, returnFocusRef]);
95
+ };
96
+ export default useFocusTrap;
97
+ //# sourceMappingURL=useFocusTrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocusTrap.js","sourceRoot":"","sources":["../../src/hooks/useFocusTrap.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { RefObject } from 'react';
2
+ /**
3
+ * True when the element is rendered inside a control that already handles
4
+ * keyboard activation, so the element should not add its own tab stop.
5
+ */
6
+ declare const useInteractiveAncestor: (ref: RefObject<HTMLElement>, enabled: boolean) => boolean;
7
+ export default useInteractiveAncestor;
@@ -0,0 +1,18 @@
1
+ import { useLayoutEffect, useState } from 'react';
2
+ import { hasInteractiveAncestor } from '../utils/a11y/a11y';
3
+ /**
4
+ * True when the element is rendered inside a control that already handles
5
+ * keyboard activation, so the element should not add its own tab stop.
6
+ */
7
+ const useInteractiveAncestor = (ref, enabled) => {
8
+ const [isNested, setIsNested] = useState(false);
9
+ useLayoutEffect(() => {
10
+ if (!enabled)
11
+ return;
12
+ const nested = hasInteractiveAncestor(ref.current);
13
+ setIsNested((previous) => (previous === nested ? previous : nested));
14
+ }, [enabled, ref]);
15
+ return enabled && isNested;
16
+ };
17
+ export default useInteractiveAncestor;
18
+ //# sourceMappingURL=useInteractiveAncestor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInteractiveAncestor.js","sourceRoot":"","sources":["../../src/hooks/useInteractiveAncestor.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,eAAe,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;GAGG;AACH,MAAM,sBAAsB,GAAG,CAC7B,GAA2B,EAC3B,OAAgB,EAChB,EAAE;IACF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhD,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnD,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAEnB,OAAO,OAAO,IAAI,QAAQ,CAAC;AAC7B,CAAC,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
package/lib/index.d.ts CHANGED
@@ -2582,13 +2582,53 @@ interface BrowserTabsProps {
2582
2582
 
2583
2583
  declare const BrowserTabs: ({ tabsData, activeTabId, onTabClick, onTabClose, onTabAdd, maxTabWidth, showCloseOnActive, maxTabs, enableOverflowTooltip, onTabMouseEnter, onTabMouseLeave, }: BrowserTabsProps) => React$1.JSX.Element;
2584
2584
 
2585
+ /** A styled part of the text, e.g. a variable inside a step name */
2586
+ interface HighlightTextPart {
2587
+ text: string;
2588
+ /**
2589
+ * Needs the same contrast as `color` on the row. Colour alone must not tell
2590
+ * kinds of parts apart (WCAG 1.4.1): a tooltip can say what the part is.
2591
+ */
2592
+ color?: string;
2593
+ fontWeight?: CSSProperties['fontWeight'];
2594
+ /** Shown on hover over this part only. Text or JSX, as for `tooltip` below */
2595
+ tooltip?: string | ReactElement;
2596
+ }
2597
+ /** Plain text, or a styled part */
2598
+ type HighlightTextSegment = string | HighlightTextPart;
2585
2599
  interface HighlightTextProps {
2586
2600
  text?: string;
2601
+ /**
2602
+ * Use instead of `text` when parts need their own colour or tooltip.
2603
+ * Search highlighting runs on the joined text, so a match can span parts.
2604
+ */
2605
+ segments?: HighlightTextSegment[];
2587
2606
  highlight?: String;
2588
2607
  onlyExactMatch?: boolean;
2608
+ /**
2609
+ * Text colour: any CSS colour value or variable, e.g. `var(--brand-color)`.
2610
+ * WCAG 1.4.6 (AAA) needs 7:1 contrast with the background (4.5:1 for large
2611
+ * text), also against the search highlight.
2612
+ */
2613
+ color?: string;
2614
+ fontWeight?: CSSProperties['fontWeight'];
2615
+ /**
2616
+ * Shown on hover or keyboard focus, through the global TooltipService. The
2617
+ * text takes focus for it, except inside another control (e.g. a button),
2618
+ * which should then carry the tooltip itself. Escape hides it. JSX is copied
2619
+ * into the tooltip as HTML, so it is static: event handlers inside it do not
2620
+ * run.
2621
+ */
2622
+ tooltip?: string | ReactElement;
2623
+ /**
2624
+ * Keep to one line and end with an ellipsis when it does not fit. The full
2625
+ * text shows on hover or focus, only while it is cut off (unless `tooltip`
2626
+ * is set); the row takes focus only then.
2627
+ */
2628
+ truncate?: boolean;
2589
2629
  }
2590
2630
 
2591
- declare const HighlightText: React.FC<HighlightTextProps>;
2631
+ declare const MemoizedHighlightText: React$1.MemoExoticComponent<({ text, segments, highlight, onlyExactMatch, color, fontWeight, tooltip, truncate, }: HighlightTextProps) => React$1.JSX.Element>;
2592
2632
 
2593
2633
  interface CheckboxProps {
2594
2634
  /**
@@ -6569,5 +6609,5 @@ interface DotLoaderProps {
6569
6609
 
6570
6610
  declare const DotLoader: ({ dotCount, label, labelFontSize, labelFontWeight, dotFontSize, dotFontWeight }: DotLoaderProps) => React$1.JSX.Element;
6571
6611
 
6572
- export { AADHAAR_REGEX, ALPHABET_ONLY_REGEX, ALPHABET_WITH_SPACES_ONLY_REGEX, ALPHANUMERIC_PARENTHESIS_REGEX, ALPHANUMERIC_REGEX, ALPHANUMERIC_WITH_DOT_REGEX, ALPHANUMERIC_WITH_ROUND_BRACES_REGEX, ALPHA_NUM_EXTENDED_REGEX, ALPHA_NUM_REGEX, Accordion, AddContentButton, AddResourceButton, AiToggle, AllProjectsDropdown, AnimatedSetting, AppHeader, AttachMedia, AttachmentButton, AudioPlayer, AutoTruncateText, Avatar, BASE64_REGEX, BIG_END_WHITESPACE, BINARY_NUMBER_REGEX, BODY_TAG_TYPE_VALIDATION, BarChart, Card as Box, BrowserTabs, Button, CAMEL_CASE_REGEX, CERTIFICATES_NAME_REGEX, CHECK_CAMEL_CASE, CREDIT_CARD_REGEX, CURRENCY_GENERIC_REGEX, CardPanel, ChatModal, ChatModalAi, Checkbox, Chip, ChipWithCount, ChooseFile, Col, Comments, ConditionalDropdown, ConnectingBranch, Container, ContentCard, CreateVariableSlider, DATE_REGEX, DECIMAL_NUMBER_REGEX, DRIVING_LICENSE_REGEX, DYNAMIC_VALUE_PATTERN_REGEX, DYNAMIC_VALUE_TYPE_REGEX, DYNAMIC_VALUE_WITH_VALID_BRACKETS_REGEX, DYNAMIC_VALUE__PLACEHOLDER_REGEX, DashboardDonutChart, CustomDatePicker as DatePicker, DebugToolsPanel, DonutChart, DotLoader, DownloadClient, DragAndDrop, Drawer, Dropzone, ELEMENTS_TRAILING_SPACE_REGEX, ELEMENTS_WHITE_SPACE_REGEX, EMAIL_FORMAT_REGEX, EMAIL_REGEX, EMAIL_VALIDATION_REGEX, EXCEL_SPACING_REGEX, EXECUTION_ID_VALIDATION, EditLabel, EditTextField, Editor, ErrorBoundary, ExcelFile as Excel, ExpandableMenu, FILENAME_VALIDATION_REGEX, FILE_EXTENSION_REGEX, FILE_NAME_REGEX, FieldSet, FileDropzone, FilePreview, ForwardedForms as Form, formatString as FormatString, GSTIN_REGEX, HEXADECIMAL_NUMBER_REGEX, HEX_COLOR_REGEX, HSL_COLOR_REGEX, HTML_ATTRIBUTE_REGEX, HTML_FILE_TYPE_VALIDATION, HTML_TAG_REGEX, HighlightText, HistoryCard, INDIAN_CURRENCY_REGEX, INDIAN_PASSPORT_REGEX, INDIAN_PHONE_REGEX, INDIAN_PIN_CODE_REGEX, INTERNATIONAL_PHONE_REGEX, INVALID_EMAIL_REGEX, IPV4_REGEX, IPV6_REGEX, Icon, IconButton, IconRadialChart, IconRadioGroup, Input, InputWithDropdown, JAVASCRIPT_FILE_TYPE_VALIDATION, LINKEDIN_PROFILE_REGEX, LINK_VALIDATION_REGEX, LabelEditTextField, LayoutWithDrawer, LineChart, LineLoader, Link, Loader, MAC_ADDRESS_REGEX, MEMORY_VALIDATION_REGEX, MachineInputField, MediaPreview, MediaViewerModal as MediaViewerModel, MenuOption, MessageBox, MiniModal, MobileSkin, Modal, ModuleChip, MultiRadialChart, MultiSelect, NlpInput as NLPInput, NLP_DESCRIPTION_REGEX, NO_LEADING_TRAILING_SPACE_REGEX, NUMBERS_ONLY_REGEX, NUMBER_REGEX, NetworkErrorBoundary, NoDataAvailable, NoDataContent, NoResultFound, OsTree, OtpVerification, OverviewModal, PAN_CARD_REGEX, PARAMETER_ALPHANUMERIC_REGEX, PASSWORD_COMPLEX_REGEX, PASSWORD_SIMPLE_REGEX, PHONE_REGEX, POSTAL_CODE_REGEX, Paper, PhoneInputField, PieChart, PopUpModal, PrePostTable, ProcessedSourceSelector, ProgressBar, Prompt, PromptContainer, RGB_COLOR_REGEX, ROMAN_NUMERALS_REGEX, RadialChart, RadioButton, RadioGroup, Recaptcha, Row, SCRIPT_REGEX, SERVER_HOST_REGEX, SSN_REGEX, START_END_WHITESPACE_REGEX, STEP_GROUP_NAME_REGEX, ScoreGaugeChart, ScriptGenerationLoader, ScriptSwitchButton, Search, Select, SelectionSwitcher, SequentialConnectingBranch, SessionDropdown, SessionManager, StackedBarChart, StateDropdown, StatusBadge, StatusButton, StatusCard, StatusIndicator, StepLandingTable, StepResultStats, StorageUsageBar, SwitchButton, TIME_REGEX, TWITTER_HANDLE_REGEX, Table, TreeTable as TableTree, TableTreeFn, TableWithAccordion, Tabs, TabsWithSilder, Textarea as TextArea, TextEditor, ThemeProvider, Toaster, Toastify, Toggle, ToggleSwitch, Tooltip, TooltipService, TruncatedTooltip, Typography, UNIT_REGEX, URL_REGEX, USERNAME_REGEX, USERNAME_SPECIAL_REGEX, US_ZIP_CODE_REGEX, UUID_REGEX, VALID_NAME_PATTERN, VEHICLE_REGISTRATION_REGEX, VariableDropdown, VariableInput, VariableSuggestionInputDropDown, WHITESPACE_REGEX, WeightageTable, XML_FILE_TYPE_VALIDATION, ZoomControl, addPrePostStepGroup, addStepGroup, autoScrollToTableLastRow, capitalize, checkEmpty, checkMicrophoneAccess, cleanAllTooltips, clearStore, compareArrays, compareObjects, computeTreeCountsAndFormatNodes, convertFormDataToObject, convertToBytes, convertToGB, convertToISO, copyToClipboard, debounce, deleteStoreValue, ffid, findAndInsert, formatDate, formatResponseDate, getEncryptedData, getExtension, getExtensionWithPeriod, getFiltersFromUrl, getNavigateToKey, getSequentialPayload, getStoreValue, getTopVisibleNodeKey, getTreeDetails, handleTimeZoneChange, handleTreeExpandAllCollapseAll, handleTreeNodeExpandCollapse, handleTreeNodeSect, handleUnCheckAllTreeNodesWithUpdates, hasDuplicateFile, isEmptyObject, isTextTruncated, nlpInputDelay, passesFilters, rearrangeDragItem, restoreSelectedFilters, saveFileFromBlob, scrollToView, setStoreValue, throttle, toCamelCase, toast, toggleShowHideEntity, truncateText, updateSearchTree, updateTreeState, useBeforeUnload, useClickOutside, useDeviceType, useFileDropzone, useKeyboardActions, useTheme, useTriggerControl, validateFileContent };
6573
- export type { RootNode$1 as RootNode, TreeNodeProps, WeightageCellRenderProps, WeightageColumnLabels, WeightageGroup, WeightageRow, WeightageTableProps };
6612
+ export { AADHAAR_REGEX, ALPHABET_ONLY_REGEX, ALPHABET_WITH_SPACES_ONLY_REGEX, ALPHANUMERIC_PARENTHESIS_REGEX, ALPHANUMERIC_REGEX, ALPHANUMERIC_WITH_DOT_REGEX, ALPHANUMERIC_WITH_ROUND_BRACES_REGEX, ALPHA_NUM_EXTENDED_REGEX, ALPHA_NUM_REGEX, Accordion, AddContentButton, AddResourceButton, AiToggle, AllProjectsDropdown, AnimatedSetting, AppHeader, AttachMedia, AttachmentButton, AudioPlayer, AutoTruncateText, Avatar, BASE64_REGEX, BIG_END_WHITESPACE, BINARY_NUMBER_REGEX, BODY_TAG_TYPE_VALIDATION, BarChart, Card as Box, BrowserTabs, Button, CAMEL_CASE_REGEX, CERTIFICATES_NAME_REGEX, CHECK_CAMEL_CASE, CREDIT_CARD_REGEX, CURRENCY_GENERIC_REGEX, CardPanel, ChatModal, ChatModalAi, Checkbox, Chip, ChipWithCount, ChooseFile, Col, Comments, ConditionalDropdown, ConnectingBranch, Container, ContentCard, CreateVariableSlider, DATE_REGEX, DECIMAL_NUMBER_REGEX, DRIVING_LICENSE_REGEX, DYNAMIC_VALUE_PATTERN_REGEX, DYNAMIC_VALUE_TYPE_REGEX, DYNAMIC_VALUE_WITH_VALID_BRACKETS_REGEX, DYNAMIC_VALUE__PLACEHOLDER_REGEX, DashboardDonutChart, CustomDatePicker as DatePicker, DebugToolsPanel, DonutChart, DotLoader, DownloadClient, DragAndDrop, Drawer, Dropzone, ELEMENTS_TRAILING_SPACE_REGEX, ELEMENTS_WHITE_SPACE_REGEX, EMAIL_FORMAT_REGEX, EMAIL_REGEX, EMAIL_VALIDATION_REGEX, EXCEL_SPACING_REGEX, EXECUTION_ID_VALIDATION, EditLabel, EditTextField, Editor, ErrorBoundary, ExcelFile as Excel, ExpandableMenu, FILENAME_VALIDATION_REGEX, FILE_EXTENSION_REGEX, FILE_NAME_REGEX, FieldSet, FileDropzone, FilePreview, ForwardedForms as Form, formatString as FormatString, GSTIN_REGEX, HEXADECIMAL_NUMBER_REGEX, HEX_COLOR_REGEX, HSL_COLOR_REGEX, HTML_ATTRIBUTE_REGEX, HTML_FILE_TYPE_VALIDATION, HTML_TAG_REGEX, MemoizedHighlightText as HighlightText, HistoryCard, INDIAN_CURRENCY_REGEX, INDIAN_PASSPORT_REGEX, INDIAN_PHONE_REGEX, INDIAN_PIN_CODE_REGEX, INTERNATIONAL_PHONE_REGEX, INVALID_EMAIL_REGEX, IPV4_REGEX, IPV6_REGEX, Icon, IconButton, IconRadialChart, IconRadioGroup, Input, InputWithDropdown, JAVASCRIPT_FILE_TYPE_VALIDATION, LINKEDIN_PROFILE_REGEX, LINK_VALIDATION_REGEX, LabelEditTextField, LayoutWithDrawer, LineChart, LineLoader, Link, Loader, MAC_ADDRESS_REGEX, MEMORY_VALIDATION_REGEX, MachineInputField, MediaPreview, MediaViewerModal as MediaViewerModel, MenuOption, MessageBox, MiniModal, MobileSkin, Modal, ModuleChip, MultiRadialChart, MultiSelect, NlpInput as NLPInput, NLP_DESCRIPTION_REGEX, NO_LEADING_TRAILING_SPACE_REGEX, NUMBERS_ONLY_REGEX, NUMBER_REGEX, NetworkErrorBoundary, NoDataAvailable, NoDataContent, NoResultFound, OsTree, OtpVerification, OverviewModal, PAN_CARD_REGEX, PARAMETER_ALPHANUMERIC_REGEX, PASSWORD_COMPLEX_REGEX, PASSWORD_SIMPLE_REGEX, PHONE_REGEX, POSTAL_CODE_REGEX, Paper, PhoneInputField, PieChart, PopUpModal, PrePostTable, ProcessedSourceSelector, ProgressBar, Prompt, PromptContainer, RGB_COLOR_REGEX, ROMAN_NUMERALS_REGEX, RadialChart, RadioButton, RadioGroup, Recaptcha, Row, SCRIPT_REGEX, SERVER_HOST_REGEX, SSN_REGEX, START_END_WHITESPACE_REGEX, STEP_GROUP_NAME_REGEX, ScoreGaugeChart, ScriptGenerationLoader, ScriptSwitchButton, Search, Select, SelectionSwitcher, SequentialConnectingBranch, SessionDropdown, SessionManager, StackedBarChart, StateDropdown, StatusBadge, StatusButton, StatusCard, StatusIndicator, StepLandingTable, StepResultStats, StorageUsageBar, SwitchButton, TIME_REGEX, TWITTER_HANDLE_REGEX, Table, TreeTable as TableTree, TableTreeFn, TableWithAccordion, Tabs, TabsWithSilder, Textarea as TextArea, TextEditor, ThemeProvider, Toaster, Toastify, Toggle, ToggleSwitch, Tooltip, TooltipService, TruncatedTooltip, Typography, UNIT_REGEX, URL_REGEX, USERNAME_REGEX, USERNAME_SPECIAL_REGEX, US_ZIP_CODE_REGEX, UUID_REGEX, VALID_NAME_PATTERN, VEHICLE_REGISTRATION_REGEX, VariableDropdown, VariableInput, VariableSuggestionInputDropDown, WHITESPACE_REGEX, WeightageTable, XML_FILE_TYPE_VALIDATION, ZoomControl, addPrePostStepGroup, addStepGroup, autoScrollToTableLastRow, capitalize, checkEmpty, checkMicrophoneAccess, cleanAllTooltips, clearStore, compareArrays, compareObjects, computeTreeCountsAndFormatNodes, convertFormDataToObject, convertToBytes, convertToGB, convertToISO, copyToClipboard, debounce, deleteStoreValue, ffid, findAndInsert, formatDate, formatResponseDate, getEncryptedData, getExtension, getExtensionWithPeriod, getFiltersFromUrl, getNavigateToKey, getSequentialPayload, getStoreValue, getTopVisibleNodeKey, getTreeDetails, handleTimeZoneChange, handleTreeExpandAllCollapseAll, handleTreeNodeExpandCollapse, handleTreeNodeSect, handleUnCheckAllTreeNodesWithUpdates, hasDuplicateFile, isEmptyObject, isTextTruncated, nlpInputDelay, passesFilters, rearrangeDragItem, restoreSelectedFilters, saveFileFromBlob, scrollToView, setStoreValue, throttle, toCamelCase, toast, toggleShowHideEntity, truncateText, updateSearchTree, updateTreeState, useBeforeUnload, useClickOutside, useDeviceType, useFileDropzone, useKeyboardActions, useTheme, useTriggerControl, validateFileContent };
6613
+ export type { HighlightTextPart, HighlightTextSegment, RootNode$1 as RootNode, TreeNodeProps, WeightageCellRenderProps, WeightageColumnLabels, WeightageGroup, WeightageRow, WeightageTableProps };