@stenajs-webui/filter 19.0.0-next.12 → 19.0.0-next.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es.js CHANGED
@@ -1,56 +1,65 @@
1
1
  (function(){"use strict";try{var e=document.createElement("style");e.appendChild(document.createTextNode("")),document.head.appendChild(e)}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
2
- import { jsx as o, jsxs as g, Fragment as z } from "react/jsx-runtime";
3
- import { createContext as L, useContext as E, useCallback as u, useState as M, useReducer as J, useMemo as b } from "react";
4
- import { Drawer as Q } from "@stenajs-webui/modal";
5
- import { cssColor as U } from "@stenajs-webui/theme";
6
- import { Spacing as X, Row as w, Space as O, Heading as Z, Column as P, Box as A, truthyKeysAsList as D } from "@stenajs-webui/core";
7
- import { FlatButton as H, stenaTimes as _, SecondaryButton as N, stenaSlidersMini as ee, MenuButton as te, Spinner as ne, Banner as re, Chip as q } from "@stenajs-webui/elements";
2
+ import { jsx as o, jsxs as g, Fragment as $ } from "react/jsx-runtime";
3
+ import { createContext as L, useContext as k, useCallback as u, useState as M, useReducer as Q, useMemo as b } from "react";
4
+ import { Drawer as U } from "@stenajs-webui/modal";
5
+ import { cssColor as D } from "@stenajs-webui/theme";
6
+ import { Spacing as X, Row as w, Space as O, Heading as Z, Column as P, Box as A, truthyKeysAsList as q } from "@stenajs-webui/core";
7
+ import { FlatButton as H, stenaTimes as _, SecondaryButton as N, stenaSlidersMini as ee, MenuButton as te, Spinner as ne, Banner as re, Chip as G } from "@stenajs-webui/elements";
8
8
  import { upperFirst as ce, lowerCase as oe } from "lodash";
9
9
  import { combineReducers as se } from "redux";
10
- import { reducerIdGate as B, createValueByIdReducer as ie, createEntityReducer as $, reducerIdGateAction as C, createEntityActions as v, createValueByIdActions as R } from "@stenajs-webui/redux";
10
+ import { reducerIdGate as B, createValueByIdReducer as ie, createEntityReducer as z, reducerIdGateAction as C, createEntityActions as v, createValueByIdActions as R } from "@stenajs-webui/redux";
11
11
  import ae from "@emotion/styled";
12
12
  import { CheckboxWithLabel as le } from "@stenajs-webui/forms";
13
13
  import { ChipMultiSelect as de } from "@stenajs-webui/select";
14
14
  import { stringsToDateRange as ue, dateRangeToStrings as he, DateRangeCalendar as pe } from "@stenajs-webui/calendar";
15
- const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /* @__PURE__ */ o(X, { children: /* @__PURE__ */ g(
16
- w,
15
+ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /* @__PURE__ */ o(
16
+ X,
17
17
  {
18
- justifyContent: "space-between",
19
- alignItems: "center",
20
- height: "48px",
21
- children: [
22
- /* @__PURE__ */ g(w, { children: [
23
- /* @__PURE__ */ o(O, { num: 3 }),
24
- /* @__PURE__ */ o(Z, { variant: "h4", children: t })
25
- ] }),
26
- /* @__PURE__ */ g(w, { gap: 1, children: [
27
- n,
28
- /* @__PURE__ */ o(
29
- H,
30
- {
31
- leftIcon: _,
32
- onClick: e,
33
- variant: "danger"
34
- }
35
- ),
36
- /* @__PURE__ */ o(O, { num: 0.5 })
37
- ] })
38
- ]
18
+ position: "sticky",
19
+ top: 0,
20
+ background: D("--lhds-color-ui-50"),
21
+ zIndex: 100,
22
+ children: /* @__PURE__ */ g(
23
+ w,
24
+ {
25
+ justifyContent: "space-between",
26
+ alignItems: "center",
27
+ height: "48px",
28
+ children: [
29
+ /* @__PURE__ */ g(w, { children: [
30
+ /* @__PURE__ */ o(O, { num: 3 }),
31
+ /* @__PURE__ */ o(Z, { variant: "h4", children: t })
32
+ ] }),
33
+ /* @__PURE__ */ g(w, { gap: 1, children: [
34
+ n,
35
+ /* @__PURE__ */ o(
36
+ H,
37
+ {
38
+ leftIcon: _,
39
+ onClick: e,
40
+ variant: "danger"
41
+ }
42
+ ),
43
+ /* @__PURE__ */ o(O, { num: 0.5 })
44
+ ] })
45
+ ]
46
+ }
47
+ )
39
48
  }
40
- ) }), G = L(null), W = () => {
41
- const e = E(G);
49
+ ), W = L(null), I = () => {
50
+ const e = k(W);
42
51
  if (!e)
43
52
  throw new Error(
44
53
  "Missing search filter context, wrap components with SearchFilterContext component."
45
54
  );
46
55
  return e;
47
56
  }, K = L(null), F = () => {
48
- const e = E(K);
57
+ const e = k(K);
49
58
  if (!e)
50
59
  throw new Error("Missing search filter dispatch context.");
51
60
  return e;
52
61
  }, Y = L(null), x = () => {
53
- const e = E(Y);
62
+ const e = k(Y);
54
63
  if (!e)
55
64
  throw new Error("Missing search filter actions context.");
56
65
  return e;
@@ -62,28 +71,37 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
62
71
  }) => {
63
72
  const {
64
73
  settings: { open: c }
65
- } = W(), s = F(), i = x(), l = u(() => {
74
+ } = I(), s = F(), i = x(), l = u(() => {
66
75
  s(i.closeFilters());
67
76
  }, [i, s]);
68
- return /* @__PURE__ */ o(Q, { isOpen: c, onRequestClose: l, ...r, children: /* @__PURE__ */ g(
69
- P,
77
+ return /* @__PURE__ */ o(
78
+ U,
70
79
  {
71
- height: "100%",
72
- borderRadius: "var(--swui-border-radius)",
73
- background: U("--lhds-color-ui-50"),
74
- children: [
75
- /* @__PURE__ */ o(
76
- Se,
77
- {
78
- onRequestClose: l,
79
- header: t,
80
- contentRight: n
81
- }
82
- ),
83
- /* @__PURE__ */ o(A, { spacing: 1, indent: 1, gap: 1, children: e })
84
- ]
80
+ floating: !0,
81
+ isOpen: c,
82
+ onRequestClose: l,
83
+ ...r,
84
+ children: /* @__PURE__ */ g(
85
+ P,
86
+ {
87
+ height: "100%",
88
+ borderRadius: "var(--swui-border-radius)",
89
+ background: D("--lhds-color-ui-50"),
90
+ children: [
91
+ /* @__PURE__ */ o(
92
+ Se,
93
+ {
94
+ onRequestClose: l,
95
+ header: t,
96
+ contentRight: n
97
+ }
98
+ ),
99
+ /* @__PURE__ */ o(A, { spacing: 1, indent: 1, gap: 1, children: e })
100
+ ]
101
+ }
102
+ )
85
103
  }
86
- ) });
104
+ );
87
105
  }, Ge = ({
88
106
  label: e = "Filters",
89
107
  leftIcon: t = ee
@@ -111,10 +129,10 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
111
129
  contentRight: S
112
130
  }) {
113
131
  var j;
114
- const a = W(), m = F(), f = x(), h = (j = a.expandedSections.values[t]) != null ? j : !1, k = u(() => {
132
+ const a = I(), m = F(), f = x(), h = (j = a.expandedSections.values[t]) != null ? j : !1, E = u(() => {
115
133
  m(f.setSectionExpanded(t, !h));
116
134
  }, [f, m, h, t]), y = n != null ? n : me(t);
117
- return /* @__PURE__ */ g(z, { children: [
135
+ return /* @__PURE__ */ g($, { children: [
118
136
  /* @__PURE__ */ o(
119
137
  te,
120
138
  {
@@ -123,7 +141,7 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
123
141
  expandable: !0,
124
142
  expanded: h,
125
143
  selected: h,
126
- onClick: k,
144
+ onClick: E,
127
145
  right: S,
128
146
  children: r ? /* @__PURE__ */ o(w, { spacing: !0, justifyContent: "center", flex: 1, children: /* @__PURE__ */ o(ne, { size: "small" }) }) : c ? /* @__PURE__ */ o(
129
147
  re,
@@ -152,8 +170,8 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
152
170
  ...t,
153
171
  children: e
154
172
  }
155
- ), I = L(null), Ke = () => {
156
- const e = E(I);
173
+ ), J = L(null), Ie = () => {
174
+ const e = k(J);
157
175
  if (!e)
158
176
  throw new Error(
159
177
  "Missing search filter context, wrap components with SearchFilterContext component."
@@ -169,7 +187,7 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
169
187
  K.Provider,
170
188
  {
171
189
  value: n,
172
- children: /* @__PURE__ */ o(Y.Provider, { value: r, children: /* @__PURE__ */ o(G.Provider, { value: t, children: /* @__PURE__ */ o(I.Provider, { value: t.formModel, children: c }) }) })
190
+ children: /* @__PURE__ */ o(Y.Provider, { value: r, children: /* @__PURE__ */ o(W.Provider, { value: t, children: /* @__PURE__ */ o(J.Provider, { value: t.formModel, children: c }) }) })
173
191
  }
174
192
  );
175
193
  }, fe = (e) => ({
@@ -185,11 +203,11 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
185
203
  ),
186
204
  formModel: B(
187
205
  d(e, "formModel"),
188
- $(t.formModel)
206
+ z(t.formModel)
189
207
  ),
190
208
  settings: B(
191
209
  d(e, "settings"),
192
- $(t.settings)
210
+ z(t.settings)
193
211
  )
194
212
  }), xe = (e, t) => ({
195
213
  openFilters: () => C(
@@ -236,13 +254,13 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
236
254
  "local",
237
255
  e.formModel
238
256
  )
239
- ), [r, c] = J(t, e);
257
+ ), [r, c] = Q(t, e);
240
258
  return {
241
259
  actions: n,
242
260
  state: r,
243
261
  dispatch: c
244
262
  };
245
- }, Ye = function({
263
+ }, Ke = function({
246
264
  initialFormModel: t,
247
265
  children: n
248
266
  }) {
@@ -253,7 +271,7 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
253
271
  }, V = ae.div`
254
272
  padding: calc(var(--swui-metrics-spacing) / 2)
255
273
  calc(var(--swui-metrics-indent) / 2);
256
- `, Ie = ({
274
+ `, Ye = ({
257
275
  children: e,
258
276
  disableClearAllButton: t = !1
259
277
  }) => {
@@ -279,7 +297,7 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
279
297
  const r = F(), c = x(), s = u(() => {
280
298
  r(c.clearExpandedSections()), r(c.expandSection(n)), r(c.openFilters());
281
299
  }, [c, r, n]);
282
- return /* @__PURE__ */ o(V, { children: /* @__PURE__ */ o(q, { label: t, variant: "secondary", onClick: s }) });
300
+ return /* @__PURE__ */ o(V, { children: /* @__PURE__ */ o(G, { label: t, variant: "secondary", onClick: s }) });
283
301
  }, ve = function({
284
302
  sectionId: t,
285
303
  label: n,
@@ -295,7 +313,7 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
295
313
  s(i.clearExpandedSections()), s(i.expandSection(t)), s(i.openFilters());
296
314
  }, [i, s, t]);
297
315
  return /* @__PURE__ */ o(V, { children: /* @__PURE__ */ o(
298
- q,
316
+ G,
299
317
  {
300
318
  label: n != null ? n : t,
301
319
  onClick: S,
@@ -308,7 +326,7 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
308
326
  emptyChipLabel: r,
309
327
  onClickRemoveOnChip: c
310
328
  }) {
311
- return n != null && n.length ? /* @__PURE__ */ o(z, { children: n.map(({ label: s, value: i }) => /* @__PURE__ */ o(
329
+ return n != null && n.length ? /* @__PURE__ */ o($, { children: n.map(({ label: s, value: i }) => /* @__PURE__ */ o(
312
330
  ve,
313
331
  {
314
332
  label: s != null ? s : t,
@@ -327,7 +345,7 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
327
345
  e,
328
346
  t
329
347
  )
330
- }), Re = (e, t) => D(e).map((n) => {
348
+ }), Re = (e, t) => q(e).map((n) => {
331
349
  var c;
332
350
  const r = t == null ? void 0 : t.find((s) => s.value === n);
333
351
  return { value: n, label: (c = r == null ? void 0 : r.label) != null ? c : n };
@@ -360,7 +378,7 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
360
378
  ...c
361
379
  }) => {
362
380
  const [s, i] = M(""), l = b(
363
- () => t ? D(t).map((a) => {
381
+ () => t ? q(t).map((a) => {
364
382
  var f;
365
383
  const m = e == null ? void 0 : e.find((h) => h.value === a);
366
384
  return { value: a, label: (f = m == null ? void 0 : m.label) != null ? f : a };
@@ -391,13 +409,13 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
391
409
  e[t],
392
410
  e[n]
393
411
  ),
394
- onClickRemoveOnChip: Ee(
412
+ onClickRemoveOnChip: ke(
395
413
  t,
396
414
  n
397
415
  )
398
416
  }), Le = (e, t) => !e && !t ? [] : [
399
417
  { value: "dateRange", label: `${e != null ? e : ""} - ${t != null ? t : ""}` }
400
- ], Ee = (e, t) => ({ setFormModelFields: n }) => {
418
+ ], ke = (e, t) => ({ setFormModelFields: n }) => {
401
419
  n({
402
420
  [e]: void 0,
403
421
  [t]: void 0
@@ -427,7 +445,7 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
427
445
  const p = F(), S = x(), a = b(
428
446
  () => ({ dispatch: p, actions: S }),
429
447
  [S, p]
430
- ), [m, f] = M("startDate"), h = b(() => ue(e), [e]), k = u(
448
+ ), [m, f] = M("startDate"), h = b(() => ue(e), [e]), E = u(
431
449
  (y) => {
432
450
  t(he(y), a);
433
451
  },
@@ -447,7 +465,7 @@ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /*
447
465
  setFocusedInput: f,
448
466
  focusedInput: m,
449
467
  value: h,
450
- onValueChange: k,
468
+ onValueChange: E,
451
469
  ...l
452
470
  }
453
471
  ) }) })
@@ -461,15 +479,15 @@ export {
461
479
  Y as SearchFilterActionsContext,
462
480
  Ge as SearchFilterButton,
463
481
  ve as SearchFilterChip,
464
- Ie as SearchFilterChips,
482
+ Ye as SearchFilterChips,
465
483
  Ce as SearchFilterContext,
466
484
  K as SearchFilterDispatchContext,
467
485
  qe as SearchFilterDrawer,
468
- Ye as SearchFilterLocalStateContext,
469
- I as SearchFilterModelContext,
486
+ Ke as SearchFilterLocalStateContext,
487
+ J as SearchFilterModelContext,
470
488
  Se as SearchFilterPanelHeader,
471
489
  T as SearchFilterSection,
472
- G as SearchFilterStateContext,
490
+ W as SearchFilterStateContext,
473
491
  Je as SectionChips,
474
492
  Ue as SimpleCheckboxListSection,
475
493
  We as StickyFooter,
@@ -479,7 +497,7 @@ export {
479
497
  Ze as createChipsPropsForDateRange,
480
498
  _e as createDateRangeSectionProps,
481
499
  Me as createOnClickRemoveOnChipForBooleanRecord,
482
- Ee as createOnClickRemoveOnChipForDateRange,
500
+ ke as createOnClickRemoveOnChipForDateRange,
483
501
  xe as createSearchFilterActions,
484
502
  fe as createSearchFilterInitialState,
485
503
  Fe as createSearchFilterReducer,
@@ -488,7 +506,7 @@ export {
488
506
  ge as useLocalSearchFilterState,
489
507
  x as useSearchFilterActions,
490
508
  F as useSearchFilterDispatch,
491
- Ke as useSearchFilterModel,
492
- W as useSearchFilterState
509
+ Ie as useSearchFilterModel,
510
+ I as useSearchFilterState
493
511
  };
494
512
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/features/search-filter/components/SearchFilterPanelHeader.tsx","../src/features/search-filter/context/SearchFilterStateContext.ts","../src/features/search-filter/context/SearchFilterDispatchContext.ts","../src/features/search-filter/context/SearchFilterActionsContext.ts","../src/features/search-filter/components/SearchFilterDrawer.tsx","../src/features/search-filter/components/SearchFilterButton.tsx","../src/features/search-filter/components/SearchFilterSection.tsx","../src/features/search-filter/components/StickyFooter.tsx","../src/features/search-filter/context/SearchFilterModelContext.ts","../src/features/search-filter/components/context/SearchFilterContext.tsx","../src/features/search-filter/redux/SearchFilterRedux.ts","../src/features/search-filter/hooks/UseLocalSearchFilterState.ts","../src/features/search-filter/components/context/SearchFilterLocalStateContext.tsx","../src/features/search-filter/features/chips/ChipSpacer.tsx","../src/features/search-filter/features/chips/SearchFilterChips.tsx","../src/features/search-filter/features/chips/EmptyChip.tsx","../src/features/search-filter/features/chips/SearchFilterChip.tsx","../src/features/search-filter/features/chips/SectionChips.tsx","../src/features/search-filter/section-factories/boolean-record/BooleanRecordChips.ts","../src/features/search-filter/section-factories/boolean-record/components/SimpleCheckboxListSection.tsx","../src/features/search-filter/section-factories/boolean-record/components/ChipMultiSelectSection.tsx","../src/features/search-filter/section-factories/date-range/DateRangeChips.ts","../src/features/search-filter/section-factories/date-range/DateRangePropsFactory.ts","../src/features/search-filter/section-factories/date-range/components/DateRangeCalendarSection.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { ReactNode } from \"react\";\nimport { FlatButton, stenaTimes } from \"@stenajs-webui/elements\";\nimport { Heading, Row, Space, Spacing } from \"@stenajs-webui/core\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n header?: string;\n contentRight?: ReactNode;\n}\n\nexport const SearchFilterPanelHeader: React.FC<\n SearchFilterPanelHeaderProps\n> = ({ onRequestClose, header = \"Filter\", contentRight }) => {\n return (\n <Spacing>\n <Row\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n height={\"48px\"}\n >\n <Row>\n <Space num={3} />\n <Heading variant={\"h4\"}>{header}</Heading>\n </Row>\n <Row gap={1}>\n {contentRight}\n <FlatButton\n leftIcon={stenaTimes}\n onClick={onRequestClose}\n variant={\"danger\"}\n />\n <Space num={0.5} />\n </Row>\n </Row>\n </Spacing>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterState } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterStateContext = createContext<\n SearchFilterState<unknown>\n>(null as unknown as SearchFilterState<unknown>);\n\nexport const useSearchFilterState = <\n TFormModel\n>(): SearchFilterState<TFormModel> => {\n const c = useContext(SearchFilterStateContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as SearchFilterState<TFormModel>;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterDispatch } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterDispatchContext = createContext<\n SearchFilterDispatch<unknown>\n>(null as unknown as SearchFilterDispatch<unknown>);\n\nexport const useSearchFilterDispatch = () => {\n const c = useContext(SearchFilterDispatchContext);\n if (!c) {\n throw new Error(\"Missing search filter dispatch context.\");\n }\n return c;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterActions } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterActionsContext = createContext<\n SearchFilterActions<unknown, any>\n>(null as unknown as SearchFilterActions<unknown, any>);\n\nexport const useSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>() => {\n const c = useContext(SearchFilterActionsContext);\n if (!c) {\n throw new Error(\"Missing search filter actions context.\");\n }\n return c as SearchFilterActions<TFormModel, TSectionKey>;\n};\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Drawer, DrawerProps } from \"@stenajs-webui/modal\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Box, Column } from \"@stenajs-webui/core\";\nimport { SearchFilterPanelHeader } from \"./SearchFilterPanelHeader\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\ninterface SearchFilterDrawerProps\n extends Omit<DrawerProps, \"isOpen\" | \"onRequestClose\"> {\n header?: string;\n headerContentRight?: ReactNode;\n}\n\nexport const SearchFilterDrawer: React.FC<SearchFilterDrawerProps> = ({\n children,\n header,\n headerContentRight,\n ...drawerProps\n}) => {\n const {\n settings: { open },\n } = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const closeDrawer = useCallback(() => {\n dispatch(actions.closeFilters());\n }, [actions, dispatch]);\n\n return (\n <Drawer isOpen={open} onRequestClose={closeDrawer} {...drawerProps}>\n <Column\n height={\"100%\"}\n borderRadius={\"var(--swui-border-radius)\"}\n background={cssColor(\"--lhds-color-ui-50\")}\n >\n <SearchFilterPanelHeader\n onRequestClose={closeDrawer}\n header={header}\n contentRight={headerContentRight}\n />\n <Box spacing={1} indent={1} gap={1}>\n {children}\n </Box>\n </Column>\n </Drawer>\n );\n};\n","import { SecondaryButton, stenaSlidersMini } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\ninterface SearchFilterDrawerButtonProps {\n label?: string;\n leftIcon?: IconDefinition;\n}\n\nexport const SearchFilterButton: React.FC<SearchFilterDrawerButtonProps> = ({\n label = \"Filters\",\n leftIcon = stenaSlidersMini,\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickButton = useCallback(() => {\n dispatch(actions.openFilters());\n }, [actions, dispatch]);\n\n return (\n <SecondaryButton\n label={label}\n leftIcon={leftIcon}\n onClick={onClickButton}\n />\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren, useCallback } from \"react\";\nimport { Row, Space } from \"@stenajs-webui/core\";\nimport { lowerCase, upperFirst } from \"lodash\";\nimport {\n Banner,\n FlatButton,\n MenuButton,\n Spinner,\n} from \"@stenajs-webui/elements\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\nexport interface SearchFilterSectionProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label?: string;\n leftIcon?: IconDefinition;\n contentRight?: React.ReactNode;\n disableContentPadding?: boolean;\n loading?: boolean;\n error?: string;\n onRetry?: () => void;\n}\n\nexport const SearchFilterSection = function SearchFilterSection<\n TSectionKey extends string\n>({\n sectionId,\n label,\n loading,\n error,\n onRetry,\n disableContentPadding,\n children,\n leftIcon,\n contentRight,\n}: PropsWithChildren<SearchFilterSectionProps<TSectionKey>>) {\n const state = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const expanded = state.expandedSections.values[sectionId] ?? false;\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.setSectionExpanded(sectionId, !expanded));\n }, [actions, dispatch, expanded, sectionId]);\n\n const activeLabel = label ?? formatColumnIdToHeaderCellLabel(sectionId);\n\n return (\n <>\n <MenuButton\n label={activeLabel}\n leftIcon={leftIcon}\n expandable\n expanded={expanded}\n selected={expanded}\n onClick={onClickLabel}\n right={contentRight}\n >\n {loading ? (\n <Row spacing justifyContent={\"center\"} flex={1}>\n <Spinner size={\"small\"} />\n </Row>\n ) : error ? (\n <Banner\n variant={\"error\"}\n text={error}\n contentRight={\n onRetry ? <FlatButton label={\"Retry\"} onClick={onRetry} /> : null\n }\n />\n ) : disableContentPadding ? (\n children\n ) : (\n children\n )}\n </MenuButton>\n {expanded && <Space />}\n </>\n );\n};\n\nexport const formatColumnIdToHeaderCellLabel = (columnId: string): string =>\n upperFirst(lowerCase(columnId));\n","import { BoxProps, Column } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { ReactNode } from \"react\";\n\nexport interface StickySearchButtonProps extends Pick<BoxProps, \"gap\"> {\n children?: ReactNode;\n}\n\nexport const StickyFooter: React.FC<StickySearchButtonProps> = ({\n children,\n ...boxProps\n}) => {\n return (\n <Column\n style={{ marginTop: \"auto\" }}\n justifyContent={\"center\"}\n spacing={2}\n indent\n shadow={\"popover\"}\n zIndex={1}\n {...boxProps}\n >\n {children}\n </Column>\n );\n};\n","import { createContext, useContext } from \"react\";\n\nexport const SearchFilterModelContext = createContext<unknown>(null as unknown);\n\nexport const useSearchFilterModel = <TFormModel>(): TFormModel => {\n const c = useContext(SearchFilterModelContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as TFormModel;\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport {\n SearchFilterActions,\n SearchFilterDispatch,\n SearchFilterState,\n} from \"../../redux/SearchFilterRedux\";\nimport { SearchFilterDispatchContext } from \"../../context/SearchFilterDispatchContext\";\nimport { SearchFilterActionsContext } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterStateContext } from \"../../context/SearchFilterStateContext\";\nimport { SearchFilterModelContext } from \"../../context/SearchFilterModelContext\";\n\ninterface SearchFilterScopeProps<TFormModel, TSectionKey extends string> {\n state: SearchFilterState<TFormModel>;\n dispatch: SearchFilterDispatch<TFormModel>;\n actions: SearchFilterActions<TFormModel, TSectionKey>;\n}\n\nexport const SearchFilterContext = function SearchFilterScope<\n TFormModel,\n TSectionKey extends string\n>({\n state,\n dispatch,\n actions,\n children,\n}: PropsWithChildren<SearchFilterScopeProps<TFormModel, TSectionKey>>) {\n return (\n <SearchFilterDispatchContext.Provider\n value={dispatch as SearchFilterDispatch<unknown>}\n >\n <SearchFilterActionsContext.Provider value={actions}>\n <SearchFilterStateContext.Provider value={state}>\n <SearchFilterModelContext.Provider value={state.formModel}>\n {children}\n </SearchFilterModelContext.Provider>\n </SearchFilterStateContext.Provider>\n </SearchFilterActionsContext.Provider>\n </SearchFilterDispatchContext.Provider>\n );\n};\n","import { combineReducers } from \"redux\";\nimport {\n createEntityActions,\n createEntityReducer,\n createValueByIdActions,\n createValueByIdReducer,\n EntityAction,\n EntityState,\n reducerIdGate,\n reducerIdGateAction,\n ReducerIdGateAction,\n ValueByIdAction,\n ValueByIdState,\n} from \"@stenajs-webui/redux\";\nimport { Dispatch } from \"react\";\n\nexport interface SearchFilterSettings {\n open: boolean;\n}\n\nexport type SearchFilterDispatch<TFormModel> = Dispatch<\n SearchFilterAction<TFormModel>\n>;\n\nexport interface SearchFilterState<TFormModel> {\n expandedSections: ValueByIdState<boolean>;\n formModel: EntityState<TFormModel>;\n settings: EntityState<SearchFilterSettings>;\n}\n\nexport type SearchFilterAction<TFormModel> =\n | ReducerIdGateAction<ValueByIdAction<boolean>>\n | ReducerIdGateAction<EntityAction<TFormModel>>\n | ReducerIdGateAction<EntityAction<SearchFilterSettings>>;\n\nexport const createSearchFilterInitialState = <TFormModel>(\n initialFormModel: TFormModel\n): SearchFilterState<TFormModel> => ({\n settings: {\n open: false,\n },\n formModel: initialFormModel,\n expandedSections: { values: {} },\n});\n\nexport const createSearchFilterReducer = <TFormModel>(\n reducerId: string,\n initialState: SearchFilterState<TFormModel>\n) =>\n combineReducers({\n expandedSections: reducerIdGate(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdReducer<boolean>(initialState.expandedSections)\n ),\n formModel: reducerIdGate(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityReducer<TFormModel>(initialState.formModel)\n ),\n settings: reducerIdGate(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityReducer<SearchFilterSettings>(initialState.settings)\n ),\n });\n\nexport interface SearchFilterActions<TFormModel, TSectionKey extends string> {\n openFilters: () => SearchFilterAction<TFormModel>;\n closeFilters: () => SearchFilterAction<TFormModel>;\n setFormModelFields: (\n fields: Partial<TFormModel>\n ) => SearchFilterAction<TFormModel>;\n clearFormModel: () => SearchFilterAction<TFormModel>;\n expandSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n collapseSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n setSectionExpanded: (\n section: TSectionKey,\n expanded: boolean\n ) => SearchFilterAction<TFormModel>;\n clearExpandedSections: () => SearchFilterAction<TFormModel>;\n}\n\nexport const createSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>(\n reducerId: string,\n initialFormModel: TFormModel\n): SearchFilterActions<TFormModel, TSectionKey> => ({\n openFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: true,\n })\n ),\n closeFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: false,\n })\n ),\n setFormModelFields: (fields: Partial<TFormModel>) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntityFields(fields)\n ),\n clearFormModel: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntity(initialFormModel)\n ),\n expandSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, true)\n ),\n collapseSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, false)\n ),\n setSectionExpanded: (section: TSectionKey, expanded: boolean) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, expanded)\n ),\n clearExpandedSections: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().clearAllValues()\n ),\n});\n\nexport const getReducerIdFor = (\n reducerId: string,\n reducerIdSuffix: keyof SearchFilterState<unknown>\n): string => `${reducerId}.${reducerIdSuffix}`;\n","import {\n createSearchFilterActions,\n createSearchFilterReducer,\n SearchFilterState,\n} from \"../redux/SearchFilterRedux\";\nimport { useReducer, useState } from \"react\";\n\nexport const useLocalSearchFilterState = <\n TFormModel,\n TSectionKey extends string\n>(\n initialState: SearchFilterState<TFormModel>\n) => {\n const [reducer] = useState(() =>\n createSearchFilterReducer<TFormModel>(\"local\", initialState)\n );\n\n const [actions] = useState(() =>\n createSearchFilterActions<TFormModel, TSectionKey>(\n \"local\",\n initialState.formModel\n )\n );\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return {\n actions,\n state,\n dispatch,\n };\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport { useLocalSearchFilterState } from \"../../hooks/UseLocalSearchFilterState\";\nimport { SearchFilterContext } from \"./SearchFilterContext\";\nimport { createSearchFilterInitialState } from \"../../redux/SearchFilterRedux\";\n\ninterface SearchFilterLocalScopeProps<TFormModel> {\n initialFormModel: TFormModel;\n}\n\nexport const SearchFilterLocalStateContext = function SearchFilterLocalScope<\n TFormModel\n>({\n initialFormModel,\n children,\n}: PropsWithChildren<SearchFilterLocalScopeProps<TFormModel>>) {\n const { state, actions, dispatch } = useLocalSearchFilterState(\n createSearchFilterInitialState(initialFormModel)\n );\n\n return (\n <SearchFilterContext state={state} actions={actions} dispatch={dispatch}>\n {children}\n </SearchFilterContext>\n );\n};\n","import styled from \"@emotion/styled\";\n\nexport const ChipSpacer = styled.div`\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n`;\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n children?: ReactNode;\n}\n\nexport const SearchFilterChips: React.FC<SearchFilterChipsProps> = ({\n children,\n disableClearAllButton = false,\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickClearAll = useCallback(\n () => dispatch(actions.clearFormModel()),\n [actions, dispatch]\n );\n\n return (\n <Row flexWrap={\"wrap\"}>\n {children}\n {!disableClearAllButton && (\n <ChipSpacer>\n <FlatButton\n size={\"small\"}\n label={\"Clear all\"}\n onClick={onClickClearAll}\n />\n </ChipSpacer>\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface EmptyChipProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label: string;\n}\n\nexport const EmptyChip = function EmptyChip<TSectionKey extends string>({\n label,\n sectionId,\n}: EmptyChipProps<TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip label={label} variant={\"secondary\"} onClick={onClickLabel} />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterSectionOnClickRemoveOnChip } from \"../../config/SearchFilterConfig\";\n\ninterface SearchFilterChipProps<TFormModel, TSectionKey> {\n sectionId: TSectionKey;\n label: string;\n value: string;\n onClickRemove?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SearchFilterChip = function SearchFilterChip<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n label,\n value,\n onClickRemove,\n}: SearchFilterChipProps<TFormModel, TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const setFormModelFields = useCallback(\n (fields: Partial<TFormModel>) =>\n dispatch(actions.setFormModelFields(fields)),\n [dispatch, actions]\n );\n\n const onClickRemoveHandler = useCallback(() => {\n onClickRemove?.({ value, setFormModelFields });\n }, [onClickRemove, setFormModelFields, value]);\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={onClickRemove ? onClickRemoveHandler : undefined}\n />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { EmptyChip } from \"./EmptyChip\";\nimport { SearchFilterChip } from \"./SearchFilterChip\";\n\nexport interface SectionChipsProps<TFormModel, TSectionKey extends string> {\n sectionId: TSectionKey;\n chips?: Array<SearchFilterSectionChipModel>;\n emptyChipLabel?: string;\n onClickRemoveOnChip?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SectionChips = function SectionChips<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n chips,\n emptyChipLabel,\n onClickRemoveOnChip,\n}: SectionChipsProps<TFormModel, TSectionKey>) {\n if (!chips?.length) {\n if (!emptyChipLabel) {\n return null;\n }\n return <EmptyChip sectionId={sectionId} label={emptyChipLabel} />;\n }\n\n return (\n <>\n {chips.map(({ label, value }) => (\n <SearchFilterChip\n key={value}\n label={label ?? sectionId}\n sectionId={sectionId}\n onClickRemove={onClickRemoveOnChip}\n value={value}\n />\n ))}\n </>\n );\n};\n","import { BooleanRecord, BooleanRecordOptions } from \"./BooleanRecordTypes\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue, truthyKeysAsList } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForBooleanRecord = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField,\n options?: BooleanRecordOptions\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForBooleanRecord(\n formModel[fieldName] as unknown as BooleanRecord,\n options\n ),\n onClickRemoveOnChip: createOnClickRemoveOnChipForBooleanRecord(\n formModel,\n fieldName\n ),\n});\n\nexport const createChipsForBooleanRecord = (\n booleanRecord: BooleanRecord,\n options?: BooleanRecordOptions\n): Array<SearchFilterSectionChipModel> =>\n truthyKeysAsList(booleanRecord).map((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n });\n\nexport const createOnClickRemoveOnChipForBooleanRecord = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields, value }) => {\n const newRecord = { ...formModel[fieldName] };\n newRecord[value] = false;\n setFormModelFields({\n [fieldName]: newRecord,\n } as unknown as Partial<TFormModel>);\n };\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { Column, Row } from \"@stenajs-webui/core\";\nimport {\n CheckboxWithLabel,\n ValueAndOnValueChangeProps,\n} from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\n\nexport interface SimpleCheckboxSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n options?: BooleanRecordOptions;\n}\n\nexport const SimpleCheckboxListSection = <TSectionKey extends string>({\n options,\n value,\n onValueChange,\n ...sectionProps\n}: SimpleCheckboxSectionProps<TSectionKey>): React.ReactElement => (\n <SearchFilterSection disableContentPadding {...sectionProps}>\n <Column maxHeight={\"400px\"} overflowY={\"auto\"} flex={1} gap={1} spacing={1}>\n {options?.map((d) => (\n <Row key={d.value} alignItems={\"center\"}>\n <CheckboxWithLabel\n tabIndex={-1}\n value={value?.[d.value]}\n label={d.label}\n onValueChange={(v) =>\n onValueChange?.({\n ...value,\n [d.value]: v,\n })\n }\n />\n </Row>\n ))}\n </Column>\n </SearchFilterSection>\n);\n","import * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { ChipMultiSelect, ChipMultiSelectValue } from \"@stenajs-webui/select\";\nimport { truthyKeysAsList } from \"@stenajs-webui/core\";\n\ninterface ChipMultiSelectSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n noneSelectedLabel?: string;\n options?: BooleanRecordOptions;\n}\n\nexport const ChipMultiSelectSection = <TSectionKey extends string>({\n options,\n value,\n noneSelectedLabel,\n onValueChange,\n ...sectionProps\n}: ChipMultiSelectSectionProps<TSectionKey>): React.ReactElement => {\n const [text, setText] = useState<string>(\"\");\n\n const listValue = useMemo<Array<ChipMultiSelectValue>>(\n () =>\n value\n ? truthyKeysAsList(value).map<ChipMultiSelectValue>((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n })\n : [],\n [options, value]\n );\n\n const filteredOptions = useMemo(() => {\n return options?.filter(\n (p) =>\n p.value.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1 ||\n p.label.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1\n );\n }, [options, text]);\n\n const onValueChangeInternal = useCallback(\n (value: Array<ChipMultiSelectValue>) => {\n onValueChange?.(createBooleanRecordFromValue(value));\n },\n [onValueChange]\n );\n\n return (\n <SearchFilterSection {...sectionProps}>\n <ChipMultiSelect\n options={filteredOptions}\n value={listValue}\n onValueChange={onValueChangeInternal}\n inputValue={text}\n noneSelectedLabel={noneSelectedLabel}\n onInputChange={setText}\n closeMenuOnSelect={false}\n />\n </SearchFilterSection>\n );\n};\n\nconst createBooleanRecordFromValue = (\n value: Array<ChipMultiSelectValue>\n): BooleanRecord => {\n return value.reduce<BooleanRecord>((sum, item) => {\n sum[item.value] = true;\n return sum;\n }, {});\n};\n","import {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForDateRange = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, string | undefined>\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForDateRange(\n formModel[startDateFieldName] as unknown as string | undefined,\n formModel[endDateFieldName] as unknown as string | undefined\n ),\n onClickRemoveOnChip: createOnClickRemoveOnChipForDateRange(\n startDateFieldName,\n endDateFieldName\n ),\n});\n\nexport const createChipsForDateRange = (\n startDate: string | undefined,\n endDate: string | undefined\n): Array<SearchFilterSectionChipModel> => {\n if (!startDate && !endDate) {\n return [];\n }\n return [\n { value: \"dateRange\", label: `${startDate ?? \"\"} - ${endDate ?? \"\"}` },\n ];\n};\n\nexport const createOnClickRemoveOnChipForDateRange = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, string | undefined>\n>(\n startDateFieldName: TField,\n endDateFieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields }) => {\n setFormModelFields({\n [startDateFieldName]: undefined,\n [endDateFieldName]: undefined,\n } as unknown as Partial<TFormModel>);\n };\n};\n","import { PickByValue } from \"@stenajs-webui/core\";\nimport { DateRangeCalendarSectionProps } from \"./components/DateRangeCalendarSection\";\n\nexport const createDateRangeSectionProps = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, string | undefined>,\n TSectionKey extends string\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n DateRangeCalendarSectionProps<TFormModel, TSectionKey>,\n \"value\" | \"onValueChange\"\n> => ({\n value: {\n startDate: formModel[startDateFieldName] as unknown as string | undefined,\n endDate: formModel[endDateFieldName] as unknown as string | undefined,\n },\n onValueChange: (value, { dispatch, actions }) => {\n const fields: Partial<TFormModel> = {\n [startDateFieldName]: value.startDate,\n [endDateFieldName]: value.endDate,\n } as any;\n dispatch(actions.setFormModelFields(fields));\n },\n});\n","import {\n DateRange,\n DateRangeCalendar,\n DateRangeCalendarProps,\n DateRangeFocusedInput,\n dateRangeToStrings,\n DateStringRange,\n stringsToDateRange,\n} from \"@stenajs-webui/calendar\";\nimport * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { Box } from \"@stenajs-webui/core\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport {\n SearchFilterActions,\n SearchFilterDispatch,\n} from \"../../../redux/SearchFilterRedux\";\nimport { useSearchFilterDispatch } from \"../../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../../context/SearchFilterActionsContext\";\n\nexport interface DateRangeCalendarSectionProps<\n TFormModel,\n TSectionKey extends string\n> extends Omit<\n SearchFilterSectionProps<TSectionKey>,\n \"label\" | \"onRetry\" | \"error\" | \"loading\"\n >,\n Omit<\n DateRangeCalendarProps<{}>,\n \"value\" | \"onValueChange\" | \"focusedInput\" | \"setFocusedInput\"\n > {\n value: DateStringRange;\n onValueChange: (\n value: DateStringRange,\n options: SetDateOptions<TFormModel, TSectionKey>\n ) => void;\n label?: string;\n}\n\nexport interface SetDateOptions<TFormModel, TSectionKey extends string> {\n dispatch: SearchFilterDispatch<TFormModel>;\n actions: SearchFilterActions<TFormModel, TSectionKey>;\n}\n\nexport const DateRangeCalendarSection = <\n TFormModel,\n TSectionKey extends string\n>({\n value,\n onValueChange,\n sectionId,\n contentRight,\n disableContentPadding,\n label,\n leftIcon,\n ...dateRangeCalendarProps\n}: DateRangeCalendarSectionProps<TFormModel, TSectionKey>) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions<TFormModel, TSectionKey>();\n\n const options = useMemo<SetDateOptions<TFormModel, TSectionKey>>(\n () => ({ dispatch, actions }),\n [actions, dispatch]\n );\n const [focusedInput, setFocusedInput] =\n useState<DateRangeFocusedInput>(\"startDate\");\n\n const dateRangeValue = useMemo(() => stringsToDateRange(value), [value]);\n\n const onValueChangeHandler = useCallback(\n (value: DateRange) => {\n onValueChange(dateRangeToStrings(value), options);\n },\n [onValueChange, options]\n );\n\n return (\n <SearchFilterSection\n label={label}\n leftIcon={leftIcon}\n sectionId={sectionId}\n contentRight={contentRight}\n disableContentPadding={disableContentPadding}\n >\n <Box flex={1} alignItems={\"center\"}>\n <Box background={\"white\"} indent>\n <DateRangeCalendar\n setFocusedInput={setFocusedInput}\n focusedInput={focusedInput}\n value={dateRangeValue}\n onValueChange={onValueChangeHandler}\n {...dateRangeCalendarProps}\n />\n </Box>\n </Box>\n </SearchFilterSection>\n );\n};\n"],"names":["SearchFilterPanelHeader","onRequestClose","header","contentRight","Spacing","jsxs","Row","jsx","Space","Heading","FlatButton","stenaTimes","SearchFilterStateContext","createContext","useSearchFilterState","c","useContext","SearchFilterDispatchContext","useSearchFilterDispatch","SearchFilterActionsContext","useSearchFilterActions","SearchFilterDrawer","children","headerContentRight","drawerProps","open","dispatch","actions","closeDrawer","useCallback","Drawer","Column","cssColor","Box","SearchFilterButton","label","leftIcon","stenaSlidersMini","onClickButton","SecondaryButton","SearchFilterSection","sectionId","loading","error","onRetry","disableContentPadding","state","expanded","_a","onClickLabel","activeLabel","formatColumnIdToHeaderCellLabel","Fragment","MenuButton","Spinner","Banner","columnId","upperFirst","lowerCase","StickyFooter","boxProps","SearchFilterModelContext","useSearchFilterModel","SearchFilterContext","createSearchFilterInitialState","initialFormModel","createSearchFilterReducer","reducerId","initialState","combineReducers","reducerIdGate","getReducerIdFor","createValueByIdReducer","createEntityReducer","createSearchFilterActions","reducerIdGateAction","createEntityActions","fields","section","createValueByIdActions","reducerIdSuffix","useLocalSearchFilterState","reducer","useState","useReducer","SearchFilterLocalStateContext","ChipSpacer","styled","SearchFilterChips","disableClearAllButton","onClickClearAll","EmptyChip","Chip","SearchFilterChip","value","onClickRemove","setFormModelFields","onClickRemoveHandler","SectionChips","chips","emptyChipLabel","onClickRemoveOnChip","createChipsPropsForBooleanRecord","formModel","fieldName","options","createChipsForBooleanRecord","createOnClickRemoveOnChipForBooleanRecord","booleanRecord","truthyKeysAsList","key","option","o","newRecord","SimpleCheckboxListSection","onValueChange","sectionProps","d","CheckboxWithLabel","v","ChipMultiSelectSection","noneSelectedLabel","text","setText","listValue","useMemo","filteredOptions","p","onValueChangeInternal","createBooleanRecordFromValue","ChipMultiSelect","sum","item","createChipsPropsForDateRange","startDateFieldName","endDateFieldName","createChipsForDateRange","createOnClickRemoveOnChipForDateRange","startDate","endDate","createDateRangeSectionProps","DateRangeCalendarSection","dateRangeCalendarProps","focusedInput","setFocusedInput","dateRangeValue","stringsToDateRange","onValueChangeHandler","dateRangeToStrings","DateRangeCalendar"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/features/search-filter/components/SearchFilterPanelHeader.tsx","../src/features/search-filter/context/SearchFilterStateContext.ts","../src/features/search-filter/context/SearchFilterDispatchContext.ts","../src/features/search-filter/context/SearchFilterActionsContext.ts","../src/features/search-filter/components/SearchFilterDrawer.tsx","../src/features/search-filter/components/SearchFilterButton.tsx","../src/features/search-filter/components/SearchFilterSection.tsx","../src/features/search-filter/components/StickyFooter.tsx","../src/features/search-filter/context/SearchFilterModelContext.ts","../src/features/search-filter/components/context/SearchFilterContext.tsx","../src/features/search-filter/redux/SearchFilterRedux.ts","../src/features/search-filter/hooks/UseLocalSearchFilterState.ts","../src/features/search-filter/components/context/SearchFilterLocalStateContext.tsx","../src/features/search-filter/features/chips/ChipSpacer.tsx","../src/features/search-filter/features/chips/SearchFilterChips.tsx","../src/features/search-filter/features/chips/EmptyChip.tsx","../src/features/search-filter/features/chips/SearchFilterChip.tsx","../src/features/search-filter/features/chips/SectionChips.tsx","../src/features/search-filter/section-factories/boolean-record/BooleanRecordChips.ts","../src/features/search-filter/section-factories/boolean-record/components/SimpleCheckboxListSection.tsx","../src/features/search-filter/section-factories/boolean-record/components/ChipMultiSelectSection.tsx","../src/features/search-filter/section-factories/date-range/DateRangeChips.ts","../src/features/search-filter/section-factories/date-range/DateRangePropsFactory.ts","../src/features/search-filter/section-factories/date-range/components/DateRangeCalendarSection.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { ReactNode } from \"react\";\nimport { FlatButton, stenaTimes } from \"@stenajs-webui/elements\";\nimport { Heading, Row, Space, Spacing } from \"@stenajs-webui/core\";\nimport { cssColor } from \"@stenajs-webui/theme\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n header?: string;\n contentRight?: ReactNode;\n}\n\nexport const SearchFilterPanelHeader: React.FC<\n SearchFilterPanelHeaderProps\n> = ({ onRequestClose, header = \"Filter\", contentRight }) => {\n return (\n <Spacing\n position={\"sticky\"}\n top={0}\n background={cssColor(\"--lhds-color-ui-50\")}\n zIndex={100}\n >\n <Row\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n height={\"48px\"}\n >\n <Row>\n <Space num={3} />\n <Heading variant={\"h4\"}>{header}</Heading>\n </Row>\n <Row gap={1}>\n {contentRight}\n <FlatButton\n leftIcon={stenaTimes}\n onClick={onRequestClose}\n variant={\"danger\"}\n />\n <Space num={0.5} />\n </Row>\n </Row>\n </Spacing>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterState } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterStateContext = createContext<\n SearchFilterState<unknown>\n>(null as unknown as SearchFilterState<unknown>);\n\nexport const useSearchFilterState = <\n TFormModel\n>(): SearchFilterState<TFormModel> => {\n const c = useContext(SearchFilterStateContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as SearchFilterState<TFormModel>;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterDispatch } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterDispatchContext = createContext<\n SearchFilterDispatch<unknown>\n>(null as unknown as SearchFilterDispatch<unknown>);\n\nexport const useSearchFilterDispatch = () => {\n const c = useContext(SearchFilterDispatchContext);\n if (!c) {\n throw new Error(\"Missing search filter dispatch context.\");\n }\n return c;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterActions } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterActionsContext = createContext<\n SearchFilterActions<unknown, any>\n>(null as unknown as SearchFilterActions<unknown, any>);\n\nexport const useSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>() => {\n const c = useContext(SearchFilterActionsContext);\n if (!c) {\n throw new Error(\"Missing search filter actions context.\");\n }\n return c as SearchFilterActions<TFormModel, TSectionKey>;\n};\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Drawer, DrawerProps } from \"@stenajs-webui/modal\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Box, Column } from \"@stenajs-webui/core\";\nimport { SearchFilterPanelHeader } from \"./SearchFilterPanelHeader\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\ninterface SearchFilterDrawerProps\n extends Omit<DrawerProps, \"isOpen\" | \"onRequestClose\"> {\n header?: string;\n headerContentRight?: ReactNode;\n}\n\nexport const SearchFilterDrawer: React.FC<SearchFilterDrawerProps> = ({\n children,\n header,\n headerContentRight,\n ...drawerProps\n}) => {\n const {\n settings: { open },\n } = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const closeDrawer = useCallback(() => {\n dispatch(actions.closeFilters());\n }, [actions, dispatch]);\n\n return (\n <Drawer\n floating\n isOpen={open}\n onRequestClose={closeDrawer}\n {...drawerProps}\n >\n <Column\n height={\"100%\"}\n borderRadius={\"var(--swui-border-radius)\"}\n background={cssColor(\"--lhds-color-ui-50\")}\n >\n <SearchFilterPanelHeader\n onRequestClose={closeDrawer}\n header={header}\n contentRight={headerContentRight}\n />\n <Box spacing={1} indent={1} gap={1}>\n {children}\n </Box>\n </Column>\n </Drawer>\n );\n};\n","import { SecondaryButton, stenaSlidersMini } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\ninterface SearchFilterDrawerButtonProps {\n label?: string;\n leftIcon?: IconDefinition;\n}\n\nexport const SearchFilterButton: React.FC<SearchFilterDrawerButtonProps> = ({\n label = \"Filters\",\n leftIcon = stenaSlidersMini,\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickButton = useCallback(() => {\n dispatch(actions.openFilters());\n }, [actions, dispatch]);\n\n return (\n <SecondaryButton\n label={label}\n leftIcon={leftIcon}\n onClick={onClickButton}\n />\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren, useCallback } from \"react\";\nimport { Row, Space } from \"@stenajs-webui/core\";\nimport { lowerCase, upperFirst } from \"lodash\";\nimport {\n Banner,\n FlatButton,\n MenuButton,\n Spinner,\n} from \"@stenajs-webui/elements\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\nexport interface SearchFilterSectionProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label?: string;\n leftIcon?: IconDefinition;\n contentRight?: React.ReactNode;\n disableContentPadding?: boolean;\n loading?: boolean;\n error?: string;\n onRetry?: () => void;\n}\n\nexport const SearchFilterSection = function SearchFilterSection<\n TSectionKey extends string\n>({\n sectionId,\n label,\n loading,\n error,\n onRetry,\n disableContentPadding,\n children,\n leftIcon,\n contentRight,\n}: PropsWithChildren<SearchFilterSectionProps<TSectionKey>>) {\n const state = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const expanded = state.expandedSections.values[sectionId] ?? false;\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.setSectionExpanded(sectionId, !expanded));\n }, [actions, dispatch, expanded, sectionId]);\n\n const activeLabel = label ?? formatColumnIdToHeaderCellLabel(sectionId);\n\n return (\n <>\n <MenuButton\n label={activeLabel}\n leftIcon={leftIcon}\n expandable\n expanded={expanded}\n selected={expanded}\n onClick={onClickLabel}\n right={contentRight}\n >\n {loading ? (\n <Row spacing justifyContent={\"center\"} flex={1}>\n <Spinner size={\"small\"} />\n </Row>\n ) : error ? (\n <Banner\n variant={\"error\"}\n text={error}\n contentRight={\n onRetry ? <FlatButton label={\"Retry\"} onClick={onRetry} /> : null\n }\n />\n ) : disableContentPadding ? (\n children\n ) : (\n children\n )}\n </MenuButton>\n {expanded && <Space />}\n </>\n );\n};\n\nexport const formatColumnIdToHeaderCellLabel = (columnId: string): string =>\n upperFirst(lowerCase(columnId));\n","import { BoxProps, Column } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { ReactNode } from \"react\";\n\nexport interface StickySearchButtonProps extends Pick<BoxProps, \"gap\"> {\n children?: ReactNode;\n}\n\nexport const StickyFooter: React.FC<StickySearchButtonProps> = ({\n children,\n ...boxProps\n}) => {\n return (\n <Column\n style={{ marginTop: \"auto\" }}\n justifyContent={\"center\"}\n spacing={2}\n indent\n shadow={\"popover\"}\n zIndex={1}\n {...boxProps}\n >\n {children}\n </Column>\n );\n};\n","import { createContext, useContext } from \"react\";\n\nexport const SearchFilterModelContext = createContext<unknown>(null as unknown);\n\nexport const useSearchFilterModel = <TFormModel>(): TFormModel => {\n const c = useContext(SearchFilterModelContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as TFormModel;\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport {\n SearchFilterActions,\n SearchFilterDispatch,\n SearchFilterState,\n} from \"../../redux/SearchFilterRedux\";\nimport { SearchFilterDispatchContext } from \"../../context/SearchFilterDispatchContext\";\nimport { SearchFilterActionsContext } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterStateContext } from \"../../context/SearchFilterStateContext\";\nimport { SearchFilterModelContext } from \"../../context/SearchFilterModelContext\";\n\ninterface SearchFilterScopeProps<TFormModel, TSectionKey extends string> {\n state: SearchFilterState<TFormModel>;\n dispatch: SearchFilterDispatch<TFormModel>;\n actions: SearchFilterActions<TFormModel, TSectionKey>;\n}\n\nexport const SearchFilterContext = function SearchFilterScope<\n TFormModel,\n TSectionKey extends string\n>({\n state,\n dispatch,\n actions,\n children,\n}: PropsWithChildren<SearchFilterScopeProps<TFormModel, TSectionKey>>) {\n return (\n <SearchFilterDispatchContext.Provider\n value={dispatch as SearchFilterDispatch<unknown>}\n >\n <SearchFilterActionsContext.Provider value={actions}>\n <SearchFilterStateContext.Provider value={state}>\n <SearchFilterModelContext.Provider value={state.formModel}>\n {children}\n </SearchFilterModelContext.Provider>\n </SearchFilterStateContext.Provider>\n </SearchFilterActionsContext.Provider>\n </SearchFilterDispatchContext.Provider>\n );\n};\n","import { combineReducers } from \"redux\";\nimport {\n createEntityActions,\n createEntityReducer,\n createValueByIdActions,\n createValueByIdReducer,\n EntityAction,\n EntityState,\n reducerIdGate,\n reducerIdGateAction,\n ReducerIdGateAction,\n ValueByIdAction,\n ValueByIdState,\n} from \"@stenajs-webui/redux\";\nimport { Dispatch } from \"react\";\n\nexport interface SearchFilterSettings {\n open: boolean;\n}\n\nexport type SearchFilterDispatch<TFormModel> = Dispatch<\n SearchFilterAction<TFormModel>\n>;\n\nexport interface SearchFilterState<TFormModel> {\n expandedSections: ValueByIdState<boolean>;\n formModel: EntityState<TFormModel>;\n settings: EntityState<SearchFilterSettings>;\n}\n\nexport type SearchFilterAction<TFormModel> =\n | ReducerIdGateAction<ValueByIdAction<boolean>>\n | ReducerIdGateAction<EntityAction<TFormModel>>\n | ReducerIdGateAction<EntityAction<SearchFilterSettings>>;\n\nexport const createSearchFilterInitialState = <TFormModel>(\n initialFormModel: TFormModel\n): SearchFilterState<TFormModel> => ({\n settings: {\n open: false,\n },\n formModel: initialFormModel,\n expandedSections: { values: {} },\n});\n\nexport const createSearchFilterReducer = <TFormModel>(\n reducerId: string,\n initialState: SearchFilterState<TFormModel>\n) =>\n combineReducers({\n expandedSections: reducerIdGate(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdReducer<boolean>(initialState.expandedSections)\n ),\n formModel: reducerIdGate(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityReducer<TFormModel>(initialState.formModel)\n ),\n settings: reducerIdGate(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityReducer<SearchFilterSettings>(initialState.settings)\n ),\n });\n\nexport interface SearchFilterActions<TFormModel, TSectionKey extends string> {\n openFilters: () => SearchFilterAction<TFormModel>;\n closeFilters: () => SearchFilterAction<TFormModel>;\n setFormModelFields: (\n fields: Partial<TFormModel>\n ) => SearchFilterAction<TFormModel>;\n clearFormModel: () => SearchFilterAction<TFormModel>;\n expandSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n collapseSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n setSectionExpanded: (\n section: TSectionKey,\n expanded: boolean\n ) => SearchFilterAction<TFormModel>;\n clearExpandedSections: () => SearchFilterAction<TFormModel>;\n}\n\nexport const createSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>(\n reducerId: string,\n initialFormModel: TFormModel\n): SearchFilterActions<TFormModel, TSectionKey> => ({\n openFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: true,\n })\n ),\n closeFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: false,\n })\n ),\n setFormModelFields: (fields: Partial<TFormModel>) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntityFields(fields)\n ),\n clearFormModel: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntity(initialFormModel)\n ),\n expandSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, true)\n ),\n collapseSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, false)\n ),\n setSectionExpanded: (section: TSectionKey, expanded: boolean) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, expanded)\n ),\n clearExpandedSections: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().clearAllValues()\n ),\n});\n\nexport const getReducerIdFor = (\n reducerId: string,\n reducerIdSuffix: keyof SearchFilterState<unknown>\n): string => `${reducerId}.${reducerIdSuffix}`;\n","import {\n createSearchFilterActions,\n createSearchFilterReducer,\n SearchFilterState,\n} from \"../redux/SearchFilterRedux\";\nimport { useReducer, useState } from \"react\";\n\nexport const useLocalSearchFilterState = <\n TFormModel,\n TSectionKey extends string\n>(\n initialState: SearchFilterState<TFormModel>\n) => {\n const [reducer] = useState(() =>\n createSearchFilterReducer<TFormModel>(\"local\", initialState)\n );\n\n const [actions] = useState(() =>\n createSearchFilterActions<TFormModel, TSectionKey>(\n \"local\",\n initialState.formModel\n )\n );\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return {\n actions,\n state,\n dispatch,\n };\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport { useLocalSearchFilterState } from \"../../hooks/UseLocalSearchFilterState\";\nimport { SearchFilterContext } from \"./SearchFilterContext\";\nimport { createSearchFilterInitialState } from \"../../redux/SearchFilterRedux\";\n\ninterface SearchFilterLocalScopeProps<TFormModel> {\n initialFormModel: TFormModel;\n}\n\nexport const SearchFilterLocalStateContext = function SearchFilterLocalScope<\n TFormModel\n>({\n initialFormModel,\n children,\n}: PropsWithChildren<SearchFilterLocalScopeProps<TFormModel>>) {\n const { state, actions, dispatch } = useLocalSearchFilterState(\n createSearchFilterInitialState(initialFormModel)\n );\n\n return (\n <SearchFilterContext state={state} actions={actions} dispatch={dispatch}>\n {children}\n </SearchFilterContext>\n );\n};\n","import styled from \"@emotion/styled\";\n\nexport const ChipSpacer = styled.div`\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n`;\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n children?: ReactNode;\n}\n\nexport const SearchFilterChips: React.FC<SearchFilterChipsProps> = ({\n children,\n disableClearAllButton = false,\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickClearAll = useCallback(\n () => dispatch(actions.clearFormModel()),\n [actions, dispatch]\n );\n\n return (\n <Row flexWrap={\"wrap\"}>\n {children}\n {!disableClearAllButton && (\n <ChipSpacer>\n <FlatButton\n size={\"small\"}\n label={\"Clear all\"}\n onClick={onClickClearAll}\n />\n </ChipSpacer>\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface EmptyChipProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label: string;\n}\n\nexport const EmptyChip = function EmptyChip<TSectionKey extends string>({\n label,\n sectionId,\n}: EmptyChipProps<TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip label={label} variant={\"secondary\"} onClick={onClickLabel} />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterSectionOnClickRemoveOnChip } from \"../../config/SearchFilterConfig\";\n\ninterface SearchFilterChipProps<TFormModel, TSectionKey> {\n sectionId: TSectionKey;\n label: string;\n value: string;\n onClickRemove?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SearchFilterChip = function SearchFilterChip<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n label,\n value,\n onClickRemove,\n}: SearchFilterChipProps<TFormModel, TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const setFormModelFields = useCallback(\n (fields: Partial<TFormModel>) =>\n dispatch(actions.setFormModelFields(fields)),\n [dispatch, actions]\n );\n\n const onClickRemoveHandler = useCallback(() => {\n onClickRemove?.({ value, setFormModelFields });\n }, [onClickRemove, setFormModelFields, value]);\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={onClickRemove ? onClickRemoveHandler : undefined}\n />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { EmptyChip } from \"./EmptyChip\";\nimport { SearchFilterChip } from \"./SearchFilterChip\";\n\nexport interface SectionChipsProps<TFormModel, TSectionKey extends string> {\n sectionId: TSectionKey;\n chips?: Array<SearchFilterSectionChipModel>;\n emptyChipLabel?: string;\n onClickRemoveOnChip?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SectionChips = function SectionChips<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n chips,\n emptyChipLabel,\n onClickRemoveOnChip,\n}: SectionChipsProps<TFormModel, TSectionKey>) {\n if (!chips?.length) {\n if (!emptyChipLabel) {\n return null;\n }\n return <EmptyChip sectionId={sectionId} label={emptyChipLabel} />;\n }\n\n return (\n <>\n {chips.map(({ label, value }) => (\n <SearchFilterChip\n key={value}\n label={label ?? sectionId}\n sectionId={sectionId}\n onClickRemove={onClickRemoveOnChip}\n value={value}\n />\n ))}\n </>\n );\n};\n","import { BooleanRecord, BooleanRecordOptions } from \"./BooleanRecordTypes\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue, truthyKeysAsList } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForBooleanRecord = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField,\n options?: BooleanRecordOptions\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForBooleanRecord(\n formModel[fieldName] as unknown as BooleanRecord,\n options\n ),\n onClickRemoveOnChip: createOnClickRemoveOnChipForBooleanRecord(\n formModel,\n fieldName\n ),\n});\n\nexport const createChipsForBooleanRecord = (\n booleanRecord: BooleanRecord,\n options?: BooleanRecordOptions\n): Array<SearchFilterSectionChipModel> =>\n truthyKeysAsList(booleanRecord).map((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n });\n\nexport const createOnClickRemoveOnChipForBooleanRecord = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields, value }) => {\n const newRecord = { ...formModel[fieldName] };\n newRecord[value] = false;\n setFormModelFields({\n [fieldName]: newRecord,\n } as unknown as Partial<TFormModel>);\n };\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { Column, Row } from \"@stenajs-webui/core\";\nimport {\n CheckboxWithLabel,\n ValueAndOnValueChangeProps,\n} from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\n\nexport interface SimpleCheckboxSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n options?: BooleanRecordOptions;\n}\n\nexport const SimpleCheckboxListSection = <TSectionKey extends string>({\n options,\n value,\n onValueChange,\n ...sectionProps\n}: SimpleCheckboxSectionProps<TSectionKey>): React.ReactElement => (\n <SearchFilterSection disableContentPadding {...sectionProps}>\n <Column maxHeight={\"400px\"} overflowY={\"auto\"} flex={1} gap={1} spacing={1}>\n {options?.map((d) => (\n <Row key={d.value} alignItems={\"center\"}>\n <CheckboxWithLabel\n tabIndex={-1}\n value={value?.[d.value]}\n label={d.label}\n onValueChange={(v) =>\n onValueChange?.({\n ...value,\n [d.value]: v,\n })\n }\n />\n </Row>\n ))}\n </Column>\n </SearchFilterSection>\n);\n","import * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { ChipMultiSelect, ChipMultiSelectValue } from \"@stenajs-webui/select\";\nimport { truthyKeysAsList } from \"@stenajs-webui/core\";\n\ninterface ChipMultiSelectSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n noneSelectedLabel?: string;\n options?: BooleanRecordOptions;\n}\n\nexport const ChipMultiSelectSection = <TSectionKey extends string>({\n options,\n value,\n noneSelectedLabel,\n onValueChange,\n ...sectionProps\n}: ChipMultiSelectSectionProps<TSectionKey>): React.ReactElement => {\n const [text, setText] = useState<string>(\"\");\n\n const listValue = useMemo<Array<ChipMultiSelectValue>>(\n () =>\n value\n ? truthyKeysAsList(value).map<ChipMultiSelectValue>((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n })\n : [],\n [options, value]\n );\n\n const filteredOptions = useMemo(() => {\n return options?.filter(\n (p) =>\n p.value.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1 ||\n p.label.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1\n );\n }, [options, text]);\n\n const onValueChangeInternal = useCallback(\n (value: Array<ChipMultiSelectValue>) => {\n onValueChange?.(createBooleanRecordFromValue(value));\n },\n [onValueChange]\n );\n\n return (\n <SearchFilterSection {...sectionProps}>\n <ChipMultiSelect\n options={filteredOptions}\n value={listValue}\n onValueChange={onValueChangeInternal}\n inputValue={text}\n noneSelectedLabel={noneSelectedLabel}\n onInputChange={setText}\n closeMenuOnSelect={false}\n />\n </SearchFilterSection>\n );\n};\n\nconst createBooleanRecordFromValue = (\n value: Array<ChipMultiSelectValue>\n): BooleanRecord => {\n return value.reduce<BooleanRecord>((sum, item) => {\n sum[item.value] = true;\n return sum;\n }, {});\n};\n","import {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForDateRange = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, string | undefined>\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForDateRange(\n formModel[startDateFieldName] as unknown as string | undefined,\n formModel[endDateFieldName] as unknown as string | undefined\n ),\n onClickRemoveOnChip: createOnClickRemoveOnChipForDateRange(\n startDateFieldName,\n endDateFieldName\n ),\n});\n\nexport const createChipsForDateRange = (\n startDate: string | undefined,\n endDate: string | undefined\n): Array<SearchFilterSectionChipModel> => {\n if (!startDate && !endDate) {\n return [];\n }\n return [\n { value: \"dateRange\", label: `${startDate ?? \"\"} - ${endDate ?? \"\"}` },\n ];\n};\n\nexport const createOnClickRemoveOnChipForDateRange = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, string | undefined>\n>(\n startDateFieldName: TField,\n endDateFieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields }) => {\n setFormModelFields({\n [startDateFieldName]: undefined,\n [endDateFieldName]: undefined,\n } as unknown as Partial<TFormModel>);\n };\n};\n","import { PickByValue } from \"@stenajs-webui/core\";\nimport { DateRangeCalendarSectionProps } from \"./components/DateRangeCalendarSection\";\n\nexport const createDateRangeSectionProps = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, string | undefined>,\n TSectionKey extends string\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n DateRangeCalendarSectionProps<TFormModel, TSectionKey>,\n \"value\" | \"onValueChange\"\n> => ({\n value: {\n startDate: formModel[startDateFieldName] as unknown as string | undefined,\n endDate: formModel[endDateFieldName] as unknown as string | undefined,\n },\n onValueChange: (value, { dispatch, actions }) => {\n const fields: Partial<TFormModel> = {\n [startDateFieldName]: value.startDate,\n [endDateFieldName]: value.endDate,\n } as any;\n dispatch(actions.setFormModelFields(fields));\n },\n});\n","import {\n DateRange,\n DateRangeCalendar,\n DateRangeCalendarProps,\n DateRangeFocusedInput,\n dateRangeToStrings,\n DateStringRange,\n stringsToDateRange,\n} from \"@stenajs-webui/calendar\";\nimport * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { Box } from \"@stenajs-webui/core\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport {\n SearchFilterActions,\n SearchFilterDispatch,\n} from \"../../../redux/SearchFilterRedux\";\nimport { useSearchFilterDispatch } from \"../../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../../context/SearchFilterActionsContext\";\n\nexport interface DateRangeCalendarSectionProps<\n TFormModel,\n TSectionKey extends string\n> extends Omit<\n SearchFilterSectionProps<TSectionKey>,\n \"label\" | \"onRetry\" | \"error\" | \"loading\"\n >,\n Omit<\n DateRangeCalendarProps<{}>,\n \"value\" | \"onValueChange\" | \"focusedInput\" | \"setFocusedInput\"\n > {\n value: DateStringRange;\n onValueChange: (\n value: DateStringRange,\n options: SetDateOptions<TFormModel, TSectionKey>\n ) => void;\n label?: string;\n}\n\nexport interface SetDateOptions<TFormModel, TSectionKey extends string> {\n dispatch: SearchFilterDispatch<TFormModel>;\n actions: SearchFilterActions<TFormModel, TSectionKey>;\n}\n\nexport const DateRangeCalendarSection = <\n TFormModel,\n TSectionKey extends string\n>({\n value,\n onValueChange,\n sectionId,\n contentRight,\n disableContentPadding,\n label,\n leftIcon,\n ...dateRangeCalendarProps\n}: DateRangeCalendarSectionProps<TFormModel, TSectionKey>) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions<TFormModel, TSectionKey>();\n\n const options = useMemo<SetDateOptions<TFormModel, TSectionKey>>(\n () => ({ dispatch, actions }),\n [actions, dispatch]\n );\n const [focusedInput, setFocusedInput] =\n useState<DateRangeFocusedInput>(\"startDate\");\n\n const dateRangeValue = useMemo(() => stringsToDateRange(value), [value]);\n\n const onValueChangeHandler = useCallback(\n (value: DateRange) => {\n onValueChange(dateRangeToStrings(value), options);\n },\n [onValueChange, options]\n );\n\n return (\n <SearchFilterSection\n label={label}\n leftIcon={leftIcon}\n sectionId={sectionId}\n contentRight={contentRight}\n disableContentPadding={disableContentPadding}\n >\n <Box flex={1} alignItems={\"center\"}>\n <Box background={\"white\"} indent>\n <DateRangeCalendar\n setFocusedInput={setFocusedInput}\n focusedInput={focusedInput}\n value={dateRangeValue}\n onValueChange={onValueChangeHandler}\n {...dateRangeCalendarProps}\n />\n </Box>\n </Box>\n </SearchFilterSection>\n );\n};\n"],"names":["SearchFilterPanelHeader","onRequestClose","header","contentRight","jsx","Spacing","cssColor","jsxs","Row","Space","Heading","FlatButton","stenaTimes","SearchFilterStateContext","createContext","useSearchFilterState","c","useContext","SearchFilterDispatchContext","useSearchFilterDispatch","SearchFilterActionsContext","useSearchFilterActions","SearchFilterDrawer","children","headerContentRight","drawerProps","open","dispatch","actions","closeDrawer","useCallback","Drawer","Column","Box","SearchFilterButton","label","leftIcon","stenaSlidersMini","onClickButton","SecondaryButton","SearchFilterSection","sectionId","loading","error","onRetry","disableContentPadding","state","expanded","_a","onClickLabel","activeLabel","formatColumnIdToHeaderCellLabel","Fragment","MenuButton","Spinner","Banner","columnId","upperFirst","lowerCase","StickyFooter","boxProps","SearchFilterModelContext","useSearchFilterModel","SearchFilterContext","createSearchFilterInitialState","initialFormModel","createSearchFilterReducer","reducerId","initialState","combineReducers","reducerIdGate","getReducerIdFor","createValueByIdReducer","createEntityReducer","createSearchFilterActions","reducerIdGateAction","createEntityActions","fields","section","createValueByIdActions","reducerIdSuffix","useLocalSearchFilterState","reducer","useState","useReducer","SearchFilterLocalStateContext","ChipSpacer","styled","SearchFilterChips","disableClearAllButton","onClickClearAll","EmptyChip","Chip","SearchFilterChip","value","onClickRemove","setFormModelFields","onClickRemoveHandler","SectionChips","chips","emptyChipLabel","onClickRemoveOnChip","createChipsPropsForBooleanRecord","formModel","fieldName","options","createChipsForBooleanRecord","createOnClickRemoveOnChipForBooleanRecord","booleanRecord","truthyKeysAsList","key","option","o","newRecord","SimpleCheckboxListSection","onValueChange","sectionProps","d","CheckboxWithLabel","v","ChipMultiSelectSection","noneSelectedLabel","text","setText","listValue","useMemo","filteredOptions","p","onValueChangeInternal","createBooleanRecordFromValue","ChipMultiSelect","sum","item","createChipsPropsForDateRange","startDateFieldName","endDateFieldName","createChipsForDateRange","createOnClickRemoveOnChipForDateRange","startDate","endDate","createDateRangeSectionProps","DateRangeCalendarSection","dateRangeCalendarProps","focusedInput","setFocusedInput","dateRangeValue","stringsToDateRange","onValueChangeHandler","dateRangeToStrings","DateRangeCalendar"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  (function(){"use strict";try{var e=document.createElement("style");e.appendChild(document.createTextNode("")),document.head.appendChild(e)}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
2
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),a=require("react"),Y=require("@stenajs-webui/modal"),J=require("@stenajs-webui/theme"),u=require("@stenajs-webui/core"),S=require("@stenajs-webui/elements"),O=require("lodash"),Q=require("redux"),i=require("@stenajs-webui/redux"),U=require("@emotion/styled"),X=require("@stenajs-webui/forms"),Z=require("@stenajs-webui/select"),v=require("@stenajs-webui/calendar"),N=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},ee=N(U),q=({onRequestClose:e,header:t="Filter",contentRight:n})=>r.jsx(u.Spacing,{children:r.jsxs(u.Row,{justifyContent:"space-between",alignItems:"center",height:"48px",children:[r.jsxs(u.Row,{children:[r.jsx(u.Space,{num:3}),r.jsx(u.Heading,{variant:"h4",children:t})]}),r.jsxs(u.Row,{gap:1,children:[n,r.jsx(S.FlatButton,{leftIcon:S.stenaTimes,onClick:e,variant:"danger"}),r.jsx(u.Space,{num:.5})]})]})}),y=a.createContext(null),M=()=>{const e=a.useContext(y);if(!e)throw new Error("Missing search filter context, wrap components with SearchFilterContext component.");return e},k=a.createContext(null),g=()=>{const e=a.useContext(k);if(!e)throw new Error("Missing search filter dispatch context.");return e},A=a.createContext(null),m=()=>{const e=a.useContext(A);if(!e)throw new Error("Missing search filter actions context.");return e},te=({children:e,header:t,headerContentRight:n,...c})=>{const{settings:{open:s}}=M(),o=g(),l=m(),h=a.useCallback(()=>{o(l.closeFilters())},[l,o]);return r.jsx(Y.Drawer,{isOpen:s,onRequestClose:h,...c,children:r.jsxs(u.Column,{height:"100%",borderRadius:"var(--swui-border-radius)",background:J.cssColor("--lhds-color-ui-50"),children:[r.jsx(q,{onRequestClose:h,header:t,contentRight:n}),r.jsx(u.Box,{spacing:1,indent:1,gap:1,children:e})]})})},ne=({label:e="Filters",leftIcon:t=S.stenaSlidersMini})=>{const n=g(),c=m(),s=a.useCallback(()=>{n(c.openFilters())},[c,n]);return r.jsx(S.SecondaryButton,{label:e,leftIcon:t,onClick:s})},R=function({sectionId:t,label:n,loading:c,error:s,onRetry:o,disableContentPadding:l,children:h,leftIcon:C,contentRight:F}){var E;const d=M(),j=g(),f=m(),p=(E=d.expandedSections.values[t])!=null?E:!1,w=a.useCallback(()=>{j(f.setSectionExpanded(t,!p))},[f,j,p,t]),b=n!=null?n:I(t);return r.jsxs(r.Fragment,{children:[r.jsx(S.MenuButton,{label:b,leftIcon:C,expandable:!0,expanded:p,selected:p,onClick:w,right:F,children:c?r.jsx(u.Row,{spacing:!0,justifyContent:"center",flex:1,children:r.jsx(S.Spinner,{size:"small"})}):s?r.jsx(S.Banner,{variant:"error",text:s,contentRight:o?r.jsx(S.FlatButton,{label:"Retry",onClick:o}):null}):h}),p&&r.jsx(u.Space,{})]})},I=e=>O.upperFirst(O.lowerCase(e)),re=({children:e,...t})=>r.jsx(u.Column,{style:{marginTop:"auto"},justifyContent:"center",spacing:2,indent:!0,shadow:"popover",zIndex:1,...t,children:e}),B=a.createContext(null),ce=()=>{const e=a.useContext(B);if(!e)throw new Error("Missing search filter context, wrap components with SearchFilterContext component.");return e},P=function({state:t,dispatch:n,actions:c,children:s}){return r.jsx(k.Provider,{value:n,children:r.jsx(A.Provider,{value:c,children:r.jsx(y.Provider,{value:t,children:r.jsx(B.Provider,{value:t.formModel,children:s})})})})},D=e=>({settings:{open:!1},formModel:e,expandedSections:{values:{}}}),G=(e,t)=>Q.combineReducers({expandedSections:i.reducerIdGate(x(e,"expandedSections"),i.createValueByIdReducer(t.expandedSections)),formModel:i.reducerIdGate(x(e,"formModel"),i.createEntityReducer(t.formModel)),settings:i.reducerIdGate(x(e,"settings"),i.createEntityReducer(t.settings))}),V=(e,t)=>({openFilters:()=>i.reducerIdGateAction(x(e,"settings"),i.createEntityActions().setEntityFields({open:!0})),closeFilters:()=>i.reducerIdGateAction(x(e,"settings"),i.createEntityActions().setEntityFields({open:!1})),setFormModelFields:n=>i.reducerIdGateAction(x(e,"formModel"),i.createEntityActions().setEntityFields(n)),clearFormModel:()=>i.reducerIdGateAction(x(e,"formModel"),i.createEntityActions().setEntity(t)),expandSection:n=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().setValue(n,!0)),collapseSection:n=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().setValue(n,!1)),setSectionExpanded:(n,c)=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().setValue(n,c)),clearExpandedSections:()=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().clearAllValues())}),x=(e,t)=>`${e}.${t}`,H=e=>{const[t]=a.useState(()=>G("local",e)),[n]=a.useState(()=>V("local",e.formModel)),[c,s]=a.useReducer(t,e);return{actions:n,state:c,dispatch:s}},se=function({initialFormModel:t,children:n}){const{state:c,actions:s,dispatch:o}=H(D(t));return r.jsx(P,{state:c,actions:s,dispatch:o,children:n})},L=ee.default.div`
2
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),a=require("react"),J=require("@stenajs-webui/modal"),O=require("@stenajs-webui/theme"),u=require("@stenajs-webui/core"),S=require("@stenajs-webui/elements"),I=require("lodash"),Q=require("redux"),i=require("@stenajs-webui/redux"),U=require("@emotion/styled"),X=require("@stenajs-webui/forms"),Z=require("@stenajs-webui/select"),v=require("@stenajs-webui/calendar"),N=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},ee=N(U),q=({onRequestClose:e,header:t="Filter",contentRight:n})=>r.jsx(u.Spacing,{position:"sticky",top:0,background:O.cssColor("--lhds-color-ui-50"),zIndex:100,children:r.jsxs(u.Row,{justifyContent:"space-between",alignItems:"center",height:"48px",children:[r.jsxs(u.Row,{children:[r.jsx(u.Space,{num:3}),r.jsx(u.Heading,{variant:"h4",children:t})]}),r.jsxs(u.Row,{gap:1,children:[n,r.jsx(S.FlatButton,{leftIcon:S.stenaTimes,onClick:e,variant:"danger"}),r.jsx(u.Space,{num:.5})]})]})}),y=a.createContext(null),M=()=>{const e=a.useContext(y);if(!e)throw new Error("Missing search filter context, wrap components with SearchFilterContext component.");return e},k=a.createContext(null),g=()=>{const e=a.useContext(k);if(!e)throw new Error("Missing search filter dispatch context.");return e},A=a.createContext(null),m=()=>{const e=a.useContext(A);if(!e)throw new Error("Missing search filter actions context.");return e},te=({children:e,header:t,headerContentRight:n,...c})=>{const{settings:{open:s}}=M(),o=g(),l=m(),h=a.useCallback(()=>{o(l.closeFilters())},[l,o]);return r.jsx(J.Drawer,{floating:!0,isOpen:s,onRequestClose:h,...c,children:r.jsxs(u.Column,{height:"100%",borderRadius:"var(--swui-border-radius)",background:O.cssColor("--lhds-color-ui-50"),children:[r.jsx(q,{onRequestClose:h,header:t,contentRight:n}),r.jsx(u.Box,{spacing:1,indent:1,gap:1,children:e})]})})},ne=({label:e="Filters",leftIcon:t=S.stenaSlidersMini})=>{const n=g(),c=m(),s=a.useCallback(()=>{n(c.openFilters())},[c,n]);return r.jsx(S.SecondaryButton,{label:e,leftIcon:t,onClick:s})},R=function({sectionId:t,label:n,loading:c,error:s,onRetry:o,disableContentPadding:l,children:h,leftIcon:C,contentRight:F}){var E;const d=M(),j=g(),f=m(),p=(E=d.expandedSections.values[t])!=null?E:!1,w=a.useCallback(()=>{j(f.setSectionExpanded(t,!p))},[f,j,p,t]),b=n!=null?n:P(t);return r.jsxs(r.Fragment,{children:[r.jsx(S.MenuButton,{label:b,leftIcon:C,expandable:!0,expanded:p,selected:p,onClick:w,right:F,children:c?r.jsx(u.Row,{spacing:!0,justifyContent:"center",flex:1,children:r.jsx(S.Spinner,{size:"small"})}):s?r.jsx(S.Banner,{variant:"error",text:s,contentRight:o?r.jsx(S.FlatButton,{label:"Retry",onClick:o}):null}):h}),p&&r.jsx(u.Space,{})]})},P=e=>I.upperFirst(I.lowerCase(e)),re=({children:e,...t})=>r.jsx(u.Column,{style:{marginTop:"auto"},justifyContent:"center",spacing:2,indent:!0,shadow:"popover",zIndex:1,...t,children:e}),B=a.createContext(null),ce=()=>{const e=a.useContext(B);if(!e)throw new Error("Missing search filter context, wrap components with SearchFilterContext component.");return e},D=function({state:t,dispatch:n,actions:c,children:s}){return r.jsx(k.Provider,{value:n,children:r.jsx(A.Provider,{value:c,children:r.jsx(y.Provider,{value:t,children:r.jsx(B.Provider,{value:t.formModel,children:s})})})})},G=e=>({settings:{open:!1},formModel:e,expandedSections:{values:{}}}),V=(e,t)=>Q.combineReducers({expandedSections:i.reducerIdGate(x(e,"expandedSections"),i.createValueByIdReducer(t.expandedSections)),formModel:i.reducerIdGate(x(e,"formModel"),i.createEntityReducer(t.formModel)),settings:i.reducerIdGate(x(e,"settings"),i.createEntityReducer(t.settings))}),H=(e,t)=>({openFilters:()=>i.reducerIdGateAction(x(e,"settings"),i.createEntityActions().setEntityFields({open:!0})),closeFilters:()=>i.reducerIdGateAction(x(e,"settings"),i.createEntityActions().setEntityFields({open:!1})),setFormModelFields:n=>i.reducerIdGateAction(x(e,"formModel"),i.createEntityActions().setEntityFields(n)),clearFormModel:()=>i.reducerIdGateAction(x(e,"formModel"),i.createEntityActions().setEntity(t)),expandSection:n=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().setValue(n,!0)),collapseSection:n=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().setValue(n,!1)),setSectionExpanded:(n,c)=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().setValue(n,c)),clearExpandedSections:()=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().clearAllValues())}),x=(e,t)=>`${e}.${t}`,T=e=>{const[t]=a.useState(()=>V("local",e)),[n]=a.useState(()=>H("local",e.formModel)),[c,s]=a.useReducer(t,e);return{actions:n,state:c,dispatch:s}},se=function({initialFormModel:t,children:n}){const{state:c,actions:s,dispatch:o}=T(G(t));return r.jsx(D,{state:c,actions:s,dispatch:o,children:n})},L=ee.default.div`
3
3
  padding: calc(var(--swui-metrics-spacing) / 2)
4
4
  calc(var(--swui-metrics-indent) / 2);
5
- `,oe=({children:e,disableClearAllButton:t=!1})=>{const n=g(),c=m(),s=a.useCallback(()=>n(c.clearFormModel()),[c,n]);return r.jsxs(u.Row,{flexWrap:"wrap",children:[e,!t&&r.jsx(L,{children:r.jsx(S.FlatButton,{size:"small",label:"Clear all",onClick:s})})]})},T=function({label:t,sectionId:n}){const c=g(),s=m(),o=a.useCallback(()=>{c(s.clearExpandedSections()),c(s.expandSection(n)),c(s.openFilters())},[s,c,n]);return r.jsx(L,{children:r.jsx(S.Chip,{label:t,variant:"secondary",onClick:o})})},_=function({sectionId:t,label:n,value:c,onClickRemove:s}){const o=g(),l=m(),h=a.useCallback(d=>o(l.setFormModelFields(d)),[o,l]),C=a.useCallback(()=>{s==null||s({value:c,setFormModelFields:h})},[s,h,c]),F=a.useCallback(()=>{o(l.clearExpandedSections()),o(l.expandSection(t)),o(l.openFilters())},[l,o,t]);return r.jsx(L,{children:r.jsx(S.Chip,{label:n!=null?n:t,onClick:F,onClickRemove:s?C:void 0})})},ae=function({sectionId:t,chips:n,emptyChipLabel:c,onClickRemoveOnChip:s}){return n!=null&&n.length?r.jsx(r.Fragment,{children:n.map(({label:o,value:l})=>r.jsx(_,{label:o!=null?o:t,sectionId:t,onClickRemove:s,value:l},l))}):c?r.jsx(T,{sectionId:t,label:c}):null},ie=(e,t,n)=>({chips:$(e[t],n),onClickRemoveOnChip:z(e,t)}),$=(e,t)=>u.truthyKeysAsList(e).map(n=>{var s;const c=t==null?void 0:t.find(o=>o.value===n);return{value:n,label:(s=c==null?void 0:c.label)!=null?s:n}}),z=(e,t)=>({setFormModelFields:n,value:c})=>{const s={...e[t]};s[c]=!1,n({[t]:s})},le=({options:e,value:t,onValueChange:n,...c})=>r.jsx(R,{disableContentPadding:!0,...c,children:r.jsx(u.Column,{maxHeight:"400px",overflowY:"auto",flex:1,gap:1,spacing:1,children:e==null?void 0:e.map(s=>r.jsx(u.Row,{alignItems:"center",children:r.jsx(X.CheckboxWithLabel,{tabIndex:-1,value:t==null?void 0:t[s.value],label:s.label,onValueChange:o=>n==null?void 0:n({...t,[s.value]:o})})},s.value))})}),ue=({options:e,value:t,noneSelectedLabel:n,onValueChange:c,...s})=>{const[o,l]=a.useState(""),h=a.useMemo(()=>t?u.truthyKeysAsList(t).map(d=>{var f;const j=e==null?void 0:e.find(p=>p.value===d);return{value:d,label:(f=j==null?void 0:j.label)!=null?f:d}}):[],[e,t]),C=a.useMemo(()=>e==null?void 0:e.filter(d=>d.value.toLocaleLowerCase().indexOf(o.toLocaleLowerCase())>-1||d.label.toLocaleLowerCase().indexOf(o.toLocaleLowerCase())>-1),[e,o]),F=a.useCallback(d=>{c==null||c(de(d))},[c]);return r.jsx(R,{...s,children:r.jsx(Z.ChipMultiSelect,{options:C,value:h,onValueChange:F,inputValue:o,noneSelectedLabel:n,onInputChange:l,closeMenuOnSelect:!1})})},de=e=>e.reduce((t,n)=>(t[n.value]=!0,t),{}),he=(e,t,n)=>({chips:K(e[t],e[n]),onClickRemoveOnChip:W(t,n)}),K=(e,t)=>!e&&!t?[]:[{value:"dateRange",label:`${e!=null?e:""} - ${t!=null?t:""}`}],W=(e,t)=>({setFormModelFields:n})=>{n({[e]:void 0,[t]:void 0})},xe=(e,t,n)=>({value:{startDate:e[t],endDate:e[n]},onValueChange:(c,{dispatch:s,actions:o})=>{const l={[t]:c.startDate,[n]:c.endDate};s(o.setFormModelFields(l))}}),Se=({value:e,onValueChange:t,sectionId:n,contentRight:c,disableContentPadding:s,label:o,leftIcon:l,...h})=>{const C=g(),F=m(),d=a.useMemo(()=>({dispatch:C,actions:F}),[F,C]),[j,f]=a.useState("startDate"),p=a.useMemo(()=>v.stringsToDateRange(e),[e]),w=a.useCallback(b=>{t(v.dateRangeToStrings(b),d)},[t,d]);return r.jsx(R,{label:o,leftIcon:l,sectionId:n,contentRight:c,disableContentPadding:s,children:r.jsx(u.Box,{flex:1,alignItems:"center",children:r.jsx(u.Box,{background:"white",indent:!0,children:r.jsx(v.DateRangeCalendar,{setFocusedInput:f,focusedInput:j,value:p,onValueChange:w,...h})})})})};exports.ChipMultiSelectSection=ue;exports.DateRangeCalendarSection=Se;exports.EmptyChip=T;exports.SearchFilterActionsContext=A;exports.SearchFilterButton=ne;exports.SearchFilterChip=_;exports.SearchFilterChips=oe;exports.SearchFilterContext=P;exports.SearchFilterDispatchContext=k;exports.SearchFilterDrawer=te;exports.SearchFilterLocalStateContext=se;exports.SearchFilterModelContext=B;exports.SearchFilterPanelHeader=q;exports.SearchFilterSection=R;exports.SearchFilterStateContext=y;exports.SectionChips=ae;exports.SimpleCheckboxListSection=le;exports.StickyFooter=re;exports.createChipsForBooleanRecord=$;exports.createChipsForDateRange=K;exports.createChipsPropsForBooleanRecord=ie;exports.createChipsPropsForDateRange=he;exports.createDateRangeSectionProps=xe;exports.createOnClickRemoveOnChipForBooleanRecord=z;exports.createOnClickRemoveOnChipForDateRange=W;exports.createSearchFilterActions=V;exports.createSearchFilterInitialState=D;exports.createSearchFilterReducer=G;exports.formatColumnIdToHeaderCellLabel=I;exports.getReducerIdFor=x;exports.useLocalSearchFilterState=H;exports.useSearchFilterActions=m;exports.useSearchFilterDispatch=g;exports.useSearchFilterModel=ce;exports.useSearchFilterState=M;
5
+ `,oe=({children:e,disableClearAllButton:t=!1})=>{const n=g(),c=m(),s=a.useCallback(()=>n(c.clearFormModel()),[c,n]);return r.jsxs(u.Row,{flexWrap:"wrap",children:[e,!t&&r.jsx(L,{children:r.jsx(S.FlatButton,{size:"small",label:"Clear all",onClick:s})})]})},_=function({label:t,sectionId:n}){const c=g(),s=m(),o=a.useCallback(()=>{c(s.clearExpandedSections()),c(s.expandSection(n)),c(s.openFilters())},[s,c,n]);return r.jsx(L,{children:r.jsx(S.Chip,{label:t,variant:"secondary",onClick:o})})},$=function({sectionId:t,label:n,value:c,onClickRemove:s}){const o=g(),l=m(),h=a.useCallback(d=>o(l.setFormModelFields(d)),[o,l]),C=a.useCallback(()=>{s==null||s({value:c,setFormModelFields:h})},[s,h,c]),F=a.useCallback(()=>{o(l.clearExpandedSections()),o(l.expandSection(t)),o(l.openFilters())},[l,o,t]);return r.jsx(L,{children:r.jsx(S.Chip,{label:n!=null?n:t,onClick:F,onClickRemove:s?C:void 0})})},ae=function({sectionId:t,chips:n,emptyChipLabel:c,onClickRemoveOnChip:s}){return n!=null&&n.length?r.jsx(r.Fragment,{children:n.map(({label:o,value:l})=>r.jsx($,{label:o!=null?o:t,sectionId:t,onClickRemove:s,value:l},l))}):c?r.jsx(_,{sectionId:t,label:c}):null},ie=(e,t,n)=>({chips:z(e[t],n),onClickRemoveOnChip:K(e,t)}),z=(e,t)=>u.truthyKeysAsList(e).map(n=>{var s;const c=t==null?void 0:t.find(o=>o.value===n);return{value:n,label:(s=c==null?void 0:c.label)!=null?s:n}}),K=(e,t)=>({setFormModelFields:n,value:c})=>{const s={...e[t]};s[c]=!1,n({[t]:s})},le=({options:e,value:t,onValueChange:n,...c})=>r.jsx(R,{disableContentPadding:!0,...c,children:r.jsx(u.Column,{maxHeight:"400px",overflowY:"auto",flex:1,gap:1,spacing:1,children:e==null?void 0:e.map(s=>r.jsx(u.Row,{alignItems:"center",children:r.jsx(X.CheckboxWithLabel,{tabIndex:-1,value:t==null?void 0:t[s.value],label:s.label,onValueChange:o=>n==null?void 0:n({...t,[s.value]:o})})},s.value))})}),ue=({options:e,value:t,noneSelectedLabel:n,onValueChange:c,...s})=>{const[o,l]=a.useState(""),h=a.useMemo(()=>t?u.truthyKeysAsList(t).map(d=>{var f;const j=e==null?void 0:e.find(p=>p.value===d);return{value:d,label:(f=j==null?void 0:j.label)!=null?f:d}}):[],[e,t]),C=a.useMemo(()=>e==null?void 0:e.filter(d=>d.value.toLocaleLowerCase().indexOf(o.toLocaleLowerCase())>-1||d.label.toLocaleLowerCase().indexOf(o.toLocaleLowerCase())>-1),[e,o]),F=a.useCallback(d=>{c==null||c(de(d))},[c]);return r.jsx(R,{...s,children:r.jsx(Z.ChipMultiSelect,{options:C,value:h,onValueChange:F,inputValue:o,noneSelectedLabel:n,onInputChange:l,closeMenuOnSelect:!1})})},de=e=>e.reduce((t,n)=>(t[n.value]=!0,t),{}),he=(e,t,n)=>({chips:W(e[t],e[n]),onClickRemoveOnChip:Y(t,n)}),W=(e,t)=>!e&&!t?[]:[{value:"dateRange",label:`${e!=null?e:""} - ${t!=null?t:""}`}],Y=(e,t)=>({setFormModelFields:n})=>{n({[e]:void 0,[t]:void 0})},xe=(e,t,n)=>({value:{startDate:e[t],endDate:e[n]},onValueChange:(c,{dispatch:s,actions:o})=>{const l={[t]:c.startDate,[n]:c.endDate};s(o.setFormModelFields(l))}}),Se=({value:e,onValueChange:t,sectionId:n,contentRight:c,disableContentPadding:s,label:o,leftIcon:l,...h})=>{const C=g(),F=m(),d=a.useMemo(()=>({dispatch:C,actions:F}),[F,C]),[j,f]=a.useState("startDate"),p=a.useMemo(()=>v.stringsToDateRange(e),[e]),w=a.useCallback(b=>{t(v.dateRangeToStrings(b),d)},[t,d]);return r.jsx(R,{label:o,leftIcon:l,sectionId:n,contentRight:c,disableContentPadding:s,children:r.jsx(u.Box,{flex:1,alignItems:"center",children:r.jsx(u.Box,{background:"white",indent:!0,children:r.jsx(v.DateRangeCalendar,{setFocusedInput:f,focusedInput:j,value:p,onValueChange:w,...h})})})})};exports.ChipMultiSelectSection=ue;exports.DateRangeCalendarSection=Se;exports.EmptyChip=_;exports.SearchFilterActionsContext=A;exports.SearchFilterButton=ne;exports.SearchFilterChip=$;exports.SearchFilterChips=oe;exports.SearchFilterContext=D;exports.SearchFilterDispatchContext=k;exports.SearchFilterDrawer=te;exports.SearchFilterLocalStateContext=se;exports.SearchFilterModelContext=B;exports.SearchFilterPanelHeader=q;exports.SearchFilterSection=R;exports.SearchFilterStateContext=y;exports.SectionChips=ae;exports.SimpleCheckboxListSection=le;exports.StickyFooter=re;exports.createChipsForBooleanRecord=z;exports.createChipsForDateRange=W;exports.createChipsPropsForBooleanRecord=ie;exports.createChipsPropsForDateRange=he;exports.createDateRangeSectionProps=xe;exports.createOnClickRemoveOnChipForBooleanRecord=K;exports.createOnClickRemoveOnChipForDateRange=Y;exports.createSearchFilterActions=H;exports.createSearchFilterInitialState=G;exports.createSearchFilterReducer=V;exports.formatColumnIdToHeaderCellLabel=P;exports.getReducerIdFor=x;exports.useLocalSearchFilterState=T;exports.useSearchFilterActions=m;exports.useSearchFilterDispatch=g;exports.useSearchFilterModel=ce;exports.useSearchFilterState=M;
6
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/features/search-filter/components/SearchFilterPanelHeader.tsx","../src/features/search-filter/context/SearchFilterStateContext.ts","../src/features/search-filter/context/SearchFilterDispatchContext.ts","../src/features/search-filter/context/SearchFilterActionsContext.ts","../src/features/search-filter/components/SearchFilterDrawer.tsx","../src/features/search-filter/components/SearchFilterButton.tsx","../src/features/search-filter/components/SearchFilterSection.tsx","../src/features/search-filter/components/StickyFooter.tsx","../src/features/search-filter/context/SearchFilterModelContext.ts","../src/features/search-filter/components/context/SearchFilterContext.tsx","../src/features/search-filter/redux/SearchFilterRedux.ts","../src/features/search-filter/hooks/UseLocalSearchFilterState.ts","../src/features/search-filter/components/context/SearchFilterLocalStateContext.tsx","../src/features/search-filter/features/chips/ChipSpacer.tsx","../src/features/search-filter/features/chips/SearchFilterChips.tsx","../src/features/search-filter/features/chips/EmptyChip.tsx","../src/features/search-filter/features/chips/SearchFilterChip.tsx","../src/features/search-filter/features/chips/SectionChips.tsx","../src/features/search-filter/section-factories/boolean-record/BooleanRecordChips.ts","../src/features/search-filter/section-factories/boolean-record/components/SimpleCheckboxListSection.tsx","../src/features/search-filter/section-factories/boolean-record/components/ChipMultiSelectSection.tsx","../src/features/search-filter/section-factories/date-range/DateRangeChips.ts","../src/features/search-filter/section-factories/date-range/DateRangePropsFactory.ts","../src/features/search-filter/section-factories/date-range/components/DateRangeCalendarSection.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { ReactNode } from \"react\";\nimport { FlatButton, stenaTimes } from \"@stenajs-webui/elements\";\nimport { Heading, Row, Space, Spacing } from \"@stenajs-webui/core\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n header?: string;\n contentRight?: ReactNode;\n}\n\nexport const SearchFilterPanelHeader: React.FC<\n SearchFilterPanelHeaderProps\n> = ({ onRequestClose, header = \"Filter\", contentRight }) => {\n return (\n <Spacing>\n <Row\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n height={\"48px\"}\n >\n <Row>\n <Space num={3} />\n <Heading variant={\"h4\"}>{header}</Heading>\n </Row>\n <Row gap={1}>\n {contentRight}\n <FlatButton\n leftIcon={stenaTimes}\n onClick={onRequestClose}\n variant={\"danger\"}\n />\n <Space num={0.5} />\n </Row>\n </Row>\n </Spacing>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterState } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterStateContext = createContext<\n SearchFilterState<unknown>\n>(null as unknown as SearchFilterState<unknown>);\n\nexport const useSearchFilterState = <\n TFormModel\n>(): SearchFilterState<TFormModel> => {\n const c = useContext(SearchFilterStateContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as SearchFilterState<TFormModel>;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterDispatch } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterDispatchContext = createContext<\n SearchFilterDispatch<unknown>\n>(null as unknown as SearchFilterDispatch<unknown>);\n\nexport const useSearchFilterDispatch = () => {\n const c = useContext(SearchFilterDispatchContext);\n if (!c) {\n throw new Error(\"Missing search filter dispatch context.\");\n }\n return c;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterActions } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterActionsContext = createContext<\n SearchFilterActions<unknown, any>\n>(null as unknown as SearchFilterActions<unknown, any>);\n\nexport const useSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>() => {\n const c = useContext(SearchFilterActionsContext);\n if (!c) {\n throw new Error(\"Missing search filter actions context.\");\n }\n return c as SearchFilterActions<TFormModel, TSectionKey>;\n};\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Drawer, DrawerProps } from \"@stenajs-webui/modal\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Box, Column } from \"@stenajs-webui/core\";\nimport { SearchFilterPanelHeader } from \"./SearchFilterPanelHeader\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\ninterface SearchFilterDrawerProps\n extends Omit<DrawerProps, \"isOpen\" | \"onRequestClose\"> {\n header?: string;\n headerContentRight?: ReactNode;\n}\n\nexport const SearchFilterDrawer: React.FC<SearchFilterDrawerProps> = ({\n children,\n header,\n headerContentRight,\n ...drawerProps\n}) => {\n const {\n settings: { open },\n } = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const closeDrawer = useCallback(() => {\n dispatch(actions.closeFilters());\n }, [actions, dispatch]);\n\n return (\n <Drawer isOpen={open} onRequestClose={closeDrawer} {...drawerProps}>\n <Column\n height={\"100%\"}\n borderRadius={\"var(--swui-border-radius)\"}\n background={cssColor(\"--lhds-color-ui-50\")}\n >\n <SearchFilterPanelHeader\n onRequestClose={closeDrawer}\n header={header}\n contentRight={headerContentRight}\n />\n <Box spacing={1} indent={1} gap={1}>\n {children}\n </Box>\n </Column>\n </Drawer>\n );\n};\n","import { SecondaryButton, stenaSlidersMini } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\ninterface SearchFilterDrawerButtonProps {\n label?: string;\n leftIcon?: IconDefinition;\n}\n\nexport const SearchFilterButton: React.FC<SearchFilterDrawerButtonProps> = ({\n label = \"Filters\",\n leftIcon = stenaSlidersMini,\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickButton = useCallback(() => {\n dispatch(actions.openFilters());\n }, [actions, dispatch]);\n\n return (\n <SecondaryButton\n label={label}\n leftIcon={leftIcon}\n onClick={onClickButton}\n />\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren, useCallback } from \"react\";\nimport { Row, Space } from \"@stenajs-webui/core\";\nimport { lowerCase, upperFirst } from \"lodash\";\nimport {\n Banner,\n FlatButton,\n MenuButton,\n Spinner,\n} from \"@stenajs-webui/elements\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\nexport interface SearchFilterSectionProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label?: string;\n leftIcon?: IconDefinition;\n contentRight?: React.ReactNode;\n disableContentPadding?: boolean;\n loading?: boolean;\n error?: string;\n onRetry?: () => void;\n}\n\nexport const SearchFilterSection = function SearchFilterSection<\n TSectionKey extends string\n>({\n sectionId,\n label,\n loading,\n error,\n onRetry,\n disableContentPadding,\n children,\n leftIcon,\n contentRight,\n}: PropsWithChildren<SearchFilterSectionProps<TSectionKey>>) {\n const state = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const expanded = state.expandedSections.values[sectionId] ?? false;\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.setSectionExpanded(sectionId, !expanded));\n }, [actions, dispatch, expanded, sectionId]);\n\n const activeLabel = label ?? formatColumnIdToHeaderCellLabel(sectionId);\n\n return (\n <>\n <MenuButton\n label={activeLabel}\n leftIcon={leftIcon}\n expandable\n expanded={expanded}\n selected={expanded}\n onClick={onClickLabel}\n right={contentRight}\n >\n {loading ? (\n <Row spacing justifyContent={\"center\"} flex={1}>\n <Spinner size={\"small\"} />\n </Row>\n ) : error ? (\n <Banner\n variant={\"error\"}\n text={error}\n contentRight={\n onRetry ? <FlatButton label={\"Retry\"} onClick={onRetry} /> : null\n }\n />\n ) : disableContentPadding ? (\n children\n ) : (\n children\n )}\n </MenuButton>\n {expanded && <Space />}\n </>\n );\n};\n\nexport const formatColumnIdToHeaderCellLabel = (columnId: string): string =>\n upperFirst(lowerCase(columnId));\n","import { BoxProps, Column } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { ReactNode } from \"react\";\n\nexport interface StickySearchButtonProps extends Pick<BoxProps, \"gap\"> {\n children?: ReactNode;\n}\n\nexport const StickyFooter: React.FC<StickySearchButtonProps> = ({\n children,\n ...boxProps\n}) => {\n return (\n <Column\n style={{ marginTop: \"auto\" }}\n justifyContent={\"center\"}\n spacing={2}\n indent\n shadow={\"popover\"}\n zIndex={1}\n {...boxProps}\n >\n {children}\n </Column>\n );\n};\n","import { createContext, useContext } from \"react\";\n\nexport const SearchFilterModelContext = createContext<unknown>(null as unknown);\n\nexport const useSearchFilterModel = <TFormModel>(): TFormModel => {\n const c = useContext(SearchFilterModelContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as TFormModel;\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport {\n SearchFilterActions,\n SearchFilterDispatch,\n SearchFilterState,\n} from \"../../redux/SearchFilterRedux\";\nimport { SearchFilterDispatchContext } from \"../../context/SearchFilterDispatchContext\";\nimport { SearchFilterActionsContext } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterStateContext } from \"../../context/SearchFilterStateContext\";\nimport { SearchFilterModelContext } from \"../../context/SearchFilterModelContext\";\n\ninterface SearchFilterScopeProps<TFormModel, TSectionKey extends string> {\n state: SearchFilterState<TFormModel>;\n dispatch: SearchFilterDispatch<TFormModel>;\n actions: SearchFilterActions<TFormModel, TSectionKey>;\n}\n\nexport const SearchFilterContext = function SearchFilterScope<\n TFormModel,\n TSectionKey extends string\n>({\n state,\n dispatch,\n actions,\n children,\n}: PropsWithChildren<SearchFilterScopeProps<TFormModel, TSectionKey>>) {\n return (\n <SearchFilterDispatchContext.Provider\n value={dispatch as SearchFilterDispatch<unknown>}\n >\n <SearchFilterActionsContext.Provider value={actions}>\n <SearchFilterStateContext.Provider value={state}>\n <SearchFilterModelContext.Provider value={state.formModel}>\n {children}\n </SearchFilterModelContext.Provider>\n </SearchFilterStateContext.Provider>\n </SearchFilterActionsContext.Provider>\n </SearchFilterDispatchContext.Provider>\n );\n};\n","import { combineReducers } from \"redux\";\nimport {\n createEntityActions,\n createEntityReducer,\n createValueByIdActions,\n createValueByIdReducer,\n EntityAction,\n EntityState,\n reducerIdGate,\n reducerIdGateAction,\n ReducerIdGateAction,\n ValueByIdAction,\n ValueByIdState,\n} from \"@stenajs-webui/redux\";\nimport { Dispatch } from \"react\";\n\nexport interface SearchFilterSettings {\n open: boolean;\n}\n\nexport type SearchFilterDispatch<TFormModel> = Dispatch<\n SearchFilterAction<TFormModel>\n>;\n\nexport interface SearchFilterState<TFormModel> {\n expandedSections: ValueByIdState<boolean>;\n formModel: EntityState<TFormModel>;\n settings: EntityState<SearchFilterSettings>;\n}\n\nexport type SearchFilterAction<TFormModel> =\n | ReducerIdGateAction<ValueByIdAction<boolean>>\n | ReducerIdGateAction<EntityAction<TFormModel>>\n | ReducerIdGateAction<EntityAction<SearchFilterSettings>>;\n\nexport const createSearchFilterInitialState = <TFormModel>(\n initialFormModel: TFormModel\n): SearchFilterState<TFormModel> => ({\n settings: {\n open: false,\n },\n formModel: initialFormModel,\n expandedSections: { values: {} },\n});\n\nexport const createSearchFilterReducer = <TFormModel>(\n reducerId: string,\n initialState: SearchFilterState<TFormModel>\n) =>\n combineReducers({\n expandedSections: reducerIdGate(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdReducer<boolean>(initialState.expandedSections)\n ),\n formModel: reducerIdGate(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityReducer<TFormModel>(initialState.formModel)\n ),\n settings: reducerIdGate(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityReducer<SearchFilterSettings>(initialState.settings)\n ),\n });\n\nexport interface SearchFilterActions<TFormModel, TSectionKey extends string> {\n openFilters: () => SearchFilterAction<TFormModel>;\n closeFilters: () => SearchFilterAction<TFormModel>;\n setFormModelFields: (\n fields: Partial<TFormModel>\n ) => SearchFilterAction<TFormModel>;\n clearFormModel: () => SearchFilterAction<TFormModel>;\n expandSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n collapseSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n setSectionExpanded: (\n section: TSectionKey,\n expanded: boolean\n ) => SearchFilterAction<TFormModel>;\n clearExpandedSections: () => SearchFilterAction<TFormModel>;\n}\n\nexport const createSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>(\n reducerId: string,\n initialFormModel: TFormModel\n): SearchFilterActions<TFormModel, TSectionKey> => ({\n openFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: true,\n })\n ),\n closeFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: false,\n })\n ),\n setFormModelFields: (fields: Partial<TFormModel>) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntityFields(fields)\n ),\n clearFormModel: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntity(initialFormModel)\n ),\n expandSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, true)\n ),\n collapseSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, false)\n ),\n setSectionExpanded: (section: TSectionKey, expanded: boolean) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, expanded)\n ),\n clearExpandedSections: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().clearAllValues()\n ),\n});\n\nexport const getReducerIdFor = (\n reducerId: string,\n reducerIdSuffix: keyof SearchFilterState<unknown>\n): string => `${reducerId}.${reducerIdSuffix}`;\n","import {\n createSearchFilterActions,\n createSearchFilterReducer,\n SearchFilterState,\n} from \"../redux/SearchFilterRedux\";\nimport { useReducer, useState } from \"react\";\n\nexport const useLocalSearchFilterState = <\n TFormModel,\n TSectionKey extends string\n>(\n initialState: SearchFilterState<TFormModel>\n) => {\n const [reducer] = useState(() =>\n createSearchFilterReducer<TFormModel>(\"local\", initialState)\n );\n\n const [actions] = useState(() =>\n createSearchFilterActions<TFormModel, TSectionKey>(\n \"local\",\n initialState.formModel\n )\n );\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return {\n actions,\n state,\n dispatch,\n };\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport { useLocalSearchFilterState } from \"../../hooks/UseLocalSearchFilterState\";\nimport { SearchFilterContext } from \"./SearchFilterContext\";\nimport { createSearchFilterInitialState } from \"../../redux/SearchFilterRedux\";\n\ninterface SearchFilterLocalScopeProps<TFormModel> {\n initialFormModel: TFormModel;\n}\n\nexport const SearchFilterLocalStateContext = function SearchFilterLocalScope<\n TFormModel\n>({\n initialFormModel,\n children,\n}: PropsWithChildren<SearchFilterLocalScopeProps<TFormModel>>) {\n const { state, actions, dispatch } = useLocalSearchFilterState(\n createSearchFilterInitialState(initialFormModel)\n );\n\n return (\n <SearchFilterContext state={state} actions={actions} dispatch={dispatch}>\n {children}\n </SearchFilterContext>\n );\n};\n","import styled from \"@emotion/styled\";\n\nexport const ChipSpacer = styled.div`\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n`;\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n children?: ReactNode;\n}\n\nexport const SearchFilterChips: React.FC<SearchFilterChipsProps> = ({\n children,\n disableClearAllButton = false,\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickClearAll = useCallback(\n () => dispatch(actions.clearFormModel()),\n [actions, dispatch]\n );\n\n return (\n <Row flexWrap={\"wrap\"}>\n {children}\n {!disableClearAllButton && (\n <ChipSpacer>\n <FlatButton\n size={\"small\"}\n label={\"Clear all\"}\n onClick={onClickClearAll}\n />\n </ChipSpacer>\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface EmptyChipProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label: string;\n}\n\nexport const EmptyChip = function EmptyChip<TSectionKey extends string>({\n label,\n sectionId,\n}: EmptyChipProps<TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip label={label} variant={\"secondary\"} onClick={onClickLabel} />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterSectionOnClickRemoveOnChip } from \"../../config/SearchFilterConfig\";\n\ninterface SearchFilterChipProps<TFormModel, TSectionKey> {\n sectionId: TSectionKey;\n label: string;\n value: string;\n onClickRemove?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SearchFilterChip = function SearchFilterChip<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n label,\n value,\n onClickRemove,\n}: SearchFilterChipProps<TFormModel, TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const setFormModelFields = useCallback(\n (fields: Partial<TFormModel>) =>\n dispatch(actions.setFormModelFields(fields)),\n [dispatch, actions]\n );\n\n const onClickRemoveHandler = useCallback(() => {\n onClickRemove?.({ value, setFormModelFields });\n }, [onClickRemove, setFormModelFields, value]);\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={onClickRemove ? onClickRemoveHandler : undefined}\n />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { EmptyChip } from \"./EmptyChip\";\nimport { SearchFilterChip } from \"./SearchFilterChip\";\n\nexport interface SectionChipsProps<TFormModel, TSectionKey extends string> {\n sectionId: TSectionKey;\n chips?: Array<SearchFilterSectionChipModel>;\n emptyChipLabel?: string;\n onClickRemoveOnChip?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SectionChips = function SectionChips<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n chips,\n emptyChipLabel,\n onClickRemoveOnChip,\n}: SectionChipsProps<TFormModel, TSectionKey>) {\n if (!chips?.length) {\n if (!emptyChipLabel) {\n return null;\n }\n return <EmptyChip sectionId={sectionId} label={emptyChipLabel} />;\n }\n\n return (\n <>\n {chips.map(({ label, value }) => (\n <SearchFilterChip\n key={value}\n label={label ?? sectionId}\n sectionId={sectionId}\n onClickRemove={onClickRemoveOnChip}\n value={value}\n />\n ))}\n </>\n );\n};\n","import { BooleanRecord, BooleanRecordOptions } from \"./BooleanRecordTypes\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue, truthyKeysAsList } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForBooleanRecord = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField,\n options?: BooleanRecordOptions\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForBooleanRecord(\n formModel[fieldName] as unknown as BooleanRecord,\n options\n ),\n onClickRemoveOnChip: createOnClickRemoveOnChipForBooleanRecord(\n formModel,\n fieldName\n ),\n});\n\nexport const createChipsForBooleanRecord = (\n booleanRecord: BooleanRecord,\n options?: BooleanRecordOptions\n): Array<SearchFilterSectionChipModel> =>\n truthyKeysAsList(booleanRecord).map((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n });\n\nexport const createOnClickRemoveOnChipForBooleanRecord = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields, value }) => {\n const newRecord = { ...formModel[fieldName] };\n newRecord[value] = false;\n setFormModelFields({\n [fieldName]: newRecord,\n } as unknown as Partial<TFormModel>);\n };\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { Column, Row } from \"@stenajs-webui/core\";\nimport {\n CheckboxWithLabel,\n ValueAndOnValueChangeProps,\n} from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\n\nexport interface SimpleCheckboxSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n options?: BooleanRecordOptions;\n}\n\nexport const SimpleCheckboxListSection = <TSectionKey extends string>({\n options,\n value,\n onValueChange,\n ...sectionProps\n}: SimpleCheckboxSectionProps<TSectionKey>): React.ReactElement => (\n <SearchFilterSection disableContentPadding {...sectionProps}>\n <Column maxHeight={\"400px\"} overflowY={\"auto\"} flex={1} gap={1} spacing={1}>\n {options?.map((d) => (\n <Row key={d.value} alignItems={\"center\"}>\n <CheckboxWithLabel\n tabIndex={-1}\n value={value?.[d.value]}\n label={d.label}\n onValueChange={(v) =>\n onValueChange?.({\n ...value,\n [d.value]: v,\n })\n }\n />\n </Row>\n ))}\n </Column>\n </SearchFilterSection>\n);\n","import * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { ChipMultiSelect, ChipMultiSelectValue } from \"@stenajs-webui/select\";\nimport { truthyKeysAsList } from \"@stenajs-webui/core\";\n\ninterface ChipMultiSelectSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n noneSelectedLabel?: string;\n options?: BooleanRecordOptions;\n}\n\nexport const ChipMultiSelectSection = <TSectionKey extends string>({\n options,\n value,\n noneSelectedLabel,\n onValueChange,\n ...sectionProps\n}: ChipMultiSelectSectionProps<TSectionKey>): React.ReactElement => {\n const [text, setText] = useState<string>(\"\");\n\n const listValue = useMemo<Array<ChipMultiSelectValue>>(\n () =>\n value\n ? truthyKeysAsList(value).map<ChipMultiSelectValue>((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n })\n : [],\n [options, value]\n );\n\n const filteredOptions = useMemo(() => {\n return options?.filter(\n (p) =>\n p.value.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1 ||\n p.label.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1\n );\n }, [options, text]);\n\n const onValueChangeInternal = useCallback(\n (value: Array<ChipMultiSelectValue>) => {\n onValueChange?.(createBooleanRecordFromValue(value));\n },\n [onValueChange]\n );\n\n return (\n <SearchFilterSection {...sectionProps}>\n <ChipMultiSelect\n options={filteredOptions}\n value={listValue}\n onValueChange={onValueChangeInternal}\n inputValue={text}\n noneSelectedLabel={noneSelectedLabel}\n onInputChange={setText}\n closeMenuOnSelect={false}\n />\n </SearchFilterSection>\n );\n};\n\nconst createBooleanRecordFromValue = (\n value: Array<ChipMultiSelectValue>\n): BooleanRecord => {\n return value.reduce<BooleanRecord>((sum, item) => {\n sum[item.value] = true;\n return sum;\n }, {});\n};\n","import {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForDateRange = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, string | undefined>\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForDateRange(\n formModel[startDateFieldName] as unknown as string | undefined,\n formModel[endDateFieldName] as unknown as string | undefined\n ),\n onClickRemoveOnChip: createOnClickRemoveOnChipForDateRange(\n startDateFieldName,\n endDateFieldName\n ),\n});\n\nexport const createChipsForDateRange = (\n startDate: string | undefined,\n endDate: string | undefined\n): Array<SearchFilterSectionChipModel> => {\n if (!startDate && !endDate) {\n return [];\n }\n return [\n { value: \"dateRange\", label: `${startDate ?? \"\"} - ${endDate ?? \"\"}` },\n ];\n};\n\nexport const createOnClickRemoveOnChipForDateRange = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, string | undefined>\n>(\n startDateFieldName: TField,\n endDateFieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields }) => {\n setFormModelFields({\n [startDateFieldName]: undefined,\n [endDateFieldName]: undefined,\n } as unknown as Partial<TFormModel>);\n };\n};\n","import { PickByValue } from \"@stenajs-webui/core\";\nimport { DateRangeCalendarSectionProps } from \"./components/DateRangeCalendarSection\";\n\nexport const createDateRangeSectionProps = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, string | undefined>,\n TSectionKey extends string\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n DateRangeCalendarSectionProps<TFormModel, TSectionKey>,\n \"value\" | \"onValueChange\"\n> => ({\n value: {\n startDate: formModel[startDateFieldName] as unknown as string | undefined,\n endDate: formModel[endDateFieldName] as unknown as string | undefined,\n },\n onValueChange: (value, { dispatch, actions }) => {\n const fields: Partial<TFormModel> = {\n [startDateFieldName]: value.startDate,\n [endDateFieldName]: value.endDate,\n } as any;\n dispatch(actions.setFormModelFields(fields));\n },\n});\n","import {\n DateRange,\n DateRangeCalendar,\n DateRangeCalendarProps,\n DateRangeFocusedInput,\n dateRangeToStrings,\n DateStringRange,\n stringsToDateRange,\n} from \"@stenajs-webui/calendar\";\nimport * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { Box } from \"@stenajs-webui/core\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport {\n SearchFilterActions,\n SearchFilterDispatch,\n} from \"../../../redux/SearchFilterRedux\";\nimport { useSearchFilterDispatch } from \"../../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../../context/SearchFilterActionsContext\";\n\nexport interface DateRangeCalendarSectionProps<\n TFormModel,\n TSectionKey extends string\n> extends Omit<\n SearchFilterSectionProps<TSectionKey>,\n \"label\" | \"onRetry\" | \"error\" | \"loading\"\n >,\n Omit<\n DateRangeCalendarProps<{}>,\n \"value\" | \"onValueChange\" | \"focusedInput\" | \"setFocusedInput\"\n > {\n value: DateStringRange;\n onValueChange: (\n value: DateStringRange,\n options: SetDateOptions<TFormModel, TSectionKey>\n ) => void;\n label?: string;\n}\n\nexport interface SetDateOptions<TFormModel, TSectionKey extends string> {\n dispatch: SearchFilterDispatch<TFormModel>;\n actions: SearchFilterActions<TFormModel, TSectionKey>;\n}\n\nexport const DateRangeCalendarSection = <\n TFormModel,\n TSectionKey extends string\n>({\n value,\n onValueChange,\n sectionId,\n contentRight,\n disableContentPadding,\n label,\n leftIcon,\n ...dateRangeCalendarProps\n}: DateRangeCalendarSectionProps<TFormModel, TSectionKey>) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions<TFormModel, TSectionKey>();\n\n const options = useMemo<SetDateOptions<TFormModel, TSectionKey>>(\n () => ({ dispatch, actions }),\n [actions, dispatch]\n );\n const [focusedInput, setFocusedInput] =\n useState<DateRangeFocusedInput>(\"startDate\");\n\n const dateRangeValue = useMemo(() => stringsToDateRange(value), [value]);\n\n const onValueChangeHandler = useCallback(\n (value: DateRange) => {\n onValueChange(dateRangeToStrings(value), options);\n },\n [onValueChange, options]\n );\n\n return (\n <SearchFilterSection\n label={label}\n leftIcon={leftIcon}\n sectionId={sectionId}\n contentRight={contentRight}\n disableContentPadding={disableContentPadding}\n >\n <Box flex={1} alignItems={\"center\"}>\n <Box background={\"white\"} indent>\n <DateRangeCalendar\n setFocusedInput={setFocusedInput}\n focusedInput={focusedInput}\n value={dateRangeValue}\n onValueChange={onValueChangeHandler}\n {...dateRangeCalendarProps}\n />\n </Box>\n </Box>\n </SearchFilterSection>\n );\n};\n"],"names":["SearchFilterPanelHeader","onRequestClose","header","contentRight","Spacing","jsxs","Row","jsx","Space","Heading","FlatButton","stenaTimes","SearchFilterStateContext","createContext","useSearchFilterState","c","useContext","SearchFilterDispatchContext","useSearchFilterDispatch","SearchFilterActionsContext","useSearchFilterActions","SearchFilterDrawer","children","headerContentRight","drawerProps","open","dispatch","actions","closeDrawer","useCallback","Drawer","Column","cssColor","Box","SearchFilterButton","label","leftIcon","stenaSlidersMini","onClickButton","SecondaryButton","SearchFilterSection","sectionId","loading","error","onRetry","disableContentPadding","state","expanded","_a","onClickLabel","activeLabel","formatColumnIdToHeaderCellLabel","Fragment","MenuButton","Spinner","Banner","columnId","upperFirst","lowerCase","StickyFooter","boxProps","SearchFilterModelContext","useSearchFilterModel","SearchFilterContext","createSearchFilterInitialState","initialFormModel","createSearchFilterReducer","reducerId","initialState","combineReducers","reducerIdGate","getReducerIdFor","createValueByIdReducer","createEntityReducer","createSearchFilterActions","reducerIdGateAction","createEntityActions","fields","section","createValueByIdActions","reducerIdSuffix","useLocalSearchFilterState","reducer","useState","useReducer","SearchFilterLocalStateContext","ChipSpacer","styled","SearchFilterChips","disableClearAllButton","onClickClearAll","EmptyChip","Chip","SearchFilterChip","value","onClickRemove","setFormModelFields","onClickRemoveHandler","SectionChips","chips","emptyChipLabel","onClickRemoveOnChip","createChipsPropsForBooleanRecord","formModel","fieldName","options","createChipsForBooleanRecord","createOnClickRemoveOnChipForBooleanRecord","booleanRecord","truthyKeysAsList","key","option","newRecord","SimpleCheckboxListSection","onValueChange","sectionProps","d","CheckboxWithLabel","v","ChipMultiSelectSection","noneSelectedLabel","text","setText","listValue","useMemo","o","filteredOptions","p","onValueChangeInternal","createBooleanRecordFromValue","ChipMultiSelect","sum","item","createChipsPropsForDateRange","startDateFieldName","endDateFieldName","createChipsForDateRange","createOnClickRemoveOnChipForDateRange","startDate","endDate","createDateRangeSectionProps","DateRangeCalendarSection","dateRangeCalendarProps","focusedInput","setFocusedInput","dateRangeValue","stringsToDateRange","onValueChangeHandler","dateRangeToStrings","DateRangeCalendar"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/features/search-filter/components/SearchFilterPanelHeader.tsx","../src/features/search-filter/context/SearchFilterStateContext.ts","../src/features/search-filter/context/SearchFilterDispatchContext.ts","../src/features/search-filter/context/SearchFilterActionsContext.ts","../src/features/search-filter/components/SearchFilterDrawer.tsx","../src/features/search-filter/components/SearchFilterButton.tsx","../src/features/search-filter/components/SearchFilterSection.tsx","../src/features/search-filter/components/StickyFooter.tsx","../src/features/search-filter/context/SearchFilterModelContext.ts","../src/features/search-filter/components/context/SearchFilterContext.tsx","../src/features/search-filter/redux/SearchFilterRedux.ts","../src/features/search-filter/hooks/UseLocalSearchFilterState.ts","../src/features/search-filter/components/context/SearchFilterLocalStateContext.tsx","../src/features/search-filter/features/chips/ChipSpacer.tsx","../src/features/search-filter/features/chips/SearchFilterChips.tsx","../src/features/search-filter/features/chips/EmptyChip.tsx","../src/features/search-filter/features/chips/SearchFilterChip.tsx","../src/features/search-filter/features/chips/SectionChips.tsx","../src/features/search-filter/section-factories/boolean-record/BooleanRecordChips.ts","../src/features/search-filter/section-factories/boolean-record/components/SimpleCheckboxListSection.tsx","../src/features/search-filter/section-factories/boolean-record/components/ChipMultiSelectSection.tsx","../src/features/search-filter/section-factories/date-range/DateRangeChips.ts","../src/features/search-filter/section-factories/date-range/DateRangePropsFactory.ts","../src/features/search-filter/section-factories/date-range/components/DateRangeCalendarSection.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { ReactNode } from \"react\";\nimport { FlatButton, stenaTimes } from \"@stenajs-webui/elements\";\nimport { Heading, Row, Space, Spacing } from \"@stenajs-webui/core\";\nimport { cssColor } from \"@stenajs-webui/theme\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n header?: string;\n contentRight?: ReactNode;\n}\n\nexport const SearchFilterPanelHeader: React.FC<\n SearchFilterPanelHeaderProps\n> = ({ onRequestClose, header = \"Filter\", contentRight }) => {\n return (\n <Spacing\n position={\"sticky\"}\n top={0}\n background={cssColor(\"--lhds-color-ui-50\")}\n zIndex={100}\n >\n <Row\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n height={\"48px\"}\n >\n <Row>\n <Space num={3} />\n <Heading variant={\"h4\"}>{header}</Heading>\n </Row>\n <Row gap={1}>\n {contentRight}\n <FlatButton\n leftIcon={stenaTimes}\n onClick={onRequestClose}\n variant={\"danger\"}\n />\n <Space num={0.5} />\n </Row>\n </Row>\n </Spacing>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterState } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterStateContext = createContext<\n SearchFilterState<unknown>\n>(null as unknown as SearchFilterState<unknown>);\n\nexport const useSearchFilterState = <\n TFormModel\n>(): SearchFilterState<TFormModel> => {\n const c = useContext(SearchFilterStateContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as SearchFilterState<TFormModel>;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterDispatch } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterDispatchContext = createContext<\n SearchFilterDispatch<unknown>\n>(null as unknown as SearchFilterDispatch<unknown>);\n\nexport const useSearchFilterDispatch = () => {\n const c = useContext(SearchFilterDispatchContext);\n if (!c) {\n throw new Error(\"Missing search filter dispatch context.\");\n }\n return c;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterActions } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterActionsContext = createContext<\n SearchFilterActions<unknown, any>\n>(null as unknown as SearchFilterActions<unknown, any>);\n\nexport const useSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>() => {\n const c = useContext(SearchFilterActionsContext);\n if (!c) {\n throw new Error(\"Missing search filter actions context.\");\n }\n return c as SearchFilterActions<TFormModel, TSectionKey>;\n};\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Drawer, DrawerProps } from \"@stenajs-webui/modal\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Box, Column } from \"@stenajs-webui/core\";\nimport { SearchFilterPanelHeader } from \"./SearchFilterPanelHeader\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\ninterface SearchFilterDrawerProps\n extends Omit<DrawerProps, \"isOpen\" | \"onRequestClose\"> {\n header?: string;\n headerContentRight?: ReactNode;\n}\n\nexport const SearchFilterDrawer: React.FC<SearchFilterDrawerProps> = ({\n children,\n header,\n headerContentRight,\n ...drawerProps\n}) => {\n const {\n settings: { open },\n } = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const closeDrawer = useCallback(() => {\n dispatch(actions.closeFilters());\n }, [actions, dispatch]);\n\n return (\n <Drawer\n floating\n isOpen={open}\n onRequestClose={closeDrawer}\n {...drawerProps}\n >\n <Column\n height={\"100%\"}\n borderRadius={\"var(--swui-border-radius)\"}\n background={cssColor(\"--lhds-color-ui-50\")}\n >\n <SearchFilterPanelHeader\n onRequestClose={closeDrawer}\n header={header}\n contentRight={headerContentRight}\n />\n <Box spacing={1} indent={1} gap={1}>\n {children}\n </Box>\n </Column>\n </Drawer>\n );\n};\n","import { SecondaryButton, stenaSlidersMini } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\ninterface SearchFilterDrawerButtonProps {\n label?: string;\n leftIcon?: IconDefinition;\n}\n\nexport const SearchFilterButton: React.FC<SearchFilterDrawerButtonProps> = ({\n label = \"Filters\",\n leftIcon = stenaSlidersMini,\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickButton = useCallback(() => {\n dispatch(actions.openFilters());\n }, [actions, dispatch]);\n\n return (\n <SecondaryButton\n label={label}\n leftIcon={leftIcon}\n onClick={onClickButton}\n />\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren, useCallback } from \"react\";\nimport { Row, Space } from \"@stenajs-webui/core\";\nimport { lowerCase, upperFirst } from \"lodash\";\nimport {\n Banner,\n FlatButton,\n MenuButton,\n Spinner,\n} from \"@stenajs-webui/elements\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\nexport interface SearchFilterSectionProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label?: string;\n leftIcon?: IconDefinition;\n contentRight?: React.ReactNode;\n disableContentPadding?: boolean;\n loading?: boolean;\n error?: string;\n onRetry?: () => void;\n}\n\nexport const SearchFilterSection = function SearchFilterSection<\n TSectionKey extends string\n>({\n sectionId,\n label,\n loading,\n error,\n onRetry,\n disableContentPadding,\n children,\n leftIcon,\n contentRight,\n}: PropsWithChildren<SearchFilterSectionProps<TSectionKey>>) {\n const state = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const expanded = state.expandedSections.values[sectionId] ?? false;\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.setSectionExpanded(sectionId, !expanded));\n }, [actions, dispatch, expanded, sectionId]);\n\n const activeLabel = label ?? formatColumnIdToHeaderCellLabel(sectionId);\n\n return (\n <>\n <MenuButton\n label={activeLabel}\n leftIcon={leftIcon}\n expandable\n expanded={expanded}\n selected={expanded}\n onClick={onClickLabel}\n right={contentRight}\n >\n {loading ? (\n <Row spacing justifyContent={\"center\"} flex={1}>\n <Spinner size={\"small\"} />\n </Row>\n ) : error ? (\n <Banner\n variant={\"error\"}\n text={error}\n contentRight={\n onRetry ? <FlatButton label={\"Retry\"} onClick={onRetry} /> : null\n }\n />\n ) : disableContentPadding ? (\n children\n ) : (\n children\n )}\n </MenuButton>\n {expanded && <Space />}\n </>\n );\n};\n\nexport const formatColumnIdToHeaderCellLabel = (columnId: string): string =>\n upperFirst(lowerCase(columnId));\n","import { BoxProps, Column } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { ReactNode } from \"react\";\n\nexport interface StickySearchButtonProps extends Pick<BoxProps, \"gap\"> {\n children?: ReactNode;\n}\n\nexport const StickyFooter: React.FC<StickySearchButtonProps> = ({\n children,\n ...boxProps\n}) => {\n return (\n <Column\n style={{ marginTop: \"auto\" }}\n justifyContent={\"center\"}\n spacing={2}\n indent\n shadow={\"popover\"}\n zIndex={1}\n {...boxProps}\n >\n {children}\n </Column>\n );\n};\n","import { createContext, useContext } from \"react\";\n\nexport const SearchFilterModelContext = createContext<unknown>(null as unknown);\n\nexport const useSearchFilterModel = <TFormModel>(): TFormModel => {\n const c = useContext(SearchFilterModelContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as TFormModel;\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport {\n SearchFilterActions,\n SearchFilterDispatch,\n SearchFilterState,\n} from \"../../redux/SearchFilterRedux\";\nimport { SearchFilterDispatchContext } from \"../../context/SearchFilterDispatchContext\";\nimport { SearchFilterActionsContext } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterStateContext } from \"../../context/SearchFilterStateContext\";\nimport { SearchFilterModelContext } from \"../../context/SearchFilterModelContext\";\n\ninterface SearchFilterScopeProps<TFormModel, TSectionKey extends string> {\n state: SearchFilterState<TFormModel>;\n dispatch: SearchFilterDispatch<TFormModel>;\n actions: SearchFilterActions<TFormModel, TSectionKey>;\n}\n\nexport const SearchFilterContext = function SearchFilterScope<\n TFormModel,\n TSectionKey extends string\n>({\n state,\n dispatch,\n actions,\n children,\n}: PropsWithChildren<SearchFilterScopeProps<TFormModel, TSectionKey>>) {\n return (\n <SearchFilterDispatchContext.Provider\n value={dispatch as SearchFilterDispatch<unknown>}\n >\n <SearchFilterActionsContext.Provider value={actions}>\n <SearchFilterStateContext.Provider value={state}>\n <SearchFilterModelContext.Provider value={state.formModel}>\n {children}\n </SearchFilterModelContext.Provider>\n </SearchFilterStateContext.Provider>\n </SearchFilterActionsContext.Provider>\n </SearchFilterDispatchContext.Provider>\n );\n};\n","import { combineReducers } from \"redux\";\nimport {\n createEntityActions,\n createEntityReducer,\n createValueByIdActions,\n createValueByIdReducer,\n EntityAction,\n EntityState,\n reducerIdGate,\n reducerIdGateAction,\n ReducerIdGateAction,\n ValueByIdAction,\n ValueByIdState,\n} from \"@stenajs-webui/redux\";\nimport { Dispatch } from \"react\";\n\nexport interface SearchFilterSettings {\n open: boolean;\n}\n\nexport type SearchFilterDispatch<TFormModel> = Dispatch<\n SearchFilterAction<TFormModel>\n>;\n\nexport interface SearchFilterState<TFormModel> {\n expandedSections: ValueByIdState<boolean>;\n formModel: EntityState<TFormModel>;\n settings: EntityState<SearchFilterSettings>;\n}\n\nexport type SearchFilterAction<TFormModel> =\n | ReducerIdGateAction<ValueByIdAction<boolean>>\n | ReducerIdGateAction<EntityAction<TFormModel>>\n | ReducerIdGateAction<EntityAction<SearchFilterSettings>>;\n\nexport const createSearchFilterInitialState = <TFormModel>(\n initialFormModel: TFormModel\n): SearchFilterState<TFormModel> => ({\n settings: {\n open: false,\n },\n formModel: initialFormModel,\n expandedSections: { values: {} },\n});\n\nexport const createSearchFilterReducer = <TFormModel>(\n reducerId: string,\n initialState: SearchFilterState<TFormModel>\n) =>\n combineReducers({\n expandedSections: reducerIdGate(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdReducer<boolean>(initialState.expandedSections)\n ),\n formModel: reducerIdGate(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityReducer<TFormModel>(initialState.formModel)\n ),\n settings: reducerIdGate(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityReducer<SearchFilterSettings>(initialState.settings)\n ),\n });\n\nexport interface SearchFilterActions<TFormModel, TSectionKey extends string> {\n openFilters: () => SearchFilterAction<TFormModel>;\n closeFilters: () => SearchFilterAction<TFormModel>;\n setFormModelFields: (\n fields: Partial<TFormModel>\n ) => SearchFilterAction<TFormModel>;\n clearFormModel: () => SearchFilterAction<TFormModel>;\n expandSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n collapseSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n setSectionExpanded: (\n section: TSectionKey,\n expanded: boolean\n ) => SearchFilterAction<TFormModel>;\n clearExpandedSections: () => SearchFilterAction<TFormModel>;\n}\n\nexport const createSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>(\n reducerId: string,\n initialFormModel: TFormModel\n): SearchFilterActions<TFormModel, TSectionKey> => ({\n openFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: true,\n })\n ),\n closeFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: false,\n })\n ),\n setFormModelFields: (fields: Partial<TFormModel>) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntityFields(fields)\n ),\n clearFormModel: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntity(initialFormModel)\n ),\n expandSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, true)\n ),\n collapseSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, false)\n ),\n setSectionExpanded: (section: TSectionKey, expanded: boolean) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, expanded)\n ),\n clearExpandedSections: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().clearAllValues()\n ),\n});\n\nexport const getReducerIdFor = (\n reducerId: string,\n reducerIdSuffix: keyof SearchFilterState<unknown>\n): string => `${reducerId}.${reducerIdSuffix}`;\n","import {\n createSearchFilterActions,\n createSearchFilterReducer,\n SearchFilterState,\n} from \"../redux/SearchFilterRedux\";\nimport { useReducer, useState } from \"react\";\n\nexport const useLocalSearchFilterState = <\n TFormModel,\n TSectionKey extends string\n>(\n initialState: SearchFilterState<TFormModel>\n) => {\n const [reducer] = useState(() =>\n createSearchFilterReducer<TFormModel>(\"local\", initialState)\n );\n\n const [actions] = useState(() =>\n createSearchFilterActions<TFormModel, TSectionKey>(\n \"local\",\n initialState.formModel\n )\n );\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return {\n actions,\n state,\n dispatch,\n };\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport { useLocalSearchFilterState } from \"../../hooks/UseLocalSearchFilterState\";\nimport { SearchFilterContext } from \"./SearchFilterContext\";\nimport { createSearchFilterInitialState } from \"../../redux/SearchFilterRedux\";\n\ninterface SearchFilterLocalScopeProps<TFormModel> {\n initialFormModel: TFormModel;\n}\n\nexport const SearchFilterLocalStateContext = function SearchFilterLocalScope<\n TFormModel\n>({\n initialFormModel,\n children,\n}: PropsWithChildren<SearchFilterLocalScopeProps<TFormModel>>) {\n const { state, actions, dispatch } = useLocalSearchFilterState(\n createSearchFilterInitialState(initialFormModel)\n );\n\n return (\n <SearchFilterContext state={state} actions={actions} dispatch={dispatch}>\n {children}\n </SearchFilterContext>\n );\n};\n","import styled from \"@emotion/styled\";\n\nexport const ChipSpacer = styled.div`\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n`;\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n children?: ReactNode;\n}\n\nexport const SearchFilterChips: React.FC<SearchFilterChipsProps> = ({\n children,\n disableClearAllButton = false,\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickClearAll = useCallback(\n () => dispatch(actions.clearFormModel()),\n [actions, dispatch]\n );\n\n return (\n <Row flexWrap={\"wrap\"}>\n {children}\n {!disableClearAllButton && (\n <ChipSpacer>\n <FlatButton\n size={\"small\"}\n label={\"Clear all\"}\n onClick={onClickClearAll}\n />\n </ChipSpacer>\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface EmptyChipProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label: string;\n}\n\nexport const EmptyChip = function EmptyChip<TSectionKey extends string>({\n label,\n sectionId,\n}: EmptyChipProps<TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip label={label} variant={\"secondary\"} onClick={onClickLabel} />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterSectionOnClickRemoveOnChip } from \"../../config/SearchFilterConfig\";\n\ninterface SearchFilterChipProps<TFormModel, TSectionKey> {\n sectionId: TSectionKey;\n label: string;\n value: string;\n onClickRemove?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SearchFilterChip = function SearchFilterChip<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n label,\n value,\n onClickRemove,\n}: SearchFilterChipProps<TFormModel, TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const setFormModelFields = useCallback(\n (fields: Partial<TFormModel>) =>\n dispatch(actions.setFormModelFields(fields)),\n [dispatch, actions]\n );\n\n const onClickRemoveHandler = useCallback(() => {\n onClickRemove?.({ value, setFormModelFields });\n }, [onClickRemove, setFormModelFields, value]);\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={onClickRemove ? onClickRemoveHandler : undefined}\n />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { EmptyChip } from \"./EmptyChip\";\nimport { SearchFilterChip } from \"./SearchFilterChip\";\n\nexport interface SectionChipsProps<TFormModel, TSectionKey extends string> {\n sectionId: TSectionKey;\n chips?: Array<SearchFilterSectionChipModel>;\n emptyChipLabel?: string;\n onClickRemoveOnChip?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SectionChips = function SectionChips<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n chips,\n emptyChipLabel,\n onClickRemoveOnChip,\n}: SectionChipsProps<TFormModel, TSectionKey>) {\n if (!chips?.length) {\n if (!emptyChipLabel) {\n return null;\n }\n return <EmptyChip sectionId={sectionId} label={emptyChipLabel} />;\n }\n\n return (\n <>\n {chips.map(({ label, value }) => (\n <SearchFilterChip\n key={value}\n label={label ?? sectionId}\n sectionId={sectionId}\n onClickRemove={onClickRemoveOnChip}\n value={value}\n />\n ))}\n </>\n );\n};\n","import { BooleanRecord, BooleanRecordOptions } from \"./BooleanRecordTypes\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue, truthyKeysAsList } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForBooleanRecord = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField,\n options?: BooleanRecordOptions\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForBooleanRecord(\n formModel[fieldName] as unknown as BooleanRecord,\n options\n ),\n onClickRemoveOnChip: createOnClickRemoveOnChipForBooleanRecord(\n formModel,\n fieldName\n ),\n});\n\nexport const createChipsForBooleanRecord = (\n booleanRecord: BooleanRecord,\n options?: BooleanRecordOptions\n): Array<SearchFilterSectionChipModel> =>\n truthyKeysAsList(booleanRecord).map((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n });\n\nexport const createOnClickRemoveOnChipForBooleanRecord = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields, value }) => {\n const newRecord = { ...formModel[fieldName] };\n newRecord[value] = false;\n setFormModelFields({\n [fieldName]: newRecord,\n } as unknown as Partial<TFormModel>);\n };\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { Column, Row } from \"@stenajs-webui/core\";\nimport {\n CheckboxWithLabel,\n ValueAndOnValueChangeProps,\n} from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\n\nexport interface SimpleCheckboxSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n options?: BooleanRecordOptions;\n}\n\nexport const SimpleCheckboxListSection = <TSectionKey extends string>({\n options,\n value,\n onValueChange,\n ...sectionProps\n}: SimpleCheckboxSectionProps<TSectionKey>): React.ReactElement => (\n <SearchFilterSection disableContentPadding {...sectionProps}>\n <Column maxHeight={\"400px\"} overflowY={\"auto\"} flex={1} gap={1} spacing={1}>\n {options?.map((d) => (\n <Row key={d.value} alignItems={\"center\"}>\n <CheckboxWithLabel\n tabIndex={-1}\n value={value?.[d.value]}\n label={d.label}\n onValueChange={(v) =>\n onValueChange?.({\n ...value,\n [d.value]: v,\n })\n }\n />\n </Row>\n ))}\n </Column>\n </SearchFilterSection>\n);\n","import * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { ChipMultiSelect, ChipMultiSelectValue } from \"@stenajs-webui/select\";\nimport { truthyKeysAsList } from \"@stenajs-webui/core\";\n\ninterface ChipMultiSelectSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n noneSelectedLabel?: string;\n options?: BooleanRecordOptions;\n}\n\nexport const ChipMultiSelectSection = <TSectionKey extends string>({\n options,\n value,\n noneSelectedLabel,\n onValueChange,\n ...sectionProps\n}: ChipMultiSelectSectionProps<TSectionKey>): React.ReactElement => {\n const [text, setText] = useState<string>(\"\");\n\n const listValue = useMemo<Array<ChipMultiSelectValue>>(\n () =>\n value\n ? truthyKeysAsList(value).map<ChipMultiSelectValue>((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n })\n : [],\n [options, value]\n );\n\n const filteredOptions = useMemo(() => {\n return options?.filter(\n (p) =>\n p.value.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1 ||\n p.label.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1\n );\n }, [options, text]);\n\n const onValueChangeInternal = useCallback(\n (value: Array<ChipMultiSelectValue>) => {\n onValueChange?.(createBooleanRecordFromValue(value));\n },\n [onValueChange]\n );\n\n return (\n <SearchFilterSection {...sectionProps}>\n <ChipMultiSelect\n options={filteredOptions}\n value={listValue}\n onValueChange={onValueChangeInternal}\n inputValue={text}\n noneSelectedLabel={noneSelectedLabel}\n onInputChange={setText}\n closeMenuOnSelect={false}\n />\n </SearchFilterSection>\n );\n};\n\nconst createBooleanRecordFromValue = (\n value: Array<ChipMultiSelectValue>\n): BooleanRecord => {\n return value.reduce<BooleanRecord>((sum, item) => {\n sum[item.value] = true;\n return sum;\n }, {});\n};\n","import {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForDateRange = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, string | undefined>\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForDateRange(\n formModel[startDateFieldName] as unknown as string | undefined,\n formModel[endDateFieldName] as unknown as string | undefined\n ),\n onClickRemoveOnChip: createOnClickRemoveOnChipForDateRange(\n startDateFieldName,\n endDateFieldName\n ),\n});\n\nexport const createChipsForDateRange = (\n startDate: string | undefined,\n endDate: string | undefined\n): Array<SearchFilterSectionChipModel> => {\n if (!startDate && !endDate) {\n return [];\n }\n return [\n { value: \"dateRange\", label: `${startDate ?? \"\"} - ${endDate ?? \"\"}` },\n ];\n};\n\nexport const createOnClickRemoveOnChipForDateRange = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, string | undefined>\n>(\n startDateFieldName: TField,\n endDateFieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields }) => {\n setFormModelFields({\n [startDateFieldName]: undefined,\n [endDateFieldName]: undefined,\n } as unknown as Partial<TFormModel>);\n };\n};\n","import { PickByValue } from \"@stenajs-webui/core\";\nimport { DateRangeCalendarSectionProps } from \"./components/DateRangeCalendarSection\";\n\nexport const createDateRangeSectionProps = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, string | undefined>,\n TSectionKey extends string\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n DateRangeCalendarSectionProps<TFormModel, TSectionKey>,\n \"value\" | \"onValueChange\"\n> => ({\n value: {\n startDate: formModel[startDateFieldName] as unknown as string | undefined,\n endDate: formModel[endDateFieldName] as unknown as string | undefined,\n },\n onValueChange: (value, { dispatch, actions }) => {\n const fields: Partial<TFormModel> = {\n [startDateFieldName]: value.startDate,\n [endDateFieldName]: value.endDate,\n } as any;\n dispatch(actions.setFormModelFields(fields));\n },\n});\n","import {\n DateRange,\n DateRangeCalendar,\n DateRangeCalendarProps,\n DateRangeFocusedInput,\n dateRangeToStrings,\n DateStringRange,\n stringsToDateRange,\n} from \"@stenajs-webui/calendar\";\nimport * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { Box } from \"@stenajs-webui/core\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport {\n SearchFilterActions,\n SearchFilterDispatch,\n} from \"../../../redux/SearchFilterRedux\";\nimport { useSearchFilterDispatch } from \"../../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../../context/SearchFilterActionsContext\";\n\nexport interface DateRangeCalendarSectionProps<\n TFormModel,\n TSectionKey extends string\n> extends Omit<\n SearchFilterSectionProps<TSectionKey>,\n \"label\" | \"onRetry\" | \"error\" | \"loading\"\n >,\n Omit<\n DateRangeCalendarProps<{}>,\n \"value\" | \"onValueChange\" | \"focusedInput\" | \"setFocusedInput\"\n > {\n value: DateStringRange;\n onValueChange: (\n value: DateStringRange,\n options: SetDateOptions<TFormModel, TSectionKey>\n ) => void;\n label?: string;\n}\n\nexport interface SetDateOptions<TFormModel, TSectionKey extends string> {\n dispatch: SearchFilterDispatch<TFormModel>;\n actions: SearchFilterActions<TFormModel, TSectionKey>;\n}\n\nexport const DateRangeCalendarSection = <\n TFormModel,\n TSectionKey extends string\n>({\n value,\n onValueChange,\n sectionId,\n contentRight,\n disableContentPadding,\n label,\n leftIcon,\n ...dateRangeCalendarProps\n}: DateRangeCalendarSectionProps<TFormModel, TSectionKey>) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions<TFormModel, TSectionKey>();\n\n const options = useMemo<SetDateOptions<TFormModel, TSectionKey>>(\n () => ({ dispatch, actions }),\n [actions, dispatch]\n );\n const [focusedInput, setFocusedInput] =\n useState<DateRangeFocusedInput>(\"startDate\");\n\n const dateRangeValue = useMemo(() => stringsToDateRange(value), [value]);\n\n const onValueChangeHandler = useCallback(\n (value: DateRange) => {\n onValueChange(dateRangeToStrings(value), options);\n },\n [onValueChange, options]\n );\n\n return (\n <SearchFilterSection\n label={label}\n leftIcon={leftIcon}\n sectionId={sectionId}\n contentRight={contentRight}\n disableContentPadding={disableContentPadding}\n >\n <Box flex={1} alignItems={\"center\"}>\n <Box background={\"white\"} indent>\n <DateRangeCalendar\n setFocusedInput={setFocusedInput}\n focusedInput={focusedInput}\n value={dateRangeValue}\n onValueChange={onValueChangeHandler}\n {...dateRangeCalendarProps}\n />\n </Box>\n </Box>\n </SearchFilterSection>\n );\n};\n"],"names":["SearchFilterPanelHeader","onRequestClose","header","contentRight","jsx","Spacing","cssColor","jsxs","Row","Space","Heading","FlatButton","stenaTimes","SearchFilterStateContext","createContext","useSearchFilterState","c","useContext","SearchFilterDispatchContext","useSearchFilterDispatch","SearchFilterActionsContext","useSearchFilterActions","SearchFilterDrawer","children","headerContentRight","drawerProps","open","dispatch","actions","closeDrawer","useCallback","Drawer","Column","Box","SearchFilterButton","label","leftIcon","stenaSlidersMini","onClickButton","SecondaryButton","SearchFilterSection","sectionId","loading","error","onRetry","disableContentPadding","state","expanded","_a","onClickLabel","activeLabel","formatColumnIdToHeaderCellLabel","Fragment","MenuButton","Spinner","Banner","columnId","upperFirst","lowerCase","StickyFooter","boxProps","SearchFilterModelContext","useSearchFilterModel","SearchFilterContext","createSearchFilterInitialState","initialFormModel","createSearchFilterReducer","reducerId","initialState","combineReducers","reducerIdGate","getReducerIdFor","createValueByIdReducer","createEntityReducer","createSearchFilterActions","reducerIdGateAction","createEntityActions","fields","section","createValueByIdActions","reducerIdSuffix","useLocalSearchFilterState","reducer","useState","useReducer","SearchFilterLocalStateContext","ChipSpacer","styled","SearchFilterChips","disableClearAllButton","onClickClearAll","EmptyChip","Chip","SearchFilterChip","value","onClickRemove","setFormModelFields","onClickRemoveHandler","SectionChips","chips","emptyChipLabel","onClickRemoveOnChip","createChipsPropsForBooleanRecord","formModel","fieldName","options","createChipsForBooleanRecord","createOnClickRemoveOnChipForBooleanRecord","booleanRecord","truthyKeysAsList","key","option","newRecord","SimpleCheckboxListSection","onValueChange","sectionProps","d","CheckboxWithLabel","v","ChipMultiSelectSection","noneSelectedLabel","text","setText","listValue","useMemo","o","filteredOptions","p","onValueChangeInternal","createBooleanRecordFromValue","ChipMultiSelect","sum","item","createChipsPropsForDateRange","startDateFieldName","endDateFieldName","createChipsForDateRange","createOnClickRemoveOnChipForDateRange","startDate","endDate","createDateRangeSectionProps","DateRangeCalendarSection","dateRangeCalendarProps","focusedInput","setFocusedInput","dateRangeValue","stringsToDateRange","onValueChangeHandler","dateRangeToStrings","DateRangeCalendar"],"mappings":"8jBAYaA,EAET,CAAC,CAAE,eAAAC,EAAgB,OAAAC,EAAS,SAAU,aAAAC,KAEtCC,EAAA,IAACC,EAAA,QAAA,CACC,SAAU,SACV,IAAK,EACL,WAAYC,WAAS,oBAAoB,EACzC,OAAQ,IAER,SAAAC,EAAA,KAACC,EAAA,IAAA,CACC,eAAgB,gBAChB,WAAY,SACZ,OAAQ,OAER,SAAA,CAAAD,OAACC,EAAAA,IACC,CAAA,SAAA,CAACJ,EAAAA,IAAAK,EAAA,MAAA,CAAM,IAAK,CAAG,CAAA,EACdL,EAAA,IAAAM,EAAA,QAAA,CAAQ,QAAS,KAAO,SAAOR,EAAA,CAAA,EAClC,EACAK,EAAAA,KAACC,EAAAA,IAAI,CAAA,IAAK,EACP,SAAA,CAAAL,EACDC,EAAA,IAACO,EAAA,WAAA,CACC,SAAUC,EAAA,WACV,QAASX,EACT,QAAS,QAAA,CACX,EACAG,EAAAA,IAACK,EAAM,MAAA,CAAA,IAAK,EAAK,CAAA,CAAA,EACnB,CAAA,CAAA,CACF,CAAA,CAAA,ECrCOI,EAA2BC,gBAEtC,IAA6C,EAElCC,EAAuB,IAEE,CAC9B,MAAAC,EAAIC,aAAWJ,CAAwB,EAC7C,GAAI,CAACG,EACH,MAAM,IAAI,MACR,oFAAA,EAGG,OAAAA,CACT,ECdaE,EAA8BJ,gBAEzC,IAAgD,EAErCK,EAA0B,IAAM,CACrC,MAAAH,EAAIC,aAAWC,CAA2B,EAChD,GAAI,CAACF,EACG,MAAA,IAAI,MAAM,yCAAyC,EAEpD,OAAAA,CACT,ECVaI,EAA6BN,gBAExC,IAAoD,EAEzCO,EAAyB,IAG/B,CACC,MAAAL,EAAIC,aAAWG,CAA0B,EAC/C,GAAI,CAACJ,EACG,MAAA,IAAI,MAAM,wCAAwC,EAEnD,OAAAA,CACT,ECAaM,GAAwD,CAAC,CACpE,SAAAC,EACA,OAAArB,EACA,mBAAAsB,KACGC,CACL,IAAM,CACE,KAAA,CACJ,SAAU,CAAE,KAAAC,CAAK,GACfX,EAAqB,EACnBY,EAAWR,IACXS,EAAUP,IAEVQ,EAAcC,EAAAA,YAAY,IAAM,CAC3BH,EAAAC,EAAQ,cAAc,CAAA,EAC9B,CAACA,EAASD,CAAQ,CAAC,EAGpB,OAAAvB,EAAA,IAAC2B,EAAA,OAAA,CACC,SAAQ,GACR,OAAQL,EACR,eAAgBG,EACf,GAAGJ,EAEJ,SAAAlB,EAAA,KAACyB,EAAA,OAAA,CACC,OAAQ,OACR,aAAc,4BACd,WAAY1B,WAAS,oBAAoB,EAEzC,SAAA,CAAAF,EAAA,IAACJ,EAAA,CACC,eAAgB6B,EAChB,OAAA3B,EACA,aAAcsB,CAAA,CAChB,EACApB,MAAC6B,EAAAA,KAAI,QAAS,EAAG,OAAQ,EAAG,IAAK,EAC9B,SAAAV,EACH,CAAA,CAAA,CACF,CAAA,CAAA,CAGN,EC3CaW,GAA8D,CAAC,CAC1E,MAAAC,EAAQ,UACR,SAAAC,EAAWC,EAAA,gBACb,IAAM,CACJ,MAAMV,EAAWR,IACXS,EAAUP,IAEViB,EAAgBR,EAAAA,YAAY,IAAM,CAC7BH,EAAAC,EAAQ,aAAa,CAAA,EAC7B,CAACA,EAASD,CAAQ,CAAC,EAGpB,OAAAvB,EAAA,IAACmC,EAAA,gBAAA,CACC,MAAAJ,EACA,SAAAC,EACA,QAASE,CAAA,CAAA,CAGf,ECJaE,EAAsB,SAEjC,CACA,UAAAC,EACA,MAAAN,EACA,QAAAO,EACA,MAAAC,EACA,QAAAC,EACA,sBAAAC,EACA,SAAAtB,EACA,SAAAa,EACA,aAAAjC,CACF,EAA6D,OAC3D,MAAM2C,EAAQ/B,IACRY,EAAWR,IACXS,EAAUP,IAEV0B,GAAWC,EAAAF,EAAM,iBAAiB,OAAOL,KAA9B,KAAAO,EAA4C,GAEvDC,EAAenB,EAAAA,YAAY,IAAM,CACrCH,EAASC,EAAQ,mBAAmBa,EAAW,CAACM,CAAQ,CAAC,GACxD,CAACnB,EAASD,EAAUoB,EAAUN,CAAS,CAAC,EAErCS,EAAcf,GAAA,KAAAA,EAASgB,EAAgCV,CAAS,EAEtE,OAEIlC,EAAA,KAAA6C,WAAA,CAAA,SAAA,CAAAhD,EAAA,IAACiD,EAAA,WAAA,CACC,MAAOH,EACP,SAAAd,EACA,WAAU,GACV,SAAAW,EACA,SAAUA,EACV,QAASE,EACT,MAAO9C,EAEN,SACCuC,EAAAtC,EAAAA,IAACI,EAAI,IAAA,CAAA,QAAO,GAAC,eAAgB,SAAU,KAAM,EAC3C,eAAC8C,EAAAA,QAAQ,CAAA,KAAM,QAAS,CAAA,CAC1B,EACEX,EACFvC,EAAA,IAACmD,EAAA,OAAA,CACC,QAAS,QACT,KAAMZ,EACN,aACEC,EAAWxC,EAAA,IAAAO,aAAA,CAAW,MAAO,QAAS,QAASiC,CAAS,CAAA,EAAK,IAAA,CAAA,EAIjErB,CAEA,CAEJ,EACCwB,SAAatC,EAAM,MAAA,EAAA,CACtB,CAAA,CAAA,CAEJ,EAEa0C,EAAmCK,GAC9CC,aAAWC,EAAAA,UAAUF,CAAQ,CAAC,EC9EnBG,GAAkD,CAAC,CAC9D,SAAApC,KACGqC,CACL,IAEIxD,EAAA,IAAC4B,EAAA,OAAA,CACC,MAAO,CAAE,UAAW,MAAO,EAC3B,eAAgB,SAChB,QAAS,EACT,OAAM,GACN,OAAQ,UACR,OAAQ,EACP,GAAG4B,EAEH,SAAArC,CAAA,CAAA,ECpBMsC,EAA2B/C,gBAAuB,IAAe,EAEjEgD,GAAuB,IAA8B,CAC1D,MAAA9C,EAAIC,aAAW4C,CAAwB,EAC7C,GAAI,CAAC7C,EACH,MAAM,IAAI,MACR,oFAAA,EAGG,OAAAA,CACT,ECMa+C,EAAsB,SAGjC,CACA,MAAAjB,EACA,SAAAnB,EACA,QAAAC,EACA,SAAAL,CACF,EAAuE,CAEnE,OAAAnB,EAAA,IAACc,EAA4B,SAA5B,CACC,MAAOS,EAEP,SAAAvB,EAAA,IAACgB,EAA2B,SAA3B,CAAoC,MAAOQ,EAC1C,SAAAxB,EAAAA,IAACS,EAAyB,SAAzB,CAAkC,MAAOiC,EACxC,SAAA1C,EAAAA,IAACyD,EAAyB,SAAzB,CAAkC,MAAOf,EAAM,UAC7C,SAAAvB,EACH,CAAA,CACF,CACF,CAAA,CAAA,CAAA,CAGN,ECLayC,EACXC,IACmC,CACnC,SAAU,CACR,KAAM,EACR,EACA,UAAWA,EACX,iBAAkB,CAAE,OAAQ,EAAG,CACjC,GAEaC,EAA4B,CACvCC,EACAC,IAEAC,kBAAgB,CACd,iBAAkBC,EAAA,cAChBC,EAAgBJ,EAAW,kBAAkB,EAC7CK,EAAA,uBAAgCJ,EAAa,gBAAgB,CAC/D,EACA,UAAWE,EAAA,cACTC,EAAgBJ,EAAW,WAAW,EACtCM,EAAA,oBAAgCL,EAAa,SAAS,CACxD,EACA,SAAUE,EAAA,cACRC,EAAgBJ,EAAW,UAAU,EACrCM,EAAA,oBAA0CL,EAAa,QAAQ,CACjE,CACF,CAAC,EAkBUM,EAA4B,CAIvCP,EACAF,KACkD,CAClD,YAAa,IACXU,EAAA,oBACEJ,EAAgBJ,EAAW,UAAU,EACrCS,EAAA,oBAAA,EAA4C,gBAAgB,CAC1D,KAAM,EAAA,CACP,CACH,EACF,aAAc,IACZD,EAAA,oBACEJ,EAAgBJ,EAAW,UAAU,EACrCS,EAAA,oBAAA,EAA4C,gBAAgB,CAC1D,KAAM,EAAA,CACP,CACH,EACF,mBAAqBC,GACnBF,EAAA,oBACEJ,EAAgBJ,EAAW,WAAW,EACtCS,sBAAkC,EAAA,gBAAgBC,CAAM,CAC1D,EACF,eAAgB,IACdF,EAAA,oBACEJ,EAAgBJ,EAAW,WAAW,EACtCS,sBAAkC,EAAA,UAAUX,CAAgB,CAC9D,EACF,cAAgBa,GACdH,EAAA,oBACEJ,EAAgBJ,EAAW,kBAAkB,EAC7CY,EAAAA,yBAAkC,SAASD,EAAS,EAAI,CAC1D,EACF,gBAAkBA,GAChBH,EAAA,oBACEJ,EAAgBJ,EAAW,kBAAkB,EAC7CY,EAAAA,yBAAkC,SAASD,EAAS,EAAK,CAC3D,EACF,mBAAoB,CAACA,EAAsB/B,IACzC4B,EAAA,oBACEJ,EAAgBJ,EAAW,kBAAkB,EAC7CY,EAAAA,yBAAkC,SAASD,EAAS/B,CAAQ,CAC9D,EACF,sBAAuB,IACrB4B,EAAA,oBACEJ,EAAgBJ,EAAW,kBAAkB,EAC7CY,EAAA,uBAAA,EAAkC,eAAe,CACnD,CACJ,GAEaR,EAAkB,CAC7BJ,EACAa,IACW,GAAGb,KAAaa,ICjIhBC,EAIXb,GACG,CACG,KAAA,CAACc,CAAO,EAAIC,EAAA,SAAS,IACzBjB,EAAsC,QAASE,CAAY,CAAA,EAGvD,CAACxC,CAAO,EAAIuD,EAAA,SAAS,IACzBT,EACE,QACAN,EAAa,SACf,CAAA,EAGI,CAACtB,EAAOnB,CAAQ,EAAIyD,EAAAA,WAAWF,EAASd,CAAY,EAEnD,MAAA,CACL,QAAAxC,EACA,MAAAkB,EACA,SAAAnB,CAAA,CAEJ,ECrBa0D,GAAgC,SAE3C,CACA,iBAAApB,EACA,SAAA1C,CACF,EAA+D,CAC7D,KAAM,CAAE,MAAAuB,EAAO,QAAAlB,EAAS,SAAAD,CAAa,EAAAsD,EACnCjB,EAA+BC,CAAgB,CAAA,EAGjD,OACG7D,EAAAA,IAAA2D,EAAA,CAAoB,MAAAjB,EAAc,QAAAlB,EAAkB,SAAAD,EAClD,SAAAJ,CACH,CAAA,CAEJ,ECvBa+D,EAAaC,GAAO,QAAA;AAAA;AAAA;AAAA,ECWpBC,GAAsD,CAAC,CAClE,SAAAjE,EACA,sBAAAkE,EAAwB,EAC1B,IAAM,CACJ,MAAM9D,EAAWR,IACXS,EAAUP,IAEVqE,EAAkB5D,EAAA,YACtB,IAAMH,EAASC,EAAQ,gBAAgB,EACvC,CAACA,EAASD,CAAQ,CAAA,EAIlB,OAAApB,EAAA,KAACC,EAAI,IAAA,CAAA,SAAU,OACZ,SAAA,CAAAe,EACA,CAACkE,GACArF,EAAA,IAACkF,EACC,CAAA,SAAAlF,EAAA,IAACO,EAAA,WAAA,CACC,KAAM,QACN,MAAO,YACP,QAAS+E,CAAA,CAAA,EAEb,CAEJ,CAAA,CAAA,CAEJ,EC3BaC,EAAY,SAA+C,CACtE,MAAAxD,EACA,UAAAM,CACF,EAAgC,CAC9B,MAAMd,EAAWR,IACXS,EAAUP,IAEV4B,EAAenB,EAAAA,YAAY,IAAM,CAC5BH,EAAAC,EAAQ,uBAAuB,EAC/BD,EAAAC,EAAQ,cAAca,CAAS,CAAC,EAChCd,EAAAC,EAAQ,aAAa,CAC7B,EAAA,CAACA,EAASD,EAAUc,CAAS,CAAC,EAG/B,OAAArC,EAAA,IAACkF,GACC,SAAClF,EAAAA,IAAAwF,EAAAA,KAAA,CAAK,MAAAzD,EAAc,QAAS,YAAa,QAASc,CAAc,CAAA,CACnE,CAAA,CAEJ,ECfa4C,EAAmB,SAG9B,CACA,UAAApD,EACA,MAAAN,EACA,MAAA2D,EACA,cAAAC,CACF,EAAmD,CACjD,MAAMpE,EAAWR,IACXS,EAAUP,IAEV2E,EAAqBlE,EAAA,YACxB+C,GACClD,EAASC,EAAQ,mBAAmBiD,CAAM,CAAC,EAC7C,CAAClD,EAAUC,CAAO,CAAA,EAGdqE,EAAuBnE,EAAAA,YAAY,IAAM,CAC7BiE,GAAA,MAAAA,EAAA,CAAE,MAAAD,EAAO,mBAAAE,CAAA,EACxB,EAAA,CAACD,EAAeC,EAAoBF,CAAK,CAAC,EAEvC7C,EAAenB,EAAAA,YAAY,IAAM,CAC5BH,EAAAC,EAAQ,uBAAuB,EAC/BD,EAAAC,EAAQ,cAAca,CAAS,CAAC,EAChCd,EAAAC,EAAQ,aAAa,CAC7B,EAAA,CAACA,EAASD,EAAUc,CAAS,CAAC,EAEjC,aACG6C,EACC,CAAA,SAAAlF,EAAA,IAACwF,EAAA,KAAA,CACC,MAAOzD,GAAA,KAAAA,EAASM,EAChB,QAASQ,EACT,cAAe8C,EAAgBE,EAAuB,MAAA,CAE1D,CAAA,CAAA,CAEJ,ECrCaC,GAAe,SAG1B,CACA,UAAAzD,EACA,MAAA0D,EACA,eAAAC,EACA,oBAAAC,CACF,EAA+C,CACzC,OAACF,GAAA,MAAAA,EAAO,yBASP,SAAMA,EAAA,IAAI,CAAC,CAAE,MAAAhE,EAAO,MAAA2D,KACnB1F,EAAA,IAACyF,EAAA,CAEC,MAAO1D,GAAA,KAAAA,EAASM,EAChB,UAAAA,EACA,cAAe4D,EACf,MAAAP,CAAA,EAJKA,CAMR,CAAA,CACH,CAAA,EAjBKM,EAGGhG,EAAAA,IAAAuF,EAAA,CAAU,UAAAlD,EAAsB,MAAO2D,CAAgB,CAAA,EAFtD,IAkBb,ECpCaE,GAAmC,CAK9CC,EACAC,EACAC,KAII,CACJ,MAAOC,EACLH,EAAUC,GACVC,CACF,EACA,oBAAqBE,EACnBJ,EACAC,CACF,CACF,GAEaE,EAA8B,CACzCE,EACAH,IAEAI,EAAAA,iBAAiBD,CAAa,EAAE,IAAKE,GAAQ,OAC3C,MAAMC,EAASN,GAAA,YAAAA,EAAS,KAAM,GAAM,EAAE,QAAUK,GAChD,MAAO,CAAE,MAAOA,EAAK,OAAO9D,EAAA+D,GAAA,YAAAA,EAAQ,QAAR,KAAA/D,EAAiB8D,EAC/C,CAAC,EAEUH,EAA4C,CAIvDJ,EACAC,IAEO,CAAC,CAAE,mBAAAR,EAAoB,MAAAF,KAAY,CACxC,MAAMkB,EAAY,CAAE,GAAGT,EAAUC,EAAW,EAC5CQ,EAAUlB,GAAS,GACAE,EAAA,CACjB,CAACQ,GAAYQ,CAAA,CACoB,CAAA,ECjC1BC,GAA4B,CAA6B,CACpE,QAAAR,EACA,MAAAX,EACA,cAAAoB,KACGC,CACL,IACE/G,EAAAA,IAACoC,EAAoB,CAAA,sBAAqB,GAAE,GAAG2E,EAC7C,SAAC/G,EAAAA,IAAA4B,EAAAA,OAAA,CAAO,UAAW,QAAS,UAAW,OAAQ,KAAM,EAAG,IAAK,EAAG,QAAS,EACtE,SAAAyE,GAAA,YAAAA,EAAS,IAAKW,GACbhH,EAAAA,IAACI,EAAAA,IAAkB,CAAA,WAAY,SAC7B,SAAAJ,EAAA,IAACiH,EAAA,kBAAA,CACC,SAAU,GACV,MAAOvB,GAAA,YAAAA,EAAQsB,EAAE,OACjB,MAAOA,EAAE,MACT,cAAgBE,GACdJ,GAAA,YAAAA,EAAgB,CACd,GAAGpB,EACH,CAACsB,EAAE,OAAQE,CAAA,EACZ,CAEL,CAAA,EAXQF,EAAE,KAYZ,EAEJ,CAAA,CACF,CAAA,ECxBWG,GAAyB,CAA6B,CACjE,QAAAd,EACA,MAAAX,EACA,kBAAA0B,EACA,cAAAN,KACGC,CACL,IAAoE,CAClE,KAAM,CAACM,EAAMC,CAAO,EAAIvC,WAAiB,EAAE,EAErCwC,EAAYC,EAAA,QAChB,IACE9B,EACIe,EAAAA,iBAAiBf,CAAK,EAAE,IAA2BgB,GAAQ,OACzD,MAAMC,EAASN,GAAA,YAAAA,EAAS,KAAMoB,GAAMA,EAAE,QAAUf,GAChD,MAAO,CAAE,MAAOA,EAAK,OAAO9D,EAAA+D,GAAA,YAAAA,EAAQ,QAAR,KAAA/D,EAAiB8D,EAC9C,CAAA,EACD,CAAC,EACP,CAACL,EAASX,CAAK,CAAA,EAGXgC,EAAkBF,EAAAA,QAAQ,IACvBnB,GAAA,YAAAA,EAAS,OACbsB,GACCA,EAAE,MAAM,kBAAoB,EAAA,QAAQN,EAAK,mBAAmB,EAAI,IAChEM,EAAE,MAAM,kBAAkB,EAAE,QAAQN,EAAK,mBAAmB,EAAI,IAEnE,CAAChB,EAASgB,CAAI,CAAC,EAEZO,EAAwBlG,EAAA,YAC3BgE,GAAuC,CACtBoB,GAAA,MAAAA,EAAAe,GAA6BnC,CAAK,EACpD,EACA,CAACoB,CAAa,CAAA,EAId,OAAA9G,EAAA,IAACoC,EAAqB,CAAA,GAAG2E,EACvB,SAAA/G,EAAA,IAAC8H,EAAA,gBAAA,CACC,QAASJ,EACT,MAAOH,EACP,cAAeK,EACf,WAAYP,EACZ,kBAAAD,EACA,cAAeE,EACf,kBAAmB,EAAA,CAEvB,CAAA,CAAA,CAEJ,EAEMO,GACJnC,GAEOA,EAAM,OAAsB,CAACqC,EAAKC,KACvCD,EAAIC,EAAK,OAAS,GACXD,GACN,CAAE,CAAA,ECnEME,GAA+B,CAK1C9B,EACA+B,EACAC,KAII,CACJ,MAAOC,EACLjC,EAAU+B,GACV/B,EAAUgC,EACZ,EACA,oBAAqBE,EACnBH,EACAC,CACF,CACF,GAEaC,EAA0B,CACrCE,EACAC,IAEI,CAACD,GAAa,CAACC,EACV,GAEF,CACL,CAAE,MAAO,YAAa,MAAO,GAAGD,GAAA,KAAAA,EAAa,QAAQC,GAAA,KAAAA,EAAW,IAAK,CAAA,EAI5DF,EAAwC,CAInDH,EACAC,IAEO,CAAC,CAAE,mBAAAvC,KAAyB,CACdA,EAAA,CACjB,CAACsC,GAAqB,OACtB,CAACC,GAAmB,MAAA,CACa,CAAA,ECjD1BK,GAA8B,CAKzCrC,EACA+B,EACAC,KAII,CACJ,MAAO,CACL,UAAWhC,EAAU+B,GACrB,QAAS/B,EAAUgC,EACrB,EACA,cAAe,CAACzC,EAAO,CAAE,SAAAnE,EAAU,QAAAC,KAAc,CAC/C,MAAMiD,EAA8B,CAClC,CAACyD,GAAqBxC,EAAM,UAC5B,CAACyC,GAAmBzC,EAAM,OAAA,EAEnBnE,EAAAC,EAAQ,mBAAmBiD,CAAM,CAAC,CAC7C,CACF,GCqBagE,GAA2B,CAGtC,CACA,MAAA/C,EACA,cAAAoB,EACA,UAAAzE,EACA,aAAAtC,EACA,sBAAA0C,EACA,MAAAV,EACA,SAAAC,KACG0G,CACL,IAA8D,CAC5D,MAAMnH,EAAWR,IACXS,EAAUP,IAEVoF,EAAUmB,EAAA,QACd,KAAO,CAAE,SAAAjG,EAAU,QAAAC,IACnB,CAACA,EAASD,CAAQ,CAAA,EAEd,CAACoH,EAAcC,CAAe,EAClC7D,WAAgC,WAAW,EAEvC8D,EAAiBrB,EAAAA,QAAQ,IAAMsB,EAAAA,mBAAmBpD,CAAK,EAAG,CAACA,CAAK,CAAC,EAEjEqD,EAAuBrH,EAAA,YAC1BgE,GAAqB,CACNoB,EAAAkC,EAAA,mBAAmBtD,CAAK,EAAGW,CAAO,CAClD,EACA,CAACS,EAAeT,CAAO,CAAA,EAIvB,OAAArG,EAAA,IAACoC,EAAA,CACC,MAAAL,EACA,SAAAC,EACA,UAAAK,EACA,aAAAtC,EACA,sBAAA0C,EAEA,SAAAzC,EAAA,IAAC6B,MAAI,CAAA,KAAM,EAAG,WAAY,SACxB,SAAA7B,EAAAA,IAAC6B,EAAAA,IAAI,CAAA,WAAY,QAAS,OAAM,GAC9B,SAAA7B,EAAA,IAACiJ,EAAA,kBAAA,CACC,gBAAAL,EACA,aAAAD,EACA,MAAOE,EACP,cAAeE,EACd,GAAGL,CAAA,GAER,CACF,CAAA,CAAA,CAAA,CAGN"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stenajs-webui/filter",
3
- "version": "19.0.0-next.12",
3
+ "version": "19.0.0-next.13",
4
4
  "description": "",
5
5
  "author": "mattias800",
6
6
  "license": "MIT",
@@ -26,15 +26,15 @@
26
26
  "deploy": "gh-pages -d example/build"
27
27
  },
28
28
  "dependencies": {
29
- "@stenajs-webui/calendar": "19.0.0-next.12",
30
- "@stenajs-webui/core": "19.0.0-next.12",
31
- "@stenajs-webui/elements": "19.0.0-next.12",
32
- "@stenajs-webui/forms": "19.0.0-next.12",
33
- "@stenajs-webui/modal": "19.0.0-next.12",
34
- "@stenajs-webui/panels": "19.0.0-next.12",
35
- "@stenajs-webui/redux": "19.0.0-next.12",
36
- "@stenajs-webui/select": "19.0.0-next.12",
37
- "@stenajs-webui/theme": "19.0.0-next.12",
29
+ "@stenajs-webui/calendar": "19.0.0-next.13",
30
+ "@stenajs-webui/core": "19.0.0-next.13",
31
+ "@stenajs-webui/elements": "19.0.0-next.13",
32
+ "@stenajs-webui/forms": "19.0.0-next.13",
33
+ "@stenajs-webui/modal": "19.0.0-next.13",
34
+ "@stenajs-webui/panels": "19.0.0-next.13",
35
+ "@stenajs-webui/redux": "19.0.0-next.13",
36
+ "@stenajs-webui/select": "19.0.0-next.13",
37
+ "@stenajs-webui/theme": "19.0.0-next.13",
38
38
  "date-fns": "2.26.0"
39
39
  },
40
40
  "peerDependencies": {
@@ -65,5 +65,5 @@
65
65
  "files": [
66
66
  "dist"
67
67
  ],
68
- "gitHead": "5f3bcbfadc816d5ac26b94b556c64ccea4b185ee"
68
+ "gitHead": "55e05b5f7db76c2114582b386d1dd807c20ff7de"
69
69
  }