@open-pioneer/result-list 1.4.0 → 1.5.0-dev.20260910103330

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,5 +1,16 @@
1
1
  # @open-pioneer/result-list
2
2
 
3
+ ## 1.5.0-dev.20260910103330
4
+
5
+ ### Minor Changes
6
+
7
+ - f790fda: Update to Chakra 3.37.0
8
+
9
+ ### Patch Changes
10
+
11
+ - 3203815: Update code to match new react linting rules from oxlint.
12
+ - 09ec7c7: Updated dependencies
13
+
3
14
  ## 1.4.0
4
15
 
5
16
  ### Minor Changes
@@ -69,33 +80,33 @@
69
80
 
70
81
  - 9376a74: Ensure that icons and other decorative elements are hidden from the screen reader using the `aria-hidden="true"` attribute.
71
82
 
72
- The easiest way to do that is to wrap icons into chakra's `<Icon />` component, for example:
83
+ The easiest way to do that is to wrap icons into chakra's `<Icon />` component, for example:
73
84
 
74
- ```tsx
75
- import { Icon } from "@chakra-ui/react";
76
- import { FiX } from "react-icons/fi";
85
+ ```tsx
86
+ import { Icon } from "@chakra-ui/react";
87
+ import { FiX } from "react-icons/fi";
77
88
 
78
- <Icon>
79
- <FiX />
80
- </Icon>;
81
- ```
89
+ <Icon>
90
+ <FiX />
91
+ </Icon>;
92
+ ```
82
93
 
83
94
  - 5c2cca2: Fix a11y issues:
84
95
 
85
- - Fix wrong `aria-labelledby` ids
86
- - Introduce optional property `labelProperty` to result list's `input` option
87
- - A feature's property value is used to provide context in aria attributes.
88
- This is currently used for `aria-labels` of checkboxes in each row of the data table.
89
- - Use feature id as fallback if `labelProperty` is not set or feature does not have the specified property.
90
-
91
- ```tsx
92
- const input: ResultListInput = {
93
- columns: columns,
94
- data: results,
95
- labelProperty: "name", // uses feature.properties.name as label
96
- formatOptions: formatOptions
97
- };
98
- ```
96
+ - Fix wrong `aria-labelledby` ids
97
+ - Introduce optional property `labelProperty` to result list's `input` option
98
+ - A feature's property value is used to provide context in aria attributes.
99
+ This is currently used for `aria-labels` of checkboxes in each row of the data table.
100
+ - Use feature id as fallback if `labelProperty` is not set or feature does not have the specified property.
101
+
102
+ ```tsx
103
+ const input: ResultListInput = {
104
+ columns: columns,
105
+ data: results,
106
+ labelProperty: "name", // uses feature.properties.name as label
107
+ formatOptions: formatOptions,
108
+ };
109
+ ```
99
110
 
100
111
  ## 0.10.0
101
112
 
@@ -104,17 +115,17 @@
104
115
  - 193068a: Deprecate the `mapId` property on React components.
105
116
  Use the `MapModel` directly instead to pass a reference to the map.
106
117
 
107
- Example:
118
+ Example:
108
119
 
109
- ```tsx
110
- // Default map for entire component tree
111
- <DefaultMapProvider map={mapModel}>
112
- <Toc />
113
- </DefaultMapProvider>
120
+ ```tsx
121
+ // Default map for entire component tree
122
+ <DefaultMapProvider map={mapModel}>
123
+ <Toc />
124
+ </DefaultMapProvider>
114
125
 
115
- // Map for specific component
116
- <Toc map={mapModel} />
117
- ```
126
+ // Map for specific component
127
+ <Toc map={mapModel} />
128
+ ```
118
129
 
119
130
  ### Patch Changes
120
131
 
@@ -133,9 +144,9 @@
133
144
  ### Minor Changes
134
145
 
135
146
  - 2fa8020: Update trails core package dependencies.
