jattac.libs.web.responsive-table 0.0.17 → 0.0.19

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/.eslintrc.json CHANGED
@@ -1,8 +1,8 @@
1
- {
2
- "parser": "@typescript-eslint/parser",
3
- "plugins": ["@typescript-eslint"],
4
- "extends": ["plugin:@typescript-eslint/recommended"],
5
- "rules": {
6
- "@typescript-eslint/no-var-requires": "warn"
7
- }
8
- }
1
+ {
2
+ "parser": "@typescript-eslint/parser",
3
+ "plugins": ["@typescript-eslint"],
4
+ "extends": ["plugin:@typescript-eslint/recommended"],
5
+ "rules": {
6
+ "@typescript-eslint/no-var-requires": "warn"
7
+ }
8
+ }
package/.prettierrc CHANGED
@@ -1,5 +1,5 @@
1
- {
2
- "semi": true,
3
- "singleQuote": true,
4
- "printWidth": 120
5
- }
1
+ {
2
+ "semi": true,
3
+ "singleQuote": true,
4
+ "printWidth": 120
5
+ }
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2023 Nyingi Maina
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Nyingi Maina
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,79 +1,79 @@
1
- # ResponsiveTable
2
-
3
- ResponsiveTable is a reusable React component that displays tabular data in a responsive layout.
4
-
5
- ## Features
6
-
7
- - Handles mobile and desktop layouts
8
- - Customizable columns
9
- - Dynamic column definitions
10
- - Card-style mobile view
11
- - Generic types for flexible data
12
-
13
- ## Usage
14
-
15
- ```jsx
16
- <ResponsiveTable columnDefinitions={columns} data={data} />
17
- ```
18
-
19
- - 'columnDefinitions' defines an array of columns, which can be a simple configuration object or dynamic function
20
- - 'data' is an array of data objects to display in rows
21
-
22
- The component handles switching layout based on screen width to optimize for desktop and mobile.
23
-
24
- ## Custom Columns
25
-
26
- Columns can be configured using the 'IResponsiveTableColumnDefinition' interface.
27
-
28
- Some key configuration options:
29
-
30
- - 'displayLabel': Header label
31
- - 'dataKey': Maps column to data property
32
- - 'cellRenderer': Renders cell value
33
-
34
- See docs for more details on customization.
35
-
36
- ## Dynamic Columns
37
-
38
- Column definitions can also be a function allowing dynamic configurations per row.
39
-
40
- ## Props
41
-
42
- Prop definitions provide detailed specification of component contract.
43
-
44
- ### IProps
45
-
46
- ```ts
47
- interface IProps<TData> {
48
- /** Column definitions */
49
- columnDefinitions: ColumnDefinition<TData>[];
50
-
51
- /** Table data rows */
52
- data: TData[];
53
-
54
- /** Optional styling */
55
- className?: string;
56
-
57
- /** row click handler */
58
- onRowClicked?: (row: TData) => void;
59
-
60
- /** not data component */
61
- noDataComponent?: ReactNode;
62
- }
63
- ```
64
-
65
- ```ts
66
- type ColumnDefinition<TData> =
67
- | IResponsiveTableColumnDefinition<TData>
68
- | ((rowData: TData, rowIndex?: number) => IResponsiveTableColumnDefinition<TData>);
69
- ```
70
-
71
- ```ts
72
- interface IResponsiveTableColumnDefinition<TData> {
73
- displayLabel: string | ReactNode;
74
-
75
- dataKey?: keyof TData;
76
-
77
- cellRenderer: (rowData: TData) => ReactNode;
78
- }
79
- ```
1
+ # ResponsiveTable
2
+
3
+ ResponsiveTable is a reusable React component that displays tabular data in a responsive layout.
4
+
5
+ ## Features
6
+
7
+ - Handles mobile and desktop layouts
8
+ - Customizable columns
9
+ - Dynamic column definitions
10
+ - Card-style mobile view
11
+ - Generic types for flexible data
12
+
13
+ ## Usage
14
+
15
+ ```jsx
16
+ <ResponsiveTable columnDefinitions={columns} data={data} />
17
+ ```
18
+
19
+ - 'columnDefinitions' defines an array of columns, which can be a simple configuration object or dynamic function
20
+ - 'data' is an array of data objects to display in rows
21
+
22
+ The component handles switching layout based on screen width to optimize for desktop and mobile.
23
+
24
+ ## Custom Columns
25
+
26
+ Columns can be configured using the 'IResponsiveTableColumnDefinition' interface.
27
+
28
+ Some key configuration options:
29
+
30
+ - 'displayLabel': Header label
31
+ - 'dataKey': Maps column to data property
32
+ - 'cellRenderer': Renders cell value
33
+
34
+ See docs for more details on customization.
35
+
36
+ ## Dynamic Columns
37
+
38
+ Column definitions can also be a function allowing dynamic configurations per row.
39
+
40
+ ## Props
41
+
42
+ Prop definitions provide detailed specification of component contract.
43
+
44
+ ### IProps
45
+
46
+ ```ts
47
+ interface IProps<TData> {
48
+ /** Column definitions */
49
+ columnDefinitions: ColumnDefinition<TData>[];
50
+
51
+ /** Table data rows */
52
+ data: TData[];
53
+
54
+ /** Optional styling */
55
+ className?: string;
56
+
57
+ /** row click handler */
58
+ onRowClicked?: (row: TData) => void;
59
+
60
+ /** not data component */
61
+ noDataComponent?: ReactNode;
62
+ }
63
+ ```
64
+
65
+ ```ts
66
+ type ColumnDefinition<TData> =
67
+ | IResponsiveTableColumnDefinition<TData>
68
+ | ((rowData: TData, rowIndex?: number) => IResponsiveTableColumnDefinition<TData>);
69
+ ```
70
+
71
+ ```ts
72
+ interface IResponsiveTableColumnDefinition<TData> {
73
+ displayLabel: string | ReactNode;
74
+
75
+ dataKey?: keyof TData;
76
+
77
+ cellRenderer: (rowData: TData) => ReactNode;
78
+ }
79
+ ```
@@ -6,6 +6,7 @@ interface IProps<TData> {
6
6
  data: TData[];
7
7
  noDataComponent?: ReactNode;
8
8
  maxHeight?: string;
9
+ onRowClick?: (item: TData) => void;
9
10
  }
