@osdk/react-components 0.61.0 → 0.61.1-main-6f2b7e6471f9cac3cb8b722bfeee8df899c38891

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.
Files changed (100) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/build/browser/object-table/Table.js +1 -1
  3. package/build/browser/object-table/Table.js.map +1 -1
  4. package/build/browser/util/UserAgent.js +1 -1
  5. package/build/browser/util/UserAgent.js.map +1 -1
  6. package/build/cjs/{chunk-7R2QPKDB.cjs → chunk-3EK3CQES.cjs} +4 -4
  7. package/build/cjs/{chunk-7R2QPKDB.cjs.map → chunk-3EK3CQES.cjs.map} +1 -1
  8. package/build/cjs/{chunk-CHPLIOOB.cjs → chunk-3SO5ESAA.cjs} +5 -5
  9. package/build/cjs/chunk-3SO5ESAA.cjs.map +1 -0
  10. package/build/cjs/{chunk-NTBCTN2U.cjs → chunk-43VQHZTH.cjs} +4 -4
  11. package/build/cjs/{chunk-NTBCTN2U.cjs.map → chunk-43VQHZTH.cjs.map} +1 -1
  12. package/build/cjs/{chunk-NUK5FOSF.cjs → chunk-4JJN5PZX.cjs} +4 -4
  13. package/build/cjs/{chunk-NUK5FOSF.cjs.map → chunk-4JJN5PZX.cjs.map} +1 -1
  14. package/build/cjs/{chunk-DTRPRRNF.cjs → chunk-6QTFMXRR.cjs} +4 -4
  15. package/build/cjs/{chunk-DTRPRRNF.cjs.map → chunk-6QTFMXRR.cjs.map} +1 -1
  16. package/build/cjs/chunk-7JEDFBV5.cjs +11 -0
  17. package/build/cjs/{chunk-L4LPGT2S.cjs.map → chunk-7JEDFBV5.cjs.map} +1 -1
  18. package/build/cjs/{chunk-IZ74MWVK.cjs → chunk-BAEL4WP3.cjs} +4 -4
  19. package/build/cjs/{chunk-IZ74MWVK.cjs.map → chunk-BAEL4WP3.cjs.map} +1 -1
  20. package/build/cjs/{chunk-DIFKL7BU.cjs → chunk-CNWKZSTT.cjs} +4 -4
  21. package/build/cjs/{chunk-DIFKL7BU.cjs.map → chunk-CNWKZSTT.cjs.map} +1 -1
  22. package/build/cjs/chunk-CYKCYTAM.cjs +12 -0
  23. package/build/cjs/{chunk-MWNYJFG6.cjs.map → chunk-CYKCYTAM.cjs.map} +1 -1
  24. package/build/cjs/{chunk-NBECY2US.cjs → chunk-D4FJMV2C.cjs} +3 -3
  25. package/build/cjs/chunk-D4FJMV2C.cjs.map +1 -0
  26. package/build/cjs/{chunk-YHMDFD5J.cjs → chunk-EGEGGJOY.cjs} +4 -4
  27. package/build/cjs/{chunk-YHMDFD5J.cjs.map → chunk-EGEGGJOY.cjs.map} +1 -1
  28. package/build/cjs/chunk-FQMAH6UJ.cjs +11 -0
  29. package/build/cjs/{chunk-2L52ISL4.cjs.map → chunk-FQMAH6UJ.cjs.map} +1 -1
  30. package/build/cjs/chunk-GYOEH2R7.cjs +48 -0
  31. package/build/cjs/{chunk-WL56Z5NS.cjs.map → chunk-GYOEH2R7.cjs.map} +1 -1
  32. package/build/cjs/chunk-GZ5AEEG3.cjs +11 -0
  33. package/build/cjs/{chunk-ROVEY2XZ.cjs.map → chunk-GZ5AEEG3.cjs.map} +1 -1
  34. package/build/cjs/{chunk-3SBGGTFL.cjs → chunk-KTL2FCYA.cjs} +4 -4
  35. package/build/cjs/{chunk-3SBGGTFL.cjs.map → chunk-KTL2FCYA.cjs.map} +1 -1
  36. package/build/cjs/{chunk-RJXOGQTP.cjs → chunk-MOZTYHNU.cjs} +4 -4
  37. package/build/cjs/{chunk-RJXOGQTP.cjs.map → chunk-MOZTYHNU.cjs.map} +1 -1
  38. package/build/cjs/chunk-NZHMVT2H.cjs +34 -0
  39. package/build/cjs/{chunk-BOUML6UZ.cjs.map → chunk-NZHMVT2H.cjs.map} +1 -1
  40. package/build/cjs/{chunk-4N5G4SGE.cjs → chunk-OJ2XZKCO.cjs} +4 -4
  41. package/build/cjs/{chunk-4N5G4SGE.cjs.map → chunk-OJ2XZKCO.cjs.map} +1 -1
  42. package/build/cjs/chunk-RBCRLNY2.cjs +12 -0
  43. package/build/cjs/{chunk-57GL4OIU.cjs.map → chunk-RBCRLNY2.cjs.map} +1 -1
  44. package/build/cjs/chunk-SGYLT3YM.cjs +11 -0
  45. package/build/cjs/{chunk-LNOI7H2O.cjs.map → chunk-SGYLT3YM.cjs.map} +1 -1
  46. package/build/cjs/{chunk-3CGO6BJA.cjs → chunk-TBBYINRJ.cjs} +8 -8
  47. package/build/cjs/{chunk-3CGO6BJA.cjs.map → chunk-TBBYINRJ.cjs.map} +1 -1
  48. package/build/cjs/{chunk-QCVVEZ4E.cjs → chunk-UGNE4UMB.cjs} +5 -5
  49. package/build/cjs/{chunk-QCVVEZ4E.cjs.map → chunk-UGNE4UMB.cjs.map} +1 -1
  50. package/build/cjs/{chunk-N6FIHXUT.cjs → chunk-VEAG2VGR.cjs} +5 -5
  51. package/build/cjs/{chunk-N6FIHXUT.cjs.map → chunk-VEAG2VGR.cjs.map} +1 -1
  52. package/build/cjs/chunk-VQIOR7KQ.cjs +11 -0
  53. package/build/cjs/{chunk-K4EZHHG5.cjs.map → chunk-VQIOR7KQ.cjs.map} +1 -1
  54. package/build/cjs/{chunk-HMCDTUEW.cjs → chunk-VXQFJ42Z.cjs} +4 -4
  55. package/build/cjs/{chunk-HMCDTUEW.cjs.map → chunk-VXQFJ42Z.cjs.map} +1 -1
  56. package/build/cjs/chunk-WEROL5RR.cjs +11 -0
  57. package/build/cjs/{chunk-ACHOHMXA.cjs.map → chunk-WEROL5RR.cjs.map} +1 -1
  58. package/build/cjs/public/action-form.cjs +4 -4
  59. package/build/cjs/public/document-viewer.cjs +4 -4
  60. package/build/cjs/public/email-viewer.cjs +3 -3
  61. package/build/cjs/public/experimental/action-form.cjs +5 -5
  62. package/build/cjs/public/experimental/cbac-picker.cjs +11 -11
  63. package/build/cjs/public/experimental/document-viewer.cjs +5 -5
  64. package/build/cjs/public/experimental/email-viewer.cjs +5 -5
  65. package/build/cjs/public/experimental/filter-list.cjs +16 -16
  66. package/build/cjs/public/experimental/image-viewer.cjs +5 -5
  67. package/build/cjs/public/experimental/markdown-renderer.cjs +7 -7
  68. package/build/cjs/public/experimental/object-table.cjs +23 -23
  69. package/build/cjs/public/experimental/pdf-viewer.cjs +25 -25
  70. package/build/cjs/public/experimental/spreadsheet-viewer.cjs +5 -5
  71. package/build/cjs/public/experimental/tiff-renderer.cjs +7 -7
  72. package/build/cjs/public/experimental/video-viewer.cjs +5 -5
  73. package/build/cjs/public/experimental/xml-viewer.cjs +5 -5
  74. package/build/cjs/public/experimental.cjs +112 -112
  75. package/build/cjs/public/filter-list.cjs +15 -15
  76. package/build/cjs/public/image-viewer.cjs +3 -3
  77. package/build/cjs/public/markdown-viewer.cjs +3 -3
  78. package/build/cjs/public/object-table.cjs +22 -22
  79. package/build/cjs/public/pdf-viewer.cjs +7 -7
  80. package/build/cjs/public/spreadsheet-viewer.cjs +3 -3
  81. package/build/cjs/public/tiff-viewer.cjs +3 -3
  82. package/build/cjs/public/video-viewer.cjs +3 -3
  83. package/build/cjs/public/xml-viewer.cjs +3 -3
  84. package/build/esm/object-table/Table.js +1 -1
  85. package/build/esm/object-table/Table.js.map +1 -1
  86. package/build/esm/util/UserAgent.js +1 -1
  87. package/build/esm/util/UserAgent.js.map +1 -1
  88. package/package.json +8 -8
  89. package/build/cjs/chunk-2L52ISL4.cjs +0 -11
  90. package/build/cjs/chunk-57GL4OIU.cjs +0 -12
  91. package/build/cjs/chunk-ACHOHMXA.cjs +0 -11
  92. package/build/cjs/chunk-BOUML6UZ.cjs +0 -34
  93. package/build/cjs/chunk-CHPLIOOB.cjs.map +0 -1
  94. package/build/cjs/chunk-K4EZHHG5.cjs +0 -11
  95. package/build/cjs/chunk-L4LPGT2S.cjs +0 -11
  96. package/build/cjs/chunk-LNOI7H2O.cjs +0 -11
  97. package/build/cjs/chunk-MWNYJFG6.cjs +0 -12
  98. package/build/cjs/chunk-NBECY2US.cjs.map +0 -1
  99. package/build/cjs/chunk-ROVEY2XZ.cjs +0 -11
  100. package/build/cjs/chunk-WL56Z5NS.cjs +0 -48
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @osdk/react-components
2
2
 
