tp-react-elements 1.3.20 → 2.0.1

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/README.md CHANGED
@@ -2,6 +2,26 @@
2
2
 
3
3
  A comprehensive React form library built with Material-UI and React Hook Form, designed for enterprise applications.
4
4
 
5
+ ## 🆕 What's New
6
+
7
+ > Quick-glance log of notable fixes and changes. Newest entries first.
8
+ > Each entry should also be reflected in the affected component's
9
+ > Storybook docs (`*.stories.tsx` → `meta.parameters.docs.description`)
10
+ > so consumers see the same explanation in both places.
11
+
12
+ - **`SingleSelectSearchApi`** — Fixed a `Tooltip`/Popper mis-anchoring bug where
13
+ the selected-value tooltip rendered pinned to the viewport's top-left corner
14
+ (0,0) instead of near the input when the field sat inside an
15
+ `overflow: hidden` ancestor (e.g. a table cell in `material-react-table` /
16
+ `GenericPaginatedGrid`). The `Tooltip` is **retained** (not removed) and now
17
+ uses `placement="top-start"`, `arrow`, `disableInteractive`, and a
18
+ `slotProps.popper` block with Popper.js modifiers (`offset`,
19
+ `preventOverflow` with `boundary: 'clippingParents'`, `flip`) so it
20
+ portal-renders to `document.body` and stays correctly anchored. See the
21
+ **"Tooltip inside a clipped container"** story in
22
+ `SingleSelectSearchApi.stories.tsx` for a live repro, and the component's
23
+ JSDoc for implementation notes.
24
+
5
25
  ## 🚀 Features
6
26
 
7
27
  - **🔄 Seamless Integration** - Built on React Hook Form for performance and flexibility
@@ -1,3 +1,3 @@
1
- var DateInput = {};
1
+ var InputRangeField = {};
2
2
 
3
- export { DateInput as __exports };
3
+ export { InputRangeField as __exports };
@@ -1,3 +1,3 @@
1
- var InputRangeField = {};
1
+ var DateInput = {};
2
2
 
3
- export { InputRangeField as __exports };
3
+ export { DateInput as __exports };
@@ -1,3 +1,3 @@
1
- var Calendar = {};
1
+ var DefinedRange = {};
2
2
 
3
- export { Calendar as __exports };
3
+ export { DefinedRange as __exports };
@@ -1,3 +1,3 @@
1
- var DefinedRange = {};
1
+ var DateRange = {};
2
2
 
3
- export { DefinedRange as __exports };
3
+ export { DateRange as __exports };
@@ -1,3 +1,3 @@
1
- var DateRange = {};
1
+ var Calendar = {};
2
2
 
3
- export { DateRange as __exports };
3
+ export { Calendar as __exports };
@@ -1,5 +1,13 @@
1
1
  import { jsx, Fragment } from 'react/jsx-runtime';
2
2
  import React__default, { lazy, Suspense } from 'react';
3
+ import FormCheckBox from '../FormComponents/FormCheckBox/FormCheckBox.esm.js';
4
+ import FormCheckBoxGroup from '../FormComponents/FormCheckBoxGroup/FormCheckBoxGroup.esm.js';
5
+ import FormNumberField from '../FormComponents/FormNumberField/FormNumberField.esm.js';
6
+ import FormNumberFieldDecimal from '../FormComponents/FormNumberField/FormNumberFieldDecimal.esm.js';
7
+ import FormRadioGroup from '../FormComponents/FormRadioGroup/FormRadioGroup.esm.js';
8
+ import FormTextAreaField from '../FormComponents/FormTextAreaField/FormTextAreaField.esm.js';
9
+ import FormTextField from '../FormComponents/FormTextField/FormTextField.esm.js';
10
+ import PasswordField from '../FormComponents/PasswordField/PasswordField.esm.js';
3
11
  import SingleSelect from '../FormComponents/Select/SingleSelect.esm.js';
4
12
  import MultiSelectAutocomplete from '../FormComponents/Select/MultiSelectAutocomplete.esm.js';
5
13
  import SingleSelectNonAutoComplete from '../FormComponents/Select/SingleSelectNonAutoComplete.esm.js';
@@ -10,14 +18,6 @@ import DateRangePickerComponent from '../DateRangePicker/DateRangePicker.esm.js'
10
18
  import RichTextEditorWrapper from '../FormComponents/RichTextEditor/RichTextEditorWrapper.esm.js';
11
19
  import SingleSelectSearchApi from '../FormComponents/Select/SingleSelectSearchApi.esm.js';
12
20
  import DatetimepickerWrapper from '../FormComponents/DatePicker/DatetimepickerWrapper.esm.js';