136
- - Also updates Chakra UI to the latest 2.x version and Chakra React Select to version 5.
137
- - Removes any obsolete references to `@chakra-ui/system`.
138
- This dependency seems to be no longer required and may lead to duplicate packages in your dependency tree.
147
+ - Also updates Chakra UI to the latest 2.x version and Chakra React Select to version 5.
148
+ - Removes any obsolete references to `@chakra-ui/system`.
149
+ This dependency seems to be no longer required and may lead to duplicate packages in your dependency tree.
139
150
 
140
151
  ### Patch Changes
141
152
 
@@ -153,7 +164,7 @@
153
164
  - 583f1d6: The `mapId` or `map` properties are now optional on individual components.
154
165
  You can use the `DefaultMapProvider` to configure an implicit default value.
155
166
 
156
- Note that configuring _neither_ a default _nor_ an explicit `map` or `mapId` will trigger a runtime error.
167
+ Note that configuring _neither_ a default _nor_ an explicit `map` or `mapId` will trigger a runtime error.
157
168
 
158
169
  - 583f1d6: All UI components in this project now accept the `mapId` (a `string`) _or_ the `map` (a `MapModel`) directly.
159
170
  - a8b3449: Switch to a new versioning strategy.
@@ -181,11 +192,11 @@
181
192
  When rows are memoized, they are only rerendered under certain conditions (e.g. selection changes, sort order changes), which can
182
193
  greatly improve performance in some circumstances.
183
194
 
184
- Example:
195
+ Example:
185
196
 
186
- ```tsx
187
- <ResultList mapId={mapId} input={input} memoizeRows={true} />
188
- ```
197
+ ```tsx
198
+ <ResultList mapId={mapId} input={input} memoizeRows={true} />
199
+ ```
189
200
 
190
201
  - 5623b5e: Changed ResultListProps interface to differentiate between highlightOptions and zoomOptions.
