@uniformdev/design-system 19.134.3-alpha.28 → 19.135.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js CHANGED
@@ -20714,8 +20714,8 @@ var FilterButton2 = ({
20714
20714
  };
20715
20715
 
20716
20716
  // src/components/SearchAndFilter/FilterControls.tsx
20717
- import { useEffect as useEffect19, useState as useState18 } from "react";
20718
- import { useDebounce as useDebounce3, useEffectOnce } from "react-use";
20717
+ import { useEffect as useEffect18, useState as useState17 } from "react";
20718
+ import { useDebounce as useDebounce2, useEffectOnce } from "react-use";
20719
20719
 
20720
20720
  // src/components/SearchAndFilter/hooks/useSearchAndFilter.tsx
20721
20721
  import {
@@ -20723,14 +20723,231 @@ import {
20723
20723
  useCallback as useCallback10,
20724
20724
  useContext as useContext7,
20725
20725
  useDeferredValue as useDeferredValue2,
20726
- useEffect as useEffect18,
20726
+ useEffect as useEffect17,
20727
20727
  useMemo as useMemo6,
20728
- useState as useState17
20728
+ useState as useState16
20729
20729
  } from "react";
20730
+ import { jsx as jsx119 } from "@emotion/react/jsx-runtime";
20731
+ var SearchAndFilterContext = createContext6({
20732
+ searchTerm: "",
20733
+ setSearchTerm: () => {
20734
+ },
20735
+ filterVisibility: void 0,
20736
+ setFilterVisibility: () => {
20737
+ },
20738
+ filters: [],
20739
+ setFilters: () => {
20740
+ },
20741
+ handleAddFilter: () => {
20742
+ },
20743
+ handleResetFilters: () => {
20744
+ },
20745
+ handleDeleteFilter: () => {
20746
+ },
20747
+ setSortBy: () => {
20748
+ },
20749
+ sortByValue: "",
20750
+ filterOptions: [],
20751
+ sortOptions: [],
20752
+ validFilterQuery: [],
20753
+ totalResults: 0
20754
+ });
20755
+ var SearchAndFilterProvider = ({
20756
+ filters,
20757
+ filterOptions,
20758
+ sortOptions,
20759
+ defaultSortByValue,
20760
+ filterMode: filterMode3 = void 0,
20761
+ onSearchChange,
20762
+ onChange,
20763
+ onSortChange,
20764
+ resetFilterValues = [],
20765
+ totalResults,
20766
+ children
20767
+ }) => {
20768
+ const [searchTerm, setSearchTerm] = useState16("");
20769
+ const deferredSearchTerm = useDeferredValue2(searchTerm);
20770
+ const [filterVisibility, setFilterVisibility] = useState16(filterMode3);
20771
+ const [sortByValue, setSortByValue] = useState16(defaultSortByValue);
20772
+ const handleSearchTerm = useCallback10(
20773
+ (term) => {
20774
+ setSearchTerm(term);
20775
+ onSearchChange == null ? void 0 : onSearchChange(term);
20776
+ },
20777
+ [setSearchTerm, onSearchChange]
20778
+ );
20779
+ const handleOnSortChange = useCallback10(
20780
+ (sort) => {
20781
+ setSortByValue(sort);
20782
+ onSortChange(sort);
20783
+ },
20784
+ [onSortChange]
20785
+ );
20786
+ const handleToggleFilterVisibilty = useCallback10(
20787
+ (mode) => setFilterVisibility(mode),
20788
+ [setFilterVisibility]
20789
+ );
20790
+ const handleAddFilter = useCallback10(() => {
20791
+ onChange([...filters, { field: "", operator: "", value: "" }]);
20792
+ }, [filters, onChange]);
20793
+ const handleResetFilters = useCallback10(() => {
20794
+ onChange(resetFilterValues);
20795
+ }, [onChange, resetFilterValues]);
20796
+ const handleDeleteFilter = useCallback10(
20797
+ (index) => {
20798
+ const remainingFilters = filters.filter((_, i) => i !== index);
20799
+ onChange(remainingFilters);
20800
+ },
20801
+ [filters, onChange]
20802
+ );
20803
+ const validFilterQuery = useMemo6(() => {
20804
+ const hasValidFilters = filters.every((f) => f.field && f.operator && f.value);
20805
+ if (hasValidFilters) {
20806
+ return filters;
20807
+ }
20808
+ }, [filters]);
20809
+ useEffect17(() => {
20810
+ if (filterVisibility) {
20811
+ const handleEscKeyFilterClose = (e) => {
20812
+ if (e.key === "Escape") {
20813
+ setFilterVisibility(void 0);
20814
+ }
20815
+ };
20816
+ document.addEventListener("keydown", (e) => handleEscKeyFilterClose(e));
20817
+ return () => {
20818
+ document.removeEventListener("keydown", (e) => handleEscKeyFilterClose(e));
20819
+ };
20820
+ }
20821
+ }, [filterVisibility]);
20822
+ return /* @__PURE__ */ jsx119(
20823
+ SearchAndFilterContext.Provider,
20824
+ {
20825
+ value: {
20826
+ searchTerm: deferredSearchTerm,
20827
+ setSearchTerm: (e) => handleSearchTerm(e),
20828
+ setSortBy: (e) => handleOnSortChange(e),
20829
+ sortByValue,
20830
+ filterVisibility,
20831
+ setFilterVisibility: (e) => handleToggleFilterVisibilty(e),
20832
+ filters,
20833
+ setFilters: (e) => onChange(e),
20834
+ handleAddFilter,
20835
+ handleResetFilters,
20836
+ handleDeleteFilter,
20837
+ filterOptions,
20838
+ sortOptions,
20839
+ validFilterQuery,
20840
+ totalResults
20841
+ },
20842
+ children: /* @__PURE__ */ jsx119(VerticalRhythm, { children })
20843
+ }
20844
+ );
20845
+ };
20846
+ var useSearchAndFilter = () => {
20847
+ const value = useContext7(SearchAndFilterContext);
20848
+ return { ...value };
20849
+ };
20850
+
20851
+ // src/components/SearchAndFilter/FilterControls.tsx
20852
+ import { Fragment as Fragment19, jsx as jsx120, jsxs as jsxs81 } from "@emotion/react/jsx-runtime";
20853
+ var FilterControls = ({
20854
+ children,
20855
+ defaultSortByValue,
20856
+ hideSearchInput
20857
+ }) => {
20858
+ var _a, _b, _c;
20859
+ const {
20860
+ setFilterVisibility,
20861
+ filterVisibility,
20862
+ setSearchTerm,
20863
+ validFilterQuery,
20864
+ searchTerm,
20865
+ sortByValue,
20866
+ filterOptions
20867
+ } = useSearchAndFilter();
20868
+ const [initialSortValue, setInitialSortValue] = useState17(sortByValue);
20869
+ const [localeSearchTerm, setLocaleSearchTerm] = useState17("");
20870
+ const [userHasChangedSortByValue, setUserHasChangedSortByValue] = useState17(false);
20871
+ useDebounce2(
20872
+ () => {
20873
+ setSearchTerm(localeSearchTerm);
20874
+ },
20875
+ 300,
20876
+ [localeSearchTerm, searchTerm]
20877
+ );
20878
+ useEffect18(() => {
20879
+ if (searchTerm === "") {
20880
+ setLocaleSearchTerm("");
20881
+ }
20882
+ }, [searchTerm]);
20883
+ const handleFilterToggle = (mode) => {
20884
+ if (filterVisibility === "filters" && mode === "filters" || filterVisibility === "sort" && mode === "sort") {
20885
+ return setFilterVisibility(void 0);
20886
+ }
20887
+ return setFilterVisibility(mode);
20888
+ };
20889
+ const sortValue = (sortByValue != null ? sortByValue : defaultSortByValue).split("_");
20890
+ const sortDirection = sortValue == null ? void 0 : sortValue.pop();
20891
+ const sortField = sortValue == null ? void 0 : sortValue.join("_");
20892
+ const sortOn = sortField.startsWith("fields.") ? "contentTypeFields" : "metadata";
20893
+ const sortByValueLabel = (_c = (_b = (_a = filterOptions == null ? void 0 : filterOptions.find((op) => op.value === sortOn)) == null ? void 0 : _a.options) == null ? void 0 : _b.find((f) => f.value === sortField)) == null ? void 0 : _c.label;
20894
+ const sortByIcon = userHasChangedSortByValue ? sortDirection === "ASC" ? "arrow-up" : "arrow-down" : "sort-az";
20895
+ useEffectOnce(() => {
20896
+ setInitialSortValue(sortByValue);
20897
+ });
20898
+ useEffect18(() => {
20899
+ if (initialSortValue !== sortByValue) {
20900
+ setUserHasChangedSortByValue(true);
20901
+ }
20902
+ }, [initialSortValue, sortByValue]);
20903
+ return /* @__PURE__ */ jsxs81(Fragment19, { children: [
20904
+ /* @__PURE__ */ jsx120(
20905
+ FilterButton2,
20906
+ {
20907
+ "aria-controls": "search-and-filter-options",
20908
+ "aria-label": "filter options",
20909
+ "aria-haspopup": "true",
20910
+ "aria-expanded": filterVisibility === "filters",
20911
+ filterCount: validFilterQuery == null ? void 0 : validFilterQuery.length,
20912
+ onClick: () => handleFilterToggle("filters"),
20913
+ dataTestId: "filters-button"
20914
+ }
20915
+ ),
20916
+ /* @__PURE__ */ jsx120(
20917
+ FilterButton2,
20918
+ {
20919
+ "aria-controls": "search-and-filter-sortBy",
20920
+ "aria-label": "sort by options",
20921
+ "aria-haspopup": "true",
20922
+ text: !userHasChangedSortByValue ? "Sort" : sortByValueLabel,
20923
+ icon: sortByIcon,
20924
+ "aria-expanded": filterVisibility === "sort",
20925
+ hasSelectedValue: sortByValue !== "",
20926
+ onClick: () => handleFilterToggle("sort"),
20927
+ dataTestId: "sort-by-button"
20928
+ }
20929
+ ),
20930
+ hideSearchInput ? null : /* @__PURE__ */ jsx120(
20931
+ InputKeywordSearch,
20932
+ {
20933
+ placeholder: "Search...",
20934
+ onSearchTextChanged: (e) => setLocaleSearchTerm(e),
20935
+ value: localeSearchTerm,
20936
+ compact: true,
20937
+ rounded: true,
20938
+ css: SearchInput
20939
+ }
20940
+ ),
20941
+ children
20942
+ ] });
20943
+ };
20944
+
20945
+ // src/components/SearchAndFilter/FilterItem.tsx
20946
+ import { useMemo as useMemo7 } from "react";
20730
20947
 
20731
20948
  // src/components/SearchAndFilter/FilterEditor.tsx
20732
- import { useEffect as useEffect17, useState as useState16 } from "react";
20733
- import { useDebounce as useDebounce2 } from "react-use";
20949
+ import { useEffect as useEffect19, useState as useState18 } from "react";
20950
+ import { useDebounce as useDebounce3 } from "react-use";
20734
20951
 
20735
20952
  // src/components/Validation/StatusBullet.styles.ts
20736
20953
  import { css as css93 } from "@emotion/react";
@@ -20812,7 +21029,7 @@ var StatusDeleted = css93`
20812
21029
  `;
20813
21030
 
20814
21031
  // src/components/Validation/StatusBullet.tsx
20815
- import { jsx as jsx119 } from "@emotion/react/jsx-runtime";
21032
+ import { jsx as jsx121 } from "@emotion/react/jsx-runtime";
20816
21033
  var StatusBullet = ({
20817
21034
  status,
20818
21035
  hideText = false,
@@ -20832,7 +21049,7 @@ var StatusBullet = ({
20832
21049
  Deleted: StatusDeleted
20833
21050
  };
20834
21051
  const statusSize = size === "base" ? StatusBulletBase : StatusBulletSmall;
20835
- return /* @__PURE__ */ jsx119(
21052
+ return /* @__PURE__ */ jsx121(
20836
21053
  "span",
20837
21054
  {
20838
21055
  role: "status",
@@ -20845,7 +21062,7 @@ var StatusBullet = ({
20845
21062
  };
20846
21063
 
20847
21064
  // src/components/SearchAndFilter/FilterEditor.tsx
20848
- import { Fragment as Fragment19, jsx as jsx120, jsxs as jsxs81 } from "@emotion/react/jsx-runtime";
21065
+ import { Fragment as Fragment20, jsx as jsx122, jsxs as jsxs82 } from "@emotion/react/jsx-runtime";
20849
21066
  var readOnlyAttributes = {
20850
21067
  isSearchable: false,
20851
21068
  menuIsOpen: false,
@@ -20854,13 +21071,13 @@ var readOnlyAttributes = {
20854
21071
  var FilterMultiChoiceEditor = ({
20855
21072
  value,
20856
21073
  options,
20857
- disabled: disabled2,
21074
+ isDisabled,
20858
21075
  readOnly,
20859
21076
  valueTestId,
20860
21077
  ...props
20861
21078
  }) => {
20862
21079
  const readOnlyProps = readOnly ? readOnlyAttributes : {};
20863
- return /* @__PURE__ */ jsx120("div", { "data-testid": valueTestId, children: /* @__PURE__ */ jsx120(
21080
+ return /* @__PURE__ */ jsx122("div", { "data-testid": valueTestId, children: /* @__PURE__ */ jsx122(
20864
21081
  InputComboBox,
20865
21082
  {
20866
21083
  ...props,
@@ -20868,12 +21085,12 @@ var FilterMultiChoiceEditor = ({
20868
21085
  options,
20869
21086
  isMulti: true,
20870
21087
  isClearable: true,
20871
- isDisabled: disabled2,
21088
+ isDisabled,
20872
21089
  onChange: (e) => {
20873
21090
  var _a;
20874
- return props.onChange((_a = e == null ? void 0 : e.map((option) => option.value)) != null ? _a : []);
21091
+ return props.onChange((_a = e.map((item) => item.value)) != null ? _a : []);
20875
21092
  },
20876
- value: options == null ? void 0 : options.filter((option) => value == null ? void 0 : value.includes(option.value)),
21093
+ value,
20877
21094
  "aria-readonly": readOnly,
20878
21095
  styles: {
20879
21096
  menu(base) {
@@ -20890,13 +21107,13 @@ var FilterMultiChoiceEditor = ({
20890
21107
  var FilterSingleChoiceEditor = ({
20891
21108
  options,
20892
21109
  value,
20893
- disabled: disabled2,
21110
+ isDisabled,
20894
21111
  readOnly,
20895
21112
  onChange,
20896
21113
  valueTestId
20897
21114
  }) => {
20898
21115
  const readOnlyProps = readOnly ? readOnlyAttributes : {};
20899
- return /* @__PURE__ */ jsx120("div", { "data-testid": valueTestId, children: /* @__PURE__ */ jsx120(
21116
+ return /* @__PURE__ */ jsx122("div", { "data-testid": valueTestId, children: /* @__PURE__ */ jsx122(
20900
21117
  InputComboBox,
20901
21118
  {
20902
21119
  placeholder: "Type to search...",
@@ -20906,8 +21123,8 @@ var FilterSingleChoiceEditor = ({
20906
21123
  var _a;
20907
21124
  return onChange((_a = e == null ? void 0 : e.value) != null ? _a : "");
20908
21125
  },
20909
- isDisabled: disabled2,
20910
- value: options == null ? void 0 : options.find((option) => option.value === value),
21126
+ isDisabled,
21127
+ value,
20911
21128
  "aria-readonly": readOnly,
20912
21129
  styles: {
20913
21130
  menu(base) {
@@ -20922,18 +21139,18 @@ var FilterSingleChoiceEditor = ({
20922
21139
  ) });
20923
21140
  };
20924
21141
  var CustomOptions = ({ label, value }) => {
20925
- return /* @__PURE__ */ jsx120(StatusBullet, { status: label, message: value });
21142
+ return /* @__PURE__ */ jsx122(StatusBullet, { status: label, message: value });
20926
21143
  };
20927
21144
  var StatusMultiEditor = ({
20928
21145
  options,
20929
21146
  value,
20930
- disabled: disabled2,
21147
+ isDisabled,
20931
21148
  readOnly,
20932
21149
  onChange,
20933
21150
  valueTestId
20934
21151
  }) => {
20935
21152
  const readOnlyProps = readOnly ? readOnlyAttributes : {};
20936
- return /* @__PURE__ */ jsx120("div", { "data-testid": valueTestId, children: /* @__PURE__ */ jsx120(
21153
+ return /* @__PURE__ */ jsx122("div", { "data-testid": valueTestId, children: /* @__PURE__ */ jsx122(
20937
21154
  InputComboBox,
20938
21155
  {
20939
21156
  options,
@@ -20943,8 +21160,8 @@ var StatusMultiEditor = ({
20943
21160
  return onChange((_a = e.map((item) => item.value)) != null ? _a : []);
20944
21161
  },
20945
21162
  formatOptionLabel: CustomOptions,
20946
- value: options == null ? void 0 : options.filter((option) => value == null ? void 0 : value.includes(option.value)),
20947
- isDisabled: disabled2,
21163
+ value,
21164
+ isDisabled,
20948
21165
  styles: {
20949
21166
  menu(base) {
20950
21167
  return {
@@ -20960,13 +21177,13 @@ var StatusMultiEditor = ({
20960
21177
  var StatusSingleEditor = ({
20961
21178
  options,
20962
21179
  value,
20963
- disabled: disabled2,
21180
+ isDisabled,
20964
21181
  readOnly,
20965
21182
  onChange,
20966
21183
  valueTestId
20967
21184
  }) => {
20968
21185
  const readOnlyProps = readOnly ? readOnlyAttributes : {};
20969
- return /* @__PURE__ */ jsx120("div", { "data-testid": valueTestId, children: /* @__PURE__ */ jsx120(
21186
+ return /* @__PURE__ */ jsx122("div", { "data-testid": valueTestId, children: /* @__PURE__ */ jsx122(
20970
21187
  InputComboBox,
20971
21188
  {
20972
21189
  options,
@@ -20975,8 +21192,8 @@ var StatusSingleEditor = ({
20975
21192
  return onChange((_a = e == null ? void 0 : e.value) != null ? _a : "");
20976
21193
  },
20977
21194
  formatOptionLabel: CustomOptions,
20978
- value: options == null ? void 0 : options.find((option) => option.value === value),
20979
- isDisabled: disabled2,
21195
+ value,
21196
+ isDisabled,
20980
21197
  styles: {
20981
21198
  menu(base) {
20982
21199
  return {
@@ -20989,15 +21206,9 @@ var StatusSingleEditor = ({
20989
21206
  }
20990
21207
  ) });
20991
21208
  };
20992
- var TextEditor = ({
20993
- onChange,
20994
- ariaLabel,
20995
- value,
20996
- readOnly,
20997
- valueTestId
20998
- }) => {
20999
- useDebounce2(() => onChange, 500, [value]);
21000
- return /* @__PURE__ */ jsx120(
21209
+ var TextEditor = ({ onChange, ariaLabel, value, readOnly, valueTestId }) => {
21210
+ useDebounce3(() => onChange, 500, [value]);
21211
+ return /* @__PURE__ */ jsx122(
21001
21212
  Input,
21002
21213
  {
21003
21214
  showLabel: false,
@@ -21018,10 +21229,10 @@ var NumberRangeEditor = ({
21018
21229
  readOnly,
21019
21230
  valueTestId
21020
21231
  }) => {
21021
- const [minValue, setMinValue] = useState16("");
21022
- const [maxValue, setMaxValue] = useState16("");
21023
- const [error, setError] = useState16("");
21024
- useEffect17(() => {
21232
+ const [minValue, setMinValue] = useState18("");
21233
+ const [maxValue, setMaxValue] = useState18("");
21234
+ const [error, setError] = useState18("");
21235
+ useEffect19(() => {
21025
21236
  if (!maxValue && !minValue) {
21026
21237
  return;
21027
21238
  }
@@ -21040,9 +21251,9 @@ var NumberRangeEditor = ({
21040
21251
  setError("");
21041
21252
  onChange([minValue, maxValue]);
21042
21253
  }, [maxValue, minValue, setError]);
21043
- return /* @__PURE__ */ jsxs81(Fragment19, { children: [
21044
- /* @__PURE__ */ jsxs81("div", { css: twoColumnGrid, "data-testid": valueTestId, children: [
21045
- /* @__PURE__ */ jsx120(
21254
+ return /* @__PURE__ */ jsxs82(Fragment20, { children: [
21255
+ /* @__PURE__ */ jsxs82("div", { css: twoColumnGrid, "data-testid": valueTestId, children: [
21256
+ /* @__PURE__ */ jsx122(
21046
21257
  Input,
21047
21258
  {
21048
21259
  label: `${ariaLabel}-min`,
@@ -21057,7 +21268,7 @@ var NumberRangeEditor = ({
21057
21268
  readOnly
21058
21269
  }
21059
21270
  ),
21060
- /* @__PURE__ */ jsx120(
21271
+ /* @__PURE__ */ jsx122(
21061
21272
  Input,
21062
21273
  {
21063
21274
  type: "number",
@@ -21073,7 +21284,7 @@ var NumberRangeEditor = ({
21073
21284
  }
21074
21285
  )
21075
21286
  ] }),
21076
- /* @__PURE__ */ jsx120(ErrorContainer, { errorMessage: error })
21287
+ /* @__PURE__ */ jsx122(ErrorContainer, { errorMessage: error })
21077
21288
  ] });
21078
21289
  };
21079
21290
  var NumberEditor = ({
@@ -21084,7 +21295,7 @@ var NumberEditor = ({
21084
21295
  readOnly,
21085
21296
  valueTestId
21086
21297
  }) => {
21087
- return /* @__PURE__ */ jsx120(
21298
+ return /* @__PURE__ */ jsx122(
21088
21299
  Input,
21089
21300
  {
21090
21301
  label: ariaLabel,
@@ -21107,7 +21318,7 @@ var DateEditor = ({
21107
21318
  readOnly,
21108
21319
  valueTestId
21109
21320
  }) => {
21110
- return /* @__PURE__ */ jsx120(
21321
+ return /* @__PURE__ */ jsx122(
21111
21322
  Input,
21112
21323
  {
21113
21324
  type: "date",
@@ -21129,10 +21340,10 @@ var DateRangeEditor = ({
21129
21340
  readOnly,
21130
21341
  valueTestId
21131
21342
  }) => {
21132
- const [minDateValue, setMinDateValue] = useState16(value ? value[0] : "");
21133
- const [maxDateValue, setMaxDateValue] = useState16(value ? value[1] : "");
21134
- const [error, setError] = useState16("");
21135
- useEffect17(() => {
21343
+ const [minDateValue, setMinDateValue] = useState18(value ? value[0] : "");
21344
+ const [maxDateValue, setMaxDateValue] = useState18(value ? value[1] : "");
21345
+ const [error, setError] = useState18("");
21346
+ useEffect19(() => {
21136
21347
  if (!minDateValue || !maxDateValue) {
21137
21348
  return;
21138
21349
  }
@@ -21163,9 +21374,9 @@ var DateRangeEditor = ({
21163
21374
  setError("");
21164
21375
  onChange([minDateValue, maxDateValue]);
21165
21376
  }, [minDateValue, maxDateValue, setError]);
21166
- return /* @__PURE__ */ jsxs81(Fragment19, { children: [
21167
- /* @__PURE__ */ jsxs81("div", { css: twoColumnGrid, "data-testid": valueTestId, children: [
21168
- /* @__PURE__ */ jsx120(
21377
+ return /* @__PURE__ */ jsxs82(Fragment20, { children: [
21378
+ /* @__PURE__ */ jsxs82("div", { css: twoColumnGrid, "data-testid": valueTestId, children: [
21379
+ /* @__PURE__ */ jsx122(
21169
21380
  Input,
21170
21381
  {
21171
21382
  label: `${ariaLabel}-min-date`,
@@ -21178,7 +21389,7 @@ var DateRangeEditor = ({
21178
21389
  readOnly
21179
21390
  }
21180
21391
  ),
21181
- /* @__PURE__ */ jsx120(
21392
+ /* @__PURE__ */ jsx122(
21182
21393
  Input,
21183
21394
  {
21184
21395
  label: `${ariaLabel}-max-date`,
@@ -21192,19 +21403,18 @@ var DateRangeEditor = ({
21192
21403
  }
21193
21404
  )
21194
21405
  ] }),
21195
- /* @__PURE__ */ jsx120(ErrorContainer, { errorMessage: error })
21406
+ /* @__PURE__ */ jsx122(ErrorContainer, { errorMessage: error })
21196
21407
  ] });
21197
21408
  };
21198
21409
  var FilterEditorRenderer = ({ editorType, ...props }) => {
21199
- const { filterMapper: contextFilterMapper } = useSearchAndFilter();
21200
- const Editor = contextFilterMapper == null ? void 0 : contextFilterMapper[editorType];
21410
+ const Editor = filterMapper[editorType];
21201
21411
  if (!Editor) {
21202
21412
  return null;
21203
21413
  }
21204
21414
  if (editorType === "empty") {
21205
21415
  return null;
21206
21416
  }
21207
- return /* @__PURE__ */ jsx120(Editor, { ...props });
21417
+ return /* @__PURE__ */ jsx122(Editor, { ...props, disabled: props.isDisabled });
21208
21418
  };
21209
21419
  var filterMapper = {
21210
21420
  multiChoice: FilterMultiChoiceEditor,
@@ -21219,14 +21429,14 @@ var filterMapper = {
21219
21429
  empty: null
21220
21430
  };
21221
21431
  var ErrorContainer = ({ errorMessage }) => {
21222
- return /* @__PURE__ */ jsx120(
21432
+ return /* @__PURE__ */ jsx122(
21223
21433
  "div",
21224
21434
  {
21225
21435
  css: {
21226
21436
  gridColumn: "span 6",
21227
21437
  order: 6
21228
21438
  },
21229
- children: /* @__PURE__ */ jsx120(FieldMessage, { errorMessage })
21439
+ children: /* @__PURE__ */ jsx122(FieldMessage, { errorMessage })
21230
21440
  }
21231
21441
  );
21232
21442
  };
@@ -21236,228 +21446,6 @@ var twoColumnGrid = {
21236
21446
  gap: "var(--spacing-sm);"
21237
21447
  };
21238
21448
 
21239
- // src/components/SearchAndFilter/hooks/useSearchAndFilter.tsx
21240
- import { jsx as jsx121 } from "@emotion/react/jsx-runtime";
21241
- var SearchAndFilterContext = createContext6({
21242
- searchTerm: "",
21243
- setSearchTerm: () => {
21244
- },
21245
- filterVisibility: void 0,
21246
- setFilterVisibility: () => {
21247
- },
21248
- filters: [],
21249
- setFilters: () => {
21250
- },
21251
- handleAddFilter: () => {
21252
- },
21253
- handleResetFilters: () => {
21254
- },
21255
- handleDeleteFilter: () => {
21256
- },
21257
- setSortBy: () => {
21258
- },
21259
- sortByValue: "",
21260
- filterOptions: [],
21261
- sortOptions: [],
21262
- validFilterQuery: [],
21263
- filterMapper: {},
21264
- totalResults: 0
21265
- });
21266
- var SearchAndFilterProvider = ({
21267
- filters,
21268
- filterOptions,
21269
- sortOptions,
21270
- defaultSortByValue,
21271
- filterMode: filterMode3 = void 0,
21272
- onSearchChange,
21273
- onChange,
21274
- onSortChange,
21275
- resetFilterValues = [],
21276
- totalResults,
21277
- filterMapper: filterMapper2 = filterMapper,
21278
- children
21279
- }) => {
21280
- const [searchTerm, setSearchTerm] = useState17("");
21281
- const deferredSearchTerm = useDeferredValue2(searchTerm);
21282
- const [filterVisibility, setFilterVisibility] = useState17(filterMode3);
21283
- const [sortByValue, setSortByValue] = useState17(defaultSortByValue);
21284
- const handleSearchTerm = useCallback10(
21285
- (term) => {
21286
- setSearchTerm(term);
21287
- onSearchChange == null ? void 0 : onSearchChange(term);
21288
- },
21289
- [setSearchTerm, onSearchChange]
21290
- );
21291
- const handleOnSortChange = useCallback10(
21292
- (sort) => {
21293
- setSortByValue(sort);
21294
- onSortChange(sort);
21295
- },
21296
- [onSortChange]
21297
- );
21298
- const handleToggleFilterVisibilty = useCallback10(
21299
- (mode) => setFilterVisibility(mode),
21300
- [setFilterVisibility]
21301
- );
21302
- const handleAddFilter = useCallback10(() => {
21303
- onChange([...filters, { field: "", operator: "", value: "" }]);
21304
- }, [filters, onChange]);
21305
- const handleResetFilters = useCallback10(() => {
21306
- onChange(resetFilterValues);
21307
- }, [onChange, resetFilterValues]);
21308
- const handleDeleteFilter = useCallback10(
21309
- (index) => {
21310
- const remainingFilters = filters.filter((_, i) => i !== index);
21311
- onChange(remainingFilters);
21312
- },
21313
- [filters, onChange]
21314
- );
21315
- const validFilterQuery = useMemo6(() => {
21316
- const hasValidFilters = filters.every((f) => f.field && f.operator && f.value);
21317
- if (hasValidFilters) {
21318
- return filters;
21319
- }
21320
- }, [filters]);
21321
- useEffect18(() => {
21322
- if (filterVisibility) {
21323
- const handleEscKeyFilterClose = (e) => {
21324
- if (e.key === "Escape") {
21325
- setFilterVisibility(void 0);
21326
- }
21327
- };
21328
- document.addEventListener("keydown", (e) => handleEscKeyFilterClose(e));
21329
- return () => {
21330
- document.removeEventListener("keydown", (e) => handleEscKeyFilterClose(e));
21331
- };
21332
- }
21333
- }, [filterVisibility]);
21334
- return /* @__PURE__ */ jsx121(
21335
- SearchAndFilterContext.Provider,
21336
- {
21337
- value: {
21338
- searchTerm: deferredSearchTerm,
21339
- setSearchTerm: (e) => handleSearchTerm(e),
21340
- setSortBy: (e) => handleOnSortChange(e),
21341
- sortByValue,
21342
- filterVisibility,
21343
- setFilterVisibility: (e) => handleToggleFilterVisibilty(e),
21344
- filters,
21345
- setFilters: (e) => onChange(e),
21346
- handleAddFilter,
21347
- handleResetFilters,
21348
- handleDeleteFilter,
21349
- filterOptions,
21350
- sortOptions,
21351
- validFilterQuery,
21352
- totalResults,
21353
- filterMapper: filterMapper2
21354
- },
21355
- children: /* @__PURE__ */ jsx121(VerticalRhythm, { children })
21356
- }
21357
- );
21358
- };
21359
- var useSearchAndFilter = () => {
21360
- const value = useContext7(SearchAndFilterContext);
21361
- return { ...value };
21362
- };
21363
-
21364
- // src/components/SearchAndFilter/FilterControls.tsx
21365
- import { Fragment as Fragment20, jsx as jsx122, jsxs as jsxs82 } from "@emotion/react/jsx-runtime";
21366
- var FilterControls = ({
21367
- children,
21368
- defaultSortByValue,
21369
- hideSearchInput
21370
- }) => {
21371
- var _a, _b, _c;
21372
- const {
21373
- setFilterVisibility,
21374
- filterVisibility,
21375
- setSearchTerm,
21376
- validFilterQuery,
21377
- searchTerm,
21378
- sortByValue,
21379
- filterOptions
21380
- } = useSearchAndFilter();
21381
- const [initialSortValue, setInitialSortValue] = useState18(sortByValue);
21382
- const [localeSearchTerm, setLocaleSearchTerm] = useState18("");
21383
- const [userHasChangedSortByValue, setUserHasChangedSortByValue] = useState18(false);
21384
- useDebounce3(
21385
- () => {
21386
- setSearchTerm(localeSearchTerm);
21387
- },
21388
- 300,
21389
- [localeSearchTerm, searchTerm]
21390
- );
21391
- useEffect19(() => {
21392
- if (searchTerm === "") {
21393
- setLocaleSearchTerm("");
21394
- }
21395
- }, [searchTerm]);
21396
- const handleFilterToggle = (mode) => {
21397
- if (filterVisibility === "filters" && mode === "filters" || filterVisibility === "sort" && mode === "sort") {
21398
- return setFilterVisibility(void 0);
21399
- }
21400
- return setFilterVisibility(mode);
21401
- };
21402
- const sortValue = (sortByValue != null ? sortByValue : defaultSortByValue).split("_");
21403
- const sortDirection = sortValue == null ? void 0 : sortValue.pop();
21404
- const sortField = sortValue == null ? void 0 : sortValue.join("_");
21405
- const sortOn = sortField.startsWith("fields.") ? "contentTypeFields" : "metadata";
21406
- const sortByValueLabel = (_c = (_b = (_a = filterOptions == null ? void 0 : filterOptions.find((op) => op.value === sortOn)) == null ? void 0 : _a.options) == null ? void 0 : _b.find((f) => f.value === sortField)) == null ? void 0 : _c.label;
21407
- const sortByIcon = userHasChangedSortByValue ? sortDirection === "ASC" ? "arrow-up" : "arrow-down" : "sort-az";
21408
- useEffectOnce(() => {
21409
- setInitialSortValue(sortByValue);
21410
- });
21411
- useEffect19(() => {
21412
- if (initialSortValue !== sortByValue) {
21413
- setUserHasChangedSortByValue(true);
21414
- }
21415
- }, [initialSortValue, sortByValue]);
21416
- return /* @__PURE__ */ jsxs82(Fragment20, { children: [
21417
- /* @__PURE__ */ jsx122(
21418
- FilterButton2,
21419
- {
21420
- "aria-controls": "search-and-filter-options",
21421
- "aria-label": "filter options",
21422
- "aria-haspopup": "true",
21423
- "aria-expanded": filterVisibility === "filters",
21424
- filterCount: validFilterQuery == null ? void 0 : validFilterQuery.length,
21425
- onClick: () => handleFilterToggle("filters"),
21426
- dataTestId: "filters-button"
21427
- }
21428
- ),
21429
- /* @__PURE__ */ jsx122(
21430
- FilterButton2,
21431
- {
21432
- "aria-controls": "search-and-filter-sortBy",
21433
- "aria-label": "sort by options",
21434
- "aria-haspopup": "true",
21435
- text: !userHasChangedSortByValue ? "Sort" : sortByValueLabel,
21436
- icon: sortByIcon,
21437
- "aria-expanded": filterVisibility === "sort",
21438
- hasSelectedValue: sortByValue !== "",
21439
- onClick: () => handleFilterToggle("sort"),
21440
- dataTestId: "sort-by-button"
21441
- }
21442
- ),
21443
- hideSearchInput ? null : /* @__PURE__ */ jsx122(
21444
- InputKeywordSearch,
21445
- {
21446
- placeholder: "Search...",
21447
- onSearchTextChanged: (e) => setLocaleSearchTerm(e),
21448
- value: localeSearchTerm,
21449
- compact: true,
21450
- rounded: true,
21451
- css: SearchInput
21452
- }
21453
- ),
21454
- children
21455
- ] });
21456
- };
21457
-
21458
- // src/components/SearchAndFilter/FilterItem.tsx
21459
- import { useMemo as useMemo7 } from "react";
21460
-
21461
21449
  // src/components/SearchAndFilter/FilterMenu.tsx
21462
21450
  import React24, { useEffect as useEffect20 } from "react";
21463
21451
  import { jsx as jsx123, jsxs as jsxs83 } from "@emotion/react/jsx-runtime";
@@ -21528,7 +21516,7 @@ var FilterItem = ({
21528
21516
  const operatorLabel = filters[index].operator !== "" ? `operator ${filters[index].operator}` : "unknown operator";
21529
21517
  const metaDataLabel = filters[index].value !== "" ? `value ${filters[index].value}` : "unknown value";
21530
21518
  const metaDataPossibleOptions = (_b = (_a = operatorOptions.find((op) => filters[index].operator === op.value)) == null ? void 0 : _a.editorType) != null ? _b : "singleChoice";
21531
- const { selectedFieldValue, selectedOperatorValue, selectedMetaValue, readOnly, bindable } = useMemo7(() => {
21519
+ const { selectedFieldValue, selectedOperatorValue, selectedMetaValue, readOnly } = useMemo7(() => {
21532
21520
  var _a2;
21533
21521
  const currentSelectedFilter = filterOptions.find((item) => {
21534
21522
  var _a3;
@@ -21541,14 +21529,19 @@ var FilterItem = ({
21541
21529
  const selectedOperatorValue2 = operatorOptions == null ? void 0 : operatorOptions.find((item) => {
21542
21530
  return filters[index].operator === item.value;
21543
21531
  });
21532
+ const selectedMetaValue2 = valueOptions.filter((item) => {
21533
+ if (Array.isArray(filters[index].value) && item.value) {
21534
+ return filters[index].value.includes(item.value);
21535
+ }
21536
+ return filters[index].value === item.value;
21537
+ });
21544
21538
  return {
21545
21539
  selectedFieldValue: selectedFieldValue2,
21546
21540
  selectedOperatorValue: selectedOperatorValue2 != null ? selectedOperatorValue2 : void 0,
21547
- selectedMetaValue: filters[index].value,
21548
- readOnly: isCurrentFieldReadOnly,
21549
- bindable: selectedFieldValue2 == null ? void 0 : selectedFieldValue2.bindable
21541
+ selectedMetaValue: selectedMetaValue2.length > 0 ? selectedMetaValue2 : filters[index].value,
21542
+ readOnly: isCurrentFieldReadOnly
21550
21543
  };
21551
- }, [filters, filterOptions, index, operatorOptions]);
21544
+ }, [filters, filterOptions, index, operatorOptions, valueOptions]);
21552
21545
  const readOnlyProps = readOnly ? {
21553
21546
  "aria-readonly": true,
21554
21547
  isSearchable: false,
@@ -21615,8 +21608,7 @@ var FilterItem = ({
21615
21608
  options: valueOptions,
21616
21609
  onChange: (e) => onValueChange(e != null ? e : ""),
21617
21610
  readOnly,
21618
- bindable,
21619
- disabled: !filters[index].operator,
21611
+ isDisabled: !filters[index].operator,
21620
21612
  value: selectedMetaValue,
21621
21613
  valueTestId: "filter-value"
21622
21614
  }
@@ -22056,7 +22048,6 @@ var SearchAndFilter = ({
22056
22048
  viewSwitchControls,
22057
22049
  resultsContainerView = /* @__PURE__ */ jsx129(SearchAndFilterResultContainer, {}),
22058
22050
  children = /* @__PURE__ */ jsx129(FilterModeView, {}),
22059
- filterMapper: filterMapper2 = filterMapper,
22060
22051
  onChange,
22061
22052
  onSearchChange,
22062
22053
  onSortChange,
@@ -22076,7 +22067,6 @@ var SearchAndFilter = ({
22076
22067
  onSortChange,
22077
22068
  totalResults,
22078
22069
  resetFilterValues,
22079
- filterMapper: filterMapper2,
22080
22070
  children: /* @__PURE__ */ jsxs88(VerticalRhythm, { css: SearchAndFilterContainer, "data-testid": "search-and-filter", children: [
22081
22071
  /* @__PURE__ */ jsxs88("div", { css: SearchAndFilterOutterControlWrapper(viewSwitchControls ? "1fr auto" : "1fr"), children: [
22082
22072
  /* @__PURE__ */ jsx129(
@@ -22712,8 +22702,6 @@ export {
22712
22702
  CurrentDrawerContext,
22713
22703
  DATE_OPERATORS,
22714
22704
  DashedBox,
22715
- DateEditor,
22716
- DateRangeEditor,
22717
22705
  DateTimePicker,
22718
22706
  DateTimePickerVariant,
22719
22707
  DebouncedInputKeywordSearch,
@@ -22729,12 +22717,9 @@ export {
22729
22717
  Fieldset,
22730
22718
  FilterButton2 as FilterButton,
22731
22719
  FilterControls,
22732
- FilterEditorRenderer,
22733
22720
  FilterItem,
22734
22721
  FilterItems,
22735
22722
  FilterMenu,
22736
- FilterMultiChoiceEditor,
22737
- FilterSingleChoiceEditor,
22738
22723
  Heading,
22739
22724
  HexModalBackground,
22740
22725
  HorizontalRhythm,
@@ -22781,8 +22766,6 @@ export {
22781
22766
  ModalDialog,
22782
22767
  MultilineChip,
22783
22768
  NUMBER_OPERATORS,
22784
- NumberEditor,
22785
- NumberRangeEditor,
22786
22769
  PageHeaderSection,
22787
22770
  Pagination,
22788
22771
  Paragraph,
@@ -22835,8 +22818,6 @@ export {
22835
22818
  ShortcutRevealer,
22836
22819
  Skeleton,
22837
22820
  StatusBullet,
22838
- StatusMultiEditor,
22839
- StatusSingleEditor,
22840
22821
  SuccessMessage,
22841
22822
  Switch,
22842
22823
  TAKEOVER_STACK_ID,
@@ -22853,7 +22834,6 @@ export {
22853
22834
  TableRow,
22854
22835
  Tabs,
22855
22836
  TakeoverDrawerRenderer,
22856
- TextEditor,
22857
22837
  Textarea,
22858
22838
  Theme,
22859
22839
  Tile2 as Tile,
@@ -22898,7 +22878,6 @@ export {
22898
22878
  fadeInRtl,
22899
22879
  fadeInTop,
22900
22880
  fadeOutBottom,
22901
- filterMapper,
22902
22881
  fullWidthScreenIcon,
22903
22882
  getDrawerAttributes,
22904
22883
  getParentPath,