frame.select 1.2.4 → 1.2.6
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/dist/App.d.ts.map +1 -1
- package/dist/App.js +13 -14
- package/dist/components/BrandList.d.ts.map +1 -1
- package/dist/components/BrandList.js +1 -1
- package/dist/components/FrameList.d.ts.map +1 -1
- package/dist/components/FrameList.js +1 -1
- package/dist/components/ItemList.d.ts +2 -0
- package/dist/components/ItemList.d.ts.map +1 -1
- package/dist/components/ItemList.js +17 -10
- package/package.json +12 -14
package/dist/App.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.tsx"],"names":[],"mappings":"AACA,OAAO,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.tsx"],"names":[],"mappings":"AACA,OAAO,WAAW,CAAC;AAEnB,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,iBAAS,GAAG,sBAkNX;AAED,eAAe,GAAG,CAAC"}
|
package/dist/App.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { createColumnHelper } from '@tanstack/react-table';
|
|
2
1
|
import './App.css';
|
|
3
2
|
import { useState } from 'react';
|
|
4
3
|
import React from 'react';
|
|
@@ -138,19 +137,19 @@ function App() {
|
|
|
138
137
|
rest: stripLeadingZeros(frame.substring(28, 33)),
|
|
139
138
|
}));
|
|
140
139
|
}
|
|
141
|
-
const brandColumnHelper = createColumnHelper();
|
|
142
|
-
const brandColumns = [
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
];
|
|
149
|
-
const _extraBrandColumns = [
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
];
|
|
140
|
+
// const brandColumnHelper = createColumnHelper<TBrandObj>();
|
|
141
|
+
// const brandColumns = [
|
|
142
|
+
// brandColumnHelper.accessor((row) => row.description ?? '', {
|
|
143
|
+
// header: 'description',
|
|
144
|
+
// size: 300,
|
|
145
|
+
// cell: (info) => <div>{info.getValue()}</div>,
|
|
146
|
+
// }),
|
|
147
|
+
// ];
|
|
148
|
+
// const _extraBrandColumns: TColumn<TBrandObj>[] = [
|
|
149
|
+
// {
|
|
150
|
+
// column: brandColumns[0],
|
|
151
|
+
// },
|
|
152
|
+
// ];
|
|
154
153
|
const onClickBrand = (cell) => {
|
|
155
154
|
const brand = brands.find((b) => b.name === cell.row.original.name);
|
|
156
155
|
if (brand) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrandList.d.ts","sourceRoot":"","sources":["../../src/components/BrandList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAC/B,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,GAAG,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"BrandList.d.ts","sourceRoot":"","sources":["../../src/components/BrandList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAC/B,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,GAAG,GAAG,CAAC,OAAO,CAkBd"}
|
|
@@ -2,5 +2,5 @@ import React from 'react';
|
|
|
2
2
|
import { ItemList } from './ItemList';
|
|
3
3
|
export function BrandList(props) {
|
|
4
4
|
const extraBrandColumns = [];
|
|
5
|
-
return (React.createElement(ItemList, { itemList: props.brandList, onClick: props.onClick, renderItem: props.renderItem, extraColumns: props.extraColumns ? props.extraColumns : extraBrandColumns, style: props.style, backgroundColor: props.backgroundColor, scrollbarWidth: 50, height: 300, placeholder: "Brands", defaultHeader: "Brand" }));
|
|
5
|
+
return (React.createElement(ItemList, { itemList: props.brandList, onClick: props.onClick, renderItem: props.renderItem, extraColumns: props.extraColumns ? props.extraColumns : extraBrandColumns, style: props.style, backgroundColor: props.backgroundColor, scrollbarWidth: 50, height: 300, placeholder: "Brands", defaultHeader: "Brand", testId: "name" }));
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrameList.d.ts","sourceRoot":"","sources":["../../src/components/FrameList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAsB,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAY,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAKL,SAAS,EACV,MAAM,SAAS,CAAC;AAGjB,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAC/B,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAChD,YAAY,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IACpC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,GAAG,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"FrameList.d.ts","sourceRoot":"","sources":["../../src/components/FrameList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAsB,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAY,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAKL,SAAS,EACV,MAAM,SAAS,CAAC;AAGjB,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAC/B,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAChD,YAAY,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IACpC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B,GAAG,GAAG,CAAC,OAAO,CAkHd"}
|
|
@@ -9,10 +9,12 @@ export declare function ItemList<T extends TItem>(props: {
|
|
|
9
9
|
extraColumns?: TColumn<T>[];
|
|
10
10
|
style?: React.CSSProperties;
|
|
11
11
|
backgroundColor?: string;
|
|
12
|
+
selectColor?: string;
|
|
12
13
|
scrollbarWidth?: number;
|
|
13
14
|
mainColumnWidth?: number;
|
|
14
15
|
height?: number | string;
|
|
15
16
|
placeholder?: string;
|
|
16
17
|
defaultHeader?: string;
|
|
18
|
+
testId: string;
|
|
17
19
|
}): JSX.Element;
|
|
18
20
|
//# sourceMappingURL=ItemList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemList.d.ts","sourceRoot":"","sources":["../../src/components/ItemList.tsx"],"names":[],"mappings":"AAUA,OAAO,EAIL,IAAI,EAML,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAe,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,GAAG,EAA6C,MAAM,OAAO,CAAC;AACvE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,wBAAgB,QAAQ,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE;IAC/C,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ItemList.d.ts","sourceRoot":"","sources":["../../src/components/ItemList.tsx"],"names":[],"mappings":"AAUA,OAAO,EAIL,IAAI,EAML,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAe,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,GAAG,EAA6C,MAAM,OAAO,CAAC;AACvE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,wBAAgB,QAAQ,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE;IAC/C,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,GAAG,CAAC,OAAO,CAqad"}
|
|
@@ -5,7 +5,7 @@ import { useMemo, useState, useCallback } from 'react';
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
export function ItemList(props) {
|
|
7
7
|
'use no memo'; // For React Compiler compatibility with TanStack Table
|
|
8
|
-
const { itemList, backgroundColor = 'lightgrey', scrollbarWidth = 50, mainColumnWidth = 160, height = 300, placeholder = 'Items', defaultHeader = 'Name', } = props;
|
|
8
|
+
const { itemList, backgroundColor = 'lightgrey', selectColor = 'darkgrey', scrollbarWidth = 50, mainColumnWidth = 160, height = 300, placeholder = 'Items', defaultHeader = 'Name', } = props;
|
|
9
9
|
const scrollbarStyles = {
|
|
10
10
|
'&::-webkit-scrollbar': {
|
|
11
11
|
width: `${scrollbarWidth}px`,
|
|
@@ -27,6 +27,7 @@ export function ItemList(props) {
|
|
|
27
27
|
scrollbarGutter: 'stable',
|
|
28
28
|
};
|
|
29
29
|
const [filter, setFilter] = useState('');
|
|
30
|
+
const [selectedIndex, setSelectedIndex] = useState(null);
|
|
30
31
|
const filterMatches = useCallback((item, fltr) => {
|
|
31
32
|
const match = item.name
|
|
32
33
|
.toLowerCase()
|
|
@@ -84,6 +85,7 @@ export function ItemList(props) {
|
|
|
84
85
|
}
|
|
85
86
|
});
|
|
86
87
|
const onClick = useCallback((cell, index) => () => {
|
|
88
|
+
setSelectedIndex(index);
|
|
87
89
|
if (props.onClick) {
|
|
88
90
|
props.onClick(cell, index);
|
|
89
91
|
}
|
|
@@ -124,10 +126,6 @@ export function ItemList(props) {
|
|
|
124
126
|
}
|
|
125
127
|
return filter;
|
|
126
128
|
}, [defaultHeader, itemFilter, extraCols]);
|
|
127
|
-
const renderItem = useCallback((cell) => {
|
|
128
|
-
const cll = cell.getValue();
|
|
129
|
-
return React.createElement("div", null, cll);
|
|
130
|
-
}, []);
|
|
131
129
|
const displayHeaderCell = useCallback((header, baseWidth) => {
|
|
132
130
|
return (React.createElement(TableCell, { "data-testid": `${defaultHeader}.th.cell.${header.id}`, key: header.id, sx: {
|
|
133
131
|
backgroundColor,
|
|
@@ -162,7 +160,7 @@ export function ItemList(props) {
|
|
|
162
160
|
// minWidth: baseWidth,
|
|
163
161
|
// maxWidth: baseWidth,
|
|
164
162
|
boxSizing: 'border-box',
|
|
165
|
-
}, key: cell.id }, cell.column.columnDef.header === defaultHeader ? (React.createElement(Button, { onClick: onClick(cell, cell.row.index) }, props.renderItem
|
|
163
|
+
}, key: cell.id }, cell.column.columnDef.header === defaultHeader ? (React.createElement(Button, { "data-testid": `${defaultHeader}.tb.cell.${cell.row.original[props.testId]}.button`, onClick: onClick(cell, cell.row.index) }, props.renderItem
|
|
166
164
|
? props.renderItem(cll)
|
|
167
165
|
: flexRender(cell.column.columnDef.cell, cell.getContext()))) : props.renderItem ? (props.renderItem(cll)) : (flexRender(cell.column.columnDef.cell, cell.getContext()))));
|
|
168
166
|
}, [cellWidth, defaultHeader, extraCols, onClick, props]);
|
|
@@ -209,10 +207,19 @@ export function ItemList(props) {
|
|
|
209
207
|
}))));
|
|
210
208
|
}, [cellWidth, defaultHeader, displayHeaderCell, extraCols]);
|
|
211
209
|
const renderBody = React.useCallback((rows, width, bgColor = backgroundColor) => {
|
|
212
|
-
return rows.map((row, index) =>
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
210
|
+
return rows.map((row, index) => {
|
|
211
|
+
const rowBgColor = selectedIndex === index ? selectColor : bgColor;
|
|
212
|
+
return (React.createElement(TableRow, { "data-testid": `${defaultHeader}.tb.row.${index}`, key: row.id }, row.getVisibleCells().map((cell) => {
|
|
213
|
+
return displayBodyCell(cell, index, width, rowBgColor);
|
|
214
|
+
})));
|
|
215
|
+
});
|
|
216
|
+
}, [
|
|
217
|
+
backgroundColor,
|
|
218
|
+
defaultHeader,
|
|
219
|
+
displayBodyCell,
|
|
220
|
+
selectColor,
|
|
221
|
+
selectedIndex,
|
|
222
|
+
]);
|
|
216
223
|
return (React.createElement("div", { "data-testid": `${defaultHeader}.table`, style: {
|
|
217
224
|
height,
|
|
218
225
|
overflow: 'hidden',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "frame.select",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.6",
|
|
4
4
|
"description": "A React component for selecting items from a list with a search bar.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -21,16 +21,14 @@
|
|
|
21
21
|
"test:e2e:debug": "playwright test --debug",
|
|
22
22
|
"preview": "vite preview"
|
|
23
23
|
},
|
|
24
|
-
"dependencies": {
|
|
25
|
-
"@emotion/react": "^11.14.0",
|
|
26
|
-
"@emotion/styled": "^11.14.1",
|
|
27
|
-
"@mui/icons-material": "^7.3.6",
|
|
28
|
-
"@mui/material": "^7.3.6",
|
|
29
|
-
"@tanstack/react-table": "^8.21.3"
|
|
30
|
-
},
|
|
31
24
|
"peerDependencies": {
|
|
32
|
-
"react": "^
|
|
33
|
-
"
|
|
25
|
+
"@emotion/react": "^11.0.0",
|
|
26
|
+
"@emotion/styled": "^11.0.0",
|
|
27
|
+
"@mui/icons-material": "^5.0.0 || ^6.0.0 || ^7.0.0",
|
|
28
|
+
"@mui/material": "^5.0.0 || ^6.0.0 || ^7.0.0",
|
|
29
|
+
"@tanstack/react-table": "^8.0.0",
|
|
30
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
31
|
+
"react-dom": "^18.0.0 || ^19.0.0"
|
|
34
32
|
},
|
|
35
33
|
"devDependencies": {
|
|
36
34
|
"@eslint/js": "^9.39.2",
|
|
@@ -38,8 +36,8 @@
|
|
|
38
36
|
"@testing-library/dom": "^10.4.1",
|
|
39
37
|
"@testing-library/jest-dom": "^6.9.1",
|
|
40
38
|
"@testing-library/react": "^16.3.1",
|
|
41
|
-
"@types/node": "^25.0.
|
|
42
|
-
"@types/react": "^19.2.
|
|
39
|
+
"@types/node": "^25.0.9",
|
|
40
|
+
"@types/react": "^19.2.8",
|
|
43
41
|
"@types/react-dom": "^19.2.3",
|
|
44
42
|
"@vitejs/plugin-react": "^5.1.2",
|
|
45
43
|
"eslint": "^9.39.2",
|
|
@@ -51,8 +49,8 @@
|
|
|
51
49
|
"react": "^19.2.3",
|
|
52
50
|
"react-dom": "^19.2.3",
|
|
53
51
|
"typescript": "~5.9.3",
|
|
54
|
-
"typescript-eslint": "^8.
|
|
52
|
+
"typescript-eslint": "^8.53.0",
|
|
55
53
|
"vite": "^7.3.1",
|
|
56
|
-
"vitest": "^4.0.
|
|
54
|
+
"vitest": "^4.0.17"
|
|
57
55
|
}
|
|
58
56
|
}
|