3
+ ## 0.61.1-main-6f2b7e6471f9cac3cb8b722bfeee8df899c38891
4
+
5
+ ### Patch Changes
6
+
7
+ - cb903af: Prevent the default and custom table empty states from rendering while the initial data is loading.
8
+ - Updated dependencies [2ab4d7c]
9
+ - Updated dependencies [bd50cd9]
10
+ - @osdk/api@2.77.0-main-6f2b7e6471f9cac3cb8b722bfeee8df899c38891
11
+ - @osdk/client@2.77.0-main-6f2b7e6471f9cac3cb8b722bfeee8df899c38891
12
+ - @osdk/react@2.77.0-main-6f2b7e6471f9cac3cb8b722bfeee8df899c38891
13
+
3
14
  ## 0.61.0
4
15
 
5
16
  ### Minor Changes
@@ -162,7 +162,7 @@ function BaseTableInner({
162
162
  setFocusedRowId: setFocusedRowId,
163
163
  isInEditMode: editableConfig?.editModeState.isActive,
164
164
  getRowAttributes: getRowAttributes
165
- }))), !hasData && error == null && (renderEmptyState != null ? renderEmptyState() : /*#__PURE__*/React.createElement(NonIdealState, {
165
+ }))), !hasData && !isLoading && error == null && (renderEmptyState != null ? renderEmptyState() : /*#__PURE__*/React.createElement(NonIdealState, {
166
166
  message: "No Data"
167
167
  })), error != null && /*#__PURE__*/React.createElement(NonIdealState, {
168
168
  message: `Error Loading Data: ${error.message}`
@@ -1 +1 @@
1
- {"version":3,"file":"Table.js","names":["classNames","React","useCallback","useEffect","useRef","useState","PortalContainerProvider","useFocusedRow","LoadingStateTable","NonIdealState","TableBody","TableEditContainer","TableHeader","SCROLL_FETCH_THRESHOLD","isColumnDeclaredEditable","PortalTrackerProvider","usePortalTracker","styles","BaseTable","props","createElement","BaseTableInner","table","isLoading","fetchNextPage","onRowClick","onColumnHeaderClick","rowHeight","renderCellContextMenu","className","error","headerMenuFeatureFlags","editableConfig","getRowAttributes","showEditFooter","renderEmptyState","focusedRowId","focusedRowIdProp","onFocusedRowChanged","tableContainerRef","objectTablePortalRef","isLoadingMore","setIsLoadingMore","getRowById","id","getRow","original","setFocusedRowId","portalTracker","options","meta","fetchingRef","fetchMoreOnEndReached","containerRefElement","current","scrollHeight","scrollTop","clientHeight","handleScroll","e","currentTarget","rows","getRowModel","headerGroups","getHeaderGroups","hasData","length","hasEditableColumns","getAllColumns","some","column","columnDef","editable","handleClickOutside","event","target","contains","containsElement","document","addEventListener","removeEventListener","container","ref","osdkTableWrapper","osdkTableContainer","onScroll","Fragment","isInEditMode","editModeState","isActive","message","hasFocusedRow"],"sources":["Table.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 { Cell, RowData, Table } from \"@tanstack/react-table\";\nimport classNames from \"classnames\";\nimport React, {\n type ReactElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { PortalContainerProvider } from \"../shared/PortalContainerContext.js\";\nimport { useFocusedRow } from \"./hooks/useFocusedRow.js\";\nimport { LoadingStateTable } from \"./LoadingStateTable.js\";\nimport { NonIdealState } from \"./NonIdealState.js\";\nimport { TableBody } from \"./TableBody.js\";\nimport { TableEditContainer } from \"./TableEditContainer.js\";\nimport { TableHeader } from \"./TableHeader.js\";\nimport type { HeaderMenuFeatureFlags } from \"./TableHeaderWithPopover.js\";\nimport { SCROLL_FETCH_THRESHOLD } from \"./utils/constants.js\";\nimport { isColumnDeclaredEditable } from \"./utils/editableUtils.js\";\nimport {\n PortalTrackerProvider,\n usePortalTracker,\n} from \"./utils/PortalTracker.js\";\nimport type {\n CellEditInfo,\n EditableConfig,\n EditFieldConfig,\n} from \"./utils/types.js\";\n\nimport styles from \"./Table.module.css\";\n\ndeclare module \"@tanstack/react-table\" {\n interface ColumnMeta<TData extends RowData = unknown, TValue = unknown> {\n columnName?: string;\n isAsyncColumn?: boolean;\n isVisible?: boolean;\n editable?: boolean | ((object: TData) => boolean);\n dataType?: string;\n /**\n * For columns backed by a `\"marking\"` property, the marking subtype as\n * surfaced by the platform: `\"CBAC\"` for classification-based access\n * control or `\"MANDATORY\"` for mandatory markings. Absent for\n * non-marking columns and for marking columns whose subtype isn't\n * exposed.\n */\n markingType?: \"CBAC\" | \"MANDATORY\";\n editFieldConfig?: EditFieldConfig<TData>;\n validateEdit?: (value: unknown) => Promise<string | undefined>;\n }\n interface TableMeta<TData extends RowData = unknown> {\n onCellEdit?: (cellId: string, info: CellEditInfo<TData, unknown>) => void;\n onCellValidationError?: (cellId: string, error: string) => void;\n clearCellValidationError?: (cellId: string) => void;\n cellEdits?: Record<string, CellEditInfo<TData, unknown>>;\n isInEditMode?: boolean;\n validationErrors?: Map<string, string>;\n focusedRowId?: string | null;\n }\n}\n\nexport interface BaseTableProps<TData extends RowData> {\n /**\n * The TanStack React Table instance backing the table. Build it with\n * `useReactTable` (see the `useColumnDefs` / `useObjectTableData` hooks for\n * the pieces `ObjectTable` itself feeds in).\n */\n table: Table<TData>;\n\n /**\n * Whether a fetch is in flight. While loading with no rows yet, a skeleton\n * table is rendered in place of the header and body; while loading with rows\n * already present, an extra skeleton row is appended and further\n * `fetchNextPage` calls are suppressed.\n */\n isLoading?: boolean;\n\n /**\n * Loads the next page of rows. Called when the user scrolls near the bottom\n * of the table. Omit it to disable infinite scrolling.\n */\n fetchNextPage?: () => Promise<void>;\n\n /**\n * Called when a row is clicked.\n *\n * @param row The row data of the clicked row\n */\n onRowClick?: (row: TData) => void;\n\n /**\n * Called when a column header is clicked.\n *\n * The dropdown menu trigger is excluded — clicking the chevron opens the\n * header menu instead of firing this callback.\n *\n * @param columnId The id of the clicked column\n */\n onColumnHeaderClick?: (columnId: string) => void;\n\n /**\n * The height of each row in pixels. Also drives row virtualization, so an\n * accurate value keeps scrolling smooth.\n *\n * @default 40\n */\n rowHeight?: number;\n\n /**\n * If provided, will render this context menu when right clicking on a cell\n */\n renderCellContextMenu?: (\n row: TData,\n cell: Cell<TData, unknown>,\n ) => React.ReactNode;\n\n /**\n * Toggles which items appear in the column header menu (sorting, pinning,\n * resizing, and so on). Every flag defaults to shown. See\n * {@link HeaderMenuFeatureFlags}.\n */\n headerMenuFeatureFlags?: HeaderMenuFeatureFlags;\n\n /**\n * Wiring for inline cell editing — pending edits, edit-mode state, and the\n * submit/clear/validation callbacks. Omit it to render a read-only table.\n * `useEditableTable` produces this shape. See {@link EditableConfig}.\n */\n editableConfig?: EditableConfig<TData, unknown>;\n\n /**\n * Whether to render the bottom edit footer. Defaults to `true`; the\n * footer is only rendered when the table has at least one editable\n * column (`hasEditableColumns`).\n */\n showEditFooter?: boolean;\n\n /**\n * The row ID of the row to render as visually focused. When provided, focus state is controlled by the caller.\n */\n focusedRowId?: string | null;\n\n /**\n * Fires whenever the focused row changes, in both controlled and\n * uncontrolled modes.\n */\n onFocusedRowChanged?: (row: TData | null) => void;\n\n /**\n * Render override for the empty state. Called when the table has no\n * rows and no error. When omitted, a default \"No Data\" indicator is\n * rendered.\n */\n renderEmptyState?: () => React.ReactNode;\n\n /**\n * A fetch error to surface. When set, an error message is rendered in place\n * of the empty state.\n */\n error?: Error;\n\n /**\n * Returns extra HTML attributes (typically `data-*`) to apply to each\n * row element. Use this to drive conditional row styling\n */\n getRowAttributes?: (object: TData) => Record<string, string | undefined>;\n\n /**\n * Class name applied to the table's outermost wrapper element.\n */\n className?: string;\n}\n\nexport function BaseTable<TData extends RowData>(\n props: BaseTableProps<TData>,\n): ReactElement {\n return (\n <PortalTrackerProvider>\n <BaseTableInner {...props} />\n </PortalTrackerProvider>\n );\n}\n\nfunction BaseTableInner<TData extends RowData>({\n table,\n isLoading,\n fetchNextPage,\n onRowClick,\n onColumnHeaderClick,\n rowHeight,\n renderCellContextMenu,\n className,\n error,\n headerMenuFeatureFlags,\n editableConfig,\n getRowAttributes,\n showEditFooter = true,\n renderEmptyState,\n focusedRowId: focusedRowIdProp,\n onFocusedRowChanged,\n}: BaseTableProps<TData>): ReactElement {\n const tableContainerRef = useRef<HTMLDivElement>(null);\n const objectTablePortalRef = useRef<HTMLDivElement>(null);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n\n const getRowById = useCallback(\n (id: string) => {\n try {\n return table.getRow(id, true)?.original ?? null;\n } catch {\n // table.getRow throws when the id no longer matches a row\n // (e.g. the row was removed or has not loaded yet). Treat a\n // missing row as \"no focus\" rather than crashing.\n return null;\n }\n },\n [table],\n );\n\n const { focusedRowId, setFocusedRowId } = useFocusedRow<TData>({\n focusedRowId: focusedRowIdProp,\n onFocusedRowChanged,\n getRowById,\n });\n const portalTracker = usePortalTracker();\n\n // Sync focusedRowId into table meta so cell renderers (which only\n // receive `table`) can read it without extra prop drilling.\n // Assigned synchronously so children see the current value in the\n // same render pass. This is safe because meta is a mutable bag that\n // TanStack Table never snapshots or shallow-compares.\n if (table.options.meta) {\n table.options.meta.focusedRowId = focusedRowId;\n }\n\n // Using a ref to prevent duplicate fetches from rapid scroll events while a fetch is in-flight\n const fetchingRef = useRef(false);\n\n useEffect(() => {\n if (!isLoading || fetchNextPage == null) {\n setIsLoadingMore(false);\n }\n }, [isLoading, fetchNextPage]);\n\n const fetchMoreOnEndReached = useCallback(\n async (containerRefElement?: HTMLDivElement | null) => {\n if (containerRefElement && !fetchingRef.current && !isLoadingMore) {\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement;\n if (\n scrollHeight - scrollTop - clientHeight < SCROLL_FETCH_THRESHOLD &&\n !isLoading &&\n fetchNextPage != null\n ) {\n fetchingRef.current = true;\n setIsLoadingMore(true);\n try {\n await fetchNextPage();\n } finally {\n fetchingRef.current = false;\n }\n }\n }\n },\n [fetchNextPage, isLoading, isLoadingMore],\n );\n\n const handleScroll = useCallback(\n async (e: React.UIEvent<HTMLDivElement>) => {\n await fetchMoreOnEndReached(e.currentTarget);\n },\n [fetchMoreOnEndReached],\n );\n\n const rows = table.getRowModel().rows;\n const headerGroups = table.getHeaderGroups();\n const hasData = rows.length > 0;\n\n const hasEditableColumns = table\n .getAllColumns()\n .some((column) =>\n isColumnDeclaredEditable(column.columnDef.meta?.editable),\n );\n\n // Use pointerdown instead of click to detect outside interactions.\n // base-ui's Select renders a full-screen backdrop that intercepts\n // pointerdown to close the popup. By the time the click event fires,\n // the backdrop is unmounted and event.target falls through to <body>,\n // which would incorrectly trigger the outside-click handler.\n // At pointerdown time the backdrop is still in the DOM, so\n // portalTracker.containsElement correctly identifies it.\n useEffect(() => {\n const handleClickOutside = (event: PointerEvent) => {\n const target = event.target as Node;\n if (\n tableContainerRef.current &&\n !tableContainerRef.current.contains(target) &&\n !portalTracker?.containsElement(target)\n ) {\n setFocusedRowId(null);\n }\n };\n\n document.addEventListener(\"pointerdown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"pointerdown\", handleClickOutside);\n };\n }, [portalTracker, setFocusedRowId]);\n\n return (\n <PortalContainerProvider container={objectTablePortalRef}>\n <div\n ref={objectTablePortalRef}\n className={classNames(styles.osdkTableWrapper, className)}\n >\n <div\n ref={tableContainerRef}\n className={styles.osdkTableContainer}\n onScroll={handleScroll}\n >\n <table>\n {isLoading && !hasData ? (\n <LoadingStateTable\n table={table}\n headerGroups={headerGroups}\n rowHeight={rowHeight}\n tableContainerRef={tableContainerRef}\n />\n ) : (\n <>\n <TableHeader\n table={table}\n headerMenuFeatureFlags={headerMenuFeatureFlags}\n onColumnHeaderClick={onColumnHeaderClick}\n />\n <TableBody\n rows={rows}\n tableContainerRef={tableContainerRef}\n onRowClick={onRowClick}\n rowHeight={rowHeight}\n renderCellContextMenu={renderCellContextMenu}\n isLoadingMore={isLoadingMore}\n headerGroups={headerGroups}\n focusedRowId={focusedRowId}\n setFocusedRowId={setFocusedRowId}\n isInEditMode={editableConfig?.editModeState.isActive}\n getRowAttributes={getRowAttributes}\n />\n </>\n )}\n </table>\n {!hasData &&\n error == null &&\n (renderEmptyState != null ? (\n renderEmptyState()\n ) : (\n <NonIdealState message={\"No Data\"} />\n ))}\n {error != null && (\n <NonIdealState message={`Error Loading Data: ${error.message}`} />\n )}\n </div>\n {showEditFooter && hasEditableColumns && editableConfig && (\n <TableEditContainer\n editableConfig={editableConfig}\n hasFocusedRow={focusedRowId != null}\n />\n )}\n </div>\n </PortalContainerProvider>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Table.js","names":["classNames","React","useCallback","useEffect","useRef","useState","PortalContainerProvider","useFocusedRow","LoadingStateTable","NonIdealState","TableBody","TableEditContainer","TableHeader","SCROLL_FETCH_THRESHOLD","isColumnDeclaredEditable","PortalTrackerProvider","usePortalTracker","styles","BaseTable","props","createElement","BaseTableInner","table","isLoading","fetchNextPage","onRowClick","onColumnHeaderClick","rowHeight","renderCellContextMenu","className","error","headerMenuFeatureFlags","editableConfig","getRowAttributes","showEditFooter","renderEmptyState","focusedRowId","focusedRowIdProp","onFocusedRowChanged","tableContainerRef","objectTablePortalRef","isLoadingMore","setIsLoadingMore","getRowById","id","getRow","original","setFocusedRowId","portalTracker","options","meta","fetchingRef","fetchMoreOnEndReached","containerRefElement","current","scrollHeight","scrollTop","clientHeight","handleScroll","e","currentTarget","rows","getRowModel","headerGroups","getHeaderGroups","hasData","length","hasEditableColumns","getAllColumns","some","column","columnDef","editable","handleClickOutside","event","target","contains","containsElement","document","addEventListener","removeEventListener","container","ref","osdkTableWrapper","osdkTableContainer","onScroll","Fragment","isInEditMode","editModeState","isActive","message","hasFocusedRow"],"sources":["Table.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 { Cell, RowData, Table } from \"@tanstack/react-table\";\nimport classNames from \"classnames\";\nimport React, {\n type ReactElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { PortalContainerProvider } from \"../shared/PortalContainerContext.js\";\nimport { useFocusedRow } from \"./hooks/useFocusedRow.js\";\nimport { LoadingStateTable } from \"./LoadingStateTable.js\";\nimport { NonIdealState } from \"./NonIdealState.js\";\nimport { TableBody } from \"./TableBody.js\";\nimport { TableEditContainer } from \"./TableEditContainer.js\";\nimport { TableHeader } from \"./TableHeader.js\";\nimport type { HeaderMenuFeatureFlags } from \"./TableHeaderWithPopover.js\";\nimport { SCROLL_FETCH_THRESHOLD } from \"./utils/constants.js\";\nimport { isColumnDeclaredEditable } from \"./utils/editableUtils.js\";\nimport {\n PortalTrackerProvider,\n usePortalTracker,\n} from \"./utils/PortalTracker.js\";\nimport type {\n CellEditInfo,\n EditableConfig,\n EditFieldConfig,\n} from \"./utils/types.js\";\n\nimport styles from \"./Table.module.css\";\n\ndeclare module \"@tanstack/react-table\" {\n interface ColumnMeta<TData extends RowData = unknown, TValue = unknown> {\n columnName?: string;\n isAsyncColumn?: boolean;\n isVisible?: boolean;\n editable?: boolean | ((object: TData) => boolean);\n dataType?: string;\n /**\n * For columns backed by a `\"marking\"` property, the marking subtype as\n * surfaced by the platform: `\"CBAC\"` for classification-based access\n * control or `\"MANDATORY\"` for mandatory markings. Absent for\n * non-marking columns and for marking columns whose subtype isn't\n * exposed.\n */\n markingType?: \"CBAC\" | \"MANDATORY\";\n editFieldConfig?: EditFieldConfig<TData>;\n validateEdit?: (value: unknown) => Promise<string | undefined>;\n }\n interface TableMeta<TData extends RowData = unknown> {\n onCellEdit?: (cellId: string, info: CellEditInfo<TData, unknown>) => void;\n onCellValidationError?: (cellId: string, error: string) => void;\n clearCellValidationError?: (cellId: string) => void;\n cellEdits?: Record<string, CellEditInfo<TData, unknown>>;\n isInEditMode?: boolean;\n validationErrors?: Map<string, string>;\n focusedRowId?: string | null;\n }\n}\n\nexport interface BaseTableProps<TData extends RowData> {\n /**\n * The TanStack React Table instance backing the table. Build it with\n * `useReactTable` (see the `useColumnDefs` / `useObjectTableData` hooks for\n * the pieces `ObjectTable` itself feeds in).\n */\n table: Table<TData>;\n\n /**\n * Whether a fetch is in flight. While loading with no rows yet, a skeleton\n * table is rendered in place of the header and body; while loading with rows\n * already present, an extra skeleton row is appended and further\n * `fetchNextPage` calls are suppressed.\n */\n isLoading?: boolean;\n\n /**\n * Loads the next page of rows. Called when the user scrolls near the bottom\n * of the table. Omit it to disable infinite scrolling.\n */\n fetchNextPage?: () => Promise<void>;\n\n /**\n * Called when a row is clicked.\n *\n * @param row The row data of the clicked row\n */\n onRowClick?: (row: TData) => void;\n\n /**\n * Called when a column header is clicked.\n *\n * The dropdown menu trigger is excluded — clicking the chevron opens the\n * header menu instead of firing this callback.\n *\n * @param columnId The id of the clicked column\n */\n onColumnHeaderClick?: (columnId: string) => void;\n\n /**\n * The height of each row in pixels. Also drives row virtualization, so an\n * accurate value keeps scrolling smooth.\n *\n * @default 40\n */\n rowHeight?: number;\n\n /**\n * If provided, will render this context menu when right clicking on a cell\n */\n renderCellContextMenu?: (\n row: TData,\n cell: Cell<TData, unknown>,\n ) => React.ReactNode;\n\n /**\n * Toggles which items appear in the column header menu (sorting, pinning,\n * resizing, and so on). Every flag defaults to shown. See\n * {@link HeaderMenuFeatureFlags}.\n */\n headerMenuFeatureFlags?: HeaderMenuFeatureFlags;\n\n /**\n * Wiring for inline cell editing — pending edits, edit-mode state, and the\n * submit/clear/validation callbacks. Omit it to render a read-only table.\n * `useEditableTable` produces this shape. See {@link EditableConfig}.\n */\n editableConfig?: EditableConfig<TData, unknown>;\n\n /**\n * Whether to render the bottom edit footer. Defaults to `true`; the\n * footer is only rendered when the table has at least one editable\n * column (`hasEditableColumns`).\n */\n showEditFooter?: boolean;\n\n /**\n * The row ID of the row to render as visually focused. When provided, focus state is controlled by the caller.\n */\n focusedRowId?: string | null;\n\n /**\n * Fires whenever the focused row changes, in both controlled and\n * uncontrolled modes.\n */\n onFocusedRowChanged?: (row: TData | null) => void;\n\n /**\n * Render override for the empty state. Called when the table has no\n * rows and no error. When omitted, a default \"No Data\" indicator is\n * rendered.\n */\n renderEmptyState?: () => React.ReactNode;\n\n /**\n * A fetch error to surface. When set, an error message is rendered in place\n * of the empty state.\n */\n error?: Error;\n\n /**\n * Returns extra HTML attributes (typically `data-*`) to apply to each\n * row element. Use this to drive conditional row styling\n */\n getRowAttributes?: (object: TData) => Record<string, string | undefined>;\n\n /**\n * Class name applied to the table's outermost wrapper element.\n */\n className?: string;\n}\n\nexport function BaseTable<TData extends RowData>(\n props: BaseTableProps<TData>,\n): ReactElement {\n return (\n <PortalTrackerProvider>\n <BaseTableInner {...props} />\n </PortalTrackerProvider>\n );\n}\n\nfunction BaseTableInner<TData extends RowData>({\n table,\n isLoading,\n fetchNextPage,\n onRowClick,\n onColumnHeaderClick,\n rowHeight,\n renderCellContextMenu,\n className,\n error,\n headerMenuFeatureFlags,\n editableConfig,\n getRowAttributes,\n showEditFooter = true,\n renderEmptyState,\n focusedRowId: focusedRowIdProp,\n onFocusedRowChanged,\n}: BaseTableProps<TData>): ReactElement {\n const tableContainerRef = useRef<HTMLDivElement>(null);\n const objectTablePortalRef = useRef<HTMLDivElement>(null);\n const [isLoadingMore, setIsLoadingMore] = useState(false);\n\n const getRowById = useCallback(\n (id: string) => {\n try {\n return table.getRow(id, true)?.original ?? null;\n } catch {\n // table.getRow throws when the id no longer matches a row\n // (e.g. the row was removed or has not loaded yet). Treat a\n // missing row as \"no focus\" rather than crashing.\n return null;\n }\n },\n [table],\n );\n\n const { focusedRowId, setFocusedRowId } = useFocusedRow<TData>({\n focusedRowId: focusedRowIdProp,\n onFocusedRowChanged,\n getRowById,\n });\n const portalTracker = usePortalTracker();\n\n // Sync focusedRowId into table meta so cell renderers (which only\n // receive `table`) can read it without extra prop drilling.\n // Assigned synchronously so children see the current value in the\n // same render pass. This is safe because meta is a mutable bag that\n // TanStack Table never snapshots or shallow-compares.\n if (table.options.meta) {\n table.options.meta.focusedRowId = focusedRowId;\n }\n\n // Using a ref to prevent duplicate fetches from rapid scroll events while a fetch is in-flight\n const fetchingRef = useRef(false);\n\n useEffect(() => {\n if (!isLoading || fetchNextPage == null) {\n setIsLoadingMore(false);\n }\n }, [isLoading, fetchNextPage]);\n\n const fetchMoreOnEndReached = useCallback(\n async (containerRefElement?: HTMLDivElement | null) => {\n if (containerRefElement && !fetchingRef.current && !isLoadingMore) {\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement;\n if (\n scrollHeight - scrollTop - clientHeight < SCROLL_FETCH_THRESHOLD &&\n !isLoading &&\n fetchNextPage != null\n ) {\n fetchingRef.current = true;\n setIsLoadingMore(true);\n try {\n await fetchNextPage();\n } finally {\n fetchingRef.current = false;\n }\n }\n }\n },\n [fetchNextPage, isLoading, isLoadingMore],\n );\n\n const handleScroll = useCallback(\n async (e: React.UIEvent<HTMLDivElement>) => {\n await fetchMoreOnEndReached(e.currentTarget);\n },\n [fetchMoreOnEndReached],\n );\n\n const rows = table.getRowModel().rows;\n const headerGroups = table.getHeaderGroups();\n const hasData = rows.length > 0;\n\n const hasEditableColumns = table\n .getAllColumns()\n .some((column) =>\n isColumnDeclaredEditable(column.columnDef.meta?.editable),\n );\n\n // Use pointerdown instead of click to detect outside interactions.\n // base-ui's Select renders a full-screen backdrop that intercepts\n // pointerdown to close the popup. By the time the click event fires,\n // the backdrop is unmounted and event.target falls through to <body>,\n // which would incorrectly trigger the outside-click handler.\n // At pointerdown time the backdrop is still in the DOM, so\n // portalTracker.containsElement correctly identifies it.\n useEffect(() => {\n const handleClickOutside = (event: PointerEvent) => {\n const target = event.target as Node;\n if (\n tableContainerRef.current &&\n !tableContainerRef.current.contains(target) &&\n !portalTracker?.containsElement(target)\n ) {\n setFocusedRowId(null);\n }\n };\n\n document.addEventListener(\"pointerdown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"pointerdown\", handleClickOutside);\n };\n }, [portalTracker, setFocusedRowId]);\n\n return (\n <PortalContainerProvider container={objectTablePortalRef}>\n <div\n ref={objectTablePortalRef}\n className={classNames(styles.osdkTableWrapper, className)}\n >\n <div\n ref={tableContainerRef}\n className={styles.osdkTableContainer}\n onScroll={handleScroll}\n >\n <table>\n {isLoading && !hasData ? (\n <LoadingStateTable\n table={table}\n headerGroups={headerGroups}\n rowHeight={rowHeight}\n tableContainerRef={tableContainerRef}\n />\n ) : (\n <>\n <TableHeader\n table={table}\n headerMenuFeatureFlags={headerMenuFeatureFlags}\n onColumnHeaderClick={onColumnHeaderClick}\n />\n <TableBody\n rows={rows}\n tableContainerRef={tableContainerRef}\n onRowClick={onRowClick}\n rowHeight={rowHeight}\n renderCellContextMenu={renderCellContextMenu}\n isLoadingMore={isLoadingMore}\n headerGroups={headerGroups}\n focusedRowId={focusedRowId}\n setFocusedRowId={setFocusedRowId}\n isInEditMode={editableConfig?.editModeState.isActive}\n getRowAttributes={getRowAttributes}\n />\n </>\n )}\n </table>\n {!hasData &&\n !isLoading &&\n error == null &&\n (renderEmptyState != null ? (\n renderEmptyState()\n ) : (\n <NonIdealState message={\"No Data\"} />\n ))}\n {error != null && (\n <NonIdealState message={`Error Loading Data: ${error.message}`} />\n )}\n </div>\n {showEditFooter && hasEditableColumns && editableConfig && (\n <TableEditContainer\n editableConfig={editableConfig}\n hasFocusedRow={focusedRowId != null}\n />\n )}\n </div>\n </PortalContainerProvider>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -14,7 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- const PACKAGE_USER_AGENT = `osdk-react-components/${"0.61.0"}`;
17
+ const PACKAGE_USER_AGENT = `osdk-react-components/${"0.61.1-main-6f2b7e6471f9cac3cb8b722bfeee8df899c38891"}`;
18
18
  export function componentUserAgent(componentName) {
19
19
  return `${PACKAGE_USER_AGENT}/${componentName}`;
20
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UserAgent.js","names":["PACKAGE_USER_AGENT","componentUserAgent","componentName"],"sources":["UserAgent.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\nconst PACKAGE_USER_AGENT = `osdk-react-components/${process.env.PACKAGE_VERSION}`;\n\nexport function componentUserAgent(componentName: string): string {\n return `${PACKAGE_USER_AGENT}/${componentName}`;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,kBAAkB,GAAG,mCAAsD;AAEjF,OAAO,SAASC,kBAAkBA,CAACC,aAAqB,EAAU;EAChE,OAAO,GAAGF,kBAAkB,IAAIE,aAAa,EAAE;AACjD","ignoreList":[]}
1
+ {"version":3,"file":"UserAgent.js","names":["PACKAGE_USER_AGENT","componentUserAgent","componentName"],"sources":["UserAgent.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\nconst PACKAGE_USER_AGENT = `osdk-react-components/${process.env.PACKAGE_VERSION}`;\n\nexport function componentUserAgent(componentName: string): string {\n return `${PACKAGE_USER_AGENT}/${componentName}`;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,kBAAkB,GAAG,iFAAsD;AAEjF,OAAO,SAASC,kBAAkBA,CAACC,aAAqB,EAAU;EAChE,OAAO,GAAGF,kBAAkB,IAAIE,aAAa,EAAE;AACjD","ignoreList":[]}
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunk2L52ISL4_cjs = require('./chunk-2L52ISL4.cjs');
3
+ var chunkFQMAH6UJ_cjs = require('./chunk-FQMAH6UJ.cjs');
4
4
  var chunkRVZE7LPI_cjs = require('./chunk-RVZE7LPI.cjs');
5
5
 
6
6
  // src/public/experimental/xml-viewer.ts
7
7
  var BaseXmlViewer2 = chunkRVZE7LPI_cjs.BaseXmlViewer;
8
- var XmlViewer2 = chunk2L52ISL4_cjs.XmlViewer;
8
+ var XmlViewer2 = chunkFQMAH6UJ_cjs.XmlViewer;
9
9
 
10
10
  exports.BaseXmlViewer = BaseXmlViewer2;
11
11
  exports.XmlViewer = XmlViewer2;
12
- //# sourceMappingURL=chunk-7R2QPKDB.cjs.map
13
- //# sourceMappingURL=chunk-7R2QPKDB.cjs.map
12
+ //# sourceMappingURL=chunk-3EK3CQES.cjs.map
13
+ //# sourceMappingURL=chunk-3EK3CQES.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/public/experimental/xml-viewer.ts"],"names":["BaseXmlViewer","XmlViewer"],"mappings":";;;;;;AAmBO,IAAMA,cAAAA,GAAuBA;AAO7B,IAAMC,UAAAA,GAAmBA","file":"chunk-7R2QPKDB.cjs","sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as Stable from \"../xml-viewer.js\";\n\n/** @deprecated Import from `@osdk/react-components/xml-viewer` instead. */\nexport const BaseXmlViewer = Stable.BaseXmlViewer;\n\n/** @deprecated Import from `@osdk/react-components/xml-viewer` instead. */\n\n/** @deprecated Import from `@osdk/react-components/xml-viewer` instead. */\n\n/** @deprecated Import from `@osdk/react-components/xml-viewer` instead. */\nexport const XmlViewer = Stable.XmlViewer;"]}
1
+ {"version":3,"sources":["../../src/public/experimental/xml-viewer.ts"],"names":["BaseXmlViewer","XmlViewer"],"mappings":";;;;;;AAmBO,IAAMA,cAAAA,GAAuBA;AAO7B,IAAMC,UAAAA,GAAmBA","file":"chunk-3EK3CQES.cjs","sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as Stable from \"../xml-viewer.js\";\n\n/** @deprecated Import from `@osdk/react-components/xml-viewer` instead. */\nexport const BaseXmlViewer = Stable.BaseXmlViewer;\n\n/** @deprecated Import from `@osdk/react-components/xml-viewer` instead. */\n\n/** @deprecated Import from `@osdk/react-components/xml-viewer` instead. */\n\n/** @deprecated Import from `@osdk/react-components/xml-viewer` instead. */\nexport const XmlViewer = Stable.XmlViewer;"]}
@@ -10,7 +10,7 @@ var chunk62TDTOSI_cjs = require('./chunk-62TDTOSI.cjs');
10
10
  var chunkYE4F6HIR_cjs = require('./chunk-YE4F6HIR.cjs');
11
11
  var chunk7LXS66DW_cjs = require('./chunk-7LXS66DW.cjs');
12
12
  var chunkQP2LHBCZ_cjs = require('./chunk-QP2LHBCZ.cjs');
13
- var chunkNBECY2US_cjs = require('./chunk-NBECY2US.cjs');
13
+ var chunkD4FJMV2C_cjs = require('./chunk-D4FJMV2C.cjs');
14
14
  var reactTable = require('@tanstack/react-table');
15
15
  var React21 = require('react');
16
16
  var react = require('@osdk/react');
@@ -3155,7 +3155,7 @@ function BaseTableInner({
3155
3155
  setFocusedRowId,
3156
3156
  isInEditMode: editableConfig?.editModeState.isActive,
3157
3157
  getRowAttributes
3158
- }))), !hasData && error == null && (renderEmptyState != null ? renderEmptyState() : /* @__PURE__ */ React21__namespace.default.createElement(NonIdealState, {
3158
+ }))), !hasData && !isLoading && error == null && (renderEmptyState != null ? renderEmptyState() : /* @__PURE__ */ React21__namespace.default.createElement(NonIdealState, {
3159
3159
  message: "No Data"
3160
3160
  })), error != null && /* @__PURE__ */ React21__namespace.default.createElement(NonIdealState, {
3161
3161
  message: `Error Loading Data: ${error.message}`
@@ -3396,7 +3396,7 @@ function ObjectTable({
3396
3396
  }
3397
3397
 
3398
3398
  // src/public/object-table.ts
3399
- var ObjectTable2 = chunkNBECY2US_cjs.withOsdkMetrics(ObjectTable, "ObjectTable");
3399
+ var ObjectTable2 = chunkD4FJMV2C_cjs.withOsdkMetrics(ObjectTable, "ObjectTable");
3400
3400
 
3401
3401
  exports.BaseTable = BaseTable;
3402
3402
  exports.ColumnConfigDialog = ColumnConfigDialog;
@@ -3418,5 +3418,5 @@ exports.useObjectTableSnapshot = useObjectTableSnapshot;
3418
3418
  exports.useRowSelection = useRowSelection;
3419
3419
  exports.useSelectionColumn = useSelectionColumn;
3420
3420
  exports.useTableSorting = useTableSorting;
3421
- //# sourceMappingURL=chunk-CHPLIOOB.cjs.map
3422
- //# sourceMappingURL=chunk-CHPLIOOB.cjs.map
3421
+ //# sourceMappingURL=chunk-3SO5ESAA.cjs.map
3422
+ //# sourceMappingURL=chunk-3SO5ESAA.cjs.map