@redsift/dashboard 11.5.0 → 11.6.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,474 @@
1
+ import { a as _objectWithoutProperties, _ as _objectSpread2, D as DashboardContext, b as _extends } from './context.js';
2
+ import React, { forwardRef, useRef, useState, useContext, useEffect } from 'react';
3
+ import classNames from 'classnames';
4
+ import { config, barChart, filters, redrawAll, filterAll } from 'dc';
5
+ import { utcParse, timeFormat, isoParse, timeMonth, scaleTime, timeMonths, timeYear, timeYears, timeWeek, timeWeeks, timeDay, timeDays, timeHour, timeHours } from 'd3';
6
+ import { Flexbox, useId, useTheme, Button } from '@redsift/design-system';
7
+ import { ColorTheme, useColor, scheme } from '@redsift/charts';
8
+ import styled, { css } from 'styled-components';
9
+ import { D as DashboardReducerActionType } from './types.js';
10
+ import { C as ChartEmptyState } from './ChartEmptyState2.js';
11
+ import { C as CrossfilterRegistry } from './CrossfilterRegistry2.js';
12
+
13
+ // istanbul ignore file
14
+ /**
15
+ * Component size.
16
+ */
17
+ const TimeSeriesBarChartSize = {
18
+ large: 'large',
19
+ medium: 'medium',
20
+ small: 'small'
21
+ };
22
+ /**
23
+ * Component theme.
24
+ */
25
+ const TimeSeriesBarChartTheme = ColorTheme;
26
+
27
+ /**
28
+ * Component props.
29
+ */
30
+
31
+ // istanbul ignore file
32
+ /**
33
+ * Component style.
34
+ */
35
+ const StyledTimeSeriesBarChart = styled.div`
36
+ margin: 16px;
37
+ padding: 16px;
38
+
39
+ text {
40
+ fill: ${_ref => {
41
+ let {
42
+ $theme
43
+ } = _ref;
44
+ return `var(--redsift-color-${$theme}-components-text-primary)`;
45
+ }};
46
+ }
47
+
48
+ .redsift-timeseries-barchart__chart {
49
+ display: flex;
50
+ font-family: var(--redsift-typography-font-family-poppins);
51
+ font-size: 12px;
52
+ justify-content: center;
53
+ margin: 8px 0;
54
+ }
55
+
56
+ svg > g {
57
+ margin: 8px;
58
+ }
59
+
60
+ .grid-line,
61
+ .axis .grid-line,
62
+ .grid-line line,
63
+ .axis .grid-line line {
64
+ fill: none;
65
+ stroke: #ccc;
66
+ shape-rendering: crispEdges;
67
+ }
68
+
69
+ .axis text {
70
+ font-family: var(--redsift-typography-font-family-poppins);
71
+ font-size: 10px;
72
+ }
73
+
74
+ g.stack rect.bar.deselected {
75
+ fill-opacity: 0.5;
76
+ fill: var(--redsift-color-neutral-mid-grey);
77
+ }
78
+
79
+ .brush .custom-brush-handle {
80
+ fill: #eee;
81
+ stroke: #666;
82
+ cursor: ew-resize;
83
+ }
84
+
85
+ text {
86
+ user-select: none;
87
+ }
88
+ `;
89
+ const StyledTimeSeriesBarChartTitle = styled(Flexbox)`
90
+ font-family: var(--redsift-typography-h4-font-family);
91
+ font-size: var(--redsift-typography-h4-font-size);
92
+ font-weight: var(--redsift-typography-h4-font-weight);
93
+ line-height: var(--redsift-typography-h4-line-height);
94
+ `;
95
+ const StyledTimeSeriesBarChartCaption = styled.p`
96
+ font-family: var(--redsift-typography-caption-font-family);
97
+ font-size: var(--redsift-typography-caption-font-size);
98
+ font-weight: var(--redsift-typography-caption-font-weight);
99
+ line-height: var(--redsift-typography-caption-line-height);
100
+ `;
101
+ const StyledTimeSeriesBarChartContainer = styled.div`
102
+ display: flex;
103
+ align-items: center;
104
+ gap: 16px;
105
+ font-family: var(--redsift-typography-font-family-poppins);
106
+ font-size: 11px;
107
+ justify-content: center;
108
+ margin: 8px 0;
109
+ position: relative;
110
+
111
+ .redsift-timeseries-barchart-container__chart {
112
+ position: relative;
113
+ ${_ref2 => {
114
+ let {
115
+ $isEmpty
116
+ } = _ref2;
117
+ return $isEmpty ? css`
118
+ display: none;
119
+ ` : '';
120
+ }};
121
+ }
122
+ `;
123
+
124
+ const _excluded = ["areXLabelsRotated", "caption", "className", "colorTheme", "columnToFilter", "data", "dateTimeFieldName", "dateTimeFormat", "dateTimeGroup", "dimension", "isResetable", "localeText", "onFilter", "size", "stackedCategory", "title", "xAxisLabel", "yAxisLabel"];
125
+ const COMPONENT_NAME = 'TimeSeriesBarChart';
126
+ const CLASSNAME = 'redsift-timeseries-barchart';
127
+ const getStartDate = dates => new Date(Math.min(...dates.map(Number)));
128
+ const getEndDate = dates => new Date(Math.max(...dates.map(Number)));
129
+ const sizeToDimension = size => {
130
+ switch (size) {
131
+ case TimeSeriesBarChartSize.small:
132
+ return {
133
+ width: 400,
134
+ height: 200,
135
+ marginLeft: 16,
136
+ marginTop: 16,
137
+ marginRight: 16,
138
+ marginBottom: 32
139
+ };
140
+ case TimeSeriesBarChartSize.large:
141
+ return {
142
+ width: 1000,
143
+ height: 300,
144
+ marginLeft: 16,
145
+ marginTop: 16,
146
+ marginRight: 16,
147
+ marginBottom: 32
148
+ };
149
+ case TimeSeriesBarChartSize.medium:
150
+ default:
151
+ return {
152
+ width: 600,
153
+ height: 250,
154
+ marginLeft: 16,
155
+ marginTop: 16,
156
+ marginRight: 16,
157
+ marginBottom: 32
158
+ };
159
+ }
160
+ };
161
+ const parseDateTimeGroup = (data, dateTimeGroup, dateTimeFieldName) => {
162
+ const dates = [...data.map(d => new Date(d[dateTimeFieldName]))];
163
+ const startDate = getStartDate(dates);
164
+ const endDate = getEndDate(dates);
165
+ switch (dateTimeGroup) {
166
+ case 'hour':
167
+ return {
168
+ group: g => timeHour(g),
169
+ round: x => timeHour(x),
170
+ x: scaleTime().domain([timeHour.offset(startDate, -1), timeHour.offset(endDate, 2)]),
171
+ xUnits: timeHours
172
+ };
173
+ case 'day':
174
+ return {
175
+ group: g => timeDay(g),
176
+ round: x => timeDay(x),
177
+ x: scaleTime().domain([timeDay.offset(startDate, -1), timeDay.offset(endDate, 2)]),
178
+ xUnits: timeDays
179
+ };
180
+ case 'week':
181
+ return {
182
+ group: g => timeWeek(g),
183
+ round: x => timeWeek(x),
184
+ x: scaleTime().domain([timeWeek.offset(startDate, -1), timeWeek.offset(endDate, 2)]),
185
+ xUnits: timeWeeks
186
+ };
187
+ case 'year':
188
+ return {
189
+ group: g => timeYear(g),
190
+ round: x => timeYear(x),
191
+ x: scaleTime().domain([timeYear.offset(startDate, -2), timeYear.offset(endDate, 2)]),
192
+ xUnits: timeYears
193
+ };
194
+ case 'month':
195
+ default:
196
+ return {
197
+ group: g => timeMonth(g),
198
+ round: x => timeMonth(x),
199
+ x: scaleTime().domain([timeMonth.offset(startDate, -1), timeMonth.offset(endDate, 2)]),
200
+ xUnits: timeMonths
201
+ };
202
+ }
203
+ };
204
+ const TimeSeriesBarChart = /*#__PURE__*/forwardRef((props, ref) => {
205
+ const containerRef = ref || useRef();
206
+ const chartRef = useRef();
207
+ const [id] = useId();
208
+ const [chart, setChart] = useState();
209
+ const {
210
+ areXLabelsRotated,
211
+ caption,
212
+ className,
213
+ colorTheme = props.stackedCategory ? TimeSeriesBarChartTheme.default : TimeSeriesBarChartTheme.monochrome,
214
+ columnToFilter,
215
+ data: propsData,
216
+ dateTimeFieldName,
217
+ dateTimeFormat = '%Y-%m-%d %H:%M:%S',
218
+ dateTimeGroup = 'month',
219
+ dimension,
220
+ isResetable = true,
221
+ localeText,
222
+ onFilter,
223
+ size = TimeSeriesBarChartSize.medium,
224
+ stackedCategory,
225
+ title,
226
+ xAxisLabel,
227
+ yAxisLabel
228
+ } = props,
229
+ forwardedProps = _objectWithoutProperties(props, _excluded);
230
+ const theme = useTheme();
231
+
232
+ // Get overriden labels and texts.
233
+ const {
234
+ emptyChartTitle,
235
+ emptyChartSubtitle,
236
+ emptyChartResetLabel,
237
+ resetLabel
238
+ } = _objectSpread2({
239
+ resetLabel: 'Reset'
240
+ }, localeText);
241
+
242
+ // Get charts dimensions based on the selected size.
243
+ const chartDimensions = sizeToDimension(size);
244
+
245
+ // Get ndx from context or initialize it.
246
+ const {
247
+ dispatch,
248
+ state,
249
+ data
250
+ } = useContext(DashboardContext);
251
+ const {
252
+ tableFilters
253
+ } = state;
254
+
255
+ // Set color scheme.
256
+ const colorScale = useColor({
257
+ data: propsData !== null && propsData !== void 0 ? propsData : data,
258
+ colorTheme: colorTheme,
259
+ category: stackedCategory !== null && stackedCategory !== void 0 ? stackedCategory : '',
260
+ theme
261
+ });
262
+ const ndx = CrossfilterRegistry.get(propsData ? propsData : data);
263
+
264
+ // useEffect called only once to initialize the chart.
265
+ useEffect(() => {
266
+ if (chartRef.current) {
267
+ config.defaultColors(scheme.default);
268
+ const parseTime = utcParse(dateTimeFormat);
269
+ const barChart$1 = barChart(chartRef.current);
270
+ const dataset = ndx.all();
271
+
272
+ // Get time methods based on props
273
+ const {
274
+ group,
275
+ round,
276
+ x,
277
+ xUnits
278
+ } = parseDateTimeGroup(dataset, dateTimeGroup, dateTimeFieldName);
279
+
280
+ // Compute dimension and group.
281
+ const computedDimension = ndx.dimension(d => parseTime(dimension(d)));
282
+ const timeGroup = computedDimension.group(group);
283
+
284
+ // Initialize the chart.
285
+ barChart$1.width(chartDimensions.width).height(chartDimensions.height - (areXLabelsRotated ? 30 : 0)).dimension(computedDimension).x(x).xUnits(xUnits).round(round).centerBar(true).alwaysUseRounding(true).renderHorizontalGridLines(true).margins({
286
+ left: chartDimensions.marginLeft + (yAxisLabel ? 24 : 0),
287
+ top: chartDimensions.marginTop,
288
+ right: chartDimensions.marginRight,
289
+ bottom: chartDimensions.marginBottom
290
+ }).barPadding(0.2);
291
+ barChart$1.yAxis().ticks(5);
292
+
293
+ // Add label to axis.
294
+ if (xAxisLabel) {
295
+ barChart$1.xAxisLabel(xAxisLabel);
296
+ }
297
+ if (yAxisLabel) {
298
+ barChart$1.yAxisLabel(yAxisLabel);
299
+ }
300
+
301
+ // Rotate labels and reset the height, if asked for.
302
+ if (areXLabelsRotated) {
303
+ barChart$1.on('pretransition', rowChart => {
304
+ barChart$1.select('.axis').attr('text-anchor', 'end').selectAll('text').attr('transform', 'translate(-6,5) rotate(-45)');
305
+ rowChart.select('svg').attr('height', chartDimensions.height);
306
+ });
307
+ }
308
+
309
+ // Set group whether the chart is stacked or not.
310
+ if (!stackedCategory) {
311
+ barChart$1.group(timeGroup).colors(colorScale);
312
+ } else if (dataset.length) {
313
+ if (!Array.isArray(dataset[0][stackedCategory])) {
314
+ const categories = dataset.reduce((acc, curr) => {
315
+ if (acc.indexOf(curr[stackedCategory]) === -1) {
316
+ acc.push(curr[stackedCategory]);
317
+ }
318
+ return acc;
319
+ }, []);
320
+ const stackedTimeGroup = timeGroup.reduce((p, v) => {
321
+ p[v[stackedCategory]] = (p[v[stackedCategory]] || 0) + 1;
322
+ return p;
323
+ }, (p, v) => {
324
+ p[v[stackedCategory]] = (p[v[stackedCategory]] || 0) - 1;
325
+ return p;
326
+ }, () => ({}));
327
+ barChart$1.group(stackedTimeGroup, categories[0],
328
+ // @ts-expect-error
329
+ (cat => d => d.value[cat])(categories[0])).colors(colorScale);
330
+ for (var i = 1; i < categories.length; ++i) {
331
+ barChart$1.stack(stackedTimeGroup, categories[i], (cat => d => d.value[cat])(categories[i]));
332
+ }
333
+ } else {
334
+ const categories = dataset.reduce((acc, curr) => {
335
+ curr[stackedCategory].forEach(val => {
336
+ if (acc.indexOf(val) === -1) {
337
+ acc.push(val);
338
+ }
339
+ });
340
+ return acc;
341
+ }, []);
342
+ const stackedTimeGroup = timeGroup.reduce((p, v) => {
343
+ v[stackedCategory].forEach(val => {
344
+ p[val] = (p[val] || 0) + 1;
345
+ });
346
+ return p;
347
+ }, (p, v) => {
348
+ v[stackedCategory].forEach(val => {
349
+ p[val] = (p[val] || 0) - 1;
350
+ });
351
+ return p;
352
+ }, () => ({}));
353
+ barChart$1.group(stackedTimeGroup, categories[0],
354
+ // @ts-expect-error
355
+ (cat => d => d.value[cat])(categories[0])).colors(colorScale);
356
+ for (var i = 1; i < categories.length; ++i) {
357
+ barChart$1.stack(stackedTimeGroup, categories[i], (cat => d => d.value[cat])(categories[i]));
358
+ }
359
+ }
360
+ }
361
+
362
+ // Dispatch filters to datagrid when a value is selected or unselected.
363
+ const formatTime = timeFormat('%Y-%m-%dT%H:%M');
364
+ barChart$1.on('filtered', () => {
365
+ if (columnToFilter) {
366
+ var _barChart$filters;
367
+ const dateArray = (_barChart$filters = barChart$1.filters()) === null || _barChart$filters === void 0 ? void 0 : _barChart$filters[0];
368
+ if (Array.isArray(dateArray) && dateArray.length === 2) {
369
+ dispatch === null || dispatch === void 0 ? void 0 : dispatch({
370
+ type: DashboardReducerActionType.FilterTableBatch,
371
+ filter: [{
372
+ id: `${barChart$1.anchorName()}-start`,
373
+ field: columnToFilter,
374
+ operator: 'after',
375
+ value: formatTime(dateArray[0])
376
+ }, {
377
+ id: `${barChart$1.anchorName()}-end`,
378
+ field: columnToFilter,
379
+ operator: 'onOrBefore',
380
+ value: formatTime(dateArray[1])
381
+ }]
382
+ });
383
+ }
384
+ }
385
+ onFilter === null || onFilter === void 0 ? void 0 : onFilter(barChart$1.filters(), ndx.allFiltered());
386
+ });
387
+
388
+ // Render the chart.
389
+ barChart$1.render();
390
+
391
+ // Store chart for further use.
392
+ setChart(barChart$1);
393
+ }
394
+ }, [propsData, data]);
395
+
396
+ // Filter chart if context is updated by an external component.
397
+ const filterStart = tableFilters.find(filter => filter.field === columnToFilter && filter.operator === 'after');
398
+ const filterEnd = tableFilters.find(filter => filter.field === columnToFilter && filter.operator === 'onOrBefore');
399
+ useEffect(() => {
400
+ if (chart && filterStart && filterEnd && filterStart.value && filterEnd.value) {
401
+ const chartFiltersObj = chart.filters();
402
+ const chartFilters = chartFiltersObj === null || chartFiltersObj === void 0 ? void 0 : chartFiltersObj[0];
403
+ const chartFilterStart = chartFilters === null || chartFilters === void 0 ? void 0 : chartFilters[0];
404
+ const chartFilterEnd = chartFilters === null || chartFilters === void 0 ? void 0 : chartFilters[1];
405
+ if (chartFilterStart !== isoParse(filterStart.value) && chartFilterEnd !== isoParse(filterEnd.value)) {
406
+ var _d3isoParse, _d3isoParse2;
407
+ chart.filter(null);
408
+ chart.filter(filters.RangedFilter(((_d3isoParse = isoParse(filterStart.value)) === null || _d3isoParse === void 0 ? void 0 : _d3isoParse.getTime()) || 0, ((_d3isoParse2 = isoParse(filterEnd.value)) === null || _d3isoParse2 === void 0 ? void 0 : _d3isoParse2.getTime()) || 0));
409
+ redrawAll();
410
+ }
411
+ }
412
+ }, [filterStart === null || filterStart === void 0 ? void 0 : filterStart.value, filterEnd === null || filterEnd === void 0 ? void 0 : filterEnd.value]);
413
+ return /*#__PURE__*/React.createElement(StyledTimeSeriesBarChart, _extends({}, forwardedProps, {
414
+ className: classNames(TimeSeriesBarChart.className, className),
415
+ ref: containerRef,
416
+ $theme: theme
417
+ }), /*#__PURE__*/React.createElement(StyledTimeSeriesBarChartTitle, {
418
+ className: `${TimeSeriesBarChart.className}__title`,
419
+ alignItems: "center",
420
+ $theme: theme
421
+ }, title ? /*#__PURE__*/React.createElement("div", {
422
+ id: `id${id}__title`
423
+ }, title) : null, chart && isResetable ? /*#__PURE__*/React.createElement(Button, {
424
+ variant: "unstyled",
425
+ onClick: () => {
426
+ chart.filter(null);
427
+ redrawAll();
428
+ if (columnToFilter) {
429
+ dispatch === null || dispatch === void 0 ? void 0 : dispatch({
430
+ type: DashboardReducerActionType.ResetFilter,
431
+ filter: {
432
+ id: `${chart.anchorName()}-start`,
433
+ field: columnToFilter,
434
+ operator: 'after'
435
+ }
436
+ });
437
+ dispatch === null || dispatch === void 0 ? void 0 : dispatch({
438
+ type: DashboardReducerActionType.ResetFilter,
439
+ filter: {
440
+ id: `${chart.anchorName()}-end`,
441
+ field: columnToFilter,
442
+ operator: 'onOrBefore'
443
+ }
444
+ });
445
+ }
446
+ }
447
+ }, resetLabel) : null), /*#__PURE__*/React.createElement(StyledTimeSeriesBarChartContainer, {
448
+ className: `${TimeSeriesBarChart.className}__container`,
449
+ $isEmpty: ndx.all().length === 0
450
+ }, /*#__PURE__*/React.createElement("div", {
451
+ className: `${TimeSeriesBarChart.className}-container__chart`,
452
+ ref: chartRef
453
+ }), ndx.all().length === 0 ? /*#__PURE__*/React.createElement(ChartEmptyState, {
454
+ title: emptyChartTitle,
455
+ subtitle: emptyChartSubtitle,
456
+ resetLabel: emptyChartResetLabel,
457
+ onReset: () => {
458
+ filterAll();
459
+ redrawAll();
460
+ dispatch === null || dispatch === void 0 ? void 0 : dispatch({
461
+ type: DashboardReducerActionType.ResetFilters
462
+ });
463
+ }
464
+ }) : null), caption ? /*#__PURE__*/React.createElement(StyledTimeSeriesBarChartCaption, {
465
+ className: `${TimeSeriesBarChart.className}__caption`,
466
+ id: `id${id}__caption`,
467
+ $theme: theme
468
+ }, caption) : null);
469
+ });
470
+ TimeSeriesBarChart.className = CLASSNAME;
471
+ TimeSeriesBarChart.displayName = COMPONENT_NAME;
472
+
473
+ export { TimeSeriesBarChart as T, TimeSeriesBarChartSize as a, TimeSeriesBarChartTheme as b };
474
+ //# sourceMappingURL=TimeSeriesBarChart2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeSeriesBarChart2.js","sources":["../../src/components/TimeSeriesBarChart/types.ts","../../src/components/TimeSeriesBarChart/styles.ts","../../src/components/TimeSeriesBarChart/TimeSeriesBarChart.tsx"],"sourcesContent":["// istanbul ignore file\n\nimport { ComponentProps } from 'react';\nimport { Theme, ValueOf } from '@redsift/design-system';\nimport { ColorTheme, DimensionSelector, JSONArray } from '../../types';\n\ntype SuccessDangerColorTheme = {\n success: string;\n warning: string;\n danger: string;\n neutral?: string;\n};\n\n/**\n * Component size.\n */\nexport const TimeSeriesBarChartSize = {\n large: 'large',\n medium: 'medium',\n small: 'small',\n} as const;\nexport type TimeSeriesBarChartSize = ValueOf<typeof TimeSeriesBarChartSize>;\n\n/**\n * Component theme.\n */\nexport const TimeSeriesBarChartTheme = ColorTheme;\nexport type TimeSeriesBarChartTheme = ValueOf<typeof TimeSeriesBarChartTheme>;\n\nexport type datetimeEnum = 'hour' | 'day' | 'week' | 'month' | 'year';\n\ninterface LocaleText {\n emptyChartTitle?: string;\n emptyChartSubtitle?: string;\n emptyChartResetLabel?: string;\n resetLabel?: string;\n}\n\n/**\n * Component props.\n */\nexport interface TimeSeriesBarChartProps extends ComponentProps<'div'> {\n /** Caption. */\n caption?: string;\n /** Whether the x axis labels are rotated or not. */\n areXLabelsRotated?: boolean;\n /** Field value of the DataGrid column to filter. */\n columnToFilter?: string;\n /** Dataset to use to generate the chart, if no context is provided. */\n data?: JSONArray;\n /** Name of the dataset field that contains the datetime value. */\n dateTimeFieldName: string;\n /** Format used for the date and time values in the dataset by d3.js. Should follow https://github.com/d3/d3-time-format#locale_format. */\n dateTimeFormat?: string;\n /** Datetime unit to used to group values and for x units. */\n dateTimeGroup?: datetimeEnum;\n /** Method that will be used by crossfilter to compute the dimensions of the charts. */\n dimension: DimensionSelector;\n /** Whether the reset button is hidden or not. */\n isResetable?: boolean;\n /** Overriden values for internal labels and texts. */\n localeText?: LocaleText;\n /** Method to call when a filter occured on the chart. */\n onFilter?: (filters?: string[], allFiltered?: JSONArray) => void;\n /** TimeSeriesChart size. */\n size?: TimeSeriesBarChartSize;\n /** Color palette to use. You can choose among the list of available color palette or also choose to use the success/warning/danger theme for which you have to specify which key corresponds to which status. */\n colorTheme?: TimeSeriesBarChartTheme | SuccessDangerColorTheme;\n /** Title. */\n title?: string;\n /** Dataset key to use to stack values. */\n stackedCategory?: string;\n /** X Axis Label. */\n xAxisLabel?: string;\n /** Y Axis Label. */\n yAxisLabel?: string;\n}\n\nexport type StyledTimeSeriesBarChartProps = Omit<TimeSeriesBarChartProps, 'dimension' | 'dateTimeFieldName'> & {\n $theme: Theme;\n};\n","// istanbul ignore file\n\nimport styled, { css } from 'styled-components';\nimport { Flexbox } from '@redsift/design-system';\nimport { StyledTimeSeriesBarChartProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledTimeSeriesBarChart = styled.div<StyledTimeSeriesBarChartProps>`\n margin: 16px;\n padding: 16px;\n\n text {\n fill: ${({ $theme }) => `var(--redsift-color-${$theme}-components-text-primary)`};\n }\n\n .redsift-timeseries-barchart__chart {\n display: flex;\n font-family: var(--redsift-typography-font-family-poppins);\n font-size: 12px;\n justify-content: center;\n margin: 8px 0;\n }\n\n svg > g {\n margin: 8px;\n }\n\n .grid-line,\n .axis .grid-line,\n .grid-line line,\n .axis .grid-line line {\n fill: none;\n stroke: #ccc;\n shape-rendering: crispEdges;\n }\n\n .axis text {\n font-family: var(--redsift-typography-font-family-poppins);\n font-size: 10px;\n }\n\n g.stack rect.bar.deselected {\n fill-opacity: 0.5;\n fill: var(--redsift-color-neutral-mid-grey);\n }\n\n .brush .custom-brush-handle {\n fill: #eee;\n stroke: #666;\n cursor: ew-resize;\n }\n\n text {\n user-select: none;\n }\n`;\n\nexport const StyledTimeSeriesBarChartTitle = styled(Flexbox)<StyledTimeSeriesBarChartProps>`\n font-family: var(--redsift-typography-h4-font-family);\n font-size: var(--redsift-typography-h4-font-size);\n font-weight: var(--redsift-typography-h4-font-weight);\n line-height: var(--redsift-typography-h4-line-height);\n`;\n\nexport const StyledTimeSeriesBarChartCaption = styled.p<StyledTimeSeriesBarChartProps>`\n font-family: var(--redsift-typography-caption-font-family);\n font-size: var(--redsift-typography-caption-font-size);\n font-weight: var(--redsift-typography-caption-font-weight);\n line-height: var(--redsift-typography-caption-line-height);\n`;\n\nexport const StyledTimeSeriesBarChartContainer = styled.div<{\n $isEmpty: boolean;\n}>`\n display: flex;\n align-items: center;\n gap: 16px;\n font-family: var(--redsift-typography-font-family-poppins);\n font-size: 11px;\n justify-content: center;\n margin: 8px 0;\n position: relative;\n\n .redsift-timeseries-barchart-container__chart {\n position: relative;\n ${({ $isEmpty }) =>\n $isEmpty\n ? css`\n display: none;\n `\n : ''};\n }\n`;\n","// istanbul ignore file\n\nimport React, { forwardRef, RefObject, useContext, useEffect, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport {\n config as dcconfig,\n filterAll as dcfilterAll,\n filters as dcfilters,\n redrawAll as dcredrawAll,\n barChart as dcbarChart,\n BarChart as dcBarChart,\n UnitFunction as dcUnitFunction,\n} from 'dc';\nimport {\n scaleTime as d3scaleTime,\n timeFormat as d3timeFormat,\n isoParse as d3isoParse,\n utcParse as d3utcParse,\n timeHour as d3timeHour,\n timeHours as d3timeHours,\n timeDay as d3timeDay,\n timeDays as d3timeDays,\n timeWeek as d3timeWeek,\n timeWeeks as d3timeWeeks,\n timeMonth as d3timeMonth,\n timeMonths as d3timeMonths,\n timeYear as d3timeYear,\n timeYears as d3timeYears,\n} from 'd3';\n\nimport { Button, Comp, useId, useTheme } from '@redsift/design-system';\nimport { scheme, useColor } from '@redsift/charts';\n\nimport { DashboardContext, DashboardReducerActionType } from '../Dashboard';\nimport { TimeSeriesBarChartProps, TimeSeriesBarChartSize, TimeSeriesBarChartTheme } from './types';\nimport { JSONObject, JSONArray } from '../../types';\nimport {\n StyledTimeSeriesBarChart,\n StyledTimeSeriesBarChartCaption,\n StyledTimeSeriesBarChartTitle,\n StyledTimeSeriesBarChartContainer,\n} from './styles';\nimport { GridFilterItem } from '@redsift/table';\nimport { ChartEmptyState } from '../ChartEmptyState';\nimport { CrossfilterRegistry } from '../CrossfilterRegistry';\n\nconst COMPONENT_NAME = 'TimeSeriesBarChart';\nconst CLASSNAME = 'redsift-timeseries-barchart';\n\ntype ChartDimensions = {\n width: number;\n height: number;\n marginTop?: number;\n marginRight?: number;\n marginBottom?: number;\n marginLeft?: number;\n};\n\nconst getStartDate = (dates: Date[]) => new Date(Math.min(...dates.map(Number)));\nconst getEndDate = (dates: Date[]) => new Date(Math.max(...dates.map(Number)));\n\nconst sizeToDimension = (size: TimeSeriesBarChartSize): ChartDimensions => {\n switch (size) {\n case TimeSeriesBarChartSize.small:\n return {\n width: 400,\n height: 200,\n marginLeft: 16,\n marginTop: 16,\n marginRight: 16,\n marginBottom: 32,\n };\n case TimeSeriesBarChartSize.large:\n return {\n width: 1000,\n height: 300,\n marginLeft: 16,\n marginTop: 16,\n marginRight: 16,\n marginBottom: 32,\n };\n case TimeSeriesBarChartSize.medium:\n default:\n return {\n width: 600,\n height: 250,\n marginLeft: 16,\n marginTop: 16,\n marginRight: 16,\n marginBottom: 32,\n };\n }\n};\n\nconst parseDateTimeGroup = (\n data: JSONArray,\n dateTimeGroup: TimeSeriesBarChartProps['dateTimeGroup'],\n dateTimeFieldName: string\n) => {\n const dates = [...data.map((d: (typeof data)[number]) => new Date(d[dateTimeFieldName] as string))];\n const startDate = getStartDate(dates);\n const endDate = getEndDate(dates);\n\n switch (dateTimeGroup) {\n case 'hour':\n return {\n group: (g: Date) => d3timeHour(g),\n round: (x: Date) => d3timeHour(x),\n x: d3scaleTime().domain([d3timeHour.offset(startDate, -1), d3timeHour.offset(endDate, 2)]),\n xUnits: d3timeHours,\n };\n case 'day':\n return {\n group: (g: Date) => d3timeDay(g),\n round: (x: Date) => d3timeDay(x),\n x: d3scaleTime().domain([d3timeDay.offset(startDate, -1), d3timeDay.offset(endDate, 2)]),\n xUnits: d3timeDays,\n };\n case 'week':\n return {\n group: (g: Date) => d3timeWeek(g),\n round: (x: Date) => d3timeWeek(x),\n x: d3scaleTime().domain([d3timeWeek.offset(startDate, -1), d3timeWeek.offset(endDate, 2)]),\n xUnits: d3timeWeeks,\n };\n case 'year':\n return {\n group: (g: Date) => d3timeYear(g),\n round: (x: Date) => d3timeYear(x),\n x: d3scaleTime().domain([d3timeYear.offset(startDate, -2), d3timeYear.offset(endDate, 2)]),\n xUnits: d3timeYears,\n };\n case 'month':\n default:\n return {\n group: (g: Date) => d3timeMonth(g),\n round: (x: Date) => d3timeMonth(x),\n x: d3scaleTime().domain([d3timeMonth.offset(startDate, -1), d3timeMonth.offset(endDate, 2)]),\n xUnits: d3timeMonths,\n };\n }\n};\n\nexport const TimeSeriesBarChart: Comp<TimeSeriesBarChartProps, HTMLDivElement> = forwardRef((props, ref) => {\n const containerRef = (ref || useRef<HTMLDivElement>()) as RefObject<HTMLDivElement>;\n const chartRef = useRef<HTMLDivElement>() as RefObject<HTMLDivElement>;\n\n const [id] = useId();\n const [chart, setChart] = useState<dcBarChart>();\n\n const {\n areXLabelsRotated,\n caption,\n className,\n colorTheme = props.stackedCategory ? TimeSeriesBarChartTheme.default : TimeSeriesBarChartTheme.monochrome,\n columnToFilter,\n data: propsData,\n dateTimeFieldName,\n dateTimeFormat = '%Y-%m-%d %H:%M:%S',\n dateTimeGroup = 'month',\n dimension,\n isResetable = true,\n localeText,\n onFilter,\n size = TimeSeriesBarChartSize.medium,\n stackedCategory,\n title,\n xAxisLabel,\n yAxisLabel,\n ...forwardedProps\n } = props;\n const theme = useTheme();\n\n // Get overriden labels and texts.\n const { emptyChartTitle, emptyChartSubtitle, emptyChartResetLabel, resetLabel } = {\n resetLabel: 'Reset',\n ...localeText,\n };\n\n // Get charts dimensions based on the selected size.\n const chartDimensions = sizeToDimension(size!);\n\n // Get ndx from context or initialize it.\n const { dispatch, state, data } = useContext(DashboardContext);\n const { tableFilters } = state;\n\n // Set color scheme.\n const colorScale = useColor({\n data: propsData ?? data,\n colorTheme: colorTheme!,\n category: stackedCategory ?? '',\n theme,\n });\n\n const ndx = CrossfilterRegistry.get(propsData ? propsData : data);\n\n // useEffect called only once to initialize the chart.\n useEffect(() => {\n if (chartRef.current) {\n dcconfig.defaultColors(scheme.default);\n const parseTime = d3utcParse(dateTimeFormat!);\n const barChart = dcbarChart(chartRef.current as any);\n const dataset = ndx.all();\n\n // Get time methods based on props\n const { group, round, x, xUnits } = parseDateTimeGroup(dataset as JSONArray, dateTimeGroup, dateTimeFieldName);\n\n // Compute dimension and group.\n const computedDimension = ndx.dimension((d: JSONArray) => parseTime(dimension(d) as string) as Date);\n const timeGroup = computedDimension.group(group);\n\n // Initialize the chart.\n barChart\n .width(chartDimensions.width)\n .height(chartDimensions.height - (areXLabelsRotated ? 30 : 0))\n .dimension(computedDimension)\n .x(x)\n .xUnits(xUnits as dcUnitFunction)\n .round(round)\n .centerBar(true)\n .alwaysUseRounding(true)\n .renderHorizontalGridLines(true)\n .margins({\n left: chartDimensions.marginLeft! + (yAxisLabel ? 24 : 0),\n top: chartDimensions.marginTop!,\n right: chartDimensions.marginRight!,\n bottom: chartDimensions.marginBottom!,\n })\n .barPadding(0.2);\n\n barChart.yAxis().ticks(5);\n\n // Add label to axis.\n if (xAxisLabel) {\n barChart.xAxisLabel(xAxisLabel);\n }\n if (yAxisLabel) {\n barChart.yAxisLabel(yAxisLabel);\n }\n\n // Rotate labels and reset the height, if asked for.\n if (areXLabelsRotated) {\n barChart.on('pretransition', (rowChart) => {\n barChart\n .select('.axis')\n .attr('text-anchor', 'end')\n .selectAll('text')\n .attr('transform', 'translate(-6,5) rotate(-45)');\n rowChart.select('svg').attr('height', chartDimensions.height);\n });\n }\n\n // Set group whether the chart is stacked or not.\n if (!stackedCategory) {\n barChart.group(timeGroup).colors(colorScale as any);\n } else if (dataset.length) {\n if (!Array.isArray(dataset[0][stackedCategory])) {\n const categories = dataset.reduce((acc: string[], curr: JSONObject) => {\n if (acc.indexOf(curr[stackedCategory] as string) === -1) {\n acc.push(curr[stackedCategory] as string);\n }\n return acc;\n }, []);\n const stackedTimeGroup = timeGroup.reduce(\n (p, v) => {\n (p as JSONObject)[v[stackedCategory]] = (((p as JSONObject)[v[stackedCategory]] as number) || 0) + 1;\n return p;\n },\n (p, v) => {\n (p as JSONObject)[v[stackedCategory]] = (((p as JSONObject)[v[stackedCategory]] as number) || 0) - 1;\n return p;\n },\n () => ({})\n );\n barChart\n .group(\n stackedTimeGroup,\n categories[0], // @ts-expect-error\n (\n (cat) => (d: { key: Date; value: { [key: string]: number } }) =>\n d.value[cat]\n )(categories[0])\n )\n .colors(colorScale as any);\n for (var i = 1; i < categories.length; ++i) {\n barChart.stack(\n stackedTimeGroup,\n categories[i],\n (\n (cat) => (d) =>\n d.value[cat]\n )(categories[i])\n );\n }\n } else {\n const categories = dataset.reduce((acc: string[], curr: JSONObject) => {\n (curr[stackedCategory] as string[]).forEach((val: string) => {\n if (acc.indexOf(val) === -1) {\n acc.push(val);\n }\n });\n return acc;\n }, []);\n const stackedTimeGroup = timeGroup.reduce(\n (p, v) => {\n v[stackedCategory].forEach((val: string) => {\n (p as JSONObject)[val] = (((p as JSONObject)[val] as number) || 0) + 1;\n });\n return p;\n },\n (p, v) => {\n v[stackedCategory].forEach((val: string) => {\n (p as JSONObject)[val] = (((p as JSONObject)[val] as number) || 0) - 1;\n });\n return p;\n },\n () => ({})\n );\n barChart\n .group(\n stackedTimeGroup,\n categories[0], // @ts-expect-error\n (\n (cat) => (d: { key: Date; value: { [key: string]: number } }) =>\n d.value[cat]\n )(categories[0])\n )\n .colors(colorScale as any);\n for (var i = 1; i < categories.length; ++i) {\n barChart.stack(\n stackedTimeGroup,\n categories[i],\n (\n (cat) => (d: { key: Date; value: { [key: string]: number } }) =>\n d.value[cat]\n )(categories[i])\n );\n }\n }\n }\n\n // Dispatch filters to datagrid when a value is selected or unselected.\n const formatTime = d3timeFormat('%Y-%m-%dT%H:%M');\n barChart.on('filtered', () => {\n if (columnToFilter) {\n const dateArray = barChart.filters()?.[0];\n if (Array.isArray(dateArray) && dateArray.length === 2) {\n dispatch?.({\n type: DashboardReducerActionType.FilterTableBatch,\n filter: [\n {\n id: `${barChart.anchorName()}-start`,\n field: columnToFilter,\n operator: 'after',\n value: formatTime(dateArray[0]),\n },\n {\n id: `${barChart.anchorName()}-end`,\n field: columnToFilter,\n operator: 'onOrBefore',\n value: formatTime(dateArray[1]),\n },\n ],\n });\n }\n }\n\n onFilter?.(barChart.filters(), ndx.allFiltered());\n });\n\n // Render the chart.\n barChart.render();\n\n // Store chart for further use.\n setChart(barChart);\n }\n }, [propsData, data]);\n\n // Filter chart if context is updated by an external component.\n const filterStart = tableFilters.find((filter) => filter.field === columnToFilter && filter.operator === 'after');\n const filterEnd = tableFilters.find((filter) => filter.field === columnToFilter && filter.operator === 'onOrBefore');\n useEffect(() => {\n if (chart && filterStart && filterEnd && filterStart.value && filterEnd.value) {\n const chartFiltersObj = chart.filters();\n const chartFilters = chartFiltersObj?.[0];\n const chartFilterStart = chartFilters?.[0];\n const chartFilterEnd = chartFilters?.[1];\n if (chartFilterStart !== d3isoParse(filterStart.value) && chartFilterEnd !== d3isoParse(filterEnd.value)) {\n chart.filter(null);\n chart.filter(\n dcfilters.RangedFilter(\n d3isoParse(filterStart.value)?.getTime() || 0,\n d3isoParse(filterEnd.value)?.getTime() || 0\n )\n );\n dcredrawAll();\n }\n }\n }, [filterStart?.value, filterEnd?.value]);\n\n return (\n <StyledTimeSeriesBarChart\n {...forwardedProps}\n className={classNames(TimeSeriesBarChart.className, className)}\n ref={containerRef as RefObject<HTMLDivElement>}\n $theme={theme}\n >\n <StyledTimeSeriesBarChartTitle\n className={`${TimeSeriesBarChart.className}__title`}\n alignItems=\"center\"\n $theme={theme}\n >\n {title ? <div id={`id${id}__title`}>{title}</div> : null}\n {chart && isResetable ? (\n <Button\n variant=\"unstyled\"\n onClick={() => {\n chart.filter(null);\n dcredrawAll();\n\n if (columnToFilter) {\n dispatch?.({\n type: DashboardReducerActionType.ResetFilter,\n filter: {\n id: `${chart.anchorName()}-start`,\n field: columnToFilter,\n operator: 'after',\n } as GridFilterItem,\n });\n dispatch?.({\n type: DashboardReducerActionType.ResetFilter,\n filter: {\n id: `${chart.anchorName()}-end`,\n field: columnToFilter,\n operator: 'onOrBefore',\n } as GridFilterItem,\n });\n }\n }}\n >\n {resetLabel}\n </Button>\n ) : null}\n </StyledTimeSeriesBarChartTitle>\n\n <StyledTimeSeriesBarChartContainer\n className={`${TimeSeriesBarChart.className}__container`}\n $isEmpty={ndx.all().length === 0}\n >\n <div\n className={`${TimeSeriesBarChart.className}-container__chart`}\n ref={chartRef as RefObject<HTMLDivElement>}\n />\n {ndx.all().length === 0 ? (\n <ChartEmptyState\n title={emptyChartTitle!}\n subtitle={emptyChartSubtitle}\n resetLabel={emptyChartResetLabel}\n onReset={() => {\n dcfilterAll();\n dcredrawAll();\n dispatch?.({\n type: DashboardReducerActionType.ResetFilters,\n });\n }}\n />\n ) : null}\n </StyledTimeSeriesBarChartContainer>\n\n {caption ? (\n <StyledTimeSeriesBarChartCaption\n className={`${TimeSeriesBarChart.className}__caption`}\n id={`id${id}__caption`}\n $theme={theme}\n >\n {caption}\n </StyledTimeSeriesBarChartCaption>\n ) : null}\n </StyledTimeSeriesBarChart>\n );\n});\nTimeSeriesBarChart.className = CLASSNAME;\nTimeSeriesBarChart.displayName = COMPONENT_NAME;\n"],"names":["TimeSeriesBarChartSize","large","medium","small","TimeSeriesBarChartTheme","ColorTheme","StyledTimeSeriesBarChart","styled","div","_ref","$theme","StyledTimeSeriesBarChartTitle","Flexbox","StyledTimeSeriesBarChartCaption","p","StyledTimeSeriesBarChartContainer","_ref2","$isEmpty","css","COMPONENT_NAME","CLASSNAME","getStartDate","dates","Date","Math","min","map","Number","getEndDate","max","sizeToDimension","size","width","height","marginLeft","marginTop","marginRight","marginBottom","parseDateTimeGroup","data","dateTimeGroup","dateTimeFieldName","d","startDate","endDate","group","g","d3timeHour","round","x","d3scaleTime","domain","offset","xUnits","d3timeHours","d3timeDay","d3timeDays","d3timeWeek","d3timeWeeks","d3timeYear","d3timeYears","d3timeMonth","d3timeMonths","TimeSeriesBarChart","forwardRef","props","ref","containerRef","useRef","chartRef","id","useId","chart","setChart","useState","areXLabelsRotated","caption","className","colorTheme","stackedCategory","default","monochrome","columnToFilter","propsData","dateTimeFormat","dimension","isResetable","localeText","onFilter","title","xAxisLabel","yAxisLabel","forwardedProps","_objectWithoutProperties","_excluded","theme","useTheme","emptyChartTitle","emptyChartSubtitle","emptyChartResetLabel","resetLabel","_objectSpread","chartDimensions","dispatch","state","useContext","DashboardContext","tableFilters","colorScale","useColor","category","ndx","CrossfilterRegistry","get","useEffect","current","dcconfig","defaultColors","scheme","parseTime","d3utcParse","barChart","dcbarChart","dataset","all","computedDimension","timeGroup","centerBar","alwaysUseRounding","renderHorizontalGridLines","margins","left","top","right","bottom","barPadding","yAxis","ticks","on","rowChart","select","attr","selectAll","colors","length","Array","isArray","categories","reduce","acc","curr","indexOf","push","stackedTimeGroup","v","cat","value","i","stack","forEach","val","formatTime","d3timeFormat","_barChart$filters","dateArray","filters","type","DashboardReducerActionType","FilterTableBatch","filter","anchorName","field","operator","allFiltered","render","filterStart","find","filterEnd","chartFiltersObj","chartFilters","chartFilterStart","chartFilterEnd","d3isoParse","_d3isoParse","_d3isoParse2","dcfilters","RangedFilter","getTime","dcredrawAll","React","createElement","_extends","classNames","alignItems","Button","variant","onClick","ResetFilter","ChartEmptyState","subtitle","onReset","dcfilterAll","ResetFilters","displayName"],"mappings":";;;;;;;;;;;;AAAA;AAaA;AACA;AACA;AACO,MAAMA,sBAAsB,GAAG;AACpCC,EAAAA,KAAK,EAAE,OAAO;AACdC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,OAAA;AACT,EAAU;AAGV;AACA;AACA;AACO,MAAMC,uBAAuB,GAAGC,WAAU;;AAYjD;AACA;AACA;;ACxCA;AAMA;AACA;AACA;AACO,MAAMC,wBAAwB,GAAGC,MAAM,CAACC,GAAmC,CAAA;AAClF;AACA;AACA;AACA;AACA,UAAA,EAAYC,IAAA,IAAA;EAAA,IAAC;AAAEC,IAAAA,MAAAA;AAAO,GAAC,GAAAD,IAAA,CAAA;EAAA,OAAM,CAAA,oBAAA,EAAsBC,MAAO,CAA0B,yBAAA,CAAA,CAAA;AAAA,CAAC,CAAA;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAA;AAEM,MAAMC,6BAA6B,GAAGJ,MAAM,CAACK,OAAO,CAAiC,CAAA;AAC5F;AACA;AACA;AACA;AACA,CAAC,CAAA;AAEM,MAAMC,+BAA+B,GAAGN,MAAM,CAACO,CAAiC,CAAA;AACvF;AACA;AACA;AACA;AACA,CAAC,CAAA;AAEM,MAAMC,iCAAiC,GAAGR,MAAM,CAACC,GAErD,CAAA;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAA,EAAMQ,KAAA,IAAA;EAAA,IAAC;AAAEC,IAAAA,QAAAA;AAAS,GAAC,GAAAD,KAAA,CAAA;EAAA,OACbC,QAAQ,GACJC,GAAI,CAAA;AACd;AACA,UAAA,CAAW,GACD,EAAE,CAAA;AAAA,CAAC,CAAA;AACb;AACA,CAAC;;;AChDD,MAAMC,cAAc,GAAG,oBAAoB,CAAA;AAC3C,MAAMC,SAAS,GAAG,6BAA6B,CAAA;AAW/C,MAAMC,YAAY,GAAIC,KAAa,IAAK,IAAIC,IAAI,CAACC,IAAI,CAACC,GAAG,CAAC,GAAGH,KAAK,CAACI,GAAG,CAACC,MAAM,CAAC,CAAC,CAAC,CAAA;AAChF,MAAMC,UAAU,GAAIN,KAAa,IAAK,IAAIC,IAAI,CAACC,IAAI,CAACK,GAAG,CAAC,GAAGP,KAAK,CAACI,GAAG,CAACC,MAAM,CAAC,CAAC,CAAC,CAAA;AAE9E,MAAMG,eAAe,GAAIC,IAA4B,IAAsB;AACzE,EAAA,QAAQA,IAAI;IACV,KAAK/B,sBAAsB,CAACG,KAAK;MAC/B,OAAO;AACL6B,QAAAA,KAAK,EAAE,GAAG;AACVC,QAAAA,MAAM,EAAE,GAAG;AACXC,QAAAA,UAAU,EAAE,EAAE;AACdC,QAAAA,SAAS,EAAE,EAAE;AACbC,QAAAA,WAAW,EAAE,EAAE;AACfC,QAAAA,YAAY,EAAE,EAAA;OACf,CAAA;IACH,KAAKrC,sBAAsB,CAACC,KAAK;MAC/B,OAAO;AACL+B,QAAAA,KAAK,EAAE,IAAI;AACXC,QAAAA,MAAM,EAAE,GAAG;AACXC,QAAAA,UAAU,EAAE,EAAE;AACdC,QAAAA,SAAS,EAAE,EAAE;AACbC,QAAAA,WAAW,EAAE,EAAE;AACfC,QAAAA,YAAY,EAAE,EAAA;OACf,CAAA;IACH,KAAKrC,sBAAsB,CAACE,MAAM,CAAA;AAClC,IAAA;MACE,OAAO;AACL8B,QAAAA,KAAK,EAAE,GAAG;AACVC,QAAAA,MAAM,EAAE,GAAG;AACXC,QAAAA,UAAU,EAAE,EAAE;AACdC,QAAAA,SAAS,EAAE,EAAE;AACbC,QAAAA,WAAW,EAAE,EAAE;AACfC,QAAAA,YAAY,EAAE,EAAA;OACf,CAAA;AACL,GAAA;AACF,CAAC,CAAA;AAED,MAAMC,kBAAkB,GAAGA,CACzBC,IAAe,EACfC,aAAuD,EACvDC,iBAAyB,KACtB;AACH,EAAA,MAAMnB,KAAK,GAAG,CAAC,GAAGiB,IAAI,CAACb,GAAG,CAAEgB,CAAwB,IAAK,IAAInB,IAAI,CAACmB,CAAC,CAACD,iBAAiB,CAAW,CAAC,CAAC,CAAC,CAAA;AACnG,EAAA,MAAME,SAAS,GAAGtB,YAAY,CAACC,KAAK,CAAC,CAAA;AACrC,EAAA,MAAMsB,OAAO,GAAGhB,UAAU,CAACN,KAAK,CAAC,CAAA;AAEjC,EAAA,QAAQkB,aAAa;AACnB,IAAA,KAAK,MAAM;MACT,OAAO;AACLK,QAAAA,KAAK,EAAGC,CAAO,IAAKC,QAAU,CAACD,CAAC,CAAC;AACjCE,QAAAA,KAAK,EAAGC,CAAO,IAAKF,QAAU,CAACE,CAAC,CAAC;QACjCA,CAAC,EAAEC,SAAW,EAAE,CAACC,MAAM,CAAC,CAACJ,QAAU,CAACK,MAAM,CAACT,SAAS,EAAE,CAAC,CAAC,CAAC,EAAEI,QAAU,CAACK,MAAM,CAACR,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1FS,QAAAA,MAAM,EAAEC,SAAAA;OACT,CAAA;AACH,IAAA,KAAK,KAAK;MACR,OAAO;AACLT,QAAAA,KAAK,EAAGC,CAAO,IAAKS,OAAS,CAACT,CAAC,CAAC;AAChCE,QAAAA,KAAK,EAAGC,CAAO,IAAKM,OAAS,CAACN,CAAC,CAAC;QAChCA,CAAC,EAAEC,SAAW,EAAE,CAACC,MAAM,CAAC,CAACI,OAAS,CAACH,MAAM,CAACT,SAAS,EAAE,CAAC,CAAC,CAAC,EAAEY,OAAS,CAACH,MAAM,CAACR,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AACxFS,QAAAA,MAAM,EAAEG,QAAAA;OACT,CAAA;AACH,IAAA,KAAK,MAAM;MACT,OAAO;AACLX,QAAAA,KAAK,EAAGC,CAAO,IAAKW,QAAU,CAACX,CAAC,CAAC;AACjCE,QAAAA,KAAK,EAAGC,CAAO,IAAKQ,QAAU,CAACR,CAAC,CAAC;QACjCA,CAAC,EAAEC,SAAW,EAAE,CAACC,MAAM,CAAC,CAACM,QAAU,CAACL,MAAM,CAACT,SAAS,EAAE,CAAC,CAAC,CAAC,EAAEc,QAAU,CAACL,MAAM,CAACR,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1FS,QAAAA,MAAM,EAAEK,SAAAA;OACT,CAAA;AACH,IAAA,KAAK,MAAM;MACT,OAAO;AACLb,QAAAA,KAAK,EAAGC,CAAO,IAAKa,QAAU,CAACb,CAAC,CAAC;AACjCE,QAAAA,KAAK,EAAGC,CAAO,IAAKU,QAAU,CAACV,CAAC,CAAC;QACjCA,CAAC,EAAEC,SAAW,EAAE,CAACC,MAAM,CAAC,CAACQ,QAAU,CAACP,MAAM,CAACT,SAAS,EAAE,CAAC,CAAC,CAAC,EAAEgB,QAAU,CAACP,MAAM,CAACR,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1FS,QAAAA,MAAM,EAAEO,SAAAA;OACT,CAAA;AACH,IAAA,KAAK,OAAO,CAAA;AACZ,IAAA;MACE,OAAO;AACLf,QAAAA,KAAK,EAAGC,CAAO,IAAKe,SAAW,CAACf,CAAC,CAAC;AAClCE,QAAAA,KAAK,EAAGC,CAAO,IAAKY,SAAW,CAACZ,CAAC,CAAC;QAClCA,CAAC,EAAEC,SAAW,EAAE,CAACC,MAAM,CAAC,CAACU,SAAW,CAACT,MAAM,CAACT,SAAS,EAAE,CAAC,CAAC,CAAC,EAAEkB,SAAW,CAACT,MAAM,CAACR,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5FS,QAAAA,MAAM,EAAES,UAAAA;OACT,CAAA;AACL,GAAA;AACF,CAAC,CAAA;AAEM,MAAMC,kBAAiE,gBAAGC,UAAU,CAAC,CAACC,KAAK,EAAEC,GAAG,KAAK;AAC1G,EAAA,MAAMC,YAAY,GAAID,GAAG,IAAIE,MAAM,EAAgD,CAAA;AACnF,EAAA,MAAMC,QAAQ,GAAGD,MAAM,EAA+C,CAAA;AAEtE,EAAA,MAAM,CAACE,EAAE,CAAC,GAAGC,KAAK,EAAE,CAAA;EACpB,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGC,QAAQ,EAAc,CAAA;EAEhD,MAAM;MACJC,iBAAiB;MACjBC,OAAO;MACPC,SAAS;MACTC,UAAU,GAAGb,KAAK,CAACc,eAAe,GAAG3E,uBAAuB,CAAC4E,OAAO,GAAG5E,uBAAuB,CAAC6E,UAAU;MACzGC,cAAc;AACd3C,MAAAA,IAAI,EAAE4C,SAAS;MACf1C,iBAAiB;AACjB2C,MAAAA,cAAc,GAAG,mBAAmB;AACpC5C,MAAAA,aAAa,GAAG,OAAO;MACvB6C,SAAS;AACTC,MAAAA,WAAW,GAAG,IAAI;MAClBC,UAAU;MACVC,QAAQ;MACRzD,IAAI,GAAG/B,sBAAsB,CAACE,MAAM;MACpC6E,eAAe;MACfU,KAAK;MACLC,UAAU;AACVC,MAAAA,UAAAA;AAEF,KAAC,GAAG1B,KAAK;AADJ2B,IAAAA,cAAc,GAAAC,wBAAA,CACf5B,KAAK,EAAA6B,SAAA,CAAA,CAAA;AACT,EAAA,MAAMC,KAAK,GAAGC,QAAQ,EAAE,CAAA;;AAExB;EACA,MAAM;IAAEC,eAAe;IAAEC,kBAAkB;IAAEC,oBAAoB;AAAEC,IAAAA,UAAAA;AAAW,GAAC,GAAAC,cAAA,CAAA;AAC7ED,IAAAA,UAAU,EAAE,OAAA;AAAO,GAAA,EAChBb,UAAU,CACd,CAAA;;AAED;AACA,EAAA,MAAMe,eAAe,GAAGxE,eAAe,CAACC,IAAK,CAAC,CAAA;;AAE9C;EACA,MAAM;IAAEwE,QAAQ;IAAEC,KAAK;AAAEjE,IAAAA,IAAAA;AAAK,GAAC,GAAGkE,UAAU,CAACC,gBAAgB,CAAC,CAAA;EAC9D,MAAM;AAAEC,IAAAA,YAAAA;AAAa,GAAC,GAAGH,KAAK,CAAA;;AAE9B;EACA,MAAMI,UAAU,GAAGC,QAAQ,CAAC;AAC1BtE,IAAAA,IAAI,EAAE4C,SAAS,KAAA,IAAA,IAATA,SAAS,KAATA,KAAAA,CAAAA,GAAAA,SAAS,GAAI5C,IAAI;AACvBuC,IAAAA,UAAU,EAAEA,UAAW;AACvBgC,IAAAA,QAAQ,EAAE/B,eAAe,KAAA,IAAA,IAAfA,eAAe,KAAfA,KAAAA,CAAAA,GAAAA,eAAe,GAAI,EAAE;AAC/BgB,IAAAA,KAAAA;AACF,GAAC,CAAC,CAAA;EAEF,MAAMgB,GAAG,GAAGC,mBAAmB,CAACC,GAAG,CAAC9B,SAAS,GAAGA,SAAS,GAAG5C,IAAI,CAAC,CAAA;;AAEjE;AACA2E,EAAAA,SAAS,CAAC,MAAM;IACd,IAAI7C,QAAQ,CAAC8C,OAAO,EAAE;AACpBC,MAAAA,MAAQ,CAACC,aAAa,CAACC,MAAM,CAACtC,OAAO,CAAC,CAAA;AACtC,MAAA,MAAMuC,SAAS,GAAGC,QAAU,CAACpC,cAAe,CAAC,CAAA;AAC7C,MAAA,MAAMqC,UAAQ,GAAGC,QAAU,CAACrD,QAAQ,CAAC8C,OAAc,CAAC,CAAA;AACpD,MAAA,MAAMQ,OAAO,GAAGZ,GAAG,CAACa,GAAG,EAAE,CAAA;;AAEzB;MACA,MAAM;QAAE/E,KAAK;QAAEG,KAAK;QAAEC,CAAC;AAAEI,QAAAA,MAAAA;OAAQ,GAAGf,kBAAkB,CAACqF,OAAO,EAAenF,aAAa,EAAEC,iBAAiB,CAAC,CAAA;;AAE9G;AACA,MAAA,MAAMoF,iBAAiB,GAAGd,GAAG,CAAC1B,SAAS,CAAE3C,CAAY,IAAK6E,SAAS,CAAClC,SAAS,CAAC3C,CAAC,CAAW,CAAS,CAAC,CAAA;AACpG,MAAA,MAAMoF,SAAS,GAAGD,iBAAiB,CAAChF,KAAK,CAACA,KAAK,CAAC,CAAA;;AAEhD;MACA4E,UAAQ,CACLzF,KAAK,CAACsE,eAAe,CAACtE,KAAK,CAAC,CAC5BC,MAAM,CAACqE,eAAe,CAACrE,MAAM,IAAI0C,iBAAiB,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAC7DU,SAAS,CAACwC,iBAAiB,CAAC,CAC5B5E,CAAC,CAACA,CAAC,CAAC,CACJI,MAAM,CAACA,MAAwB,CAAC,CAChCL,KAAK,CAACA,KAAK,CAAC,CACZ+E,SAAS,CAAC,IAAI,CAAC,CACfC,iBAAiB,CAAC,IAAI,CAAC,CACvBC,yBAAyB,CAAC,IAAI,CAAC,CAC/BC,OAAO,CAAC;QACPC,IAAI,EAAE7B,eAAe,CAACpE,UAAU,IAAKyD,UAAU,GAAG,EAAE,GAAG,CAAC,CAAC;QACzDyC,GAAG,EAAE9B,eAAe,CAACnE,SAAU;QAC/BkG,KAAK,EAAE/B,eAAe,CAAClE,WAAY;QACnCkG,MAAM,EAAEhC,eAAe,CAACjE,YAAAA;AAC1B,OAAC,CAAC,CACDkG,UAAU,CAAC,GAAG,CAAC,CAAA;MAElBd,UAAQ,CAACe,KAAK,EAAE,CAACC,KAAK,CAAC,CAAC,CAAC,CAAA;;AAEzB;AACA,MAAA,IAAI/C,UAAU,EAAE;AACd+B,QAAAA,UAAQ,CAAC/B,UAAU,CAACA,UAAU,CAAC,CAAA;AACjC,OAAA;AACA,MAAA,IAAIC,UAAU,EAAE;AACd8B,QAAAA,UAAQ,CAAC9B,UAAU,CAACA,UAAU,CAAC,CAAA;AACjC,OAAA;;AAEA;AACA,MAAA,IAAIhB,iBAAiB,EAAE;AACrB8C,QAAAA,UAAQ,CAACiB,EAAE,CAAC,eAAe,EAAGC,QAAQ,IAAK;UACzClB,UAAQ,CACLmB,MAAM,CAAC,OAAO,CAAC,CACfC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAC1BC,SAAS,CAAC,MAAM,CAAC,CACjBD,IAAI,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAA;AACnDF,UAAAA,QAAQ,CAACC,MAAM,CAAC,KAAK,CAAC,CAACC,IAAI,CAAC,QAAQ,EAAEvC,eAAe,CAACrE,MAAM,CAAC,CAAA;AAC/D,SAAC,CAAC,CAAA;AACJ,OAAA;;AAEA;MACA,IAAI,CAAC8C,eAAe,EAAE;QACpB0C,UAAQ,CAAC5E,KAAK,CAACiF,SAAS,CAAC,CAACiB,MAAM,CAACnC,UAAiB,CAAC,CAAA;AACrD,OAAC,MAAM,IAAIe,OAAO,CAACqB,MAAM,EAAE;AACzB,QAAA,IAAI,CAACC,KAAK,CAACC,OAAO,CAACvB,OAAO,CAAC,CAAC,CAAC,CAAC5C,eAAe,CAAC,CAAC,EAAE;UAC/C,MAAMoE,UAAU,GAAGxB,OAAO,CAACyB,MAAM,CAAC,CAACC,GAAa,EAAEC,IAAgB,KAAK;AACrE,YAAA,IAAID,GAAG,CAACE,OAAO,CAACD,IAAI,CAACvE,eAAe,CAAW,CAAC,KAAK,CAAC,CAAC,EAAE;AACvDsE,cAAAA,GAAG,CAACG,IAAI,CAACF,IAAI,CAACvE,eAAe,CAAW,CAAC,CAAA;AAC3C,aAAA;AACA,YAAA,OAAOsE,GAAG,CAAA;WACX,EAAE,EAAE,CAAC,CAAA;UACN,MAAMI,gBAAgB,GAAG3B,SAAS,CAACsB,MAAM,CACvC,CAACtI,CAAC,EAAE4I,CAAC,KAAK;AACP5I,YAAAA,CAAC,CAAgB4I,CAAC,CAAC3E,eAAe,CAAC,CAAC,GAAG,CAAGjE,CAAC,CAAgB4I,CAAC,CAAC3E,eAAe,CAAC,CAAC,IAAe,CAAC,IAAI,CAAC,CAAA;AACpG,YAAA,OAAOjE,CAAC,CAAA;AACV,WAAC,EACD,CAACA,CAAC,EAAE4I,CAAC,KAAK;AACP5I,YAAAA,CAAC,CAAgB4I,CAAC,CAAC3E,eAAe,CAAC,CAAC,GAAG,CAAGjE,CAAC,CAAgB4I,CAAC,CAAC3E,eAAe,CAAC,CAAC,IAAe,CAAC,IAAI,CAAC,CAAA;AACpG,YAAA,OAAOjE,CAAC,CAAA;AACV,WAAC,EACD,OAAO,EAAE,CACX,CAAC,CAAA;UACD2G,UAAQ,CACL5E,KAAK,CACJ4G,gBAAgB,EAChBN,UAAU,CAAC,CAAC,CAAC;AAAE;UACf,CACGQ,GAAG,IAAMjH,CAAkD,IAC1DA,CAAC,CAACkH,KAAK,CAACD,GAAG,CAAC,EACdR,UAAU,CAAC,CAAC,CAAC,CACjB,CAAC,CACAJ,MAAM,CAACnC,UAAiB,CAAC,CAAA;AAC5B,UAAA,KAAK,IAAIiD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGV,UAAU,CAACH,MAAM,EAAE,EAAEa,CAAC,EAAE;YAC1CpC,UAAQ,CAACqC,KAAK,CACZL,gBAAgB,EAChBN,UAAU,CAACU,CAAC,CAAC,EACb,CACGF,GAAG,IAAMjH,CAAC,IACTA,CAAC,CAACkH,KAAK,CAACD,GAAG,CAAC,EACdR,UAAU,CAACU,CAAC,CAAC,CACjB,CAAC,CAAA;AACH,WAAA;AACF,SAAC,MAAM;UACL,MAAMV,UAAU,GAAGxB,OAAO,CAACyB,MAAM,CAAC,CAACC,GAAa,EAAEC,IAAgB,KAAK;AACpEA,YAAAA,IAAI,CAACvE,eAAe,CAAC,CAAcgF,OAAO,CAAEC,GAAW,IAAK;cAC3D,IAAIX,GAAG,CAACE,OAAO,CAACS,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;AAC3BX,gBAAAA,GAAG,CAACG,IAAI,CAACQ,GAAG,CAAC,CAAA;AACf,eAAA;AACF,aAAC,CAAC,CAAA;AACF,YAAA,OAAOX,GAAG,CAAA;WACX,EAAE,EAAE,CAAC,CAAA;UACN,MAAMI,gBAAgB,GAAG3B,SAAS,CAACsB,MAAM,CACvC,CAACtI,CAAC,EAAE4I,CAAC,KAAK;AACRA,YAAAA,CAAC,CAAC3E,eAAe,CAAC,CAACgF,OAAO,CAAEC,GAAW,IAAK;AACzClJ,cAAAA,CAAC,CAAgBkJ,GAAG,CAAC,GAAG,CAAGlJ,CAAC,CAAgBkJ,GAAG,CAAC,IAAe,CAAC,IAAI,CAAC,CAAA;AACxE,aAAC,CAAC,CAAA;AACF,YAAA,OAAOlJ,CAAC,CAAA;AACV,WAAC,EACD,CAACA,CAAC,EAAE4I,CAAC,KAAK;AACRA,YAAAA,CAAC,CAAC3E,eAAe,CAAC,CAACgF,OAAO,CAAEC,GAAW,IAAK;AACzClJ,cAAAA,CAAC,CAAgBkJ,GAAG,CAAC,GAAG,CAAGlJ,CAAC,CAAgBkJ,GAAG,CAAC,IAAe,CAAC,IAAI,CAAC,CAAA;AACxE,aAAC,CAAC,CAAA;AACF,YAAA,OAAOlJ,CAAC,CAAA;AACV,WAAC,EACD,OAAO,EAAE,CACX,CAAC,CAAA;UACD2G,UAAQ,CACL5E,KAAK,CACJ4G,gBAAgB,EAChBN,UAAU,CAAC,CAAC,CAAC;AAAE;UACf,CACGQ,GAAG,IAAMjH,CAAkD,IAC1DA,CAAC,CAACkH,KAAK,CAACD,GAAG,CAAC,EACdR,UAAU,CAAC,CAAC,CAAC,CACjB,CAAC,CACAJ,MAAM,CAACnC,UAAiB,CAAC,CAAA;AAC5B,UAAA,KAAK,IAAIiD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGV,UAAU,CAACH,MAAM,EAAE,EAAEa,CAAC,EAAE;YAC1CpC,UAAQ,CAACqC,KAAK,CACZL,gBAAgB,EAChBN,UAAU,CAACU,CAAC,CAAC,EACb,CACGF,GAAG,IAAMjH,CAAkD,IAC1DA,CAAC,CAACkH,KAAK,CAACD,GAAG,CAAC,EACdR,UAAU,CAACU,CAAC,CAAC,CACjB,CAAC,CAAA;AACH,WAAA;AACF,SAAA;AACF,OAAA;;AAEA;AACA,MAAA,MAAMI,UAAU,GAAGC,UAAY,CAAC,gBAAgB,CAAC,CAAA;AACjDzC,MAAAA,UAAQ,CAACiB,EAAE,CAAC,UAAU,EAAE,MAAM;AAC5B,QAAA,IAAIxD,cAAc,EAAE;AAAA,UAAA,IAAAiF,iBAAA,CAAA;AAClB,UAAA,MAAMC,SAAS,GAAA,CAAAD,iBAAA,GAAG1C,UAAQ,CAAC4C,OAAO,EAAE,cAAAF,iBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAlBA,iBAAA,CAAqB,CAAC,CAAC,CAAA;AACzC,UAAA,IAAIlB,KAAK,CAACC,OAAO,CAACkB,SAAS,CAAC,IAAIA,SAAS,CAACpB,MAAM,KAAK,CAAC,EAAE;AACtDzC,YAAAA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAG;cACT+D,IAAI,EAAEC,0BAA0B,CAACC,gBAAgB;AACjDC,cAAAA,MAAM,EAAE,CACN;AACEnG,gBAAAA,EAAE,EAAG,CAAEmD,EAAAA,UAAQ,CAACiD,UAAU,EAAG,CAAO,MAAA,CAAA;AACpCC,gBAAAA,KAAK,EAAEzF,cAAc;AACrB0F,gBAAAA,QAAQ,EAAE,OAAO;AACjBhB,gBAAAA,KAAK,EAAEK,UAAU,CAACG,SAAS,CAAC,CAAC,CAAC,CAAA;AAChC,eAAC,EACD;AACE9F,gBAAAA,EAAE,EAAG,CAAEmD,EAAAA,UAAQ,CAACiD,UAAU,EAAG,CAAK,IAAA,CAAA;AAClCC,gBAAAA,KAAK,EAAEzF,cAAc;AACrB0F,gBAAAA,QAAQ,EAAE,YAAY;AACtBhB,gBAAAA,KAAK,EAAEK,UAAU,CAACG,SAAS,CAAC,CAAC,CAAC,CAAA;eAC/B,CAAA;AAEL,aAAC,CAAC,CAAA;AACJ,WAAA;AACF,SAAA;AAEA5E,QAAAA,QAAQ,aAARA,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,QAAQ,CAAGiC,UAAQ,CAAC4C,OAAO,EAAE,EAAEtD,GAAG,CAAC8D,WAAW,EAAE,CAAC,CAAA;AACnD,OAAC,CAAC,CAAA;;AAEF;MACApD,UAAQ,CAACqD,MAAM,EAAE,CAAA;;AAEjB;MACArG,QAAQ,CAACgD,UAAQ,CAAC,CAAA;AACpB,KAAA;AACF,GAAC,EAAE,CAACtC,SAAS,EAAE5C,IAAI,CAAC,CAAC,CAAA;;AAErB;AACA,EAAA,MAAMwI,WAAW,GAAGpE,YAAY,CAACqE,IAAI,CAAEP,MAAM,IAAKA,MAAM,CAACE,KAAK,KAAKzF,cAAc,IAAIuF,MAAM,CAACG,QAAQ,KAAK,OAAO,CAAC,CAAA;AACjH,EAAA,MAAMK,SAAS,GAAGtE,YAAY,CAACqE,IAAI,CAAEP,MAAM,IAAKA,MAAM,CAACE,KAAK,KAAKzF,cAAc,IAAIuF,MAAM,CAACG,QAAQ,KAAK,YAAY,CAAC,CAAA;AACpH1D,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAI1C,KAAK,IAAIuG,WAAW,IAAIE,SAAS,IAAIF,WAAW,CAACnB,KAAK,IAAIqB,SAAS,CAACrB,KAAK,EAAE;AAC7E,MAAA,MAAMsB,eAAe,GAAG1G,KAAK,CAAC6F,OAAO,EAAE,CAAA;MACvC,MAAMc,YAAY,GAAGD,eAAe,KAAA,IAAA,IAAfA,eAAe,KAAfA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAe,CAAG,CAAC,CAAC,CAAA;MACzC,MAAME,gBAAgB,GAAGD,YAAY,KAAA,IAAA,IAAZA,YAAY,KAAZA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,YAAY,CAAG,CAAC,CAAC,CAAA;MAC1C,MAAME,cAAc,GAAGF,YAAY,KAAA,IAAA,IAAZA,YAAY,KAAZA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,YAAY,CAAG,CAAC,CAAC,CAAA;AACxC,MAAA,IAAIC,gBAAgB,KAAKE,QAAU,CAACP,WAAW,CAACnB,KAAK,CAAC,IAAIyB,cAAc,KAAKC,QAAU,CAACL,SAAS,CAACrB,KAAK,CAAC,EAAE;QAAA,IAAA2B,WAAA,EAAAC,YAAA,CAAA;AACxGhH,QAAAA,KAAK,CAACiG,MAAM,CAAC,IAAI,CAAC,CAAA;QAClBjG,KAAK,CAACiG,MAAM,CACVgB,OAAS,CAACC,YAAY,CACpB,EAAAH,WAAA,GAAAD,QAAU,CAACP,WAAW,CAACnB,KAAK,CAAC,cAAA2B,WAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAA7BA,WAAA,CAA+BI,OAAO,EAAE,KAAI,CAAC,EAC7C,CAAAH,CAAAA,YAAA,GAAAF,QAAU,CAACL,SAAS,CAACrB,KAAK,CAAC,cAAA4B,YAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAA3BA,YAAA,CAA6BG,OAAO,EAAE,KAAI,CAC5C,CACF,CAAC,CAAA;AACDC,QAAAA,SAAW,EAAE,CAAA;AACf,OAAA;AACF,KAAA;AACF,GAAC,EAAE,CAACb,WAAW,aAAXA,WAAW,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAXA,WAAW,CAAEnB,KAAK,EAAEqB,SAAS,aAATA,SAAS,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAATA,SAAS,CAAErB,KAAK,CAAC,CAAC,CAAA;EAE1C,oBACEiC,KAAA,CAAAC,aAAA,CAACxL,wBAAwB,EAAAyL,QAAA,KACnBnG,cAAc,EAAA;IAClBf,SAAS,EAAEmH,UAAU,CAACjI,kBAAkB,CAACc,SAAS,EAAEA,SAAS,CAAE;AAC/DX,IAAAA,GAAG,EAAEC,YAA0C;AAC/CzD,IAAAA,MAAM,EAAEqF,KAAAA;AAAM,GAAA,CAAA,eAEd8F,KAAA,CAAAC,aAAA,CAACnL,6BAA6B,EAAA;AAC5BkE,IAAAA,SAAS,EAAG,CAAA,EAAEd,kBAAkB,CAACc,SAAU,CAAS,OAAA,CAAA;AACpDoH,IAAAA,UAAU,EAAC,QAAQ;AACnBvL,IAAAA,MAAM,EAAEqF,KAAAA;AAAM,GAAA,EAEbN,KAAK,gBAAGoG,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IAAKxH,EAAE,EAAG,KAAIA,EAAG,CAAA,OAAA,CAAA;AAAS,GAAA,EAAEmB,KAAW,CAAC,GAAG,IAAI,EACvDjB,KAAK,IAAIc,WAAW,gBACnBuG,KAAA,CAAAC,aAAA,CAACI,MAAM,EAAA;AACLC,IAAAA,OAAO,EAAC,UAAU;IAClBC,OAAO,EAAEA,MAAM;AACb5H,MAAAA,KAAK,CAACiG,MAAM,CAAC,IAAI,CAAC,CAAA;AAClBmB,MAAAA,SAAW,EAAE,CAAA;AAEb,MAAA,IAAI1G,cAAc,EAAE;AAClBqB,QAAAA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAG;UACT+D,IAAI,EAAEC,0BAA0B,CAAC8B,WAAW;AAC5C5B,UAAAA,MAAM,EAAE;AACNnG,YAAAA,EAAE,EAAG,CAAEE,EAAAA,KAAK,CAACkG,UAAU,EAAG,CAAO,MAAA,CAAA;AACjCC,YAAAA,KAAK,EAAEzF,cAAc;AACrB0F,YAAAA,QAAQ,EAAE,OAAA;AACZ,WAAA;AACF,SAAC,CAAC,CAAA;AACFrE,QAAAA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAG;UACT+D,IAAI,EAAEC,0BAA0B,CAAC8B,WAAW;AAC5C5B,UAAAA,MAAM,EAAE;AACNnG,YAAAA,EAAE,EAAG,CAAEE,EAAAA,KAAK,CAACkG,UAAU,EAAG,CAAK,IAAA,CAAA;AAC/BC,YAAAA,KAAK,EAAEzF,cAAc;AACrB0F,YAAAA,QAAQ,EAAE,YAAA;AACZ,WAAA;AACF,SAAC,CAAC,CAAA;AACJ,OAAA;AACF,KAAA;GAECxE,EAAAA,UACK,CAAC,GACP,IACyB,CAAC,eAEhCyF,KAAA,CAAAC,aAAA,CAAC/K,iCAAiC,EAAA;AAChC8D,IAAAA,SAAS,EAAG,CAAA,EAAEd,kBAAkB,CAACc,SAAU,CAAa,WAAA,CAAA;IACxD5D,QAAQ,EAAE8F,GAAG,CAACa,GAAG,EAAE,CAACoB,MAAM,KAAK,CAAA;GAE/B6C,eAAAA,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACEjH,IAAAA,SAAS,EAAG,CAAA,EAAEd,kBAAkB,CAACc,SAAU,CAAmB,iBAAA,CAAA;AAC9DX,IAAAA,GAAG,EAAEG,QAAAA;AAAsC,GAC5C,CAAC,EACD0C,GAAG,CAACa,GAAG,EAAE,CAACoB,MAAM,KAAK,CAAC,gBACrB6C,KAAA,CAAAC,aAAA,CAACQ,eAAe,EAAA;AACd7G,IAAAA,KAAK,EAAEQ,eAAiB;AACxBsG,IAAAA,QAAQ,EAAErG,kBAAmB;AAC7BE,IAAAA,UAAU,EAAED,oBAAqB;IACjCqG,OAAO,EAAEA,MAAM;AACbC,MAAAA,SAAW,EAAE,CAAA;AACbb,MAAAA,SAAW,EAAE,CAAA;AACbrF,MAAAA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAG;QACT+D,IAAI,EAAEC,0BAA0B,CAACmC,YAAAA;AACnC,OAAC,CAAC,CAAA;AACJ,KAAA;GACD,CAAC,GACA,IAC6B,CAAC,EAEnC9H,OAAO,gBACNiH,KAAA,CAAAC,aAAA,CAACjL,+BAA+B,EAAA;AAC9BgE,IAAAA,SAAS,EAAG,CAAA,EAAEd,kBAAkB,CAACc,SAAU,CAAW,SAAA,CAAA;IACtDP,EAAE,EAAG,CAAIA,EAAAA,EAAAA,EAAG,CAAW,SAAA,CAAA;AACvB5D,IAAAA,MAAM,EAAEqF,KAAAA;AAAM,GAAA,EAEbnB,OAC8B,CAAC,GAChC,IACoB,CAAC,CAAA;AAE/B,CAAC,EAAC;AACFb,kBAAkB,CAACc,SAAS,GAAGzD,SAAS,CAAA;AACxC2C,kBAAkB,CAAC4I,WAAW,GAAGxL,cAAc;;;;"}
@@ -0,0 +1,2 @@
1
+ export { W as WithFilters } from './WithFilters2.js';
2
+ //# sourceMappingURL=WithFilters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WithFilters.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}