tp-react-elements 3.0.4 → 3.0.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.
@@ -1,3 +1,3 @@
1
- var DateInput = {};
1
+ var Month = {};
2
2
 
3
- export { DateInput as __exports };
3
+ export { Month 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 Month = {};
1
+ var InputRangeField = {};
2
2
 
3
- export { Month as __exports };
3
+ export { InputRangeField as __exports };
@@ -1,3 +1,3 @@
1
- var DateRangePicker = {};
1
+ var Calendar = {};
2
2
 
3
- export { DateRangePicker as __exports };
3
+ export { Calendar as __exports };
@@ -1,3 +1,3 @@
1
- var DateRange = {};
1
+ var DateRangePicker = {};
2
2
 
3
- export { DateRange as __exports };
3
+ export { DateRangePicker as __exports };
@@ -1,3 +1,3 @@
1
- var Calendar = {};
1
+ var DateRange = {};
2
2
 
3
- export { Calendar as __exports };
3
+ export { DateRange as __exports };
@@ -240,8 +240,50 @@ export interface GenericPaginatedGridProps<TData extends object> {
240
240
  * Return `undefined` (or omit a case) for rows that shouldn't be
241
241
  * highlighted. Combines safely with row hover/selection styling — this
242
242
  * only sets the base background, `sx` arrays layer on top.
243
+ *
244
+ * The same `backgroundColor` (a plain hex string, as in the example above)
245
+ * is also applied as a cell fill in the **Excel export**, so downloaded
246
+ * rows carry the same highlight seen on screen. A `color` (text colour) in
247
+ * the same object is likewise carried over as the exported cell's font
248
+ * colour — note that `color` only affects the Excel export; on screen,
249
+ * MUI's table cells already set their own text colour per cell, so a
250
+ * row-level `color` here has no visible effect in the grid itself (only
251
+ * `backgroundColor` is visible on screen). A theme-function `sx` (e.g.
252
+ * `(theme) => ({...})`) can't be resolved for the export without a live
253
+ * theme, so only plain `{ backgroundColor: '#RRGGBB', color: '#RRGGBB' }`
254
+ * objects (or arrays of them) are reflected there.
243
255
  */
244
256
  getRowSx?: (row: TData) => SxProps<Theme> | undefined;
257
+ /**
258
+ * Per-column conditional header styling — e.g. drawing attention to a
259
+ * specific column's header with its own background/text colour. Called
260
+ * once per header cell with that column's `id` (its `accessorKey`) and
261
+ * resolved `header` label:
262
+ *
263
+ * ```tsx
264
+ * <GenericPaginatedGrid
265
+ * getHeaderSx={(col) =>
266
+ * col.id === 'priority' ? { backgroundColor: '#c62828', color: '#ffffff' } : undefined
267
+ * }
268
+ * // ...
269
+ * />
270
+ * ```
271
+ *
272
+ * Return `undefined` (or omit a case) for columns whose header should use
273
+ * the grid's normal `headerBgColor` styling. Merged on top of
274
+ * `headerBgColor`/column-level `muiTableHeadCellProps`, so it only needs to
275
+ * describe the override, not the whole header cell style.
276
+ *
277
+ * The same `backgroundColor`/`color` (plain hex strings) are also applied
278
+ * to that column's header cell in the **Excel export**, overriding
279
+ * `exportHeaderBgColor`/`exportHeaderTextColor` for just that column. Same
280
+ * theme-function limitation as `getRowSx` — only plain colour objects are
281
+ * reflected in the export.
282
+ */
283
+ getHeaderSx?: (column: {
284
+ id: string;
285
+ header: string;
286
+ }) => SxProps<Theme> | undefined;
245
287
  /**
246
288
  * Optional render function for expanded row detail panels.
247
289
  * When provided, enables row expansion and renders custom content for each expanded row.
@@ -264,5 +306,5 @@ export interface GenericPaginatedGridProps<TData extends object> {
264
306
  */
265
307
  enableExpanding?: boolean;
266
308
  }
267
- declare function GenericPaginatedGrid<TData extends object>({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize, exportFilename, gridId, tableHeight, tableMinHeight, tableMaxHeight, autoFillViewport, layoutMode, uiDensity, uiDensityOptions, responsiveBreakpoints, disableResponsive, pageSizeOptions, showGlobalSearchByDefault, showDensityToggle, headerBgColor, exportHeaderBgColor, exportHeaderTextColor, headerMinHeight, headerMaxHeight, headerMaxLines, headerFontSize, bodyFontSize, maxVisibleFilters, muiTableBodyCellProps: gridBodyCellProps, muiTableHeadCellProps: gridHeadCellProps, getRowSx, renderDetailPanel, enableExpanding, }: GenericPaginatedGridProps<TData>): import("react/jsx-runtime").JSX.Element;
309
+ declare function GenericPaginatedGrid<TData extends object>({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize, exportFilename, gridId, tableHeight, tableMinHeight, tableMaxHeight, autoFillViewport, layoutMode, uiDensity, uiDensityOptions, responsiveBreakpoints, disableResponsive, pageSizeOptions, showGlobalSearchByDefault, showDensityToggle, headerBgColor, exportHeaderBgColor, exportHeaderTextColor, headerMinHeight, headerMaxHeight, headerMaxLines, headerFontSize, bodyFontSize, maxVisibleFilters, muiTableBodyCellProps: gridBodyCellProps, muiTableHeadCellProps: gridHeadCellProps, getRowSx, getHeaderSx, renderDetailPanel, enableExpanding, }: GenericPaginatedGridProps<TData>): import("react/jsx-runtime").JSX.Element;
268
310
  export default GenericPaginatedGrid;
@@ -50,6 +50,34 @@ const toCssSize = (value, fallback) => {
50
50
  return fallback;
51
51
  return typeof value === 'number' ? `${value}px` : value;
52
52
  };
53
+ /**
54
+ * Pulls `backgroundColor`/`bgcolor` and `color` out of an `SxProps` value
55
+ * returned by `getRowSx`/`getHeaderSx`, for reuse in the Excel export
56
+ * (matching the on-screen highlight). Only plain objects/arrays of plain
57
+ * objects are supported — a theme-function `sx` (e.g. `(theme) => ({...})`)
58
+ * can't be resolved without a live theme, so it's skipped (export proceeds
59
+ * with no override for that cell, exactly as if the callback had returned
60
+ * `undefined`).
61
+ */
62
+ const extractSxColors = (sx) => {
63
+ const items = Array.isArray(sx) ? sx : [sx];
64
+ let background;
65
+ let text;
66
+ for (const item of items) {
67
+ if (item && typeof item === 'object') {
68
+ const obj = item;
69
+ if (typeof obj.backgroundColor === 'string')
70
+ background = obj.backgroundColor;
71
+ else if (typeof obj.bgcolor === 'string')
72
+ background = obj.bgcolor;
73
+ if (typeof obj.color === 'string')
74
+ text = obj.color;
75
+ }
76
+ }
77
+ return { background, text };
78
+ };
79
+ /** Converts a `#RRGGBB` hex string to the 8-char ARGB xlsx-js-style expects. Returns `undefined` for anything else. */
80
+ const hexToArgb = (hex) => hex?.startsWith('#') ? 'FF' + hex.slice(1).toUpperCase().padEnd(6, '0') : undefined;
53
81
  /**
54
82
  * Header overrides applied via GlobalStyles (literal prop values).
55
83
  * MRT sets `backgroundColor: 'inherit'` and fixed density padding — must use !important.
@@ -141,7 +169,7 @@ const buildHeaderGlobalStyles = (headerMin, headerMax, headerFont, headerBgColor
141
169
  };
142
170
  };
143
171
  /** Per-cell sx merged into MRT (via muiTableHeadCellProps). */
144
- const buildHeaderCellSx = (align, headerMin, headerMax, headerFont, headerBgColor, headerMaxLines) => {
172
+ const buildHeaderCellSx = (align, headerMin, headerMax, headerFont, headerBgColor, headerMaxLines, headerTextColor) => {
145
173
  const textAlign = align;
146
174
  const flexJustify = align === 'right' ? 'flex-end' : align === 'center' ? 'center' : 'flex-start';
147
175
  const wrapperClamp = headerMaxLines != null && headerMaxLines > 0
@@ -160,6 +188,7 @@ const buildHeaderCellSx = (align, headerMin, headerMax, headerFont, headerBgColo
160
188
  ...(headerBgColor
161
189
  ? { backgroundColor: `${headerBgColor} !important`, backgroundImage: 'none' }
162
190
  : {}),
191
+ ...(headerTextColor ? { color: `${headerTextColor} !important` } : {}),
163
192
  height: `${headerMax} !important`,
164
193
  minHeight: `${headerMin} !important`,
165
194
  maxHeight: `${headerMax} !important`,
@@ -273,7 +302,7 @@ const PaginationFooter = ({ pageIndex, pageSize, totalRecords, isFetching, isLoa
273
302
  }, children: pageIndex + 1 }), jsx(Tooltip, { title: "Next page", children: jsx("span", { children: jsx(IconButton, { id: `${gridId}_next_page_icon`, size: "small", onClick: onNext, disabled: !canNext, sx: { p: 0.5 }, children: jsx(ChevronRightIcon, { sx: { fontSize: density.footerIconSize } }) }) }) }), jsx(Tooltip, { title: "Last page", children: jsx("span", { children: jsx(IconButton, { id: `${gridId}_last_page_icon`, size: "small", onClick: onLast, disabled: !canNext, sx: { p: 0.5 }, children: jsx(LastPageIcon, { sx: { fontSize: density.footerIconSize } }) }) }) })] })] }));