13
- import FormTextAreaField from '../FormComponents/FormTextAreaField/FormTextAreaField.esm.js';
14
- import FormCheckBox from '../FormComponents/FormCheckBox/FormCheckBox.esm.js';
15
- import FormRadioGroup from '../FormComponents/FormRadioGroup/FormRadioGroup.esm.js';
16
- import FormCheckBoxGroup from '../FormComponents/FormCheckBoxGroup/FormCheckBoxGroup.esm.js';
17
- import FormNumberFieldDecimal from '../FormComponents/FormNumberField/FormNumberFieldDecimal.esm.js';
18
- import FormNumberField from '../FormComponents/FormNumberField/FormNumberField.esm.js';
19
- import PasswordField from '../FormComponents/PasswordField/PasswordField.esm.js';
20
- import FormTextField from '../FormComponents/FormTextField/FormTextField.esm.js';
21
21
 
22
22
  // Lazy-loaded heavy components
23
23
  // const RichTextEditorWrapper = lazy(() =>
@@ -21,6 +21,23 @@ export interface SearchOption {
21
21
  * ### API call guard
22
22
  * Searches fire only after `minSearchLength` chars AND after the `debounceMs`
23
23
  * debounce delay — preventing a request per keystroke.
24
+ *
25
+ * ### Selected-value tooltip & anchoring inside clipped containers
26
+ * The input is wrapped in a MUI `Tooltip` showing `resolvedValue.label` on
27
+ * hover (useful when a narrow column truncates the label). The `Tooltip` is
28
+ * configured with `placement="top-start"`, `arrow`, `disableInteractive`, and
29
+ * a `slotProps.popper` block carrying Popper.js modifiers — `offset`,
30
+ * `preventOverflow` (`boundary: 'clippingParents'`), and `flip`.
31
+ *
32
+ * This keeps the tooltip correctly anchored to the input even when the field
33
+ * sits inside an `overflow: hidden` ancestor (e.g. a table cell in
34
+ * `material-react-table` / `GenericPaginatedGrid`) — without this
35
+ * configuration, MUI's Popper can mis-anchor and pin the tooltip to the
36
+ * viewport's top-left corner (0,0) instead of near the input. The fix
37
+ * deliberately *keeps* the `Tooltip` (rather than removing it) by letting it
38
+ * portal-render to `document.body` and resolving its position against the
39
+ * clipping ancestor's boundary. See the "Tooltip inside a clipped container"
40
+ * Storybook story for a live repro.
24
41
  */
25
42
  declare const SingleSelectSearchApi: ({ props, variant, minSearchLength, debounceMs, fetchOptions, }: {
26
43
  props: FormRenderProps;
@@ -49,6 +49,23 @@ function useDebounce(value, delayMs) {
49
49
  * ### API call guard
50
50
  * Searches fire only after `minSearchLength` chars AND after the `debounceMs`
51
51
  * debounce delay — preventing a request per keystroke.
52
+ *
53
+ * ### Selected-value tooltip & anchoring inside clipped containers
54
+ * The input is wrapped in a MUI `Tooltip` showing `resolvedValue.label` on
55
+ * hover (useful when a narrow column truncates the label). The `Tooltip` is
56
+ * configured with `placement="top-start"`, `arrow`, `disableInteractive`, and
57
+ * a `slotProps.popper` block carrying Popper.js modifiers — `offset`,
58
+ * `preventOverflow` (`boundary: 'clippingParents'`), and `flip`.
59
+ *
60
+ * This keeps the tooltip correctly anchored to the input even when the field
61
+ * sits inside an `overflow: hidden` ancestor (e.g. a table cell in
62
+ * `material-react-table` / `GenericPaginatedGrid`) — without this
63
+ * configuration, MUI's Popper can mis-anchor and pin the tooltip to the
64
+ * viewport's top-left corner (0,0) instead of near the input. The fix
65
+ * deliberately *keeps* the `Tooltip` (rather than removing it) by letting it
66
+ * portal-render to `document.body` and resolving its position against the
67
+ * clipping ancestor's boundary. See the "Tooltip inside a clipped container"
68
+ * Storybook story for a live repro.
52
69
  */
53
70
  const SingleSelectSearchApi = ({ props, variant, minSearchLength = 3, debounceMs = 300, fetchOptions, }) => {
54
71
  // ── Stable references from props ──────────────────────────────────────────
@@ -188,7 +205,53 @@ const SingleSelectSearchApi = ({ props, variant, minSearchLength = 3, debounceMs
188
205
  }, slotProps: {
189
206
  popper: { sx: { zIndex: 20000 } },
190
207
  listbox: { sx: { fontSize: '11px' } },
191
- }, PaperComponent: ({ children, ...paperProps }) => (jsx(Paper, { elevation: 4, ...paperProps, children: children })), renderInput: (params) => (jsx(Tooltip, { title: resolvedValue?.label ?? '', children: jsx(TextField, { ...params, error: isError && !formValue, label: variant !== 'standard'
208
+ }, PaperComponent: ({ children, ...paperProps }) => (jsx(Paper, { elevation: 4, ...paperProps, children: children })), renderInput: (params) => (jsx(Tooltip, { title: resolvedValue?.label ?? '', placement: "top-start", arrow: true, disableInteractive: true,
209
+ // Fixes a Popper mis-anchoring bug where the tooltip rendered
210
+ // pinned to the viewport's top-left corner when this field
211
+ // sits inside an `overflow: hidden` ancestor (e.g. a table
212
+ // cell in material-react-table / GenericPaginatedGrid).
213
+ //
214
+ // ROOT CAUSE: Popper.js ships a built-in `hide` modifier that
215
+ // runs `detectOverflow` against the `clippingParents` boundary.
216
+ // Because our reference element (the input) sits inside an
217
+ // `overflow: hidden` table cell, Popper decides the reference
218
+ // is "hidden" relative to that clipping boundary and collapses
219
+ // the popper to `inset: 0 auto auto 0` (the body's top-left
220
+ // origin) — regardless of `placement`/`offset`/`preventOverflow`
221
+ // configuration. That's the (0,0) pin we were seeing.
222
+ //
223
+ // FIX: explicitly disable the `hide` modifier (we don't want
224
+ // "hide when clipped" behaviour — we want the tooltip to
225
+ // escape the clipping ancestor instead), and measure overflow
226
+ // against the `viewport` (via `rootBoundary`) rather than the
227
+ // clipping table cell, since the whole point is to stay
228
+ // visible in the viewport even when the anchor is inside a
229
+ // clipped container. `disablePortal: false` (the default)
230
+ // portal-renders the tooltip to `document.body` so it can
231
+ // visually escape the clipping ancestor.
232
+ slotProps: {
233
+ popper: {
234
+ sx: { zIndex: 20001 },
235
+ modifiers: [
236
+ { name: 'hide', enabled: false },
237
+ { name: 'offset', options: { offset: [0, 6] } },
238
+ {
239
+ name: 'preventOverflow',
240
+ options: {
241
+ boundary: 'clippingParents',
242
+ rootBoundary: 'viewport',
243
+ altAxis: true,
244
+ padding: 8,
245
+ },
246
+ },
247
+ {
248
+ name: 'flip',
249
+ enabled: true,
250
+ options: { rootBoundary: 'viewport', fallbackPlacements: ['bottom-start', 'top-start', 'right', 'left'] },
251
+ },
252
+ ],
253
+ },
254
+ }, children: jsx(TextField, { ...params, error: isError && !formValue, label: variant !== 'standard'
192
255
  ? `${label}${required ? ' *' : ''}`
193
256
  : '', placeholder: placeholder, inputProps: {
194
257
  ...params.inputProps,
@@ -1,25 +1,39 @@
1
+ export { default as FormNumberField } from './FormNumberField/FormNumberField.esm.js';
2
+ export { default as FormNumberFieldDecimal } from './FormNumberField/FormNumberFieldDecimal.esm.js';
3
+ export { default as FormTextAreaField } from './FormTextAreaField/FormTextAreaField.esm.js';
4
+ export { default as FormTextField } from './FormTextField/FormTextField.esm.js';
5
+ export { default as PasswordField } from './PasswordField/PasswordField.esm.js';
6
+ export { default as FormCheckBox } from './FormCheckBox/FormCheckBox.esm.js';
1
7
  export { default as SingleSelect } from './Select/SingleSelect.esm.js';
2
8
  export { default as SingleSelectNonAutoComplete } from './Select/SingleSelectNonAutoComplete.esm.js';
3
9
  export { default as SingleSelectSearchApi } from './Select/SingleSelectSearchApi.esm.js';
4
10
  export { default as MultiSelectV1 } from './Select/MultiSelectv1.esm.js';
5
11
  export { default as MultiSelectTable } from './Select/MultiSelectTable.esm.js';
6
12
  export { default as SearchableSelect } from './Select/SearchableSelect.esm.js';
13
+ export { default as FormCheckBoxGroup } from './FormCheckBoxGroup/FormCheckBoxGroup.esm.js';
14
+ export { default as FormRadioGroup } from './FormRadioGroup/FormRadioGroup.esm.js';
7
15
  export { default as DatepickerWrapperV2 } from './DatePicker/DatepickerWrapperV2.esm.js';
8
16
  export { default as Monthpickerrender } from './DatePicker/Monthpickerrender.esm.js';
9
17
  export { default as YearPickerField } from './YearPickerField/YearPickerField.esm.js';
10
- export { default as FormBottomField } from './FormBottomField/FormBottomField.esm.js';
11
- export { default as FormCheckBox } from './FormCheckBox/FormCheckBox.esm.js';
12
- export { default as FormCheckBoxGroup } from './FormCheckBoxGroup/FormCheckBoxGroup.esm.js';
13
- export { default as FormErrorField } from './FormErrorField/FormErrorField.esm.js';
14
- export { default as FormNumberField } from './FormNumberField/FormNumberField.esm.js';
15
- export { default as FormNumberFieldDecimal } from './FormNumberField/FormNumberFieldDecimal.esm.js';
16
- export { default as FormRadioGroup } from './FormRadioGroup/FormRadioGroup.esm.js';
18
+ export { default as TimePicker } from './TimePicker/TimePicker.esm.js';
17
19
  export { default as FormRenderFileUpload } from './FileUpload/FormRenderFileUpload.esm.js';
18
20
  export { default as FormRenderMultiFileUpload } from './FileUpload/FormRenderMultiFileUpload.esm.js';
19
- export { default as FormTextAreaField } from './FormTextAreaField/FormTextAreaField.esm.js';
20
- export { default as FormTextField } from './FormTextField/FormTextField.esm.js';
21
+ import 'react/jsx-runtime';
22
+ import '@mui/material';
23
+ import 'react';
24
+ import 'react-hook-form';
25
+ import 'dayjs';
26
+ export { default as FormBottomField } from './FormBottomField/FormBottomField.esm.js';
27
+ import '@mui/icons-material/Visibility';
28
+ import '@mui/icons-material/Close';
29
+ import '@mui/icons-material/NavigateBefore';
30
+ import '@mui/icons-material/NavigateNext';
31
+ import '@mui/icons-material/Delete';
32
+ import '@mui/icons-material/UploadFile';
33
+ import '@mui/icons-material/PictureAsPdf';
34
+ import '@mui/icons-material/TableChart';
35
+ import '@mui/icons-material/Description';
36
+ export { default as FormErrorField } from './FormErrorField/FormErrorField.esm.js';
21
37
  export { default as HelperText } from './HelperText/HelperText.esm.js';
22
- export { default as PasswordField } from './PasswordField/PasswordField.esm.js';
23
38
  export { default as RichTextEditor } from './RichTextEditor/RichTextEditor.esm.js';
24
39
  export { default as RichTextEditorWrapper } from './RichTextEditor/RichTextEditorWrapper.esm.js';
25
- export { default as TimePicker } from './TimePicker/TimePicker.esm.js';
@@ -1,4 +1,4 @@
1
- import { __exports as Calendar } from '../../../../../_virtual/index.esm5.js';
1
+ import { __exports as Calendar } from '../../../../../_virtual/index.esm7.js';
2
2
  import React__default from 'react';
3
3
  import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
4
4
  import { __require as requireDayCell } from '../DayCell/index.esm.js';
@@ -1,4 +1,4 @@
1
- import { __exports as DateInput } from '../../../../../_virtual/index.esm12.js';
1
+ import { __exports as DateInput } from '../../../../../_virtual/index.esm14.js';
2
2
  import React__default from 'react';
3
3
  import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
4
4
  import { __require as requireClassnames } from '../../../../classnames/index.esm.js';
@@ -1,4 +1,4 @@
1
- import { __exports as DateRange } from '../../../../../_virtual/index.esm7.js';
1
+ import { __exports as DateRange } from '../../../../../_virtual/index.esm6.js';
2
2
  import React__default from 'react';
3
3
  import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
4
4
  import { __require as requireCalendar } from '../Calendar/index.esm.js';
@@ -1,4 +1,4 @@
1
- import { __exports as DefinedRange } from '../../../../../_virtual/index.esm6.js';
1
+ import { __exports as DefinedRange } from '../../../../../_virtual/index.esm5.js';
2
2
  import React__default from 'react';
3
3
  import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
4
4
  import { __require as requireStyles } from '../../styles.esm.js';
@@ -1,4 +1,4 @@
1
- import { __exports as InputRangeField } from '../../../../../_virtual/index.esm14.js';
1
+ import { __exports as InputRangeField } from '../../../../../_virtual/index.esm12.js';
2
2
  import React__default from 'react';
3
3
  import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
4
4
 
package/package.json CHANGED
@@ -1,211 +1,211 @@
1
- {
2
- "name": "tp-react-elements",
3
- "version": "1.3.20",
4
- "private": false,
5
- "type": "module",
6
- "description": "React form components library built with React Hook Form and Yup",
7
- "main": "dist/index.esm.js",
8
- "module": "dist/index.esm.js",
9
- "types": "dist/index.d.ts",
10
- "exports": {
11
- ".": {
12
- "import": "./dist/index.esm.js",
13
- "types": "./dist/index.d.ts"
14
- },
15
- "./form": {
16
- "import": "./dist/components/Form/index.esm.js",
17
- "types": "./dist/components/Form/index.d.ts"
18
- },
19
- "./utils": {
20
- "import": "./dist/utils/index.esm.js",
21
- "types": "./dist/utils/index.d.ts"
22
- },
23
- "./validation": {
24
- "import": "./dist/validation/index.esm.js",
25
- "types": "./dist/validation/index.d.ts"
26
- },
27
- "./components/*": {
28
- "import": "./dist/components/*/index.esm.js",
29
- "types": "./dist/components/*/index.d.ts"
30
- },
31
- "./theme": {
32
- "import": "./dist/theme/index.esm.js",
33
- "types": "./dist/theme/index.d.ts"
34
- },
35
- "./package.json": "./package.json"
36
- },
37
- "bin": {
38
- "install-tp-form-deps": "./scripts/install-deps.js"
39
- },
40
- "files": [
41
- "dist",
42
- "scripts"
43
- ],
44
- "sideEffects": [
45
- "*.css",
46
- "*.scss"
47
- ],
48
- "scripts": {
49
- "dev": "vite",
50
- "preview": "vite preview",
51
- "clean": "rimraf dist dist-dev",
52
- "type-check": "tsc --noEmit",
53
- "build:types": "tsc --project tsconfig.build.json --emitDeclarationOnly && tsc-alias -p tsconfig.build.json && echo \"✅ TypeScript declaration files generated successfully!\"",
54
- "build:types:qa": "tsc --project tsconfig.build.qa.json --emitDeclarationOnly && tsc-alias -p tsconfig.build.qa.json && echo \"✅ QA declaration files (with maps) generated!\"",
55
- "build:esm": "npm run clean && rollup -c rollup.config.js",
56
- "build:lib": "npm run clean && rollup -c rollup.config.js && npm run build:types && echo \"✅ Complete library build finished! ESM build completed successfully!\"",
57
- "build:lib:qa": "npm run clean && rollup -c rollup.config.js && npm run build:types:qa && echo \"✅ QA build finished (includes .d.ts.map)\"",
58
- "analyze": "npm run clean && cross-env BUNDLE_ANALYZE=true rollup -c rollup.config.js",
59
- "analyze:dev": "cross-env ANALYZE_BUNDLE=true vite build",
60
- "test": "vitest",
61
- "test:ui": "vitest --ui",
62
- "test:coverage": "vitest --coverage",
63
- "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
64
- "lint:fix": "eslint . --ext ts,tsx --fix",
65
- "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,css,scss,md,json}\"",
66
- "format:check": "prettier --check \"src/**/*.{js,jsx,ts,tsx,css,scss,md,json}\"",
67
- "storybook": "storybook dev -p 6006",
68
- "build-storybook": "storybook build",
69
- "version:patch": "npm version patch",
70
- "version:minor": "npm version minor",
71
- "version:major": "npm version major",
72
- "publish:prepare": "npm run build:lib && npm run type-check",
73
- "publish:npm": "npm publish",
74
- "publish:beta": "npm publish --tag beta",
75
- "publish:patch": "npm version patch --no-git-tag-version && npm publish",
76
- "publish:minor": "npm version minor --no-git-tag-version && npm publish",
77
- "publish:major": "npm version major --no-git-tag-version && npm publish",
78
- "publish:auto": "npm run publish:prepare && npm publish",
79
- "install-peers": "install-tp-form-deps",
80
- "package-build": "rollup -c --bundleConfigAsCjs",
81
- "prepublishOnly": "npm run build:lib"
82
- },
83
- "peerDependencies": {
84
- "@tanstack/react-query": ">=5.0.0 <6.0.0",
85
- "@emotion/react": ">=11.14.0 <13.0.0",
86
- "@emotion/styled": ">=11.14.1 <13.0.0",
87
- "@hookform/error-message": ">=2.0.1 <3.0.0",
88
- "@hookform/resolvers": ">=5.2.1 <6.0.0",
89
- "@mui/icons-material": ">=7.3.1 <8.0.0",
90
- "@mui/material": ">=7.3.1 <8.0.0",
91
- "@mui/x-date-pickers": ">=8.10.2 <9.0.0",
92
- "crypto-js": ">=4.2.0 <5.0.0",
93
- "dayjs": ">=1.11.13 <2.0.0",
94
- "file-saver": ">=2.0.5 <3.0.0",
95
- "jodit": ">=4.6.2 <5.0.0",
96
- "jodit-react": ">=5.2.19 <6.0.0",
97
- "material-react-table": ">=3.0.0 <4.0.0",
98
- "react": ">=18 <20",
99
- "react-dom": ">=18 <20",
100
- "react-hook-form": ">=7.62.0 <8.0.0",
101
- "react-idle-timer": ">=5.7.2 <6.0.0",
102
- "xlsx-js-style": ">=1.2.0 <2.0.0",
103
- "yup": ">=1.7.0 <2.0.0"
104
- },
105
- "peerDependenciesMeta": {
106
- "@tanstack/react-query": {
107
- "optional": true
108
- },
109
- "react-idle-timer": {
110
- "optional": true
111
- },
112
- "jodit": {
113
- "optional": true
114
- },
115
- "jodit-react": {
116
- "optional": true
117
- },
118
- "material-react-table": {
119
- "optional": true
120
- }
121
- },
122
- "devDependencies": {
123
- "@emotion/react": "^11.14.0",
124
- "@emotion/styled": "^11.14.1",
125
- "@hookform/error-message": "^2.0.1",
126
- "@hookform/resolvers": "^5.2.1",
127
- "@mui/icons-material": "^7.3.1",
128
- "@mui/material": "^7.3.1",
129
- "@mui/x-date-pickers": "^8.10.2",
130
- "@rollup/plugin-commonjs": "^28.0.6",
131
- "@rollup/plugin-node-resolve": "^16.0.1",
132
- "@rollup/plugin-typescript": "^12.1.4",
133
- "@storybook/addon-docs": "^9.1.2",
134
- "@storybook/addon-links": "^9.1.2",
135
- "@storybook/react-vite": "^9.1.2",
136
- "@tanstack/react-query": "^5.100.14",
137
- "@testing-library/jest-dom": "^6.5.0",
138
- "@testing-library/react": "^16.0.1",
139
- "@testing-library/user-event": "^14.5.2",
140
- "@types/crypto-js": "^4.2.2",
141
- "@types/file-saver": "^2.0.7",
142
- "@types/node": "^22.11.0",
143
- "@types/react": "^19.0.0",
144
- "@types/react-dom": "^19.0.0",
145
- "@typescript-eslint/eslint-plugin": "^8.8.0",
146
- "@typescript-eslint/parser": "^8.8.0",
147
- "@vitejs/plugin-react": "^4.3.1",
148
- "@vitest/coverage-v8": "^3.0.0",
149
- "@vitest/ui": "^3.0.0",
150
- "cross-env": "^10.0.0",
151
- "crypto-js": "^4.2.0",
152
- "dayjs": "^1.11.13",
153
- "eslint": "^9.12.0",
154
- "eslint-config-prettier": "^9.1.0",
155
- "eslint-plugin-react": "^7.37.1",
156
- "eslint-plugin-react-hooks": "^5.0.0",
157
- "eslint-plugin-react-refresh": "^0.4.12",
158
- "eslint-plugin-storybook": "9.1.2",
159
- "file-saver": "^2.0.5",
160
- "glob": "^10.4.5",
161
- "jodit": "^4.6.2",
162
- "jodit-react": "^5.2.19",
163
- "jsdom": "^25.0.0",
164
- "material-react-table": "^3.2.1",
165
- "prettier": "^3.6.2",
166
- "react": "^19.1.1",
167
- "react-dom": "^19.1.1",
168
- "react-hook-form": "^7.62.0",
169
- "react-idle-timer": "^5.7.2",
170
- "rimraf": "^5.0.7",
171
- "rollup": "^4.22.4",
172
- "rollup-plugin-analyzer": "^4.0.0",
173
- "rollup-plugin-bundle-size": "^1.0.3",
174
- "rollup-plugin-copy": "^3.5.0",
175
- "rollup-plugin-peer-deps-external": "^2.2.4",
176
- "rollup-plugin-postcss": "^4.0.2",
177
- "rollup-plugin-visualizer": "^5.14.0",
178
- "sass-embedded": "^1.90.0",
179
- "storybook": "^9.1.2",
180
- "tsc-alias": "^1.8.16",
181
- "typescript": "^5.5.4",
182
- "vite": "^6.0.0",
183
- "vitest": "^3.0.0",
184
- "xlsx-js-style": "^1.2.0",
185
- "yup": "^1.7.0"
186
- },
187
- "keywords": [
188
- "react",
189
- "forms",
190
- "components",
191
- "react-hook-form",
192
- "yup",
193
- "typescript"
194
- ],
195
- "author": "Mohammad Asheesh",
196
- "contributors": [
197
- "Karthik Mayandi",
198
- "Other Dev"
199
- ],
200
- "license": "MIT",
201
- "engines": {
202
- "node": ">=18.17.0 || >=20.11.0",
203
- "npm": ">=10.9.0"
204
- },
205
- "dependencies": {
206
- "@types/react-date-range": "^1.4.10",
207
- "axios": "^1.13.2",
208
- "date-fns": "^4.1.0",
209
- "react-date-range": "^2.0.1"
210
- }
211
- }
1
+ {
2
+ "name": "tp-react-elements",
3
+ "version": "2.0.1",
4
+ "private": false,
5
+ "type": "module",
6
+ "description": "React form components library built with React Hook Form and Yup",
7
+ "main": "dist/index.esm.js",
8
+ "module": "dist/index.esm.js",
9
+ "types": "dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/index.esm.js",
13
+ "types": "./dist/index.d.ts"
14
+ },
15
+ "./form": {
16
+ "import": "./dist/components/Form/index.esm.js",
17
+ "types": "./dist/components/Form/index.d.ts"
18
+ },
19
+ "./utils": {
20
+ "import": "./dist/utils/index.esm.js",
21
+ "types": "./dist/utils/index.d.ts"
22
+ },
23
+ "./validation": {
24
+ "import": "./dist/validation/index.esm.js",
25
+ "types": "./dist/validation/index.d.ts"
26
+ },
27
+ "./components/*": {
28
+ "import": "./dist/components/*/index.esm.js",
29
+ "types": "./dist/components/*/index.d.ts"
30
+ },
31
+ "./theme": {
32
+ "import": "./dist/theme/index.esm.js",
33
+ "types": "./dist/theme/index.d.ts"
34
+ },
35
+ "./package.json": "./package.json"
36
+ },
37
+ "bin": {
38
+ "install-tp-form-deps": "./scripts/install-deps.js"
39
+ },
40
+ "files": [
41
+ "dist",
42
+ "scripts"
43
+ ],
44
+ "sideEffects": [
45
+ "*.css",
46
+ "*.scss"
47
+ ],
48
+ "scripts": {
49
+ "dev": "vite",
50
+ "preview": "vite preview",
51
+ "clean": "rimraf dist dist-dev",
52
+ "type-check": "tsc --noEmit",
53
+ "build:types": "tsc --project tsconfig.build.json --emitDeclarationOnly && tsc-alias -p tsconfig.build.json && echo \"✅ TypeScript declaration files generated successfully!\"",
54
+ "build:types:qa": "tsc --project tsconfig.build.qa.json --emitDeclarationOnly && tsc-alias -p tsconfig.build.qa.json && echo \"✅ QA declaration files (with maps) generated!\"",
55
+ "build:esm": "npm run clean && rollup -c rollup.config.js",
56
+ "build:lib": "npm run clean && rollup -c rollup.config.js && npm run build:types && echo \"✅ Complete library build finished! ESM build completed successfully!\"",
57
+ "build:lib:qa": "npm run clean && rollup -c rollup.config.js && npm run build:types:qa && echo \"✅ QA build finished (includes .d.ts.map)\"",
58
+ "analyze": "npm run clean && cross-env BUNDLE_ANALYZE=true rollup -c rollup.config.js",
59
+ "analyze:dev": "cross-env ANALYZE_BUNDLE=true vite build",
60
+ "test": "vitest",
61
+ "test:ui": "vitest --ui",
62
+ "test:coverage": "vitest --coverage",
63
+ "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
64
+ "lint:fix": "eslint . --ext ts,tsx --fix",
65
+ "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,css,scss,md,json}\"",
66
+ "format:check": "prettier --check \"src/**/*.{js,jsx,ts,tsx,css,scss,md,json}\"",
67
+ "storybook": "storybook dev -p 6006",
68
+ "build-storybook": "storybook build",
69
+ "version:patch": "npm version patch",
70
+ "version:minor": "npm version minor",
71
+ "version:major": "npm version major",
72
+ "publish:prepare": "npm run build:lib && npm run type-check",
73
+ "publish:npm": "npm publish",
74
+ "publish:beta": "npm publish --tag beta",
75
+ "publish:patch": "npm version patch --no-git-tag-version && npm publish",
76
+ "publish:minor": "npm version minor --no-git-tag-version && npm publish",
77
+ "publish:major": "npm version major --no-git-tag-version && npm publish",
78
+ "publish:auto": "npm run publish:prepare && npm publish",
79
+ "install-peers": "install-tp-form-deps",
80
+ "package-build": "rollup -c --bundleConfigAsCjs",
81
+ "prepublishOnly": "npm run build:lib"
82
+ },
83
+ "peerDependencies": {
84
+ "@tanstack/react-query": ">=5.0.0 <6.0.0",
85
+ "@emotion/react": ">=11.14.0 <13.0.0",
86
+ "@emotion/styled": ">=11.14.1 <13.0.0",
87
+ "@hookform/error-message": ">=2.0.1 <3.0.0",
88
+ "@hookform/resolvers": ">=5.2.1 <6.0.0",
89
+ "@mui/icons-material": ">=7.3.1 <8.0.0",
90
+ "@mui/material": ">=7.3.1 <8.0.0",
91
+ "@mui/x-date-pickers": ">=8.10.2 <9.0.0",
92
+ "crypto-js": ">=4.2.0 <5.0.0",
93
+ "dayjs": ">=1.11.13 <2.0.0",
94
+ "file-saver": ">=2.0.5 <3.0.0",
95
+ "jodit": ">=4.6.2 <5.0.0",
96
+ "jodit-react": ">=5.2.19 <6.0.0",
97
+ "material-react-table": ">=3.0.0 <4.0.0",
98
+ "react": ">=18 <20",
99
+ "react-dom": ">=18 <20",
100
+ "react-hook-form": ">=7.62.0 <8.0.0",
101
+ "react-idle-timer": ">=5.7.2 <6.0.0",
102
+ "xlsx-js-style": ">=1.2.0 <2.0.0",
103
+ "yup": ">=1.7.0 <2.0.0"
104
+ },
105
+ "peerDependenciesMeta": {
106
+ "@tanstack/react-query": {
107
+ "optional": true
108
+ },
109
+ "react-idle-timer": {
110
+ "optional": true
111
+ },
112
+ "jodit": {
113
+ "optional": true
114
+ },
115
+ "jodit-react": {
116
+ "optional": true
117
+ },
118
+ "material-react-table": {
119
+ "optional": true
120
+ }
121
+ },
122
+ "devDependencies": {
123
+ "@emotion/react": "^11.14.0",
124
+ "@emotion/styled": "^11.14.1",
125
+ "@hookform/error-message": "^2.0.1",
126
+ "@hookform/resolvers": "^5.2.1",
127
+ "@mui/icons-material": "^7.3.1",
128
+ "@mui/material": "^7.3.1",
129
+ "@mui/x-date-pickers": "^8.10.2",
130
+ "@rollup/plugin-commonjs": "^28.0.6",
131
+ "@rollup/plugin-node-resolve": "^16.0.1",
132
+ "@rollup/plugin-typescript": "^12.1.4",
133
+ "@storybook/addon-docs": "^10.4.2",
134
+ "@storybook/addon-links": "^10.4.2",
135
+ "@storybook/react-vite": "^10.4.2",
136
+ "@tanstack/react-query": "^5.100.14",
137
+ "@testing-library/jest-dom": "^6.5.0",
138
+ "@testing-library/react": "^16.0.1",
139
+ "@testing-library/user-event": "^14.5.2",
140
+ "@types/crypto-js": "^4.2.2",
141
+ "@types/file-saver": "^2.0.7",
142
+ "@types/node": "^22.11.0",
143
+ "@types/react": "^19.0.0",
144
+ "@types/react-dom": "^19.0.0",
145
+ "@typescript-eslint/eslint-plugin": "^8.8.0",
146
+ "@typescript-eslint/parser": "^8.8.0",
147
+ "@vitejs/plugin-react": "^4.3.1",
148
+ "@vitest/coverage-v8": "^3.0.0",
149
+ "@vitest/ui": "^3.0.0",
150
+ "cross-env": "^10.0.0",
151
+ "crypto-js": "^4.2.0",
152
+ "dayjs": "^1.11.13",
153
+ "eslint": "^9.12.0",
154
+ "eslint-config-prettier": "^9.1.0",
155
+ "eslint-plugin-react": "^7.37.1",
156
+ "eslint-plugin-react-hooks": "^5.0.0",
157
+ "eslint-plugin-react-refresh": "^0.4.12",
158
+ "eslint-plugin-storybook": "10.4.2",
159
+ "file-saver": "^2.0.5",
160
+ "glob": "^10.4.5",
161
+ "jodit": "^4.6.2",
162
+ "jodit-react": "^5.2.19",
163
+ "jsdom": "^25.0.0",
164
+ "material-react-table": "^3.2.1",
165
+ "prettier": "^3.6.2",
166
+ "react": "^19.1.1",
167
+ "react-dom": "^19.1.1",
168
+ "react-hook-form": "^7.62.0",
169
+ "react-idle-timer": "^5.7.2",
170
+ "rimraf": "^5.0.7",
171
+ "rollup": "^4.22.4",
172
+ "rollup-plugin-analyzer": "^4.0.0",
173
+ "rollup-plugin-bundle-size": "^1.0.3",
174
+ "rollup-plugin-copy": "^3.5.0",
175
+ "rollup-plugin-peer-deps-external": "^2.2.4",
176
+ "rollup-plugin-postcss": "^4.0.2",
177
+ "rollup-plugin-visualizer": "^5.14.0",
178
+ "sass-embedded": "^1.90.0",
179
+ "storybook": "^10.4.2",
180
+ "tsc-alias": "^1.8.16",
181
+ "typescript": "^5.5.4",
182
+ "vite": "^6.0.0",
183
+ "vitest": "^3.0.0",
184
+ "xlsx-js-style": "^1.2.0",
185
+ "yup": "^1.7.0"
186
+ },
187
+ "keywords": [
188
+ "react",
189
+ "forms",
190
+ "components",
191
+ "react-hook-form",
192
+ "yup",
193
+ "typescript"
194
+ ],
195
+ "author": "Mohammad Asheesh",
196
+ "contributors": [
197
+ "Karthik Mayandi",
198
+ "Other Dev"
199
+ ],
200
+ "license": "MIT",
201
+ "engines": {
202
+ "node": ">=18.17.0 || >=20.11.0",
203
+ "npm": ">=10.9.0"
204
+ },
205
+ "dependencies": {
206
+ "@types/react-date-range": "^1.4.10",
207
+ "axios": "^1.13.2",
208
+ "date-fns": "^4.1.0",
209
+ "react-date-range": "^2.0.1"
210
+ }
211
+ }