10
11
  interface IState {
11
12
  isMobile: boolean;
@@ -23,6 +24,8 @@ declare class ResponsiveTable<TData> extends Component<IProps<TData>, IState> {
23
24
  private getRawColumnDefinition;
24
25
  private onHeaderClickCallback;
25
26
  private getClickableHeaderClassName;
27
+ private get rowClickFunction();
28
+ private get rowClickStyle();
26
29
  private get mobileView();
27
30
  private get largeScreenView();
28
31
  render(): React.ReactNode;
package/dist/index.js CHANGED
@@ -29,7 +29,7 @@ function styleInject(css, ref) {
29
29
  }
30
30
  }
31
31
 
32
- var css_248z = ".ResponsiveTable-module_card__b-U2v {\n border: 1px solid #ccc;\n margin-bottom: 10px;\n border-radius: 8px;\n overflow: hidden;\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);\n}\n\n.ResponsiveTable-module_card-header__Ttk51 {\n background-color: #f0f0f0;\n padding: 10px;\n font-weight: bold;\n}\n\n.ResponsiveTable-module_card-body__XIy0h {\n padding: 10px;\n}\n\n.ResponsiveTable-module_responsiveTable__4y-Od {\n width: 100%;\n border-collapse: collapse;\n}\n\n.ResponsiveTable-module_responsiveTable__4y-Od thead th {\n background-color: #f2f2f2;\n position: sticky;\n top: 0;\n z-index: 2;\n}\n\n.ResponsiveTable-module_responsiveTable__4y-Od th,\n.ResponsiveTable-module_responsiveTable__4y-Od td {\n padding: 12px;\n border-bottom: 1px solid #dddddd;\n text-align: left;\n}\n\n/* Alternate row colors */\n.ResponsiveTable-module_responsiveTable__4y-Od tr:nth-child(even) {\n background-color: #f9f9f9;\n}\n\n/* Change background color on hover */\n.ResponsiveTable-module_responsiveTable__4y-Od tr:hover {\n background-color: #d9edf7;\n}\n\n.ResponsiveTable-module_clickableHeader__xHQhF {\n cursor: pointer;\n color: #007bff;\n}\n\n.ResponsiveTable-module_clickableHeader__xHQhF:hover {\n text-decoration: underline;\n}\n\n.ResponsiveTable-module_noDataWrapper__Rj-k3 {\n color: #ca3333;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n gap: 10px;\n}\n\n.ResponsiveTable-module_noData__IpwNq {\n text-align: center;\n font-weight: bold;\n padding: 30px;\n}\n";
32
+ var css_248z = ".ResponsiveTable-module_card__b-U2v {\r\n border: 1px solid #ccc;\r\n margin-bottom: 10px;\r\n border-radius: 8px;\r\n overflow: hidden;\r\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.ResponsiveTable-module_card-header__Ttk51 {\r\n background-color: #f0f0f0;\r\n padding: 10px;\r\n font-weight: bold;\r\n}\r\n\r\n.ResponsiveTable-module_card-body__XIy0h {\r\n padding: 10px;\r\n}\r\n\r\n.ResponsiveTable-module_responsiveTable__4y-Od {\r\n width: 100%;\r\n border-collapse: collapse;\r\n}\r\n\r\n.ResponsiveTable-module_responsiveTable__4y-Od thead th {\r\n background-color: #f2f2f2;\r\n position: sticky;\r\n top: 0;\r\n z-index: 2;\r\n}\r\n\r\n.ResponsiveTable-module_responsiveTable__4y-Od th,\r\n.ResponsiveTable-module_responsiveTable__4y-Od td {\r\n padding: 12px;\r\n border-bottom: 1px solid #dddddd;\r\n text-align: left;\r\n}\r\n\r\n/* Alternate row colors */\r\n.ResponsiveTable-module_responsiveTable__4y-Od tr:nth-child(even) {\r\n background-color: #f9f9f9;\r\n}\r\n\r\n/* Change background color on hover */\r\n.ResponsiveTable-module_responsiveTable__4y-Od tr:hover {\r\n background-color: #d9edf7;\r\n}\r\n\r\n.ResponsiveTable-module_clickableHeader__xHQhF {\r\n cursor: pointer;\r\n color: #007bff;\r\n}\r\n\r\n.ResponsiveTable-module_clickableHeader__xHQhF:hover {\r\n text-decoration: underline;\r\n}\r\n\r\n.ResponsiveTable-module_noDataWrapper__Rj-k3 {\r\n color: #ca3333;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height: 100%;\r\n gap: 10px;\r\n}\r\n\r\n.ResponsiveTable-module_noData__IpwNq {\r\n text-align: center;\r\n font-weight: bold;\r\n padding: 30px;\r\n}\r\n";
33
33
  var styles = {"card":"ResponsiveTable-module_card__b-U2v","card-header":"ResponsiveTable-module_card-header__Ttk51","card-body":"ResponsiveTable-module_card-body__XIy0h","responsiveTable":"ResponsiveTable-module_responsiveTable__4y-Od","clickableHeader":"ResponsiveTable-module_clickableHeader__xHQhF","noDataWrapper":"ResponsiveTable-module_noDataWrapper__Rj-k3","noData":"ResponsiveTable-module_noData__IpwNq"};
34
34
  styleInject(css_248z);
35
35
 
@@ -107,8 +107,24 @@ class ResponsiveTable extends React.Component {
107
107
  : '';
108
108
  return clickableHeaderClassName;
109
109
  }
110
+ get rowClickFunction() {
111
+ if (this.props.onRowClick) {
112
+ return this.props.onRowClick;
113
+ }
114
+ else {
115
+ return () => { };
116
+ }
117
+ }
118
+ get rowClickStyle() {
119
+ if (this.props.onRowClick) {
120
+ return { cursor: 'pointers' };
121
+ }
122
+ else {
123
+ return {};
124
+ }
125
+ }
110
126
  get mobileView() {
111
- return (React.createElement("div", null, this.data.map((row, rowIndex) => (React.createElement("div", { key: rowIndex, className: styles['card'] },
127
+ return (React.createElement("div", null, this.data.map((row, rowIndex) => (React.createElement("div", { key: rowIndex, className: styles['card'], onClick: () => this.rowClickFunction(row) },
112
128
  React.createElement("div", { className: styles['card-header'] }, " "),
113
129
  React.createElement("div", { className: styles['card-body'] }, this.props.columnDefinitions.map((columnDefinition, colIndex) => {
114
130
  const colDef = this.getColumnDefinition(columnDefinition, rowIndex);
@@ -138,7 +154,7 @@ class ResponsiveTable extends React.Component {
138
154
  ? () => onHeaderClickCallback(this.getColumnDefinition(columnDefinition, 0).interactivity.id)
139
155
  : undefined }, this.getColumnDefinition(columnDefinition, 0).displayLabel));
140
156
  }))),
141
- React.createElement("tbody", null, this.data.map((row, rowIndex) => (React.createElement("tr", { key: rowIndex }, this.props.columnDefinitions.map((columnDefinition, colIndex) => (React.createElement("td", { key: colIndex }, this.getColumnDefinition(columnDefinition, rowIndex).cellRenderer(row)))))))))));
157
+ React.createElement("tbody", null, this.data.map((row, rowIndex) => (React.createElement("tr", { key: rowIndex }, this.props.columnDefinitions.map((columnDefinition, colIndex) => (React.createElement("td", { style: Object.assign({}, this.rowClickStyle), onClick: () => this.rowClickFunction(row), key: colIndex }, this.getColumnDefinition(columnDefinition, rowIndex).cellRenderer(row)))))))))));
142
158
  }
143
159
  render() {
144
160
  if (!this.hasData) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/UI/ResponsiveTable.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n",null],"names":["Component"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.js","sources":["../node_modules/style-inject/dist/style-inject.es.js","../src/UI/ResponsiveTable.tsx"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n",null],"names":["Component"],"mappings":"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","x_google_ignoreList":[0]}
package/package.json CHANGED
@@ -1,58 +1,58 @@
1
- {
2
- "name": "jattac.libs.web.responsive-table",
3
- "version": "0.0.17",
4
- "description": "",
5
- "main": "dist/index.js",
6
- "module": "dist/index.es.js",
7
- "types": "dist/index.d.ts",
8
- "scripts": {
9
- "build": "rollup -c",
10
- "lint": "eslint './{src,app}/**/*.{ts,tsx}'",
11
- "size": "size-limit",
12
- "prepare": "npm run build"
13
- },
14
- "keywords": [
15
- "react",
16
- "typescript"
17
- ],
18
- "author": "Nyingi Maina",
19
- "license": "MIT",
20
- "peerDependencies": {
21
- "react": ">=18.2.0",
22
- "react-dom": ">=18.2.0",
23
- "typescript": ">=3.7.0"
24
- },
25
- "devDependencies": {
26
- "@rollup/plugin-commonjs": "^25.0.7",
27
- "@rollup/plugin-node-resolve": "^15.2.3",
28
- "@rollup/plugin-typescript": "^11.1.5",
29
- "@size-limit/preset-small-lib": "^10.0.1",
30
- "@testing-library/react": "^14.0.0",
31
- "@types/react": "^18.2.33",
32
- "@types/react-dom": "^18.2.14",
33
- "@typescript-eslint/eslint-plugin": "^6.9.1",
34
- "@typescript-eslint/parser": "^6.9.1",
35
- "eslint": "^8.52.0",
36
- "eslint-config-prettier": "^9.0.0",
37
- "eslint-plugin-prettier": "^5.0.1",
38
- "eslint-plugin-react": "^7.33.2",
39
- "identity-obj-proxy": "^3.0.0",
40
- "npm": "^10.2.2",
41
- "postcss": "^8.4.31",
42
- "prettier": "^3.0.3",
43
- "react": "^18.2.0",
44
- "react-dom": "^18.2.0",
45
- "rollup": "^4.2.0",
46
- "rollup-plugin-copy": "^3.5.0",
47
- "rollup-plugin-delete": "^2.0.0",
48
- "rollup-plugin-generate-package-json": "^3.2.0",
49
- "rollup-plugin-peer-deps-external": "^2.2.4",
50
- "rollup-plugin-postcss": "^4.0.2",
51
- "size-limit": "^10.0.1",
52
- "typescript": "^5.2.2"
53
- },
54
- "dependencies": {
55
- "@rollup/plugin-terser": "^0.4.4",
56
- "tslib": "^2.6.2"
57
- }
58
- }
1
+ {
2
+ "name": "jattac.libs.web.responsive-table",
3
+ "version": "0.0.19",
4
+ "description": "",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.es.js",
7
+ "types": "dist/index.d.ts",
8
+ "scripts": {
9
+ "build": "rollup -c",
10
+ "lint": "eslint './{src,app}/**/*.{ts,tsx}'",
11
+ "size": "size-limit",
12
+ "prepare": "npm run build"
13
+ },
14
+ "keywords": [
15
+ "react",
16
+ "typescript"
17
+ ],
18
+ "author": "Nyingi Maina",
19
+ "license": "MIT",
20
+ "peerDependencies": {
21
+ "react": ">=18.2.0",
22
+ "react-dom": ">=18.2.0",
23
+ "typescript": ">=3.7.0"
24
+ },
25
+ "devDependencies": {
26
+ "@rollup/plugin-commonjs": "^25.0.7",
27
+ "@rollup/plugin-node-resolve": "^15.2.3",
28
+ "@rollup/plugin-typescript": "^11.1.5",
29
+ "@size-limit/preset-small-lib": "^10.0.1",
30
+ "@testing-library/react": "^14.0.0",
31
+ "@types/react": "^18.2.33",
32
+ "@types/react-dom": "^18.2.14",
33
+ "@typescript-eslint/eslint-plugin": "^6.9.1",
34
+ "@typescript-eslint/parser": "^6.9.1",
35
+ "eslint": "^8.52.0",
36
+ "eslint-config-prettier": "^9.0.0",
37
+ "eslint-plugin-prettier": "^5.0.1",
38
+ "eslint-plugin-react": "^7.33.2",
39
+ "identity-obj-proxy": "^3.0.0",
40
+ "npm": "^10.2.2",
41
+ "postcss": "^8.4.31",
42
+ "prettier": "^3.0.3",
43
+ "react": "^18.2.0",
44
+ "react-dom": "^18.2.0",
45
+ "rollup": "^4.2.0",
46
+ "rollup-plugin-copy": "^3.5.0",
47
+ "rollup-plugin-delete": "^2.0.0",
48
+ "rollup-plugin-generate-package-json": "^3.2.0",
49
+ "rollup-plugin-peer-deps-external": "^2.2.4",
50
+ "rollup-plugin-postcss": "^4.0.2",
51
+ "size-limit": "^10.0.1",
52
+ "typescript": "^5.2.2"
53
+ },
54
+ "dependencies": {
55
+ "@rollup/plugin-terser": "^0.4.4",
56
+ "tslib": "^2.6.2"
57
+ }
58
+ }
package/rollup.config.js CHANGED
@@ -1,23 +1,23 @@
1
- const postcss = require('rollup-plugin-postcss');
2
- const typescript = require('@rollup/plugin-typescript');
3
- const peerDepsExternal = require('rollup-plugin-peer-deps-external');
4
- const resolve = require('@rollup/plugin-node-resolve').default;
5
- const commonjs = require('@rollup/plugin-commonjs');
6
-
7
- module.exports = {
8
- input: 'src/index.tsx',
9
- output: {
10
- dir: 'dist',
11
- format: 'cjs',
12
- sourcemap: true,
13
- },
14
- plugins: [
15
- peerDepsExternal(),
16
- resolve(),
17
- typescript(),
18
- commonjs(),
19
- postcss({
20
- modules: true,
21
- }),
22
- ],
23
- };
1
+ const postcss = require('rollup-plugin-postcss');
2
+ const typescript = require('@rollup/plugin-typescript');
3
+ const peerDepsExternal = require('rollup-plugin-peer-deps-external');
4
+ const resolve = require('@rollup/plugin-node-resolve').default;
5
+ const commonjs = require('@rollup/plugin-commonjs');
6
+
7
+ module.exports = {
8
+ input: 'src/index.tsx',
9
+ output: {
10
+ dir: 'dist',
11
+ format: 'cjs',
12
+ sourcemap: true,
13
+ },
14
+ plugins: [
15
+ peerDepsExternal(),
16
+ resolve(),
17
+ typescript(),
18
+ commonjs(),
19
+ postcss({
20
+ modules: true,
21
+ }),
22
+ ],
23
+ };
@@ -1,11 +1,11 @@
1
- import { ReactNode } from 'react';
2
-
3
- export default interface IResponsiveTableColumnDefinition<TData> {
4
- displayLabel: ReactNode;
5
- cellRenderer: (data: TData) => ReactNode;
6
- interactivity?: {
7
- id: string;
8
- onHeaderClick?: (id: string) => void;
9
- className?: string;
10
- };
11
- }
1
+ import { ReactNode } from 'react';
2
+
3
+ export default interface IResponsiveTableColumnDefinition<TData> {
4
+ displayLabel: ReactNode;
5
+ cellRenderer: (data: TData) => ReactNode;
6
+ interactivity?: {
7
+ id: string;
8
+ onHeaderClick?: (id: string) => void;
9
+ className?: string;
10
+ };
11
+ }
@@ -1,70 +1,70 @@
1
- .card {
2
- border: 1px solid #ccc;
3
- margin-bottom: 10px;
4
- border-radius: 8px;
5
- overflow: hidden;
6
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
7
- }
8
-
9
- .card-header {
10
- background-color: #f0f0f0;
11
- padding: 10px;
12
- font-weight: bold;
13
- }
14
-
15
- .card-body {
16
- padding: 10px;
17
- }
18
-
19
- .responsiveTable {
20
- width: 100%;
21
- border-collapse: collapse;
22
- }
23
-
24
- .responsiveTable thead th {
25
- background-color: #f2f2f2;
26
- position: sticky;
27
- top: 0;
28
- z-index: 2;
29
- }
30
-
31
- .responsiveTable th,
32
- .responsiveTable td {
33
- padding: 12px;
34
- border-bottom: 1px solid #dddddd;
35
- text-align: left;
36
- }
37
-
38
- /* Alternate row colors */
39
- .responsiveTable tr:nth-child(even) {
40
- background-color: #f9f9f9;
41
- }
42
-
43
- /* Change background color on hover */
44
- .responsiveTable tr:hover {
45
- background-color: #d9edf7;
46
- }
47
-
48
- .clickableHeader {
49
- cursor: pointer;
50
- color: #007bff;
51
- }
52
-
53
- .clickableHeader:hover {
54
- text-decoration: underline;
55
- }
56
-
57
- .noDataWrapper {
58
- color: #ca3333;
59
- display: flex;
60
- justify-content: center;
61
- align-items: center;
62
- height: 100%;
63
- gap: 10px;
64
- }
65
-
66
- .noData {
67
- text-align: center;
68
- font-weight: bold;
69
- padding: 30px;
70
- }
1
+ .card {
2
+ border: 1px solid #ccc;
3
+ margin-bottom: 10px;
4
+ border-radius: 8px;
5
+ overflow: hidden;
6
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
7
+ }
8
+
9
+ .card-header {
10
+ background-color: #f0f0f0;
11
+ padding: 10px;
12
+ font-weight: bold;
13
+ }
14
+
15
+ .card-body {
16
+ padding: 10px;
17
+ }
18
+
19
+ .responsiveTable {
20
+ width: 100%;
21
+ border-collapse: collapse;
22
+ }
23
+
24
+ .responsiveTable thead th {
25
+ background-color: #f2f2f2;
26
+ position: sticky;
27
+ top: 0;
28
+ z-index: 2;
29
+ }
30
+
31
+ .responsiveTable th,
32
+ .responsiveTable td {
33
+ padding: 12px;
34
+ border-bottom: 1px solid #dddddd;
35
+ text-align: left;
36
+ }
37
+
38
+ /* Alternate row colors */
39
+ .responsiveTable tr:nth-child(even) {
40
+ background-color: #f9f9f9;
41
+ }
42
+
43
+ /* Change background color on hover */
44
+ .responsiveTable tr:hover {
45
+ background-color: #d9edf7;
46
+ }
47
+
48
+ .clickableHeader {
49
+ cursor: pointer;
50
+ color: #007bff;
51
+ }
52
+
53
+ .clickableHeader:hover {
54
+ text-decoration: underline;
55
+ }
56
+
57
+ .noDataWrapper {
58
+ color: #ca3333;
59
+ display: flex;
60
+ justify-content: center;
61
+ align-items: center;
62
+ height: 100%;
63
+ gap: 10px;
64
+ }
65
+
66
+ .noData {
67
+ text-align: center;
68
+ font-weight: bold;
69
+ padding: 30px;
70
+ }
@@ -1,211 +1,230 @@
1
- import React, { CSSProperties, Component, ReactNode } from 'react';
2
- import styles from '../Styles/ResponsiveTable.module.css';
3
- import IResponsiveTableColumnDefinition from '../Data/IResponsiveTableColumnDefinition';
4
-
5
- type ColumnDefinition<TData> =
6
- | IResponsiveTableColumnDefinition<TData>
7
- | ((data: TData, rowIndex?: number) => IResponsiveTableColumnDefinition<TData>);
8
- interface IProps<TData> {
9
- columnDefinitions: ColumnDefinition<TData>[];
10
- data: TData[];
11
- noDataComponent?: ReactNode;
12
- maxHeight?: string;
13
- }
14
-
15
- interface IState {
16
- isMobile: boolean;
17
- }
18
-
19
- // Class component
20
- class ResponsiveTable<TData> extends Component<IProps<TData>, IState> {
21
- constructor(props: IProps<TData>) {
22
- super(props);
23
- this.state = {
24
- isMobile: false,
25
- };
26
- }
27
-
28
- private get data(): TData[] {
29
- if (Array.isArray(this.props.data) && this.props.data.length > 0) {
30
- return this.props.data;
31
- } else {
32
- return [];
33
- }
34
- }
35
-
36
- private get noDataSvg(): ReactNode {
37
- return (
38
- <svg xmlns="http://www.w3.org/2000/svg" fill="#ccc" height="40" width="40" viewBox="0 0 24 24">
39
- <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-14h2v6h-2zm0 8h2v2h-2z" />
40
- </svg>
41
- );
42
- }
43
-
44
- private get hasData(): boolean {
45
- return this.data.length > 0;
46
- }
47
-
48
- private get noDataComponent(): ReactNode {
49
- return (
50
- this.props.noDataComponent || (
51
- <div className={styles.noDataWrapper}>
52
- {this.noDataSvg}
53
- <div className={styles.noData}>No data</div>
54
- </div>
55
- )
56
- );
57
- }
58
-
59
- componentDidMount(): void {
60
- this.setState(() => {
61
- return { isMobile: window.innerWidth <= 600 };
62
- });
63
-
64
- window.addEventListener('resize', this.handleResize);
65
- }
66
-
67
- componentWillUnmount(): void {
68
- window.removeEventListener('resize', this.handleResize);
69
- }
70
-
71
- handleResize = (): void => {
72
- this.setState(() => {
73
- return { isMobile: window.innerWidth <= 600 };
74
- });
75
- };
76
-
77
- private getColumnDefinition(
78
- columnDefinition: ColumnDefinition<TData>,
79
- rowIndex: number,
80
- ): IResponsiveTableColumnDefinition<TData> {
81
- if (!this.hasData) {
82
- return { displayLabel: '', cellRenderer: () => '' };
83
- }
84
- return columnDefinition instanceof Function ? columnDefinition(this.data[0], rowIndex) : columnDefinition;
85
- }
86
-
87
- private getRawColumnDefinition(columnDefinition: ColumnDefinition<TData>): IResponsiveTableColumnDefinition<TData> {
88
- let rawColumnDefinition: IResponsiveTableColumnDefinition<TData> = {} as IResponsiveTableColumnDefinition<TData>;
89
- if (columnDefinition instanceof Function) {
90
- rawColumnDefinition = columnDefinition(this.data[0], 0);
91
- } else {
92
- rawColumnDefinition = columnDefinition as IResponsiveTableColumnDefinition<TData>;
93
- }
94
- return rawColumnDefinition;
95
- }
96
-
97
- private onHeaderClickCallback(columnDefinition: ColumnDefinition<TData>): ((id: string) => void) | undefined {
98
- const rawColumnDefinition = this.getRawColumnDefinition(columnDefinition);
99
- if (rawColumnDefinition.interactivity && rawColumnDefinition.interactivity.onHeaderClick) {
100
- return rawColumnDefinition.interactivity.onHeaderClick;
101
- } else {
102
- return undefined;
103
- }
104
- }
105
-
106
- private getClickableHeaderClassName(
107
- onHeaderClickCallback: ((id: string) => void) | undefined,
108
- colDef: ColumnDefinition<TData>,
109
- ): string {
110
- const rawColumnDefinition = this.getRawColumnDefinition(colDef);
111
- const clickableHeaderClassName = onHeaderClickCallback
112
- ? rawColumnDefinition.interactivity!.className || styles.clickableHeader
113
- : '';
114
- return clickableHeaderClassName;
115
- }
116
-
117
- private get mobileView(): ReactNode {
118
- return (
119
- <div>
120
- {this.data.map((row, rowIndex) => (
121
- <div key={rowIndex} className={styles['card']}>
122
- <div className={styles['card-header']}> </div>
123
- <div className={styles['card-body']}>
124
- {this.props.columnDefinitions.map((columnDefinition, colIndex) => {
125
- const colDef = this.getColumnDefinition(columnDefinition, rowIndex);
126
- const onHeaderClickCallback = this.onHeaderClickCallback(colDef);
127
- const clickableHeaderClassName = this.getClickableHeaderClassName(onHeaderClickCallback, colDef);
128
- return (
129
- <div key={colIndex}>
130
- <p>
131
- <span
132
- className={`font-bold ${clickableHeaderClassName}`}
133
- onClick={
134
- onHeaderClickCallback ? () => onHeaderClickCallback(colDef.interactivity!.id) : undefined
135
- }
136
- >
137
- {colDef.displayLabel}:
138
- </span>{' '}
139
- {colDef.cellRenderer(row)}
140
- </p>
141
- </div>
142
- );
143
- })}
144
- </div>
145
- </div>
146
- ))}
147
- </div>
148
- );
149
- }
150
-
151
- private get largeScreenView(): ReactNode {
152
- const useFixedHeaders = this.props.maxHeight ? true : false;
153
-
154
- const fixedHeadersStyle = useFixedHeaders
155
- ? ({ maxHeight: this.props.maxHeight, overflowY: 'auto' } as CSSProperties)
156
- : {};
157
-
158
- return (
159
- <div style={fixedHeadersStyle}>
160
- <table className={styles['responsiveTable']}>
161
- <thead>
162
- <tr>
163
- {this.props.columnDefinitions.map((columnDefinition, colIndex) => {
164
- const onHeaderClickCallback = this.onHeaderClickCallback(columnDefinition);
165
- const clickableHeaderClassName = this.getClickableHeaderClassName(
166
- onHeaderClickCallback,
167
- columnDefinition,
168
- );
169
- return (
170
- <th
171
- key={colIndex}
172
- className={`${clickableHeaderClassName}`}
173
- onClick={
174
- onHeaderClickCallback
175
- ? () => onHeaderClickCallback(this.getColumnDefinition(columnDefinition, 0).interactivity!.id)
176
- : undefined
177
- }
178
- >
179
- {this.getColumnDefinition(columnDefinition, 0).displayLabel}
180
- </th>
181
- );
182
- })}
183
- </tr>
184
- </thead>
185
- <tbody>
186
- {this.data.map((row, rowIndex) => (
187
- <tr key={rowIndex}>
188
- {this.props.columnDefinitions.map((columnDefinition, colIndex) => (
189
- <td key={colIndex}>{this.getColumnDefinition(columnDefinition, rowIndex).cellRenderer(row)}</td>
190
- ))}
191
- </tr>
192
- ))}
193
- </tbody>
194
- </table>
195
- </div>
196
- );
197
- }
198
-
199
- render() {
200
- if (!this.hasData) {
201
- return this.noDataComponent;
202
- }
203
- if (this.state.isMobile) {
204
- return this.mobileView;
205
- }
206
-
207
- return this.largeScreenView;
208
- }
209
- }
210
-
211
- export default ResponsiveTable;
1
+ import React, { CSSProperties, Component, ReactNode } from 'react';
2
+ import styles from '../Styles/ResponsiveTable.module.css';
3
+ import IResponsiveTableColumnDefinition from '../Data/IResponsiveTableColumnDefinition';
4
+
5
+ type ColumnDefinition<TData> =
6
+ | IResponsiveTableColumnDefinition<TData>
7
+ | ((data: TData, rowIndex?: number) => IResponsiveTableColumnDefinition<TData>);
8
+ interface IProps<TData> {
9
+ columnDefinitions: ColumnDefinition<TData>[];
10
+ data: TData[];
11
+ noDataComponent?: ReactNode;
12
+ maxHeight?: string;
13
+ onRowClick?: (item: TData) => void;
14
+ }
15
+
16
+ interface IState {
17
+ isMobile: boolean;
18
+ }
19
+
20
+ // Class component
21
+ class ResponsiveTable<TData> extends Component<IProps<TData>, IState> {
22
+ constructor(props: IProps<TData>) {
23
+ super(props);
24
+ this.state = {
25
+ isMobile: false,
26
+ };
27
+ }
28
+
29
+ private get data(): TData[] {
30
+ if (Array.isArray(this.props.data) && this.props.data.length > 0) {
31
+ return this.props.data;
32
+ } else {
33
+ return [];
34
+ }
35
+ }
36
+
37
+ private get noDataSvg(): ReactNode {
38
+ return (
39
+ <svg xmlns="http://www.w3.org/2000/svg" fill="#ccc" height="40" width="40" viewBox="0 0 24 24">
40
+ <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-1-14h2v6h-2zm0 8h2v2h-2z" />
41
+ </svg>
42
+ );
43
+ }
44
+
45
+ private get hasData(): boolean {
46
+ return this.data.length > 0;
47
+ }
48
+
49
+ private get noDataComponent(): ReactNode {
50
+ return (
51
+ this.props.noDataComponent || (
52
+ <div className={styles.noDataWrapper}>
53
+ {this.noDataSvg}
54
+ <div className={styles.noData}>No data</div>
55
+ </div>
56
+ )
57
+ );
58
+ }
59
+
60
+ componentDidMount(): void {
61
+ this.setState(() => {
62
+ return { isMobile: window.innerWidth <= 600 };
63
+ });
64
+
65
+ window.addEventListener('resize', this.handleResize);
66
+ }
67
+
68
+ componentWillUnmount(): void {
69
+ window.removeEventListener('resize', this.handleResize);
70
+ }
71
+
72
+ handleResize = (): void => {
73
+ this.setState(() => {
74
+ return { isMobile: window.innerWidth <= 600 };
75
+ });
76
+ };
77
+
78
+ private getColumnDefinition(
79
+ columnDefinition: ColumnDefinition<TData>,
80
+ rowIndex: number,
81
+ ): IResponsiveTableColumnDefinition<TData> {
82
+ if (!this.hasData) {
83
+ return { displayLabel: '', cellRenderer: () => '' };
84
+ }
85
+ return columnDefinition instanceof Function ? columnDefinition(this.data[0], rowIndex) : columnDefinition;
86
+ }
87
+
88
+ private getRawColumnDefinition(columnDefinition: ColumnDefinition<TData>): IResponsiveTableColumnDefinition<TData> {
89
+ let rawColumnDefinition: IResponsiveTableColumnDefinition<TData> = {} as IResponsiveTableColumnDefinition<TData>;
90
+ if (columnDefinition instanceof Function) {
91
+ rawColumnDefinition = columnDefinition(this.data[0], 0);
92
+ } else {
93
+ rawColumnDefinition = columnDefinition as IResponsiveTableColumnDefinition<TData>;
94
+ }
95
+ return rawColumnDefinition;
96
+ }
97
+
98
+ private onHeaderClickCallback(columnDefinition: ColumnDefinition<TData>): ((id: string) => void) | undefined {
99
+ const rawColumnDefinition = this.getRawColumnDefinition(columnDefinition);
100
+ if (rawColumnDefinition.interactivity && rawColumnDefinition.interactivity.onHeaderClick) {
101
+ return rawColumnDefinition.interactivity.onHeaderClick;
102
+ } else {
103
+ return undefined;
104
+ }
105
+ }
106
+
107
+ private getClickableHeaderClassName(
108
+ onHeaderClickCallback: ((id: string) => void) | undefined,
109
+ colDef: ColumnDefinition<TData>,
110
+ ): string {
111
+ const rawColumnDefinition = this.getRawColumnDefinition(colDef);
112
+ const clickableHeaderClassName = onHeaderClickCallback
113
+ ? rawColumnDefinition.interactivity!.className || styles.clickableHeader
114
+ : '';
115
+ return clickableHeaderClassName;
116
+ }
117
+
118
+ private get rowClickFunction(): (item: TData) => void {
119
+ if (this.props.onRowClick) {
120
+ return this.props.onRowClick;
121
+ } else {
122
+ return () => {};
123
+ }
124
+ }
125
+
126
+ private get rowClickStyle(): CSSProperties {
127
+ if (this.props.onRowClick) {
128
+ return { cursor: 'pointers' } as CSSProperties;
129
+ } else {
130
+ return {};
131
+ }
132
+ }
133
+
134
+ private get mobileView(): ReactNode {
135
+ return (
136
+ <div>
137
+ {this.data.map((row, rowIndex) => (
138
+ <div key={rowIndex} className={styles['card']} onClick={() => this.rowClickFunction(row)}>
139
+ <div className={styles['card-header']}> </div>
140
+ <div className={styles['card-body']}>
141
+ {this.props.columnDefinitions.map((columnDefinition, colIndex) => {
142
+ const colDef = this.getColumnDefinition(columnDefinition, rowIndex);
143
+ const onHeaderClickCallback = this.onHeaderClickCallback(colDef);
144
+ const clickableHeaderClassName = this.getClickableHeaderClassName(onHeaderClickCallback, colDef);
145
+ return (
146
+ <div key={colIndex}>
147
+ <p>
148
+ <span
149
+ className={`font-bold ${clickableHeaderClassName}`}
150
+ onClick={
151
+ onHeaderClickCallback ? () => onHeaderClickCallback(colDef.interactivity!.id) : undefined
152
+ }
153
+ >
154
+ {colDef.displayLabel}:
155
+ </span>{' '}
156
+ {colDef.cellRenderer(row)}
157
+ </p>
158
+ </div>
159
+ );
160
+ })}
161
+ </div>
162
+ </div>
163
+ ))}
164
+ </div>
165
+ );
166
+ }
167
+
168
+ private get largeScreenView(): ReactNode {
169
+ const useFixedHeaders = this.props.maxHeight ? true : false;
170
+
171
+ const fixedHeadersStyle = useFixedHeaders
172
+ ? ({ maxHeight: this.props.maxHeight, overflowY: 'auto' } as CSSProperties)
173
+ : {};
174
+
175
+ return (
176
+ <div style={fixedHeadersStyle}>
177
+ <table className={styles['responsiveTable']}>
178
+ <thead>
179
+ <tr>
180
+ {this.props.columnDefinitions.map((columnDefinition, colIndex) => {
181
+ const onHeaderClickCallback = this.onHeaderClickCallback(columnDefinition);
182
+ const clickableHeaderClassName = this.getClickableHeaderClassName(
183
+ onHeaderClickCallback,
184
+ columnDefinition,
185
+ );
186
+ return (
187
+ <th
188
+ key={colIndex}
189
+ className={`${clickableHeaderClassName}`}
190
+ onClick={
191
+ onHeaderClickCallback
192
+ ? () => onHeaderClickCallback(this.getColumnDefinition(columnDefinition, 0).interactivity!.id)
193
+ : undefined
194
+ }
195
+ >
196
+ {this.getColumnDefinition(columnDefinition, 0).displayLabel}
197
+ </th>
198
+ );
199
+ })}
200
+ </tr>
201
+ </thead>
202
+ <tbody>
203
+ {this.data.map((row, rowIndex) => (
204
+ <tr key={rowIndex}>
205
+ {this.props.columnDefinitions.map((columnDefinition, colIndex) => (
206
+ <td style={{ ...this.rowClickStyle }} onClick={() => this.rowClickFunction(row)} key={colIndex}>
207
+ {this.getColumnDefinition(columnDefinition, rowIndex).cellRenderer(row)}
208
+ </td>
209
+ ))}
210
+ </tr>
211
+ ))}
212
+ </tbody>
213
+ </table>
214
+ </div>
215
+ );
216
+ }
217
+
218
+ render() {
219
+ if (!this.hasData) {
220
+ return this.noDataComponent;
221
+ }
222
+ if (this.state.isMobile) {
223
+ return this.mobileView;
224
+ }
225
+
226
+ return this.largeScreenView;
227
+ }
228
+ }
229
+
230
+ export default ResponsiveTable;
package/src/index.tsx CHANGED
@@ -1,5 +1,5 @@
1
- import IResponsiveTableColumnDefinition from "./Data/IResponsiveTableColumnDefinition";
2
- import ResponsiveTable from "./UI/ResponsiveTable";
3
-
4
- export {IResponsiveTableColumnDefinition}
5
- export default ResponsiveTable
1
+ import IResponsiveTableColumnDefinition from "./Data/IResponsiveTableColumnDefinition";
2
+ import ResponsiveTable from "./UI/ResponsiveTable";
3
+
4
+ export {IResponsiveTableColumnDefinition}
5
+ export default ResponsiveTable
package/src/typings.d.ts CHANGED
@@ -1,14 +1,14 @@
1
- declare module '*.css' {
2
- const content: { [className: string]: string };
3
- export default content;
4
- }
5
-
6
- // eslint-disable-next-line @typescript-eslint/no-empty-interface
7
- interface SvgrComponent extends React.StatelessComponent<React.SVGAttributes<SVGElement>> {}
8
-
9
- declare module '*.svg' {
10
- const svgUrl: string;
11
- const svgComponent: SvgrComponent;
12
- export default svgUrl;
13
- export { svgComponent as ReactComponent };
14
- }
1
+ declare module '*.css' {
2
+ const content: { [className: string]: string };
3
+ export default content;
4
+ }
5
+
6
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
7
+ interface SvgrComponent extends React.StatelessComponent<React.SVGAttributes<SVGElement>> {}
8
+
9
+ declare module '*.svg' {
10
+ const svgUrl: string;
11
+ const svgComponent: SvgrComponent;
12
+ export default svgUrl;
13
+ export { svgComponent as ReactComponent };
14
+ }
package/tsconfig.json CHANGED
@@ -1,22 +1,22 @@
1
- {
2
- "compilerOptions": {
3
- "outDir": "dist",
4
- "module": "esnext",
5
- "target": "es2015",
6
- "lib": ["dom", "esnext"],
7
- "moduleResolution": "node",
8
- "jsx": "react",
9
- "sourceMap": true,
10
- "declaration": true,
11
- "esModuleInterop": true,
12
- "noImplicitReturns": true,
13
- "noImplicitThis": true,
14
- "noImplicitAny": true,
15
- "strictNullChecks": true,
16
- "noUnusedLocals": true,
17
- "noUnusedParameters": true,
18
- "allowSyntheticDefaultImports": true
19
- },
20
- "include": ["src"],
21
- "exclude": ["node_modules", "dist"]
22
- }
1
+ {
2
+ "compilerOptions": {
3
+ "outDir": "dist",
4
+ "module": "esnext",
5
+ "target": "es2015",
6
+ "lib": ["dom", "esnext"],
7
+ "moduleResolution": "node",
8
+ "jsx": "react",
9
+ "sourceMap": true,
10
+ "declaration": true,
11
+ "esModuleInterop": true,
12
+ "noImplicitReturns": true,
13
+ "noImplicitThis": true,
14
+ "noImplicitAny": true,
15
+ "strictNullChecks": true,
16
+ "noUnusedLocals": true,
17
+ "noUnusedParameters": true,
18
+ "allowSyntheticDefaultImports": true
19
+ },
20
+ "include": ["src"],
21
+ "exclude": ["node_modules", "dist"]
22
+ }
@@ -1,4 +1,4 @@
1
- #!/bin/bash
2
-
3
- # Update all dependencies
4
- npm update
1
+ #!/bin/bash
2
+
3
+ # Update all dependencies
4
+ npm update
@@ -1,22 +0,0 @@
1
- import { PureComponent, ReactNode } from 'react';
2
- import { IValidationError } from 'jattac.libs.web.validationhelper';
3
- import React from 'react';
4
- interface IFormFieldProps {
5
- children: ReactNode;
6
- label: ReactNode;
7
- hint?: ReactNode;
8
- id: string;
9
- validationErrors?: IValidationError[];
10
- optional?: boolean;
11
- }
12
- export default class FormField extends PureComponent<IFormFieldProps> {
13
- private contentRef;
14
- private get firstInputOfContentRef();
15
- private get validationError();
16
- private setKeyOfFirstInput;
17
- componentDidMount(): void;
18
- private get isRequired();
19
- private get errorDisplay();
20
- render(): React.JSX.Element;
21
- }
22
- export { type IFormFieldProps };