@splunk/react-field-summary 0.11.0 → 27.2.1

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 (42) hide show
  1. package/components/FieldList/FieldList.js +155 -115
  2. package/components/FieldList/FieldList.js.map +7 -0
  3. package/components/FieldList/index.js +160 -16
  4. package/components/FieldList/index.js.map +7 -0
  5. package/components/FieldSummary/Abbreviate.js +58 -26
  6. package/components/FieldSummary/Abbreviate.js.map +7 -0
  7. package/components/FieldSummary/FieldActions.js +105 -70
  8. package/components/FieldSummary/FieldActions.js.map +7 -0
  9. package/components/FieldSummary/FieldStats.js +102 -96
  10. package/components/FieldSummary/FieldStats.js.map +7 -0
  11. package/components/FieldSummary/FieldSummary.js +554 -238
  12. package/components/FieldSummary/FieldSummary.js.map +7 -0
  13. package/components/FieldSummary/FieldSummaryTable.js +188 -217
  14. package/components/FieldSummary/FieldSummaryTable.js.map +7 -0
  15. package/components/FieldSummary/SelectionButtons.js +157 -74
  16. package/components/FieldSummary/SelectionButtons.js.map +7 -0
  17. package/components/FieldSummary/SplitButton.js +166 -113
  18. package/components/FieldSummary/SplitButton.js.map +7 -0
  19. package/components/FieldSummary/index.js +589 -37
  20. package/components/FieldSummary/index.js.map +7 -0
  21. package/components/FieldSummaryList/FieldSummaryList.js +698 -148
  22. package/components/FieldSummaryList/FieldSummaryList.js.map +7 -0
  23. package/components/FieldSummaryList/index.js +729 -9
  24. package/components/FieldSummaryList/index.js.map +7 -0
  25. package/index.js +735 -0
  26. package/index.js.map +7 -0
  27. package/package.json +65 -20
  28. package/{components → types/components}/FieldList/FieldList.d.ts +2 -2
  29. package/{components → types/components}/FieldSummary/FieldActions.d.ts +1 -1
  30. package/{components → types/components}/FieldSummary/FieldSummary.d.ts +1 -1
  31. package/{components → types/components}/FieldSummary/FieldSummaryTable.d.ts +8 -6
  32. package/{components → types/components}/FieldSummary/SelectionButtons.d.ts +1 -1
  33. package/{components → types/components}/FieldSummary/SplitButton.d.ts +1 -1
  34. package/types/index.d.ts +1 -0
  35. package/components/FieldSummaryList/tests/FieldSummaryList.stories.d.ts +0 -6
  36. package/components/FieldSummaryList/tests/FieldSummaryList.unit.d.ts +0 -1
  37. /package/{components → types/components}/FieldList/index.d.ts +0 -0
  38. /package/{components → types/components}/FieldSummary/Abbreviate.d.ts +0 -0
  39. /package/{components → types/components}/FieldSummary/FieldStats.d.ts +0 -0
  40. /package/{components → types/components}/FieldSummary/index.d.ts +0 -0
  41. /package/{components → types/components}/FieldSummaryList/FieldSummaryList.d.ts +0 -0
  42. /package/{components → types/components}/FieldSummaryList/index.d.ts +0 -0
