@osdk/react-components 0.1.0 → 0.2.0-beta.10
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 +98 -19
- package/README.md +56 -23
- package/build/browser/base-components/action-button/ActionButton.js +31 -0
- package/build/browser/base-components/action-button/ActionButton.js.map +1 -0
- package/build/browser/base-components/action-button/ActionButton.module.css +70 -0
- package/build/browser/base-components/action-button/ActionButton.module.css.js +8 -0
- package/build/browser/base-components/checkbox/Checkbox.js +27 -32
- package/build/browser/base-components/checkbox/Checkbox.module.css +79 -0
- package/build/browser/base-components/checkbox/Checkbox.module.css.js +7 -0
- package/build/browser/base-components/combobox/Combobox.js +124 -0
- package/build/browser/base-components/combobox/Combobox.js.map +1 -0
- package/build/browser/base-components/combobox/Combobox.module.css +177 -0
- package/build/browser/base-components/combobox/Combobox.module.css.js +16 -0
- package/build/browser/base-components/dialog/Dialog.js +52 -0
- package/build/browser/base-components/dialog/Dialog.js.map +1 -0
- package/build/browser/base-components/dialog/Dialog.module.css +101 -0
- package/build/browser/base-components/dialog/Dialog.module.css.js +13 -0
- package/build/browser/base-components/draggable-list/DraggableList.js +155 -0
- package/build/browser/base-components/draggable-list/DraggableList.js.map +1 -0
- package/build/browser/base-components/draggable-list/DraggableList.module.css +108 -0
- package/build/browser/base-components/draggable-list/DraggableList.module.css.js +11 -0
- package/build/browser/base-components/search-bar/SearchBar.js +44 -0
- package/build/browser/base-components/search-bar/SearchBar.js.map +1 -0
- package/build/browser/base-components/search-bar/SearchBar.module.css +53 -0
- package/build/browser/base-components/search-bar/SearchBar.module.css.js +8 -0
- package/build/browser/base-components/select/Select.js +89 -0
- package/build/browser/base-components/select/Select.js.map +1 -0
- package/build/browser/base-components/select/Select.module.css +138 -0
- package/build/browser/base-components/select/Select.module.css.js +11 -0
- package/build/browser/base-components/switch/Switch.js +33 -0
- package/build/browser/base-components/switch/Switch.js.map +1 -0
- package/build/browser/base-components/switch/Switch.module.css +91 -0
- package/build/browser/base-components/switch/Switch.module.css.js +7 -0
- 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/__tests__/LinkedPropertyInput.test.js +202 -0
- package/build/browser/filter-list/__tests__/LinkedPropertyInput.test.js.map +1 -0
- package/build/browser/filter-list/__tests__/dateUtils.test.js +55 -0
- package/build/browser/filter-list/__tests__/dateUtils.test.js.map +1 -0
- package/build/browser/filter-list/__tests__/filterStateToWhereClause.test.js +296 -0
- package/build/browser/filter-list/__tests__/filterStateToWhereClause.test.js.map +1 -0
- package/build/browser/filter-list/__tests__/getFilterKey.test.js +53 -0
- package/build/browser/filter-list/__tests__/getFilterKey.test.js.map +1 -0
- package/build/browser/filter-list/__tests__/testUtils.js +203 -0
- package/build/browser/filter-list/__tests__/testUtils.js.map +1 -0
- package/build/browser/filter-list/base/FilterInput.js +542 -0
- package/build/browser/filter-list/base/FilterInput.js.map +1 -0
- package/build/browser/filter-list/base/FilterList.js +77 -0
- package/build/browser/filter-list/base/FilterList.js.map +1 -0
- package/build/browser/filter-list/base/FilterList.module.css +67 -0
- package/build/browser/filter-list/base/FilterList.module.css.js +8 -0
- package/build/browser/filter-list/base/FilterListContent.js +57 -0
- package/build/browser/filter-list/base/FilterListContent.js.map +1 -0
- package/build/browser/filter-list/base/FilterListContent.module.css +27 -0
- package/build/browser/filter-list/base/FilterListContent.module.css.js +7 -0
- package/build/browser/filter-list/base/FilterListHeader.js +58 -0
- package/build/browser/filter-list/base/FilterListHeader.js.map +1 -0
- package/build/browser/filter-list/base/FilterListHeader.module.css +127 -0
- package/build/browser/filter-list/base/FilterListHeader.module.css.js +13 -0
- package/build/browser/filter-list/base/FilterListItem.js +75 -0
- package/build/browser/filter-list/base/FilterListItem.js.map +1 -0
- package/build/browser/filter-list/base/FilterListItem.module.css +38 -0
- package/build/browser/filter-list/base/FilterListItem.module.css.js +9 -0
- package/build/browser/filter-list/base/index.js +22 -0
- package/build/browser/filter-list/base/index.js.map +1 -0
- package/build/browser/filter-list/base/inputs/CheckboxListInput.js +75 -0
- package/build/browser/filter-list/base/inputs/CheckboxListInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css +42 -0
- package/build/browser/filter-list/base/inputs/CheckboxListInput.module.css.js +9 -0
- package/build/browser/filter-list/base/inputs/ContainsTextInput.js +85 -0
- package/build/browser/filter-list/base/inputs/ContainsTextInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/ContainsTextInput.module.css +91 -0
- package/build/browser/filter-list/base/inputs/ContainsTextInput.module.css.js +10 -0
- package/build/browser/filter-list/base/inputs/DateRangeInput.js +37 -0
- package/build/browser/filter-list/base/inputs/DateRangeInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/LinkedPropertyInput.js +237 -0
- package/build/browser/filter-list/base/inputs/LinkedPropertyInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/LinkedPropertyInput.module.css +20 -0
- package/build/browser/filter-list/base/inputs/LinkedPropertyInput.module.css.js +6 -0
- package/build/browser/filter-list/base/inputs/ListogramInput.js +98 -0
- package/build/browser/filter-list/base/inputs/ListogramInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/ListogramInput.module.css +88 -0
- package/build/browser/filter-list/base/inputs/ListogramInput.module.css.js +12 -0
- package/build/browser/filter-list/base/inputs/MultiDateInput.js +82 -0
- package/build/browser/filter-list/base/inputs/MultiDateInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/MultiDateInput.module.css +54 -0
- package/build/browser/filter-list/base/inputs/MultiDateInput.module.css.js +9 -0
- package/build/browser/filter-list/base/inputs/MultiSelectInput.js +100 -0
- package/build/browser/filter-list/base/inputs/MultiSelectInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css +35 -0
- package/build/browser/filter-list/base/inputs/MultiSelectInput.module.css.js +9 -0
- package/build/browser/filter-list/base/inputs/NullValueWrapper.js +76 -0
- package/build/browser/filter-list/base/inputs/NullValueWrapper.js.map +1 -0
- package/build/browser/filter-list/base/inputs/NullValueWrapper.module.css +49 -0
- package/build/browser/filter-list/base/inputs/NullValueWrapper.module.css.js +10 -0
- package/build/browser/filter-list/base/inputs/NumberRangeInput.js +48 -0
- package/build/browser/filter-list/base/inputs/NumberRangeInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/RangeInput.js +187 -0
- package/build/browser/filter-list/base/inputs/RangeInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/RangeInput.module.css +81 -0
- package/build/browser/filter-list/base/inputs/RangeInput.module.css.js +13 -0
- package/build/browser/filter-list/base/inputs/SingleDateInput.js +61 -0
- package/build/browser/filter-list/base/inputs/SingleDateInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/SingleDateInput.module.css +63 -0
- package/build/browser/filter-list/base/inputs/SingleDateInput.module.css.js +9 -0
- package/build/browser/filter-list/base/inputs/SingleSelectInput.js +95 -0
- package/build/browser/filter-list/base/inputs/SingleSelectInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/SingleSelectInput.module.css +55 -0
- package/build/browser/filter-list/base/inputs/SingleSelectInput.module.css.js +8 -0
- package/build/browser/filter-list/base/inputs/TextTagsInput.js +141 -0
- package/build/browser/filter-list/base/inputs/TextTagsInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/TextTagsInput.module.css +25 -0
- package/build/browser/filter-list/base/inputs/TextTagsInput.module.css.js +7 -0
- package/build/browser/filter-list/base/inputs/TimelineInput.js +74 -0
- package/build/browser/filter-list/base/inputs/TimelineInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/TimelineInput.module.css +73 -0
- package/build/browser/filter-list/base/inputs/TimelineInput.module.css.js +10 -0
- package/build/browser/filter-list/base/inputs/ToggleInput.js +43 -0
- package/build/browser/filter-list/base/inputs/ToggleInput.js.map +1 -0
- package/build/browser/filter-list/base/inputs/ToggleInput.module.css +34 -0
- package/build/browser/filter-list/base/inputs/ToggleInput.module.css.js +8 -0
- package/build/browser/filter-list/base/inputs/createHistogramBuckets.js +53 -0
- package/build/browser/filter-list/base/inputs/createHistogramBuckets.js.map +1 -0
- package/build/browser/filter-list/base/inputs/dateUtils.js +57 -0
- package/build/browser/filter-list/base/inputs/dateUtils.js.map +1 -0
- package/build/browser/filter-list/base/inputs/index.js +25 -0
- package/build/browser/filter-list/base/inputs/index.js.map +1 -0
- package/build/browser/filter-list/base/inputs/shared.module.css +79 -0
- package/build/browser/filter-list/base/inputs/shared.module.css.js +11 -0
- package/build/browser/filter-list/hooks/__tests__/useFilterListState.test.js +128 -0
- package/build/browser/filter-list/hooks/__tests__/useFilterListState.test.js.map +1 -0
- package/build/browser/filter-list/hooks/useFilterListState.js +119 -0
- package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -0
- package/build/browser/filter-list/hooks/usePropertyAggregation.js +92 -0
- package/build/browser/filter-list/hooks/usePropertyAggregation.js.map +1 -0
- package/build/browser/filter-list/types/AddFilterMenuTypes.js +2 -0
- package/build/browser/filter-list/types/AddFilterMenuTypes.js.map +1 -0
- package/build/browser/filter-list/types/CustomRendererTypes.js +2 -0
- package/build/browser/filter-list/types/CustomRendererTypes.js.map +1 -0
- package/build/browser/filter-list/types/FilterPanelTypes.js +2 -0
- package/build/browser/filter-list/types/FilterPanelTypes.js.map +1 -0
- package/build/browser/filter-list/types/KeywordSearchTypes.js +2 -0
- package/build/browser/filter-list/types/KeywordSearchTypes.js.map +1 -0
- package/build/browser/filter-list/types/LinkedFilterTypes.js +2 -0
- package/build/browser/filter-list/types/LinkedFilterTypes.js.map +1 -0
- package/build/browser/filter-list/types/index.js +22 -0
- package/build/browser/filter-list/types/index.js.map +1 -0
- package/build/browser/filter-list/utils/aggregationHelpers.js +44 -0
- package/build/browser/filter-list/utils/aggregationHelpers.js.map +1 -0
- package/build/browser/filter-list/utils/assertUnreachable.js +25 -0
- package/build/browser/filter-list/utils/assertUnreachable.js.map +1 -0
- package/build/browser/filter-list/utils/coerceFilterValue.js +33 -0
- package/build/browser/filter-list/utils/coerceFilterValue.js.map +1 -0
- package/build/browser/filter-list/utils/filterStateToWhereClause.js +337 -0
- package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -0
- package/build/browser/filter-list/utils/filterValues.js +55 -0
- package/build/browser/filter-list/utils/filterValues.js.map +1 -0
- package/build/browser/filter-list/utils/getFilterKey.js +34 -0
- package/build/browser/filter-list/utils/getFilterKey.js.map +1 -0
- package/build/browser/object-table/CellContextMenu.js +23 -20
- package/build/browser/object-table/CellContextMenu.module.css +20 -0
- package/build/browser/object-table/CellContextMenu.module.css.js +6 -0
- package/build/browser/object-table/ColumnConfigDialog.js +259 -0
- package/build/browser/object-table/ColumnConfigDialog.js.map +1 -0
- package/build/browser/object-table/ColumnConfigDialog.module.css +247 -0
- package/build/browser/object-table/ColumnConfigDialog.module.css.js +29 -0
- package/build/browser/object-table/DefaultCellRenderer.js +43 -0
- package/build/browser/object-table/DefaultCellRenderer.js.map +1 -0
- package/build/browser/object-table/EditableCell.js +91 -0
- package/build/browser/object-table/EditableCell.js.map +1 -0
- package/build/browser/object-table/EditableCell.module.css +3 -0
- package/build/browser/object-table/EditableCell.module.css.js +6 -0
- package/build/browser/object-table/LoadingCell.js +24 -29
- package/build/browser/object-table/LoadingCell.module.css +48 -0
- package/build/browser/object-table/LoadingCell.module.css.js +8 -0
- package/build/browser/object-table/LoadingRow.js +24 -50
- package/build/browser/object-table/LoadingStateTable.js +49 -343
- package/build/browser/object-table/LoadingStateTable.js.map +1 -1
- package/build/browser/object-table/MultiColumnSortDialog.js +178 -0
- package/build/browser/object-table/MultiColumnSortDialog.js.map +1 -0
- package/build/browser/object-table/MultiColumnSortDialog.module.css +195 -0
- package/build/browser/object-table/MultiColumnSortDialog.module.css.js +22 -0
- package/build/browser/object-table/NonIdealState.js +23 -20
- package/build/browser/object-table/NonIdealState.module.css +27 -0
- package/build/browser/object-table/NonIdealState.module.css.js +7 -0
- package/build/browser/object-table/ObjectTable.js +74 -15
- package/build/browser/object-table/ObjectTable.js.map +1 -1
- package/build/browser/object-table/ObjectTableApi.js.map +1 -1
- package/build/browser/object-table/SelectionCells.js +15 -4
- package/build/browser/object-table/SelectionCells.js.map +1 -1
- package/build/browser/object-table/SortableItemsList.js +35 -0
- package/build/browser/object-table/SortableItemsList.js.map +1 -0
- package/build/browser/object-table/Table.js +70 -935
- package/build/browser/object-table/Table.js.map +1 -1
- package/build/browser/object-table/Table.module.css +45 -0
- package/build/browser/object-table/Table.module.css.js +8 -0
- package/build/browser/object-table/TableBody.js +36 -260
- package/build/browser/object-table/TableBody.module.css +22 -0
- package/build/browser/object-table/TableBody.module.css.js +6 -0
- package/build/browser/object-table/TableCell.js +31 -111
- package/build/browser/object-table/TableCell.module.css +83 -0
- package/build/browser/object-table/TableCell.module.css.js +8 -0
- package/build/browser/object-table/TableHeader.js +126 -216
- package/build/browser/object-table/TableHeader.js.map +1 -1
- package/build/browser/object-table/TableHeader.module.css +108 -0
- package/build/browser/object-table/TableHeader.module.css.js +10 -0
- package/build/browser/object-table/TableHeaderContent.js +21 -18
- package/build/browser/object-table/TableHeaderContent.module.css +30 -0
- package/build/browser/object-table/TableHeaderContent.module.css.js +6 -0
- package/build/browser/object-table/TableHeaderWithPopover.js +110 -93
- package/build/browser/object-table/TableHeaderWithPopover.js.map +1 -1
- package/build/browser/object-table/TableHeaderWithPopover.module.css +141 -0
- package/build/browser/object-table/TableHeaderWithPopover.module.css.js +17 -0
- package/build/browser/object-table/TableRow.js +26 -144
- package/build/browser/object-table/TableRow.module.css +62 -0
- package/build/browser/object-table/TableRow.module.css.js +6 -0
- package/build/browser/object-table/__tests__/useEditableTable.test.js +197 -0
- package/build/browser/object-table/__tests__/useEditableTable.test.js.map +1 -0
- package/build/browser/object-table/hooks/__tests__/useColumnDefs.test.js +14 -2
- package/build/browser/object-table/hooks/__tests__/useColumnDefs.test.js.map +1 -1
- package/build/browser/object-table/hooks/__tests__/useColumnVisibility.test.js +160 -138
- package/build/browser/object-table/hooks/__tests__/useColumnVisibility.test.js.map +1 -1
- package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js +113 -25
- package/build/browser/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -1
- package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js +48 -0
- package/build/browser/object-table/hooks/__tests__/useRowSelection.test.js.map +1 -1
- package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js +27 -82
- package/build/browser/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -1
- package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js +290 -0
- package/build/browser/object-table/hooks/__tests__/useTableSorting.test.js.map +1 -1
- package/build/browser/object-table/hooks/useColumnDefs.js +16 -3
- package/build/browser/object-table/hooks/useColumnDefs.js.map +1 -1
- package/build/browser/object-table/hooks/useColumnResize.js +45 -0
- package/build/browser/object-table/hooks/useColumnResize.js.map +1 -0
- package/build/browser/object-table/hooks/useColumnVisibility.js +52 -20
- package/build/browser/object-table/hooks/useColumnVisibility.js.map +1 -1
- package/build/browser/object-table/hooks/useEditableTable.js +57 -0
- package/build/browser/object-table/hooks/useEditableTable.js.map +1 -0
- package/build/browser/object-table/hooks/useObjectTableData.js +42 -7
- package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/browser/object-table/hooks/useRowSelection.js +31 -10
- package/build/browser/object-table/hooks/useRowSelection.js.map +1 -1
- package/build/browser/object-table/hooks/useSelectionColumn.js +15 -6
- package/build/browser/object-table/hooks/useSelectionColumn.js.map +1 -1
- package/build/browser/object-table/utils/getCellId.js +27 -0
- package/build/browser/object-table/utils/getCellId.js.map +1 -0
- package/build/browser/object-table/utils/types.js +2 -0
- package/build/browser/object-table/utils/types.js.map +1 -0
- package/build/browser/public/experimental.js +2 -0
- package/build/browser/public/experimental.js.map +1 -1
- package/build/browser/shared/ErrorBoundary.js +62 -0
- package/build/browser/shared/ErrorBoundary.js.map +1 -0
- package/build/browser/shared/ErrorBoundary.module.css +55 -0
- package/build/browser/shared/ErrorBoundary.module.css.js +8 -0
- package/build/browser/styles.css +3073 -0
- package/build/cjs/public/experimental.cjs +4026 -240
- package/build/cjs/public/experimental.cjs.map +1 -1
- package/build/cjs/public/experimental.css +1834 -154
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/cjs/public/experimental.d.cts +453 -50
- package/build/esm/base-components/action-button/ActionButton.js +31 -0
- package/build/esm/base-components/action-button/ActionButton.js.map +1 -0
- package/build/esm/base-components/action-button/ActionButton.module.css +70 -0
- package/build/esm/base-components/checkbox/Checkbox.module.css +1 -1
- package/build/esm/base-components/combobox/Combobox.js +124 -0
- package/build/esm/base-components/combobox/Combobox.js.map +1 -0
- package/build/esm/base-components/combobox/Combobox.module.css +177 -0
- package/build/esm/base-components/dialog/Dialog.js +52 -0
- package/build/esm/base-components/dialog/Dialog.js.map +1 -0
- package/build/esm/base-components/dialog/Dialog.module.css +101 -0
- package/build/esm/base-components/draggable-list/DraggableList.js +155 -0
- package/build/esm/base-components/draggable-list/DraggableList.js.map +1 -0
- package/build/esm/base-components/draggable-list/DraggableList.module.css +108 -0
- package/build/esm/base-components/search-bar/SearchBar.js +44 -0
- package/build/esm/base-components/search-bar/SearchBar.js.map +1 -0
- package/build/esm/base-components/search-bar/SearchBar.module.css +53 -0
- package/build/esm/base-components/select/Select.js +89 -0
- package/build/esm/base-components/select/Select.js.map +1 -0
- package/build/esm/base-components/select/Select.module.css +138 -0
- package/build/esm/base-components/switch/Switch.js +33 -0
- package/build/esm/base-components/switch/Switch.js.map +1 -0
- package/build/esm/base-components/switch/Switch.module.css +91 -0
- 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/__tests__/LinkedPropertyInput.test.js +202 -0
- package/build/esm/filter-list/__tests__/LinkedPropertyInput.test.js.map +1 -0
- package/build/esm/filter-list/__tests__/dateUtils.test.js +55 -0
- package/build/esm/filter-list/__tests__/dateUtils.test.js.map +1 -0
- package/build/esm/filter-list/__tests__/filterStateToWhereClause.test.js +296 -0
- package/build/esm/filter-list/__tests__/filterStateToWhereClause.test.js.map +1 -0
- package/build/esm/filter-list/__tests__/getFilterKey.test.js +53 -0
- package/build/esm/filter-list/__tests__/getFilterKey.test.js.map +1 -0
- package/build/esm/filter-list/__tests__/testUtils.js +203 -0
- package/build/esm/filter-list/__tests__/testUtils.js.map +1 -0
- package/build/esm/filter-list/base/FilterInput.js +542 -0
- package/build/esm/filter-list/base/FilterInput.js.map +1 -0
- package/build/esm/filter-list/base/FilterList.js +77 -0
- package/build/esm/filter-list/base/FilterList.js.map +1 -0
- package/build/esm/filter-list/base/FilterList.module.css +67 -0
- package/build/esm/filter-list/base/FilterListContent.js +57 -0
- package/build/esm/filter-list/base/FilterListContent.js.map +1 -0
- package/build/esm/filter-list/base/FilterListContent.module.css +27 -0
- package/build/esm/filter-list/base/FilterListHeader.js +58 -0
- package/build/esm/filter-list/base/FilterListHeader.js.map +1 -0
- package/build/esm/filter-list/base/FilterListHeader.module.css +127 -0
- package/build/esm/filter-list/base/FilterListItem.js +75 -0
- package/build/esm/filter-list/base/FilterListItem.js.map +1 -0
- package/build/esm/filter-list/base/FilterListItem.module.css +38 -0
- package/build/esm/filter-list/base/index.js +22 -0
- package/build/esm/filter-list/base/index.js.map +1 -0
- package/build/esm/filter-list/base/inputs/CheckboxListInput.js +75 -0
- package/build/esm/filter-list/base/inputs/CheckboxListInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/CheckboxListInput.module.css +42 -0
- package/build/esm/filter-list/base/inputs/ContainsTextInput.js +85 -0
- package/build/esm/filter-list/base/inputs/ContainsTextInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/ContainsTextInput.module.css +91 -0
- package/build/esm/filter-list/base/inputs/DateRangeInput.js +37 -0
- package/build/esm/filter-list/base/inputs/DateRangeInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/LinkedPropertyInput.js +237 -0
- package/build/esm/filter-list/base/inputs/LinkedPropertyInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/LinkedPropertyInput.module.css +20 -0
- package/build/esm/filter-list/base/inputs/ListogramInput.js +98 -0
- package/build/esm/filter-list/base/inputs/ListogramInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/ListogramInput.module.css +88 -0
- package/build/esm/filter-list/base/inputs/MultiDateInput.js +82 -0
- package/build/esm/filter-list/base/inputs/MultiDateInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/MultiDateInput.module.css +54 -0
- package/build/esm/filter-list/base/inputs/MultiSelectInput.js +100 -0
- package/build/esm/filter-list/base/inputs/MultiSelectInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/MultiSelectInput.module.css +35 -0
- package/build/esm/filter-list/base/inputs/NullValueWrapper.js +76 -0
- package/build/esm/filter-list/base/inputs/NullValueWrapper.js.map +1 -0
- package/build/esm/filter-list/base/inputs/NullValueWrapper.module.css +49 -0
- package/build/esm/filter-list/base/inputs/NumberRangeInput.js +48 -0
- package/build/esm/filter-list/base/inputs/NumberRangeInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/RangeInput.js +187 -0
- package/build/esm/filter-list/base/inputs/RangeInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/RangeInput.module.css +81 -0
- package/build/esm/filter-list/base/inputs/SingleDateInput.js +61 -0
- package/build/esm/filter-list/base/inputs/SingleDateInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/SingleDateInput.module.css +63 -0
- package/build/esm/filter-list/base/inputs/SingleSelectInput.js +95 -0
- package/build/esm/filter-list/base/inputs/SingleSelectInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/SingleSelectInput.module.css +55 -0
- package/build/esm/filter-list/base/inputs/TextTagsInput.js +141 -0
- package/build/esm/filter-list/base/inputs/TextTagsInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/TextTagsInput.module.css +25 -0
- package/build/esm/filter-list/base/inputs/TimelineInput.js +74 -0
- package/build/esm/filter-list/base/inputs/TimelineInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/TimelineInput.module.css +73 -0
- package/build/esm/filter-list/base/inputs/ToggleInput.js +43 -0
- package/build/esm/filter-list/base/inputs/ToggleInput.js.map +1 -0
- package/build/esm/filter-list/base/inputs/ToggleInput.module.css +34 -0
- package/build/esm/filter-list/base/inputs/createHistogramBuckets.js +53 -0
- package/build/esm/filter-list/base/inputs/createHistogramBuckets.js.map +1 -0
- package/build/esm/filter-list/base/inputs/dateUtils.js +57 -0
- package/build/esm/filter-list/base/inputs/dateUtils.js.map +1 -0
- package/build/esm/filter-list/base/inputs/index.js +25 -0
- package/build/esm/filter-list/base/inputs/index.js.map +1 -0
- package/build/esm/filter-list/base/inputs/shared.module.css +79 -0
- package/build/esm/filter-list/hooks/__tests__/useFilterListState.test.js +128 -0
- package/build/esm/filter-list/hooks/__tests__/useFilterListState.test.js.map +1 -0
- package/build/esm/filter-list/hooks/useFilterListState.js +119 -0
- package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -0
- package/build/esm/filter-list/hooks/usePropertyAggregation.js +92 -0
- package/build/esm/filter-list/hooks/usePropertyAggregation.js.map +1 -0
- package/build/esm/filter-list/types/AddFilterMenuTypes.js +2 -0
- package/build/esm/filter-list/types/AddFilterMenuTypes.js.map +1 -0
- package/build/esm/filter-list/types/CustomRendererTypes.js +2 -0
- package/build/esm/filter-list/types/CustomRendererTypes.js.map +1 -0
- package/build/esm/filter-list/types/FilterPanelTypes.js +2 -0
- package/build/esm/filter-list/types/FilterPanelTypes.js.map +1 -0
- package/build/esm/filter-list/types/KeywordSearchTypes.js +2 -0
- package/build/esm/filter-list/types/KeywordSearchTypes.js.map +1 -0
- package/build/esm/filter-list/types/LinkedFilterTypes.js +2 -0
- package/build/esm/filter-list/types/LinkedFilterTypes.js.map +1 -0
- package/build/esm/filter-list/types/index.js +22 -0
- package/build/esm/filter-list/types/index.js.map +1 -0
- package/build/esm/filter-list/utils/aggregationHelpers.js +44 -0
- package/build/esm/filter-list/utils/aggregationHelpers.js.map +1 -0
- package/build/esm/filter-list/utils/assertUnreachable.js +25 -0
- package/build/esm/filter-list/utils/assertUnreachable.js.map +1 -0
- package/build/esm/filter-list/utils/coerceFilterValue.js +33 -0
- package/build/esm/filter-list/utils/coerceFilterValue.js.map +1 -0
- package/build/esm/filter-list/utils/filterStateToWhereClause.js +337 -0
- package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -0
- package/build/esm/filter-list/utils/filterValues.js +55 -0
- package/build/esm/filter-list/utils/filterValues.js.map +1 -0
- package/build/esm/filter-list/utils/getFilterKey.js +34 -0
- package/build/esm/filter-list/utils/getFilterKey.js.map +1 -0
- package/build/esm/object-table/ColumnConfigDialog.js +259 -0
- package/build/esm/object-table/ColumnConfigDialog.js.map +1 -0
- package/build/esm/object-table/ColumnConfigDialog.module.css +247 -0
- package/build/esm/object-table/DefaultCellRenderer.js +43 -0
- package/build/esm/object-table/DefaultCellRenderer.js.map +1 -0
- package/build/esm/object-table/EditableCell.js +91 -0
- package/build/esm/object-table/EditableCell.js.map +1 -0
- package/build/esm/object-table/EditableCell.module.css +3 -0
- package/build/esm/object-table/LoadingStateTable.js +4 -4
- package/build/esm/object-table/LoadingStateTable.js.map +1 -1
- package/build/esm/object-table/MultiColumnSortDialog.js +178 -0
- package/build/esm/object-table/MultiColumnSortDialog.js.map +1 -0
- package/build/esm/object-table/MultiColumnSortDialog.module.css +195 -0
- package/build/esm/object-table/NonIdealState.module.css +2 -3
- package/build/esm/object-table/ObjectTable.js +74 -15
- package/build/esm/object-table/ObjectTable.js.map +1 -1
- package/build/esm/object-table/ObjectTableApi.js.map +1 -1
- package/build/esm/object-table/SelectionCells.js +15 -4
- package/build/esm/object-table/SelectionCells.js.map +1 -1
- package/build/esm/object-table/SortableItemsList.js +35 -0
- package/build/esm/object-table/SortableItemsList.js.map +1 -0
- package/build/esm/object-table/Table.js +25 -8
- package/build/esm/object-table/Table.js.map +1 -1
- package/build/esm/object-table/Table.module.css +26 -3
- package/build/esm/object-table/TableBody.module.css +2 -0
- package/build/esm/object-table/TableCell.module.css +22 -1
- package/build/esm/object-table/TableHeader.js +93 -6
- package/build/esm/object-table/TableHeader.js.map +1 -1
- package/build/esm/object-table/TableHeader.module.css +9 -2
- package/build/esm/object-table/TableHeaderWithPopover.js +53 -22
- package/build/esm/object-table/TableHeaderWithPopover.js.map +1 -1
- package/build/esm/object-table/TableHeaderWithPopover.module.css +56 -25
- package/build/esm/object-table/TableRow.module.css +2 -0
- package/build/esm/object-table/__tests__/useEditableTable.test.js +197 -0
- package/build/esm/object-table/__tests__/useEditableTable.test.js.map +1 -0
- package/build/esm/object-table/hooks/__tests__/useColumnDefs.test.js +14 -2
- package/build/esm/object-table/hooks/__tests__/useColumnDefs.test.js.map +1 -1
- package/build/esm/object-table/hooks/__tests__/useColumnVisibility.test.js +160 -138
- package/build/esm/object-table/hooks/__tests__/useColumnVisibility.test.js.map +1 -1
- package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js +113 -25
- package/build/esm/object-table/hooks/__tests__/useObjectTableData.test.js.map +1 -1
- package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js +48 -0
- package/build/esm/object-table/hooks/__tests__/useRowSelection.test.js.map +1 -1
- package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js +27 -82
- package/build/esm/object-table/hooks/__tests__/useSelectionColumn.test.js.map +1 -1
- package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js +290 -0
- package/build/esm/object-table/hooks/__tests__/useTableSorting.test.js.map +1 -1
- package/build/esm/object-table/hooks/useColumnDefs.js +16 -3
- package/build/esm/object-table/hooks/useColumnDefs.js.map +1 -1
- package/build/esm/object-table/hooks/useColumnResize.js +45 -0
- package/build/esm/object-table/hooks/useColumnResize.js.map +1 -0
- package/build/esm/object-table/hooks/useColumnVisibility.js +52 -20
- package/build/esm/object-table/hooks/useColumnVisibility.js.map +1 -1
- package/build/esm/object-table/hooks/useEditableTable.js +57 -0
- package/build/esm/object-table/hooks/useEditableTable.js.map +1 -0
- package/build/esm/object-table/hooks/useObjectTableData.js +42 -7
- package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -1
- package/build/esm/object-table/hooks/useRowSelection.js +31 -10
- package/build/esm/object-table/hooks/useRowSelection.js.map +1 -1
- package/build/esm/object-table/hooks/useSelectionColumn.js +15 -6
- package/build/esm/object-table/hooks/useSelectionColumn.js.map +1 -1
- package/build/esm/object-table/utils/getCellId.js +27 -0
- package/build/esm/object-table/utils/getCellId.js.map +1 -0
- package/build/esm/object-table/utils/types.js +2 -0
- package/build/esm/object-table/utils/types.js.map +1 -0
- package/build/esm/public/experimental.js +2 -0
- package/build/esm/public/experimental.js.map +1 -1
- package/build/esm/shared/ErrorBoundary.js +62 -0
- package/build/esm/shared/ErrorBoundary.js.map +1 -0
- package/build/esm/shared/ErrorBoundary.module.css +55 -0
- package/build/types/base-components/action-button/ActionButton.d.ts +5 -0
- package/build/types/base-components/action-button/ActionButton.d.ts.map +1 -0
- package/build/types/base-components/combobox/Combobox.d.ts +52 -0
- package/build/types/base-components/combobox/Combobox.d.ts.map +1 -0
- package/build/types/base-components/dialog/Dialog.d.ts +10 -0
- package/build/types/base-components/dialog/Dialog.d.ts.map +1 -0
- package/build/types/base-components/draggable-list/DraggableList.d.ts +17 -0
- package/build/types/base-components/draggable-list/DraggableList.d.ts.map +1 -0
- package/build/types/base-components/search-bar/SearchBar.d.ts +11 -0
- package/build/types/base-components/search-bar/SearchBar.d.ts.map +1 -0
- package/build/types/base-components/select/Select.d.ts +34 -0
- package/build/types/base-components/select/Select.d.ts.map +1 -0
- package/build/types/base-components/switch/Switch.d.ts +10 -0
- package/build/types/base-components/switch/Switch.d.ts.map +1 -0
- package/build/types/filter-list/FilterListApi.d.ts +62 -17
- package/build/types/filter-list/FilterListApi.d.ts.map +1 -1
- package/build/types/filter-list/FilterListItemApi.d.ts +101 -53
- package/build/types/filter-list/FilterListItemApi.d.ts.map +1 -1
- package/build/types/filter-list/__tests__/LinkedPropertyInput.test.d.ts +1 -0
- package/build/types/filter-list/__tests__/LinkedPropertyInput.test.d.ts.map +1 -0
- package/build/types/filter-list/__tests__/dateUtils.test.d.ts +1 -0
- package/build/types/filter-list/__tests__/dateUtils.test.d.ts.map +1 -0
- package/build/types/filter-list/__tests__/filterStateToWhereClause.test.d.ts +1 -0
- package/build/types/filter-list/__tests__/filterStateToWhereClause.test.d.ts.map +1 -0
- package/build/types/filter-list/__tests__/getFilterKey.test.d.ts +1 -0
- package/build/types/filter-list/__tests__/getFilterKey.test.d.ts.map +1 -0
- package/build/types/filter-list/__tests__/testUtils.d.ts +65 -0
- package/build/types/filter-list/__tests__/testUtils.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterInput.d.ts +15 -0
- package/build/types/filter-list/base/FilterInput.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterList.d.ts +4 -0
- package/build/types/filter-list/base/FilterList.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterListContent.d.ts +16 -0
- package/build/types/filter-list/base/FilterListContent.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterListHeader.d.ts +14 -0
- package/build/types/filter-list/base/FilterListHeader.d.ts.map +1 -0
- package/build/types/filter-list/base/FilterListItem.d.ts +18 -0
- package/build/types/filter-list/base/FilterListItem.d.ts.map +1 -0
- package/build/types/filter-list/base/index.d.ts +5 -0
- package/build/types/filter-list/base/index.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts +21 -0
- package/build/types/filter-list/base/inputs/CheckboxListInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/ContainsTextInput.d.ts +13 -0
- package/build/types/filter-list/base/inputs/ContainsTextInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/DateRangeInput.d.ts +22 -0
- package/build/types/filter-list/base/inputs/DateRangeInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/LinkedPropertyInput.d.ts +21 -0
- package/build/types/filter-list/base/inputs/LinkedPropertyInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/ListogramInput.d.ts +22 -0
- package/build/types/filter-list/base/inputs/ListogramInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/MultiDateInput.d.ts +12 -0
- package/build/types/filter-list/base/inputs/MultiDateInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts +24 -0
- package/build/types/filter-list/base/inputs/MultiSelectInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/NullValueWrapper.d.ts +21 -0
- package/build/types/filter-list/base/inputs/NullValueWrapper.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/NumberRangeInput.d.ts +22 -0
- package/build/types/filter-list/base/inputs/NumberRangeInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/RangeInput.d.ts +37 -0
- package/build/types/filter-list/base/inputs/RangeInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/SingleDateInput.d.ts +13 -0
- package/build/types/filter-list/base/inputs/SingleDateInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/SingleSelectInput.d.ts +24 -0
- package/build/types/filter-list/base/inputs/SingleSelectInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/TextTagsInput.d.ts +24 -0
- package/build/types/filter-list/base/inputs/TextTagsInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/TimelineInput.d.ts +11 -0
- package/build/types/filter-list/base/inputs/TimelineInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/ToggleInput.d.ts +10 -0
- package/build/types/filter-list/base/inputs/ToggleInput.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/createHistogramBuckets.d.ts +16 -0
- package/build/types/filter-list/base/inputs/createHistogramBuckets.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/dateUtils.d.ts +17 -0
- package/build/types/filter-list/base/inputs/dateUtils.d.ts.map +1 -0
- package/build/types/filter-list/base/inputs/index.d.ts +8 -0
- package/build/types/filter-list/base/inputs/index.d.ts.map +1 -0
- package/build/types/filter-list/hooks/__tests__/useFilterListState.test.d.ts +1 -0
- package/build/types/filter-list/hooks/__tests__/useFilterListState.test.d.ts.map +1 -0
- package/build/types/filter-list/hooks/useFilterListState.d.ts +11 -0
- package/build/types/filter-list/hooks/useFilterListState.d.ts.map +1 -0
- package/build/types/filter-list/hooks/usePropertyAggregation.d.ts +20 -0
- package/build/types/filter-list/hooks/usePropertyAggregation.d.ts.map +1 -0
- package/build/types/filter-list/types/AddFilterMenuTypes.d.ts +56 -0
- package/build/types/filter-list/types/AddFilterMenuTypes.d.ts.map +1 -0
- package/build/types/filter-list/types/CustomRendererTypes.d.ts +76 -0
- package/build/types/filter-list/types/CustomRendererTypes.d.ts.map +1 -0
- package/build/types/filter-list/types/FilterPanelTypes.d.ts +18 -0
- package/build/types/filter-list/types/FilterPanelTypes.d.ts.map +1 -0
- package/build/types/filter-list/types/KeywordSearchTypes.d.ts +56 -0
- package/build/types/filter-list/types/KeywordSearchTypes.d.ts.map +1 -0
- package/build/types/filter-list/types/LinkedFilterTypes.d.ts +89 -0
- package/build/types/filter-list/types/LinkedFilterTypes.d.ts.map +1 -0
- package/build/types/filter-list/types/index.d.ts +5 -0
- package/build/types/filter-list/types/index.d.ts.map +1 -0
- package/build/types/filter-list/utils/aggregationHelpers.d.ts +9 -0
- package/build/types/filter-list/utils/aggregationHelpers.d.ts.map +1 -0
- package/build/types/filter-list/utils/assertUnreachable.d.ts +6 -0
- package/build/types/filter-list/utils/assertUnreachable.d.ts.map +1 -0
- package/build/types/filter-list/utils/coerceFilterValue.d.ts +11 -0
- package/build/types/filter-list/utils/coerceFilterValue.d.ts.map +1 -0
- package/build/types/filter-list/utils/filterStateToWhereClause.d.ts +16 -0
- package/build/types/filter-list/utils/filterStateToWhereClause.d.ts.map +1 -0
- package/build/types/filter-list/utils/filterValues.d.ts +5 -0
- package/build/types/filter-list/utils/filterValues.d.ts.map +1 -0
- package/build/types/filter-list/utils/getFilterKey.d.ts +3 -0
- package/build/types/filter-list/utils/getFilterKey.d.ts.map +1 -0
- package/build/types/object-table/ColumnConfigDialog.d.ts +18 -0
- package/build/types/object-table/ColumnConfigDialog.d.ts.map +1 -0
- package/build/types/object-table/DefaultCellRenderer.d.ts +3 -0
- package/build/types/object-table/DefaultCellRenderer.d.ts.map +1 -0
- package/build/types/object-table/EditableCell.d.ts +10 -0
- package/build/types/object-table/EditableCell.d.ts.map +1 -0
- package/build/types/object-table/LoadingStateTable.d.ts.map +1 -1
- package/build/types/object-table/MultiColumnSortDialog.d.ts +15 -0
- package/build/types/object-table/MultiColumnSortDialog.d.ts.map +1 -0
- package/build/types/object-table/ObjectTable.d.ts +1 -1
- package/build/types/object-table/ObjectTable.d.ts.map +1 -1
- package/build/types/object-table/ObjectTableApi.d.ts +79 -8
- package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
- package/build/types/object-table/SortableItemsList.d.ts +13 -0
- package/build/types/object-table/SortableItemsList.d.ts.map +1 -0
- package/build/types/object-table/Table.d.ts +26 -1
- package/build/types/object-table/Table.d.ts.map +1 -1
- package/build/types/object-table/TableHeader.d.ts +3 -1
- package/build/types/object-table/TableHeader.d.ts.map +1 -1
- package/build/types/object-table/TableHeaderWithPopover.d.ts +30 -6
- package/build/types/object-table/TableHeaderWithPopover.d.ts.map +1 -1
- package/build/types/object-table/__tests__/useEditableTable.test.d.ts +1 -0
- package/build/types/object-table/__tests__/useEditableTable.test.d.ts.map +1 -0
- package/build/types/object-table/hooks/useColumnDefs.d.ts.map +1 -1
- package/build/types/object-table/hooks/useColumnResize.d.ts +10 -0
- package/build/types/object-table/hooks/useColumnResize.d.ts.map +1 -0
- package/build/types/object-table/hooks/useColumnVisibility.d.ts +18 -7
- package/build/types/object-table/hooks/useColumnVisibility.d.ts.map +1 -1
- package/build/types/object-table/hooks/useEditableTable.d.ts +22 -0
- package/build/types/object-table/hooks/useEditableTable.d.ts.map +1 -0
- package/build/types/object-table/hooks/useObjectTableData.d.ts +6 -5
- package/build/types/object-table/hooks/useObjectTableData.d.ts.map +1 -1
- package/build/types/object-table/hooks/useRowSelection.d.ts +5 -4
- package/build/types/object-table/hooks/useRowSelection.d.ts.map +1 -1
- package/build/types/object-table/utils/getCellId.d.ts +3 -0
- package/build/types/object-table/utils/getCellId.d.ts.map +1 -0
- package/build/types/object-table/utils/types.d.ts +14 -0
- package/build/types/object-table/utils/types.d.ts.map +1 -0
- package/build/types/public/experimental.d.ts +6 -2
- package/build/types/public/experimental.d.ts.map +1 -1
- package/build/types/shared/ErrorBoundary.d.ts +19 -0
- package/build/types/shared/ErrorBoundary.d.ts.map +1 -0
- package/package.json +17 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkedPropertyInput.js","names":["classnames","React","memo","useCallback","useMemo","assertUnreachable","coerceToString","coerceToStringArray","CheckboxListInput","ContainsTextInput","DateRangeInput","styles","ListogramInput","MultiDateInput","MultiSelectInput","NumberRangeInput","SingleDateInput","SingleSelectInput","TextTagsInput","TimelineInput","ToggleInput","LinkedPropertyInputInner","objectSet","definition","filterState","onFilterStateChanged","className","style","linkedObjectSet","pivotTo","linkName","linkedObjectType","$objectSetInternals","def","linkedPropertyKey","innerState","type","linkedFilterState","undefined","isExcluding","includeNull","wrappedOnChange","innerFilterState","onSelectChange","selectedValues","onSingleSelectChange","selectedValue","onContainsTextChange","value","onToggleChange","enabled","onNumberRangeChange","minValue","maxValue","onDateRangeChange","onExactMatchChange","values","onDateSelectChange","date","onMultiDateChange","dates","onTimelineChange","start","end","startDate","endDate","selectStringValues","singleSelectValue","exactMatchValues","selectedDates","filter","v","Date","selectedDate","content","linkedFilterComponent","createElement","objectType","propertyKey","onChange","placeholder","String","numberRange","dateRange","tags","showClearButton","showClearAll","timeline","linkedProperty","LinkedPropertyInput"],"sources":["LinkedPropertyInput.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 type {\n LinkNames,\n ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n} from \"@osdk/api\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport type { FilterState } from \"../../FilterListItemApi.js\";\nimport type { LinkedPropertyFilterDefinition } from \"../../types/LinkedFilterTypes.js\";\nimport { assertUnreachable } from \"../../utils/assertUnreachable.js\";\nimport {\n coerceToString,\n coerceToStringArray,\n} from \"../../utils/coerceFilterValue.js\";\nimport { CheckboxListInput } from \"./CheckboxListInput.js\";\nimport { ContainsTextInput } from \"./ContainsTextInput.js\";\nimport { DateRangeInput } from \"./DateRangeInput.js\";\nimport styles from \"./LinkedPropertyInput.module.css\";\nimport { ListogramInput } from \"./ListogramInput.js\";\nimport { MultiDateInput } from \"./MultiDateInput.js\";\nimport { MultiSelectInput } from \"./MultiSelectInput.js\";\nimport { NumberRangeInput } from \"./NumberRangeInput.js\";\nimport { SingleDateInput } from \"./SingleDateInput.js\";\nimport { SingleSelectInput } from \"./SingleSelectInput.js\";\nimport { TextTagsInput } from \"./TextTagsInput.js\";\nimport { TimelineInput } from \"./TimelineInput.js\";\nimport { ToggleInput } from \"./ToggleInput.js\";\n\ninterface LinkedPropertyInputProps<\n Q extends ObjectTypeDefinition,\n L extends LinkNames<Q>,\n> {\n objectSet: ObjectSet<Q>;\n definition: LinkedPropertyFilterDefinition<\n Q,\n L,\n ObjectTypeDefinition,\n PropertyKeys<ObjectTypeDefinition>\n >;\n filterState: FilterState | undefined;\n onFilterStateChanged: (state: FilterState) => void;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction LinkedPropertyInputInner<\n Q extends ObjectTypeDefinition,\n L extends LinkNames<Q>,\n>({\n objectSet,\n definition,\n filterState,\n onFilterStateChanged,\n className,\n style,\n}: LinkedPropertyInputProps<Q, L>): React.ReactElement {\n const linkedObjectSet = useMemo(\n () => objectSet.pivotTo(definition.linkName),\n [objectSet, definition.linkName],\n );\n\n const linkedObjectType = linkedObjectSet.$objectSetInternals.def;\n\n const linkedPropertyKey = definition.linkedPropertyKey as PropertyKeys<\n typeof linkedObjectType\n >;\n\n const innerState = filterState?.type === \"linkedProperty\"\n ? filterState.linkedFilterState\n : undefined;\n\n const isExcluding = innerState?.isExcluding ?? false;\n const includeNull = innerState?.includeNull;\n\n const wrappedOnChange = useCallback(\n (innerFilterState: FilterState) => {\n onFilterStateChanged({\n type: \"linkedProperty\",\n linkedFilterState: innerFilterState,\n });\n },\n [onFilterStateChanged],\n );\n\n const onSelectChange = useCallback(\n (selectedValues: string[]) => {\n wrappedOnChange({\n type: \"SELECT\",\n selectedValues,\n isExcluding,\n });\n },\n [wrappedOnChange, isExcluding],\n );\n\n const onSingleSelectChange = useCallback(\n (selectedValue: string | undefined) => {\n wrappedOnChange({\n type: \"SELECT\",\n selectedValues: selectedValue !== undefined ? [selectedValue] : [],\n isExcluding,\n });\n },\n [wrappedOnChange, isExcluding],\n );\n\n const onContainsTextChange = useCallback(\n (value: string | undefined) => {\n wrappedOnChange({ type: \"CONTAINS_TEXT\", value });\n },\n [wrappedOnChange],\n );\n\n const onToggleChange = useCallback(\n (enabled: boolean) => {\n wrappedOnChange({ type: \"TOGGLE\", enabled });\n },\n [wrappedOnChange],\n );\n\n const onNumberRangeChange = useCallback(\n (minValue: number | undefined, maxValue: number | undefined) => {\n wrappedOnChange({\n type: \"NUMBER_RANGE\",\n minValue,\n maxValue,\n includeNull,\n });\n },\n [wrappedOnChange, includeNull],\n );\n\n const onDateRangeChange = useCallback(\n (minValue: Date | undefined, maxValue: Date | undefined) => {\n wrappedOnChange({\n type: \"DATE_RANGE\",\n minValue,\n maxValue,\n includeNull,\n });\n },\n [wrappedOnChange, includeNull],\n );\n\n const onExactMatchChange = useCallback(\n (values: string[]) => {\n wrappedOnChange({\n type: \"EXACT_MATCH\",\n values,\n isExcluding,\n });\n },\n [wrappedOnChange, isExcluding],\n );\n\n const onDateSelectChange = useCallback(\n (date: Date | undefined) => {\n wrappedOnChange({\n type: \"SELECT\",\n selectedValues: date !== undefined ? [date] : [],\n isExcluding,\n });\n },\n [wrappedOnChange, isExcluding],\n );\n\n const onMultiDateChange = useCallback(\n (dates: Date[]) => {\n wrappedOnChange({\n type: \"SELECT\",\n selectedValues: dates,\n });\n },\n [wrappedOnChange],\n );\n\n const onTimelineChange = useCallback(\n (start: Date | undefined, end: Date | undefined) => {\n wrappedOnChange({\n type: \"TIMELINE\",\n startDate: start,\n endDate: end,\n isExcluding,\n });\n },\n [wrappedOnChange, isExcluding],\n );\n\n const selectStringValues = useMemo(\n () =>\n innerState?.type === \"SELECT\"\n ? coerceToStringArray(innerState.selectedValues)\n : [],\n [innerState],\n );\n\n const singleSelectValue = useMemo(\n () =>\n innerState?.type === \"SELECT\"\n ? coerceToString(innerState.selectedValues[0])\n : undefined,\n [innerState],\n );\n\n const exactMatchValues = useMemo(\n () =>\n innerState?.type === \"EXACT_MATCH\"\n ? coerceToStringArray(innerState.values)\n : [],\n [innerState],\n );\n\n const selectedDates = useMemo(\n () =>\n innerState?.type === \"SELECT\"\n ? innerState.selectedValues.filter(\n (v): v is Date => v instanceof Date,\n )\n : [],\n [innerState],\n );\n\n const selectedDate = useMemo(\n () =>\n innerState?.type === \"SELECT\"\n && innerState.selectedValues[0] instanceof Date\n ? innerState.selectedValues[0]\n : undefined,\n [innerState],\n );\n\n const content = (() => {\n switch (definition.linkedFilterComponent) {\n case \"CHECKBOX_LIST\":\n return (\n <CheckboxListInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n selectedValues={selectStringValues}\n onChange={onSelectChange}\n />\n );\n\n case \"MULTI_SELECT\":\n return (\n <MultiSelectInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n selectedValues={selectStringValues}\n onChange={onSelectChange}\n />\n );\n\n case \"SINGLE_SELECT\":\n return (\n <SingleSelectInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n selectedValue={singleSelectValue}\n onChange={onSingleSelectChange}\n />\n );\n\n case \"CONTAINS_TEXT\":\n return (\n <ContainsTextInput\n value={innerState?.type === \"CONTAINS_TEXT\"\n ? innerState.value\n : undefined}\n onChange={onContainsTextChange}\n placeholder={`Search ${String(definition.linkedPropertyKey)}...`}\n />\n );\n\n case \"TOGGLE\":\n return (\n <ToggleInput\n enabled={innerState?.type === \"TOGGLE\"\n ? innerState.enabled\n : false}\n onChange={onToggleChange}\n />\n );\n\n case \"NUMBER_RANGE\": {\n const numberRange = innerState?.type === \"NUMBER_RANGE\"\n ? innerState\n : undefined;\n return (\n <NumberRangeInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n minValue={numberRange?.minValue}\n maxValue={numberRange?.maxValue}\n onChange={onNumberRangeChange}\n />\n );\n }\n\n case \"DATE_RANGE\": {\n const dateRange = innerState?.type === \"DATE_RANGE\"\n ? innerState\n : undefined;\n return (\n <DateRangeInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n minValue={dateRange?.minValue}\n maxValue={dateRange?.maxValue}\n onChange={onDateRangeChange}\n />\n );\n }\n\n case \"LISTOGRAM\":\n return (\n <ListogramInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n selectedValues={exactMatchValues}\n onChange={onExactMatchChange}\n />\n );\n\n case \"TEXT_TAGS\":\n return (\n <TextTagsInput\n objectType={linkedObjectType}\n objectSet={linkedObjectSet}\n propertyKey={linkedPropertyKey}\n tags={exactMatchValues}\n onChange={onExactMatchChange}\n />\n );\n\n case \"SINGLE_DATE\":\n return (\n <SingleDateInput\n selectedDate={selectedDate}\n onChange={onDateSelectChange}\n showClearButton={true}\n />\n );\n\n case \"MULTI_DATE\":\n return (\n <MultiDateInput\n selectedDates={selectedDates}\n onChange={onMultiDateChange}\n showClearAll={true}\n />\n );\n\n case \"TIMELINE\": {\n const timeline = innerState?.type === \"TIMELINE\"\n ? innerState\n : undefined;\n return (\n <TimelineInput\n startDate={timeline?.startDate}\n endDate={timeline?.endDate}\n onChange={onTimelineChange}\n />\n );\n }\n\n default:\n return assertUnreachable(definition.linkedFilterComponent);\n }\n })();\n\n return (\n <div className={classnames(styles.linkedProperty, className)} style={style}>\n {content}\n </div>\n );\n}\n\nexport const LinkedPropertyInput = memo(\n LinkedPropertyInputInner,\n) as typeof LinkedPropertyInputInner;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
.linkedProperty {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
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 { Button } from "@base-ui/react/button";
|
|
18
|
+
import classnames from "classnames";
|
|
19
|
+
import React, { memo, useCallback, useMemo, useState } from "react";
|
|
20
|
+
import { usePropertyAggregation } from "../../hooks/usePropertyAggregation.js";
|
|
21
|
+
import styles from "./ListogramInput.module.css";
|
|
22
|
+
import sharedStyles from "./shared.module.css";
|
|
23
|
+
function ListogramInputInner({
|
|
24
|
+
objectType,
|
|
25
|
+
propertyKey,
|
|
26
|
+
selectedValues,
|
|
27
|
+
onChange,
|
|
28
|
+
whereClause,
|
|
29
|
+
className,
|
|
30
|
+
style,
|
|
31
|
+
maxVisibleItems
|
|
32
|
+
}) {
|
|
33
|
+
const [isExpanded, setIsExpanded] = useState(false);
|
|
34
|
+
const {
|
|
35
|
+
data: values,
|
|
36
|
+
maxCount,
|
|
37
|
+
isLoading,
|
|
38
|
+
error
|
|
39
|
+
} = usePropertyAggregation(objectType, propertyKey, {
|
|
40
|
+
where: whereClause
|
|
41
|
+
});
|
|
42
|
+
const selectedSet = useMemo(() => new Set(selectedValues), [selectedValues]);
|
|
43
|
+
const toggleValue = useCallback(value => {
|
|
44
|
+
if (selectedSet.has(value)) {
|
|
45
|
+
onChange(selectedValues.filter(v => v !== value));
|
|
46
|
+
} else {
|
|
47
|
+
onChange([...selectedValues, value]);
|
|
48
|
+
}
|
|
49
|
+
}, [selectedValues, selectedSet, onChange]);
|
|
50
|
+
const displayValues = useMemo(() => {
|
|
51
|
+
if (isExpanded || !maxVisibleItems) return values;
|
|
52
|
+
return values.slice(0, maxVisibleItems);
|
|
53
|
+
}, [values, maxVisibleItems, isExpanded]);
|
|
54
|
+
const hasMore = maxVisibleItems != null && values.length > maxVisibleItems;
|
|
55
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
56
|
+
className: classnames(styles.listogram, className),
|
|
57
|
+
style: style,
|
|
58
|
+
"data-loading": isLoading
|
|
59
|
+
}, isLoading && /*#__PURE__*/React.createElement("div", {
|
|
60
|
+
className: sharedStyles.loadingMessage
|
|
61
|
+
}, "Loading values..."), error && /*#__PURE__*/React.createElement("div", {
|
|
62
|
+
className: sharedStyles.errorMessage
|
|
63
|
+
}, "Error loading values: ", error.message), !isLoading && !error && values.length === 0 && /*#__PURE__*/React.createElement("div", {
|
|
64
|
+
className: sharedStyles.emptyMessage
|
|
65
|
+
}, "No values available"), (values.length > 0 || isLoading) && /*#__PURE__*/React.createElement("div", {
|
|
66
|
+
className: styles.container
|
|
67
|
+
}, displayValues.map(({
|
|
68
|
+
value,
|
|
69
|
+
count
|
|
70
|
+
}) => {
|
|
71
|
+
const isSelected = selectedSet.has(value);
|
|
72
|
+
const percentage = maxCount > 0 ? count / maxCount * 100 : 0;
|
|
73
|
+
return /*#__PURE__*/React.createElement(Button, {
|
|
74
|
+
key: value,
|
|
75
|
+
type: "button",
|
|
76
|
+
className: styles.row,
|
|
77
|
+
onClick: () => toggleValue(value),
|
|
78
|
+
"aria-pressed": isSelected
|
|
79
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
80
|
+
className: styles.label
|
|
81
|
+
}, value), /*#__PURE__*/React.createElement("span", {
|
|
82
|
+
className: styles.bar
|
|
83
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
84
|
+
className: styles.barFill,
|
|
85
|
+
style: {
|
|
86
|
+
width: `${percentage}%`
|
|
87
|
+
}
|
|
88
|
+
})), /*#__PURE__*/React.createElement("span", {
|
|
89
|
+
className: styles.count
|
|
90
|
+
}, count.toLocaleString()));
|
|
91
|
+
}), hasMore && !isExpanded && /*#__PURE__*/React.createElement(Button, {
|
|
92
|
+
type: "button",
|
|
93
|
+
className: styles.row,
|
|
94
|
+
onClick: () => setIsExpanded(true)
|
|
95
|
+
}, "View all (", values.length, ")")));
|
|
96
|
+
}
|
|
97
|
+
export const ListogramInput = /*#__PURE__*/memo(ListogramInputInner);
|
|
98
|
+
//# sourceMappingURL=ListogramInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListogramInput.js","names":["Button","classnames","React","memo","useCallback","useMemo","useState","usePropertyAggregation","styles","sharedStyles","ListogramInputInner","objectType","propertyKey","selectedValues","onChange","whereClause","className","style","maxVisibleItems","isExpanded","setIsExpanded","data","values","maxCount","isLoading","error","where","selectedSet","Set","toggleValue","value","has","filter","v","displayValues","slice","hasMore","length","createElement","listogram","loadingMessage","errorMessage","message","emptyMessage","container","map","count","isSelected","percentage","key","type","row","onClick","label","bar","barFill","width","toLocaleString","ListogramInput"],"sources":["ListogramInput.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 ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback, useMemo, useState } from \"react\";\nimport { usePropertyAggregation } from \"../../hooks/usePropertyAggregation.js\";\nimport styles from \"./ListogramInput.module.css\";\nimport sharedStyles from \"./shared.module.css\";\n\ninterface ListogramInputProps<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n> {\n objectType: Q;\n propertyKey: K;\n selectedValues: string[];\n onChange: (values: string[]) => void;\n objectSet?: ObjectSet<Q>;\n whereClause?: WhereClause<Q>;\n className?: string;\n style?: React.CSSProperties;\n maxVisibleItems?: number;\n}\n\nfunction ListogramInputInner<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n>({\n objectType,\n propertyKey,\n selectedValues,\n onChange,\n whereClause,\n className,\n style,\n maxVisibleItems,\n}: ListogramInputProps<Q, K>): React.ReactElement {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const { data: values, maxCount, isLoading, error } = usePropertyAggregation(\n objectType,\n propertyKey,\n { where: whereClause },\n );\n\n const selectedSet = useMemo(() => new Set(selectedValues), [selectedValues]);\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 const displayValues = useMemo(() => {\n if (isExpanded || !maxVisibleItems) return values;\n return values.slice(0, maxVisibleItems);\n }, [values, maxVisibleItems, isExpanded]);\n\n const hasMore = maxVisibleItems != null && values.length > maxVisibleItems;\n\n return (\n <div\n className={classnames(styles.listogram, className)}\n style={style}\n data-loading={isLoading}\n >\n {isLoading && (\n <div className={sharedStyles.loadingMessage}>\n Loading values...\n </div>\n )}\n\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading values: {error.message}\n </div>\n )}\n\n {!isLoading && !error && values.length === 0 && (\n <div className={sharedStyles.emptyMessage}>\n No values available\n </div>\n )}\n\n {(values.length > 0 || isLoading) && (\n <div className={styles.container}>\n {displayValues.map(({ value, count }) => {\n const isSelected = selectedSet.has(value);\n const percentage = maxCount > 0 ? (count / maxCount) * 100 : 0;\n\n return (\n <Button\n key={value}\n type=\"button\"\n className={styles.row}\n onClick={() => toggleValue(value)}\n aria-pressed={isSelected}\n >\n <span className={styles.label}>{value}</span>\n <span className={styles.bar}>\n <span\n className={styles.barFill}\n style={{ width: `${percentage}%` }}\n />\n </span>\n <span className={styles.count}>\n {count.toLocaleString()}\n </span>\n </Button>\n );\n })}\n\n {hasMore && !isExpanded && (\n <Button\n type=\"button\"\n className={styles.row}\n onClick={() => setIsExpanded(true)}\n >\n View all ({values.length})\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport const ListogramInput = memo(\n ListogramInputInner,\n) as typeof ListogramInputInner;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,88 @@
|
|
|
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
|
+
.listogram {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.container {
|
|
23
|
+
display: flex;
|
|
24
|
+
flex-direction: column;
|
|
25
|
+
gap: var(--osdk-filter-listogram-gap, calc(var(--osdk-surface-spacing) * 1));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.row {
|
|
29
|
+
display: flex;
|
|
30
|
+
align-items: center;
|
|
31
|
+
gap: var(--osdk-filter-listogram-row-gap, calc(var(--osdk-surface-spacing) * 2));
|
|
32
|
+
padding: var(--osdk-filter-listogram-row-padding, calc(var(--osdk-surface-spacing) * 1));
|
|
33
|
+
border: none;
|
|
34
|
+
background: transparent;
|
|
35
|
+
cursor: pointer;
|
|
36
|
+
border-radius: var(--osdk-surface-border-radius);
|
|
37
|
+
text-align: left;
|
|
38
|
+
width: 100%;
|
|
39
|
+
transition: background-color var(--osdk-emphasis-transition-duration) var(--osdk-emphasis-ease-default);
|
|
40
|
+
|
|
41
|
+
&:hover {
|
|
42
|
+
background: var(--osdk-surface-background-color-default-hover);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
&:focus-visible {
|
|
46
|
+
outline: var(--osdk-emphasis-focus-width) solid var(--osdk-emphasis-focus-color);
|
|
47
|
+
outline-offset: var(--osdk-emphasis-focus-offset);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.row[aria-pressed="true"] {
|
|
52
|
+
background: var(--osdk-surface-background-color-default-active);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.label {
|
|
56
|
+
flex: 1;
|
|
57
|
+
font-size: var(--osdk-typography-size-body-medium);
|
|
58
|
+
color: var(--osdk-typography-color-default-rest);
|
|
59
|
+
overflow: hidden;
|
|
60
|
+
text-overflow: ellipsis;
|
|
61
|
+
white-space: nowrap;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.bar {
|
|
65
|
+
flex: 2;
|
|
66
|
+
height: var(--osdk-filter-listogram-bar-height, 8px);
|
|
67
|
+
background: var(--osdk-custom-color-gray-2);
|
|
68
|
+
border-radius: var(--osdk-surface-border-radius);
|
|
69
|
+
overflow: hidden;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.barFill {
|
|
73
|
+
height: 100%;
|
|
74
|
+
background: var(--osdk-filter-listogram-bar-color);
|
|
75
|
+
transition: width var(--osdk-emphasis-transition-duration) var(--osdk-emphasis-ease-default);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.row[aria-pressed="true"] .barFill {
|
|
79
|
+
background: var(--osdk-filter-listogram-selected-color);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.count {
|
|
83
|
+
font-size: var(--osdk-typography-size-body-small);
|
|
84
|
+
font-variant-numeric: tabular-nums;
|
|
85
|
+
color: var(--osdk-typography-color-muted);
|
|
86
|
+
min-width: 3ch;
|
|
87
|
+
text-align: right;
|
|
88
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
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 { Button } from "@base-ui/react/button";
|
|
18
|
+
import { Input } from "@base-ui/react/input";
|
|
19
|
+
import classnames from "classnames";
|
|
20
|
+
import React, { memo, useCallback } from "react";
|
|
21
|
+
import { formatDateForDisplay, formatDateForInput, parseDateFromInput } from "./dateUtils.js";
|
|
22
|
+
import styles from "./MultiDateInput.module.css";
|
|
23
|
+
import sharedStyles from "./shared.module.css";
|
|
24
|
+
function MultiDateInputInner({
|
|
25
|
+
selectedDates,
|
|
26
|
+
onChange,
|
|
27
|
+
className,
|
|
28
|
+
style,
|
|
29
|
+
minDate,
|
|
30
|
+
maxDate,
|
|
31
|
+
showClearAll = true
|
|
32
|
+
}) {
|
|
33
|
+
const addDate = useCallback(date => {
|
|
34
|
+
const dateStr = formatDateForInput(date);
|
|
35
|
+
const exists = selectedDates.some(d => formatDateForInput(d) === dateStr);
|
|
36
|
+
if (!exists) {
|
|
37
|
+
onChange([...selectedDates, date].sort((a, b) => a.getTime() - b.getTime()));
|
|
38
|
+
}
|
|
39
|
+
}, [selectedDates, onChange]);
|
|
40
|
+
const removeDate = useCallback(date => {
|
|
41
|
+
const dateStr = formatDateForInput(date);
|
|
42
|
+
onChange(selectedDates.filter(d => formatDateForInput(d) !== dateStr));
|
|
43
|
+
}, [selectedDates, onChange]);
|
|
44
|
+
const clearAll = useCallback(() => {
|
|
45
|
+
onChange([]);
|
|
46
|
+
}, [onChange]);
|
|
47
|
+
const handleDateChange = useCallback(e => {
|
|
48
|
+
const date = parseDateFromInput(e.target.value);
|
|
49
|
+
if (date) {
|
|
50
|
+
addDate(date);
|
|
51
|
+
e.target.value = "";
|
|
52
|
+
}
|
|
53
|
+
}, [addDate]);
|
|
54
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
55
|
+
className: classnames(styles.multiDate, className),
|
|
56
|
+
style: style
|
|
57
|
+
}, selectedDates.length > 0 && /*#__PURE__*/React.createElement("div", {
|
|
58
|
+
className: sharedStyles.tagContainer
|
|
59
|
+
}, selectedDates.map(date => /*#__PURE__*/React.createElement("span", {
|
|
60
|
+
key: date.toISOString(),
|
|
61
|
+
className: sharedStyles.tag
|
|
62
|
+
}, formatDateForDisplay(date), /*#__PURE__*/React.createElement(Button, {
|
|
63
|
+
className: sharedStyles.tagRemove,
|
|
64
|
+
onClick: () => removeDate(date),
|
|
65
|
+
"aria-label": `Remove ${formatDateForDisplay(date)}`
|
|
66
|
+
}, "\xD7"))), showClearAll && selectedDates.length > 1 && /*#__PURE__*/React.createElement(Button, {
|
|
67
|
+
className: styles.clearAll,
|
|
68
|
+
onClick: clearAll,
|
|
69
|
+
"aria-label": "Clear all dates"
|
|
70
|
+
}, "Clear all")), /*#__PURE__*/React.createElement("div", {
|
|
71
|
+
className: styles.calendarContainer
|
|
72
|
+
}, /*#__PURE__*/React.createElement(Input, {
|
|
73
|
+
type: "date",
|
|
74
|
+
className: styles.input,
|
|
75
|
+
onChange: handleDateChange,
|
|
76
|
+
min: minDate ? formatDateForInput(minDate) : undefined,
|
|
77
|
+
max: maxDate ? formatDateForInput(maxDate) : undefined,
|
|
78
|
+
"aria-label": "Add date"
|
|
79
|
+
})));
|
|
80
|
+
}
|
|
81
|
+
export const MultiDateInput = /*#__PURE__*/memo(MultiDateInputInner);
|
|
82
|
+
//# sourceMappingURL=MultiDateInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiDateInput.js","names":["Button","Input","classnames","React","memo","useCallback","formatDateForDisplay","formatDateForInput","parseDateFromInput","styles","sharedStyles","MultiDateInputInner","selectedDates","onChange","className","style","minDate","maxDate","showClearAll","addDate","date","dateStr","exists","some","d","sort","a","b","getTime","removeDate","filter","clearAll","handleDateChange","e","target","value","createElement","multiDate","length","tagContainer","map","key","toISOString","tag","tagRemove","onClick","calendarContainer","type","input","min","undefined","max","MultiDateInput"],"sources":["MultiDateInput.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 classnames from \"classnames\";\nimport React, { memo, useCallback } from \"react\";\nimport {\n formatDateForDisplay,\n formatDateForInput,\n parseDateFromInput,\n} from \"./dateUtils.js\";\nimport styles from \"./MultiDateInput.module.css\";\nimport sharedStyles from \"./shared.module.css\";\n\ninterface MultiDateInputProps {\n selectedDates: Date[];\n onChange: (dates: Date[]) => void;\n className?: string;\n style?: React.CSSProperties;\n minDate?: Date;\n maxDate?: Date;\n showClearAll?: boolean;\n}\n\nfunction MultiDateInputInner({\n selectedDates,\n onChange,\n className,\n style,\n minDate,\n maxDate,\n showClearAll = true,\n}: MultiDateInputProps): React.ReactElement {\n const addDate = useCallback(\n (date: Date) => {\n const dateStr = formatDateForInput(date);\n const exists = selectedDates.some(\n (d) => formatDateForInput(d) === dateStr,\n );\n if (!exists) {\n onChange(\n [...selectedDates, date].sort((a, b) => a.getTime() - b.getTime()),\n );\n }\n },\n [selectedDates, onChange],\n );\n\n const removeDate = useCallback(\n (date: Date) => {\n const dateStr = formatDateForInput(date);\n onChange(\n selectedDates.filter((d) => formatDateForInput(d) !== dateStr),\n );\n },\n [selectedDates, onChange],\n );\n\n const clearAll = useCallback(() => {\n onChange([]);\n }, [onChange]);\n\n const handleDateChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const date = parseDateFromInput(e.target.value);\n if (date) {\n addDate(date);\n e.target.value = \"\";\n }\n },\n [addDate],\n );\n\n return (\n <div className={classnames(styles.multiDate, className)} style={style}>\n {selectedDates.length > 0 && (\n <div className={sharedStyles.tagContainer}>\n {selectedDates.map((date) => (\n <span key={date.toISOString()} className={sharedStyles.tag}>\n {formatDateForDisplay(date)}\n <Button\n className={sharedStyles.tagRemove}\n onClick={() =>\n removeDate(date)}\n aria-label={`Remove ${formatDateForDisplay(date)}`}\n >\n ×\n </Button>\n </span>\n ))}\n {showClearAll && selectedDates.length > 1 && (\n <Button\n className={styles.clearAll}\n onClick={clearAll}\n aria-label=\"Clear all dates\"\n >\n Clear all\n </Button>\n )}\n </div>\n )}\n\n <div className={styles.calendarContainer}>\n <Input\n type=\"date\"\n className={styles.input}\n onChange={handleDateChange}\n min={minDate ? formatDateForInput(minDate) : undefined}\n max={maxDate ? formatDateForInput(maxDate) : undefined}\n aria-label=\"Add date\"\n />\n </div>\n </div>\n );\n}\n\nexport const MultiDateInput: React.NamedExoticComponent<MultiDateInputProps> =\n memo(MultiDateInputInner);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
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
|
+
.multiDate {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
gap: var(--osdk-filter-multiselect-gap);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.clearAll {
|
|
24
|
+
font-size: var(--osdk-typography-size-body-small);
|
|
25
|
+
color: var(--osdk-intent-primary-rest);
|
|
26
|
+
background: transparent;
|
|
27
|
+
border: none;
|
|
28
|
+
cursor: pointer;
|
|
29
|
+
padding: calc(var(--osdk-surface-spacing) * 0.5);
|
|
30
|
+
|
|
31
|
+
&:hover {
|
|
32
|
+
text-decoration: underline;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.calendarContainer {
|
|
37
|
+
display: flex;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.input {
|
|
41
|
+
flex: 1;
|
|
42
|
+
font-size: var(--osdk-typography-size-body-medium);
|
|
43
|
+
padding: var(--osdk-filter-input-padding);
|
|
44
|
+
border: var(--osdk-filter-input-border);
|
|
45
|
+
border-radius: var(--osdk-filter-input-border-radius);
|
|
46
|
+
background: var(--osdk-filter-input-bg);
|
|
47
|
+
color: var(--osdk-filter-input-color);
|
|
48
|
+
|
|
49
|
+
&:focus {
|
|
50
|
+
border-color: var(--osdk-filter-input-focus-border);
|
|
51
|
+
outline: var(--osdk-filter-input-focus-outline-width) solid var(--osdk-filter-input-focus-outline-color);
|
|
52
|
+
outline-offset: var(--osdk-filter-input-focus-outline-offset);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
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 { Button } from "@base-ui/react/button";
|
|
18
|
+
import classnames from "classnames";
|
|
19
|
+
import React, { memo, useCallback } from "react";
|
|
20
|
+
import { Combobox } from "../../../base-components/combobox/Combobox.js";
|
|
21
|
+
import { usePropertyAggregation } from "../../hooks/usePropertyAggregation.js";
|
|
22
|
+
import styles from "./MultiSelectInput.module.css";
|
|
23
|
+
import sharedStyles from "./shared.module.css";
|
|
24
|
+
function MultiSelectInputInner({
|
|
25
|
+
objectType,
|
|
26
|
+
propertyKey,
|
|
27
|
+
selectedValues,
|
|
28
|
+
onChange,
|
|
29
|
+
whereClause,
|
|
30
|
+
className,
|
|
31
|
+
style,
|
|
32
|
+
placeholder = "Select values...",
|
|
33
|
+
maxDisplayedTags = 3,
|
|
34
|
+
showClearAll = true
|
|
35
|
+
}) {
|
|
36
|
+
const {
|
|
37
|
+
data: values,
|
|
38
|
+
isLoading,
|
|
39
|
+
error
|
|
40
|
+
} = usePropertyAggregation(objectType, propertyKey, {
|
|
41
|
+
where: whereClause
|
|
42
|
+
});
|
|
43
|
+
const handleValueChange = useCallback(newValues => {
|
|
44
|
+
onChange(newValues ?? []);
|
|
45
|
+
}, [onChange]);
|
|
46
|
+
const removeValue = useCallback(value => {
|
|
47
|
+
onChange(selectedValues.filter(v => v !== value));
|
|
48
|
+
}, [selectedValues, onChange]);
|
|
49
|
+
const clearAll = useCallback(() => {
|
|
50
|
+
onChange([]);
|
|
51
|
+
}, [onChange]);
|
|
52
|
+
const displayedTags = selectedValues.slice(0, maxDisplayedTags);
|
|
53
|
+
const remainingCount = selectedValues.length - maxDisplayedTags;
|
|
54
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
55
|
+
className: classnames(styles.multiSelect, className),
|
|
56
|
+
style: style,
|
|
57
|
+
"data-loading": isLoading
|
|
58
|
+
}, error && /*#__PURE__*/React.createElement("div", {
|
|
59
|
+
className: sharedStyles.errorMessage
|
|
60
|
+
}, "Error loading options: ", error.message), !error && values.length === 0 && /*#__PURE__*/React.createElement("div", {
|
|
61
|
+
className: sharedStyles.emptyMessage
|
|
62
|
+
}, isLoading ? "Loading options..." : "No options available"), (values.length > 0 || isLoading) && /*#__PURE__*/React.createElement(Combobox.Root, {
|
|
63
|
+
multiple: true,
|
|
64
|
+
value: selectedValues,
|
|
65
|
+
onValueChange: handleValueChange
|
|
66
|
+
}, isLoading && /*#__PURE__*/React.createElement("div", {
|
|
67
|
+
className: sharedStyles.loadingMessage
|
|
68
|
+
}, "Updating..."), selectedValues.length > 0 && /*#__PURE__*/React.createElement("div", {
|
|
69
|
+
className: sharedStyles.tagContainer
|
|
70
|
+
}, displayedTags.map(value => /*#__PURE__*/React.createElement("span", {
|
|
71
|
+
key: value,
|
|
72
|
+
className: sharedStyles.tag
|
|
73
|
+
}, value, /*#__PURE__*/React.createElement(Button, {
|
|
74
|
+
type: "button",
|
|
75
|
+
className: sharedStyles.tagRemove,
|
|
76
|
+
onClick: () => removeValue(value),
|
|
77
|
+
"aria-label": `Remove ${value}`
|
|
78
|
+
}, "\xD7"))), remainingCount > 0 && /*#__PURE__*/React.createElement("span", {
|
|
79
|
+
className: sharedStyles.tag
|
|
80
|
+
}, "+", remainingCount, " more")), /*#__PURE__*/React.createElement("div", {
|
|
81
|
+
className: styles.inputRow
|
|
82
|
+
}, /*#__PURE__*/React.createElement(Combobox.Input, {
|
|
83
|
+
placeholder: selectedValues.length > 0 ? `${selectedValues.length} selected` : placeholder,
|
|
84
|
+
"aria-label": `Search ${propertyKey} values`
|
|
85
|
+
}), showClearAll && selectedValues.length > 0 && /*#__PURE__*/React.createElement(Combobox.Clear, {
|
|
86
|
+
className: styles.clearButton,
|
|
87
|
+
onClick: clearAll,
|
|
88
|
+
"aria-label": "Clear all selections"
|
|
89
|
+
})), /*#__PURE__*/React.createElement(Combobox.Portal, null, /*#__PURE__*/React.createElement(Combobox.Positioner, null, /*#__PURE__*/React.createElement(Combobox.Popup, null, values.length === 0 ? /*#__PURE__*/React.createElement(Combobox.Empty, null, "No options available") : values.map(({
|
|
90
|
+
value,
|
|
91
|
+
count
|
|
92
|
+
}) => /*#__PURE__*/React.createElement(Combobox.Item, {
|
|
93
|
+
key: value,
|
|
94
|
+
value: value
|
|
95
|
+
}, /*#__PURE__*/React.createElement("span", null, value), /*#__PURE__*/React.createElement("span", {
|
|
96
|
+
className: styles.count
|
|
97
|
+
}, "(", count.toLocaleString(), ")"))))))));
|
|
98
|
+
}
|
|
99
|
+
export const MultiSelectInput = /*#__PURE__*/memo(MultiSelectInputInner);
|
|
100
|
+
//# sourceMappingURL=MultiSelectInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiSelectInput.js","names":["Button","classnames","React","memo","useCallback","Combobox","usePropertyAggregation","styles","sharedStyles","MultiSelectInputInner","objectType","propertyKey","selectedValues","onChange","whereClause","className","style","placeholder","maxDisplayedTags","showClearAll","data","values","isLoading","error","where","handleValueChange","newValues","removeValue","value","filter","v","clearAll","displayedTags","slice","remainingCount","length","createElement","multiSelect","errorMessage","message","emptyMessage","Root","multiple","onValueChange","loadingMessage","tagContainer","map","key","tag","type","tagRemove","onClick","inputRow","Input","Clear","clearButton","Portal","Positioner","Popup","Empty","count","Item","toLocaleString","MultiSelectInput"],"sources":["MultiSelectInput.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 ObjectSet,\n ObjectTypeDefinition,\n PropertyKeys,\n WhereClause,\n} from \"@osdk/api\";\nimport classnames from \"classnames\";\nimport React, { memo, useCallback } from \"react\";\nimport { Combobox } from \"../../../base-components/combobox/Combobox.js\";\nimport { usePropertyAggregation } from \"../../hooks/usePropertyAggregation.js\";\nimport styles from \"./MultiSelectInput.module.css\";\nimport sharedStyles from \"./shared.module.css\";\n\ninterface MultiSelectInputProps<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n> {\n objectType: Q;\n propertyKey: K;\n selectedValues: string[];\n onChange: (values: string[]) => void;\n objectSet?: ObjectSet<Q>;\n whereClause?: WhereClause<Q>;\n className?: string;\n style?: React.CSSProperties;\n placeholder?: string;\n maxDisplayedTags?: number;\n showClearAll?: boolean;\n}\n\nfunction MultiSelectInputInner<\n Q extends ObjectTypeDefinition,\n K extends PropertyKeys<Q>,\n>({\n objectType,\n propertyKey,\n selectedValues,\n onChange,\n whereClause,\n className,\n style,\n placeholder = \"Select values...\",\n maxDisplayedTags = 3,\n showClearAll = true,\n}: MultiSelectInputProps<Q, K>): React.ReactElement {\n const { data: values, isLoading, error } = usePropertyAggregation(\n objectType,\n propertyKey,\n { where: whereClause },\n );\n\n const handleValueChange = useCallback(\n (newValues: string[] | null) => {\n onChange(newValues ?? []);\n },\n [onChange],\n );\n\n const removeValue = useCallback(\n (value: string) => {\n onChange(selectedValues.filter((v) => v !== value));\n },\n [selectedValues, onChange],\n );\n\n const clearAll = useCallback(() => {\n onChange([]);\n }, [onChange]);\n\n const displayedTags = selectedValues.slice(0, maxDisplayedTags);\n const remainingCount = selectedValues.length - maxDisplayedTags;\n\n return (\n <div\n className={classnames(styles.multiSelect, className)}\n style={style}\n data-loading={isLoading}\n >\n {error && (\n <div className={sharedStyles.errorMessage}>\n Error loading options: {error.message}\n </div>\n )}\n\n {!error && values.length === 0 && (\n <div className={sharedStyles.emptyMessage}>\n {isLoading ? \"Loading options...\" : \"No options available\"}\n </div>\n )}\n\n {(values.length > 0 || isLoading) && (\n <Combobox.Root<string, true>\n multiple\n value={selectedValues}\n onValueChange={handleValueChange}\n >\n {isLoading && (\n <div className={sharedStyles.loadingMessage}>\n Updating...\n </div>\n )}\n\n {selectedValues.length > 0 && (\n <div className={sharedStyles.tagContainer}>\n {displayedTags.map((value) => (\n <span key={value} className={sharedStyles.tag}>\n {value}\n <Button\n type=\"button\"\n className={sharedStyles.tagRemove}\n onClick={() =>\n removeValue(value)}\n aria-label={`Remove ${value}`}\n >\n ×\n </Button>\n </span>\n ))}\n {remainingCount > 0 && (\n <span className={sharedStyles.tag}>\n +{remainingCount} more\n </span>\n )}\n </div>\n )}\n\n <div className={styles.inputRow}>\n <Combobox.Input\n placeholder={selectedValues.length > 0\n ? `${selectedValues.length} selected`\n : placeholder}\n aria-label={`Search ${propertyKey} values`}\n />\n {showClearAll && selectedValues.length > 0 && (\n <Combobox.Clear\n className={styles.clearButton}\n onClick={clearAll}\n aria-label=\"Clear all selections\"\n />\n )}\n </div>\n\n <Combobox.Portal>\n <Combobox.Positioner>\n <Combobox.Popup>\n {values.length === 0\n ? <Combobox.Empty>No options available</Combobox.Empty>\n : values.map(({ value, count }) => (\n <Combobox.Item key={value} value={value}>\n <span>{value}</span>\n <span className={styles.count}>\n ({count.toLocaleString()})\n </span>\n </Combobox.Item>\n ))}\n </Combobox.Popup>\n </Combobox.Positioner>\n </Combobox.Portal>\n </Combobox.Root>\n )}\n </div>\n );\n}\n\nexport const MultiSelectInput = memo(\n MultiSelectInputInner,\n) as typeof MultiSelectInputInner;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
.multiSelect {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
gap: var(--osdk-filter-multiselect-gap);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.inputRow {
|
|
24
|
+
display: flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
gap: var(--osdk-filter-multiselect-inputRow-gap);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.clearButton {
|
|
30
|
+
flex-shrink: 0;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.count {
|
|
34
|
+
font-variant-numeric: tabular-nums;
|
|
35
|
+
}
|