191
202
 
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.js","sources":["DataTable.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Table, chakra, useToken } from \"@chakra-ui/react\";\nimport { Reactive, reactive } from \"@conterra/reactivity-core\";\nimport { createLogger } from \"@open-pioneer/core\";\nimport { BaseFeature } from \"@open-pioneer/map\";\nimport { useEvent, classNames } from \"@open-pioneer/react-utils\";\nimport { useReactiveSnapshot } from \"@open-pioneer/reactivity\";\nimport {\n ColumnDef,\n Header,\n HeaderGroup,\n SortDirection,\n Table as TanstackTable,\n flexRender\n} from \"@tanstack/react-table\";\nimport { useIntl } from \"open-pioneer:react-hooks\";\nimport { sourceId } from \"open-pioneer:source-info\";\nimport { MouseEvent, createContext, useContext, useEffect, useMemo, useState } from \"react\";\nimport { ResultListSelectionChangeEvent, SelectionMode } from \"../ResultList\";\nimport { ColumnResizer } from \"./ColumnResizer\";\nimport { ColumnSortIndicator } from \"./ColumnSortIndicator\";\nimport { useSetupTable } from \"./useSetupTable\";\n\nconst LOG = createLogger(sourceId);\n\nexport interface DataTableProps<Data extends BaseFeature> {\n data: Data[];\n columns: ColumnDef<Data>[];\n memoizeRows: boolean;\n selectionMode: SelectionMode;\n onSelectionChange?(event: ResultListSelectionChangeEvent): void;\n}\n\nconst TableContext = createContext<TableContext<unknown> | undefined>(undefined);\n\ninterface TableContext<Data> {\n /** The tanstack table instance. This object is stable. */\n table: TanstackTable<Data>;\n\n /** A signal to trigger re-rendering in the children of the chakra table. */\n forceRerender: Reactive<number>;\n}\n\nexport function DataTable<Data extends BaseFeature>(props: DataTableProps<Data>) {\n const intl = useIntl();\n const { memoizeRows } = props;\n const { table } = useSetupTable(props); // NOTE: Triggers re-render often when table state changes!\n const isResizing = !!table.getState().columnSizingInfo.isResizingColumn;\n const useMemoOptimization = isResizing || memoizeRows;\n const columnSizeVars = useColumnSizeVars(table);\n\n const context = useMemo((): TableContext<Data> => {\n return {\n table,\n forceRerender: reactive(0)\n };\n }, [table]);\n\n // XXX: Bad practice, but works\n context.forceRerender.value += 1; // Force rerendering of the TableContent child.\n\n // Block click events while dragging the resize handle.\n // If the click event gets through, the user may accidentally trigger column sorting on mouse release.\n // Note that this is in a useEffect() on purpose to defer \"freeing\" click events a bit.\n const [isClickBlocked, setIsClickBlocked] = useState(false);\n useEffect(() => {\n setIsClickBlocked(isResizing);\n }, [isResizing]);\n const blockClicksIfResizing = useEvent((e: MouseEvent) => {\n if (isClickBlocked) {\n LOG.debug(\"Blocking click event because resizing is active\");\n e.stopPropagation();\n e.preventDefault();\n }\n });\n\n // We cache the table's root because chakra's table has some broken memo behavior: it recomputes\n // its styles and rerenders all its children via context when some props change.\n // We keep both the props and the table's children as stable as possible.\n //\n // The table content instead uses a force rerender bypass via the `forceRerender` signal:\n // When react-table tells us to rerender, we trigger a rerender on our grandchild as well.\n const chakraTable = useMemo(() => {\n const content = <TableContent useMemo={useMemoOptimization} />;\n const chakraTable = (\n <Table.Root\n className=\"result-list-table\"\n width=\"99.9%\"\n onClickCapture={blockClicksIfResizing}\n >\n {content}\n </Table.Root>\n );\n return chakraTable;\n }, [blockClicksIfResizing, useMemoOptimization]);\n\n if (!table.getRowModel().rows.length) {\n return (\n <chakra.div className={\"result-list-no-data-message\"}>\n {intl.formatMessage({ id: \"noDataMessage\" })}\n </chakra.div>\n );\n }\n return (\n <chakra.div\n className={classNames(\"result-list-table-container\", {\n \"result-list-table-container--is-resizing\": isResizing\n })}\n h=\"100%\"\n w=\"100%\"\n style={columnSizeVars}\n >\n <TableContext.Provider value={context as TableContext<unknown>}>\n {chakraTable}\n </TableContext.Provider>\n </chakra.div>\n );\n}\n\nfunction TableContent<Data extends BaseFeature>(props: { useMemo: boolean }) {\n const store = useContext(TableContext) as TableContext<Data>;\n const table = store.table;\n\n // Hack to let the grandparent of this component force a rerender.\n useReactiveSnapshot(() => store.forceRerender.value, [store.forceRerender]);\n\n return (\n <>\n <Table.Header>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableHeaderGroup key={headerGroup.id} headerGroup={headerGroup} />\n ))}\n </Table.Header>\n <Table.Body className=\"result-list-table-body\">\n {props.useMemo ? <MemoizedTableRows table={table} /> : <TableRows table={table} />}\n </Table.Body>\n </>\n );\n}\n\nfunction TableHeaderGroup<Data>(props: { headerGroup: HeaderGroup<Data> }) {\n const { headerGroup } = props;\n const borderColor = useToken(\"colors\", \"trails.100\")[0] ?? \"#000000\";\n return (\n <Table.Row key={headerGroup.id} className=\"result-list-headers\">\n {headerGroup.headers.map((header, index) => {\n return (\n <TableHeader\n key={header.id}\n header={header}\n index={index}\n borderColor={borderColor}\n />\n );\n })}\n </Table.Row>\n );\n}\n\nfunction TableHeader<Data>(props: {\n header: Header<Data, unknown>;\n index: number;\n borderColor: string;\n}) {\n const { header, index, borderColor } = props;\n\n let width: string | undefined;\n let minWidth: string | undefined;\n if (index > 0) {\n width = `calc(var(--header-${header.id}-size) * 1px)`;\n } else {\n minWidth = \"50px\"; // Selection column\n }\n\n return (\n <Table.ColumnHeader\n className=\"result-list-header\"\n fontWeight=\"semi-bold\"\n tabIndex={0}\n aria-sort={mapAriaSorting(header.column.getIsSorted())}\n onClick={() => header.column.getCanSort() && header.column.toggleSorting()}\n cursor={header.column.getCanSort() ? \"pointer\" : \"unset\"}\n style={{ width, minWidth }}\n onKeyDown={(evt) => {\n if (evt.key === \"Enter\" && header.column.getCanSort()) {\n header.column.toggleSorting(undefined);\n }\n }}\n /* use box shadow instead of border because it works better with position: sticky */\n border=\"none\"\n boxShadow={`inset 0 -2px 0 0 ${borderColor}`}\n whiteSpace=\"nowrap\" // prevent wrapping between header title and sort indicator\n userSelect=\"none\"\n _focusVisible={{ textDecorationLine: \"underline\" }}\n _focus={{ outline: \"none\" }}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n {header.column.getCanSort() && (\n <ColumnSortIndicator isSorted={header.column.getIsSorted()} />\n )}\n <ColumnResizer\n onDoubleClick={() => header.column.resetSize()}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n isResizing={header.column.getIsResizing()}\n />\n </Table.ColumnHeader>\n );\n}\n\nfunction TableRows<Data extends object>({ table }: { table: TanstackTable<Data> }) {\n return table.getRowModel().rows.map((row) => {\n return (\n <Table.Row key={row.id} className=\"result-list-table-row\">\n {row.getVisibleCells().map((cell) => {\n const width = `calc(var(--header-${cell.column.id}-size) * 1px)`;\n return (\n <Table.Cell\n key={cell.id}\n style={{ width: width }}\n className=\"result-list-table-row\"\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Table.Cell>\n );\n })}\n </Table.Row>\n );\n });\n}\n\n/**\n * Rows are memoized and only updating on changes due to sorting columns or selecting rows.\n * Removed full Memoization on Resizing because it does not have an additional effect.\n */\nfunction MemoizedTableRows<Data extends object>({ table }: { table: TanstackTable<Data> }) {\n const memoizedRows = useMemo(() => {\n return <TableRows table={table} />;\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [table, table.getSortedRowModel().rows, table.getSelectedRowModel().rows]);\n return memoizedRows;\n}\n\n/**\n * Instead of calling `column.getSize()` on every render for every header\n * and especially every data cell (very expensive),\n * we will calculate all column sizes at once at the root table level in a useMemo\n * and pass the column sizes down as CSS variables to the <table> element.\n */\nfunction useColumnSizeVars<Data>(table: TanstackTable<Data>) {\n const columnSizingInfo = table.getState().columnSizingInfo;\n const columnSizing = table.getState().columnSizing;\n const tableHeaders = table.getFlatHeaders();\n\n // Needs to be useMemo, not useEffect, to avoid multiple render calls?\n // Need to add columnSizingInfo to the dependency array to make resizing work\n return useMemo(() => {\n // Not used directly, but the memo must re-execute whenever this changes.\n // Note: columnSizing seems to be needed as well, because otherwise resetting the column size (header.column.resetSize())\n // won't to anything.\n // oxlint-disable-next-line @typescript-eslint/no-unused-expressions\n (void columnSizingInfo, columnSizing);\n const colSizes: { [key: string]: number } = {};\n for (let i = 0; i < tableHeaders.length; i++) {\n // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion\n const header = tableHeaders[i]!;\n colSizes[`--header-${header.id}-size`] = header.getSize();\n colSizes[`--col-${header.column.id}-size`] = header.column.getSize();\n }\n return colSizes;\n }, [tableHeaders, columnSizingInfo, columnSizing]);\n}\n\ntype SortState = SortDirection | false;\n\nfunction mapAriaSorting(sortState: SortState) {\n switch (sortState) {\n case \"asc\":\n return \"ascending\";\n case \"desc\":\n return \"descending\";\n default:\n return \"none\";\n }\n}\n"],"names":["chakraTable"],"mappings":"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"}
1
+ {"version":3,"file":"DataTable.js","sources":["DataTable.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023-2025 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Table, chakra, useToken } from \"@chakra-ui/react\";\nimport { Reactive, reactive } from \"@conterra/reactivity-core\";\nimport { createLogger } from \"@open-pioneer/core\";\nimport { BaseFeature } from \"@open-pioneer/map\";\nimport { useEvent, classNames } from \"@open-pioneer/react-utils\";\nimport { useReactiveSnapshot } from \"@open-pioneer/reactivity\";\nimport {\n ColumnDef,\n Header,\n HeaderGroup,\n SortDirection,\n Table as TanstackTable,\n flexRender\n} from \"@tanstack/react-table\";\nimport { useIntl } from \"open-pioneer:react-hooks\";\nimport { sourceId } from \"open-pioneer:source-info\";\nimport { MouseEvent, createContext, useContext, useEffect, useMemo, useState } from \"react\";\nimport { ResultListSelectionChangeEvent, SelectionMode } from \"../ResultList\";\nimport { ColumnResizer } from \"./ColumnResizer\";\nimport { ColumnSortIndicator } from \"./ColumnSortIndicator\";\nimport { useSetupTable } from \"./useSetupTable\";\n\nconst LOG = createLogger(sourceId);\n\nexport interface DataTableProps<Data extends BaseFeature> {\n data: Data[];\n columns: ColumnDef<Data>[];\n memoizeRows: boolean;\n selectionMode: SelectionMode;\n onSelectionChange?(event: ResultListSelectionChangeEvent): void;\n}\n\nconst TableContext = createContext<TableContext<unknown> | undefined>(undefined);\n\ninterface TableContext<Data> {\n /** The tanstack table instance. This object is stable. */\n table: TanstackTable<Data>;\n\n /** A signal to trigger re-rendering in the children of the chakra table. */\n forceRerender: Reactive<number>;\n}\n\nexport function DataTable<Data extends BaseFeature>(props: DataTableProps<Data>) {\n const intl = useIntl();\n const { memoizeRows } = props;\n const { table } = useSetupTable(props); // NOTE: Triggers re-render often when table state changes!\n const isResizing = !!table.getState().columnSizingInfo.isResizingColumn;\n const useMemoOptimization = isResizing || memoizeRows;\n const columnSizeVars = useColumnSizeVars(table);\n\n const context = useMemo((): TableContext<Data> => {\n return {\n table,\n forceRerender: reactive(0)\n };\n }, [table]);\n\n // XXX: Bad practice, but works\n context.forceRerender.value += 1; // Force rerendering of the TableContent child.\n\n // Block click events while dragging the resize handle.\n // If the click event gets through, the user may accidentally trigger column sorting on mouse release.\n // Note that this is in a useEffect() on purpose to defer \"freeing\" click events a bit.\n const [isClickBlocked, setIsClickBlocked] = useState(false);\n useEffect(() => {\n // oxlint-disable-next-line react/no-deriving-state-in-effects\n setIsClickBlocked(isResizing);\n }, [isResizing]);\n const blockClicksIfResizing = useEvent((e: MouseEvent) => {\n if (isClickBlocked) {\n LOG.debug(\"Blocking click event because resizing is active\");\n e.stopPropagation();\n e.preventDefault();\n }\n });\n\n // We cache the table's root because chakra's table has some broken memo behavior: it recomputes\n // its styles and rerenders all its children via context when some props change.\n // We keep both the props and the table's children as stable as possible.\n //\n // The table content instead uses a force rerender bypass via the `forceRerender` signal:\n // When react-table tells us to rerender, we trigger a rerender on our grandchild as well.\n const chakraTable = useMemo(() => {\n const content = <TableContent useMemo={useMemoOptimization} />;\n const chakraTable = (\n <Table.Root\n className=\"result-list-table\"\n width=\"99.9%\"\n onClickCapture={blockClicksIfResizing}\n >\n {content}\n </Table.Root>\n );\n return chakraTable;\n }, [blockClicksIfResizing, useMemoOptimization]);\n\n if (!table.getRowModel().rows.length) {\n return (\n <chakra.div className={\"result-list-no-data-message\"}>\n {intl.formatMessage({ id: \"noDataMessage\" })}\n </chakra.div>\n );\n }\n return (\n <chakra.div\n className={classNames(\"result-list-table-container\", {\n \"result-list-table-container--is-resizing\": isResizing\n })}\n h=\"100%\"\n w=\"100%\"\n style={columnSizeVars}\n >\n <TableContext.Provider value={context as TableContext<unknown>}>\n {chakraTable}\n </TableContext.Provider>\n </chakra.div>\n );\n}\n\nfunction TableContent<Data extends BaseFeature>(props: { useMemo: boolean }) {\n const store = useContext(TableContext) as TableContext<Data>;\n const table = store.table;\n\n // Hack to let the grandparent of this component force a rerender.\n useReactiveSnapshot(() => store.forceRerender.value, [store.forceRerender]);\n\n return (\n <>\n <Table.Header>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableHeaderGroup key={headerGroup.id} headerGroup={headerGroup} />\n ))}\n </Table.Header>\n <Table.Body className=\"result-list-table-body\">\n {props.useMemo ? <MemoizedTableRows table={table} /> : <TableRows table={table} />}\n </Table.Body>\n </>\n );\n}\n\nfunction TableHeaderGroup<Data>(props: { headerGroup: HeaderGroup<Data> }) {\n const { headerGroup } = props;\n const borderColor = useToken(\"colors\", \"trails.100\")[0] ?? \"#000000\";\n return (\n <Table.Row key={headerGroup.id} className=\"result-list-headers\">\n {headerGroup.headers.map((header, index) => {\n return (\n <TableHeader\n key={header.id}\n header={header}\n index={index}\n borderColor={borderColor}\n />\n );\n })}\n </Table.Row>\n );\n}\n\nfunction TableHeader<Data>(props: {\n header: Header<Data, unknown>;\n index: number;\n borderColor: string;\n}) {\n const { header, index, borderColor } = props;\n\n let width: string | undefined;\n let minWidth: string | undefined;\n if (index > 0) {\n width = `calc(var(--header-${header.id}-size) * 1px)`;\n } else {\n minWidth = \"50px\"; // Selection column\n }\n\n return (\n <Table.ColumnHeader\n className=\"result-list-header\"\n fontWeight=\"semi-bold\"\n tabIndex={0}\n aria-sort={mapAriaSorting(header.column.getIsSorted())}\n onClick={() => header.column.getCanSort() && header.column.toggleSorting()}\n cursor={header.column.getCanSort() ? \"pointer\" : \"unset\"}\n style={{ width, minWidth }}\n onKeyDown={(evt) => {\n if (evt.key === \"Enter\" && header.column.getCanSort()) {\n header.column.toggleSorting(undefined);\n }\n }}\n /* use box shadow instead of border because it works better with position: sticky */\n border=\"none\"\n boxShadow={`inset 0 -2px 0 0 ${borderColor}`}\n whiteSpace=\"nowrap\" // prevent wrapping between header title and sort indicator\n userSelect=\"none\"\n _focusVisible={{ textDecorationLine: \"underline\" }}\n _focus={{ outline: \"none\" }}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n {header.column.getCanSort() && (\n <ColumnSortIndicator isSorted={header.column.getIsSorted()} />\n )}\n <ColumnResizer\n onDoubleClick={() => header.column.resetSize()}\n onMouseDown={header.getResizeHandler()}\n onTouchStart={header.getResizeHandler()}\n isResizing={header.column.getIsResizing()}\n />\n </Table.ColumnHeader>\n );\n}\n\nfunction TableRows<Data extends object>({ table }: { table: TanstackTable<Data> }) {\n return table.getRowModel().rows.map((row) => {\n return (\n <Table.Row key={row.id} className=\"result-list-table-row\">\n {row.getVisibleCells().map((cell) => {\n const width = `calc(var(--header-${cell.column.id}-size) * 1px)`;\n return (\n <Table.Cell\n key={cell.id}\n style={{ width: width }}\n className=\"result-list-table-row\"\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Table.Cell>\n );\n })}\n </Table.Row>\n );\n });\n}\n\n/**\n * Rows are memoized and only updating on changes due to sorting columns or selecting rows.\n * Removed full Memoization on Resizing because it does not have an additional effect.\n */\nfunction MemoizedTableRows<Data extends object>({ table }: { table: TanstackTable<Data> }) {\n const memoizedRows = useMemo(() => {\n return <TableRows table={table} />;\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [table, table.getSortedRowModel().rows, table.getSelectedRowModel().rows]);\n return memoizedRows;\n}\n\n/**\n * Instead of calling `column.getSize()` on every render for every header\n * and especially every data cell (very expensive),\n * we will calculate all column sizes at once at the root table level in a useMemo\n * and pass the column sizes down as CSS variables to the <table> element.\n */\nfunction useColumnSizeVars<Data>(table: TanstackTable<Data>) {\n const columnSizingInfo = table.getState().columnSizingInfo;\n const columnSizing = table.getState().columnSizing;\n const tableHeaders = table.getFlatHeaders();\n\n // Needs to be useMemo, not useEffect, to avoid multiple render calls?\n // Need to add columnSizingInfo to the dependency array to make resizing work\n return useMemo(() => {\n // Not used directly, but the memo must re-execute whenever this changes.\n // Note: columnSizing seems to be needed as well, because otherwise resetting the column size (header.column.resetSize())\n // won't to anything.\n // oxlint-disable-next-line @typescript-eslint/no-unused-expressions\n (void columnSizingInfo, columnSizing);\n const colSizes: { [key: string]: number } = {};\n for (let i = 0; i < tableHeaders.length; i++) {\n // oxlint-disable-next-line @typescript-eslint/no-non-null-assertion\n const header = tableHeaders[i]!;\n colSizes[`--header-${header.id}-size`] = header.getSize();\n colSizes[`--col-${header.column.id}-size`] = header.column.getSize();\n }\n return colSizes;\n }, [tableHeaders, columnSizingInfo, columnSizing]);\n}\n\ntype SortState = SortDirection | false;\n\nfunction mapAriaSorting(sortState: SortState) {\n switch (sortState) {\n case \"asc\":\n return \"ascending\";\n case \"desc\":\n return \"descending\";\n default:\n return \"none\";\n }\n}\n"],"names":["chakraTable"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@open-pioneer/result-list",
4
- "version": "1.4.0",
4
+ "version": "1.5.0-dev.20260910103330",
5
5
  "description": "This package provides a UI component to display features and their attributes.",
6
6
  "keywords": [
7
7
  "open-pioneer-trails"
@@ -14,19 +14,23 @@
14
14
  "directory": "src/packages/result-list"
15
15
  },
16
16
  "dependencies": {
17
- "@chakra-ui/react": "^3.36.1",
18
- "@conterra/reactivity-core": "^0.8.6",
19
- "@open-pioneer/chakra-snippets": "^4.7.0",
20
- "@open-pioneer/core": "^4.7.0",
21
- "@open-pioneer/react-utils": "^4.7.0",
22
- "@open-pioneer/reactivity": "^4.7.0",
23
- "@open-pioneer/runtime": "^4.7.0",
17
+ "@chakra-ui/react": "^3.37.0",
18
+ "@conterra/reactivity-core": "^0.8.8",
19
+ "@open-pioneer/chakra-snippets": "4.8.0-dev.20260910101405",
20
+ "@open-pioneer/core": "4.8.0-dev.20260910101405",
21
+ "@open-pioneer/map": "1.5.0-dev.20260910103330",
22
+ "@open-pioneer/react-utils": "4.8.0-dev.20260910101405",
23
+ "@open-pioneer/reactivity": "4.8.0-dev.20260910101405",
24
+ "@open-pioneer/runtime": "4.8.0-dev.20260910101405",
24
25
  "@tanstack/react-table": "^8.21.3",
25
- "ol": "^10.9.0",
26
+ "ol": "^10.10.0",
26
27
  "react": "^19.2.8",
27
28
  "react-icons": "^5.7.0",
28
- "react-use": "^17.6.1",
29
- "@open-pioneer/map": "1.4.0"
29
+ "react-use": "^17.6.1"
30
+ },
31
+ "publishConfig": {
32
+ "directory": "dist",
33
+ "linkDirectory": false
30
34
  },
31
35
  "exports": {
32
36
  "./package.json": "./package.json",