@splunk/react-field-summary 0.11.0 → 27.2.2

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,185 +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);
2
58
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
59
+ // src/components/FieldSummaryList/FieldSummaryList.tsx
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;
83
+
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
- exports.default = void 0;
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;
9
101
 
10
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
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
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;
11
296
 
12
- var _react = _interopRequireWildcard(require("react"));
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;
13
305
 
14
- var _styledComponents = _interopRequireDefault(require("styled-components"));
306
+ // esm-externals:@splunk/ui-utils/id
307
+ var id_exports = {};
308
+ __export(id_exports, {
309
+ default: () => id_default
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;
15
314
 
16
- var _Popover = _interopRequireDefault(require("@splunk/react-ui/Popover"));
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
+ }
17
362
 
18
- var _Text = _interopRequireDefault(require("@splunk/react-ui/Text"));
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;
19
403
 
20
- var _themes = require("@splunk/themes");
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;
21
412
 
22
- var _i18n = require("@splunk/ui-utils/i18n");
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;
23
421
 
24
- var _FieldList = _interopRequireDefault(require("../FieldList"));
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;
25
430
 
26
- var _FieldSummary = _interopRequireDefault(require("../FieldSummary"));
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;
27
439
 
28
- var _jsxFileName = "/Users/ccoats/Developer/ui-platform/projects/lib/search-components/react-field-summary/src/components/FieldSummaryList/FieldSummaryList.tsx",
29
- _templateObject,
30
- _templateObject2;
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;
31
448
 
32
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
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;
33
502
 
34
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
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;
35
539
 
36
- const Padding = _styledComponents.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n padding: ", ";\n min-width: 450px;\n max-width: 800px;\n"])), _themes.variables.spacingMedium);
540
+ & > div:nth-child(1) {
541
+ flex: 1 1;
542
+ table {
543
+ width: 100%;
544
+ }
545
+ }
37
546
 
38
- const Message = _styledComponents.default.p(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n text-overflow: ellipsis;\n overflow-x: hidden;\n"])));
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;
39
635
 
40
- const FieldSummaryList = ({
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 = ({
41
647
  eventCount,
42
648
  fields,
43
649
  actionsForField,
44
650
  onActionClicked,
45
651
  onFieldValueClicked
46
652
  }) => {
47
- const [search, setSearch] = (0, _react.useState)('');
48
- const [popupContext, setPopupContext] = (0, _react.useState)(null);
49
- const handleChangeSearch = (0, _react.useCallback)((e, {
50
- value
51
- }) => setSearch(value), []);
52
- const handleFieldClicked = (0, _react.useCallback)((e, {
53
- name
54
- }) => {
55
- // get the button from the click target (it may be child of the button)
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 }) => {
56
660
  let button = e.target;
57
-
58
- while (button && button.nodeName !== 'BUTTON') {
661
+ while (button && button.nodeName !== "BUTTON") {
59
662
  button = button.parentNode;
60
663
  }
61
-
62
- setPopupContext({
63
- anchor: button,
64
- field: name
65
- });
664
+ setPopupContext({ anchor: button, field: name });
66
665
  }, []);
67
- const handleRequestClose = (0, _react.useCallback)(() => setPopupContext(null), []);
666
+ const handleRequestClose = (0, react_exports.useCallback)(() => setPopupContext(null), []);
68
667
  const content = [];
69
-
70
668
  if (!fields || fields.length === 0) {
71
- content.push( /*#__PURE__*/_react.default.createElement("p", {
72
- key: "no-fields",
73
- __self: void 0,
74
- __source: {
75
- fileName: _jsxFileName,
76
- lineNumber: 96,
77
- columnNumber: 22
78
- }
79
- }, (0, _i18n._)('No fields')));
669
+ content.push(/* @__PURE__ */ react_default.createElement("p", { key: "no-fields" }, (0, i18n_exports._)("No fields")));
80
670
  } else {
81
- content.push( /*#__PURE__*/_react.default.createElement(_Text.default, {
82
- key: "search",
83
- appearance: "search",
84
- value: search,
85
- onChange: handleChangeSearch,
86
- placeholder: (0, _i18n._)('Find field'),
87
- __self: void 0,
88
- __source: {
89
- fileName: _jsxFileName,
90
- lineNumber: 99,
91
- columnNumber: 13
92
- }
93
- }));
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
+ );
94
683
  const lowerSearch = search.toLocaleLowerCase();
95
- const filteredFields = search && fields ? fields.filter(({
96
- name
97
- }) => name.toLocaleLowerCase().includes(lowerSearch)) : fields;
98
-
684
+ const filteredFields = search && fields ? fields.filter(({ name }) => name.toLocaleLowerCase().includes(lowerSearch)) : fields;
99
685
  if (filteredFields.length > 0) {
100
- content.push( /*#__PURE__*/_react.default.createElement(_FieldList.default, {
101
- key: "field-list",
102
- active: popupContext == null ? void 0 : popupContext.field,
103
- fields: filteredFields,
104
- onFieldClicked: handleFieldClicked,
105
- __self: void 0,
106
- __source: {
107
- fileName: _jsxFileName,
108
- lineNumber: 115,
109
- columnNumber: 17
110
- }
111
- }));
112
- const found = fields.find(({
113
- name
114
- }) => name === (popupContext == null ? void 0 : popupContext.field));
115
- content.push( /*#__PURE__*/_react.default.createElement(_Popover.default, {
116
- key: "popover",
117
- open: popupContext !== null,
118
- anchor: popupContext == null ? void 0 : popupContext.anchor,
119
- onRequestClose: handleRequestClose,
120
- defaultPlacement: "right",
121
- __self: void 0,
122
- __source: {
123
- fileName: _jsxFileName,
124
- lineNumber: 125,
125
- columnNumber: 17
126
- }
127
- }, found && /*#__PURE__*/_react.default.createElement(Padding, {
128
- __self: void 0,
129
- __source: {
130
- fileName: _jsxFileName,
131
- lineNumber: 133,
132
- columnNumber: 25
133
- }
134
- }, /*#__PURE__*/_react.default.createElement(_FieldSummary.default, {
135
- eventCount: eventCount,
136
- field: found,
137
- actionsForField: actionsForField,
138
- onActionClicked: (e, data) => {
139
- onActionClicked(e, data);
140
- handleRequestClose();
141
- },
142
- onFieldValueClicked: (e, data) => {
143
- onFieldValueClicked(e, data);
144
- handleRequestClose();
145
- },
146
- __self: void 0,
147
- __source: {
148
- fileName: _jsxFileName,
149
- lineNumber: 134,
150
- columnNumber: 29
151
- }
152
- }))));
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
+ );
153
726
  } else {
154
- content.push( /*#__PURE__*/_react.default.createElement(Message, {
155
- key: "not-found",
156
- __self: void 0,
157
- __source: {
158
- fileName: _jsxFileName,
159
- lineNumber: 153,
160
- columnNumber: 17
161
- }
162
- }, (0, _i18n._)('No fields found matching'), " ", /*#__PURE__*/_react.default.createElement("b", {
163
- __self: void 0,
164
- __source: {
165
- fileName: _jsxFileName,
166
- lineNumber: 154,
167
- columnNumber: 53
168
- }
169
- }, search)));
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
+ );
170
730
  }
171
731
  }
172
-
173
- return /*#__PURE__*/_react.default.createElement("div", {
174
- "data-test": "field-summary-list",
175
- __self: void 0,
176
- __source: {
177
- fileName: _jsxFileName,
178
- lineNumber: 159,
179
- columnNumber: 12
180
- }
181
- }, content);
732
+ return /* @__PURE__ */ react_default.createElement("div", { "data-test": "field-summary-list" }, content);
182
733
  };
183
-
184
- var _default = FieldSummaryList;
185
- exports.default = _default;
734
+ var FieldSummaryList_default = FieldSummaryList;
735
+ //# sourceMappingURL=FieldSummaryList.js.map