@osdk/react-components 0.3.0-main-20260408222341 → 0.3.0-main-20260409143121

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 CHANGED
@@ -1,12 +1,13 @@
1
1
  # @osdk/react-components
2
2
 
3
- ## 0.3.0-main-20260408222341
3
+ ## 0.3.0-main-20260409143121
4
4
 
5
5
  ### Minor Changes
6
6
 
7
7
  - f8b9f12: Cache results from useOsdkFunctions
8
8
  - 0b349bd: Fix returned objectSet in ObjectSetQuery
9
9
  - 89def41: minor bump associated with BlueprintJS upgrade
10
+ - 3617bab: Export MultiColumnSortDialog as a building block
10
11
  - 6786113: Add dedupeIntervalMs prop to ObjectTable to configure the dedupe interval for caching network requests
11
12
 
12
13
  ### Patch Changes
@@ -20,9 +21,9 @@
20
21
  - Updated dependencies [0b349bd]
21
22
  - Updated dependencies [51ccca8]
22
23
  - Updated dependencies [fb85818]
23
- - @osdk/client@2.9.0-main-20260408222341
24
- - @osdk/react@0.11.0-main-20260408222341
25
- - @osdk/api@2.9.0-main-20260408222341
24
+ - @osdk/client@2.9.0-main-20260409143121
25
+ - @osdk/react@0.11.0-main-20260409143121
26
+ - @osdk/api@2.9.0-main-20260409143121
26
27
 
27
28
  ## 0.2.0
28
29
 
@@ -14,7 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { Button } from "@base-ui/react/button";
18
17
  import { Collapsible } from "@base-ui/react/collapsible";
19
18
  import { CaretDown, Cog, SmallInfoSign } from "@blueprintjs/icons";
20
19
  import { arrayMove } from "@dnd-kit/sortable";