274
303
  };
275
304
  // ─── GenericPaginatedGrid ─────────────────────────────────────────────────────
276
- function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize = 10000, exportFilename = 'export', gridId, tableHeight, tableMinHeight = '300px', tableMaxHeight, autoFillViewport = true, layoutMode = 'grid', uiDensity, uiDensityOptions, responsiveBreakpoints, disableResponsive = false, pageSizeOptions = [1000, 5000, 10000], showGlobalSearchByDefault = false, showDensityToggle = false, headerBgColor, exportHeaderBgColor, exportHeaderTextColor, headerMinHeight, headerMaxHeight, headerMaxLines, headerFontSize, bodyFontSize, maxVisibleFilters = 4, muiTableBodyCellProps: gridBodyCellProps, muiTableHeadCellProps: gridHeadCellProps, getRowSx, renderDetailPanel, enableExpanding = !!renderDetailPanel, }) {
305
+ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs, defaultFilters, defaultVisibleFilterIds, batchSize = 10000, exportFilename = 'export', gridId, tableHeight, tableMinHeight = '300px', tableMaxHeight, autoFillViewport = true, layoutMode = 'grid', uiDensity, uiDensityOptions, responsiveBreakpoints, disableResponsive = false, pageSizeOptions = [1000, 5000, 10000], showGlobalSearchByDefault = false, showDensityToggle = false, headerBgColor, exportHeaderBgColor, exportHeaderTextColor, headerMinHeight, headerMaxHeight, headerMaxLines, headerFontSize, bodyFontSize, maxVisibleFilters = 4, muiTableBodyCellProps: gridBodyCellProps, muiTableHeadCellProps: gridHeadCellProps, getRowSx, getHeaderSx, renderDetailPanel, enableExpanding = !!renderDetailPanel, }) {
277
306
  // ── Responsive tier detection ────────────────────────────────────────────────
278
307
  // Three tiers (desktop / tablet / mobile) drive auto density, a progressively
279
308
  // lower filter-chip cap, toolbar wrapping, and a stacked pagination footer —
@@ -559,20 +588,24 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
559
588
  ? tableRef.current.getFilteredRowModel().rows.map((r) => r.original)
560
589
  : rows;
561
590
  const dataCols = columns.filter((c) => 'accessorKey' in c && c.accessorKey);
562
- // xlsx-js-style requires 8-char ARGB (AA + RRGGBB). Prepend full-opacity "FF".
563
- const toArgb = (hex, fallback = 'FF1565C0') => hex?.startsWith('#') ? 'FF' + hex.slice(1).toUpperCase().padEnd(6, '0') : fallback;
564
- const headerArgb = toArgb(exportHeaderBgColor ?? headerBgColor);
565
- const textArgb = toArgb(exportHeaderTextColor, 'FFFFFFFF');
591
+ const headerArgb = hexToArgb(exportHeaderBgColor ?? headerBgColor) ?? 'FF1565C0';
592
+ const textArgb = hexToArgb(exportHeaderTextColor) ?? 'FFFFFFFF';
566
593
  const headerRow = dataCols.map((c) => c.header ?? '');
567
594
  const dataRows = exportRows.map((row) => dataCols.map((c) => String(row[c.accessorKey] ?? '')));
568
595
  const ws = XLSX.utils.aoa_to_sheet([headerRow, ...dataRows]);
569
- // Style header row
570
- dataCols.forEach((_, colIdx) => {
596
+ // Style header row — `getHeaderSx` (per-column) overrides the grid-wide
597
+ // headerArgb/textArgb defaults for just that column, when it returns one.
598
+ dataCols.forEach((c, colIdx) => {
571
599
  const cellRef = XLSX.utils.encode_cell({ r: 0, c: colIdx });
572
600
  if (ws[cellRef]) {
601
+ const condSx = getHeaderSx?.({
602
+ id: c.accessorKey,
603
+ header: c.header ?? '',
604
+ });
605
+ const { background: condBg, text: condText } = extractSxColors(condSx);
573
606
  ws[cellRef].s = {
574
- fill: { patternType: 'solid', fgColor: { rgb: headerArgb } },
575
- font: { bold: true, color: { rgb: textArgb }, sz: 10 },
607
+ fill: { patternType: 'solid', fgColor: { rgb: hexToArgb(condBg) ?? headerArgb } },
608
+ font: { bold: true, color: { rgb: hexToArgb(condText) ?? textArgb }, sz: 10 },
576
609
  alignment: { horizontal: 'center', vertical: 'center', wrapText: true },
577
610
  border: {
578
611
  bottom: { style: 'thin', color: { rgb: 'FFCCCCCC' } },
@@ -581,6 +614,29 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
581
614
  };
582
615
  }
583
616
  });
617
+ // Apply each row's on-screen `getRowSx` highlight to the exported cells too.
618
+ // Unlike the header (which always has a colour), a row may resolve to no
619
+ // colour at all — skip whichever of background/text isn't set, rather
620
+ // than falling back to anything.
621
+ if (getRowSx) {
622
+ exportRows.forEach((row, rowIdx) => {
623
+ const { background: bgColor, text: textColor } = extractSxColors(getRowSx(row));
624
+ const bgArgb = hexToArgb(bgColor);
625
+ const fontArgb = hexToArgb(textColor);
626
+ if (!bgArgb && !fontArgb)
627
+ return;
628
+ dataCols.forEach((_, colIdx) => {
629
+ const cellRef = XLSX.utils.encode_cell({ r: rowIdx + 1, c: colIdx }); // +1: row 0 is the header
630
+ if (ws[cellRef]) {
631
+ ws[cellRef].s = {
632
+ ...ws[cellRef].s,
633
+ ...(bgArgb ? { fill: { patternType: 'solid', fgColor: { rgb: bgArgb } } } : {}),
634
+ ...(fontArgb ? { font: { ...ws[cellRef].s?.font, color: { rgb: fontArgb } } } : {}),
635
+ };
636
+ }
637
+ });
638
+ });
639
+ }
584
640
  // Auto-fit column widths — single O(n) pass accumulates max length per column
585
641
  // instead of one reduce() per column (was O(n × cols)).
586
642
  const colWidths = dataCols.map((c) => (c.header ?? '').length);
@@ -597,7 +653,7 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
597
653
  XLSX.utils.book_append_sheet(wb, ws, 'Data');
598
654
  const suffix = scope === 'filtered' ? '-filtered' : '';
599
655
  XLSX.writeFile(wb, `${exportFilename}${suffix}-page${pagination.pageIndex + 1}.xlsx`);
600
- }, [columns, rows, exportFilename, pagination.pageIndex, headerBgColor, exportHeaderBgColor, exportHeaderTextColor]);
656
+ }, [columns, rows, exportFilename, pagination.pageIndex, headerBgColor, exportHeaderBgColor, exportHeaderTextColor, getRowSx, getHeaderSx]);
601
657
  // ── Memoized cell-prop builders ───────────────────────────────────────────
