@osdk/react-components 0.2.0-beta.21 → 0.2.0-beta.22
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/AGENTS.md +14 -97
- package/CHANGELOG.md +19 -0
- package/README.md +1 -1
- package/build/browser/action-form/ActionFormApi.js.map +1 -1
- package/build/browser/action-form/BaseForm.js +18 -5
- package/build/browser/action-form/BaseForm.js.map +1 -1
- package/build/browser/action-form/BaseForm.module.css +38 -0
- package/build/browser/action-form/BaseForm.module.css.js +8 -0
- package/build/browser/action-form/FormField.js +42 -0
- package/build/browser/action-form/FormField.js.map +1 -0
- package/build/browser/action-form/FormField.module.css +41 -0
- package/build/browser/action-form/FormField.module.css.js +10 -0
- package/build/browser/action-form/FormFieldApi.js.map +1 -1
- package/build/browser/action-form/FormHeader.js +26 -0
- package/build/browser/action-form/FormHeader.js.map +1 -0
- package/build/browser/action-form/FormHeader.module.css +26 -0
- package/build/browser/action-form/FormHeader.module.css.js +6 -0
- package/build/browser/action-form/fields/FormFieldRenderer.js +7 -5
- package/build/browser/action-form/fields/FormFieldRenderer.js.map +1 -1
- package/build/browser/action-form/fields/TextInputField.js +2 -0
- package/build/browser/action-form/fields/TextInputField.js.map +1 -1
- package/build/browser/action-form/fields/TextInputField.module.css +56 -0
- package/build/browser/action-form/fields/TextInputField.module.css.js +6 -0
- package/build/browser/base-components/checkbox/Checkbox.js +2 -2
- package/build/browser/base-components/checkbox/Checkbox.js.map +1 -1
- package/build/browser/base-components/checkbox/Checkbox.module.css +0 -4
- package/build/browser/base-components/combobox/Combobox.js +3 -8
- package/build/browser/base-components/combobox/Combobox.js.map +1 -1
- package/build/browser/base-components/combobox/Combobox.module.css +0 -3
- package/build/browser/base-components/draggable-list/DraggableList.js +2 -4
- package/build/browser/base-components/draggable-list/DraggableList.js.map +1 -1
- package/build/browser/base-components/search-bar/SearchBar.module.css +2 -2
- package/build/browser/base-components/select/Select.js +1 -3
- package/build/browser/base-components/select/Select.js.map +1 -1
- package/build/browser/base-components/select/Select.module.css +0 -2
- package/build/browser/base-components/switch/Switch.module.css +0 -1
- package/build/browser/filter-list/FilterInput.js +14 -5
- package/build/browser/filter-list/FilterInput.js.map +1 -1
- package/build/browser/filter-list/FilterList.js +13 -5
- package/build/browser/filter-list/FilterList.js.map +1 -1
- package/build/browser/filter-list/FilterListApi.js.map +1 -1
- package/build/browser/filter-list/base/AddFilterPopover.js +4 -3
- package/build/browser/filter-list/base/AddFilterPopover.js.map +1 -1
- package/build/browser/filter-list/base/BaseFilterListApi.js.map +1 -1
- package/build/browser/filter-list/base/ExcludeDropdown.js +61 -0
- package/build/browser/filter-list/base/ExcludeDropdown.js.map +1 -0
- package/build/browser/filter-list/base/ExcludeDropdown.module.css +94 -0
- package/build/browser/filter-list/base/ExcludeDropdown.module.css.js +12 -0
- package/build/browser/filter-list/base/FilterIcons.js +0 -39
- package/build/browser/filter-list/base/FilterIcons.js.map +1 -1
- package/build/browser/filter-list/base/FilterInputExcludeRow.js +55 -0
- package/build/browser/filter-list/base/FilterInputExcludeRow.js.map +1 -0
- package/build/browser/filter-list/base/FilterListItem.js +72 -23
- package/build/browser/filter-list/base/FilterListItem.js.map +1 -1
- package/build/browser/filter-list/base/FilterListItem.module.css +96 -20
- package/build/browser/filter-list/base/FilterListItem.module.css.js +7 -2
- package/build/browser/filter-list/base/inputs/CheckboxListInput.js +2 -2
- package/build/browser/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/ContainsTextInput.js +2 -6
- package/build/browser/filter-list/base/inputs/ContainsTextInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/ListogramInput.js +2 -2
- package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/RangeInput.js +2 -2
- package/build/browser/filter-list/base/inputs/RangeInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/SingleSelectInput.js +1 -3
- package/build/browser/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/{useStaleData.js → useStableData.js} +5 -5
- package/build/browser/filter-list/base/inputs/useStableData.js.map +1 -0
- package/build/browser/filter-list/hooks/usePropertyAggregation.js +3 -2
- package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -1
- package/build/browser/filter-list/inputs/CheckboxListFilterInput.js +15 -5
- package/build/browser/filter-list/inputs/CheckboxListFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/DateRangeFilterInput.js +10 -6
- package/build/browser/filter-list/inputs/DateRangeFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/LinkedPropertyInput.js +41 -18
- package/build/browser/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
- package/build/browser/filter-list/inputs/ListogramFilterInput.js +15 -5
- package/build/browser/filter-list/inputs/ListogramFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/MultiSelectFilterInput.js +12 -4
- package/build/browser/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/NumberRangeFilterInput.js +10 -6
- package/build/browser/filter-list/inputs/NumberRangeFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/PropertyFilterInput.js +36 -10
- package/build/browser/filter-list/inputs/PropertyFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/SingleSelectFilterInput.js +12 -4
- package/build/browser/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/TextTagsFilterInput.js +12 -4
- package/build/browser/filter-list/inputs/TextTagsFilterInput.js.map +1 -1
- package/build/browser/filter-list/utils/filterValues.js +29 -1
- package/build/browser/filter-list/utils/filterValues.js.map +1 -1
- package/build/browser/object-table/LoadingCell.module.css +0 -1
- package/build/browser/object-table/MultiColumnSortDialog.js +1 -3
- package/build/browser/object-table/MultiColumnSortDialog.js.map +1 -1
- package/build/browser/object-table/MultiColumnSortDialog.module.css +0 -1
- package/build/browser/object-table/TableCell.module.css +1 -1
- package/build/browser/object-table/TableHeader.module.css +2 -2
- package/build/browser/object-table/TableHeaderWithPopover.js +2 -4
- package/build/browser/object-table/TableHeaderWithPopover.js.map +1 -1
- package/build/browser/object-table/TableHeaderWithPopover.module.css +1 -0
- package/build/browser/pdf-viewer/PdfViewerAnnotationLayer.module.css +0 -1
- package/build/browser/public/experimental.js +2 -0
- package/build/browser/public/experimental.js.map +1 -1
- package/build/browser/styles.css +372 -38
- package/build/cjs/public/experimental.cjs +1882 -1068
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +244 -38
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +420 -11
- package/build/esm/action-form/ActionFormApi.js.map +1 -1
- package/build/esm/action-form/BaseForm.js +18 -5
- package/build/esm/action-form/BaseForm.js.map +1 -1
- package/build/esm/action-form/BaseForm.module.css +38 -0
- package/build/esm/action-form/FormField.js +42 -0
- package/build/esm/action-form/FormField.js.map +1 -0
- package/build/esm/action-form/FormField.module.css +41 -0
- package/build/esm/action-form/FormFieldApi.js.map +1 -1
- package/build/esm/action-form/FormHeader.js +26 -0
- package/build/esm/action-form/FormHeader.js.map +1 -0
- package/build/esm/action-form/FormHeader.module.css +26 -0
- package/build/esm/action-form/fields/FormFieldRenderer.js +7 -5
- package/build/esm/action-form/fields/FormFieldRenderer.js.map +1 -1
- package/build/esm/action-form/fields/TextInputField.js +2 -0
- package/build/esm/action-form/fields/TextInputField.js.map +1 -1
- package/build/esm/action-form/fields/TextInputField.module.css +56 -0
- package/build/esm/base-components/checkbox/Checkbox.js +2 -2
- package/build/esm/base-components/checkbox/Checkbox.js.map +1 -1
- package/build/esm/base-components/checkbox/Checkbox.module.css +0 -4
- package/build/esm/base-components/combobox/Combobox.js +3 -8
- package/build/esm/base-components/combobox/Combobox.js.map +1 -1
- package/build/esm/base-components/combobox/Combobox.module.css +0 -3
- package/build/esm/base-components/draggable-list/DraggableList.js +2 -4
- package/build/esm/base-components/draggable-list/DraggableList.js.map +1 -1
- package/build/esm/base-components/search-bar/SearchBar.module.css +2 -2
- package/build/esm/base-components/select/Select.js +1 -3
- package/build/esm/base-components/select/Select.js.map +1 -1
- package/build/esm/base-components/select/Select.module.css +0 -2
- package/build/esm/base-components/switch/Switch.module.css +0 -1
- package/build/esm/filter-list/FilterInput.js +14 -5
- package/build/esm/filter-list/FilterInput.js.map +1 -1
- package/build/esm/filter-list/FilterList.js +13 -5
- package/build/esm/filter-list/FilterList.js.map +1 -1
- package/build/esm/filter-list/FilterListApi.js.map +1 -1
- package/build/esm/filter-list/base/AddFilterPopover.js +4 -3
- package/build/esm/filter-list/base/AddFilterPopover.js.map +1 -1
- package/build/esm/filter-list/base/BaseFilterListApi.js.map +1 -1
- package/build/esm/filter-list/base/ExcludeDropdown.js +61 -0
- package/build/esm/filter-list/base/ExcludeDropdown.js.map +1 -0
- package/build/esm/filter-list/base/ExcludeDropdown.module.css +94 -0
- package/build/esm/filter-list/base/FilterIcons.js +0 -39
- package/build/esm/filter-list/base/FilterIcons.js.map +1 -1
- package/build/esm/filter-list/base/FilterInputExcludeRow.js +55 -0
- package/build/esm/filter-list/base/FilterInputExcludeRow.js.map +1 -0
- package/build/esm/filter-list/base/FilterListItem.js +72 -23
- package/build/esm/filter-list/base/FilterListItem.js.map +1 -1
- package/build/esm/filter-list/base/FilterListItem.module.css +96 -20
- package/build/esm/filter-list/base/inputs/CheckboxListInput.js +2 -2
- package/build/esm/filter-list/base/inputs/CheckboxListInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/ContainsTextInput.js +2 -6
- package/build/esm/filter-list/base/inputs/ContainsTextInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/ListogramInput.js +2 -2
- package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/RangeInput.js +2 -2
- package/build/esm/filter-list/base/inputs/RangeInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/SingleSelectInput.js +1 -3
- package/build/esm/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/{useStaleData.js → useStableData.js} +5 -5
- package/build/esm/filter-list/base/inputs/useStableData.js.map +1 -0
- package/build/esm/filter-list/hooks/usePropertyAggregation.js +3 -2
- package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -1
- package/build/esm/filter-list/inputs/CheckboxListFilterInput.js +15 -5
- package/build/esm/filter-list/inputs/CheckboxListFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/DateRangeFilterInput.js +10 -6
- package/build/esm/filter-list/inputs/DateRangeFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/LinkedPropertyInput.js +41 -18
- package/build/esm/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
- package/build/esm/filter-list/inputs/ListogramFilterInput.js +15 -5
- package/build/esm/filter-list/inputs/ListogramFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/MultiSelectFilterInput.js +12 -4
- package/build/esm/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/NumberRangeFilterInput.js +10 -6
- package/build/esm/filter-list/inputs/NumberRangeFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/PropertyFilterInput.js +36 -10
- package/build/esm/filter-list/inputs/PropertyFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/SingleSelectFilterInput.js +12 -4
- package/build/esm/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/TextTagsFilterInput.js +12 -4
- package/build/esm/filter-list/inputs/TextTagsFilterInput.js.map +1 -1
- package/build/esm/filter-list/utils/filterValues.js +29 -1
- package/build/esm/filter-list/utils/filterValues.js.map +1 -1
- package/build/esm/object-table/LoadingCell.module.css +0 -1
- package/build/esm/object-table/MultiColumnSortDialog.js +1 -3
- package/build/esm/object-table/MultiColumnSortDialog.js.map +1 -1
- package/build/esm/object-table/MultiColumnSortDialog.module.css +0 -1
- package/build/esm/object-table/TableCell.module.css +1 -1
- package/build/esm/object-table/TableHeader.module.css +2 -2
- package/build/esm/object-table/TableHeaderWithPopover.js +2 -4
- package/build/esm/object-table/TableHeaderWithPopover.js.map +1 -1
- package/build/esm/object-table/TableHeaderWithPopover.module.css +1 -0
- package/build/esm/pdf-viewer/PdfViewerAnnotationLayer.module.css +0 -1
- package/build/esm/public/experimental.js +2 -0
- package/build/esm/public/experimental.js.map +1 -1
- package/build/types/action-form/ActionFormApi.d.ts +1 -0
- package/build/types/action-form/ActionFormApi.d.ts.map +1 -1
- package/build/types/action-form/BaseForm.d.ts.map +1 -1
- package/build/types/action-form/FormField.d.ts +11 -0
- package/build/types/action-form/FormField.d.ts.map +1 -0
- package/build/types/action-form/FormFieldApi.d.ts +1 -1
- package/build/types/action-form/FormHeader.d.ts +6 -0
- package/build/types/action-form/FormHeader.d.ts.map +1 -0
- package/build/types/action-form/fields/FormFieldRenderer.d.ts.map +1 -1
- package/build/types/action-form/fields/TextInputField.d.ts.map +1 -1
- package/build/types/filter-list/FilterInput.d.ts +3 -1
- package/build/types/filter-list/FilterInput.d.ts.map +1 -1
- package/build/types/filter-list/FilterListApi.d.ts +12 -9
- package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/base/AddFilterPopover.d.ts +2 -1
- package/build/types/filter-list/base/AddFilterPopover.d.ts.map +1 -1
- package/build/types/filter-list/base/BaseFilterListApi.d.ts +2 -0
- package/build/types/filter-list/base/BaseFilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/base/ExcludeDropdown.d.ts +8 -0
- package/build/types/filter-list/base/ExcludeDropdown.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterIcons.d.ts +0 -2
- package/build/types/filter-list/base/FilterIcons.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterInputExcludeRow.d.ts +12 -0
- package/build/types/filter-list/base/FilterInputExcludeRow.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterListItem.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/useStableData.d.ts +1 -0
- package/build/types/filter-list/base/inputs/useStableData.d.ts.map +1 -0
- package/build/types/filter-list/hooks/usePropertyAggregation.d.ts +2 -2
- package/build/types/filter-list/hooks/usePropertyAggregation.d.ts.map +1 -1
- package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts +5 -2
- package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts +3 -2
- package/build/types/filter-list/inputs/DateRangeFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts +2 -1
- package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/ListogramFilterInput.d.ts +5 -2
- package/build/types/filter-list/inputs/ListogramFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts +4 -2
- package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts +3 -2
- package/build/types/filter-list/inputs/NumberRangeFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/PropertyFilterInput.d.ts +3 -1
- package/build/types/filter-list/inputs/PropertyFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts +4 -2
- package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts +4 -2
- package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/utils/filterValues.d.ts +2 -0
- package/build/types/filter-list/utils/filterValues.d.ts.map +1 -1
- package/build/types/public/experimental.d.ts +4 -0
- package/build/types/public/experimental.d.ts.map +1 -1
- package/package.json +4 -4
- package/build/browser/filter-list/base/inputs/useStaleData.js.map +0 -1
- package/build/esm/filter-list/base/inputs/useStaleData.js.map +0 -1
- package/build/types/filter-list/base/inputs/useStaleData.d.ts +0 -1
- package/build/types/filter-list/base/inputs/useStaleData.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterIcons.js","names":["ChevronDown","Cross","DoubleChevronLeft","DoubleChevronRight","More","Search","Tick","Undo","React","
|
|
1
|
+
{"version":3,"file":"FilterIcons.js","names":["ChevronDown","Cross","DoubleChevronLeft","DoubleChevronRight","More","Search","Tick","Undo","React","RemoveIcon","createElement","size","SearchIcon","OverflowMenuIcon","ChevronDownIcon","CollapseIcon","ExpandIcon","ResetIcon","CheckIcon"],"sources":["FilterIcons.tsx"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ChevronDown,\n Cross,\n DoubleChevronLeft,\n DoubleChevronRight,\n More,\n Search,\n Tick,\n Undo,\n} from \"@blueprintjs/icons\";\nimport React from \"react\";\n\nexport function RemoveIcon(): React.ReactElement {\n return <Cross size={14} />;\n}\n\nexport function SearchIcon(): React.ReactElement {\n return <Search size={14} />;\n}\n\nexport function OverflowMenuIcon(): React.ReactElement {\n return <More size={14} />;\n}\n\nexport function ChevronDownIcon(): React.ReactElement {\n return <ChevronDown size={10} />;\n}\n\nexport function CollapseIcon(): React.ReactElement {\n return <DoubleChevronLeft size={14} />;\n}\n\nexport function ExpandIcon(): React.ReactElement {\n return <DoubleChevronRight size={14} />;\n}\n\nexport function ResetIcon(): React.ReactElement {\n return <Undo size={14} />;\n}\n\nexport function CheckIcon(): React.ReactElement {\n return <Tick size={12} />;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SACEA,WAAW,EACXC,KAAK,EACLC,iBAAiB,EACjBC,kBAAkB,EAClBC,IAAI,EACJC,MAAM,EACNC,IAAI,EACJC,IAAI,QACC,oBAAoB;AAC3B,OAAOC,KAAK,MAAM,OAAO;AAEzB,OAAO,SAASC,UAAUA,CAAA,EAAuB;EAC/C,oBAAOD,KAAA,CAAAE,aAAA,CAACT,KAAK;IAACU,IAAI,EAAE;EAAG,CAAE,CAAC;AAC5B;AAEA,OAAO,SAASC,UAAUA,CAAA,EAAuB;EAC/C,oBAAOJ,KAAA,CAAAE,aAAA,CAACL,MAAM;IAACM,IAAI,EAAE;EAAG,CAAE,CAAC;AAC7B;AAEA,OAAO,SAASE,gBAAgBA,CAAA,EAAuB;EACrD,oBAAOL,KAAA,CAAAE,aAAA,CAACN,IAAI;IAACO,IAAI,EAAE;EAAG,CAAE,CAAC;AAC3B;AAEA,OAAO,SAASG,eAAeA,CAAA,EAAuB;EACpD,oBAAON,KAAA,CAAAE,aAAA,CAACV,WAAW;IAACW,IAAI,EAAE;EAAG,CAAE,CAAC;AAClC;AAEA,OAAO,SAASI,YAAYA,CAAA,EAAuB;EACjD,oBAAOP,KAAA,CAAAE,aAAA,CAACR,iBAAiB;IAACS,IAAI,EAAE;EAAG,CAAE,CAAC;AACxC;AAEA,OAAO,SAASK,UAAUA,CAAA,EAAuB;EAC/C,oBAAOR,KAAA,CAAAE,aAAA,CAACP,kBAAkB;IAACQ,IAAI,EAAE;EAAG,CAAE,CAAC;AACzC;AAEA,OAAO,SAASM,SAASA,CAAA,EAAuB;EAC9C,oBAAOT,KAAA,CAAAE,aAAA,CAACH,IAAI;IAACI,IAAI,EAAE;EAAG,CAAE,CAAC;AAC3B;AAEA,OAAO,SAASO,SAASA,CAAA,EAAuB;EAC9C,oBAAOV,KAAA,CAAAE,aAAA,CAACJ,IAAI;IAACK,IAAI,EAAE;EAAG,CAAE,CAAC;AAC3B","ignoreList":[]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import classnames from "classnames";
|
|
18
|
+
import React, { memo, useCallback } from "react";
|
|
19
|
+
import { supportsExcluding } from "../utils/filterValues.js";
|
|
20
|
+
import { ExcludeDropdown } from "./ExcludeDropdown.js";
|
|
21
|
+
import styles from "./FilterListItem.module.css";
|
|
22
|
+
function FilterInputExcludeRowInner({
|
|
23
|
+
excludeRowOpen,
|
|
24
|
+
filterState,
|
|
25
|
+
onFilterStateChanged,
|
|
26
|
+
totalValueCount,
|
|
27
|
+
children
|
|
28
|
+
}) {
|
|
29
|
+
const handleToggleExclude = useCallback(() => {
|
|
30
|
+
if (filterState) {
|
|
31
|
+
onFilterStateChanged({
|
|
32
|
+
...filterState,
|
|
33
|
+
isExcluding: !filterState.isExcluding
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}, [filterState, onFilterStateChanged]);
|
|
37
|
+
const isExcluding = filterState?.isExcluding ?? false;
|
|
38
|
+
if (!supportsExcluding(filterState)) {
|
|
39
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, children);
|
|
40
|
+
}
|
|
41
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
42
|
+
"data-exclude-row": true,
|
|
43
|
+
className: classnames(styles.excludeRow, {
|
|
44
|
+
[styles.excludeRowVisible]: excludeRowOpen ?? false
|
|
45
|
+
})
|
|
46
|
+
}, /*#__PURE__*/React.createElement(ExcludeDropdown, {
|
|
47
|
+
isExcluding: isExcluding,
|
|
48
|
+
onToggleExclude: handleToggleExclude
|
|
49
|
+
}), totalValueCount != null && totalValueCount > 0 && /*#__PURE__*/React.createElement("span", {
|
|
50
|
+
className: styles.excludeCountLabel,
|
|
51
|
+
title: "Approximate count of unique values"
|
|
52
|
+
}, totalValueCount.toLocaleString(), " values")), children);
|
|
53
|
+
}
|
|
54
|
+
export const FilterInputExcludeRow = /*#__PURE__*/memo(FilterInputExcludeRowInner);
|
|
55
|
+
//# sourceMappingURL=FilterInputExcludeRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterInputExcludeRow.js","names":["classnames","React","memo","useCallback","supportsExcluding","ExcludeDropdown","styles","FilterInputExcludeRowInner","excludeRowOpen","filterState","onFilterStateChanged","totalValueCount","children","handleToggleExclude","isExcluding","createElement","Fragment","className","excludeRow","excludeRowVisible","onToggleExclude","excludeCountLabel","title","toLocaleString","FilterInputExcludeRow"],"sources":["FilterInputExcludeRow.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport classnames from \"classnames\";\nimport React, { memo, useCallback } from \"react\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { supportsExcluding } from \"../utils/filterValues.js\";\nimport { ExcludeDropdown } from \"./ExcludeDropdown.js\";\nimport styles from \"./FilterListItem.module.css\";\n\ninterface FilterInputExcludeRowProps {\n excludeRowOpen?: boolean;\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n totalValueCount?: number;\n children: React.ReactNode;\n}\n\nfunction FilterInputExcludeRowInner({\n excludeRowOpen,\n filterState,\n onFilterStateChanged,\n totalValueCount,\n children,\n}: FilterInputExcludeRowProps): React.ReactElement {\n const handleToggleExclude = useCallback(() => {\n if (filterState) {\n onFilterStateChanged({\n ...filterState,\n isExcluding: !filterState.isExcluding,\n });\n }\n }, [filterState, onFilterStateChanged]);\n\n const isExcluding = filterState?.isExcluding ?? false;\n const isOpen = excludeRowOpen ?? false;\n\n if (!supportsExcluding(filterState)) {\n return <>{children}</>;\n }\n\n return (\n <>\n <div\n data-exclude-row\n className={classnames(styles.excludeRow, {\n [styles.excludeRowVisible]: isOpen,\n })}\n >\n <ExcludeDropdown\n isExcluding={isExcluding}\n onToggleExclude={handleToggleExclude}\n />\n {totalValueCount != null && totalValueCount > 0 && (\n <span\n className={styles.excludeCountLabel}\n title=\"Approximate count of unique values\"\n >\n {totalValueCount.toLocaleString()} values\n </span>\n )}\n </div>\n {children}\n </>\n );\n}\n\nexport const FilterInputExcludeRow: React.MemoExoticComponent<\n typeof FilterInputExcludeRowInner\n> = memo(FilterInputExcludeRowInner);\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,IAAI,EAAEC,WAAW,QAAQ,OAAO;AAEhD,SAASC,iBAAiB,QAAQ,0BAA0B;AAC5D,SAASC,eAAe,QAAQ,sBAAsB;AACtD,OAAOC,MAAM,MAAM,6BAA6B;AAUhD,SAASC,0BAA0BA,CAAC;EAClCC,cAAc;EACdC,WAAW;EACXC,oBAAoB;EACpBC,eAAe;EACfC;AAC0B,CAAC,EAAsB;EACjD,MAAMC,mBAAmB,GAAGV,WAAW,CAAC,MAAM;IAC5C,IAAIM,WAAW,EAAE;MACfC,oBAAoB,CAAC;QACnB,GAAGD,WAAW;QACdK,WAAW,EAAE,CAACL,WAAW,CAACK;MAC5B,CAAC,CAAC;IACJ;EACF,CAAC,EAAE,CAACL,WAAW,EAAEC,oBAAoB,CAAC,CAAC;EAEvC,MAAMI,WAAW,GAAGL,WAAW,EAAEK,WAAW,IAAI,KAAK;EAGrD,IAAI,CAACV,iBAAiB,CAACK,WAAW,CAAC,EAAE;IACnC,oBAAOR,KAAA,CAAAc,aAAA,CAAAd,KAAA,CAAAe,QAAA,QAAGJ,QAAW,CAAC;EACxB;EAEA,oBACEX,KAAA,CAAAc,aAAA,CAAAd,KAAA,CAAAe,QAAA,qBACEf,KAAA,CAAAc,aAAA;IACE,wBAAgB;IAChBE,SAAS,EAAEjB,UAAU,CAACM,MAAM,CAACY,UAAU,EAAE;MACvC,CAACZ,MAAM,CAACa,iBAAiB,GAXlBX,cAAc,IAAI;IAY3B,CAAC;EAAE,gBAEHP,KAAA,CAAAc,aAAA,CAACV,eAAe;IACdS,WAAW,EAAEA,WAAY;IACzBM,eAAe,EAAEP;EAAoB,CACtC,CAAC,EACDF,eAAe,IAAI,IAAI,IAAIA,eAAe,GAAG,CAAC,iBAC7CV,KAAA,CAAAc,aAAA;IACEE,SAAS,EAAEX,MAAM,CAACe,iBAAkB;IACpCC,KAAK,EAAC;EAAoC,GAEzCX,eAAe,CAACY,cAAc,CAAC,CAAC,EAAC,SAC9B,CAEL,CAAC,EACLX,QACD,CAAC;AAEP;AAEA,OAAO,MAAMY,qBAEZ,gBAAGtB,IAAI,CAACK,0BAA0B,CAAC","ignoreList":[]}
|
|
@@ -16,12 +16,13 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import { Button } from "@base-ui/react/button";
|
|
19
|
+
import { Input } from "@base-ui/react/input";
|
|
19
20
|
import classnames from "classnames";
|
|
20
|
-
import React, { memo, useCallback } from "react";
|
|
21
|
+
import React, { memo, useCallback, useState } from "react";
|
|
21
22
|
import { ErrorBoundary } from "../../shared/ErrorBoundary.js";
|
|
22
|
-
import { supportsExcluding } from "../utils/filterValues.js";
|
|
23
|
+
import { supportsExcluding, supportsSearch } from "../utils/filterValues.js";
|
|
23
24
|
import { DragHandleIcon } from "./DragHandleIcon.js";
|
|
24
|
-
import {
|
|
25
|
+
import { OverflowMenuIcon, RemoveIcon, SearchIcon } from "./FilterIcons.js";
|
|
25
26
|
import styles from "./FilterListItem.module.css";
|
|
26
27
|
function FilterListItemInner({
|
|
27
28
|
definition,
|
|
@@ -36,26 +37,52 @@ function FilterListItemInner({
|
|
|
36
37
|
className,
|
|
37
38
|
style
|
|
38
39
|
}) {
|
|
40
|
+
const [searchState, setSearchState] = useState({
|
|
41
|
+
type: "closed"
|
|
42
|
+
});
|
|
43
|
+
const [excludeRowOpen, setExcludeRowOpen] = useState(false);
|
|
39
44
|
const handleFilterStateChanged = useCallback(newState => {
|
|
40
45
|
onFilterStateChanged(filterKey, newState);
|
|
41
46
|
}, [filterKey, onFilterStateChanged]);
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
}, [
|
|
47
|
+
const handleToggleSearch = useCallback(() => {
|
|
48
|
+
setSearchState(prev => prev.type === "closed" ? {
|
|
49
|
+
type: "open",
|
|
50
|
+
query: ""
|
|
51
|
+
} : {
|
|
52
|
+
type: "closed"
|
|
53
|
+
});
|
|
54
|
+
}, []);
|
|
55
|
+
const handleSearchChange = useCallback(e => {
|
|
56
|
+
setSearchState({
|
|
57
|
+
type: "open",
|
|
58
|
+
query: e.target.value
|
|
59
|
+
});
|
|
60
|
+
}, []);
|
|
61
|
+
const handleSearchClear = useCallback(() => {
|
|
62
|
+
setSearchState({
|
|
63
|
+
type: "open",
|
|
64
|
+
query: ""
|
|
65
|
+
});
|
|
66
|
+
}, []);
|
|
50
67
|
const handleRemove = useCallback(() => {
|
|
51
68
|
onFilterRemoved?.(filterKey);
|
|
52
69
|
}, [filterKey, onFilterRemoved]);
|
|
53
|
-
const
|
|
54
|
-
|
|
70
|
+
const handleToggleExcludeRow = useCallback(() => {
|
|
71
|
+
setExcludeRowOpen(prev => !prev);
|
|
72
|
+
}, []);
|
|
73
|
+
const searchInputRef = useCallback(element => {
|
|
74
|
+
element?.focus({
|
|
75
|
+
preventScroll: true
|
|
76
|
+
});
|
|
77
|
+
}, []);
|
|
78
|
+
const showExcludeDropdown = supportsExcluding(filterState);
|
|
79
|
+
const showSearch = supportsSearch(filterState);
|
|
80
|
+
const searchOpen = searchState.type === "open";
|
|
81
|
+
const searchQuery = searchState.type === "open" ? searchState.query : "";
|
|
82
|
+
const searchQueryForInput = searchState.type === "open" ? searchState.query : undefined;
|
|
55
83
|
return /*#__PURE__*/React.createElement("div", {
|
|
56
84
|
className: classnames(styles.filterItem, className),
|
|
57
|
-
style: style
|
|
58
|
-
"data-excluding": isExcluding || undefined
|
|
85
|
+
style: style
|
|
59
86
|
}, /*#__PURE__*/React.createElement("div", {
|
|
60
87
|
className: styles.itemHeader
|
|
61
88
|
}, dragHandleAttributes && /*#__PURE__*/React.createElement(Button, _extends({
|
|
@@ -63,15 +90,35 @@ function FilterListItemInner({
|
|
|
63
90
|
"aria-label": `Reorder ${label}`
|
|
64
91
|
}, dragHandleAttributes, dragHandleListeners), /*#__PURE__*/React.createElement(DragHandleIcon, null)), /*#__PURE__*/React.createElement("span", {
|
|
65
92
|
className: styles.itemLabel
|
|
66
|
-
}, label),
|
|
67
|
-
className: styles.
|
|
68
|
-
onClick:
|
|
69
|
-
"aria-
|
|
70
|
-
"aria-
|
|
71
|
-
},
|
|
72
|
-
className: styles.
|
|
93
|
+
}, label), showSearch && /*#__PURE__*/React.createElement(Button, {
|
|
94
|
+
className: styles.headerActionButton,
|
|
95
|
+
onClick: handleToggleSearch,
|
|
96
|
+
"aria-label": "Search values",
|
|
97
|
+
"aria-pressed": searchOpen
|
|
98
|
+
}, /*#__PURE__*/React.createElement(SearchIcon, null)), onFilterRemoved && /*#__PURE__*/React.createElement(Button, {
|
|
99
|
+
className: styles.headerActionButton,
|
|
73
100
|
onClick: handleRemove,
|
|
74
101
|
"aria-label": `Remove ${label} filter`
|
|
102
|
+
}, /*#__PURE__*/React.createElement(RemoveIcon, null)), showExcludeDropdown && /*#__PURE__*/React.createElement(Button, {
|
|
103
|
+
className: styles.headerActionButton,
|
|
104
|
+
onClick: handleToggleExcludeRow,
|
|
105
|
+
"aria-label": "More actions",
|
|
106
|
+
"aria-pressed": excludeRowOpen
|
|
107
|
+
}, /*#__PURE__*/React.createElement(OverflowMenuIcon, null))), searchOpen && /*#__PURE__*/React.createElement("div", {
|
|
108
|
+
className: styles.searchRow
|
|
109
|
+
}, /*#__PURE__*/React.createElement(Input, {
|
|
110
|
+
type: "text",
|
|
111
|
+
className: styles.searchInput,
|
|
112
|
+
value: searchQuery,
|
|
113
|
+
onChange: handleSearchChange,
|
|
114
|
+
placeholder: "Search property values...",
|
|
115
|
+
"aria-label": "Search property values",
|
|
116
|
+
ref: searchInputRef
|
|
117
|
+
}), searchQuery && /*#__PURE__*/React.createElement(Button, {
|
|
118
|
+
type: "button",
|
|
119
|
+
className: styles.searchClearButton,
|
|
120
|
+
onClick: handleSearchClear,
|
|
121
|
+
"aria-label": "Clear search"
|
|
75
122
|
}, /*#__PURE__*/React.createElement(RemoveIcon, null))), /*#__PURE__*/React.createElement("div", {
|
|
76
123
|
className: styles.itemContent
|
|
77
124
|
}, /*#__PURE__*/React.createElement(ErrorBoundary, {
|
|
@@ -80,7 +127,9 @@ function FilterListItemInner({
|
|
|
80
127
|
definition,
|
|
81
128
|
filterKey,
|
|
82
129
|
filterState,
|
|
83
|
-
onFilterStateChanged: handleFilterStateChanged
|
|
130
|
+
onFilterStateChanged: handleFilterStateChanged,
|
|
131
|
+
searchQuery: searchQueryForInput,
|
|
132
|
+
excludeRowOpen
|
|
84
133
|
}))));
|
|
85
134
|
}
|
|
86
135
|
export const FilterListItem = /*#__PURE__*/memo(FilterListItemInner);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterListItem.js","names":["Button","classnames","React","memo","useCallback","ErrorBoundary","supportsExcluding","DragHandleIcon","ExcludeIcon","IncludeIcon","RemoveIcon","styles","FilterListItemInner","definition","filterKey","label","filterState","onFilterStateChanged","onFilterRemoved","renderInput","dragHandleAttributes","dragHandleListeners","className","style","handleFilterStateChanged","newState","handleToggleExclude","isExcluding","handleRemove","showExcludeToggle","createElement","filterItem","undefined","itemHeader","_extends","dragHandle","itemLabel","excludeToggle","onClick","removeButton","itemContent","errorMessage","FilterListItem"],"sources":["FilterListItem.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport type {\n DraggableAttributes,\n DraggableSyntheticListeners,\n} from \"@dnd-kit/core\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback } from \"react\";\nimport { ErrorBoundary } from \"../../shared/ErrorBoundary.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { supportsExcluding } from \"../utils/filterValues.js\";\nimport type { RenderFilterInput } from \"./BaseFilterListApi.js\";\nimport { DragHandleIcon } from \"./DragHandleIcon.js\";\nimport { ExcludeIcon, IncludeIcon, RemoveIcon } from \"./FilterIcons.js\";\nimport styles from \"./FilterListItem.module.css\";\n\ninterface FilterListItemProps<D> {\n definition: D;\n filterKey: string;\n label: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (\n filterKey: string,\n state: FilterState,\n ) => void;\n onFilterRemoved?: (filterKey: string) => void;\n renderInput: RenderFilterInput<D>;\n dragHandleAttributes?: DraggableAttributes;\n dragHandleListeners?: DraggableSyntheticListeners;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction FilterListItemInner<D>({\n definition,\n filterKey,\n label,\n filterState,\n onFilterStateChanged,\n onFilterRemoved,\n renderInput,\n dragHandleAttributes,\n dragHandleListeners,\n className,\n style,\n}: FilterListItemProps<D>): React.ReactElement {\n const handleFilterStateChanged = useCallback(\n (newState: FilterState) => {\n onFilterStateChanged(filterKey, newState);\n },\n [filterKey, onFilterStateChanged],\n );\n\n const handleToggleExclude = useCallback(\n () => {\n if (filterState) {\n onFilterStateChanged(filterKey, {\n ...filterState,\n isExcluding: !filterState.isExcluding,\n });\n }\n },\n [filterKey, filterState, onFilterStateChanged],\n );\n\n const handleRemove = useCallback(\n () => {\n onFilterRemoved?.(filterKey);\n },\n [filterKey, onFilterRemoved],\n );\n\n const isExcluding = filterState?.isExcluding ?? false;\n const showExcludeToggle = supportsExcluding(filterState);\n\n return (\n <div\n className={classnames(styles.filterItem, className)}\n style={style}\n data-excluding={isExcluding || undefined}\n >\n <div className={styles.itemHeader}>\n {dragHandleAttributes && (\n <Button\n className={styles.dragHandle}\n aria-label={`Reorder ${label}`}\n {...dragHandleAttributes}\n {...dragHandleListeners}\n >\n <DragHandleIcon />\n </Button>\n )}\n <span className={styles.itemLabel}>{label}</span>\n {showExcludeToggle && (\n <Button\n className={styles.excludeToggle}\n onClick={handleToggleExclude}\n aria-pressed={isExcluding}\n aria-label={isExcluding\n ? \"Switch to include mode\"\n : \"Switch to exclude mode\"}\n >\n {isExcluding ? <ExcludeIcon /> : <IncludeIcon />}\n </Button>\n )}\n {onFilterRemoved && (\n <Button\n className={styles.removeButton}\n onClick={handleRemove}\n aria-label={`Remove ${label} filter`}\n >\n <RemoveIcon />\n </Button>\n )}\n </div>\n\n <div className={styles.itemContent}>\n <ErrorBoundary errorMessage=\"Error loading filter\">\n {renderInput({\n definition,\n filterKey,\n filterState,\n onFilterStateChanged: handleFilterStateChanged,\n })}\n </ErrorBoundary>\n </div>\n </div>\n );\n}\n\nexport const FilterListItem = memo(\n FilterListItemInner,\n) as typeof FilterListItemInner;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FilterListItem.js","names":["Button","Input","classnames","React","memo","useCallback","useState","ErrorBoundary","supportsExcluding","supportsSearch","DragHandleIcon","OverflowMenuIcon","RemoveIcon","SearchIcon","styles","FilterListItemInner","definition","filterKey","label","filterState","onFilterStateChanged","onFilterRemoved","renderInput","dragHandleAttributes","dragHandleListeners","className","style","searchState","setSearchState","type","excludeRowOpen","setExcludeRowOpen","handleFilterStateChanged","newState","handleToggleSearch","prev","query","handleSearchChange","e","target","value","handleSearchClear","handleRemove","handleToggleExcludeRow","searchInputRef","element","focus","preventScroll","showExcludeDropdown","showSearch","searchOpen","searchQuery","searchQueryForInput","undefined","createElement","filterItem","itemHeader","_extends","dragHandle","itemLabel","headerActionButton","onClick","searchRow","searchInput","onChange","placeholder","ref","searchClearButton","itemContent","errorMessage","FilterListItem"],"sources":["FilterListItem.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport { Input } from \"@base-ui/react/input\";\nimport type {\n DraggableAttributes,\n DraggableSyntheticListeners,\n} from \"@dnd-kit/core\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useState } from \"react\";\nimport { ErrorBoundary } from \"../../shared/ErrorBoundary.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { supportsExcluding, supportsSearch } from \"../utils/filterValues.js\";\nimport type { RenderFilterInput } from \"./BaseFilterListApi.js\";\nimport { DragHandleIcon } from \"./DragHandleIcon.js\";\nimport { OverflowMenuIcon, RemoveIcon, SearchIcon } from \"./FilterIcons.js\";\nimport styles from \"./FilterListItem.module.css\";\n\ninterface FilterListItemProps<D> {\n definition: D;\n filterKey: string;\n label: string;\n filterState: FilterState | undefined;\n onFilterStateChanged: (\n filterKey: string,\n state: FilterState,\n ) => void;\n onFilterRemoved?: (filterKey: string) => void;\n renderInput: RenderFilterInput<D>;\n dragHandleAttributes?: DraggableAttributes;\n dragHandleListeners?: DraggableSyntheticListeners;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction FilterListItemInner<D>({\n definition,\n filterKey,\n label,\n filterState,\n onFilterStateChanged,\n onFilterRemoved,\n renderInput,\n dragHandleAttributes,\n dragHandleListeners,\n className,\n style,\n}: FilterListItemProps<D>): React.ReactElement {\n const [searchState, setSearchState] = useState<\n { type: \"closed\" } | { type: \"open\"; query: string }\n >({ type: \"closed\" });\n const [excludeRowOpen, setExcludeRowOpen] = useState(false);\n\n const handleFilterStateChanged = useCallback(\n (newState: FilterState) => {\n onFilterStateChanged(filterKey, newState);\n },\n [filterKey, onFilterStateChanged],\n );\n\n const handleToggleSearch = useCallback(() => {\n setSearchState((prev) =>\n prev.type === \"closed\" ? { type: \"open\", query: \"\" } : { type: \"closed\" }\n );\n }, []);\n\n const handleSearchChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchState({ type: \"open\", query: e.target.value });\n },\n [],\n );\n\n const handleSearchClear = useCallback(() => {\n setSearchState({ type: \"open\", query: \"\" });\n }, []);\n\n const handleRemove = useCallback(() => {\n onFilterRemoved?.(filterKey);\n }, [filterKey, onFilterRemoved]);\n\n const handleToggleExcludeRow = useCallback(() => {\n setExcludeRowOpen((prev) => !prev);\n }, []);\n\n const searchInputRef = useCallback((element: HTMLInputElement | null) => {\n element?.focus({ preventScroll: true });\n }, []);\n\n const showExcludeDropdown = supportsExcluding(filterState);\n const showSearch = supportsSearch(filterState);\n const hasOverflowActions = showExcludeDropdown;\n\n const searchOpen = searchState.type === \"open\";\n const searchQuery = searchState.type === \"open\" ? searchState.query : \"\";\n const searchQueryForInput = searchState.type === \"open\"\n ? searchState.query\n : undefined;\n\n return (\n <div\n className={classnames(styles.filterItem, className)}\n style={style}\n >\n <div className={styles.itemHeader}>\n {dragHandleAttributes && (\n <Button\n className={styles.dragHandle}\n aria-label={`Reorder ${label}`}\n {...dragHandleAttributes}\n {...dragHandleListeners}\n >\n <DragHandleIcon />\n </Button>\n )}\n <span className={styles.itemLabel}>{label}</span>\n {showSearch && (\n <Button\n className={styles.headerActionButton}\n onClick={handleToggleSearch}\n aria-label=\"Search values\"\n aria-pressed={searchOpen}\n >\n <SearchIcon />\n </Button>\n )}\n {onFilterRemoved && (\n <Button\n className={styles.headerActionButton}\n onClick={handleRemove}\n aria-label={`Remove ${label} filter`}\n >\n <RemoveIcon />\n </Button>\n )}\n {hasOverflowActions && (\n <Button\n className={styles.headerActionButton}\n onClick={handleToggleExcludeRow}\n aria-label=\"More actions\"\n aria-pressed={excludeRowOpen}\n >\n <OverflowMenuIcon />\n </Button>\n )}\n </div>\n\n {searchOpen && (\n <div className={styles.searchRow}>\n <Input\n type=\"text\"\n className={styles.searchInput}\n value={searchQuery}\n onChange={handleSearchChange}\n placeholder=\"Search property values...\"\n aria-label=\"Search property values\"\n ref={searchInputRef}\n />\n {searchQuery && (\n <Button\n type=\"button\"\n className={styles.searchClearButton}\n onClick={handleSearchClear}\n aria-label=\"Clear search\"\n >\n <RemoveIcon />\n </Button>\n )}\n </div>\n )}\n\n <div className={styles.itemContent}>\n <ErrorBoundary errorMessage=\"Error loading filter\">\n {renderInput({\n definition,\n filterKey,\n filterState,\n onFilterStateChanged: handleFilterStateChanged,\n searchQuery: searchQueryForInput,\n excludeRowOpen,\n })}\n </ErrorBoundary>\n </div>\n </div>\n );\n}\n\nexport const FilterListItem = memo(\n FilterListItemInner,\n) as typeof FilterListItemInner;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
display: flex;
|
|
19
19
|
flex-direction: column;
|
|
20
20
|
gap: var(--osdk-filter-item-gap);
|
|
21
|
+
border-radius: var(--osdk-filter-item-border-radius);
|
|
22
|
+
padding: var(--osdk-filter-item-padding);
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
.itemHeader {
|
|
@@ -36,6 +38,8 @@
|
|
|
36
38
|
.itemContent {
|
|
37
39
|
display: flex;
|
|
38
40
|
flex-direction: column;
|
|
41
|
+
min-width: 0;
|
|
42
|
+
overflow: hidden;
|
|
39
43
|
}
|
|
40
44
|
|
|
41
45
|
.dragHandle {
|
|
@@ -66,59 +70,131 @@
|
|
|
66
70
|
}
|
|
67
71
|
}
|
|
68
72
|
|
|
69
|
-
.
|
|
73
|
+
.headerActionButton {
|
|
70
74
|
display: flex;
|
|
71
75
|
align-items: center;
|
|
72
76
|
justify-content: center;
|
|
73
|
-
padding: var(--osdk-filter-item-
|
|
74
|
-
margin-left:
|
|
77
|
+
padding: var(--osdk-filter-item-header-action-padding);
|
|
78
|
+
margin-left: calc(var(--osdk-surface-spacing) * 0.5);
|
|
75
79
|
border: none;
|
|
76
80
|
background: transparent;
|
|
77
81
|
cursor: pointer;
|
|
78
|
-
border-radius: var(--osdk-filter-item-
|
|
79
|
-
color: var(--osdk-filter-item-
|
|
82
|
+
border-radius: var(--osdk-filter-item-header-action-border-radius);
|
|
83
|
+
color: var(--osdk-filter-item-header-action-color);
|
|
84
|
+
opacity: 0;
|
|
85
|
+
transition: opacity var(--osdk-filter-header-button-transition),
|
|
86
|
+
background-color var(--osdk-filter-header-button-transition);
|
|
80
87
|
|
|
81
88
|
&:hover {
|
|
82
|
-
color: var(--osdk-
|
|
83
|
-
background: var(--osdk-filter-item-
|
|
89
|
+
color: var(--osdk-typography-color-default-rest);
|
|
90
|
+
background: var(--osdk-filter-item-header-action-bg-hover);
|
|
84
91
|
}
|
|
85
92
|
|
|
86
93
|
&:focus-visible {
|
|
94
|
+
opacity: 1;
|
|
87
95
|
outline: var(--osdk-filter-input-focus-outline-width) solid var(--osdk-filter-input-focus-outline-color);
|
|
88
96
|
outline-offset: var(--osdk-filter-input-focus-outline-offset);
|
|
89
97
|
}
|
|
98
|
+
|
|
99
|
+
@media (prefers-reduced-motion: reduce) {
|
|
100
|
+
transition: none;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.filterItem:hover .headerActionButton {
|
|
105
|
+
opacity: 1;
|
|
90
106
|
}
|
|
91
107
|
|
|
92
|
-
.
|
|
93
|
-
|
|
108
|
+
.headerActionButton[data-popup-open],
|
|
109
|
+
.headerActionButton[aria-pressed="true"] {
|
|
110
|
+
opacity: 1;
|
|
94
111
|
}
|
|
95
112
|
|
|
96
|
-
.
|
|
113
|
+
.searchRow {
|
|
97
114
|
display: flex;
|
|
98
115
|
align-items: center;
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
116
|
+
background: var(--osdk-filter-input-bg);
|
|
117
|
+
border: var(--osdk-filter-input-border);
|
|
118
|
+
border-radius: var(--osdk-filter-input-border-radius);
|
|
119
|
+
padding: var(--osdk-filter-input-padding);
|
|
120
|
+
gap: var(--osdk-filter-input-gap);
|
|
121
|
+
|
|
122
|
+
&:focus-within {
|
|
123
|
+
outline: var(--osdk-filter-input-focus-outline-width) solid var(--osdk-filter-input-focus-outline-color);
|
|
124
|
+
outline-offset: var(--osdk-filter-input-focus-outline-offset);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.searchInput {
|
|
129
|
+
flex: 1;
|
|
102
130
|
border: none;
|
|
103
131
|
background: transparent;
|
|
132
|
+
font-family: var(--osdk-filter-input-font-family);
|
|
133
|
+
font-size: var(--osdk-filter-input-font-size);
|
|
134
|
+
color: var(--osdk-filter-input-color);
|
|
135
|
+
outline: none;
|
|
136
|
+
|
|
137
|
+
&::placeholder {
|
|
138
|
+
color: var(--osdk-filter-input-placeholder-color);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.searchClearButton {
|
|
143
|
+
display: flex;
|
|
144
|
+
align-items: center;
|
|
145
|
+
justify-content: center;
|
|
146
|
+
padding: var(--osdk-filter-input-clear-padding);
|
|
147
|
+
border: none;
|
|
148
|
+
background: var(--osdk-filter-input-clear-bg);
|
|
149
|
+
color: var(--osdk-filter-input-icon-color);
|
|
104
150
|
cursor: pointer;
|
|
105
|
-
border-radius: var(--osdk-filter-
|
|
106
|
-
|
|
151
|
+
border-radius: var(--osdk-filter-input-clear-border-radius);
|
|
152
|
+
transition: background-color var(--osdk-filter-input-transition);
|
|
107
153
|
|
|
108
154
|
&:hover {
|
|
109
|
-
|
|
110
|
-
|
|
155
|
+
background: var(--osdk-filter-input-clear-bg-hover);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
&:active {
|
|
159
|
+
background: var(--osdk-filter-input-clear-bg-active);
|
|
111
160
|
}
|
|
112
161
|
|
|
113
162
|
&:focus-visible {
|
|
114
163
|
outline: var(--osdk-filter-input-focus-outline-width) solid var(--osdk-filter-input-focus-outline-color);
|
|
115
164
|
outline-offset: var(--osdk-filter-input-focus-outline-offset);
|
|
116
165
|
}
|
|
166
|
+
|
|
167
|
+
@media (prefers-reduced-motion: reduce) {
|
|
168
|
+
transition: none;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.excludeRow {
|
|
173
|
+
display: flex;
|
|
174
|
+
align-items: center;
|
|
175
|
+
opacity: 0;
|
|
176
|
+
height: 0;
|
|
177
|
+
overflow: hidden;
|
|
178
|
+
transition: opacity var(--osdk-filter-header-button-transition),
|
|
179
|
+
height var(--osdk-filter-header-button-transition);
|
|
180
|
+
|
|
181
|
+
@media (prefers-reduced-motion: reduce) {
|
|
182
|
+
transition: none;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.filterItem:hover [data-exclude-row],
|
|
187
|
+
.excludeRowVisible {
|
|
188
|
+
opacity: 1;
|
|
189
|
+
height: auto;
|
|
190
|
+
overflow: visible;
|
|
117
191
|
}
|
|
118
192
|
|
|
119
|
-
.
|
|
120
|
-
|
|
121
|
-
|
|
193
|
+
.excludeCountLabel {
|
|
194
|
+
font-family: var(--osdk-filter-item-exclude-dropdown-font-family);
|
|
195
|
+
font-size: var(--osdk-filter-item-exclude-dropdown-font-size);
|
|
196
|
+
color: var(--osdk-filter-item-exclude-dropdown-color);
|
|
197
|
+
margin-left: calc(var(--osdk-surface-spacing) * 0.5);
|
|
122
198
|
}
|
|
123
199
|
|
|
124
200
|
.dragging {
|
|
@@ -21,7 +21,7 @@ import { filterValuesBySearch } from "../../utils/filterValues.js";
|
|
|
21
21
|
import styles from "./CheckboxListInput.module.css";
|
|
22
22
|
import { CheckboxListSkeleton } from "./CheckboxListSkeleton.js";
|
|
23
23
|
import sharedStyles from "./shared.module.css";
|
|
24
|
-
import {
|
|
24
|
+
import { useStableData } from "./useStableData.js";
|
|
25
25
|
function CheckboxListInputInner({
|
|
26
26
|
values,
|
|
27
27
|
isLoading,
|
|
@@ -33,7 +33,7 @@ function CheckboxListInputInner({
|
|
|
33
33
|
className,
|
|
34
34
|
style
|
|
35
35
|
}) {
|
|
36
|
-
const stableValues =
|
|
36
|
+
const stableValues = useStableData(values, isLoading);
|
|
37
37
|
const displayValues = useMemo(() => {
|
|
38
38
|
const allValues = stableValues.map(item => item.value);
|
|
39
39
|
if (searchQuery) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckboxListInput.js","names":["classnames","React","memo","useCallback","useMemo","Checkbox","filterValuesBySearch","styles","CheckboxListSkeleton","sharedStyles","
|
|
1
|
+
{"version":3,"file":"CheckboxListInput.js","names":["classnames","React","memo","useCallback","useMemo","Checkbox","filterValuesBySearch","styles","CheckboxListSkeleton","sharedStyles","useStableData","CheckboxListInputInner","values","isLoading","error","selectedValues","onChange","colorMap","searchQuery","className","style","stableValues","displayValues","allValues","map","item","value","v","selectedSet","Set","toggleValue","has","filter","createElement","checkboxList","length","errorMessage","message","emptyMessage","isSelected","color","key","checkboxRow","checkboxLabel","checked","onCheckedChange","colorDot","backgroundColor","valueText","CheckboxListInput"],"sources":["CheckboxListInput.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport { Checkbox } from \"../../../base-components/checkbox/Checkbox.js\";\nimport type { PropertyAggregationValue } from \"../../types/AggregationTypes.js\";\nimport { filterValuesBySearch } from \"../../utils/filterValues.js\";\nimport styles from \"./CheckboxListInput.module.css\";\nimport { CheckboxListSkeleton } from \"./CheckboxListSkeleton.js\";\nimport sharedStyles from \"./shared.module.css\";\nimport { useStableData } from \"./useStableData.js\";\n\ninterface CheckboxListInputProps {\n values: PropertyAggregationValue[];\n isLoading: boolean;\n error: Error | null;\n selectedValues: string[];\n onChange: (selectedValues: string[]) => void;\n colorMap?: Record<string, string>;\n searchQuery?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction CheckboxListInputInner({\n values,\n isLoading,\n error,\n selectedValues,\n onChange,\n colorMap,\n searchQuery,\n className,\n style,\n}: CheckboxListInputProps): React.ReactElement {\n const stableValues = useStableData(values, isLoading);\n\n const displayValues = useMemo(\n () => {\n const allValues = stableValues.map((item) => item.value);\n if (searchQuery) {\n return filterValuesBySearch(allValues, searchQuery, (v) => v);\n }\n return allValues;\n },\n [stableValues, searchQuery],\n );\n\n const selectedSet = useMemo(\n () => new Set(selectedValues),\n [selectedValues],\n );\n\n const toggleValue = useCallback(\n (value: string) => {\n if (selectedSet.has(value)) {\n onChange(selectedValues.filter((v) => v !== value));\n } else {\n onChange([...selectedValues, value]);\n }\n },\n [selectedValues, selectedSet, onChange],\n );\n\n return (\n <div\n className={classnames(styles.checkboxList, className)}\n style={style}\n data-loading={isLoading && displayValues.length > 0}\n >\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading values: {error.message}\n </div>\n )}\n\n {!error && displayValues.length === 0 && isLoading && (\n <CheckboxListSkeleton />\n )}\n {!error && displayValues.length === 0 && !isLoading && (\n <div className={sharedStyles.emptyMessage}>\n No values available\n </div>\n )}\n\n {displayValues.map((value) => {\n const isSelected = selectedSet.has(value);\n const color = colorMap?.[value];\n\n return (\n <div\n key={value}\n className={styles.checkboxRow}\n data-selected={isSelected}\n >\n <label className={styles.checkboxLabel}>\n <Checkbox\n checked={isSelected}\n onCheckedChange={() => toggleValue(value)}\n />\n {color && (\n <span\n className={styles.colorDot}\n style={{ backgroundColor: color }}\n />\n )}\n <span className={styles.valueText}>\n {value}\n </span>\n </label>\n </div>\n );\n })}\n </div>\n );\n}\n\nexport const CheckboxListInput = memo(\n CheckboxListInputInner,\n) as typeof CheckboxListInputInner;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -63,9 +63,7 @@ function ContainsTextInputInner({
|
|
|
63
63
|
className: styles.inputGroup
|
|
64
64
|
}, renderSearchIcon ? renderSearchIcon() : /*#__PURE__*/React.createElement("span", {
|
|
65
65
|
className: styles.searchIcon
|
|
66
|
-
}, /*#__PURE__*/React.createElement(Search, {
|
|
67
|
-
color: "currentColor"
|
|
68
|
-
})), /*#__PURE__*/React.createElement(Input, {
|
|
66
|
+
}, /*#__PURE__*/React.createElement(Search, null)), /*#__PURE__*/React.createElement(Input, {
|
|
69
67
|
type: "text",
|
|
70
68
|
className: styles.input,
|
|
71
69
|
value: localValue,
|
|
@@ -77,9 +75,7 @@ function ContainsTextInputInner({
|
|
|
77
75
|
className: styles.clearButton,
|
|
78
76
|
onClick: handleClear,
|
|
79
77
|
"aria-label": "Clear search"
|
|
80
|
-
}, renderClearIcon ? renderClearIcon() : /*#__PURE__*/React.createElement(Cross,
|
|
81
|
-
color: "currentColor"
|
|
82
|
-
}))));
|
|
78
|
+
}, renderClearIcon ? renderClearIcon() : /*#__PURE__*/React.createElement(Cross, null))));
|
|
83
79
|
}
|
|
84
80
|
export const ContainsTextInput = /*#__PURE__*/memo(ContainsTextInputInner);
|
|
85
81
|
//# sourceMappingURL=ContainsTextInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContainsTextInput.js","names":["Button","Input","Cross","Search","classnames","debounce","React","memo","useCallback","useEffect","useMemo","useRef","useState","styles","ContainsTextInputInner","value","onChange","placeholder","debounceMs","className","style","renderSearchIcon","renderClearIcon","localValue","setLocalValue","onChangeRef","current","debouncedOnChange","newValue","length","undefined","cancel","handleInputChange","e","target","handleClear","createElement","textInput","inputGroup","searchIcon","
|
|
1
|
+
{"version":3,"file":"ContainsTextInput.js","names":["Button","Input","Cross","Search","classnames","debounce","React","memo","useCallback","useEffect","useMemo","useRef","useState","styles","ContainsTextInputInner","value","onChange","placeholder","debounceMs","className","style","renderSearchIcon","renderClearIcon","localValue","setLocalValue","onChangeRef","current","debouncedOnChange","newValue","length","undefined","cancel","handleInputChange","e","target","handleClear","createElement","textInput","inputGroup","searchIcon","type","input","clearButton","onClick","ContainsTextInput"],"sources":["ContainsTextInput.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@base-ui/react/button\";\nimport { Input } from \"@base-ui/react/input\";\nimport { Cross, Search } from \"@blueprintjs/icons\";\nimport classnames from \"classnames\";\nimport { debounce } from \"lodash-es\";\nimport React, {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport styles from \"./ContainsTextInput.module.css\";\n\ninterface ContainsTextInputProps {\n value: string | undefined;\n onChange: (value: string | undefined) => void;\n placeholder?: string;\n debounceMs?: number;\n className?: string;\n style?: React.CSSProperties;\n renderSearchIcon?: () => React.ReactNode;\n renderClearIcon?: () => React.ReactNode;\n}\n\nfunction ContainsTextInputInner({\n value,\n onChange,\n placeholder = \"Search...\",\n debounceMs = 300,\n className,\n style,\n renderSearchIcon,\n renderClearIcon,\n}: ContainsTextInputProps): React.ReactElement {\n const [localValue, setLocalValue] = useState(value ?? \"\");\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const debouncedOnChange = useMemo(\n () =>\n debounce((newValue: string) => {\n onChangeRef.current(newValue.length > 0 ? newValue : undefined);\n }, debounceMs),\n [debounceMs],\n );\n\n useEffect(() => {\n return () => {\n debouncedOnChange.cancel();\n };\n }, [debouncedOnChange]);\n\n useEffect(() => {\n setLocalValue(value ?? \"\");\n debouncedOnChange.cancel();\n }, [value, debouncedOnChange]);\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setLocalValue(e.target.value);\n debouncedOnChange(e.target.value);\n },\n [debouncedOnChange],\n );\n\n const handleClear = useCallback(() => {\n setLocalValue(\"\");\n debouncedOnChange.cancel();\n onChangeRef.current(undefined);\n }, [debouncedOnChange]);\n\n return (\n <div\n className={classnames(styles.textInput, className)}\n style={style}\n data-has-value={!!localValue}\n >\n <div className={styles.inputGroup}>\n {renderSearchIcon\n ? renderSearchIcon()\n : (\n <span className={styles.searchIcon}>\n <Search />\n </span>\n )}\n <Input\n type=\"text\"\n className={styles.input}\n value={localValue}\n onChange={handleInputChange}\n placeholder={placeholder}\n aria-label={placeholder}\n />\n {localValue && (\n <Button\n type=\"button\"\n className={styles.clearButton}\n onClick={handleClear}\n aria-label=\"Clear search\"\n >\n {renderClearIcon\n ? renderClearIcon()\n : <Cross />}\n </Button>\n )}\n </div>\n </div>\n );\n}\n\nexport const ContainsTextInput: React.NamedExoticComponent<\n ContainsTextInputProps\n> = memo(ContainsTextInputInner);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -21,7 +21,7 @@ import { filterValuesBySearch } from "../../utils/filterValues.js";
|
|
|
21
21
|
import styles from "./ListogramInput.module.css";
|
|
22
22
|
import { ListogramSkeleton } from "./ListogramSkeleton.js";
|
|
23
23
|
import sharedStyles from "./shared.module.css";
|
|
24
|
-
import {
|
|
24
|
+
import { useStableData } from "./useStableData.js";
|
|
25
25
|
function ListogramInputInner({
|
|
26
26
|
values,
|
|
27
27
|
maxCount,
|
|
@@ -37,7 +37,7 @@ function ListogramInputInner({
|
|
|
37
37
|
searchQuery
|
|
38
38
|
}) {
|
|
39
39
|
const [isExpanded, setIsExpanded] = useState(false);
|
|
40
|
-
const stableValues =
|
|
40
|
+
const stableValues = useStableData(values, isLoading);
|
|
41
41
|
const selectedSet = useMemo(() => new Set(selectedValues), [selectedValues]);
|
|
42
42
|
const toggleValue = useCallback(value => {
|
|
43
43
|
if (selectedSet.has(value)) {
|