@osdk/react-components 0.2.0-beta.27 → 0.2.0-beta.29
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/CHANGELOG.md +15 -0
- package/README.md +58 -3
- package/build/browser/action-form/FormFieldApi.js.map +1 -1
- package/build/browser/action-form/fields/FormFieldRenderer.js +8 -0
- package/build/browser/action-form/fields/FormFieldRenderer.js.map +1 -1
- package/build/browser/action-form/fields/NumberInputField.js +130 -0
- package/build/browser/action-form/fields/NumberInputField.js.map +1 -0
- package/build/browser/action-form/fields/NumberInputField.module.css +96 -0
- package/build/browser/action-form/fields/NumberInputField.module.css.js +9 -0
- package/build/browser/base-components/checkbox/Checkbox.js +6 -2
- package/build/browser/base-components/checkbox/Checkbox.js.map +1 -1
- package/build/browser/base-components/checkbox/Checkbox.module.css +15 -2
- package/build/browser/base-components/combobox/Combobox.js +14 -1
- package/build/browser/base-components/combobox/Combobox.js.map +1 -1
- package/build/browser/base-components/combobox/Combobox.module.css +16 -6
- package/build/browser/base-components/combobox/Combobox.module.css.js +1 -0
- package/build/browser/base-components/searchable-menu/SearchableMenu.js +86 -0
- package/build/browser/base-components/searchable-menu/SearchableMenu.js.map +1 -0
- package/build/browser/base-components/searchable-menu/SearchableMenu.module.css +80 -0
- package/build/browser/base-components/searchable-menu/SearchableMenu.module.css.js +10 -0
- package/build/browser/filter-list/FilterList.js +3 -1
- 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/FilterListItemApi.js.map +1 -1
- package/build/browser/filter-list/base/AddFilterPopover.js +10 -21
- package/build/browser/filter-list/base/AddFilterPopover.js.map +1 -1
- package/build/browser/filter-list/base/AddFilterPopover.module.css +6 -40
- package/build/browser/filter-list/base/AddFilterPopover.module.css.js +1 -4
- package/build/browser/filter-list/base/BaseFilterList.js +4 -2
- package/build/browser/filter-list/base/BaseFilterList.js.map +1 -1
- package/build/browser/filter-list/base/ExcludeDropdown.js +4 -3
- package/build/browser/filter-list/base/ExcludeDropdown.js.map +1 -1
- package/build/browser/filter-list/base/ExcludeDropdown.module.css +7 -5
- package/build/browser/filter-list/base/FilterIcons.js +9 -3
- package/build/browser/filter-list/base/FilterIcons.js.map +1 -1
- package/build/browser/filter-list/base/FilterInputExcludeRow.js +14 -2
- package/build/browser/filter-list/base/FilterInputExcludeRow.js.map +1 -1
- package/build/browser/filter-list/base/FilterList.module.css +19 -6
- package/build/browser/filter-list/base/FilterList.module.css.js +1 -0
- package/build/browser/filter-list/base/FilterListContent.js +38 -17
- package/build/browser/filter-list/base/FilterListContent.js.map +1 -1
- package/build/browser/filter-list/base/FilterListHeader.js +1 -1
- package/build/browser/filter-list/base/FilterListHeader.js.map +1 -1
- package/build/browser/filter-list/base/FilterListHeader.module.css +8 -3
- package/build/browser/filter-list/base/FilterListItem.js +33 -1
- package/build/browser/filter-list/base/FilterListItem.js.map +1 -1
- package/build/browser/filter-list/base/FilterListItem.module.css +15 -6
- package/build/browser/filter-list/base/FilterListItem.module.css.js +1 -0
- package/build/browser/filter-list/base/SortableFilterListItem.js +3 -2
- package/build/browser/filter-list/base/SortableFilterListItem.js.map +1 -1
- package/build/browser/filter-list/base/inputs/ListogramInput.js +26 -11
- package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/ListogramInput.module.css +31 -0
- package/build/browser/filter-list/base/inputs/ListogramInput.module.css.js +2 -0
- package/build/browser/filter-list/base/inputs/MultiSelectInput.js +26 -43
- package/build/browser/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css +7 -8
- package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css.js +1 -2
- package/build/browser/filter-list/base/inputs/NullValueWrapper.js +1 -1
- package/build/browser/filter-list/base/inputs/NullValueWrapper.js.map +1 -1
- package/build/browser/filter-list/base/inputs/RangeInput.js +5 -3
- package/build/browser/filter-list/base/inputs/RangeInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/RangeInput.module.css +7 -7
- package/build/browser/filter-list/base/inputs/SingleSelectInput.js +21 -30
- package/build/browser/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
- package/build/browser/filter-list/base/inputs/SingleSelectInput.module.css +13 -23
- package/build/browser/filter-list/base/inputs/SingleSelectInput.module.css.js +3 -1
- package/build/browser/filter-list/base/inputs/index.js +0 -1
- package/build/browser/filter-list/base/inputs/index.js.map +1 -1
- package/build/browser/filter-list/hooks/useFilterListState.js +16 -12
- package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -1
- package/build/browser/filter-list/hooks/usePropertyAggregation.js +7 -2
- package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -1
- package/build/browser/filter-list/inputs/ContainsTextFilterInput.js +1 -1
- package/build/browser/filter-list/inputs/ContainsTextFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/LinkedPropertyInput.js +0 -35
- package/build/browser/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
- package/build/browser/filter-list/inputs/ListogramFilterInput.js +14 -3
- package/build/browser/filter-list/inputs/ListogramFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/MultiSelectFilterInput.js +9 -1
- package/build/browser/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/PropertyFilterInput.js +1 -14
- package/build/browser/filter-list/inputs/PropertyFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/SingleSelectFilterInput.js +9 -1
- package/build/browser/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
- package/build/browser/filter-list/inputs/TextTagsFilterInput.js +9 -1
- package/build/browser/filter-list/inputs/TextTagsFilterInput.js.map +1 -1
- package/build/browser/filter-list/utils/filterStateToWhereClause.js +2 -7
- package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -1
- package/build/browser/object-table/ColumnConfigDialog.module.css +1 -2
- package/build/browser/object-table/MultiColumnSortDialog.js +22 -59
- package/build/browser/object-table/MultiColumnSortDialog.js.map +1 -1
- package/build/browser/object-table/MultiColumnSortDialog.module.css +0 -64
- package/build/browser/object-table/MultiColumnSortDialog.module.css.js +0 -5
- package/build/browser/styles.css +324 -272
- package/build/cjs/public/experimental.cjs +1673 -1605
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +501 -462
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +31 -26
- package/build/esm/action-form/FormFieldApi.js.map +1 -1
- package/build/esm/action-form/fields/FormFieldRenderer.js +8 -0
- package/build/esm/action-form/fields/FormFieldRenderer.js.map +1 -1
- package/build/esm/action-form/fields/NumberInputField.js +130 -0
- package/build/esm/action-form/fields/NumberInputField.js.map +1 -0
- package/build/esm/action-form/fields/NumberInputField.module.css +96 -0
- package/build/esm/base-components/checkbox/Checkbox.js +6 -2
- package/build/esm/base-components/checkbox/Checkbox.js.map +1 -1
- package/build/esm/base-components/checkbox/Checkbox.module.css +15 -2
- package/build/esm/base-components/combobox/Combobox.js +14 -1
- package/build/esm/base-components/combobox/Combobox.js.map +1 -1
- package/build/esm/base-components/combobox/Combobox.module.css +16 -6
- package/build/esm/base-components/searchable-menu/SearchableMenu.js +86 -0
- package/build/esm/base-components/searchable-menu/SearchableMenu.js.map +1 -0
- package/build/esm/base-components/searchable-menu/SearchableMenu.module.css +80 -0
- package/build/esm/filter-list/FilterList.js +3 -1
- 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/FilterListItemApi.js.map +1 -1
- package/build/esm/filter-list/base/AddFilterPopover.js +10 -21
- package/build/esm/filter-list/base/AddFilterPopover.js.map +1 -1
- package/build/esm/filter-list/base/AddFilterPopover.module.css +6 -40
- package/build/esm/filter-list/base/BaseFilterList.js +4 -2
- package/build/esm/filter-list/base/BaseFilterList.js.map +1 -1
- package/build/esm/filter-list/base/ExcludeDropdown.js +4 -3
- package/build/esm/filter-list/base/ExcludeDropdown.js.map +1 -1
- package/build/esm/filter-list/base/ExcludeDropdown.module.css +7 -5
- package/build/esm/filter-list/base/FilterIcons.js +9 -3
- package/build/esm/filter-list/base/FilterIcons.js.map +1 -1
- package/build/esm/filter-list/base/FilterInputExcludeRow.js +14 -2
- package/build/esm/filter-list/base/FilterInputExcludeRow.js.map +1 -1
- package/build/esm/filter-list/base/FilterList.module.css +19 -6
- package/build/esm/filter-list/base/FilterListContent.js +38 -17
- package/build/esm/filter-list/base/FilterListContent.js.map +1 -1
- package/build/esm/filter-list/base/FilterListHeader.js +1 -1
- package/build/esm/filter-list/base/FilterListHeader.js.map +1 -1
- package/build/esm/filter-list/base/FilterListHeader.module.css +8 -3
- package/build/esm/filter-list/base/FilterListItem.js +33 -1
- package/build/esm/filter-list/base/FilterListItem.js.map +1 -1
- package/build/esm/filter-list/base/FilterListItem.module.css +15 -6
- package/build/esm/filter-list/base/SortableFilterListItem.js +3 -2
- package/build/esm/filter-list/base/SortableFilterListItem.js.map +1 -1
- package/build/esm/filter-list/base/inputs/ListogramInput.js +26 -11
- package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/ListogramInput.module.css +31 -0
- package/build/esm/filter-list/base/inputs/MultiSelectInput.js +26 -43
- package/build/esm/filter-list/base/inputs/MultiSelectInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/MultiSelectInput.module.css +7 -8
- package/build/esm/filter-list/base/inputs/NullValueWrapper.js +1 -1
- package/build/esm/filter-list/base/inputs/NullValueWrapper.js.map +1 -1
- package/build/esm/filter-list/base/inputs/RangeInput.js +5 -3
- package/build/esm/filter-list/base/inputs/RangeInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/RangeInput.module.css +7 -7
- package/build/esm/filter-list/base/inputs/SingleSelectInput.js +21 -30
- package/build/esm/filter-list/base/inputs/SingleSelectInput.js.map +1 -1
- package/build/esm/filter-list/base/inputs/SingleSelectInput.module.css +13 -23
- package/build/esm/filter-list/base/inputs/index.js +0 -1
- package/build/esm/filter-list/base/inputs/index.js.map +1 -1
- package/build/esm/filter-list/hooks/useFilterListState.js +16 -12
- package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -1
- package/build/esm/filter-list/hooks/usePropertyAggregation.js +7 -2
- package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -1
- package/build/esm/filter-list/inputs/ContainsTextFilterInput.js +1 -1
- package/build/esm/filter-list/inputs/ContainsTextFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/LinkedPropertyInput.js +0 -35
- package/build/esm/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
- package/build/esm/filter-list/inputs/ListogramFilterInput.js +14 -3
- package/build/esm/filter-list/inputs/ListogramFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/MultiSelectFilterInput.js +9 -1
- package/build/esm/filter-list/inputs/MultiSelectFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/PropertyFilterInput.js +1 -14
- package/build/esm/filter-list/inputs/PropertyFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/SingleSelectFilterInput.js +9 -1
- package/build/esm/filter-list/inputs/SingleSelectFilterInput.js.map +1 -1
- package/build/esm/filter-list/inputs/TextTagsFilterInput.js +9 -1
- package/build/esm/filter-list/inputs/TextTagsFilterInput.js.map +1 -1
- package/build/esm/filter-list/utils/filterStateToWhereClause.js +2 -7
- package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -1
- package/build/esm/object-table/ColumnConfigDialog.module.css +1 -2
- package/build/esm/object-table/MultiColumnSortDialog.js +22 -59
- package/build/esm/object-table/MultiColumnSortDialog.js.map +1 -1
- package/build/esm/object-table/MultiColumnSortDialog.module.css +0 -64
- package/build/types/action-form/FormFieldApi.d.ts +22 -4
- package/build/types/action-form/FormFieldApi.d.ts.map +1 -1
- package/build/types/action-form/fields/FormFieldRenderer.d.ts.map +1 -1
- package/build/types/action-form/fields/NumberInputField.d.ts +3 -0
- package/build/types/action-form/fields/NumberInputField.d.ts.map +1 -0
- package/build/types/base-components/checkbox/Checkbox.d.ts +2 -1
- package/build/types/base-components/checkbox/Checkbox.d.ts.map +1 -1
- package/build/types/base-components/combobox/Combobox.d.ts +6 -1
- package/build/types/base-components/combobox/Combobox.d.ts.map +1 -1
- package/build/types/base-components/searchable-menu/SearchableMenu.d.ts +18 -0
- package/build/types/base-components/searchable-menu/SearchableMenu.d.ts.map +1 -0
- package/build/types/filter-list/FilterListApi.d.ts +0 -7
- package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/FilterListItemApi.d.ts +10 -7
- package/build/types/filter-list/FilterListItemApi.d.ts.map +1 -1
- package/build/types/filter-list/base/AddFilterPopover.d.ts.map +1 -1
- package/build/types/filter-list/base/ExcludeDropdown.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterIcons.d.ts +1 -0
- package/build/types/filter-list/base/FilterIcons.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterInputExcludeRow.d.ts +2 -1
- package/build/types/filter-list/base/FilterInputExcludeRow.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterListContent.d.ts.map +1 -1
- package/build/types/filter-list/base/FilterListItem.d.ts.map +1 -1
- package/build/types/filter-list/base/SortableFilterListItem.d.ts +2 -1
- package/build/types/filter-list/base/SortableFilterListItem.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/ListogramInput.d.ts +2 -1
- package/build/types/filter-list/base/inputs/ListogramInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts +1 -3
- package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/RangeInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/SingleSelectInput.d.ts.map +1 -1
- package/build/types/filter-list/base/inputs/index.d.ts +0 -1
- package/build/types/filter-list/base/inputs/index.d.ts.map +1 -1
- package/build/types/filter-list/hooks/useFilterListState.d.ts +1 -0
- package/build/types/filter-list/hooks/useFilterListState.d.ts.map +1 -1
- package/build/types/filter-list/hooks/usePropertyAggregation.d.ts +1 -0
- package/build/types/filter-list/hooks/usePropertyAggregation.d.ts.map +1 -1
- package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/ListogramFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/MultiSelectFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/PropertyFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/SingleSelectFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/inputs/TextTagsFilterInput.d.ts.map +1 -1
- package/build/types/filter-list/utils/filterStateToWhereClause.d.ts +1 -1
- package/build/types/filter-list/utils/filterStateToWhereClause.d.ts.map +1 -1
- package/build/types/object-table/MultiColumnSortDialog.d.ts.map +1 -1
- package/package.json +5 -5
- package/build/browser/filter-list/base/inputs/CheckboxListInput.js +0 -83
- package/build/browser/filter-list/base/inputs/CheckboxListInput.js.map +0 -1
- package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css +0 -65
- package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css.js +0 -10
- package/build/browser/filter-list/base/inputs/CheckboxListSkeleton.js +0 -46
- package/build/browser/filter-list/base/inputs/CheckboxListSkeleton.js.map +0 -1
- package/build/browser/filter-list/base/inputs/CheckboxListSkeleton.module.css +0 -32
- package/build/browser/filter-list/base/inputs/CheckboxListSkeleton.module.css.js +0 -8
- package/build/browser/filter-list/inputs/CheckboxListFilterInput.js +0 -66
- package/build/browser/filter-list/inputs/CheckboxListFilterInput.js.map +0 -1
- package/build/esm/filter-list/base/inputs/CheckboxListInput.js +0 -83
- package/build/esm/filter-list/base/inputs/CheckboxListInput.js.map +0 -1
- package/build/esm/filter-list/base/inputs/CheckboxListInput.module.css +0 -65
- package/build/esm/filter-list/base/inputs/CheckboxListSkeleton.js +0 -46
- package/build/esm/filter-list/base/inputs/CheckboxListSkeleton.js.map +0 -1
- package/build/esm/filter-list/base/inputs/CheckboxListSkeleton.module.css +0 -32
- package/build/esm/filter-list/inputs/CheckboxListFilterInput.js +0 -66
- package/build/esm/filter-list/inputs/CheckboxListFilterInput.js.map +0 -1
- package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts +0 -16
- package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts.map +0 -1
- package/build/types/filter-list/base/inputs/CheckboxListSkeleton.d.ts +0 -2
- package/build/types/filter-list/base/inputs/CheckboxListSkeleton.d.ts.map +0 -1
- package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts +0 -17
- package/build/types/filter-list/inputs/CheckboxListFilterInput.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterStateToWhereClause.js","names":["assertUnreachable","formatDateForInput","getFilterKey","isCompoundFilter","f","NUMERIC_BOUNDS","byte","min","max","short","integer","long","Number","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","clampToPropertyBounds","value","propertyType","undefined","bounds","Math","formatDateValue","date","toISOString","filterStateToPropertyFilter","state","type","$containsAnyTerm","enabled","conditions","minValue","push","$gte","maxValue","$lte","length","includeNull","$isNull","__compound","values","$in","selectedValues","map","v","Date","startDate","endDate","buildWhereClause","definitions","filterStates","operator","propertyTypes","excludeFilterKey","clauses","definition","key","get","filter","isExcluding","fieldClauses","c","rangeClause","$and","$or","$not","clause","process","env","NODE_ENV","console","warn","linkName","hasLink","$isNotNull","searchTerm","trim","properties","propertiesToSearch","size","info","multiplicity","containsOp","propertySearches","prop","searchClause","customClause","toWhereClause","Object","keys"],"sources":["filterStateToWhereClause.ts"],"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 type { ObjectTypeDefinition, WhereClause } from \"@osdk/api\";\nimport { assertUnreachable } from \"../../shared/assertUnreachable.js\";\nimport { formatDateForInput } from \"../../shared/dateUtils.js\";\nimport type { FilterDefinitionUnion } from \"../FilterListApi.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { getFilterKey } from \"./getFilterKey.js\";\n\ntype PropertyFilter = Record<string, unknown> | boolean | string | number;\n\ninterface CompoundFilter {\n __compound: true;\n conditions: PropertyFilter[];\n includeNull: boolean;\n}\n\nfunction isCompoundFilter(\n f: PropertyFilter | CompoundFilter,\n): f is CompoundFilter {\n return typeof f === \"object\" && f != null && \"__compound\" in f;\n}\n\nconst NUMERIC_BOUNDS: Record<string, { min: number; max: number }> = {\n byte: { min: -128, max: 127 },\n short: { min: -32_768, max: 32_767 },\n integer: { min: -2_147_483_648, max: 2_147_483_647 },\n long: { min: Number.MIN_SAFE_INTEGER, max: Number.MAX_SAFE_INTEGER },\n};\n\nfunction clampToPropertyBounds(\n value: number,\n propertyType: string | undefined,\n): number {\n if (propertyType === undefined) {\n return value;\n }\n const bounds = NUMERIC_BOUNDS[propertyType];\n if (bounds === undefined) {\n return value;\n }\n return Math.max(bounds.min, Math.min(bounds.max, value));\n}\n\nfunction formatDateValue(\n date: Date,\n propertyType: string | undefined,\n): string {\n if (propertyType === \"datetime\") {\n return formatDateForInput(date);\n }\n return date.toISOString();\n}\n\nfunction filterStateToPropertyFilter(\n state: FilterState,\n propertyType?: string,\n): PropertyFilter | CompoundFilter | undefined {\n switch (state.type) {\n case \"CONTAINS_TEXT\": {\n if (!state.value) {\n return undefined;\n }\n return { $containsAnyTerm: state.value };\n }\n\n case \"TOGGLE\": {\n return state.enabled;\n }\n\n case \"DATE_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({\n $gte: formatDateValue(state.minValue, propertyType),\n });\n }\n if (state.maxValue !== undefined) {\n conditions.push({\n $lte: formatDateValue(state.maxValue, propertyType),\n });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n if (conditions.length === 0 && state.includeNull) {\n return { $isNull: true };\n }\n\n if (conditions.length === 1 && !state.includeNull) {\n return conditions[0];\n }\n\n return {\n __compound: true,\n conditions,\n includeNull: state.includeNull ?? false,\n };\n }\n\n case \"NUMBER_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({\n $gte: clampToPropertyBounds(state.minValue, propertyType),\n });\n }\n if (state.maxValue !== undefined) {\n conditions.push({\n $lte: clampToPropertyBounds(state.maxValue, propertyType),\n });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n if (conditions.length === 0 && state.includeNull) {\n return { $isNull: true };\n }\n\n if (conditions.length === 1 && !state.includeNull) {\n return conditions[0];\n }\n\n return {\n __compound: true,\n conditions,\n includeNull: state.includeNull ?? false,\n };\n }\n\n case \"EXACT_MATCH\": {\n if (state.values.length === 0) {\n return undefined;\n }\n return state.values.length === 1\n ? state.values[0]\n : { $in: state.values };\n }\n\n case \"SELECT\": {\n if (state.selectedValues.length === 0) {\n return undefined;\n }\n const values: (string | number | boolean)[] = state.selectedValues.map(\n (v) =>\n v instanceof Date\n ? formatDateValue(v, propertyType)\n : v as string | number | boolean,\n );\n return values.length === 1 ? values[0] : { $in: values };\n }\n\n case \"TIMELINE\": {\n const conditions: PropertyFilter[] = [];\n if (state.startDate !== undefined) {\n conditions.push({\n $gte: formatDateValue(state.startDate, propertyType),\n });\n }\n if (state.endDate !== undefined) {\n conditions.push({\n $lte: formatDateValue(state.endDate, propertyType),\n });\n }\n if (conditions.length === 0) {\n return undefined;\n }\n if (conditions.length === 1) {\n return conditions[0];\n }\n return {\n __compound: true,\n conditions,\n includeNull: false,\n };\n }\n\n // These filter types are handled separately in buildWhereClause\n // since they need access to the full definition, not just state\n case \"hasLink\":\n case \"linkedProperty\":\n case \"keywordSearch\":\n case \"custom\":\n return undefined;\n\n default:\n return assertUnreachable(state);\n }\n}\n\n/**\n * Builds a WhereClause from filter definitions and their current states.\n *\n * The filterStates map uses string keys derived from filter definitions via\n * getFilterKey(). This ensures stable state lookups even when filters are\n * reordered or definition object references change.\n *\n * Note: The `as WhereClause<Q>` casts are necessary because we're building\n * clauses dynamically from property keys determined at runtime. TypeScript\n * cannot verify that the constructed clause structure matches the generic Q's\n * expected shape, but the structure is guaranteed to be valid by construction.\n */\nexport interface PropertyTypeInfo {\n type: string;\n multiplicity: boolean;\n}\n\nexport function buildWhereClause<Q extends ObjectTypeDefinition>(\n definitions: Array<FilterDefinitionUnion<Q>> | undefined,\n filterStates: Map<string, FilterState>,\n operator: \"and\" | \"or\",\n propertyTypes?: Map<string, PropertyTypeInfo>,\n excludeFilterKey?: string,\n): WhereClause<Q> {\n if (!definitions || definitions.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n const clauses: Array<Record<string, unknown>> = [];\n\n for (const definition of definitions) {\n const key = getFilterKey(definition);\n if (key === excludeFilterKey) {\n continue;\n }\n const state = filterStates.get(key);\n\n if (!state) {\n continue;\n }\n\n switch (definition.type) {\n case \"PROPERTY\": {\n const propertyType = propertyTypes?.get(definition.key as string)\n ?.type;\n const filter = filterStateToPropertyFilter(state, propertyType);\n if (filter !== undefined) {\n const isExcluding = \"isExcluding\" in state && state.isExcluding;\n if (isCompoundFilter(filter)) {\n const fieldClauses = filter.conditions.map(c => ({\n [definition.key]: c,\n }));\n let rangeClause: Record<string, unknown> = fieldClauses.length === 1\n ? fieldClauses[0]\n : { $and: fieldClauses };\n if (filter.includeNull) {\n rangeClause = {\n $or: [rangeClause, { [definition.key]: { $isNull: true } }],\n };\n }\n clauses.push(isExcluding ? { $not: rangeClause } : rangeClause);\n } else {\n const clause = { [definition.key]: filter };\n clauses.push(isExcluding ? { $not: clause } : clause);\n }\n }\n break;\n }\n\n case \"HAS_LINK\": {\n if (state.type !== \"hasLink\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for hasLink filter \"${definition.linkName}\": expected hasLink, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.hasLink) {\n break;\n }\n clauses.push({ [definition.linkName]: { $isNotNull: true } });\n break;\n }\n\n case \"LINKED_PROPERTY\": {\n // OSDK WhereClause does not support filtering through links.\n // Link-based filtering requires ObjectSet operations (pivotTo/intersect).\n // LinkedProperty filters render UI for selection but cannot be included\n // in the where clause. Consumers needing linked property filtering must\n // implement it using ObjectSet.pivotTo() and intersect().\n break;\n }\n\n case \"KEYWORD_SEARCH\": {\n if (state.type !== \"keywordSearch\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for keywordSearch filter: expected keywordSearch, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.searchTerm) {\n break;\n }\n // TypeScript narrows state to KeywordSearchFilterState\n const searchTerm = state.searchTerm.trim();\n if (!searchTerm) {\n break;\n }\n\n const properties = definition.properties;\n let propertiesToSearch: string[];\n\n if (properties === \"all\") {\n if (propertyTypes && propertyTypes.size > 0) {\n propertiesToSearch = [];\n for (const [key, info] of propertyTypes) {\n if (info.type === \"string\" && !info.multiplicity) {\n propertiesToSearch.push(key);\n }\n }\n } else {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n \"[FilterList] Keyword search with properties: 'all' requires propertyTypes to be provided. Filter will be skipped.\",\n );\n }\n break;\n }\n } else {\n propertiesToSearch = properties;\n }\n\n if (propertiesToSearch.length === 0) {\n break;\n }\n\n const containsOp = state.operator === \"AND\"\n ? \"$containsAllTerms\"\n : \"$containsAnyTerm\";\n\n const propertySearches = propertiesToSearch.map((prop) => ({\n [prop]: { [containsOp]: searchTerm },\n }));\n\n let searchClause: Record<string, unknown>;\n if (propertySearches.length === 1) {\n searchClause = propertySearches[0];\n } else {\n searchClause = { $or: propertySearches };\n }\n clauses.push(\n state.isExcluding ? { $not: searchClause } : searchClause,\n );\n break;\n }\n\n case \"CUSTOM\": {\n if (state.type !== \"custom\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for custom filter \"${definition.key}\": expected custom, got ${state.type}`,\n );\n }\n break;\n }\n // TypeScript narrows state to CustomFilterState\n const customClause = definition.toWhereClause(state);\n if (customClause && Object.keys(customClause).length > 0) {\n clauses.push(customClause as Record<string, unknown>);\n }\n break;\n }\n\n default:\n assertUnreachable(definition);\n }\n }\n\n if (clauses.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n if (clauses.length === 1) {\n return clauses[0] as WhereClause<Q>;\n }\n\n if (operator === \"and\") {\n return { $and: clauses } as WhereClause<Q>;\n }\n\n return { $or: clauses } as WhereClause<Q>;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"filterStateToWhereClause.js","names":["assertUnreachable","formatDateForInput","getFilterKey","isCompoundFilter","f","NUMERIC_BOUNDS","byte","min","max","short","integer","long","Number","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","clampToPropertyBounds","value","propertyType","undefined","bounds","Math","formatDateValue","date","toISOString","filterStateToPropertyFilter","state","type","$containsAnyTerm","enabled","conditions","minValue","push","$gte","maxValue","$lte","length","includeNull","$isNull","__compound","values","$in","selectedValues","map","v","Date","startDate","endDate","buildWhereClause","definitions","filterStates","propertyTypes","excludeFilterKey","clauses","definition","key","get","filter","isExcluding","fieldClauses","c","rangeClause","$and","$or","$not","clause","process","env","NODE_ENV","console","warn","linkName","hasLink","$isNotNull","searchTerm","trim","properties","propertiesToSearch","size","info","multiplicity","containsOp","operator","propertySearches","prop","searchClause","customClause","toWhereClause","Object","keys"],"sources":["filterStateToWhereClause.ts"],"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 type { ObjectTypeDefinition, WhereClause } from \"@osdk/api\";\nimport { assertUnreachable } from \"../../shared/assertUnreachable.js\";\nimport { formatDateForInput } from \"../../shared/dateUtils.js\";\nimport type { FilterDefinitionUnion } from \"../FilterListApi.js\";\nimport type { FilterState } from \"../FilterListItemApi.js\";\nimport { getFilterKey } from \"./getFilterKey.js\";\n\ntype PropertyFilter = Record<string, unknown> | boolean | string | number;\n\ninterface CompoundFilter {\n __compound: true;\n conditions: PropertyFilter[];\n includeNull: boolean;\n}\n\nfunction isCompoundFilter(\n f: PropertyFilter | CompoundFilter,\n): f is CompoundFilter {\n return typeof f === \"object\" && f != null && \"__compound\" in f;\n}\n\nconst NUMERIC_BOUNDS: Record<string, { min: number; max: number }> = {\n byte: { min: -128, max: 127 },\n short: { min: -32_768, max: 32_767 },\n integer: { min: -2_147_483_648, max: 2_147_483_647 },\n long: { min: Number.MIN_SAFE_INTEGER, max: Number.MAX_SAFE_INTEGER },\n};\n\nfunction clampToPropertyBounds(\n value: number,\n propertyType: string | undefined,\n): number {\n if (propertyType === undefined) {\n return value;\n }\n const bounds = NUMERIC_BOUNDS[propertyType];\n if (bounds === undefined) {\n return value;\n }\n return Math.max(bounds.min, Math.min(bounds.max, value));\n}\n\nfunction formatDateValue(\n date: Date,\n propertyType: string | undefined,\n): string {\n if (propertyType === \"datetime\") {\n return formatDateForInput(date);\n }\n return date.toISOString();\n}\n\nfunction filterStateToPropertyFilter(\n state: FilterState,\n propertyType?: string,\n): PropertyFilter | CompoundFilter | undefined {\n switch (state.type) {\n case \"CONTAINS_TEXT\": {\n if (!state.value) {\n return undefined;\n }\n return { $containsAnyTerm: state.value };\n }\n\n case \"TOGGLE\": {\n return state.enabled;\n }\n\n case \"DATE_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({\n $gte: formatDateValue(state.minValue, propertyType),\n });\n }\n if (state.maxValue !== undefined) {\n conditions.push({\n $lte: formatDateValue(state.maxValue, propertyType),\n });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n if (conditions.length === 0 && state.includeNull) {\n return { $isNull: true };\n }\n\n if (conditions.length === 1 && !state.includeNull) {\n return conditions[0];\n }\n\n return {\n __compound: true,\n conditions,\n includeNull: state.includeNull ?? false,\n };\n }\n\n case \"NUMBER_RANGE\": {\n const conditions: PropertyFilter[] = [];\n\n if (state.minValue !== undefined) {\n conditions.push({\n $gte: clampToPropertyBounds(state.minValue, propertyType),\n });\n }\n if (state.maxValue !== undefined) {\n conditions.push({\n $lte: clampToPropertyBounds(state.maxValue, propertyType),\n });\n }\n\n if (conditions.length === 0 && !state.includeNull) {\n return undefined;\n }\n\n if (conditions.length === 0 && state.includeNull) {\n return { $isNull: true };\n }\n\n if (conditions.length === 1 && !state.includeNull) {\n return conditions[0];\n }\n\n return {\n __compound: true,\n conditions,\n includeNull: state.includeNull ?? false,\n };\n }\n\n case \"EXACT_MATCH\": {\n if (state.values.length === 0) {\n return undefined;\n }\n return state.values.length === 1\n ? state.values[0]\n : { $in: state.values };\n }\n\n case \"SELECT\": {\n if (state.selectedValues.length === 0) {\n return undefined;\n }\n const values: (string | number | boolean)[] = state.selectedValues.map(\n (v) =>\n v instanceof Date\n ? formatDateValue(v, propertyType)\n : v as string | number | boolean,\n );\n return values.length === 1 ? values[0] : { $in: values };\n }\n\n case \"TIMELINE\": {\n const conditions: PropertyFilter[] = [];\n if (state.startDate !== undefined) {\n conditions.push({\n $gte: formatDateValue(state.startDate, propertyType),\n });\n }\n if (state.endDate !== undefined) {\n conditions.push({\n $lte: formatDateValue(state.endDate, propertyType),\n });\n }\n if (conditions.length === 0) {\n return undefined;\n }\n if (conditions.length === 1) {\n return conditions[0];\n }\n return {\n __compound: true,\n conditions,\n includeNull: false,\n };\n }\n\n // These filter types are handled separately in buildWhereClause\n // since they need access to the full definition, not just state\n case \"hasLink\":\n case \"linkedProperty\":\n case \"keywordSearch\":\n case \"custom\":\n return undefined;\n\n default:\n return assertUnreachable(state);\n }\n}\n\n/**\n * Builds a WhereClause from filter definitions and their current states.\n *\n * The filterStates map uses string keys derived from filter definitions via\n * getFilterKey(). This ensures stable state lookups even when filters are\n * reordered or definition object references change.\n *\n * Note: The `as WhereClause<Q>` casts are necessary because we're building\n * clauses dynamically from property keys determined at runtime. TypeScript\n * cannot verify that the constructed clause structure matches the generic Q's\n * expected shape, but the structure is guaranteed to be valid by construction.\n */\nexport interface PropertyTypeInfo {\n type: string;\n multiplicity: boolean;\n}\n\nexport function buildWhereClause<Q extends ObjectTypeDefinition>(\n definitions: Array<FilterDefinitionUnion<Q>> | undefined,\n filterStates: Map<string, FilterState>,\n propertyTypes?: Map<string, PropertyTypeInfo>,\n excludeFilterKey?: string,\n): WhereClause<Q> {\n if (!definitions || definitions.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n const clauses: Array<Record<string, unknown>> = [];\n\n for (const definition of definitions) {\n const key = getFilterKey(definition);\n if (key === excludeFilterKey) {\n continue;\n }\n const state = filterStates.get(key);\n\n if (!state) {\n continue;\n }\n\n switch (definition.type) {\n case \"PROPERTY\": {\n const propertyType = propertyTypes?.get(definition.key as string)\n ?.type;\n const filter = filterStateToPropertyFilter(state, propertyType);\n if (filter !== undefined) {\n const isExcluding = \"isExcluding\" in state && state.isExcluding;\n if (isCompoundFilter(filter)) {\n const fieldClauses = filter.conditions.map(c => ({\n [definition.key]: c,\n }));\n let rangeClause: Record<string, unknown> = fieldClauses.length === 1\n ? fieldClauses[0]\n : { $and: fieldClauses };\n if (filter.includeNull) {\n rangeClause = {\n $or: [rangeClause, { [definition.key]: { $isNull: true } }],\n };\n }\n clauses.push(isExcluding ? { $not: rangeClause } : rangeClause);\n } else {\n const clause = { [definition.key]: filter };\n clauses.push(isExcluding ? { $not: clause } : clause);\n }\n }\n break;\n }\n\n case \"HAS_LINK\": {\n if (state.type !== \"hasLink\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for hasLink filter \"${definition.linkName}\": expected hasLink, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.hasLink) {\n break;\n }\n clauses.push({ [definition.linkName]: { $isNotNull: true } });\n break;\n }\n\n case \"LINKED_PROPERTY\": {\n // OSDK WhereClause does not support filtering through links.\n // Link-based filtering requires ObjectSet operations (pivotTo/intersect).\n // LinkedProperty filters render UI for selection but cannot be included\n // in the where clause. Consumers needing linked property filtering must\n // implement it using ObjectSet.pivotTo() and intersect().\n break;\n }\n\n case \"KEYWORD_SEARCH\": {\n if (state.type !== \"keywordSearch\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for keywordSearch filter: expected keywordSearch, got ${state.type}`,\n );\n }\n break;\n }\n if (!state.searchTerm) {\n break;\n }\n // TypeScript narrows state to KeywordSearchFilterState\n const searchTerm = state.searchTerm.trim();\n if (!searchTerm) {\n break;\n }\n\n const properties = definition.properties;\n let propertiesToSearch: string[];\n\n if (properties === \"all\") {\n if (propertyTypes && propertyTypes.size > 0) {\n propertiesToSearch = [];\n for (const [key, info] of propertyTypes) {\n if (info.type === \"string\" && !info.multiplicity) {\n propertiesToSearch.push(key);\n }\n }\n } else {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n \"[FilterList] Keyword search with properties: 'all' requires propertyTypes to be provided. Filter will be skipped.\",\n );\n }\n break;\n }\n } else {\n propertiesToSearch = properties;\n }\n\n if (propertiesToSearch.length === 0) {\n break;\n }\n\n const containsOp = state.operator === \"AND\"\n ? \"$containsAllTerms\"\n : \"$containsAnyTerm\";\n\n const propertySearches = propertiesToSearch.map((prop) => ({\n [prop]: { [containsOp]: searchTerm },\n }));\n\n let searchClause: Record<string, unknown>;\n if (propertySearches.length === 1) {\n searchClause = propertySearches[0];\n } else {\n searchClause = { $or: propertySearches };\n }\n clauses.push(\n state.isExcluding ? { $not: searchClause } : searchClause,\n );\n break;\n }\n\n case \"CUSTOM\": {\n if (state.type !== \"custom\") {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n `[FilterList] State type mismatch for custom filter \"${definition.key}\": expected custom, got ${state.type}`,\n );\n }\n break;\n }\n // TypeScript narrows state to CustomFilterState\n const customClause = definition.toWhereClause(state);\n if (customClause && Object.keys(customClause).length > 0) {\n clauses.push(customClause as Record<string, unknown>);\n }\n break;\n }\n\n default:\n assertUnreachable(definition);\n }\n }\n\n if (clauses.length === 0) {\n return {} as WhereClause<Q>;\n }\n\n if (clauses.length === 1) {\n return clauses[0] as WhereClause<Q>;\n }\n\n return { $and: clauses } as WhereClause<Q>;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,14 +15,13 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { Button } from "@base-ui/react/button";
|
|
18
|
-
import { Menu } from "@base-ui/react/menu";
|
|
19
18
|
import { Add, CaretDown, Cog, SortAlphabetical, SortAlphabeticalDesc } from "@blueprintjs/icons";
|
|
20
19
|
import { arrayMove } from "@dnd-kit/sortable";
|
|
21
20
|
import classNames from "classnames";
|
|
22
21
|
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
23
22
|
import { ActionButton } from "../base-components/action-button/ActionButton.js";
|
|
24
23
|
import { Dialog } from "../base-components/dialog/Dialog.js";
|
|
25
|
-
import {
|
|
24
|
+
import { SearchableMenu } from "../base-components/searchable-menu/SearchableMenu.js";
|
|
26
25
|
import styles from "./MultiColumnSortDialog.module.css";
|
|
27
26
|
import { SortableItemsList } from "./SortableItemsList.js";
|
|
28
27
|
export function MultiColumnSortDialog({
|
|
@@ -33,8 +32,6 @@ export function MultiColumnSortDialog({
|
|
|
33
32
|
columnOptions
|
|
34
33
|
}) {
|
|
35
34
|
const [selectedSortColumns, setSelectedSortColumns] = useState([]);
|
|
36
|
-
const [menuSearchQuery, setMenuSearchQuery] = useState("");
|
|
37
|
-
|
|
38
35
|
// Initialize selected sort columns from current sorting
|
|
39
36
|
useEffect(() => {
|
|
40
37
|
if (isOpen) {
|
|
@@ -78,21 +75,16 @@ export function MultiColumnSortDialog({
|
|
|
78
75
|
onClose();
|
|
79
76
|
}, [selectedSortColumns, onApply, onClose]);
|
|
80
77
|
const availableColumns = useMemo(() => columnOptions.filter(col => col.canSort && !selectedSortColumns.some(selected => selected.id === col.id)), [columnOptions, selectedSortColumns]);
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
setMenuSearchQuery(event.target.value);
|
|
90
|
-
}, []);
|
|
91
|
-
const handleMenuOpenChange = useCallback(open => {
|
|
92
|
-
if (open) {
|
|
93
|
-
setMenuSearchQuery("");
|
|
78
|
+
const searchableMenuItems = useMemo(() => availableColumns.map(col => ({
|
|
79
|
+
key: col.id,
|
|
80
|
+
label: col.name
|
|
81
|
+
})), [availableColumns]);
|
|
82
|
+
const handleMenuItemSelected = useCallback(key => {
|
|
83
|
+
const column = availableColumns.find(col => col.id === key);
|
|
84
|
+
if (column) {
|
|
85
|
+
handleAddColumn(column);
|
|
94
86
|
}
|
|
95
|
-
}, []);
|
|
87
|
+
}, [availableColumns, handleAddColumn]);
|
|
96
88
|
const sortableItems = useMemo(() => {
|
|
97
89
|
return selectedSortColumns.map(item => ({
|
|
98
90
|
id: item.id,
|
|
@@ -118,9 +110,6 @@ export function MultiColumnSortDialog({
|
|
|
118
110
|
variant: "primary",
|
|
119
111
|
onClick: handleApply
|
|
120
112
|
}, "Apply")), [handleApply, onClose]);
|
|
121
|
-
const handleKeyDown = useCallback(event => {
|
|
122
|
-
event.stopPropagation();
|
|
123
|
-
}, []);
|
|
124
113
|
return /*#__PURE__*/React.createElement(Dialog, {
|
|
125
114
|
isOpen: isOpen,
|
|
126
115
|
onOpenChange: onClose,
|
|
@@ -133,47 +122,21 @@ export function MultiColumnSortDialog({
|
|
|
133
122
|
onReorder: handleReorderSortColumns,
|
|
134
123
|
onRemove: handleRemoveSortColumn,
|
|
135
124
|
className: styles.sortableList
|
|
136
|
-
}), /*#__PURE__*/React.createElement(
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
125
|
+
}), /*#__PURE__*/React.createElement(SearchableMenu, {
|
|
126
|
+
items: searchableMenuItems,
|
|
127
|
+
onItemSelected: handleMenuItemSelected,
|
|
128
|
+
trigger: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Add, {
|
|
129
|
+
className: styles.addIcon
|
|
130
|
+
}), /*#__PURE__*/React.createElement("span", {
|
|
131
|
+
className: styles.addColumnText
|
|
132
|
+
}, "Add Column to Sort"), /*#__PURE__*/React.createElement(CaretDown, null)),
|
|
133
|
+
triggerClassName: styles.addColumnButton,
|
|
140
134
|
disabled: availableColumns.length === 0,
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}), /*#__PURE__*/React.createElement("span", {
|
|
145
|
-
className: styles.addColumnText
|
|
146
|
-
}, "Add Column to Sort"), /*#__PURE__*/React.createElement(CaretDown, null)), /*#__PURE__*/React.createElement(Menu.Portal, null, /*#__PURE__*/React.createElement(Menu.Positioner, {
|
|
147
|
-
className: styles.menuPositioner,
|
|
148
|
-
sideOffset: 4
|
|
149
|
-
}, /*#__PURE__*/React.createElement(Menu.Popup, {
|
|
150
|
-
className: styles.dropdownMenu
|
|
151
|
-
}, /*#__PURE__*/React.createElement(SearchBar, {
|
|
152
|
-
value: menuSearchQuery,
|
|
153
|
-
onChange: handleMenuSearchChange,
|
|
154
|
-
placeholder: "Search columns",
|
|
155
|
-
"aria-label": "Search columns to sort",
|
|
156
|
-
className: styles.menuSearchContainer,
|
|
157
|
-
onKeyDown: handleKeyDown
|
|
158
|
-
}), filteredAvailableColumns.map(column => /*#__PURE__*/React.createElement(AvailableColumnMenuItem, {
|
|
159
|
-
key: column.id,
|
|
160
|
-
column: column,
|
|
161
|
-
onAddColumn: handleAddColumn
|
|
162
|
-
})), filteredAvailableColumns.length === 0 && /*#__PURE__*/React.createElement("div", {
|
|
163
|
-
className: styles.menuEmptyState
|
|
164
|
-
}, "No matching columns")))))));
|
|
135
|
+
searchPlaceholder: "Search columns",
|
|
136
|
+
emptyMessage: "No matching columns"
|
|
137
|
+
})));
|
|
165
138
|
}
|
|
166
139
|
const DialogTitle = /*#__PURE__*/React.createElement("div", {
|
|
167
140
|
className: styles.title
|
|
168
141
|
}, /*#__PURE__*/React.createElement(Cog, null), "Sort on Multiple Columns");
|
|
169
|
-
function AvailableColumnMenuItem({
|
|
170
|
-
column,
|
|
171
|
-
onAddColumn
|
|
172
|
-
}) {
|
|
173
|
-
const onClick = useCallback(() => onAddColumn(column), [onAddColumn, column]);
|
|
174
|
-
return /*#__PURE__*/React.createElement(Menu.Item, {
|
|
175
|
-
className: classNames(styles.dropdownItem, styles.truncate),
|
|
176
|
-
onClick: onClick
|
|
177
|
-
}, column.name);
|
|
178
|
-
}
|
|
179
142
|
//# sourceMappingURL=MultiColumnSortDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiColumnSortDialog.js","names":["Button","Menu","Add","CaretDown","Cog","SortAlphabetical","SortAlphabeticalDesc","arrayMove","classNames","React","useCallback","useEffect","useMemo","useState","ActionButton","Dialog","SearchBar","styles","SortableItemsList","MultiColumnSortDialog","isOpen","onClose","onApply","currentSorting","columnOptions","selectedSortColumns","setSelectedSortColumns","menuSearchQuery","setMenuSearchQuery","selectedColumns","sort","column","find","col","id","push","direction","desc","handleAddColumn","prev","handleRemoveSortColumn","filter","item","handleReorderSortColumns","fromIndex","toIndex","items","handleToggleSortDirection","map","handleApply","sortingState","availableColumns","canSort","some","selected","filteredAvailableColumns","query","toLowerCase","trim","name","includes","handleMenuSearchChange","event","target","value","handleMenuOpenChange","open","sortableItems","label","content","createElement","className","sortColumnItem","sortColumnName","truncate","sortDirectionButton","onClick","sortIcon","footer","Fragment","variant","handleKeyDown","stopPropagation","onOpenChange","title","DialogTitle","sortColumnsList","onReorder","onRemove","sortableList","Root","Trigger","addColumnButton","disabled","length","addIcon","addColumnText","Portal","Positioner","menuPositioner","sideOffset","Popup","dropdownMenu","onChange","placeholder","menuSearchContainer","onKeyDown","AvailableColumnMenuItem","key","onAddColumn","menuEmptyState","Item","dropdownItem"],"sources":["MultiColumnSortDialog.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 { Menu } from \"@base-ui/react/menu\";\nimport {\n Add,\n CaretDown,\n Cog,\n SortAlphabetical,\n SortAlphabeticalDesc,\n} from \"@blueprintjs/icons\";\nimport { arrayMove } from \"@dnd-kit/sortable\";\nimport type { SortingState } from \"@tanstack/react-table\";\nimport classNames from \"classnames\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { ActionButton } from \"../base-components/action-button/ActionButton.js\";\nimport { Dialog } from \"../base-components/dialog/Dialog.js\";\nimport { SearchBar } from \"../base-components/search-bar/SearchBar.js\";\nimport styles from \"./MultiColumnSortDialog.module.css\";\nimport { type SortableItem, SortableItemsList } from \"./SortableItemsList.js\";\nimport type { ColumnOption } from \"./utils/types.js\";\n\nexport interface SortColumnItem extends ColumnOption {\n direction: \"asc\" | \"desc\";\n}\n\ninterface MultiColumnSortDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onApply: (sortColumns: SortingState) => void;\n currentSorting: SortingState;\n columnOptions: ColumnOption[];\n}\n\nexport function MultiColumnSortDialog({\n isOpen,\n onClose,\n onApply,\n currentSorting,\n columnOptions,\n}: MultiColumnSortDialogProps): React.ReactElement {\n const [selectedSortColumns, setSelectedSortColumns] = useState<\n SortColumnItem[]\n >([]);\n const [menuSearchQuery, setMenuSearchQuery] = useState(\"\");\n\n // Initialize selected sort columns from current sorting\n useEffect(() => {\n if (isOpen) {\n const selectedColumns: SortColumnItem[] = [];\n for (const sort of currentSorting) {\n const column = columnOptions.find((col) => col.id === sort.id);\n if (column) {\n selectedColumns.push({\n ...column,\n direction: sort.desc ? \"desc\" : \"asc\",\n });\n }\n }\n setSelectedSortColumns(selectedColumns);\n }\n }, [isOpen, currentSorting, columnOptions]);\n\n const handleAddColumn = useCallback((column: ColumnOption) => {\n setSelectedSortColumns((prev) => [\n ...prev,\n { ...column, direction: \"asc\" },\n ]);\n }, []);\n\n const handleRemoveSortColumn = useCallback((id: string) => {\n setSelectedSortColumns((prev) => prev.filter((item) => item.id !== id));\n }, []);\n\n const handleReorderSortColumns = useCallback(\n (fromIndex: number, toIndex: number) => {\n setSelectedSortColumns((items) => arrayMove(items, fromIndex, toIndex));\n },\n [],\n );\n\n const handleToggleSortDirection = useCallback((id: string) => {\n setSelectedSortColumns((prev) =>\n prev.map((item) =>\n item.id === id\n ? { ...item, direction: item.direction === \"asc\" ? \"desc\" : \"asc\" }\n : item\n )\n );\n }, []);\n\n const handleApply = useCallback(() => {\n const sortingState: SortingState = selectedSortColumns.map((col) => ({\n id: col.id,\n desc: col.direction === \"desc\",\n }));\n onApply(sortingState);\n onClose();\n }, [selectedSortColumns, onApply, onClose]);\n\n const availableColumns = useMemo(\n () =>\n columnOptions.filter(\n (col) =>\n col.canSort\n && !selectedSortColumns.some((selected) => selected.id === col.id),\n ),\n [columnOptions, selectedSortColumns],\n );\n\n const filteredAvailableColumns = useMemo(() => {\n const query = menuSearchQuery.toLowerCase().trim();\n if (!query) {\n return availableColumns;\n }\n return availableColumns.filter((col) =>\n col.name.toLowerCase().includes(query)\n );\n }, [availableColumns, menuSearchQuery]);\n\n const handleMenuSearchChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setMenuSearchQuery(event.target.value);\n },\n [],\n );\n\n const handleMenuOpenChange = useCallback((open: boolean) => {\n if (open) {\n setMenuSearchQuery(\"\");\n }\n }, []);\n\n const sortableItems: SortableItem[] = useMemo(() => {\n return selectedSortColumns.map((item) => ({\n id: item.id,\n label: item.name,\n content: (\n <div className={styles.sortColumnItem}>\n <span className={classNames(styles.sortColumnName, styles.truncate)}>\n {item.name}\n </span>\n <Button\n className={styles.sortDirectionButton}\n onClick={() => handleToggleSortDirection(item.id)}\n aria-label={`Toggle sort direction for ${item.name}`}\n >\n {item.direction === \"asc\"\n ? (\n <SortAlphabetical\n className={styles.sortIcon}\n />\n )\n : (\n <SortAlphabeticalDesc\n className={styles.sortIcon}\n />\n )}\n </Button>\n </div>\n ),\n }));\n }, [selectedSortColumns, handleToggleSortDirection]);\n\n const footer = useMemo(() => (\n <>\n <ActionButton onClick={onClose}>Cancel</ActionButton>\n <ActionButton variant=\"primary\" onClick={handleApply}>\n Apply\n </ActionButton>\n </>\n ), [handleApply, onClose]);\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n event.stopPropagation();\n },\n [],\n );\n\n return (\n <Dialog\n isOpen={isOpen}\n onOpenChange={onClose}\n title={DialogTitle}\n footer={footer}\n >\n <div className={styles.sortColumnsList}>\n <SortableItemsList\n items={sortableItems}\n onReorder={handleReorderSortColumns}\n onRemove={handleRemoveSortColumn}\n className={styles.sortableList}\n />\n <Menu.Root onOpenChange={handleMenuOpenChange}>\n <Menu.Trigger\n className={styles.addColumnButton}\n disabled={availableColumns.length === 0}\n aria-label=\"Add column to sort\"\n >\n <Add className={styles.addIcon} />\n <span className={styles.addColumnText}>\n Add Column to Sort\n </span>\n <CaretDown />\n </Menu.Trigger>\n <Menu.Portal>\n <Menu.Positioner className={styles.menuPositioner} sideOffset={4}>\n <Menu.Popup className={styles.dropdownMenu}>\n <SearchBar\n value={menuSearchQuery}\n onChange={handleMenuSearchChange}\n placeholder=\"Search columns\"\n aria-label=\"Search columns to sort\"\n className={styles.menuSearchContainer}\n onKeyDown={handleKeyDown}\n />\n {filteredAvailableColumns.map((column) => (\n <AvailableColumnMenuItem\n key={column.id}\n column={column}\n onAddColumn={handleAddColumn}\n />\n ))}\n {filteredAvailableColumns.length === 0 && (\n <div className={styles.menuEmptyState}>\n No matching columns\n </div>\n )}\n </Menu.Popup>\n </Menu.Positioner>\n </Menu.Portal>\n </Menu.Root>\n </div>\n </Dialog>\n );\n}\n\nconst DialogTitle = (\n <div className={styles.title}>\n <Cog />Sort on Multiple Columns\n </div>\n);\nfunction AvailableColumnMenuItem(\n { column, onAddColumn }: {\n column: ColumnOption;\n onAddColumn: (column: ColumnOption) => void;\n },\n) {\n const onClick = useCallback(() => onAddColumn(column), [onAddColumn, column]);\n\n return (\n <Menu.Item\n className={classNames(styles.dropdownItem, styles.truncate)}\n onClick={onClick}\n >\n {column.name}\n </Menu.Item>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"MultiColumnSortDialog.js","names":["Button","Add","CaretDown","Cog","SortAlphabetical","SortAlphabeticalDesc","arrayMove","classNames","React","useCallback","useEffect","useMemo","useState","ActionButton","Dialog","SearchableMenu","styles","SortableItemsList","MultiColumnSortDialog","isOpen","onClose","onApply","currentSorting","columnOptions","selectedSortColumns","setSelectedSortColumns","selectedColumns","sort","column","find","col","id","push","direction","desc","handleAddColumn","prev","handleRemoveSortColumn","filter","item","handleReorderSortColumns","fromIndex","toIndex","items","handleToggleSortDirection","map","handleApply","sortingState","availableColumns","canSort","some","selected","searchableMenuItems","key","label","name","handleMenuItemSelected","sortableItems","content","createElement","className","sortColumnItem","sortColumnName","truncate","sortDirectionButton","onClick","sortIcon","footer","Fragment","variant","onOpenChange","title","DialogTitle","sortColumnsList","onReorder","onRemove","sortableList","onItemSelected","trigger","addIcon","addColumnText","triggerClassName","addColumnButton","disabled","length","searchPlaceholder","emptyMessage"],"sources":["MultiColumnSortDialog.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 {\n Add,\n CaretDown,\n Cog,\n SortAlphabetical,\n SortAlphabeticalDesc,\n} from \"@blueprintjs/icons\";\nimport { arrayMove } from \"@dnd-kit/sortable\";\nimport type { SortingState } from \"@tanstack/react-table\";\nimport classNames from \"classnames\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { ActionButton } from \"../base-components/action-button/ActionButton.js\";\nimport { Dialog } from \"../base-components/dialog/Dialog.js\";\nimport { SearchableMenu } from \"../base-components/searchable-menu/SearchableMenu.js\";\nimport styles from \"./MultiColumnSortDialog.module.css\";\nimport { type SortableItem, SortableItemsList } from \"./SortableItemsList.js\";\nimport type { ColumnOption } from \"./utils/types.js\";\n\nexport interface SortColumnItem extends ColumnOption {\n direction: \"asc\" | \"desc\";\n}\n\ninterface MultiColumnSortDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onApply: (sortColumns: SortingState) => void;\n currentSorting: SortingState;\n columnOptions: ColumnOption[];\n}\n\nexport function MultiColumnSortDialog({\n isOpen,\n onClose,\n onApply,\n currentSorting,\n columnOptions,\n}: MultiColumnSortDialogProps): React.ReactElement {\n const [selectedSortColumns, setSelectedSortColumns] = useState<\n SortColumnItem[]\n >([]);\n // Initialize selected sort columns from current sorting\n useEffect(() => {\n if (isOpen) {\n const selectedColumns: SortColumnItem[] = [];\n for (const sort of currentSorting) {\n const column = columnOptions.find((col) => col.id === sort.id);\n if (column) {\n selectedColumns.push({\n ...column,\n direction: sort.desc ? \"desc\" : \"asc\",\n });\n }\n }\n setSelectedSortColumns(selectedColumns);\n }\n }, [isOpen, currentSorting, columnOptions]);\n\n const handleAddColumn = useCallback((column: ColumnOption) => {\n setSelectedSortColumns((prev) => [\n ...prev,\n { ...column, direction: \"asc\" },\n ]);\n }, []);\n\n const handleRemoveSortColumn = useCallback((id: string) => {\n setSelectedSortColumns((prev) => prev.filter((item) => item.id !== id));\n }, []);\n\n const handleReorderSortColumns = useCallback(\n (fromIndex: number, toIndex: number) => {\n setSelectedSortColumns((items) => arrayMove(items, fromIndex, toIndex));\n },\n [],\n );\n\n const handleToggleSortDirection = useCallback((id: string) => {\n setSelectedSortColumns((prev) =>\n prev.map((item) =>\n item.id === id\n ? { ...item, direction: item.direction === \"asc\" ? \"desc\" : \"asc\" }\n : item\n )\n );\n }, []);\n\n const handleApply = useCallback(() => {\n const sortingState: SortingState = selectedSortColumns.map((col) => ({\n id: col.id,\n desc: col.direction === \"desc\",\n }));\n onApply(sortingState);\n onClose();\n }, [selectedSortColumns, onApply, onClose]);\n\n const availableColumns = useMemo(\n () =>\n columnOptions.filter(\n (col) =>\n col.canSort\n && !selectedSortColumns.some((selected) => selected.id === col.id),\n ),\n [columnOptions, selectedSortColumns],\n );\n\n const searchableMenuItems = useMemo(\n () => availableColumns.map((col) => ({ key: col.id, label: col.name })),\n [availableColumns],\n );\n\n const handleMenuItemSelected = useCallback(\n (key: string) => {\n const column = availableColumns.find((col) => col.id === key);\n if (column) {\n handleAddColumn(column);\n }\n },\n [availableColumns, handleAddColumn],\n );\n\n const sortableItems: SortableItem[] = useMemo(() => {\n return selectedSortColumns.map((item) => ({\n id: item.id,\n label: item.name,\n content: (\n <div className={styles.sortColumnItem}>\n <span className={classNames(styles.sortColumnName, styles.truncate)}>\n {item.name}\n </span>\n <Button\n className={styles.sortDirectionButton}\n onClick={() => handleToggleSortDirection(item.id)}\n aria-label={`Toggle sort direction for ${item.name}`}\n >\n {item.direction === \"asc\"\n ? (\n <SortAlphabetical\n className={styles.sortIcon}\n />\n )\n : (\n <SortAlphabeticalDesc\n className={styles.sortIcon}\n />\n )}\n </Button>\n </div>\n ),\n }));\n }, [selectedSortColumns, handleToggleSortDirection]);\n\n const footer = useMemo(() => (\n <>\n <ActionButton onClick={onClose}>Cancel</ActionButton>\n <ActionButton variant=\"primary\" onClick={handleApply}>\n Apply\n </ActionButton>\n </>\n ), [handleApply, onClose]);\n\n return (\n <Dialog\n isOpen={isOpen}\n onOpenChange={onClose}\n title={DialogTitle}\n footer={footer}\n >\n <div className={styles.sortColumnsList}>\n <SortableItemsList\n items={sortableItems}\n onReorder={handleReorderSortColumns}\n onRemove={handleRemoveSortColumn}\n className={styles.sortableList}\n />\n <SearchableMenu\n items={searchableMenuItems}\n onItemSelected={handleMenuItemSelected}\n trigger={\n <>\n <Add className={styles.addIcon} />\n <span className={styles.addColumnText}>\n Add Column to Sort\n </span>\n <CaretDown />\n </>\n }\n triggerClassName={styles.addColumnButton}\n disabled={availableColumns.length === 0}\n searchPlaceholder=\"Search columns\"\n emptyMessage=\"No matching columns\"\n />\n </div>\n </Dialog>\n );\n}\n\nconst DialogTitle = (\n <div className={styles.title}>\n <Cog />Sort on Multiple Columns\n </div>\n);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -118,70 +118,6 @@
|
|
|
118
118
|
text-align: left;
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
.menuPositioner {
|
|
122
|
-
z-index: var(--osdk-surface-z-index-2);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
.dropdownMenu {
|
|
126
|
-
background-color: var(--osdk-surface-background-color-default-rest);
|
|
127
|
-
border: var(--osdk-surface-border);
|
|
128
|
-
border-radius: var(--osdk-surface-border-radius);
|
|
129
|
-
box-shadow: var(--osdk-surface-shadow-2);
|
|
130
|
-
max-height: calc(var(--osdk-dialog-max-height) * 0.5);
|
|
131
|
-
overflow-y: auto;
|
|
132
|
-
width: var(--anchor-width);
|
|
133
|
-
|
|
134
|
-
&:focus {
|
|
135
|
-
outline: none;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
&:focus-visible {
|
|
139
|
-
outline: var(--osdk-focus-outline);
|
|
140
|
-
outline-offset: var(--osdk-focus-visible-outline-offset);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
.menuSearchContainer {
|
|
145
|
-
border: none;
|
|
146
|
-
border-bottom: var(--osdk-surface-border);
|
|
147
|
-
border-radius: 0;
|
|
148
|
-
position: sticky;
|
|
149
|
-
top: 0;
|
|
150
|
-
background-color: var(--osdk-surface-background-color-default-rest);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
.menuEmptyState {
|
|
154
|
-
padding: calc(var(--osdk-surface-spacing) * 3);
|
|
155
|
-
text-align: center;
|
|
156
|
-
color: var(--osdk-typography-color-muted);
|
|
157
|
-
font-size: var(--osdk-typography-size-body-medium);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
.dropdownItem {
|
|
161
|
-
display: block;
|
|
162
|
-
width: 100%;
|
|
163
|
-
text-align: left;
|
|
164
|
-
padding: calc(var(--osdk-surface-spacing) * 2)
|
|
165
|
-
calc(var(--osdk-surface-spacing) * 3);
|
|
166
|
-
background: none;
|
|
167
|
-
border: none;
|
|
168
|
-
cursor: pointer;
|
|
169
|
-
font-size: var(--osdk-typography-size-body-medium);
|
|
170
|
-
color: var(--osdk-typography-color-default-rest);
|
|
171
|
-
|
|
172
|
-
&:hover {
|
|
173
|
-
background-color: var(--osdk-surface-background-color-default-hover);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
&:focus {
|
|
177
|
-
outline: none;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
&:focus-visible {
|
|
181
|
-
outline: var(--osdk-focus-outline);
|
|
182
|
-
outline-offset: calc(-1 * var(--osdk-focus-visible-outline-offset));
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
121
|
|
|
186
122
|
.truncate {
|
|
187
123
|
overflow: hidden;
|
|
@@ -13,9 +13,8 @@ export interface FormFieldDefinition<
|
|
|
13
13
|
fieldKey: K;
|
|
14
14
|
/**
|
|
15
15
|
* Display label for the field
|
|
16
|
-
* If not provided, the form field will not show any label.
|
|
17
16
|
*/
|
|
18
|
-
label
|
|
17
|
+
label: string;
|
|
19
18
|
/**
|
|
20
19
|
* Default value of the field
|
|
21
20
|
*/
|
|
@@ -184,7 +183,26 @@ export interface TextInputFieldProps extends BaseFormFieldProps<string>, Pick<Re
|
|
|
184
183
|
/**
|
|
185
184
|
* Number input field props
|
|
186
185
|
*/
|
|
187
|
-
export interface NumberInputFieldProps extends BaseFormFieldProps<number
|
|
186
|
+
export interface NumberInputFieldProps extends BaseFormFieldProps<number> {
|
|
187
|
+
/**
|
|
188
|
+
* Minimum allowed value.
|
|
189
|
+
*/
|
|
190
|
+
min?: number;
|
|
191
|
+
/**
|
|
192
|
+
* Maximum allowed value.
|
|
193
|
+
*/
|
|
194
|
+
max?: number;
|
|
195
|
+
/**
|
|
196
|
+
* Step increment for the input. Used by the stepper buttons and ArrowUp/ArrowDown keyboard stepping.
|
|
197
|
+
*
|
|
198
|
+
* @default 1
|
|
199
|
+
*/
|
|
200
|
+
step?: number;
|
|
201
|
+
/**
|
|
202
|
+
* Placeholder text shown when the input is empty.
|
|
203
|
+
*/
|
|
204
|
+
placeholder?: string;
|
|
205
|
+
}
|
|
188
206
|
/**
|
|
189
207
|
* Radio buttons field props
|
|
190
208
|
*/
|
|
@@ -297,7 +315,7 @@ export type RendererFieldDefinition = { [K in FieldComponent] : {
|
|
|
297
315
|
fieldKey: string
|
|
298
316
|
fieldComponent: K
|
|
299
317
|
fieldType?: FieldType
|
|
300
|
-
label
|
|
318
|
+
label: string
|
|
301
319
|
defaultValue?: unknown
|
|
302
320
|
isRequired?: boolean
|
|
303
321
|
placeholder?: string
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"AAgBA,cACE,kBACA,gBACA,aACA,qBACA,uBACA,WACA,4BACK,WAAY;AACnB,YAAY,WAAW,OAAQ;;;;AAK/B,iBAAiB;CACf,UAAU;CACV,UAAU,SAAS,KAAK,SAAS;EACjC;;;;CAIA,UAAU
|
|
1
|
+
{"mappings":"AAgBA,cACE,kBACA,gBACA,aACA,qBACA,uBACA,WACA,4BACK,WAAY;AACnB,YAAY,WAAW,OAAQ;;;;AAK/B,iBAAiB;CACf,UAAU;CACV,UAAU,SAAS,KAAK,SAAS;EACjC;;;;CAIA,UAAU;;;;CAKV;;;;CAKA,eAAe,eAAe,GAAG;;;;CAKjC,gBAAgB,8BAA8B,oBAAoB,GAAG;;;;CAKrE;;;;CAKA;;;;;CAMA;;;;;;CAOA,sBAAsB,WAAW;;;;CAKjC;;;;;;;CAQA,qBAAqBA,OAAO;;;;;;;CAQ5B,YAAYC,OAAO,eAAe,GAAG,OAAO;;;;;CAM5C,qBAAqB,KACnB,qBACE,8BACE,oBAAoB,GAAG,MAG3B,UAAU;AAEb;KAEI,kBAAkB;CAAE,MAAM;CAAgB;AAAe;KAEzD,iBACD,aACA,QACA,QACA,cACA,cACA,YACA;;;;AAKJ,iBAAiB,qBAAqB;CACpC,iBAAiB;CACjB,UAAU;CACV,aAAa;CACb,cAAc;CACd,YAAY,oBAAoB;CAChC,eAAe;CACf,WAAW;CACX,YAAY;CACZ,QAAQ;AACT;;;;;;AAOD,iBAAiB,iCAAiC,mBAAmB,MAAM;;;;;CAKzE,MAAM;;;;;CAMN,MAAM;;;;CAKN;;;;;CAMA;;;;CAKA;;CAGA,cAAcC,MAAM;AACrB;;;;AAKD,iBAAiB;CAAmB;CAAG,2BAA2B;UACxD,mBAAmB,iBAAiB,OAAO,MAAM,GAC3D;;;;CAIE,OAAO;;;;CAKP,qBAAqBC,MAAM;;;;;CAM3B,aAAaA,MAAM;;;;;CAMnB,eAAeC,GAAG,GAAGC,GAAG;;;;;;CAOxB;;;;CAKA;;;;CAKA,aAAa;AACd;AAED,iBAAiB,wBAAwB,mBAAmB,OAAO,QAAQ;;;;CAIzE;;;;CAKA;;;;CAKA;AACD;;;;AAKD,iBAAiB,2BACf,4BACA,KACE,MAAM,uBAAuB,sBAC3B,SACA,SAIA,cAIA,aAEN;CACE;AACD;AAED,iBAAiB,4BACf,4BACA,KACE,MAAM,oBAAoB,mBAIxB,cAIA,aAEN;CACE;AACD;;;;AAKD,iBAAiB,8BAA8B,2BAA2B;;;;CAIxE;;;;CAKA;;;;;;CAOA;;;;CAKA;AACD;;;;AAKD,iBAAiB,uBAAuB,WAAW,mBAAmB,GAAG;;;;;;;;CAQvE,SAAS,OAAO;AACjB;;;;AAKD,iBAAiB,OAAO,GAAG;CACzB;CACA,OAAO;AACR;;;;AAKD,iBAAiB,oBAAoB,UAAU,8BACrC,mBAAmB,UAAU,IACvC,CAAE;;;;AAKF,iBAAiB,iBAAiB,WAAW,mBAAmB,GAAG;;;;CAIjE,iBAAiBC,OAAO,mBAAmB,OAAO,MAAM;AACzD;AAED,iBAAiB,mBAAmB,GAAG;;;;;CAKrC;;;;CAKA,OAAO;;;;;;;;;;;;;;CAcP,YAAYC,OAAO;AACpB;AAED,YAAY,SAAS,UAAU,mCACvB,iBAAiB;;;;AAKzB,YAAY,iBAAiB,UAAU,6BACrC,oBAAoB,GAAG;;;;;;AAOzB,YAAY;CACV,UAAU;CACV,gBAAgB,iBAAiB,WAAW,iBAAiB;IAC3D,iBAAiB,GAAG,GAAG,gBACzB,eAAe,SAAS,aAAa,KAAK,YAAY,WAAW,KAC/D,iBAAiB,GAAG,GAAG,gBAAgB,eAAe,SAAS,gBACzD,KACJ,YAAY,cAAc,KAC5B,iBAAiB,GAAG,GAAG,gBAAgB,eAAe,SAAS,aACzD,KACJ,YAAY,WAAW,KACzB,iBAAiB,GAAG,GAAG,sBAAsB,wBAC3C,sBAAsB,iBAAiB,GAAG,GAAG;;;;AAMnD,YAAY;CACV,UAAU,4BAA4B;CACtC,gBAAgB,iBAAiB,WAAW,iBAAiB;IAC3D,iBAAiB,GAAG,GAAG;;;;AAK3B,YAAY,iBACR,oBACA,aACA,gBACA,iBACA,kBACA,eACA,cACA,eACA;;;;;AAMJ,YAAY,YACR,YACA,WACA,YACA,SACA,WACA,aACA,cACA,eACA,YACA,mBACA,eACA,aACA,YACA;CAAE,MAAM;CAAU;AAAgB,IAClC;CAAE,MAAM;CAAa;AAAmB,IACxC;CAAE,MAAM;CAAa;AAAmB,IACxC;CAAE,MAAM;CAAU,QAAQ;AAAwB;;;;;;;;;AAUtD,YAAY,6BACT,KAAK,kBAAiB;CACrB;CACA,gBAAgB;CAChB,YAAY;CACZ;CACA;CACA;CACA;CACA;CACA,sBAAsB,WAAW;CACjC,qBAAqB,KAAK,qBAAqB,IAAI,UAAU;AAC9D,IACD;;;;AAKF,YAAY,8BAA8B,UAAU,uBAClD,UAAU,cAAc,eACpB,UAAU,WAAW,aACrB,UAAU,mBAAmB,eAAe,gBAC5C,UAAU,YAAY,kBAAkB,aACxC,UAAU,WAAW,eAAe,cACpC,UAAU,aAAa,cAAc,oBACrC,UACE,WACA,YACA,SACA,UACA,UACA,SACA,YAAY","names":["error: ValidationError","value: FieldValueType<Q, K>","date: Date","item: V","a: V","b: V","props: BaseFormFieldProps<V>","value: V | null"],"sources":["../../../src/action-form/FormFieldApi.ts"],"version":3,"file":"FormFieldApi.d.ts"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"AAgBA,OAAO,WAAqB,OAAQ;AAEpC,cAAc,+BAA+B,oBAAqB;
|
|
1
|
+
{"mappings":"AAgBA,OAAO,WAAqB,OAAQ;AAEpC,cAAc,+BAA+B,oBAAqB;AASlE,iBAAiB,uBAAuB;CACtC,iBAAiB;CACjB;CACA,qBAAqBA;AACtB;AAED,OAAO,cAAMC,mBAAmB,MAAM,GAAG","names":["value: unknown","FormFieldRenderer: React.FC<FormFieldRendererProps>"],"sources":["../../../../src/action-form/fields/FormFieldRenderer.tsx"],"version":3,"file":"FormFieldRenderer.d.ts"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"AAmBA,OAAO,WAA8C,OAAQ;AAC7D,cAAc,6BAA6B,oBAAqB;AAsBhE,OAAO,iBAAS,iBAAiB,EAC/B,IACA,OACA,UACA,aACA,KAAK,MACL,KAAK,MACL,MACsB,EAArB,wBAAwB,MAAM","names":[],"sources":["../../../../src/action-form/fields/NumberInputField.tsx"],"version":3,"file":"NumberInputField.d.ts"}
|
|
@@ -2,9 +2,10 @@ import { type CheckboxIndicatorProps, type CheckboxRootProps } from "@base-ui/re
|
|
|
2
2
|
import React from "react";
|
|
3
3
|
interface CheckboxProps extends Omit<CheckboxRootProps, "className"> {
|
|
4
4
|
className?: string;
|
|
5
|
+
isExcluding?: boolean;
|
|
5
6
|
indicatorProps?: Omit<CheckboxIndicatorProps, "className"> & {
|
|
6
7
|
className?: string
|
|
7
8
|
};
|
|
8
9
|
}
|
|
9
|
-
export declare function Checkbox({ indeterminate, className, indicatorProps,...rest }: CheckboxProps): React.ReactElement;
|
|
10
|
+
export declare function Checkbox({ indeterminate, className, isExcluding, indicatorProps,...rest }: CheckboxProps): React.ReactElement;
|
|
10
11
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"AAgBA,cAEO,6BACA,yBACA,yBAA0B;AAGjC,OAAO,WAAW,OAAQ;UAGhB,sBAAsB,KAAK,mBAAmB,aAAa;CACnE;CACA,iBAAiB,KAAK,wBAAwB,eAAe;EAC3D;CACD;AACF;AAED,OAAO,iBAAS,SACd,EACE,eACA,WACA,eACA,GAAG,MACW,EAAb,gBACF,MAAM","names":[],"sources":["../../../../src/base-components/checkbox/Checkbox.tsx"],"version":3,"file":"Checkbox.d.ts"}
|
|
1
|
+
{"mappings":"AAgBA,cAEO,6BACA,yBACA,yBAA0B;AAGjC,OAAO,WAAW,OAAQ;UAGhB,sBAAsB,KAAK,mBAAmB,aAAa;CACnE;CACA;CACA,iBAAiB,KAAK,wBAAwB,eAAe;EAC3D;CACD;AACF;AAED,OAAO,iBAAS,SACd,EACE,eACA,WACA,aACA,eACA,GAAG,MACW,EAAb,gBACF,MAAM","names":[],"sources":["../../../../src/base-components/checkbox/Checkbox.tsx"],"version":3,"file":"Checkbox.d.ts"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Combobox as BaseUICombobox, type ComboboxChipProps, type ComboboxChipRemoveProps, type ComboboxClearProps, type ComboboxInputProps, type ComboboxItemProps, type ComboboxListProps, type ComboboxPopupProps, type ComboboxPositionerProps } from "@base-ui/react/combobox";
|
|
1
|
+
import { Combobox as BaseUICombobox, type ComboboxChipProps, type ComboboxChipRemoveProps, type ComboboxClearProps, type ComboboxInputProps, type ComboboxItemIndicatorProps, type ComboboxItemProps, type ComboboxListProps, type ComboboxPopupProps, type ComboboxPositionerProps } from "@base-ui/react/combobox";
|
|
2
2
|
import React from "react";
|
|
3
3
|
interface ComboboxInputComponentProps extends Omit<ComboboxInputProps, "className"> {
|
|
4
4
|
className?: string;
|
|
@@ -41,6 +41,10 @@ interface ComboboxListComponentProps extends Omit<ComboboxListProps, "className"
|
|
|
41
41
|
className?: string;
|
|
42
42
|
}
|
|
43
43
|
declare function ComboboxList({ className, children,...rest }: ComboboxListComponentProps): React.ReactElement;
|
|
44
|
+
interface ComboboxItemIndicatorComponentProps extends Omit<ComboboxItemIndicatorProps, "className"> {
|
|
45
|
+
className?: string;
|
|
46
|
+
}
|
|
47
|
+
declare function ComboboxItemIndicator({ className, children,...rest }: ComboboxItemIndicatorComponentProps): React.ReactElement;
|
|
44
48
|
export declare const Combobox: {
|
|
45
49
|
Root: typeof BaseUICombobox.Root
|
|
46
50
|
SearchInput: typeof ComboboxSearchInput
|
|
@@ -50,6 +54,7 @@ export declare const Combobox: {
|
|
|
50
54
|
Popup: typeof ComboboxPopup
|
|
51
55
|
List: typeof ComboboxList
|
|
52
56
|
Item: typeof ComboboxItem
|
|
57
|
+
ItemIndicator: typeof ComboboxItemIndicator
|
|
53
58
|
Chips: typeof ComboboxChips
|
|
54
59
|
Chip: typeof ComboboxChip
|
|
55
60
|
ChipRemove: typeof ComboboxChipRemove
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"AAgBA,SACE,YAAY,qBACP,wBACA,8BACA,yBACA,yBACA,wBACA,wBACA,yBACA,+BACA,yBAA0B;AAGjC,OAAO,WAAW,OAAQ;UAGhB,oCACA,KAAK,oBAAoB,aACnC;CACE;AACD;AAED,iBAAS,oBAAoB,EAC3B,UACA,GAAG,MACyB,EAA3B,8BAA8B,MAAM;AASvC,iBAAS,cAAc,EACrB,UACA,GAAG,MACyB,EAA3B,8BAA8B,MAAM;UAS7B,yCACA,KAAK,yBAAyB,aACxC;CACE;AACD;AAED,iBAAS,mBAAmB,EAC1B,WACA,SACA,GAAG,MAC8B,EAAhC,mCAAmC,MAAM;UAYlC,oCACA,KAAK,oBAAoB,aACnC;CACE;AACD;AAED,iBAAS,cAAc,EACrB,WACA,SACA,GAAG,MACyB,EAA3B,8BAA8B,MAAM;UAW7B,mCACA,KAAK,mBAAmB,aAClC;CACE;AACD;AAED,iBAAS,aAAa,EACpB,WACA,SACA,GAAG,MACwB,EAA1B,6BAA6B,MAAM;AAWtC,iBAAS,cAAc,EACrB,UACA,WAID,EAHE;CACD,UAAU,MAAM;CAChB;AACD,IAAG,MAAM;UAiBA,mCACA,KAAK,mBAAmB,aAClC;CACE;AACD;AAED,iBAAS,aAAa,EACpB,WACA,SACA,GAAG,MACwB,EAA1B,6BAA6B,MAAM;UAW5B,yCACA,KAAK,yBAAyB,aACxC;CACE;AACD;AAED,iBAAS,mBAAmB,EAC1B,UACA,GAAG,MAC8B,EAAhC,mCAAmC,MAAM;UAYlC,oCACA,KAAK,oBAAoB,aACnC;CACE;AACD;AAED,iBAAS,cAAc,EACrB,UACA,GAAG,MACyB,EAA3B,8BAA8B,MAAM;AAYvC,iBAAS,cAAc,EACrB,UACA,WAID,EAHE;CACD,UAAU,MAAM;CAChB;AACD,IAAG,MAAM;UAUA,mCACA,KAAK,mBAAmB,aAClC;CACE;AACD;AAED,iBAAS,aAAa,EACpB,WACA,SACA,GAAG,MACwB,EAA1B,6BAA6B,MAAM;
|
|
1
|
+
{"mappings":"AAgBA,SACE,YAAY,qBACP,wBACA,8BACA,yBACA,yBACA,iCACA,wBACA,wBACA,yBACA,+BACA,yBAA0B;AAGjC,OAAO,WAAW,OAAQ;UAGhB,oCACA,KAAK,oBAAoB,aACnC;CACE;AACD;AAED,iBAAS,oBAAoB,EAC3B,UACA,GAAG,MACyB,EAA3B,8BAA8B,MAAM;AASvC,iBAAS,cAAc,EACrB,UACA,GAAG,MACyB,EAA3B,8BAA8B,MAAM;UAS7B,yCACA,KAAK,yBAAyB,aACxC;CACE;AACD;AAED,iBAAS,mBAAmB,EAC1B,WACA,SACA,GAAG,MAC8B,EAAhC,mCAAmC,MAAM;UAYlC,oCACA,KAAK,oBAAoB,aACnC;CACE;AACD;AAED,iBAAS,cAAc,EACrB,WACA,SACA,GAAG,MACyB,EAA3B,8BAA8B,MAAM;UAW7B,mCACA,KAAK,mBAAmB,aAClC;CACE;AACD;AAED,iBAAS,aAAa,EACpB,WACA,SACA,GAAG,MACwB,EAA1B,6BAA6B,MAAM;AAWtC,iBAAS,cAAc,EACrB,UACA,WAID,EAHE;CACD,UAAU,MAAM;CAChB;AACD,IAAG,MAAM;UAiBA,mCACA,KAAK,mBAAmB,aAClC;CACE;AACD;AAED,iBAAS,aAAa,EACpB,WACA,SACA,GAAG,MACwB,EAA1B,6BAA6B,MAAM;UAW5B,yCACA,KAAK,yBAAyB,aACxC;CACE;AACD;AAED,iBAAS,mBAAmB,EAC1B,UACA,GAAG,MAC8B,EAAhC,mCAAmC,MAAM;UAYlC,oCACA,KAAK,oBAAoB,aACnC;CACE;AACD;AAED,iBAAS,cAAc,EACrB,UACA,GAAG,MACyB,EAA3B,8BAA8B,MAAM;AAYvC,iBAAS,cAAc,EACrB,UACA,WAID,EAHE;CACD,UAAU,MAAM;CAChB;AACD,IAAG,MAAM;UAUA,mCACA,KAAK,mBAAmB,aAClC;CACE;AACD;AAED,iBAAS,aAAa,EACpB,WACA,SACA,GAAG,MACwB,EAA1B,6BAA6B,MAAM;UAW5B,4CACA,KAAK,4BAA4B,aAC3C;CACE;AACD;AAED,iBAAS,sBAAsB,EAC7B,WACA,SACA,GAAG,MACiC,EAAnC,sCAAsC,MAAM;AAY/C,OAAO,cAAMA,UAAU;CACrB,aAAa,eAAe;CAC5B,oBAAoB;CACpB,cAAc;CACd,eAAe,eAAe;CAC9B,mBAAmB;CACnB,cAAc;CACd,aAAa;CACb,aAAa;CACb,sBAAsB;CACtB,cAAc;CACd,aAAa;CACb,mBAAmB;CACnB,cAAc;CACd,cAAc;CACd,cAAc,eAAe;AAC9B","names":["Combobox: {\n Root: typeof BaseUICombobox.Root;\n SearchInput: typeof ComboboxSearchInput;\n Input: typeof ComboboxInput;\n Portal: typeof BaseUICombobox.Portal;\n Positioner: typeof ComboboxPositioner;\n Popup: typeof ComboboxPopup;\n List: typeof ComboboxList;\n Item: typeof ComboboxItem;\n ItemIndicator: typeof ComboboxItemIndicator;\n Chips: typeof ComboboxChips;\n Chip: typeof ComboboxChip;\n ChipRemove: typeof ComboboxChipRemove;\n Clear: typeof ComboboxClear;\n Empty: typeof ComboboxEmpty;\n Value: typeof BaseUICombobox.Value;\n}"],"sources":["../../../../src/base-components/combobox/Combobox.tsx"],"version":3,"file":"Combobox.d.ts"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface SearchableMenuItem {
|
|
3
|
+
key: string;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
interface SearchableMenuProps {
|
|
7
|
+
items: SearchableMenuItem[];
|
|
8
|
+
onItemSelected: (key: string) => void;
|
|
9
|
+
trigger: React.ReactNode;
|
|
10
|
+
triggerClassName?: string;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
searchPlaceholder?: string;
|
|
13
|
+
emptyMessage?: string;
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
declare function SearchableMenuInner({ items, onItemSelected, trigger, triggerClassName, disabled, searchPlaceholder, emptyMessage, className }: SearchableMenuProps): React.ReactElement;
|
|
17
|
+
export declare const SearchableMenu: React.MemoExoticComponent<typeof SearchableMenuInner>;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"AAkBA,OAAO,WAAqD,OAAQ;AAIpE,iBAAiB,mBAAmB;CAClC;CACA;AACD;UAES,oBAAoB;CAC5B,OAAO;CACP,iBAAiBA;CACjB,SAAS,MAAM;CACf;CACA;CACA;CACA;CACA;AACD;AAED,iBAAS,oBAAoB,EAC3B,OACA,gBACA,SACA,kBACA,UACA,mBACA,cACA,WACoB,EAAnB,sBAAsB,MAAM;AAsE/B,OAAO,cAAMC,gBAAgB,MAAM,2BAC1B","names":["key: string","SearchableMenu: React.MemoExoticComponent<\n typeof SearchableMenuInner\n>"],"sources":["../../../../src/base-components/searchable-menu/SearchableMenu.tsx"],"version":3,"file":"SearchableMenu.d.ts"}
|
|
@@ -53,19 +53,12 @@ export interface FilterListProps<Q extends ObjectTypeDefinition> {
|
|
|
53
53
|
filterClause?: WhereClause<Q>;
|
|
54
54
|
/**
|
|
55
55
|
* Called when the filter clause changes.
|
|
56
|
-
* The filters are joined by the selected filterOperator.
|
|
57
56
|
* Required in controlled mode.
|
|
58
57
|
*
|
|
59
58
|
* @param newClause The updated filter clause
|
|
60
59
|
*/
|
|
61
60
|
onFilterClauseChanged?: (newClause: WhereClause<Q>) => void;
|
|
62
61
|
/**
|
|
63
|
-
* The logical operator to join multiple filters
|
|
64
|
-
*
|
|
65
|
-
* @default "and"
|
|
66
|
-
*/
|
|
67
|
-
filterOperator?: "and" | "or";
|
|
68
|
-
/**
|
|
69
62
|
* Called when filter state changes
|
|
70
63
|
*
|
|
71
64
|
* @param definition The filter definition whose state changed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"AAgBA,cACE,WACA,WACA,sBACA,mBACK,WAAY;AACnB,YAAY,WAAW,OAAQ;AAC/B,cAAc,iBAAiB,OAAQ;AACvC,cACE,eAAe,iBACf,gCACK,wBAAyB;AAChC,cAAc,8BAA8B,gCAAiC;AAC7E,cAAc,qCAAqC,+BAAgC;AACnF,cACE,yBACA,sCACK,8BAA+B;;;;AAKtC,YAAY,sBAAsB,UAAU,wBACxC,yBAAyB,KACzB,wBAAwB,KACxB,+BAA+B,GAAG,UAAU,MAC5C,8BAA8B,KAC9B,uBAAuB;;;;AAK3B,YAAY,UAAU,UAAU,wBAC9B,sBAAsB,iBAAiB,IAAI,UAAU;CAAE,WAAW;AAAG,IAAG,IACpE,UAAU;CAAE,gBAAgB;AAAG,IAAG;;;;AAOxC,YAAY,YAAY,UAAU,wBAChC,sBAAsB,iBAAiB,IACnC,UAAU;CAAE,mBAAmB;AAAG,IAAG;;;;;AAQ3C,YAAY,gBAAgB,UAAU,wBAAwB,IAC5D,sBAAsB,IACtB;AAGF,iBAAiB,gBAAgB,UAAU,sBAAsB;;;;CAI/D,WAAW,UAAU;;;;CAKrB,QAAQ;;;;CAKR,YAAY,MAAM;;;;;CAMlB,oBAAoB,MAAM,sBAAsB;;;;;CAMhD,eAAe,YAAY
|
|
1
|
+
{"mappings":"AAgBA,cACE,WACA,WACA,sBACA,mBACK,WAAY;AACnB,YAAY,WAAW,OAAQ;AAC/B,cAAc,iBAAiB,OAAQ;AACvC,cACE,eAAe,iBACf,gCACK,wBAAyB;AAChC,cAAc,8BAA8B,gCAAiC;AAC7E,cAAc,qCAAqC,+BAAgC;AACnF,cACE,yBACA,sCACK,8BAA+B;;;;AAKtC,YAAY,sBAAsB,UAAU,wBACxC,yBAAyB,KACzB,wBAAwB,KACxB,+BAA+B,GAAG,UAAU,MAC5C,8BAA8B,KAC9B,uBAAuB;;;;AAK3B,YAAY,UAAU,UAAU,wBAC9B,sBAAsB,iBAAiB,IAAI,UAAU;CAAE,WAAW;AAAG,IAAG,IACpE,UAAU;CAAE,gBAAgB;AAAG,IAAG;;;;AAOxC,YAAY,YAAY,UAAU,wBAChC,sBAAsB,iBAAiB,IACnC,UAAU;CAAE,mBAAmB;AAAG,IAAG;;;;;AAQ3C,YAAY,gBAAgB,UAAU,wBAAwB,IAC5D,sBAAsB,IACtB;AAGF,iBAAiB,gBAAgB,UAAU,sBAAsB;;;;CAI/D,WAAW,UAAU;;;;CAKrB,QAAQ;;;;CAKR,YAAY,MAAM;;;;;CAMlB,oBAAoB,MAAM,sBAAsB;;;;;CAMhD,eAAe,YAAY;;;;;;;CAQ3B,yBAAyBA,WAAW,YAAY;;;;;;;CAQhD,wBACEC,YAAY,sBAAsB,IAClCC,UAAU;;;;;;;;;;;;;CAeZ,gBAAgB,eAAe;;;;;;;;;;CAW/B,iBACEC,WAAW,UAAU,IACrBC,gBAAgB,MAAM,sBAAsB;;;;;;;;;CAW9C,mBAAmBD,WAAW,UAAU;;;;;;;CAQxC;;;;CAKA;;;;CAKA,qBAAqBE;;;;;;CAOrB,sBAAsB,YAAY;;;;CAKlC;;;;CAKA;;;;CAKA;;;;CAKA;;;;;;;;;CAUA,8BAA8B,MAAM;AACrC","names":["newClause: WhereClause<Q>","definition: FilterDefinitionUnion<Q>","newState: FilterStateType","filterKey: FilterKey<Q>","newDefinitions: Array<FilterDefinitionUnion<Q>>","collapsed: boolean"],"sources":["../../../src/filter-list/FilterListApi.ts"],"version":3,"file":"FilterListApi.d.ts"}
|