@@ -210,16 +209,16 @@ function AvailableColumnsList({
210
209
  className: styles.propertiesList
211
210
  }, /*#__PURE__*/React.createElement("div", {
212
211
  className: styles.categoryHeader
212
+ }, /*#__PURE__*/React.createElement("label", {
213
+ className: styles.selectAllLabel
213
214
  }, /*#__PURE__*/React.createElement(Checkbox, {
214
215
  checked: allFilteredSelected,
215
216
  indeterminate: someFilteredSelected && !allFilteredSelected,
216
217
  onCheckedChange: handleSelectAllClick,
217
218
  className: styles.checkbox
218
- }), /*#__PURE__*/React.createElement(Collapsible.Trigger, {
219
+ }), "All Columns"), /*#__PURE__*/React.createElement(Collapsible.Trigger, {
219
220
  className: styles.categoryTrigger
220
221
  }, /*#__PURE__*/React.createElement("span", {
221
- className: styles.categoryTitle
222
- }, "All Columns"), /*#__PURE__*/React.createElement("span", {
223
222
  className: styles.categoryCount
224
223
  }, selectedCount, "/", totalCount), /*#__PURE__*/React.createElement(CaretDown, {
225
224
  className: styles.caretIcon
@@ -245,14 +244,15 @@ function PropertyItem({
245
244
  }, [onToggle, column]);
246
245
  return /*#__PURE__*/React.createElement("div", {
247
246
  className: styles.propertyItem
247
+ }, /*#__PURE__*/React.createElement("label", {
248
+ className: styles.propertyLabel
248
249
  }, /*#__PURE__*/React.createElement(Checkbox, {
249
250
  checked: isSelected,
250
251
  onCheckedChange: handleClick,
251
252
  className: styles.checkbox
252
- }), /*#__PURE__*/React.createElement(Button, {
253
- onClick: handleClick,
253
+ }), /*#__PURE__*/React.createElement("span", {
254
254
  className: styles.propertyName
255
- }, column.label), showInfoIcon && /*#__PURE__*/React.createElement(SmallInfoSign, {
255
+ }, column.label)), showInfoIcon && /*#__PURE__*/React.createElement(SmallInfoSign, {
256
256
  className: styles.infoIcon
257
257
  }));
258
258
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnConfigDialog.js","names":["Button","Collapsible","CaretDown","Cog","SmallInfoSign","arrayMove","classNames","React","useCallback","useEffect","useMemo","useState","ActionButton","Checkbox","Dialog","DraggableList","SearchBar","styles","ColumnConfigDialog","isOpen","onClose","columnOptions","currentVisibility","currentColumnOrder","onApply","isValidConfig","visibleColumns","setVisibleColumns","searchQuery","setSearchQuery","allColumns","map","opt","isVisible","id","label","name","visibleCols","filter","col","length","sort","a","b","indexA","indexOf","indexB","orderA","Infinity","orderB","handleApply","getColumnConfig","isValid","isApplyDisabled","handleReorderColumns","fromIndex","toIndex","items","handleRemoveColumn","columnId","prev","handleToggleColumn","column","isCurrentlyVisible","some","handleSearchChange","event","target","value","handleSelectAll","columns","allSelected","every","v","newColumns","filteredAvailableColumns","query","toLowerCase","trim","includes","footer","createElement","Fragment","onClick","variant","disabled","onOpenChange","title","DialogTitle","className","columnConfigDialog","dialogLayout","VisibleColumnsList","onReorder","onRemove","AvailableColumnsList","onSearchChange","onToggleColumn","onSelectAll","filteredColumns","hiddenColumns","visibleColumnsContainer","sectionHeader","sectionTitle","countTag","sectionHint","removeIconVariant","emptyMessage","columnList","selectedCount","totalCount","allFilteredSelected","someFilteredSelected","handleSelectAllClick","availableColumnsContainer","onChange","placeholder","searchContainer","Root","defaultOpen","propertiesList","categoryHeader","checked","indeterminate","onCheckedChange","checkbox","Trigger","categoryTrigger","categoryTitle","categoryCount","caretIcon","Panel","propertyList","emptyState","PropertyItem","key","isSelected","onToggle","showInfoIcon","handleClick","propertyItem","propertyName","infoIcon"],"sources":["ColumnConfigDialog.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 { Collapsible } from \"@base-ui/react/collapsible\";\nimport { CaretDown, Cog, SmallInfoSign } from \"@blueprintjs/icons\";\nimport { arrayMove } from \"@dnd-kit/sortable\";\nimport type { ColumnOrderState, VisibilityState } 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 { Checkbox } from \"../base-components/checkbox/Checkbox.js\";\nimport { Dialog } from \"../base-components/dialog/Dialog.js\";\nimport { DraggableList } from \"../base-components/draggable-list/DraggableList.js\";\nimport { SearchBar } from \"../base-components/search-bar/SearchBar.js\";\nimport styles from \"./ColumnConfigDialog.module.css\";\nimport type { ColumnOption } from \"./utils/types.js\";\n\nexport interface ColumnConfig {\n columnId: string;\n isVisible: boolean;\n}\n\nexport type ColumnConfigOptions = Array<Pick<ColumnOption, \"id\" | \"name\">>;\n\nexport interface ColumnConfigDialogProps {\n isOpen: boolean;\n onClose: () => void;\n columnOptions: ColumnConfigOptions;\n currentVisibility?: VisibilityState;\n currentColumnOrder?: ColumnOrderState;\n onApply: (\n columns: ColumnConfig[],\n ) => void;\n isValidConfig?: (columns: ColumnConfig[]) => boolean;\n}\n\ninterface ColumnItem {\n id: string;\n label: string;\n isVisible: boolean;\n}\n\nexport function ColumnConfigDialog({\n isOpen,\n onClose,\n columnOptions,\n currentVisibility,\n currentColumnOrder,\n onApply,\n isValidConfig,\n}: ColumnConfigDialogProps):\n | React.ReactElement\n | null\n{\n const [visibleColumns, setVisibleColumns] = useState<ColumnItem[]>([]);\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n const allColumns: ColumnItem[] = useMemo(() => {\n return columnOptions.map((opt) => {\n const isVisible = currentVisibility\n ? currentVisibility[opt.id]\n : false;\n\n return {\n id: opt.id,\n label: opt.name,\n isVisible,\n };\n });\n }, [columnOptions, currentVisibility]);\n\n // Sync local state with prop when dialog is opened\n useEffect(() => {\n if (isOpen) {\n const visibleCols = allColumns.filter((col) => col.isVisible);\n\n // Sort by current column order if available\n if (!!currentColumnOrder?.length) {\n visibleCols.sort((a, b) => {\n const indexA = currentColumnOrder.indexOf(a.id);\n const indexB = currentColumnOrder.indexOf(b.id);\n // If not in order array, put at end\n const orderA = indexA === -1 ? Infinity : indexA;\n const orderB = indexB === -1 ? Infinity : indexB;\n return orderA - orderB;\n });\n }\n\n setVisibleColumns(visibleCols);\n setSearchQuery(\"\");\n }\n }, [isOpen, allColumns, currentColumnOrder]);\n\n const handleApply = useCallback(() => {\n onApply(getColumnConfig(allColumns, visibleColumns));\n onClose();\n }, [allColumns, visibleColumns, onApply, onClose]);\n\n // If no condition provided, default to valid\n const isValid = isValidConfig\n ? isValidConfig(getColumnConfig(allColumns, visibleColumns))\n : true;\n\n const isApplyDisabled = visibleColumns.length === 0 || !isValid;\n\n const handleReorderColumns = useCallback(\n (fromIndex: number, toIndex: number) => {\n setVisibleColumns((items) => arrayMove(items, fromIndex, toIndex));\n },\n [],\n );\n\n const handleRemoveColumn = useCallback((columnId: string) => {\n setVisibleColumns((prev) => prev.filter((col) => col.id !== columnId));\n }, []);\n\n const handleToggleColumn = useCallback((column: ColumnItem) => {\n setVisibleColumns((prev) => {\n const isCurrentlyVisible = prev.some((col) => col.id === column.id);\n if (isCurrentlyVisible) {\n return prev.filter((col) => col.id !== column.id);\n } else {\n return [...prev, column];\n }\n });\n }, []);\n\n const handleSearchChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchQuery(event.target.value);\n },\n [],\n );\n\n const handleSelectAll = useCallback((columns: ColumnItem[]) => {\n setVisibleColumns((prev) => {\n const allSelected = columns.every((col) =>\n prev.some((v) => v.id === col.id)\n );\n if (allSelected) {\n // Deselect all filtered columns\n return prev.filter(\n (v) => !columns.some((col) => col.id === v.id),\n );\n } else {\n // Select all filtered columns that aren't already selected\n const newColumns = columns.filter(\n (col) => !prev.some((v) => v.id === col.id),\n );\n return [...prev, ...newColumns];\n }\n });\n }, []);\n\n const filteredAvailableColumns = useMemo(() => {\n const query = searchQuery.toLowerCase().trim();\n if (!query) {\n return allColumns;\n }\n return allColumns.filter(\n (col) =>\n (col.label?.toLowerCase().includes(query) ?? false)\n || col.id.toLowerCase().includes(query),\n );\n }, [allColumns, searchQuery]);\n\n const footer = useMemo(() => (\n <>\n <ActionButton onClick={onClose}>Cancel</ActionButton>\n <ActionButton\n variant=\"primary\"\n onClick={handleApply}\n disabled={isApplyDisabled}\n >\n Apply\n </ActionButton>\n </>\n ), [onClose, handleApply, isApplyDisabled]);\n\n return (\n <Dialog\n isOpen={isOpen}\n onOpenChange={onClose}\n title={DialogTitle}\n footer={footer}\n className={styles.columnConfigDialog}\n >\n <div className={styles.dialogLayout}>\n <VisibleColumnsList\n columns={visibleColumns}\n onReorder={handleReorderColumns}\n onRemove={handleRemoveColumn}\n />\n <AvailableColumnsList\n visibleColumns={visibleColumns}\n searchQuery={searchQuery}\n onSearchChange={handleSearchChange}\n onToggleColumn={handleToggleColumn}\n onSelectAll={handleSelectAll}\n filteredColumns={filteredAvailableColumns}\n />\n </div>\n </Dialog>\n );\n}\n\nconst DialogTitle = (\n <div className={styles.title}>\n <Cog />Configure Table Columns\n </div>\n);\n\nconst getColumnConfig = (\n allColumns: ColumnItem[],\n visibleColumns: ColumnItem[],\n): ColumnConfig[] => {\n const hiddenColumns = allColumns.filter(\n (col) => !visibleColumns.some((v) => v.id === col.id),\n );\n\n return [\n ...visibleColumns.map((col) => ({ columnId: col.id, isVisible: true })),\n ...hiddenColumns.map((col) => ({ columnId: col.id, isVisible: false })),\n ];\n};\n\ninterface VisibleColumnsListProps {\n columns: ColumnItem[];\n onReorder: (fromIndex: number, toIndex: number) => void;\n onRemove: (columnId: string) => void;\n}\n\nfunction VisibleColumnsList({\n columns,\n onReorder,\n onRemove,\n}: VisibleColumnsListProps): React.ReactElement {\n return (\n <div className={styles.visibleColumnsContainer}>\n <div className={styles.sectionHeader}>\n <div className={styles.sectionTitle}>\n <span>Visible Columns</span>\n <span className={styles.countTag}>{columns.length}</span>\n </div>\n <div className={styles.sectionHint}>Drag to reorder</div>\n </div>\n <DraggableList\n items={columns}\n onReorder={onReorder}\n onRemove={onRemove}\n removeIconVariant=\"trash\"\n emptyMessage=\"No visible columns\"\n className={styles.columnList}\n />\n </div>\n );\n}\n\ninterface AvailableColumnsListProps {\n visibleColumns: ColumnItem[];\n searchQuery: string;\n onSearchChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onToggleColumn: (column: ColumnItem) => void;\n onSelectAll: (columns: ColumnItem[]) => void;\n filteredColumns: ColumnItem[];\n}\n\nfunction AvailableColumnsList({\n visibleColumns,\n searchQuery,\n onSearchChange,\n onToggleColumn,\n onSelectAll,\n filteredColumns,\n}: AvailableColumnsListProps): React.ReactElement {\n const selectedCount = visibleColumns.length;\n const totalCount = filteredColumns.length;\n const allFilteredSelected = filteredColumns.every((col) =>\n visibleColumns.some((v) => v.id === col.id)\n );\n const someFilteredSelected = filteredColumns.some((col) =>\n visibleColumns.some((v) => v.id === col.id)\n );\n\n const handleSelectAllClick = useCallback(() => {\n onSelectAll(filteredColumns);\n }, [filteredColumns, onSelectAll]);\n\n return (\n <div className={styles.availableColumnsContainer}>\n <div className={classNames(styles.sectionHeader, styles.sectionTitle)}>\n Add or Remove Columns\n </div>\n <SearchBar\n value={searchQuery}\n onChange={onSearchChange}\n placeholder=\"Search...\"\n aria-label=\"Search available columns\"\n className={styles.searchContainer}\n />\n <Collapsible.Root defaultOpen className={styles.propertiesList}>\n <div className={styles.categoryHeader}>\n <Checkbox\n checked={allFilteredSelected}\n indeterminate={someFilteredSelected && !allFilteredSelected}\n onCheckedChange={handleSelectAllClick}\n className={styles.checkbox}\n />\n <Collapsible.Trigger className={styles.categoryTrigger}>\n <span className={styles.categoryTitle}>All Columns</span>\n <span className={styles.categoryCount}>\n {selectedCount}/{totalCount}\n </span>\n <CaretDown className={styles.caretIcon} />\n </Collapsible.Trigger>\n </div>\n <Collapsible.Panel className={styles.propertyList}>\n {filteredColumns.length === 0\n ? (\n <div className={styles.emptyState}>\n No matching columns found\n </div>\n )\n : (\n filteredColumns.map((column) => (\n <PropertyItem\n key={column.id}\n column={column}\n isSelected={visibleColumns.some((v) => v.id === column.id)}\n onToggle={onToggleColumn}\n />\n ))\n )}\n </Collapsible.Panel>\n </Collapsible.Root>\n </div>\n );\n}\n\ninterface PropertyItemProps {\n column: ColumnItem;\n isSelected: boolean;\n onToggle: (column: ColumnItem) => void;\n showInfoIcon?: boolean;\n}\n\nfunction PropertyItem({\n column,\n isSelected,\n onToggle,\n showInfoIcon = false,\n}: PropertyItemProps): React.ReactElement {\n const handleClick = useCallback(() => {\n onToggle(column);\n }, [onToggle, column]);\n\n return (\n <div className={styles.propertyItem}>\n <Checkbox\n checked={isSelected}\n onCheckedChange={handleClick}\n className={styles.checkbox}\n />\n <Button\n onClick={handleClick}\n className={styles.propertyName}\n >\n {column.label}\n </Button>\n {showInfoIcon && <SmallInfoSign className={styles.infoIcon} />}\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ColumnConfigDialog.js","names":["Collapsible","CaretDown","Cog","SmallInfoSign","arrayMove","classNames","React","useCallback","useEffect","useMemo","useState","ActionButton","Checkbox","Dialog","DraggableList","SearchBar","styles","ColumnConfigDialog","isOpen","onClose","columnOptions","currentVisibility","currentColumnOrder","onApply","isValidConfig","visibleColumns","setVisibleColumns","searchQuery","setSearchQuery","allColumns","map","opt","isVisible","id","label","name","visibleCols","filter","col","length","sort","a","b","indexA","indexOf","indexB","orderA","Infinity","orderB","handleApply","getColumnConfig","isValid","isApplyDisabled","handleReorderColumns","fromIndex","toIndex","items","handleRemoveColumn","columnId","prev","handleToggleColumn","column","isCurrentlyVisible","some","handleSearchChange","event","target","value","handleSelectAll","columns","allSelected","every","v","newColumns","filteredAvailableColumns","query","toLowerCase","trim","includes","footer","createElement","Fragment","onClick","variant","disabled","onOpenChange","title","DialogTitle","className","columnConfigDialog","dialogLayout","VisibleColumnsList","onReorder","onRemove","AvailableColumnsList","onSearchChange","onToggleColumn","onSelectAll","filteredColumns","hiddenColumns","visibleColumnsContainer","sectionHeader","sectionTitle","countTag","sectionHint","removeIconVariant","emptyMessage","columnList","selectedCount","totalCount","allFilteredSelected","someFilteredSelected","handleSelectAllClick","availableColumnsContainer","onChange","placeholder","searchContainer","Root","defaultOpen","propertiesList","categoryHeader","selectAllLabel","checked","indeterminate","onCheckedChange","checkbox","Trigger","categoryTrigger","categoryCount","caretIcon","Panel","propertyList","emptyState","PropertyItem","key","isSelected","onToggle","showInfoIcon","handleClick","propertyItem","propertyLabel","propertyName","infoIcon"],"sources":["ColumnConfigDialog.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 { Collapsible } from \"@base-ui/react/collapsible\";\nimport { CaretDown, Cog, SmallInfoSign } from \"@blueprintjs/icons\";\nimport { arrayMove } from \"@dnd-kit/sortable\";\nimport type { ColumnOrderState, VisibilityState } 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 { Checkbox } from \"../base-components/checkbox/Checkbox.js\";\nimport { Dialog } from \"../base-components/dialog/Dialog.js\";\nimport { DraggableList } from \"../base-components/draggable-list/DraggableList.js\";\nimport { SearchBar } from \"../base-components/search-bar/SearchBar.js\";\nimport styles from \"./ColumnConfigDialog.module.css\";\nimport type { ColumnOption } from \"./utils/types.js\";\n\nexport interface ColumnConfig {\n columnId: string;\n isVisible: boolean;\n}\n\nexport type ColumnConfigOptions = Array<Pick<ColumnOption, \"id\" | \"name\">>;\n\nexport interface ColumnConfigDialogProps {\n isOpen: boolean;\n onClose: () => void;\n columnOptions: ColumnConfigOptions;\n currentVisibility?: VisibilityState;\n currentColumnOrder?: ColumnOrderState;\n onApply: (\n columns: ColumnConfig[],\n ) => void;\n isValidConfig?: (columns: ColumnConfig[]) => boolean;\n}\n\ninterface ColumnItem {\n id: string;\n label: string;\n isVisible: boolean;\n}\n\nexport function ColumnConfigDialog({\n isOpen,\n onClose,\n columnOptions,\n currentVisibility,\n currentColumnOrder,\n onApply,\n isValidConfig,\n}: ColumnConfigDialogProps):\n | React.ReactElement\n | null\n{\n const [visibleColumns, setVisibleColumns] = useState<ColumnItem[]>([]);\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n const allColumns: ColumnItem[] = useMemo(() => {\n return columnOptions.map((opt) => {\n const isVisible = currentVisibility\n ? currentVisibility[opt.id]\n : false;\n\n return {\n id: opt.id,\n label: opt.name,\n isVisible,\n };\n });\n }, [columnOptions, currentVisibility]);\n\n // Sync local state with prop when dialog is opened\n useEffect(() => {\n if (isOpen) {\n const visibleCols = allColumns.filter((col) => col.isVisible);\n\n // Sort by current column order if available\n if (!!currentColumnOrder?.length) {\n visibleCols.sort((a, b) => {\n const indexA = currentColumnOrder.indexOf(a.id);\n const indexB = currentColumnOrder.indexOf(b.id);\n // If not in order array, put at end\n const orderA = indexA === -1 ? Infinity : indexA;\n const orderB = indexB === -1 ? Infinity : indexB;\n return orderA - orderB;\n });\n }\n\n setVisibleColumns(visibleCols);\n setSearchQuery(\"\");\n }\n }, [isOpen, allColumns, currentColumnOrder]);\n\n const handleApply = useCallback(() => {\n onApply(getColumnConfig(allColumns, visibleColumns));\n onClose();\n }, [allColumns, visibleColumns, onApply, onClose]);\n\n // If no condition provided, default to valid\n const isValid = isValidConfig\n ? isValidConfig(getColumnConfig(allColumns, visibleColumns))\n : true;\n\n const isApplyDisabled = visibleColumns.length === 0 || !isValid;\n\n const handleReorderColumns = useCallback(\n (fromIndex: number, toIndex: number) => {\n setVisibleColumns((items) => arrayMove(items, fromIndex, toIndex));\n },\n [],\n );\n\n const handleRemoveColumn = useCallback((columnId: string) => {\n setVisibleColumns((prev) => prev.filter((col) => col.id !== columnId));\n }, []);\n\n const handleToggleColumn = useCallback((column: ColumnItem) => {\n setVisibleColumns((prev) => {\n const isCurrentlyVisible = prev.some((col) => col.id === column.id);\n if (isCurrentlyVisible) {\n return prev.filter((col) => col.id !== column.id);\n } else {\n return [...prev, column];\n }\n });\n }, []);\n\n const handleSearchChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchQuery(event.target.value);\n },\n [],\n );\n\n const handleSelectAll = useCallback((columns: ColumnItem[]) => {\n setVisibleColumns((prev) => {\n const allSelected = columns.every((col) =>\n prev.some((v) => v.id === col.id)\n );\n if (allSelected) {\n // Deselect all filtered columns\n return prev.filter(\n (v) => !columns.some((col) => col.id === v.id),\n );\n } else {\n // Select all filtered columns that aren't already selected\n const newColumns = columns.filter(\n (col) => !prev.some((v) => v.id === col.id),\n );\n return [...prev, ...newColumns];\n }\n });\n }, []);\n\n const filteredAvailableColumns = useMemo(() => {\n const query = searchQuery.toLowerCase().trim();\n if (!query) {\n return allColumns;\n }\n return allColumns.filter(\n (col) =>\n (col.label?.toLowerCase().includes(query) ?? false)\n || col.id.toLowerCase().includes(query),\n );\n }, [allColumns, searchQuery]);\n\n const footer = useMemo(() => (\n <>\n <ActionButton onClick={onClose}>Cancel</ActionButton>\n <ActionButton\n variant=\"primary\"\n onClick={handleApply}\n disabled={isApplyDisabled}\n >\n Apply\n </ActionButton>\n </>\n ), [onClose, handleApply, isApplyDisabled]);\n\n return (\n <Dialog\n isOpen={isOpen}\n onOpenChange={onClose}\n title={DialogTitle}\n footer={footer}\n className={styles.columnConfigDialog}\n >\n <div className={styles.dialogLayout}>\n <VisibleColumnsList\n columns={visibleColumns}\n onReorder={handleReorderColumns}\n onRemove={handleRemoveColumn}\n />\n <AvailableColumnsList\n visibleColumns={visibleColumns}\n searchQuery={searchQuery}\n onSearchChange={handleSearchChange}\n onToggleColumn={handleToggleColumn}\n onSelectAll={handleSelectAll}\n filteredColumns={filteredAvailableColumns}\n />\n </div>\n </Dialog>\n );\n}\n\nconst DialogTitle = (\n <div className={styles.title}>\n <Cog />Configure Table Columns\n </div>\n);\n\nconst getColumnConfig = (\n allColumns: ColumnItem[],\n visibleColumns: ColumnItem[],\n): ColumnConfig[] => {\n const hiddenColumns = allColumns.filter(\n (col) => !visibleColumns.some((v) => v.id === col.id),\n );\n\n return [\n ...visibleColumns.map((col) => ({ columnId: col.id, isVisible: true })),\n ...hiddenColumns.map((col) => ({ columnId: col.id, isVisible: false })),\n ];\n};\n\ninterface VisibleColumnsListProps {\n columns: ColumnItem[];\n onReorder: (fromIndex: number, toIndex: number) => void;\n onRemove: (columnId: string) => void;\n}\n\nfunction VisibleColumnsList({\n columns,\n onReorder,\n onRemove,\n}: VisibleColumnsListProps): React.ReactElement {\n return (\n <div className={styles.visibleColumnsContainer}>\n <div className={styles.sectionHeader}>\n <div className={styles.sectionTitle}>\n <span>Visible Columns</span>\n <span className={styles.countTag}>{columns.length}</span>\n </div>\n <div className={styles.sectionHint}>Drag to reorder</div>\n </div>\n <DraggableList\n items={columns}\n onReorder={onReorder}\n onRemove={onRemove}\n removeIconVariant=\"trash\"\n emptyMessage=\"No visible columns\"\n className={styles.columnList}\n />\n </div>\n );\n}\n\ninterface AvailableColumnsListProps {\n visibleColumns: ColumnItem[];\n searchQuery: string;\n onSearchChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onToggleColumn: (column: ColumnItem) => void;\n onSelectAll: (columns: ColumnItem[]) => void;\n filteredColumns: ColumnItem[];\n}\n\nfunction AvailableColumnsList({\n visibleColumns,\n searchQuery,\n onSearchChange,\n onToggleColumn,\n onSelectAll,\n filteredColumns,\n}: AvailableColumnsListProps): React.ReactElement {\n const selectedCount = visibleColumns.length;\n const totalCount = filteredColumns.length;\n const allFilteredSelected = filteredColumns.every((col) =>\n visibleColumns.some((v) => v.id === col.id)\n );\n const someFilteredSelected = filteredColumns.some((col) =>\n visibleColumns.some((v) => v.id === col.id)\n );\n\n const handleSelectAllClick = useCallback(() => {\n onSelectAll(filteredColumns);\n }, [filteredColumns, onSelectAll]);\n\n return (\n <div className={styles.availableColumnsContainer}>\n <div className={classNames(styles.sectionHeader, styles.sectionTitle)}>\n Add or Remove Columns\n </div>\n <SearchBar\n value={searchQuery}\n onChange={onSearchChange}\n placeholder=\"Search...\"\n aria-label=\"Search available columns\"\n className={styles.searchContainer}\n />\n <Collapsible.Root defaultOpen={true} className={styles.propertiesList}>\n <div className={styles.categoryHeader}>\n <label className={styles.selectAllLabel}>\n <Checkbox\n checked={allFilteredSelected}\n indeterminate={someFilteredSelected && !allFilteredSelected}\n onCheckedChange={handleSelectAllClick}\n className={styles.checkbox}\n />\n All Columns\n </label>\n <Collapsible.Trigger className={styles.categoryTrigger}>\n <span className={styles.categoryCount}>\n {selectedCount}/{totalCount}\n </span>\n <CaretDown className={styles.caretIcon} />\n </Collapsible.Trigger>\n </div>\n <Collapsible.Panel className={styles.propertyList}>\n {filteredColumns.length === 0\n ? (\n <div className={styles.emptyState}>\n No matching columns found\n </div>\n )\n : (\n filteredColumns.map((column) => (\n <PropertyItem\n key={column.id}\n column={column}\n isSelected={visibleColumns.some((v) => v.id === column.id)}\n onToggle={onToggleColumn}\n />\n ))\n )}\n </Collapsible.Panel>\n </Collapsible.Root>\n </div>\n );\n}\n\ninterface PropertyItemProps {\n column: ColumnItem;\n isSelected: boolean;\n onToggle: (column: ColumnItem) => void;\n showInfoIcon?: boolean;\n}\n\nfunction PropertyItem({\n column,\n isSelected,\n onToggle,\n showInfoIcon = false,\n}: PropertyItemProps): React.ReactElement {\n const handleClick = useCallback(() => {\n onToggle(column);\n }, [onToggle, column]);\n\n return (\n <div className={styles.propertyItem}>\n <label className={styles.propertyLabel}>\n <Checkbox\n checked={isSelected}\n onCheckedChange={handleClick}\n className={styles.checkbox}\n />\n <span className={styles.propertyName}>\n {column.label}\n </span>\n </label>\n {showInfoIcon && <SmallInfoSign className={styles.infoIcon} />}\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -114,7 +114,7 @@
114
114
  .categoryHeader {
115
115
  display: flex;
116
116
  align-items: center;
117
- justify-content: flex-start;
117
+ justify-content: space-between;
118
118
  width: 100%;
119
119
  padding: calc(var(--osdk-surface-spacing) * 2)
120
120
  calc(var(--osdk-surface-spacing) * 3);
@@ -128,7 +128,6 @@
128
128
  .categoryTrigger {
129
129
  display: flex;
130
130
  align-items: center;
131
- flex: 1;
132
131
  background: none;
133
132
  border: none;
134
133
  cursor: pointer;
@@ -204,22 +203,34 @@
204
203
  justify-content: center;
205
204
  }
206
205
 
206
+ .selectAllLabel {
207
+ display: flex;
208
+ align-items: center;
209
+ gap: calc(var(--osdk-surface-spacing) * 3);
210
+ cursor: pointer;
211
+ color: var(--osdk-typography-color-muted);
212
+ font-size: var(--osdk-typography-size-body-small);
213
+ font-weight: var(--osdk-typography-weight-bold);
214
+ }
215
+
216
+ .propertyLabel {
217
+ display: flex;
218
+ align-items: center;
219
+ gap: calc(var(--osdk-surface-spacing) * 3);
220
+ cursor: pointer;
221
+ flex: 1;
222
+ min-width: 0;
223
+ }
224
+
207
225
  .propertyName {
208
226
  text-align: left;
209
227
  flex: 1;
210
228
  font-size: var(--osdk-typography-size-body-medium);
211
229
  font-weight: 400;
212
230
  color: var(--osdk-typography-color-default-rest);
213
- padding: 0;
214
231
  overflow: hidden;
215
232
  text-overflow: ellipsis;
216
233
  white-space: nowrap;
217
- background: none;
218
- border: none;
219
- &:focus-visible {
220
- outline: var(--osdk-focus-outline);
221
- outline-offset: var(--osdk-focus-visible-outline-offset);
222
- }
223
234
  }
224
235
 
225
236
  .infoIcon {
@@ -21,6 +21,8 @@ const styles = {
21
21
  "propertyList": "ColumnConfigDialog-module__propertyList___Z-uizzUM",
22
22
  "propertyItem": "ColumnConfigDialog-module__propertyItem___u41rBMbM",
23
23
  "checkboxIndicator": "ColumnConfigDialog-module__checkboxIndicator___zO12iDjb",
24
+ "selectAllLabel": "ColumnConfigDialog-module__selectAllLabel___aHo9AjJU",
25
+ "propertyLabel": "ColumnConfigDialog-module__propertyLabel___m2fvLTlr",
24
26
  "propertyName": "ColumnConfigDialog-module__propertyName___zHUrcS9I",
25
27
  "infoIcon": "ColumnConfigDialog-module__infoIcon___DJouN8cT",
26
28
  "emptyState": "ColumnConfigDialog-module__emptyState___MrcWvWgf"
@@ -1 +1 @@
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":[]}
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\nexport interface 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":[]}
@@ -25,6 +25,7 @@ export { ObjectTable } from "../object-table/ObjectTable.js";
25
25
 
26
26
  export { BaseTable } from "../object-table/Table.js";
27
27
  export { ColumnConfigDialog } from "../object-table/ColumnConfigDialog.js";
28
+ export { MultiColumnSortDialog } from "../object-table/MultiColumnSortDialog.js";
28
29
  // PdfViewer
29
30
  export { BasePdfViewer } from "../pdf-viewer/PdfViewer.js";
30
31
  // PdfViewer building blocks
@@ -1 +1 @@
1
- {"version":3,"file":"experimental.js","names":["BaseFilterList","FilterList","deserializeFilterStates","serializeFilterStates","ObjectTable","BaseTable","ColumnConfigDialog","BasePdfViewer","PdfViewerAnnotationLayer","PdfViewerContent","PdfViewerOutlineSidebar","PdfViewerSearchBar","PdfViewerSidebar","PdfViewerToolbar","usePdfAnnotationPortals","usePdfAnnotationsByPage","usePdfDocument","usePdfFormFields","usePdfHighlightMode","usePdfOutline","usePdfViewer","usePdfViewerSearch","usePdfViewerSync","PdfViewerProvider","usePdfViewerContext","usePdfViewerInstance","usePdfViewerCore","usePdfViewerState","PdfViewer","ActionForm","BaseForm"],"sources":["experimental.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\nexport { BaseFilterList } from \"../filter-list/base/BaseFilterList.js\";\nexport type {\n BaseFilterListProps,\n RenderFilterInput,\n} from \"../filter-list/base/BaseFilterListApi.js\";\nexport { FilterList } from \"../filter-list/FilterList.js\";\n\nexport type {\n FilterDefinitionUnion,\n FilterListProps,\n} from \"../filter-list/FilterListApi.js\";\nexport type {\n FilterComponentType,\n FilterListItemProps,\n FilterState,\n PropertyFilterDefinition,\n} from \"../filter-list/FilterListItemApi.js\";\nexport {\n deserializeFilterStates,\n serializeFilterStates,\n} from \"../filter-list/utils/filterStateSerialization.js\";\n\n// ObjectTable that loads and displays data for a given objectSet\nexport { ObjectTable } from \"../object-table/ObjectTable.js\";\nexport type {\n ColumnDefinition,\n ColumnDefinitionLocator,\n CustomColumnLocator,\n FunctionColumnLocator,\n ObjectTableProps,\n PropertyColumnLocator,\n RdpColumnLocator,\n} from \"../object-table/ObjectTableApi.js\";\nexport type { CellEditInfo } from \"../object-table/utils/types.js\";\n\n// BaseTable that does not handle data fetching\nexport type { BaseTableProps } from \"../object-table/Table.js\";\nexport { BaseTable } from \"../object-table/Table.js\";\n\nexport { ColumnConfigDialog } from \"../object-table/ColumnConfigDialog.js\";\nexport type {\n ColumnConfigDialogProps,\n ColumnConfigOptions,\n} from \"../object-table/ColumnConfigDialog.js\";\n\n// PdfViewer\nexport { BasePdfViewer } from \"../pdf-viewer/PdfViewer.js\";\nexport type {\n AnnotationType,\n PdfAnnotation,\n PdfAnnotationRenderProps,\n PdfCustomAnnotation,\n PdfDownloadResult,\n PdfFormFieldValue,\n PdfRect,\n PdfTextHighlightEvent,\n PdfViewerProps,\n SidebarMode,\n} from \"../pdf-viewer/types.js\";\n\n// PdfViewer building blocks\nexport {\n PdfViewerAnnotationLayer,\n type PdfViewerAnnotationLayerProps,\n} from \"../pdf-viewer/components/PdfViewerAnnotationLayer.js\";\nexport {\n PdfViewerContent,\n type PdfViewerContentProps,\n} from \"../pdf-viewer/components/PdfViewerContent.js\";\nexport {\n PdfViewerOutlineSidebar,\n type PdfViewerOutlineSidebarProps,\n} from \"../pdf-viewer/components/PdfViewerOutlineSidebar.js\";\nexport {\n PdfViewerSearchBar,\n type PdfViewerSearchBarProps,\n} from \"../pdf-viewer/components/PdfViewerSearchBar.js\";\nexport {\n PdfViewerSidebar,\n type PdfViewerSidebarProps,\n} from \"../pdf-viewer/components/PdfViewerSidebar.js\";\nexport {\n PdfViewerToolbar,\n type PdfViewerToolbarProps,\n} from \"../pdf-viewer/components/PdfViewerToolbar.js\";\n\n// PdfViewer hooks — primitive\nexport {\n type AnnotationPortalTarget,\n usePdfAnnotationPortals,\n} from \"../pdf-viewer/hooks/usePdfAnnotationPortals.js\";\nexport { usePdfAnnotationsByPage } from \"../pdf-viewer/hooks/usePdfAnnotationsByPage.js\";\nexport { usePdfDocument } from \"../pdf-viewer/hooks/usePdfDocument.js\";\nexport {\n usePdfFormFields,\n type UsePdfFormFieldsOptions,\n type UsePdfFormFieldsResult,\n} from \"../pdf-viewer/hooks/usePdfFormFields.js\";\nexport {\n usePdfHighlightMode,\n type UsePdfHighlightModeOptions,\n type UsePdfHighlightModeResult,\n} from \"../pdf-viewer/hooks/usePdfHighlightMode.js\";\nexport { usePdfOutline } from \"../pdf-viewer/hooks/usePdfOutline.js\";\nexport {\n usePdfViewer,\n type UsePdfViewerResult,\n} from \"../pdf-viewer/hooks/usePdfViewer.js\";\nexport {\n usePdfViewerSearch,\n type UsePdfViewerSearchResult,\n} from \"../pdf-viewer/hooks/usePdfViewerSearch.js\";\nexport { usePdfViewerSync } from \"../pdf-viewer/hooks/usePdfViewerSync.js\";\nexport { type OutlineItem } from \"../pdf-viewer/types.js\";\n\n// PdfViewer context\nexport {\n type PdfViewerContextValue,\n PdfViewerProvider,\n usePdfViewerContext,\n usePdfViewerInstance,\n} from \"../pdf-viewer/PdfViewerContext.js\";\nexport type {\n PdfViewerHandle,\n PdfViewerInstanceOptions,\n} from \"../pdf-viewer/types.js\";\n\n// PdfViewer hooks — composition\nexport {\n usePdfViewerCore,\n type UsePdfViewerCoreOptions,\n type UsePdfViewerCoreResult,\n} from \"../pdf-viewer/hooks/usePdfViewerCore.js\";\nexport {\n usePdfViewerState,\n type UsePdfViewerStateOptions,\n type UsePdfViewerStateResult,\n} from \"../pdf-viewer/hooks/usePdfViewerState.js\";\n\n// PdfViewer (Media wrapper)\nexport {\n PdfViewer,\n type PdfViewerMediaProps,\n} from \"../pdf-viewer/PdfRenderer.js\";\n\nexport { ActionForm } from \"../action-form/ActionForm.js\";\nexport type {\n ActionFormProps,\n BaseFormProps,\n FormError,\n FormState,\n} from \"../action-form/ActionFormApi.js\";\nexport { BaseForm } from \"../action-form/BaseForm.js\";\nexport type {\n ActionParameters,\n BaseFormFieldProps,\n CustomFieldProps,\n DatetimePickerFieldProps,\n DropdownFieldProps,\n FieldComponent,\n FieldValueType,\n FilePickerProps,\n FormFieldDefinition,\n FormFieldPropsByType,\n NumberInputFieldProps,\n ObjectSetFieldProps,\n Option,\n RadioButtonsFieldProps,\n RendererFieldDefinition,\n TextAreaFieldProps,\n TextInputFieldProps,\n} from \"../action-form/FormFieldApi.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,cAAc,QAAQ,uCAAuC;AAKtE,SAASC,UAAU,QAAQ,8BAA8B;AAYzD,SACEC,uBAAuB,EACvBC,qBAAqB,QAChB,kDAAkD;;AAEzD;AACA,SAASC,WAAW,QAAQ,gCAAgC;;AAY5D;;AAEA,SAASC,SAAS,QAAQ,0BAA0B;AAEpD,SAASC,kBAAkB,QAAQ,uCAAuC;AAM1E;AACA,SAASC,aAAa,QAAQ,4BAA4B;AAc1D;AACA,SACEC,wBAAwB,QAEnB,sDAAsD;AAC7D,SACEC,gBAAgB,QAEX,8CAA8C;AACrD,SACEC,uBAAuB,QAElB,qDAAqD;AAC5D,SACEC,kBAAkB,QAEb,gDAAgD;AACvD,SACEC,gBAAgB,QAEX,8CAA8C;AACrD,SACEC,gBAAgB,QAEX,8CAA8C;;AAErD;AACA,SAEEC,uBAAuB,QAClB,gDAAgD;AACvD,SAASC,uBAAuB,QAAQ,gDAAgD;AACxF,SAASC,cAAc,QAAQ,uCAAuC;AACtE,SACEC,gBAAgB,QAGX,yCAAyC;AAChD,SACEC,mBAAmB,QAGd,4CAA4C;AACnD,SAASC,aAAa,QAAQ,sCAAsC;AACpE,SACEC,YAAY,QAEP,qCAAqC;AAC5C,SACEC,kBAAkB,QAEb,2CAA2C;AAClD,SAASC,gBAAgB,QAAQ,yCAAyC;AAG1E;AACA,SAEEC,iBAAiB,EACjBC,mBAAmB,EACnBC,oBAAoB,QACf,mCAAmC;AAM1C;AACA,SACEC,gBAAgB,QAGX,yCAAyC;AAChD,SACEC,iBAAiB,QAGZ,0CAA0C;;AAEjD;AACA,SACEC,SAAS,QAEJ,8BAA8B;AAErC,SAASC,UAAU,QAAQ,8BAA8B;AAOzD,SAASC,QAAQ,QAAQ,4BAA4B","ignoreList":[]}
1
+ {"version":3,"file":"experimental.js","names":["BaseFilterList","FilterList","deserializeFilterStates","serializeFilterStates","ObjectTable","BaseTable","ColumnConfigDialog","MultiColumnSortDialog","BasePdfViewer","PdfViewerAnnotationLayer","PdfViewerContent","PdfViewerOutlineSidebar","PdfViewerSearchBar","PdfViewerSidebar","PdfViewerToolbar","usePdfAnnotationPortals","usePdfAnnotationsByPage","usePdfDocument","usePdfFormFields","usePdfHighlightMode","usePdfOutline","usePdfViewer","usePdfViewerSearch","usePdfViewerSync","PdfViewerProvider","usePdfViewerContext","usePdfViewerInstance","usePdfViewerCore","usePdfViewerState","PdfViewer","ActionForm","BaseForm"],"sources":["experimental.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\nexport { BaseFilterList } from \"../filter-list/base/BaseFilterList.js\";\nexport type {\n BaseFilterListProps,\n RenderFilterInput,\n} from \"../filter-list/base/BaseFilterListApi.js\";\nexport { FilterList } from \"../filter-list/FilterList.js\";\n\nexport type {\n FilterDefinitionUnion,\n FilterListProps,\n} from \"../filter-list/FilterListApi.js\";\nexport type {\n FilterComponentType,\n FilterListItemProps,\n FilterState,\n PropertyFilterDefinition,\n} from \"../filter-list/FilterListItemApi.js\";\nexport {\n deserializeFilterStates,\n serializeFilterStates,\n} from \"../filter-list/utils/filterStateSerialization.js\";\n\n// ObjectTable that loads and displays data for a given objectSet\nexport { ObjectTable } from \"../object-table/ObjectTable.js\";\nexport type {\n ColumnDefinition,\n ColumnDefinitionLocator,\n CustomColumnLocator,\n FunctionColumnLocator,\n ObjectTableProps,\n PropertyColumnLocator,\n RdpColumnLocator,\n} from \"../object-table/ObjectTableApi.js\";\nexport type { CellEditInfo } from \"../object-table/utils/types.js\";\n\n// BaseTable that does not handle data fetching\nexport type { BaseTableProps } from \"../object-table/Table.js\";\nexport { BaseTable } from \"../object-table/Table.js\";\n\nexport { ColumnConfigDialog } from \"../object-table/ColumnConfigDialog.js\";\nexport type {\n ColumnConfigDialogProps,\n ColumnConfigOptions,\n} from \"../object-table/ColumnConfigDialog.js\";\n\nexport { MultiColumnSortDialog } from \"../object-table/MultiColumnSortDialog.js\";\nexport type {\n MultiColumnSortDialogProps,\n SortColumnItem,\n} from \"../object-table/MultiColumnSortDialog.js\";\n\n// PdfViewer\nexport { BasePdfViewer } from \"../pdf-viewer/PdfViewer.js\";\nexport type {\n AnnotationType,\n PdfAnnotation,\n PdfAnnotationRenderProps,\n PdfCustomAnnotation,\n PdfDownloadResult,\n PdfFormFieldValue,\n PdfRect,\n PdfTextHighlightEvent,\n PdfViewerProps,\n SidebarMode,\n} from \"../pdf-viewer/types.js\";\n\n// PdfViewer building blocks\nexport {\n PdfViewerAnnotationLayer,\n type PdfViewerAnnotationLayerProps,\n} from \"../pdf-viewer/components/PdfViewerAnnotationLayer.js\";\nexport {\n PdfViewerContent,\n type PdfViewerContentProps,\n} from \"../pdf-viewer/components/PdfViewerContent.js\";\nexport {\n PdfViewerOutlineSidebar,\n type PdfViewerOutlineSidebarProps,\n} from \"../pdf-viewer/components/PdfViewerOutlineSidebar.js\";\nexport {\n PdfViewerSearchBar,\n type PdfViewerSearchBarProps,\n} from \"../pdf-viewer/components/PdfViewerSearchBar.js\";\nexport {\n PdfViewerSidebar,\n type PdfViewerSidebarProps,\n} from \"../pdf-viewer/components/PdfViewerSidebar.js\";\nexport {\n PdfViewerToolbar,\n type PdfViewerToolbarProps,\n} from \"../pdf-viewer/components/PdfViewerToolbar.js\";\n\n// PdfViewer hooks — primitive\nexport {\n type AnnotationPortalTarget,\n usePdfAnnotationPortals,\n} from \"../pdf-viewer/hooks/usePdfAnnotationPortals.js\";\nexport { usePdfAnnotationsByPage } from \"../pdf-viewer/hooks/usePdfAnnotationsByPage.js\";\nexport { usePdfDocument } from \"../pdf-viewer/hooks/usePdfDocument.js\";\nexport {\n usePdfFormFields,\n type UsePdfFormFieldsOptions,\n type UsePdfFormFieldsResult,\n} from \"../pdf-viewer/hooks/usePdfFormFields.js\";\nexport {\n usePdfHighlightMode,\n type UsePdfHighlightModeOptions,\n type UsePdfHighlightModeResult,\n} from \"../pdf-viewer/hooks/usePdfHighlightMode.js\";\nexport { usePdfOutline } from \"../pdf-viewer/hooks/usePdfOutline.js\";\nexport {\n usePdfViewer,\n type UsePdfViewerResult,\n} from \"../pdf-viewer/hooks/usePdfViewer.js\";\nexport {\n usePdfViewerSearch,\n type UsePdfViewerSearchResult,\n} from \"../pdf-viewer/hooks/usePdfViewerSearch.js\";\nexport { usePdfViewerSync } from \"../pdf-viewer/hooks/usePdfViewerSync.js\";\nexport { type OutlineItem } from \"../pdf-viewer/types.js\";\n\n// PdfViewer context\nexport {\n type PdfViewerContextValue,\n PdfViewerProvider,\n usePdfViewerContext,\n usePdfViewerInstance,\n} from \"../pdf-viewer/PdfViewerContext.js\";\nexport type {\n PdfViewerHandle,\n PdfViewerInstanceOptions,\n} from \"../pdf-viewer/types.js\";\n\n// PdfViewer hooks — composition\nexport {\n usePdfViewerCore,\n type UsePdfViewerCoreOptions,\n type UsePdfViewerCoreResult,\n} from \"../pdf-viewer/hooks/usePdfViewerCore.js\";\nexport {\n usePdfViewerState,\n type UsePdfViewerStateOptions,\n type UsePdfViewerStateResult,\n} from \"../pdf-viewer/hooks/usePdfViewerState.js\";\n\n// PdfViewer (Media wrapper)\nexport {\n PdfViewer,\n type PdfViewerMediaProps,\n} from \"../pdf-viewer/PdfRenderer.js\";\n\nexport { ActionForm } from \"../action-form/ActionForm.js\";\nexport type {\n ActionFormProps,\n BaseFormProps,\n FormError,\n FormState,\n} from \"../action-form/ActionFormApi.js\";\nexport { BaseForm } from \"../action-form/BaseForm.js\";\nexport type {\n ActionParameters,\n BaseFormFieldProps,\n CustomFieldProps,\n DatetimePickerFieldProps,\n DropdownFieldProps,\n FieldComponent,\n FieldValueType,\n FilePickerProps,\n FormFieldDefinition,\n FormFieldPropsByType,\n NumberInputFieldProps,\n ObjectSetFieldProps,\n Option,\n RadioButtonsFieldProps,\n RendererFieldDefinition,\n TextAreaFieldProps,\n TextInputFieldProps,\n} from \"../action-form/FormFieldApi.js\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,cAAc,QAAQ,uCAAuC;AAKtE,SAASC,UAAU,QAAQ,8BAA8B;AAYzD,SACEC,uBAAuB,EACvBC,qBAAqB,QAChB,kDAAkD;;AAEzD;AACA,SAASC,WAAW,QAAQ,gCAAgC;;AAY5D;;AAEA,SAASC,SAAS,QAAQ,0BAA0B;AAEpD,SAASC,kBAAkB,QAAQ,uCAAuC;AAM1E,SAASC,qBAAqB,QAAQ,0CAA0C;AAMhF;AACA,SAASC,aAAa,QAAQ,4BAA4B;AAc1D;AACA,SACEC,wBAAwB,QAEnB,sDAAsD;AAC7D,SACEC,gBAAgB,QAEX,8CAA8C;AACrD,SACEC,uBAAuB,QAElB,qDAAqD;AAC5D,SACEC,kBAAkB,QAEb,gDAAgD;AACvD,SACEC,gBAAgB,QAEX,8CAA8C;AACrD,SACEC,gBAAgB,QAEX,8CAA8C;;AAErD;AACA,SAEEC,uBAAuB,QAClB,gDAAgD;AACvD,SAASC,uBAAuB,QAAQ,gDAAgD;AACxF,SAASC,cAAc,QAAQ,uCAAuC;AACtE,SACEC,gBAAgB,QAGX,yCAAyC;AAChD,SACEC,mBAAmB,QAGd,4CAA4C;AACnD,SAASC,aAAa,QAAQ,sCAAsC;AACpE,SACEC,YAAY,QAEP,qCAAqC;AAC5C,SACEC,kBAAkB,QAEb,2CAA2C;AAClD,SAASC,gBAAgB,QAAQ,yCAAyC;AAG1E;AACA,SAEEC,iBAAiB,EACjBC,mBAAmB,EACnBC,oBAAoB,QACf,mCAAmC;AAM1C;AACA,SACEC,gBAAgB,QAGX,yCAAyC;AAChD,SACEC,iBAAiB,QAGZ,0CAA0C;;AAEjD;AACA,SACEC,SAAS,QAEJ,8BAA8B;AAErC,SAASC,UAAU,QAAQ,8BAA8B;AAOzD,SAASC,QAAQ,QAAQ,4BAA4B","ignoreList":[]}
@@ -3768,7 +3768,7 @@
3768
3768
  .ColumnConfigDialog-module__categoryHeader___lP0lZbIe {
3769
3769
  display: flex;
3770
3770
  align-items: center;
3771
- justify-content: flex-start;
3771
+ justify-content: space-between;
3772
3772
  width: 100%;
3773
3773
  padding: calc(var(--osdk-surface-spacing) * 2)
3774
3774
  calc(var(--osdk-surface-spacing) * 3);
@@ -3782,7 +3782,6 @@
3782
3782
  .ColumnConfigDialog-module__categoryTrigger___M2XqiHkC {
3783
3783
  display: flex;
3784
3784
  align-items: center;
3785
- flex: 1;
3786
3785
  background: none;
3787
3786
  border: none;
3788
3787
  cursor: pointer;
@@ -3858,22 +3857,34 @@
3858
3857
  justify-content: center;
3859
3858
  }
3860
3859
 
3860
+ .ColumnConfigDialog-module__selectAllLabel___aHo9AjJU {
3861
+ display: flex;
3862
+ align-items: center;
3863
+ gap: calc(var(--osdk-surface-spacing) * 3);
3864
+ cursor: pointer;
3865
+ color: var(--osdk-typography-color-muted);
3866
+ font-size: var(--osdk-typography-size-body-small);
3867
+ font-weight: var(--osdk-typography-weight-bold);
3868
+ }
3869
+
3870
+ .ColumnConfigDialog-module__propertyLabel___m2fvLTlr {
3871
+ display: flex;
3872
+ align-items: center;
3873
+ gap: calc(var(--osdk-surface-spacing) * 3);
3874
+ cursor: pointer;
3875
+ flex: 1;
3876
+ min-width: 0;
3877
+ }
3878
+
3861
3879
  .ColumnConfigDialog-module__propertyName___zHUrcS9I {
3862
3880
  text-align: left;
3863
3881
  flex: 1;
3864
3882
  font-size: var(--osdk-typography-size-body-medium);
3865
3883
  font-weight: 400;
3866
3884
  color: var(--osdk-typography-color-default-rest);
3867
- padding: 0;
3868
3885
  overflow: hidden;
3869
3886
  text-overflow: ellipsis;
3870
3887
  white-space: nowrap;
3871
- background: none;
3872
- border: none;
3873
- &:focus-visible {
3874
- outline: var(--osdk-focus-outline);
3875
- outline-offset: var(--osdk-focus-visible-outline-offset);
3876
- }
3877
3888
  }
3878
3889
 
3879
3890
  .ColumnConfigDialog-module__infoIcon___DJouN8cT {
@@ -5491,16 +5491,16 @@ function AvailableColumnsList({
5491
5491
  className: ColumnConfigDialog_default.propertiesList
5492
5492
  }, /* @__PURE__ */ React75__default.default.createElement("div", {
5493
5493
  className: ColumnConfigDialog_default.categoryHeader
5494
+ }, /* @__PURE__ */ React75__default.default.createElement("label", {
5495
+ className: ColumnConfigDialog_default.selectAllLabel
5494
5496
  }, /* @__PURE__ */ React75__default.default.createElement(Checkbox, {
5495
5497
  checked: allFilteredSelected,
5496
5498
  indeterminate: someFilteredSelected && !allFilteredSelected,
5497
5499
  onCheckedChange: handleSelectAllClick,
5498
5500
  className: ColumnConfigDialog_default.checkbox
5499
- }), /* @__PURE__ */ React75__default.default.createElement(collapsible.Collapsible.Trigger, {
5501
+ }), "All Columns"), /* @__PURE__ */ React75__default.default.createElement(collapsible.Collapsible.Trigger, {
5500
5502
  className: ColumnConfigDialog_default.categoryTrigger
5501
5503
  }, /* @__PURE__ */ React75__default.default.createElement("span", {
5502
- className: ColumnConfigDialog_default.categoryTitle
5503
- }, "All Columns"), /* @__PURE__ */ React75__default.default.createElement("span", {
5504
5504
  className: ColumnConfigDialog_default.categoryCount
5505
5505
  }, selectedCount, "/", totalCount), /* @__PURE__ */ React75__default.default.createElement(icons.CaretDown, {
5506
5506
  className: ColumnConfigDialog_default.caretIcon
@@ -5526,14 +5526,15 @@ function PropertyItem({
5526
5526
  }, [onToggle, column]);
5527
5527
  return /* @__PURE__ */ React75__default.default.createElement("div", {
5528
5528
  className: ColumnConfigDialog_default.propertyItem
5529
+ }, /* @__PURE__ */ React75__default.default.createElement("label", {
5530
+ className: ColumnConfigDialog_default.propertyLabel
5529
5531
  }, /* @__PURE__ */ React75__default.default.createElement(Checkbox, {
5530
5532
  checked: isSelected,
5531
5533
  onCheckedChange: handleClick,
5532
5534
  className: ColumnConfigDialog_default.checkbox
5533
- }), /* @__PURE__ */ React75__default.default.createElement(button.Button, {
5534
- onClick: handleClick,
5535
+ }), /* @__PURE__ */ React75__default.default.createElement("span", {
5535
5536
  className: ColumnConfigDialog_default.propertyName
5536
- }, column.label), showInfoIcon && /* @__PURE__ */ React75__default.default.createElement(icons.SmallInfoSign, {
5537
+ }, column.label)), showInfoIcon && /* @__PURE__ */ React75__default.default.createElement(icons.SmallInfoSign, {
5537
5538
  className: ColumnConfigDialog_default.infoIcon
5538
5539
  }));
5539
5540
  }
@@ -9907,6 +9908,7 @@ exports.BasePdfViewer = BasePdfViewer;
9907
9908
  exports.BaseTable = BaseTable;
9908
9909
  exports.ColumnConfigDialog = ColumnConfigDialog;
9909
9910
  exports.FilterList = FilterList;
9911
+ exports.MultiColumnSortDialog = MultiColumnSortDialog;
9910
9912
  exports.ObjectTable = ObjectTable;
9911
9913
  exports.PdfViewer = PdfViewer;
9912
9914
  exports.PdfViewerAnnotationLayer = PdfViewerAnnotationLayer;