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 CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.tsx"],"names":[],"mappings":"AACA,OAAO,WAAW,CAAC;AAGnB,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,iBAAS,GAAG,sBAkNX;AAED,eAAe,GAAG,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
- brandColumnHelper.accessor((row) => row.description ?? '', {
144
- header: 'description',
145
- size: 300,
146
- cell: (info) => React.createElement("div", null, info.getValue()),
147
- }),
148
- ];
149
- const _extraBrandColumns = [
150
- {
151
- column: brandColumns[0],
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,CAiBd"}
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,CAiHd"}
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"}
@@ -61,5 +61,5 @@ export function FrameList(props) {
61
61
  // backgroundColor="lightgreen"
62
62
  // scrollbarWidth={100}
63
63
  // height={400}
64
- placeholder: "Modellnummer", defaultHeader: "Frame" }));
64
+ placeholder: "Modellnummer", defaultHeader: "Frame", testId: "frame" }));
65
65
  }
@@ -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;CACxB,GAAG,GAAG,CAAC,OAAO,CAsZd"}
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) => (React.createElement(TableRow, { "data-testid": `${defaultHeader}.tb.row.${index}`, key: row.id }, row.getVisibleCells().map((cell) => {
213
- return displayBodyCell(cell, index, width, bgColor);
214
- }))));
215
- }, [backgroundColor, defaultHeader, displayBodyCell]);
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.4",
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": "^19.2.3",
33
- "react-dom": "^19.2.3"
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.3",
42
- "@types/react": "^19.2.7",
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.0",
52
+ "typescript-eslint": "^8.53.0",
55
53
  "vite": "^7.3.1",
56
- "vitest": "^4.0.16"
54
+ "vitest": "^4.0.17"
57
55
  }
58
56
  }