@economic/taco 2.29.0 → 2.29.2
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/components/List/List.d.ts +7 -7
- package/dist/components/List/components/Button.d.ts +2 -2
- package/dist/components/List/components/Collapsible.d.ts +3 -2
- package/dist/components/List/components/Item.d.ts +6 -14
- package/dist/components/List/components/Link.d.ts +2 -2
- package/dist/components/List/components/Toggle.d.ts +4 -4
- package/dist/esm/index.css +1 -5
- package/dist/esm/packages/taco/src/components/Combobox/useCombobox.js +19 -5
- package/dist/esm/packages/taco/src/components/Combobox/useCombobox.js.map +1 -1
- package/dist/esm/packages/taco/src/components/List/List.js.map +1 -1
- package/dist/esm/packages/taco/src/components/List/components/Button.js.map +1 -1
- package/dist/esm/packages/taco/src/components/List/components/Collapsible.js.map +1 -1
- package/dist/esm/packages/taco/src/components/List/components/Item.js.map +1 -1
- package/dist/esm/packages/taco/src/components/List/components/Link.js +11 -1
- package/dist/esm/packages/taco/src/components/List/components/Link.js.map +1 -1
- package/dist/esm/packages/taco/src/components/List/components/Toggle.js.map +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js +1 -1
- package/dist/esm/packages/taco/src/components/Table3/components/Columns/Cell/EditingControlCell.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js +5 -4
- package/dist/esm/packages/taco/src/primitives/Table/Core/features/useTableRenderer.js.map +1 -1
- package/dist/esm/packages/taco/src/primitives/Table/Core/util/rows.js +2 -2
- package/dist/esm/packages/taco/src/primitives/Table/Core/util/rows.js.map +1 -1
- package/dist/index.css +1 -5
- package/dist/primitives/Table/Core/util/rows.d.ts +1 -1
- package/dist/taco.cjs.development.js +36 -11
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/package.json +2 -2
@@ -1,6 +1,6 @@
|
|
1
1
|
import React__default from 'react';
|
2
2
|
import { useVirtualizer, defaultRangeExtractor } from '@tanstack/react-virtual';
|
3
|
-
import {
|
3
|
+
import { HEADER_FOOTER_ROW_HEIGHT_ESTIMATE, ROW_HEIGHT_ESTIMATES } from '../util/rows.js';
|
4
4
|
import { Row } from '../components/Row/Row.js';
|
5
5
|
|
6
6
|
const TABLE_SCROLL_PADDING_BOTTOM = 36;
|
@@ -9,8 +9,9 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
|
|
9
9
|
var _table$getState$group, _ref, _virtualItems$padding, _virtualItems$padding2, _ref2, _virtualItems;
|
10
10
|
const tableMeta = table.options.meta;
|
11
11
|
const rows = table.getRowModel().rows;
|
12
|
-
const HEADER_OFFSET_TOTAL =
|
12
|
+
const HEADER_OFFSET_TOTAL = HEADER_FOOTER_ROW_HEIGHT_ESTIMATE * table.getHeaderGroups().length;
|
13
13
|
const isTableGrouped = !!((_table$getState$group = table.getState().grouping) !== null && _table$getState$group !== void 0 && _table$getState$group.length);
|
14
|
+
const FOOTER_OFFSET_TOTAL = tableMeta.footer.isEnabled ? HEADER_FOOTER_ROW_HEIGHT_ESTIMATE : 0;
|
14
15
|
// expanded rows
|
15
16
|
const {
|
16
17
|
createRowMeasurer,
|
@@ -24,7 +25,7 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
|
|
24
25
|
getScrollElement: () => tableRef.current,
|
25
26
|
overscan: tableMeta.printing.isPrinting ? rows.length : undefined,
|
26
27
|
rangeExtractor,
|
27
|
-
scrollPaddingStart: isTableGrouped ?
|
28
|
+
scrollPaddingStart: isTableGrouped ? HEADER_FOOTER_ROW_HEIGHT_ESTIMATE : undefined,
|
28
29
|
scrollPaddingEnd: HEADER_OFFSET_TOTAL + TABLE_SCROLL_PADDING_BOTTOM,
|
29
30
|
paddingEnd: TABLE_PADDING_BOTTOM
|
30
31
|
});
|
@@ -77,7 +78,7 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
|
|
77
78
|
let content = null;
|
78
79
|
if (rows.length) {
|
79
80
|
style = {
|
80
|
-
height: `${virtualiser.getTotalSize() - HEADER_OFFSET_TOTAL}px`,
|
81
|
+
height: `${virtualiser.getTotalSize() - HEADER_OFFSET_TOTAL + FOOTER_OFFSET_TOTAL}px`,
|
81
82
|
paddingBottom,
|
82
83
|
paddingTop
|
83
84
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useTableRenderer.js","sources":["../../../../../../../../../src/primitives/Table/Core/features/useTableRenderer.tsx"],"sourcesContent":["import React, { CSSProperties } from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport {\n useVirtualizer,\n defaultRangeExtractor,\n ScrollToOptions as ReactVirtualScrollToOptions,\n VirtualItem,\n} from '@tanstack/react-virtual';\nimport { HEADER_ROW_HEIGHT_ESTIMATE, ROW_HEIGHT_ESTIMATES } from '../util/rows';\nimport { Row } from '../components/Row/Row';\nimport { useTableRenderers } from '../types';\nimport { TableRef } from '../../types';\n\nconst TABLE_SCROLL_PADDING_BOTTOM = 36;\nconst TABLE_PADDING_BOTTOM = 0;\n\nexport function useTableRenderer<TType = unknown>(\n renderers: useTableRenderers<TType>,\n table: ReactTable<TType>,\n tableRef: React.RefObject<TableRef>,\n defaultRowActiveIndex?: number | undefined\n) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const rows = table.getRowModel().rows;\n const HEADER_OFFSET_TOTAL = HEADER_ROW_HEIGHT_ESTIMATE * table.getHeaderGroups().length;\n const isTableGrouped = !!table.getState().grouping?.length;\n\n // expanded rows\n const { createRowMeasurer, estimateSize } = useRowHeightVirtualisation<TType>(table);\n\n // row groups\n const rangeExtractor = useRowGroupVirtualisation<TType>(table);\n\n const virtualiser = useVirtualizer({\n count: rows.length,\n estimateSize,\n getScrollElement: () => tableRef.current,\n overscan: tableMeta.printing.isPrinting ? rows.length : undefined,\n rangeExtractor,\n scrollPaddingStart: isTableGrouped ? HEADER_ROW_HEIGHT_ESTIMATE : undefined,\n scrollPaddingEnd: HEADER_OFFSET_TOTAL + TABLE_SCROLL_PADDING_BOTTOM,\n paddingEnd: TABLE_PADDING_BOTTOM,\n });\n\n const virtualItems = virtualiser.getVirtualItems();\n\n const scrollToIndex = React.useCallback(\n (index: number, options: ReactVirtualScrollToOptions = { align: 'auto', behavior: 'smooth' }) => {\n const notSmooth: ReactVirtualScrollToOptions = { ...options, behavior: 'auto' };\n\n if (tableRef.current) {\n if (index === 0) {\n virtualiser.scrollToOffset(0, notSmooth);\n } else if (index >= virtualItems.length - 1) {\n // scrolling to the last row isn't easy when rows have dynamic height\n // because you don't know all the heights until they render...\n // so when you skip to the last you don't know if \"the end\" is actually the end\n virtualiser.scrollToIndex(index, notSmooth);\n\n // https://github.com/TanStack/virtual/issues/216\n setTimeout(() => {\n virtualiser.scrollToIndex(index, notSmooth);\n\n setTimeout(() => {\n virtualiser.scrollToIndex(index, notSmooth);\n }, 150);\n }, 150);\n } else {\n virtualiser.scrollToIndex(index, options);\n }\n }\n },\n [virtualItems.length, tableRef.current]\n );\n\n // use row 1 not 0, because 0 might be sticky in grouped tables and it's start value will always be 0\n const paddingStartIndex = isTableGrouped && rows.length > 1 ? 1 : 0;\n\n // styling for offsetting rows - this \"is\" the virtualisation\n const [paddingTop, paddingBottom] =\n virtualItems.length > 0\n ? [\n // use row 1 not 0, because 0 might be sticky in grouped tables and it's start value will always be 0\n Math.max(\n 0,\n virtualItems[paddingStartIndex]?.start -\n virtualiser.options.scrollMargin -\n virtualItems[paddingStartIndex]?.size ?? 0\n ),\n Math.max(0, virtualiser.getTotalSize() - virtualItems[virtualItems.length - 1]?.end ?? 0),\n ]\n : [0, 0];\n\n // ensure default active rows are scrolled to\n React.useEffect(() => {\n if (defaultRowActiveIndex) {\n scrollToIndex(defaultRowActiveIndex, { align: 'center', behavior: 'auto' });\n }\n }, []);\n\n // rendered output\n let style: CSSProperties = {};\n let content: (JSX.Element | null)[] | null = null;\n\n if (rows.length) {\n style = {\n height: `${virtualiser.getTotalSize() - HEADER_OFFSET_TOTAL}px`,\n paddingBottom,\n paddingTop,\n };\n content = virtualItems.map(virtualRow => {\n // there appears to be a react-virtual bug where it inserts a single `undefined` item at the end of the row, which crashes here\n if (!virtualRow) {\n return null;\n }\n\n const row = rows[virtualRow.index];\n const measureRow = createRowMeasurer(virtualiser.resizeItem, virtualRow);\n return (\n <Row\n key={row.id}\n row={row}\n index={virtualRow.index}\n table={table}\n measureRow={measureRow}\n renderer={renderers.row}\n cellRenderer={renderers.cell}\n />\n );\n });\n }\n\n return {\n rows: content,\n style,\n scrollToIndex,\n };\n}\n\n// support varying row heights - variable row heights, row expansion\nfunction useRowHeightVirtualisation<TType = unknown>(table: ReactTable<TType>) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const rows = table.getRowModel().rows;\n const expandedState = table.getState().expanded;\n\n const [expandedRowHeightsCache, setExpandedRowHeightsCache] = React.useState<Record<number, number>>({});\n\n // look at all registered expanded row heights and use them to form a more accurate average size\n // it might be worth considering if taking the max, or an upper bound, would be better\n const averageExpandedRowHeight = React.useMemo(() => {\n const values: number[] = Object.values(expandedRowHeightsCache);\n return values.length ? values.reduce((a, b) => a + b, 0) / values.length : 0;\n }, [expandedRowHeightsCache]);\n\n // row heights\n const estimateSize = React.useCallback(\n (index: number) => {\n const rowHeight = tableMeta.rowHeight.height\n ? ROW_HEIGHT_ESTIMATES[tableMeta.rowHeight.height]\n : ROW_HEIGHT_ESTIMATES.medium;\n\n if (expandedState === true || rows[index]?.getIsExpanded?.()) {\n return rowHeight + averageExpandedRowHeight;\n }\n\n return rowHeight;\n },\n [tableMeta.rowHeight.height, averageExpandedRowHeight, expandedState]\n );\n\n const createRowMeasurer = React.useCallback(\n (resizeItem: (item: VirtualItem, size: number) => void, virtualRow: VirtualItem) =>\n (rowHeight: number, expansionHeight?: number) => {\n // register the expansion height so that it can be used to determine an average\n if (expansionHeight) {\n setExpandedRowHeightsCache(cache => ({ ...cache, [virtualRow.index]: expansionHeight }));\n }\n\n // update the whole row's size to include the expanded height\n resizeItem(virtualRow, rowHeight + (expansionHeight ?? 0));\n },\n []\n );\n\n return { estimateSize, createRowMeasurer };\n}\n\n// support virtualised row groups (where the row group headers are sticky)\nfunction useRowGroupVirtualisation<TType = unknown>(table: ReactTable<TType>) {\n const rows = table.getRowModel().rows;\n const isTableGrouped = !!table.getState().grouping.length;\n\n const rowGroupIndexes = React.useMemo(() => {\n const indexes: number[] = [];\n\n if (isTableGrouped) {\n rows.forEach((row, index) => {\n if (row.getIsGrouped()) {\n indexes.push(index);\n }\n });\n }\n\n return indexes;\n }, [rows]);\n\n // this is taken from the react-virtual docs/examples\n const rangeExtractor = React.useCallback(\n range => {\n const activeRowGroupIndex =\n [...rowGroupIndexes].reverse().find(index => range.startIndex >= index) ?? rowGroupIndexes[0];\n\n const next = new Set([activeRowGroupIndex, ...defaultRangeExtractor(range)]);\n return [...next].sort((a, b) => a - b);\n },\n [rowGroupIndexes]\n );\n\n return isTableGrouped ? rangeExtractor : undefined;\n}\n"],"names":["TABLE_SCROLL_PADDING_BOTTOM","TABLE_PADDING_BOTTOM","useTableRenderer","renderers","table","tableRef","defaultRowActiveIndex","tableMeta","options","meta","rows","getRowModel","HEADER_OFFSET_TOTAL","HEADER_ROW_HEIGHT_ESTIMATE","getHeaderGroups","length","isTableGrouped","_table$getState$group","getState","grouping","createRowMeasurer","estimateSize","useRowHeightVirtualisation","rangeExtractor","useRowGroupVirtualisation","virtualiser","useVirtualizer","count","getScrollElement","current","overscan","printing","isPrinting","undefined","scrollPaddingStart","scrollPaddingEnd","paddingEnd","virtualItems","getVirtualItems","scrollToIndex","React","useCallback","index","align","behavior","notSmooth","scrollToOffset","setTimeout","paddingStartIndex","paddingTop","paddingBottom","Math","max","_ref","_virtualItems$padding","start","scrollMargin","_virtualItems$padding2","size","_ref2","getTotalSize","_virtualItems","end","useEffect","style","content","height","map","virtualRow","row","measureRow","resizeItem","Row","key","id","renderer","cellRenderer","cell","expandedState","expanded","expandedRowHeightsCache","setExpandedRowHeightsCache","useState","averageExpandedRowHeight","useMemo","values","Object","reduce","a","b","rowHeight","ROW_HEIGHT_ESTIMATES","medium","_rows$index","_rows$index$getIsExpa","getIsExpanded","call","expansionHeight","cache","rowGroupIndexes","indexes","forEach","getIsGrouped","push","range","activeRowGroupIndex","_reverse$find","reverse","find","startIndex","next","Set","defaultRangeExtractor","sort"],"mappings":";;;;;AAaA,MAAMA,2BAA2B,GAAG,EAAE;AACtC,MAAMC,oBAAoB,GAAG,CAAC;SAEdC,gBAAgBA,CAC5BC,SAAmC,EACnCC,KAAwB,EACxBC,QAAmC,EACnCC,qBAA0C;;EAE1C,MAAMC,SAAS,GAAGH,KAAK,CAACI,OAAO,CAACC,IAA6B;EAC7D,MAAMC,IAAI,GAAGN,KAAK,CAACO,WAAW,EAAE,CAACD,IAAI;EACrC,MAAME,mBAAmB,GAAGC,0BAA0B,GAAGT,KAAK,CAACU,eAAe,EAAE,CAACC,MAAM;EACvF,MAAMC,cAAc,GAAG,CAAC,GAAAC,qBAAA,GAACb,KAAK,CAACc,QAAQ,EAAE,CAACC,QAAQ,cAAAF,qBAAA,eAAzBA,qBAAA,CAA2BF,MAAM;;EAG1D,MAAM;IAAEK,iBAAiB;IAAEC;GAAc,GAAGC,0BAA0B,CAAQlB,KAAK,CAAC;;EAGpF,MAAMmB,cAAc,GAAGC,yBAAyB,CAAQpB,KAAK,CAAC;EAE9D,MAAMqB,WAAW,GAAGC,cAAc,CAAC;IAC/BC,KAAK,EAAEjB,IAAI,CAACK,MAAM;IAClBM,YAAY;IACZO,gBAAgB,EAAEA,MAAMvB,QAAQ,CAACwB,OAAO;IACxCC,QAAQ,EAAEvB,SAAS,CAACwB,QAAQ,CAACC,UAAU,GAAGtB,IAAI,CAACK,MAAM,GAAGkB,SAAS;IACjEV,cAAc;IACdW,kBAAkB,EAAElB,cAAc,GAAGH,0BAA0B,GAAGoB,SAAS;IAC3EE,gBAAgB,EAAEvB,mBAAmB,GAAGZ,2BAA2B;IACnEoC,UAAU,EAAEnC;GACf,CAAC;EAEF,MAAMoC,YAAY,GAAGZ,WAAW,CAACa,eAAe,EAAE;EAElD,MAAMC,aAAa,GAAGC,cAAK,CAACC,WAAW,CACnC,CAACC,KAAa,EAAElC,UAAuC;IAAEmC,KAAK,EAAE,MAAM;IAAEC,QAAQ,EAAE;GAAU;IACxF,MAAMC,SAAS,GAAgC;MAAE,GAAGrC,OAAO;MAAEoC,QAAQ,EAAE;KAAQ;IAE/E,IAAIvC,QAAQ,CAACwB,OAAO,EAAE;MAClB,IAAIa,KAAK,KAAK,CAAC,EAAE;QACbjB,WAAW,CAACqB,cAAc,CAAC,CAAC,EAAED,SAAS,CAAC;OAC3C,MAAM,IAAIH,KAAK,IAAIL,YAAY,CAACtB,MAAM,GAAG,CAAC,EAAE;;;;QAIzCU,WAAW,CAACc,aAAa,CAACG,KAAK,EAAEG,SAAS,CAAC;;QAG3CE,UAAU,CAAC;UACPtB,WAAW,CAACc,aAAa,CAACG,KAAK,EAAEG,SAAS,CAAC;UAE3CE,UAAU,CAAC;YACPtB,WAAW,CAACc,aAAa,CAACG,KAAK,EAAEG,SAAS,CAAC;WAC9C,EAAE,GAAG,CAAC;SACV,EAAE,GAAG,CAAC;OACV,MAAM;QACHpB,WAAW,CAACc,aAAa,CAACG,KAAK,EAAElC,OAAO,CAAC;;;GAGpD,EACD,CAAC6B,YAAY,CAACtB,MAAM,EAAEV,QAAQ,CAACwB,OAAO,CAAC,CAC1C;;EAGD,MAAMmB,iBAAiB,GAAGhC,cAAc,IAAIN,IAAI,CAACK,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;;EAGnE,MAAM,CAACkC,UAAU,EAAEC,aAAa,CAAC,GAC7Bb,YAAY,CAACtB,MAAM,GAAG,CAAC,GACjB;;EAEIoC,IAAI,CAACC,GAAG,CACJ,CAAC,GAAAC,IAAA,GACD,EAAAC,qBAAA,GAAAjB,YAAY,CAACW,iBAAiB,CAAC,cAAAM,qBAAA,uBAA/BA,qBAAA,CAAiCC,KAAK,IAClC9B,WAAW,CAACjB,OAAO,CAACgD,YAAY,KAAAC,sBAAA,GAChCpB,YAAY,CAACW,iBAAiB,CAAC,cAAAS,sBAAA,uBAA/BA,sBAAA,CAAiCC,IAAI,eAAAL,IAAA,cAAAA,IAAA,GAAI,CAAC,CACjD,EACDF,IAAI,CAACC,GAAG,CAAC,CAAC,GAAAO,KAAA,GAAElC,WAAW,CAACmC,YAAY,EAAE,KAAAC,aAAA,GAAGxB,YAAY,CAACA,YAAY,CAACtB,MAAM,GAAG,CAAC,CAAC,cAAA8C,aAAA,uBAArCA,aAAA,CAAuCC,GAAG,eAAAH,KAAA,cAAAA,KAAA,GAAI,CAAC,CAAC,CAC5F,GACD,CAAC,CAAC,EAAE,CAAC,CAAC;;EAGhBnB,cAAK,CAACuB,SAAS,CAAC;IACZ,IAAIzD,qBAAqB,EAAE;MACvBiC,aAAa,CAACjC,qBAAqB,EAAE;QAAEqC,KAAK,EAAE,QAAQ;QAAEC,QAAQ,EAAE;OAAQ,CAAC;;GAElF,EAAE,EAAE,CAAC;;EAGN,IAAIoB,KAAK,GAAkB,EAAE;EAC7B,IAAIC,OAAO,GAAkC,IAAI;EAEjD,IAAIvD,IAAI,CAACK,MAAM,EAAE;IACbiD,KAAK,GAAG;MACJE,MAAM,KAAKzC,WAAW,CAACmC,YAAY,EAAE,GAAGhD,uBAAuB;MAC/DsC,aAAa;MACbD;KACH;IACDgB,OAAO,GAAG5B,YAAY,CAAC8B,GAAG,CAACC,UAAU;;MAEjC,IAAI,CAACA,UAAU,EAAE;QACb,OAAO,IAAI;;MAGf,MAAMC,GAAG,GAAG3D,IAAI,CAAC0D,UAAU,CAAC1B,KAAK,CAAC;MAClC,MAAM4B,UAAU,GAAGlD,iBAAiB,CAACK,WAAW,CAAC8C,UAAU,EAAEH,UAAU,CAAC;MACxE,oBACI5B,6BAACgC,GAAG;QACAC,GAAG,EAAEJ,GAAG,CAACK,EAAE;QACXL,GAAG,EAAEA,GAAG;QACR3B,KAAK,EAAE0B,UAAU,CAAC1B,KAAK;QACvBtC,KAAK,EAAEA,KAAK;QACZkE,UAAU,EAAEA,UAAU;QACtBK,QAAQ,EAAExE,SAAS,CAACkE,GAAG;QACvBO,YAAY,EAAEzE,SAAS,CAAC0E;QAC1B;KAET,CAAC;;EAGN,OAAO;IACHnE,IAAI,EAAEuD,OAAO;IACbD,KAAK;IACLzB;GACH;AACL;AAEA;AACA,SAASjB,0BAA0BA,CAAkBlB,KAAwB;EACzE,MAAMG,SAAS,GAAGH,KAAK,CAACI,OAAO,CAACC,IAA6B;EAC7D,MAAMC,IAAI,GAAGN,KAAK,CAACO,WAAW,EAAE,CAACD,IAAI;EACrC,MAAMoE,aAAa,GAAG1E,KAAK,CAACc,QAAQ,EAAE,CAAC6D,QAAQ;EAE/C,MAAM,CAACC,uBAAuB,EAAEC,0BAA0B,CAAC,GAAGzC,cAAK,CAAC0C,QAAQ,CAAyB,EAAE,CAAC;;;EAIxG,MAAMC,wBAAwB,GAAG3C,cAAK,CAAC4C,OAAO,CAAC;IAC3C,MAAMC,MAAM,GAAaC,MAAM,CAACD,MAAM,CAACL,uBAAuB,CAAC;IAC/D,OAAOK,MAAM,CAACtE,MAAM,GAAGsE,MAAM,CAACE,MAAM,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,EAAE,CAAC,CAAC,GAAGJ,MAAM,CAACtE,MAAM,GAAG,CAAC;GAC/E,EAAE,CAACiE,uBAAuB,CAAC,CAAC;;EAG7B,MAAM3D,YAAY,GAAGmB,cAAK,CAACC,WAAW,CACjCC,KAAa;;IACV,MAAMgD,SAAS,GAAGnF,SAAS,CAACmF,SAAS,CAACxB,MAAM,GACtCyB,oBAAoB,CAACpF,SAAS,CAACmF,SAAS,CAACxB,MAAM,CAAC,GAChDyB,oBAAoB,CAACC,MAAM;IAEjC,IAAId,aAAa,KAAK,IAAI,KAAAe,WAAA,GAAInF,IAAI,CAACgC,KAAK,CAAC,cAAAmD,WAAA,gBAAAC,qBAAA,GAAXD,WAAA,CAAaE,aAAa,cAAAD,qBAAA,eAA1BA,qBAAA,CAAAE,IAAA,CAAAH,YAA8B,EAAE;MAC1D,OAAOH,SAAS,GAAGP,wBAAwB;;IAG/C,OAAOO,SAAS;GACnB,EACD,CAACnF,SAAS,CAACmF,SAAS,CAACxB,MAAM,EAAEiB,wBAAwB,EAAEL,aAAa,CAAC,CACxE;EAED,MAAM1D,iBAAiB,GAAGoB,cAAK,CAACC,WAAW,CACvC,CAAC8B,UAAqD,EAAEH,UAAuB,KAC3E,CAACsB,SAAiB,EAAEO,eAAwB;;IAExC,IAAIA,eAAe,EAAE;MACjBhB,0BAA0B,CAACiB,KAAK,KAAK;QAAE,GAAGA,KAAK;QAAE,CAAC9B,UAAU,CAAC1B,KAAK,GAAGuD;OAAiB,CAAC,CAAC;;;IAI5F1B,UAAU,CAACH,UAAU,EAAEsB,SAAS,IAAIO,eAAe,aAAfA,eAAe,cAAfA,eAAe,GAAI,CAAC,CAAC,CAAC;GAC7D,EACL,EAAE,CACL;EAED,OAAO;IAAE5E,YAAY;IAAED;GAAmB;AAC9C;AAEA;AACA,SAASI,yBAAyBA,CAAkBpB,KAAwB;EACxE,MAAMM,IAAI,GAAGN,KAAK,CAACO,WAAW,EAAE,CAACD,IAAI;EACrC,MAAMM,cAAc,GAAG,CAAC,CAACZ,KAAK,CAACc,QAAQ,EAAE,CAACC,QAAQ,CAACJ,MAAM;EAEzD,MAAMoF,eAAe,GAAG3D,cAAK,CAAC4C,OAAO,CAAC;IAClC,MAAMgB,OAAO,GAAa,EAAE;IAE5B,IAAIpF,cAAc,EAAE;MAChBN,IAAI,CAAC2F,OAAO,CAAC,CAAChC,GAAG,EAAE3B,KAAK;QACpB,IAAI2B,GAAG,CAACiC,YAAY,EAAE,EAAE;UACpBF,OAAO,CAACG,IAAI,CAAC7D,KAAK,CAAC;;OAE1B,CAAC;;IAGN,OAAO0D,OAAO;GACjB,EAAE,CAAC1F,IAAI,CAAC,CAAC;;EAGV,MAAMa,cAAc,GAAGiB,cAAK,CAACC,WAAW,CACpC+D,KAAK;;IACD,MAAMC,mBAAmB,IAAAC,aAAA,GACrB,CAAC,GAAGP,eAAe,CAAC,CAACQ,OAAO,EAAE,CAACC,IAAI,CAAClE,KAAK,IAAI8D,KAAK,CAACK,UAAU,IAAInE,KAAK,CAAC,cAAAgE,aAAA,cAAAA,aAAA,GAAIP,eAAe,CAAC,CAAC,CAAC;IAEjG,MAAMW,IAAI,GAAG,IAAIC,GAAG,CAAC,CAACN,mBAAmB,EAAE,GAAGO,qBAAqB,CAACR,KAAK,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAGM,IAAI,CAAC,CAACG,IAAI,CAAC,CAACzB,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,CAAC;GACzC,EACD,CAACU,eAAe,CAAC,CACpB;EAED,OAAOnF,cAAc,GAAGO,cAAc,GAAGU,SAAS;AACtD;;;;"}
|
1
|
+
{"version":3,"file":"useTableRenderer.js","sources":["../../../../../../../../../src/primitives/Table/Core/features/useTableRenderer.tsx"],"sourcesContent":["import React, { CSSProperties } from 'react';\nimport { Table as ReactTable, TableMeta as ReactTableMeta } from '@tanstack/react-table';\nimport {\n useVirtualizer,\n defaultRangeExtractor,\n ScrollToOptions as ReactVirtualScrollToOptions,\n VirtualItem,\n} from '@tanstack/react-virtual';\nimport { HEADER_FOOTER_ROW_HEIGHT_ESTIMATE, ROW_HEIGHT_ESTIMATES } from '../util/rows';\nimport { Row } from '../components/Row/Row';\nimport { useTableRenderers } from '../types';\nimport { TableRef } from '../../types';\n\nconst TABLE_SCROLL_PADDING_BOTTOM = 36;\nconst TABLE_PADDING_BOTTOM = 0;\n\nexport function useTableRenderer<TType = unknown>(\n renderers: useTableRenderers<TType>,\n table: ReactTable<TType>,\n tableRef: React.RefObject<TableRef>,\n defaultRowActiveIndex?: number | undefined\n) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const rows = table.getRowModel().rows;\n const HEADER_OFFSET_TOTAL = HEADER_FOOTER_ROW_HEIGHT_ESTIMATE * table.getHeaderGroups().length;\n const isTableGrouped = !!table.getState().grouping?.length;\n const FOOTER_OFFSET_TOTAL = tableMeta.footer.isEnabled ? HEADER_FOOTER_ROW_HEIGHT_ESTIMATE : 0;\n\n // expanded rows\n const { createRowMeasurer, estimateSize } = useRowHeightVirtualisation<TType>(table);\n\n // row groups\n const rangeExtractor = useRowGroupVirtualisation<TType>(table);\n\n const virtualiser = useVirtualizer({\n count: rows.length,\n estimateSize,\n getScrollElement: () => tableRef.current,\n overscan: tableMeta.printing.isPrinting ? rows.length : undefined,\n rangeExtractor,\n scrollPaddingStart: isTableGrouped ? HEADER_FOOTER_ROW_HEIGHT_ESTIMATE : undefined,\n scrollPaddingEnd: HEADER_OFFSET_TOTAL + TABLE_SCROLL_PADDING_BOTTOM,\n paddingEnd: TABLE_PADDING_BOTTOM,\n });\n\n const virtualItems = virtualiser.getVirtualItems();\n\n const scrollToIndex = React.useCallback(\n (index: number, options: ReactVirtualScrollToOptions = { align: 'auto', behavior: 'smooth' }) => {\n const notSmooth: ReactVirtualScrollToOptions = { ...options, behavior: 'auto' };\n\n if (tableRef.current) {\n if (index === 0) {\n virtualiser.scrollToOffset(0, notSmooth);\n } else if (index >= virtualItems.length - 1) {\n // scrolling to the last row isn't easy when rows have dynamic height\n // because you don't know all the heights until they render...\n // so when you skip to the last you don't know if \"the end\" is actually the end\n virtualiser.scrollToIndex(index, notSmooth);\n\n // https://github.com/TanStack/virtual/issues/216\n setTimeout(() => {\n virtualiser.scrollToIndex(index, notSmooth);\n\n setTimeout(() => {\n virtualiser.scrollToIndex(index, notSmooth);\n }, 150);\n }, 150);\n } else {\n virtualiser.scrollToIndex(index, options);\n }\n }\n },\n [virtualItems.length, tableRef.current]\n );\n\n // use row 1 not 0, because 0 might be sticky in grouped tables and it's start value will always be 0\n const paddingStartIndex = isTableGrouped && rows.length > 1 ? 1 : 0;\n\n // styling for offsetting rows - this \"is\" the virtualisation\n const [paddingTop, paddingBottom] =\n virtualItems.length > 0\n ? [\n // use row 1 not 0, because 0 might be sticky in grouped tables and it's start value will always be 0\n Math.max(\n 0,\n virtualItems[paddingStartIndex]?.start -\n virtualiser.options.scrollMargin -\n virtualItems[paddingStartIndex]?.size ?? 0\n ),\n Math.max(0, virtualiser.getTotalSize() - virtualItems[virtualItems.length - 1]?.end ?? 0),\n ]\n : [0, 0];\n\n // ensure default active rows are scrolled to\n React.useEffect(() => {\n if (defaultRowActiveIndex) {\n scrollToIndex(defaultRowActiveIndex, { align: 'center', behavior: 'auto' });\n }\n }, []);\n\n // rendered output\n let style: CSSProperties = {};\n let content: (JSX.Element | null)[] | null = null;\n\n if (rows.length) {\n style = {\n height: `${virtualiser.getTotalSize() - HEADER_OFFSET_TOTAL + FOOTER_OFFSET_TOTAL}px`,\n paddingBottom,\n paddingTop,\n };\n content = virtualItems.map(virtualRow => {\n // there appears to be a react-virtual bug where it inserts a single `undefined` item at the end of the row, which crashes here\n if (!virtualRow) {\n return null;\n }\n\n const row = rows[virtualRow.index];\n const measureRow = createRowMeasurer(virtualiser.resizeItem, virtualRow);\n return (\n <Row\n key={row.id}\n row={row}\n index={virtualRow.index}\n table={table}\n measureRow={measureRow}\n renderer={renderers.row}\n cellRenderer={renderers.cell}\n />\n );\n });\n }\n\n return {\n rows: content,\n style,\n scrollToIndex,\n };\n}\n\n// support varying row heights - variable row heights, row expansion\nfunction useRowHeightVirtualisation<TType = unknown>(table: ReactTable<TType>) {\n const tableMeta = table.options.meta as ReactTableMeta<TType>;\n const rows = table.getRowModel().rows;\n const expandedState = table.getState().expanded;\n\n const [expandedRowHeightsCache, setExpandedRowHeightsCache] = React.useState<Record<number, number>>({});\n\n // look at all registered expanded row heights and use them to form a more accurate average size\n // it might be worth considering if taking the max, or an upper bound, would be better\n const averageExpandedRowHeight = React.useMemo(() => {\n const values: number[] = Object.values(expandedRowHeightsCache);\n return values.length ? values.reduce((a, b) => a + b, 0) / values.length : 0;\n }, [expandedRowHeightsCache]);\n\n // row heights\n const estimateSize = React.useCallback(\n (index: number) => {\n const rowHeight = tableMeta.rowHeight.height\n ? ROW_HEIGHT_ESTIMATES[tableMeta.rowHeight.height]\n : ROW_HEIGHT_ESTIMATES.medium;\n\n if (expandedState === true || rows[index]?.getIsExpanded?.()) {\n return rowHeight + averageExpandedRowHeight;\n }\n\n return rowHeight;\n },\n [tableMeta.rowHeight.height, averageExpandedRowHeight, expandedState]\n );\n\n const createRowMeasurer = React.useCallback(\n (resizeItem: (item: VirtualItem, size: number) => void, virtualRow: VirtualItem) =>\n (rowHeight: number, expansionHeight?: number) => {\n // register the expansion height so that it can be used to determine an average\n if (expansionHeight) {\n setExpandedRowHeightsCache(cache => ({ ...cache, [virtualRow.index]: expansionHeight }));\n }\n\n // update the whole row's size to include the expanded height\n resizeItem(virtualRow, rowHeight + (expansionHeight ?? 0));\n },\n []\n );\n\n return { estimateSize, createRowMeasurer };\n}\n\n// support virtualised row groups (where the row group headers are sticky)\nfunction useRowGroupVirtualisation<TType = unknown>(table: ReactTable<TType>) {\n const rows = table.getRowModel().rows;\n const isTableGrouped = !!table.getState().grouping.length;\n\n const rowGroupIndexes = React.useMemo(() => {\n const indexes: number[] = [];\n\n if (isTableGrouped) {\n rows.forEach((row, index) => {\n if (row.getIsGrouped()) {\n indexes.push(index);\n }\n });\n }\n\n return indexes;\n }, [rows]);\n\n // this is taken from the react-virtual docs/examples\n const rangeExtractor = React.useCallback(\n range => {\n const activeRowGroupIndex =\n [...rowGroupIndexes].reverse().find(index => range.startIndex >= index) ?? rowGroupIndexes[0];\n\n const next = new Set([activeRowGroupIndex, ...defaultRangeExtractor(range)]);\n return [...next].sort((a, b) => a - b);\n },\n [rowGroupIndexes]\n );\n\n return isTableGrouped ? rangeExtractor : undefined;\n}\n"],"names":["TABLE_SCROLL_PADDING_BOTTOM","TABLE_PADDING_BOTTOM","useTableRenderer","renderers","table","tableRef","defaultRowActiveIndex","tableMeta","options","meta","rows","getRowModel","HEADER_OFFSET_TOTAL","HEADER_FOOTER_ROW_HEIGHT_ESTIMATE","getHeaderGroups","length","isTableGrouped","_table$getState$group","getState","grouping","FOOTER_OFFSET_TOTAL","footer","isEnabled","createRowMeasurer","estimateSize","useRowHeightVirtualisation","rangeExtractor","useRowGroupVirtualisation","virtualiser","useVirtualizer","count","getScrollElement","current","overscan","printing","isPrinting","undefined","scrollPaddingStart","scrollPaddingEnd","paddingEnd","virtualItems","getVirtualItems","scrollToIndex","React","useCallback","index","align","behavior","notSmooth","scrollToOffset","setTimeout","paddingStartIndex","paddingTop","paddingBottom","Math","max","_ref","_virtualItems$padding","start","scrollMargin","_virtualItems$padding2","size","_ref2","getTotalSize","_virtualItems","end","useEffect","style","content","height","map","virtualRow","row","measureRow","resizeItem","Row","key","id","renderer","cellRenderer","cell","expandedState","expanded","expandedRowHeightsCache","setExpandedRowHeightsCache","useState","averageExpandedRowHeight","useMemo","values","Object","reduce","a","b","rowHeight","ROW_HEIGHT_ESTIMATES","medium","_rows$index","_rows$index$getIsExpa","getIsExpanded","call","expansionHeight","cache","rowGroupIndexes","indexes","forEach","getIsGrouped","push","range","activeRowGroupIndex","_reverse$find","reverse","find","startIndex","next","Set","defaultRangeExtractor","sort"],"mappings":"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"}
|
@@ -4,7 +4,7 @@ const ROW_HEIGHT_ESTIMATES = {
|
|
4
4
|
tall: 49,
|
5
5
|
'extra-tall': 57
|
6
6
|
};
|
7
|
-
const
|
7
|
+
const HEADER_FOOTER_ROW_HEIGHT_ESTIMATE = ROW_HEIGHT_ESTIMATES.medium + 2; // header includes 2px border
|
8
8
|
|
9
|
-
export {
|
9
|
+
export { HEADER_FOOTER_ROW_HEIGHT_ESTIMATE, ROW_HEIGHT_ESTIMATES };
|
10
10
|
//# sourceMappingURL=rows.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rows.js","sources":["../../../../../../../../../src/primitives/Table/Core/util/rows.ts"],"sourcesContent":["export const ROW_HEIGHT_ESTIMATES = {\n short: 33,\n medium: 41,\n tall: 49,\n 'extra-tall': 57,\n};\n\nexport const
|
1
|
+
{"version":3,"file":"rows.js","sources":["../../../../../../../../../src/primitives/Table/Core/util/rows.ts"],"sourcesContent":["export const ROW_HEIGHT_ESTIMATES = {\n short: 33,\n medium: 41,\n tall: 49,\n 'extra-tall': 57,\n};\n\nexport const HEADER_FOOTER_ROW_HEIGHT_ESTIMATE = ROW_HEIGHT_ESTIMATES.medium + 2; // header includes 2px border\n"],"names":["ROW_HEIGHT_ESTIMATES","short","medium","tall","HEADER_FOOTER_ROW_HEIGHT_ESTIMATE"],"mappings":"MAAaA,oBAAoB,GAAG;EAChCC,KAAK,EAAE,EAAE;EACTC,MAAM,EAAE,EAAE;EACVC,IAAI,EAAE,EAAE;EACR,YAAY,EAAE;;MAGLC,iCAAiC,GAAGJ,oBAAoB,CAACE,MAAM,GAAG,EAAE;;;;"}
|
package/dist/index.css
CHANGED
@@ -641,10 +641,6 @@ table[data-taco^='table'] tr:first-child td {
|
|
641
641
|
@apply !border-t-0;
|
642
642
|
}
|
643
643
|
|
644
|
-
table[data-taco^='table'] tr:last-child td {
|
645
|
-
@apply !border-b-0;
|
646
|
-
}
|
647
|
-
|
648
644
|
table[data-taco^='table'] tr[aria-grabbed='true'] td {
|
649
645
|
@apply !wcag-blue-500;
|
650
646
|
}
|
@@ -992,7 +988,7 @@ table[data-taco^='table'][data-table-font-size='large'] td [data-taco='textarea'
|
|
992
988
|
}
|
993
989
|
|
994
990
|
table[data-taco^='table'][data-table-font-size='large'] td [data-taco='input-container'] [data-affix-type='postfix'] button {
|
995
|
-
@apply !-mr-[19px] !h-10 !w-10;
|
991
|
+
@apply z-10 !-mr-[19px] !h-10 !w-10;
|
996
992
|
}
|
997
993
|
|
998
994
|
table[data-taco^='table'][data-table-font-size='large']
|
@@ -5823,7 +5823,9 @@ const useCombobox = ({
|
|
5823
5823
|
}
|
5824
5824
|
};
|
5825
5825
|
const handleInputKeyDown = event => {
|
5826
|
+
var _inputRef$current;
|
5826
5827
|
event.persist();
|
5828
|
+
const insideTheTable = !!((_inputRef$current = inputRef.current) !== null && _inputRef$current !== void 0 && _inputRef$current.closest('table, [role="rowgroup"]'));
|
5827
5829
|
if (!event.ctrlKey && !event.metaKey) {
|
5828
5830
|
switch (event.key) {
|
5829
5831
|
case 'Backspace':
|
@@ -5838,20 +5840,32 @@ const useCombobox = ({
|
|
5838
5840
|
return;
|
5839
5841
|
}
|
5840
5842
|
case 'Tab':
|
5843
|
+
{
|
5844
|
+
setCurrentValue(currentIndex);
|
5845
|
+
setOpen(false);
|
5846
|
+
return;
|
5847
|
+
}
|
5841
5848
|
case 'Enter':
|
5842
5849
|
{
|
5843
|
-
if (
|
5850
|
+
if (insideTheTable) {
|
5844
5851
|
event.preventDefault();
|
5852
|
+
if (inline && !open) {
|
5853
|
+
setOpen(true);
|
5854
|
+
} else if (buttonRef.current && !open) {
|
5855
|
+
buttonRef.current.click();
|
5856
|
+
}
|
5857
|
+
}
|
5858
|
+
if (open) {
|
5859
|
+
setCurrentValue(currentIndex);
|
5860
|
+
setOpen(false);
|
5845
5861
|
}
|
5846
|
-
setCurrentValue(currentIndex);
|
5847
|
-
setOpen(false);
|
5848
5862
|
return;
|
5849
5863
|
}
|
5850
5864
|
case 'ArrowDown':
|
5851
5865
|
if (open) {
|
5852
5866
|
event.preventDefault();
|
5853
5867
|
} else {
|
5854
|
-
if (!inline && buttonRef.current) {
|
5868
|
+
if (!inline && buttonRef.current && !insideTheTable) {
|
5855
5869
|
buttonRef.current.click();
|
5856
5870
|
}
|
5857
5871
|
}
|
@@ -5871,7 +5885,7 @@ const useCombobox = ({
|
|
5871
5885
|
listRef.current.dispatchEvent(createCustomKeyboardEvent(event));
|
5872
5886
|
}
|
5873
5887
|
if (inline && !open) {
|
5874
|
-
if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
|
5888
|
+
if ((event.key === 'ArrowUp' || event.key === 'ArrowDown') && !insideTheTable) {
|
5875
5889
|
event.preventDefault();
|
5876
5890
|
const initialIndex = event.key === 'ArrowUp' ? data.length - 1 : 0;
|
5877
5891
|
setCurrentIndex(currentIndex !== undefined ? currentIndex : initialIndex);
|
@@ -7352,9 +7366,19 @@ const Item$1 = /*#__PURE__*/React__default.forwardRef(function Item(props, ref)
|
|
7352
7366
|
});
|
7353
7367
|
|
7354
7368
|
const Link = /*#__PURE__*/React__default.forwardRef(function Link(props, ref) {
|
7369
|
+
const isExternal = props.href.startsWith('http');
|
7355
7370
|
const control = /*#__PURE__*/React__default.createElement(Icon, {
|
7356
|
-
name:
|
7371
|
+
name: isExternal ? 'link-external' : 'chevron-right'
|
7357
7372
|
});
|
7373
|
+
if (isExternal) {
|
7374
|
+
return /*#__PURE__*/React__default.createElement(Item$1, Object.assign({}, props, {
|
7375
|
+
as: "a",
|
7376
|
+
target: "_blank",
|
7377
|
+
rel: "noopener noreferrer",
|
7378
|
+
control: control,
|
7379
|
+
ref: ref
|
7380
|
+
}));
|
7381
|
+
}
|
7358
7382
|
return /*#__PURE__*/React__default.createElement(Item$1, Object.assign({}, props, {
|
7359
7383
|
as: "a",
|
7360
7384
|
control: control,
|
@@ -11485,7 +11509,7 @@ const ROW_HEIGHT_ESTIMATES = {
|
|
11485
11509
|
tall: 49,
|
11486
11510
|
'extra-tall': 57
|
11487
11511
|
};
|
11488
|
-
const
|
11512
|
+
const HEADER_FOOTER_ROW_HEIGHT_ESTIMATE = ROW_HEIGHT_ESTIMATES.medium + 2; // header includes 2px border
|
11489
11513
|
|
11490
11514
|
function SkeletonRow(props) {
|
11491
11515
|
const {
|
@@ -11581,8 +11605,9 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
|
|
11581
11605
|
var _table$getState$group, _ref, _virtualItems$padding, _virtualItems$padding2, _ref2, _virtualItems;
|
11582
11606
|
const tableMeta = table.options.meta;
|
11583
11607
|
const rows = table.getRowModel().rows;
|
11584
|
-
const HEADER_OFFSET_TOTAL =
|
11608
|
+
const HEADER_OFFSET_TOTAL = HEADER_FOOTER_ROW_HEIGHT_ESTIMATE * table.getHeaderGroups().length;
|
11585
11609
|
const isTableGrouped = !!((_table$getState$group = table.getState().grouping) !== null && _table$getState$group !== void 0 && _table$getState$group.length);
|
11610
|
+
const FOOTER_OFFSET_TOTAL = tableMeta.footer.isEnabled ? HEADER_FOOTER_ROW_HEIGHT_ESTIMATE : 0;
|
11586
11611
|
// expanded rows
|
11587
11612
|
const {
|
11588
11613
|
createRowMeasurer,
|
@@ -11596,7 +11621,7 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
|
|
11596
11621
|
getScrollElement: () => tableRef.current,
|
11597
11622
|
overscan: tableMeta.printing.isPrinting ? rows.length : undefined,
|
11598
11623
|
rangeExtractor,
|
11599
|
-
scrollPaddingStart: isTableGrouped ?
|
11624
|
+
scrollPaddingStart: isTableGrouped ? HEADER_FOOTER_ROW_HEIGHT_ESTIMATE : undefined,
|
11600
11625
|
scrollPaddingEnd: HEADER_OFFSET_TOTAL + TABLE_SCROLL_PADDING_BOTTOM,
|
11601
11626
|
paddingEnd: TABLE_PADDING_BOTTOM
|
11602
11627
|
});
|
@@ -11649,7 +11674,7 @@ function useTableRenderer(renderers, table, tableRef, defaultRowActiveIndex) {
|
|
11649
11674
|
let content = null;
|
11650
11675
|
if (rows.length) {
|
11651
11676
|
style = {
|
11652
|
-
height: `${virtualiser.getTotalSize() - HEADER_OFFSET_TOTAL}px`,
|
11677
|
+
height: `${virtualiser.getTotalSize() - HEADER_OFFSET_TOTAL + FOOTER_OFFSET_TOTAL}px`,
|
11653
11678
|
paddingBottom,
|
11654
11679
|
paddingTop
|
11655
11680
|
};
|
@@ -18486,7 +18511,7 @@ const MemoedEditingCell = /*#__PURE__*/React__default.memo(function MemoedEditin
|
|
18486
18511
|
if (type === 'datepicker') {
|
18487
18512
|
const handleChange = event => {
|
18488
18513
|
const newDate = event.detail;
|
18489
|
-
if (!value || dateFns.isDate(value) && dateFns.isDate(newDate) && !isWeakEqual(value, newDate)) {
|
18514
|
+
if (!value || !newDate || dateFns.isDate(value) && dateFns.isDate(newDate) && !isWeakEqual(value, newDate)) {
|
18490
18515
|
props.onChange(event.detail);
|
18491
18516
|
}
|
18492
18517
|
};
|