@@ -1,15 +1,735 @@
1
- "use strict";
1
+ /* Copyright © 2020 Splunk Inc.
2
+ SPLUNK CONFIDENTIAL – Use or disclosure of this material in whole or
3
+ in part without a valid written license from Splunk Inc. is PROHIBITED. */
4
+ var __create = Object.create;
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
+ var __getProtoOf = Object.getPrototypeOf;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
12
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
+ var __spreadValues = (a, b) => {
14
+ for (var prop in b || (b = {}))
15
+ if (__hasOwnProp.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ if (__getOwnPropSymbols)
18
+ for (var prop of __getOwnPropSymbols(b)) {
19
+ if (__propIsEnum.call(b, prop))
20
+ __defNormalProp(a, prop, b[prop]);
21
+ }
22
+ return a;
23
+ };
24
+ var __objRest = (source, exclude) => {
25
+ var target = {};
26
+ for (var prop in source)
27
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
28
+ target[prop] = source[prop];
29
+ if (source != null && __getOwnPropSymbols)
30
+ for (var prop of __getOwnPropSymbols(source)) {
31
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
32
+ target[prop] = source[prop];
33
+ }
34
+ return target;
35
+ };
36
+ var __export = (target, all) => {
37
+ for (var name in all)
38
+ __defProp(target, name, { get: all[name], enumerable: true });
39
+ };
40
+ var __copyProps = (to, from, except, desc) => {
41
+ if (from && typeof from === "object" || typeof from === "function") {
42
+ for (let key of __getOwnPropNames(from))
43
+ if (!__hasOwnProp.call(to, key) && key !== except)
44
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
45
+ }
46
+ return to;
47
+ };
48
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
49
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
50
+ // If the importer is in node compatibility mode or this is not an ESM
51
+ // file that has been converted to a CommonJS file using a Babel-
52
+ // compatible transform (i.e. "__esModule" has not been set), then set
53
+ // "default" to the CommonJS "module.exports" for node compatibility.
54
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
55
+ mod
56
+ ));
57
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
58
+
59
+ // src/components/FieldSummaryList/index.ts
60
+ var FieldSummaryList_exports = {};
61
+ __export(FieldSummaryList_exports, {
62
+ default: () => FieldSummaryList_default
63
+ });
64
+ module.exports = __toCommonJS(FieldSummaryList_exports);
65
+
66
+ // esm-externals:react
67
+ var react_exports = {};
68
+ __export(react_exports, {
69
+ default: () => react_default
70
+ });
71
+ var defaultImport = __toESM(require("react"));
72
+ __reExport(react_exports, require("react"));
73
+ var react_default = "default" in defaultImport ? defaultImport.default : defaultImport;
74
+
75
+ // esm-externals:styled-components
76
+ var styled_components_exports = {};
77
+ __export(styled_components_exports, {
78
+ default: () => styled_components_default
79
+ });
80
+ var defaultImport2 = __toESM(require("styled-components"));
81
+ __reExport(styled_components_exports, require("styled-components"));
82
+ var styled_components_default = "default" in defaultImport2 ? defaultImport2.default : defaultImport2;
2
83
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
84
+ // esm-externals:@splunk/react-ui/Popover
85
+ var Popover_exports = {};
86
+ __export(Popover_exports, {
87
+ default: () => Popover_default
88
+ });
89
+ var defaultImport3 = __toESM(require("@splunk/react-ui/Popover"));
90
+ __reExport(Popover_exports, require("@splunk/react-ui/Popover"));
91
+ var Popover_default = "default" in defaultImport3 ? defaultImport3.default : defaultImport3;
4
92
 
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
93
+ // esm-externals:@splunk/react-ui/Text
94
+ var Text_exports = {};
95
+ __export(Text_exports, {
96
+ default: () => Text_default
7
97
  });