602
658
  // These are functions passed to MRT per-cell. Without useCallback they get
603
659
  // new references on every render, forcing MRT to rebuild every cell's sx.
@@ -611,15 +667,31 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
611
667
  const align = (colResolved.align ?? gridResolved.align ?? 'left');
612
668
  const { sx: gridSx, align: _ga, ...gridRest } = gridResolved;
613
669
  const { sx: colSx, align: _ca, ...colRest } = colResolved;
670
+ const headerCondSx = getHeaderSx?.({
671
+ id: column.id,
672
+ header: column.columnDef.header ?? '',
673
+ });
674
+ const { background: headerCondBg, text: headerCondText } = extractSxColors(headerCondSx);
614
675
  return {
615
676
  ...gridRest,
616
677
  ...colRest,
617
678
  align,
618
- sx: [
619
- buildHeaderCellSx(align, resolvedHeaderMinHeight, resolvedHeaderMaxHeight, resolvedHeaderFontSize, headerBgColor, headerMaxLines),
620
- ...(gridSx ? [gridSx] : []),
621
- ...(colSx ? [colSx] : []),
622
- ],
679
+ // NOTE: MRT reads this `sx` via `parseFromValuesOrFunc(tableCellProps?.sx, theme)`
680
+ // internally (see material-react-table's `getCommonMRTCellStyles`), which only
681
+ // special-cases *functions* — an array (MUI's own normal multi-entry `sx` form)
682
+ // is returned as-is and then spread by numeric index, silently discarding every
683
+ // style in it. A single theme-aware function is the only form MRT actually merges
684
+ // in at this integration point, so all layers are combined manually below instead
685
+ // of relying on array-based sx composition.
686
+ sx: (theme) => {
687
+ const resolve = (s) => (typeof s === 'function' ? s(theme) : s) ?? {};
688
+ return {
689
+ ...buildHeaderCellSx(align, resolvedHeaderMinHeight, resolvedHeaderMaxHeight, resolvedHeaderFontSize, headerCondBg ?? headerBgColor, headerMaxLines, headerCondText),
690
+ ...resolve(gridSx),
691
+ ...resolve(colSx),
692
+ ...resolve(headerCondSx),
693
+ };
694
+ },
623
695
  };