8
- Object.defineProperty(exports, "default", {
9
- enumerable: true,
10
- get: function () {
11
- return _FieldSummaryList.default;
98
+ var defaultImport4 = __toESM(require("@splunk/react-ui/Text"));
99
+ __reExport(Text_exports, require("@splunk/react-ui/Text"));
100
+ var Text_default = "default" in defaultImport4 ? defaultImport4.default : defaultImport4;
101
+
102
+ // esm-externals:@splunk/themes
103
+ var themes_exports = {};
104
+ __export(themes_exports, {
105
+ default: () => themes_default
106
+ });
107
+ var defaultImport5 = __toESM(require("@splunk/themes"));
108
+ __reExport(themes_exports, require("@splunk/themes"));
109
+ var themes_default = "default" in defaultImport5 ? defaultImport5.default : defaultImport5;
110
+
111
+ // esm-externals:@splunk/ui-utils/i18n
112
+ var i18n_exports = {};
113
+ __export(i18n_exports, {
114
+ default: () => i18n_default
115
+ });
116
+ var defaultImport6 = __toESM(require("@splunk/ui-utils/i18n"));
117
+ __reExport(i18n_exports, require("@splunk/ui-utils/i18n"));
118
+ var i18n_default = "default" in defaultImport6 ? defaultImport6.default : defaultImport6;
119
+
120
+ // esm-externals:@splunk/react-icons/enterprise/Number
121
+ var Number_exports = {};
122
+ __export(Number_exports, {
123
+ default: () => Number_default
124
+ });
125
+ var defaultImport7 = __toESM(require("@splunk/react-icons/enterprise/Number"));
126
+ __reExport(Number_exports, require("@splunk/react-icons/enterprise/Number"));
127
+ var Number_default = "default" in defaultImport7 ? defaultImport7.default : defaultImport7;
128
+
129
+ // esm-externals:@splunk/react-icons/enterprise/String
130
+ var String_exports = {};
131
+ __export(String_exports, {
132
+ default: () => String_default
133
+ });
134
+ var defaultImport8 = __toESM(require("@splunk/react-icons/enterprise/String"));
135
+ __reExport(String_exports, require("@splunk/react-icons/enterprise/String"));
136
+ var String_default = "default" in defaultImport8 ? defaultImport8.default : defaultImport8;
137
+
138
+ // src/components/FieldList/FieldList.tsx
139
+ var ICON_SIZE = 0.6;
140
+ var Container = styled_components_default.ol`
141
+ list-style-type: none;
142
+ margin: 0;
143
+ padding: 0;
144
+ svg {
145
+ padding-right: ${themes_exports.variables.spacingXSmall};
146
+ color: ${themes_exports.variables.contentColorMuted};
147
+ }
148
+
149
+ button {
150
+ display: flex;
151
+ align-items: baseline;
152
+ border: none;
153
+ text-align: left;
154
+ width: 100%;
155
+ height: 100%;
156
+ color: ${themes_exports.variables.contentColorDefault};
157
+ font-size: ${themes_exports.variables.fontSize};
158
+ padding: calc(${themes_exports.variables.spacingXSmall} / 2) ${themes_exports.variables.spacingXSmall};
159
+ margin: 0;
160
+ background-color: inherit;
161
+ }
162
+
163
+ button:not([disabled]) {
164
+ cursor: pointer;
165
+ color: ${themes_exports.variables.linkColor};
166
+ }
167
+
168
+ li {
169
+ background-color: inherit;
170
+
171
+ padding: 0;
172
+ margin: 0;
173
+ }
174
+
175
+ button:not([disabled]):hover,
176
+ button[aria-pressed='true'] {
177
+ background-color: ${(0, themes_exports.pick)({
178
+ enterprise: themes_exports.variables.backgroundColorHover,
179
+ prisma: themes_exports.variables.interactiveColorOverlayHover
180
+ })};
181
+ }
182
+
183
+ button:not([disabled]):focus {
184
+ outline: 0;
185
+ box-shadow: ${themes_exports.variables.focusShadowInset};
186
+
187
+ ::-moz-focus-inner {
188
+ border: 0;
189
+ }
190
+ }
191
+ `;
192
+ var Name = styled_components_default.span`
193
+ min-width: 0;
194
+ flex-shrink: 2;
195
+ overflow: hidden;
196
+ text-overflow: ellipsis;
197
+ white-space: nowrap;
198
+ `;
199
+ var Count = styled_components_default.span`
200
+ padding-left: ${themes_exports.variables.spacingXSmall};
201
+ color: ${themes_exports.variables.contentColorMuted};
202
+ `;
203
+ var isNumeric = (field) => field.numericCount && Number(field.numericCount) / Number(field.count) > 0.7;
204
+ var Field = ({ active, field, onFieldClicked }) => {
205
+ const clickHandler = onFieldClicked ? (e) => onFieldClicked(e, field) : void 0;
206
+ const numeric = isNumeric(field);
207
+ return /* @__PURE__ */ react_default.createElement("li", null, /* @__PURE__ */ react_default.createElement("button", { type: "button", onClick: clickHandler, disabled: !onFieldClicked, "aria-pressed": active }, numeric ? /* @__PURE__ */ react_default.createElement(Number_default, { size: ICON_SIZE }) : /* @__PURE__ */ react_default.createElement(String_default, { size: ICON_SIZE }), /* @__PURE__ */ react_default.createElement(Name, { title: field.name }, field.name), /* @__PURE__ */ react_default.createElement(Count, null, field.distinctCount > 100 ? "100+" : field.distinctCount)));
208
+ };
209
+ var FieldList = ({ active, fields, onFieldClicked }) => /* @__PURE__ */ react_default.createElement(Container, { "data-test": "field-list" }, fields.map((field) => /* @__PURE__ */ react_default.createElement(
210
+ Field,
211
+ {
212
+ key: field.name,
213
+ field,
214
+ onFieldClicked,
215
+ active: field.name === active
12
216
  }
217
+ )));
218
+ var FieldList_default = FieldList;
219
+
220
+ // esm-externals:@splunk/ui-utils/format
221
+ var format_exports = {};
222
+ __export(format_exports, {
223
+ default: () => format_default
224
+ });
225
+ var defaultImport9 = __toESM(require("@splunk/ui-utils/format"));
226
+ __reExport(format_exports, require("@splunk/ui-utils/format"));
227
+ var format_default = "default" in defaultImport9 ? defaultImport9.default : defaultImport9;
228
+
229
+ // src/components/FieldSummary/Abbreviate.tsx
230
+ var formatNumber = new Intl.NumberFormat().format;
231
+ var Abbreviate = ({ value }) => /* @__PURE__ */ react_default.createElement("span", { title: formatNumber(value) }, (0, format_exports.abbreviateNumber)(value));
232
+ var Abbreviate_default = Abbreviate;
233
+
234
+ // esm-externals:@splunk/react-ui/Link
235
+ var Link_exports = {};
236
+ __export(Link_exports, {
237
+ default: () => Link_default
238
+ });
239
+ var defaultImport10 = __toESM(require("@splunk/react-ui/Link"));
240
+ __reExport(Link_exports, require("@splunk/react-ui/Link"));
241
+ var Link_default = "default" in defaultImport10 ? defaultImport10.default : defaultImport10;
242
+
243
+ // src/components/FieldSummary/FieldActions.tsx
244
+ var StyledActions = styled_components_default.div`
245
+ padding-left: ${themes_exports.variables.spacingMedium};
246
+
247
+ h3 {
248
+ font-size: ${themes_exports.variables.fontSize};
249
+ margin: 0;
250
+ padding: 1px;
251
+ margin-top: 2px;
252
+ }
253
+
254
+ ul {
255
+ list-style-type: none;
256
+ padding: 0;
257
+ margin: 0;
258
+
259
+ button {
260
+ line-height: calc(${themes_exports.variables.lineHeight} * 0.8);
261
+ margin-bottom: ${themes_exports.variables.spacingXSmall};
262
+ }
263
+ }
264
+ `;
265
+ var Actions = ({ field, actions, selected, onActionClicked }) => actions && actions.length > 0 ? /* @__PURE__ */ react_default.createElement(StyledActions, null, /* @__PURE__ */ react_default.createElement("h3", null, (0, i18n_exports._)("Actions")), /* @__PURE__ */ react_default.createElement("ul", null, actions.map(({ name, label, requiresSelection }) => /* @__PURE__ */ react_default.createElement("li", { key: name }, /* @__PURE__ */ react_default.createElement(
266
+ Link_default,
267
+ {
268
+ disabled: !onActionClicked || requiresSelection && selected.length === 0,
269
+ onClick: (e) => onActionClicked(e, { action: name, field, selected })
270
+ },
271
+ label
272
+ ))))) : null;
273
+ var FieldActions_default = Actions;
274
+
275
+ // src/components/FieldSummary/FieldStats.tsx
276
+ var DL = styled_components_default.dl`
277
+ color: ${themes_exports.variables.contentColorDefault};
278
+ margin-top: ${themes_exports.variables.spacingSmall};
279
+ margin-bottom: ${themes_exports.variables.spacingSmall};
280
+ dt {
281
+ display: inline-block;
282
+ font-weight: bold;
283
+ }
284
+ dt::after {
285
+ content: ':';
286
+ }
287
+ dd {
288
+ display: inline-block;
289
+ margin-left: ${themes_exports.variables.spacingXSmall};
290
+ margin-right: ${themes_exports.variables.spacingSmall};
291
+ }
292
+ `;
293
+ var Stat = ({ label, value }) => /* @__PURE__ */ react_default.createElement(react_default.Fragment, null, /* @__PURE__ */ react_default.createElement("dt", null, label), /* @__PURE__ */ react_default.createElement("dd", null, /* @__PURE__ */ react_default.createElement(Abbreviate_default, { value })));
294
+ var FieldStats = ({ mean, min, max, stdev }) => typeof mean !== "number" ? null : /* @__PURE__ */ react_default.createElement(DL, null, /* @__PURE__ */ react_default.createElement(Stat, { label: (0, i18n_exports._)("Min"), value: min }), /* @__PURE__ */ react_default.createElement(Stat, { label: (0, i18n_exports._)("Max"), value: max }), /* @__PURE__ */ react_default.createElement(Stat, { label: (0, i18n_exports._)("Avg"), value: mean }), /* @__PURE__ */ react_default.createElement(Stat, { label: (0, i18n_exports._)("Std Dev"), value: stdev }));
295
+ var FieldStats_default = FieldStats;
296
+
297
+ // esm-externals:@splunk/react-ui/Switch
298
+ var Switch_exports = {};
299
+ __export(Switch_exports, {
300
+ default: () => Switch_default
301
+ });
302
+ var defaultImport11 = __toESM(require("@splunk/react-ui/Switch"));
303
+ __reExport(Switch_exports, require("@splunk/react-ui/Switch"));
304
+ var Switch_default = "default" in defaultImport11 ? defaultImport11.default : defaultImport11;
305
+
306
+ // esm-externals:@splunk/ui-utils/id
307
+ var id_exports = {};
308
+ __export(id_exports, {
309
+ default: () => id_default
13
310
  });
311
+ var defaultImport12 = __toESM(require("@splunk/ui-utils/id"));
312
+ __reExport(id_exports, require("@splunk/ui-utils/id"));
313
+ var id_default = "default" in defaultImport12 ? defaultImport12.default : defaultImport12;
14
314
 
15
- var _FieldSummaryList = _interopRequireDefault(require("./FieldSummaryList"));
315
+ // src/components/FieldSummary/FieldSummaryTable.tsx
316
+ var BAR_WIDTH = "100px";
317
+ var BarContainer = styled_components_default.div`
318
+ width: ${BAR_WIDTH};
319
+ background-color: ${(0, themes_exports.pick)({
320
+ enterprise: themes_exports.variables.backgroundColorHover,
321
+ prisma: themes_exports.variables.interactiveColorOverlayHover
322
+ })};
323
+ `;
324
+ var Bar = styled_components_default.div`
325
+ height: ${themes_exports.variables.lineHeight};
326
+ background-color: ${(0, themes_exports.pick)({
327
+ enterprise: themes_exports.variables.accentColor,
328
+ prisma: themes_exports.variables.interactiveColorPrimary
329
+ })};
330
+ `;
331
+ var StyledSwitch = styled_components_default(Switch_default)`
332
+ margin: 0 ${themes_exports.variables.spacingXSmall} 0 0;
333
+ padding: 0;
334
+ `;
335
+ var NumericCell = styled_components_default.td`
336
+ text-align: right;
337
+ `;
338
+ var ValueCell = styled_components_default.td`
339
+ width: 100%;
340
+ `;
341
+ var NumericHeading = styled_components_default.th`
342
+ text-align: right;
343
+ `;
344
+ var Truncated = styled_components_default.span`
345
+ text-overflow: ellipsis;
346
+ min-width: 0;
347
+ display: -webkit-box;
348
+ -webkit-line-clamp: 1;
349
+ -webkit-box-orient: vertical;
350
+ overflow: hidden;
351
+ word-wrap: anywhere;
352
+ word-break: break-all;
353
+ `;
354
+ var Table = styled_components_default.table`
355
+ tbody {
356
+ td {
357
+ font-family: ${themes_exports.variables.monoFontFamily};
358
+ button {
359
+ font-family: ${themes_exports.variables.monoFontFamily};
360
+ }
361
+ }
362
+
363
+ th:last-child {
364
+ width: ${BAR_WIDTH};
365
+ }
366
+ }
367
+ `;
368
+ var FieldSummaryTable = ({
369
+ total,
370
+ values,
371
+ selected,
372
+ onFieldValueSelected,
373
+ onFieldValueClicked
374
+ }) => {
375
+ const firstColSpan = onFieldValueSelected ? 2 : 1;
376
+ return /* @__PURE__ */ react_default.createElement(Table, null, /* @__PURE__ */ react_default.createElement("thead", null, /* @__PURE__ */ react_default.createElement("tr", null, /* @__PURE__ */ react_default.createElement("th", { colSpan: firstColSpan }, (0, i18n_exports._)("Top Values")), /* @__PURE__ */ react_default.createElement(NumericHeading, null, (0, i18n_exports._)("Count")), /* @__PURE__ */ react_default.createElement("th", null))), /* @__PURE__ */ react_default.createElement("tbody", null, values.map(({ count, value }) => {
377
+ const percent = count < total ? count / total * 100 : 100;
378
+ const percentOfEvents = (0, format_exports.sprintf)((0, i18n_exports._)("%(percent)s%% of %(total)s events"), {
379
+ percent: formatNumber(percent),
380
+ total: formatNumber(total)
381
+ });
382
+ const labelId = (0, id_exports.createDOMID)();
383
+ return /* @__PURE__ */ react_default.createElement("tr", { key: value }, onFieldValueSelected && /* @__PURE__ */ react_default.createElement("td", null, /* @__PURE__ */ react_default.createElement(
384
+ StyledSwitch,
385
+ {
386
+ key: value,
387
+ value,
388
+ selected: selected.indexOf(value) >= 0,
389
+ appearance: "checkbox",
390
+ onClick: onFieldValueSelected,
391
+ labelledBy: labelId
392
+ }
393
+ )), /* @__PURE__ */ react_default.createElement(ValueCell, { title: value }, onFieldValueClicked ? /* @__PURE__ */ react_default.createElement(
394
+ Link_default,
395
+ {
396
+ onClick: (e) => onFieldValueClicked(e, { value })
397
+ },
398
+ /* @__PURE__ */ react_default.createElement(Truncated, { id: labelId }, value)
399
+ ) : /* @__PURE__ */ react_default.createElement(Truncated, { id: labelId }, value)), /* @__PURE__ */ react_default.createElement(NumericCell, { title: percentOfEvents }, formatNumber(count)), /* @__PURE__ */ react_default.createElement("td", { title: percentOfEvents }, /* @__PURE__ */ react_default.createElement(BarContainer, null, /* @__PURE__ */ react_default.createElement(Bar, { style: { width: `${percent}%` } }))));
400
+ })));
401
+ };
402
+ var FieldSummaryTable_default = FieldSummaryTable;
403
+
404
+ // esm-externals:@splunk/react-icons/enterprise/Caret
405
+ var Caret_exports = {};
406
+ __export(Caret_exports, {
407
+ default: () => Caret_default
408
+ });
409
+ var defaultImport13 = __toESM(require("@splunk/react-icons/enterprise/Caret"));
410
+ __reExport(Caret_exports, require("@splunk/react-icons/enterprise/Caret"));
411
+ var Caret_default = "default" in defaultImport13 ? defaultImport13.default : defaultImport13;
412
+
413
+ // esm-externals:@splunk/react-ui/Menu
414
+ var Menu_exports = {};
415
+ __export(Menu_exports, {
416
+ default: () => Menu_default
417
+ });
418
+ var defaultImport14 = __toESM(require("@splunk/react-ui/Menu"));
419
+ __reExport(Menu_exports, require("@splunk/react-ui/Menu"));
420
+ var Menu_default = "default" in defaultImport14 ? defaultImport14.default : defaultImport14;
421
+
422
+ // esm-externals:@splunk/react-ui/Button
423
+ var Button_exports = {};
424
+ __export(Button_exports, {
425
+ default: () => Button_default
426
+ });
427
+ var defaultImport15 = __toESM(require("@splunk/react-ui/Button"));
428
+ __reExport(Button_exports, require("@splunk/react-ui/Button"));
429
+ var Button_default = "default" in defaultImport15 ? defaultImport15.default : defaultImport15;
430
+
431
+ // esm-externals:@splunk/react-ui/ButtonGroup
432
+ var ButtonGroup_exports = {};
433
+ __export(ButtonGroup_exports, {
434
+ default: () => ButtonGroup_default
435
+ });
436
+ var defaultImport16 = __toESM(require("@splunk/react-ui/ButtonGroup"));
437
+ __reExport(ButtonGroup_exports, require("@splunk/react-ui/ButtonGroup"));
438
+ var ButtonGroup_default = "default" in defaultImport16 ? defaultImport16.default : defaultImport16;
439
+
440
+ // esm-externals:@splunk/react-ui/Dropdown
441
+ var Dropdown_exports = {};
442
+ __export(Dropdown_exports, {
443
+ default: () => Dropdown_default
444
+ });
445
+ var defaultImport17 = __toESM(require("@splunk/react-ui/Dropdown"));
446
+ __reExport(Dropdown_exports, require("@splunk/react-ui/Dropdown"));
447
+ var Dropdown_default = "default" in defaultImport17 ? defaultImport17.default : defaultImport17;
448
+
449
+ // src/components/FieldSummary/SplitButton.tsx
450
+ var SplitButton = (_a) => {
451
+ var _b = _a, {
452
+ actions,
453
+ selectionCount,
454
+ onActionClicked
455
+ } = _b, otherProps = __objRest(_b, [
456
+ "actions",
457
+ "selectionCount",
458
+ "onActionClicked"
459
+ ]);
460
+ if (actions.length === 0) {
461
+ return null;
462
+ }
463
+ const [first, ...rest] = actions;
464
+ const clickHandler = onActionClicked ? (action) => (e) => onActionClicked(e, { action }) : () => void 0;
465
+ let popup = null;
466
+ if (rest.length > 0) {
467
+ const toggle = /* @__PURE__ */ react_default.createElement(
468
+ Button_default,
469
+ {
470
+ prepend: true,
471
+ key: "more-actions",
472
+ "data-test": "more-actions",
473
+ icon: /* @__PURE__ */ react_default.createElement(Caret_default, { screenReaderText: (0, i18n_exports._)("More Actions") }),
474
+ appearance: "toggle",
475
+ disabled: selectionCount === 0
476
+ }
477
+ );
478
+ popup = /* @__PURE__ */ react_default.createElement(Dropdown_default, { toggle }, /* @__PURE__ */ react_default.createElement(Menu_default, null, rest.map((action) => /* @__PURE__ */ react_default.createElement(
479
+ Menu_default.Item,
480
+ {
481
+ key: action.name,
482
+ "data-test": action.name,
483
+ onClick: clickHandler(action.name)
484
+ },
485
+ action.label,
486
+ " "
487
+ ))));
488
+ }
489
+ return /* @__PURE__ */ react_default.createElement(ButtonGroup_default, __spreadValues({ "data-test": "split-button" }, otherProps), /* @__PURE__ */ react_default.createElement(
490
+ Button_default,
491
+ {
492
+ key: first.name,
493
+ "data-test": first.name,
494
+ label: first.label,
495
+ appearance: "toggle",
496
+ onClick: clickHandler(first.name),
497
+ disabled: selectionCount === 0
498
+ }
499
+ ), popup);
500
+ };
501
+ var SplitButton_default = SplitButton;
502
+
503
+ // src/components/FieldSummary/FieldSummary.tsx
504
+ var defaultActionsForField = (field, actionsForField) => {
505
+ const actions = [];
506
+ if (isNumeric(field)) {
507
+ actions.push({ name: "avgByTime", label: (0, i18n_exports._)("Average over time") });
508
+ actions.push({ name: "maxByTime", label: (0, i18n_exports._)("Maximum value over time") });
509
+ actions.push({ name: "minByTime", label: (0, i18n_exports._)("Minimum value over time") });
510
+ }
511
+ actions.push({ name: "topValues", label: (0, i18n_exports._)("Top values") });
512
+ actions.push({ name: "topValuesByTime", label: (0, i18n_exports._)("Top values by time") });
513
+ actions.push({ name: "rareValues", label: (0, i18n_exports._)("Rare values") });
514
+ actions.push({ name: "allValues", label: (0, i18n_exports._)("Events with this field") });
515
+ actions.push({
516
+ name: "includeValues",
517
+ label: (0, i18n_exports._)("Include Selected"),
518
+ requiresSelection: true
519
+ });
520
+ actions.push({
521
+ name: "excludeValues",
522
+ label: (0, i18n_exports._)("Exclude Selected"),
523
+ requiresSelection: true
524
+ });
525
+ return actionsForField ? actionsForField(field, actions) : actions;
526
+ };
527
+ var Name2 = styled_components_default.h2`
528
+ font-size: ${themes_exports.variables.fontSizeXLarge};
529
+ margin: ${themes_exports.variables.spacingSmall} 0;
530
+ text-overflow: ellipsis;
531
+ overflow: hidden;
532
+ `;
533
+ var StyledCoverage = styled_components_default.div`
534
+ color: ${themes_exports.variables.contentColorDefault};
535
+ margin-bottom: ${themes_exports.variables.spacingSmall};
536
+ `;
537
+ var TableAndActions = styled_components_default.div`
538
+ display: flex;
539
+
540
+ & > div:nth-child(1) {
541
+ flex: 1 1;
542
+ table {
543
+ width: 100%;
544
+ }
545
+ }
546
+
547
+ & > div:nth-child(2) {
548
+ width: 150px;
549
+ }
550
+ `;
551
+ var Coverage = ({
552
+ distinctCount,
553
+ count,
554
+ eventCount
555
+ }) => {
556
+ const content = [/* @__PURE__ */ react_default.createElement(Abbreviate_default, { key: "values", value: distinctCount }), (0, i18n_exports._)(" values")];
557
+ if (eventCount) {
558
+ content.push((0, i18n_exports._)(" in "));
559
+ content.push(`${formatNumber(count / eventCount * 100)}%`);
560
+ content.push((0, i18n_exports._)(" of "));
561
+ content.push(/* @__PURE__ */ react_default.createElement(Abbreviate_default, { key: "events", value: eventCount }));
562
+ content.push((0, i18n_exports._)(" events"));
563
+ }
564
+ return /* @__PURE__ */ react_default.createElement(StyledCoverage, null, content);
565
+ };
566
+ var FieldSummary = (_a) => {
567
+ var _b = _a, {
568
+ field,
569
+ eventCount,
570
+ actionsForField,
571
+ onActionClicked,
572
+ onFieldValueClicked
573
+ } = _b, rest = __objRest(_b, [
574
+ "field",
575
+ "eventCount",
576
+ "actionsForField",
577
+ "onActionClicked",
578
+ "onFieldValueClicked"
579
+ ]);
580
+ const [selected, setSelected] = (0, react_exports.useState)([]);
581
+ const handleSelectValue = (0, react_exports.useCallback)(
582
+ (e, data) => {
583
+ setSelected((prev) => {
584
+ const filtered = prev.filter((x) => x !== data.value);
585
+ if (prev.length !== filtered.length) {
586
+ return filtered;
587
+ }
588
+ return [...filtered, data.value];
589
+ });
590
+ },
591
+ []
592
+ );
593
+ const actions = (0, react_exports.useMemo)(() => defaultActionsForField(field, actionsForField), [field, actionsForField]);
594
+ const selectionActions = (0, react_exports.useMemo)(() => actions.filter((action) => action.requiresSelection), [actions]);
595
+ const nonSelectionActions = (0, react_exports.useMemo)(() => actions.filter((action) => !action.requiresSelection), [actions]);
596
+ const handleActionClicked = (0, react_exports.useMemo)(() => {
597
+ if (!onActionClicked) {
598
+ return void 0;
599
+ }
600
+ return (e, { action }) => onActionClicked(e, { action, field: field.name, selected });
601
+ }, [onActionClicked, field.name, selected]);
602
+ const handleFieldValueClicked = (0, react_exports.useMemo)(() => {
603
+ if (!onFieldValueClicked) {
604
+ return void 0;
605
+ }
606
+ return (e, { value }) => onFieldValueClicked(e, { field: field.name, value });
607
+ }, [onFieldValueClicked, field.name]);
608
+ return /* @__PURE__ */ react_default.createElement("div", __spreadValues({ "data-test": "field-summary" }, rest), /* @__PURE__ */ react_default.createElement(Name2, { title: field.name }, field.name), /* @__PURE__ */ react_default.createElement(Coverage, { distinctCount: field.distinctCount, count: field.count, eventCount }), /* @__PURE__ */ react_default.createElement(FieldStats_default, __spreadValues({}, field)), /* @__PURE__ */ react_default.createElement(
609
+ SplitButton_default,
610
+ {
611
+ actions: selectionActions,
612
+ selectionCount: selected.length,
613
+ onActionClicked: handleActionClicked
614
+ }
615
+ ), /* @__PURE__ */ react_default.createElement(TableAndActions, null, /* @__PURE__ */ react_default.createElement("div", null, /* @__PURE__ */ react_default.createElement(
616
+ FieldSummaryTable_default,
617
+ {
618
+ total: field.count,
619
+ values: field.modes,
620
+ selected,
621
+ onFieldValueSelected: selectionActions.length > 0 ? handleSelectValue : void 0,
622
+ onFieldValueClicked: handleFieldValueClicked
623
+ }
624
+ )), /* @__PURE__ */ react_default.createElement(
625
+ FieldActions_default,
626
+ {
627
+ field: field.name,
628
+ actions: nonSelectionActions,
629
+ selected,
630
+ onActionClicked
631
+ }
632
+ )));
633
+ };
634
+ var FieldSummary_default = FieldSummary;
635
+
636
+ // src/components/FieldSummaryList/FieldSummaryList.tsx
637
+ var Padding = styled_components_default.div`
638
+ padding: ${themes_exports.variables.spacingMedium};
639
+ min-width: 450px;
640
+ max-width: 800px;
641
+ `;
642
+ var Message = styled_components_default.p`
643
+ text-overflow: ellipsis;
644
+ overflow-x: hidden;
645
+ `;
646
+ var FieldSummaryList = ({
647
+ eventCount,
648
+ fields,
649
+ actionsForField,
650
+ onActionClicked,
651
+ onFieldValueClicked
652
+ }) => {
653
+ const [search, setSearch] = (0, react_exports.useState)("");
654
+ const [popupContext, setPopupContext] = (0, react_exports.useState)(null);
655
+ const handleChangeSearch = (0, react_exports.useCallback)(
656
+ (e, { value }) => setSearch(value),
657
+ []
658
+ );
659
+ const handleFieldClicked = (0, react_exports.useCallback)((e, { name }) => {
660
+ let button = e.target;
661
+ while (button && button.nodeName !== "BUTTON") {
662
+ button = button.parentNode;
663
+ }
664
+ setPopupContext({ anchor: button, field: name });
665
+ }, []);
666
+ const handleRequestClose = (0, react_exports.useCallback)(() => setPopupContext(null), []);
667
+ const content = [];
668
+ if (!fields || fields.length === 0) {
669
+ content.push(/* @__PURE__ */ react_default.createElement("p", { key: "no-fields" }, (0, i18n_exports._)("No fields")));
670
+ } else {
671
+ content.push(
672
+ /* @__PURE__ */ react_default.createElement(
673
+ Text_default,
674
+ {
675
+ key: "search",
676
+ appearance: "search",
677
+ value: search,
678
+ onChange: handleChangeSearch,
679
+ placeholder: (0, i18n_exports._)("Find field")
680
+ }
681
+ )
682
+ );
683
+ const lowerSearch = search.toLocaleLowerCase();
684
+ const filteredFields = search && fields ? fields.filter(({ name }) => name.toLocaleLowerCase().includes(lowerSearch)) : fields;
685
+ if (filteredFields.length > 0) {
686
+ content.push(
687
+ /* @__PURE__ */ react_default.createElement(
688
+ FieldList_default,
689
+ {
690
+ key: "field-list",
691
+ active: popupContext == null ? void 0 : popupContext.field,
692
+ fields: filteredFields,
693
+ onFieldClicked: handleFieldClicked
694
+ }
695
+ )
696
+ );
697
+ const found = fields.find(({ name }) => name === (popupContext == null ? void 0 : popupContext.field));
698
+ content.push(
699
+ /* @__PURE__ */ react_default.createElement(
700
+ Popover_default,
701
+ {
702
+ key: "popover",
703
+ open: popupContext !== null,
704
+ anchor: popupContext == null ? void 0 : popupContext.anchor,
705
+ onRequestClose: handleRequestClose,
706
+ defaultPlacement: "right"
707
+ },
708
+ found && /* @__PURE__ */ react_default.createElement(Padding, null, /* @__PURE__ */ react_default.createElement(
709
+ FieldSummary_default,
710
+ {
711
+ eventCount,
712
+ field: found,
713
+ actionsForField,
714
+ onActionClicked: (e, data) => {
715
+ onActionClicked(e, data);
716
+ handleRequestClose();
717
+ },
718
+ onFieldValueClicked: (e, data) => {
719
+ onFieldValueClicked(e, data);
720
+ handleRequestClose();
721
+ }
722
+ }
723
+ ))
724
+ )
725
+ );
726
+ } else {
727
+ content.push(
728
+ /* @__PURE__ */ react_default.createElement(Message, { key: "not-found" }, (0, i18n_exports._)("No fields found matching"), " ", /* @__PURE__ */ react_default.createElement("b", null, search))
729
+ );
730
+ }
731
+ }
732
+ return /* @__PURE__ */ react_default.createElement("div", { "data-test": "field-summary-list" }, content);
733
+ };
734
+ var FieldSummaryList_default = FieldSummaryList;
735
+ //# sourceMappingURL=index.js.map