624
696
  }, [
625
697
  resolvedHeaderMinHeight,
@@ -628,6 +700,7 @@ function GenericPaginatedGrid({ columns, fetchPage, queryKey, serverFilterDefs,
628
700
  headerBgColor,
629
701
  headerMaxLines,
630
702
  gridHeadCellProps,
703
+ getHeaderSx,
631
704
  ]);
632
705
  const memoizedBodyCellProps = useCallback((params) => {
633
706
  const { cell, column, row, table } = params;
@@ -1,4 +1,4 @@
1
- import { __exports as Calendar } from '../../../../../_virtual/index.esm7.js';
1
+ import { __exports as Calendar } from '../../../../../_virtual/index.esm5.js';
2
2
  import require$$0__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.esm13.js';
2
2
  import require$$0__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.esm6.js';
1
+ import { __exports as DateRange } from '../../../../../_virtual/index.esm7.js';
2
2
  import require$$0__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 DateRangePicker } from '../../../../../_virtual/index.esm5.js';
1
+ import { __exports as DateRangePicker } from '../../../../../_virtual/index.esm6.js';
2
2
  import require$$0__default from 'react';
3
3
  import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
4
4
  import { __require as requireDateRange } from '../DateRange/index.esm.js';
@@ -1,4 +1,4 @@
1
- import { __exports as InputRangeField } from '../../../../../_virtual/index.esm13.js';
1
+ import { __exports as InputRangeField } from '../../../../../_virtual/index.esm14.js';
2
2
  import require$$0__default from 'react';
3
3
  import { __require as requirePropTypes } from '../../../../prop-types/index.esm.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { __exports as Month } from '../../../../../_virtual/index.esm14.js';
1
+ import { __exports as Month } from '../../../../../_virtual/index.esm12.js';
2
2
  import require$$0__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';
package/package.json CHANGED
@@ -1,211 +1,211 @@
1
- {
2
- "name": "tp-react-elements",
3
- "version": "3.0.4",
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
- "@emotion/react": ">=11.14.0 <13.0.0",
85
- "@emotion/styled": ">=11.14.1 <13.0.0",
86
- "@hookform/error-message": ">=2.0.1 <3.0.0",
87
- "@hookform/resolvers": ">=5.2.1 <6.0.0",
88
- "@mui/icons-material": ">=7.3.1 <8.0.0",
89
- "@mui/material": ">=7.3.1 <8.0.0",
90
- "@mui/x-date-pickers": ">=8.10.2 <9.0.0",
91
- "@tanstack/react-query": ">=5.0.0 <6.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
- }
1
+ {
2
+ "name": "tp-react-elements",
3
+ "version": "3.0.6",
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
+ "@emotion/react": ">=11.14.0 <13.0.0",
85
+ "@emotion/styled": ">=11.14.1 <13.0.0",
86
+ "@hookform/error-message": ">=2.0.1 <3.0.0",
87
+ "@hookform/resolvers": ">=5.2.1 <6.0.0",
88
+ "@mui/icons-material": ">=7.3.1 <8.0.0",
89
+ "@mui/material": ">=7.3.1 <8.0.0",
90
+ "@mui/x-date-pickers": ">=8.10.2 <9.0.0",
91
+ "@tanstack/react-query": ">=5.0.0 <6.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
+ }