@dxos/react-ui-table 0.4.9-main.d4fb12a → 0.4.9-main.f3fe18b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/index.mjs +33 -31
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/types/src/components/Table/Table.d.ts +1 -2
- package/dist/types/src/components/Table/Table.d.ts.map +1 -1
- package/dist/types/src/components/Table/TableHead.d.ts.map +1 -1
- package/dist/types/src/theme.d.ts +3 -4
- package/dist/types/src/theme.d.ts.map +1 -1
- package/package.json +14 -14
- package/src/components/Table/Table.tsx +4 -5
- package/src/components/Table/TableHead.tsx +15 -10
- package/src/theme.ts +20 -21
|
@@ -245,21 +245,20 @@ var [TableProvider, useUntypedTableContext] = createContext(TABLE_NAME);
|
|
|
245
245
|
var useTableContext = (consumerName) => useUntypedTableContext(consumerName);
|
|
246
246
|
|
|
247
247
|
// packages/ui/react-ui-table/src/theme.ts
|
|
248
|
-
import { modalSurface, focusRing, ghostSelected, ghostSelectedCurrent, groupBorder, mx as mx2 } from "@dxos/react-ui-theme";
|
|
248
|
+
import { modalSurface, fixedSurface, focusRing, ghostSelected, ghostSelectedCurrent, groupBorder, mx as mx2 } from "@dxos/react-ui-theme";
|
|
249
249
|
var currentRow = "!bg-neutral-75 !dark:bg-neutral-850";
|
|
250
250
|
var selectedRow = "!bg-primary-100 dark:!bg-primary-700";
|
|
251
251
|
var flushPadding = "pli-0 plb-0";
|
|
252
252
|
var textPadding = "pli-2 plb-0.5";
|
|
253
|
-
var headPadding = "pli-2 plb-1";
|
|
253
|
+
var headPadding = "pli-2 plb-1.5";
|
|
254
254
|
var gridCellFocusRing = "focus-within:z-[11] focus-within:outline outline-2 outline-primary-500 dark:outline-primary-400";
|
|
255
255
|
var tableRoot = ({ fullWidth }, ...etc) => mx2("table-fixed", fullWidth && "is-full", ...etc);
|
|
256
256
|
var groupTh = (_props, ...etc) => mx2("text-start font-medium", flushPadding, ...etc);
|
|
257
|
-
var theadRoot = ({ header, stickyHeader }, ...etc) => mx2(header ? stickyHeader && "sticky block-start-[--sticky-top] z-[1]" : "collapse", header &&
|
|
257
|
+
var theadRoot = ({ header, stickyHeader }, ...etc) => mx2(header ? stickyHeader && "sticky block-start-[--sticky-top] z-[1]" : "collapse", header && fixedSurface, ...etc);
|
|
258
258
|
var theadTr = (_props, ...etc) => mx2("group", ...etc);
|
|
259
|
-
var theadTh = ({ border }, ...etc) => mx2("relative
|
|
260
|
-
var theadResizeRoot = (
|
|
261
|
-
|
|
262
|
-
};
|
|
259
|
+
var theadTh = ({ border }, ...etc) => mx2("relative text-start font-medium select-none truncate", headPadding, border && "border", border && groupBorder, ...etc);
|
|
260
|
+
var theadResizeRoot = (_props, ...etc) => mx2("absolute top-0 pis-1 h-full z-[10] w-[7px] -right-[5px] cursor-col-resize select-none touch-none opacity-20 hover:opacity-100", ...etc);
|
|
261
|
+
var theadResizeThumb = (_props, ...etc) => mx2("flex group-hover:bg-neutral-700 -ml-[2px] w-[1px] h-full", ...etc);
|
|
263
262
|
var tbodyRoot = (_props, ...etc) => mx2(...etc);
|
|
264
263
|
var tbodyTr = ({ canBeCurrent }, ...etc) => mx2("group", canBeCurrent ? ghostSelectedCurrent : ghostSelected, canBeCurrent && focusRing, canBeCurrent && "cursor-pointer rounded", ...etc);
|
|
265
264
|
var tdRoot = ({ border, isGrid }, ...etc) => mx2("relative", flushPadding, border && "border", border && groupBorder, isGrid && gridCellFocusRing, ...etc);
|
|
@@ -371,10 +370,12 @@ TableFooter.displayName = TABLE_FOOT_NAME;
|
|
|
371
370
|
// packages/ui/react-ui-table/src/components/Table/TableHead.tsx
|
|
372
371
|
import { flexRender as flexRender3 } from "@tanstack/react-table";
|
|
373
372
|
import React6 from "react";
|
|
373
|
+
import { mx as mx3 } from "@dxos/react-ui-theme";
|
|
374
374
|
var TABLE_HEAD_NAME = "TableHeader";
|
|
375
375
|
var TableHead = (_props) => {
|
|
376
376
|
const tableContext = useTableContext(TABLE_HEAD_NAME);
|
|
377
377
|
const headerGroups = tableContext.table.getHeaderGroups();
|
|
378
|
+
const state = tableContext.table.getState();
|
|
378
379
|
return /* @__PURE__ */ React6.createElement("thead", {
|
|
379
380
|
className: theadRoot(tableContext)
|
|
380
381
|
}, headerGroups.map((headerGroup) => {
|
|
@@ -390,22 +391,23 @@ var TableHead = (_props) => {
|
|
|
390
391
|
}
|
|
391
392
|
}, "#"), headerGroup.headers.map((header) => {
|
|
392
393
|
const isResizing = header.column.getIsResizing();
|
|
393
|
-
const
|
|
394
|
-
const resizable = header.column.columnDef.meta?.resizable;
|
|
394
|
+
const resizeHandler = header.getResizeHandler();
|
|
395
395
|
return /* @__PURE__ */ React6.createElement("th", {
|
|
396
396
|
key: header.id,
|
|
397
397
|
style: {
|
|
398
398
|
width: header.getSize()
|
|
399
399
|
},
|
|
400
400
|
className: theadTh(tableContext, header.column.columnDef.meta?.header?.classNames)
|
|
401
|
-
}, !header || header.isPlaceholder ? null : flexRender3(header.column.columnDef.header, header.getContext()), resizable && /* @__PURE__ */ React6.createElement("div", {
|
|
402
|
-
className: theadResizeRoot(
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
onMouseDown:
|
|
407
|
-
onTouchStart:
|
|
408
|
-
}
|
|
401
|
+
}, !header || header.isPlaceholder ? null : flexRender3(header.column.columnDef.header, header.getContext()), header.column.columnDef.meta?.resizable && /* @__PURE__ */ React6.createElement("div", {
|
|
402
|
+
className: theadResizeRoot(tableContext, isResizing && "hidden"),
|
|
403
|
+
style: {
|
|
404
|
+
transform: `translateX(${isResizing ? state.columnSizingInfo.deltaOffset : 0}px)`
|
|
405
|
+
},
|
|
406
|
+
onMouseDown: resizeHandler,
|
|
407
|
+
onTouchStart: resizeHandler
|
|
408
|
+
}, /* @__PURE__ */ React6.createElement("div", {
|
|
409
|
+
className: mx3(theadResizeThumb(tableContext))
|
|
410
|
+
})));
|
|
409
411
|
}), tableContext.expand && /* @__PURE__ */ React6.createElement("th", null))
|
|
410
412
|
);
|
|
411
413
|
}));
|
|
@@ -559,7 +561,6 @@ var TableImpl = (props) => {
|
|
|
559
561
|
className: "font-mono text-xs text-neutral-500 m-1 p-2 ring"
|
|
560
562
|
}, /* @__PURE__ */ React7.createElement("code", null, JSON.stringify(table.getState(), void 0, 2)));
|
|
561
563
|
}
|
|
562
|
-
const virtualisable = getScrollElement !== void 0;
|
|
563
564
|
const isResizingColumn = table.getState().columnSizingInfo.isResizingColumn;
|
|
564
565
|
return /* @__PURE__ */ React7.createElement("table", {
|
|
565
566
|
role,
|
|
@@ -569,7 +570,7 @@ var TableImpl = (props) => {
|
|
|
569
570
|
width: table.getTotalSize()
|
|
570
571
|
}
|
|
571
572
|
}
|
|
572
|
-
}, /* @__PURE__ */ React7.createElement(TableHead, null), grouping?.length !== 0 ?
|
|
573
|
+
}, /* @__PURE__ */ React7.createElement(TableHead, null), grouping?.length !== 0 ? getScrollElement ? isResizingColumn ? /* @__PURE__ */ React7.createElement(MemoizedVirtualisedTableContent, {
|
|
573
574
|
getScrollElement
|
|
574
575
|
}) : /* @__PURE__ */ React7.createElement(VirtualizedTableContent, {
|
|
575
576
|
getScrollElement
|
|
@@ -588,8 +589,8 @@ var VirtualizedTableContent = ({ getScrollElement }) => {
|
|
|
588
589
|
const { getTotalSize, getVirtualItems } = useVirtualizer({
|
|
589
590
|
getScrollElement,
|
|
590
591
|
count: rows.length,
|
|
591
|
-
overscan:
|
|
592
|
-
estimateSize: () =>
|
|
592
|
+
overscan: 4,
|
|
593
|
+
estimateSize: () => 33
|
|
593
594
|
});
|
|
594
595
|
const virtualRows = getVirtualItems();
|
|
595
596
|
const totalSize = getTotalSize();
|
|
@@ -638,7 +639,7 @@ import { CaretDown } from "@phosphor-icons/react";
|
|
|
638
639
|
import React8, { useCallback as useCallback2, useState as useState3 } from "react";
|
|
639
640
|
import { Popover as Popover2, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
640
641
|
import { PopoverCombobox } from "@dxos/react-ui-searchlist";
|
|
641
|
-
import { descriptionText, getSize as getSize3, mx as
|
|
642
|
+
import { descriptionText, getSize as getSize3, mx as mx4, staticPlaceholderText } from "@dxos/react-ui-theme";
|
|
642
643
|
var initialItems = (model, value) => value ? {
|
|
643
644
|
[model.getId(value)]: {
|
|
644
645
|
label: model.getText(value),
|
|
@@ -675,7 +676,7 @@ var CellCombobox = ({ model, value, onValueChange }) => {
|
|
|
675
676
|
variant: "ghost",
|
|
676
677
|
classNames: "is-full rounded-none ring-inset"
|
|
677
678
|
}, value ? /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement("span", {
|
|
678
|
-
className:
|
|
679
|
+
className: mx4("font-normal text-start text-base flex-1 min-is-0 truncate mie-2", !value && staticPlaceholderText)
|
|
679
680
|
}, model.getText(value)), /* @__PURE__ */ React8.createElement(CaretDown, {
|
|
680
681
|
weight: "bold",
|
|
681
682
|
className: getSize3(3)
|
|
@@ -686,9 +687,9 @@ var CellCombobox = ({ model, value, onValueChange }) => {
|
|
|
686
687
|
value: searchInputValue,
|
|
687
688
|
onValueChange: handleSearchInputValueChange
|
|
688
689
|
}), /* @__PURE__ */ React8.createElement(PopoverCombobox.List, null, searchInputValue.length < 1 ? /* @__PURE__ */ React8.createElement("p", {
|
|
689
|
-
className:
|
|
690
|
+
className: mx4("text-center", descriptionText)
|
|
690
691
|
}, "Start typing to search") : loading ? /* @__PURE__ */ React8.createElement("p", {
|
|
691
|
-
className:
|
|
692
|
+
className: mx4("text-center", descriptionText)
|
|
692
693
|
}, "Searching\u2026") : /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement(PopoverCombobox.Empty, {
|
|
693
694
|
classNames: [
|
|
694
695
|
"text-center",
|
|
@@ -711,7 +712,7 @@ import { formatDistanceToNow } from "date-fns/formatDistanceToNow";
|
|
|
711
712
|
import React9, { useEffect as useEffect2, useRef as useRef2, useState as useState4 } from "react";
|
|
712
713
|
import { log as log2 } from "@dxos/log";
|
|
713
714
|
import { Input as Input2, Tooltip } from "@dxos/react-ui";
|
|
714
|
-
import { getSize as getSize4, mx as
|
|
715
|
+
import { getSize as getSize4, mx as mx5 } from "@dxos/react-ui-theme";
|
|
715
716
|
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-table/src/helpers.tsx";
|
|
716
717
|
var createColumnBuilder = () => ({
|
|
717
718
|
helper: createColumnHelper(),
|
|
@@ -862,7 +863,7 @@ var ColumnBuilder = class {
|
|
|
862
863
|
cell: model && onUpdate ? ComboboxBuilderCell : (cellContext) => {
|
|
863
864
|
const cellValue = cellContext.getValue();
|
|
864
865
|
return /* @__PURE__ */ React9.createElement("div", {
|
|
865
|
-
className:
|
|
866
|
+
className: mx5("truncate", classNames)
|
|
866
867
|
}, cellValue ? model?.getText(cellValue) : "");
|
|
867
868
|
},
|
|
868
869
|
...props,
|
|
@@ -893,7 +894,7 @@ var ColumnBuilder = class {
|
|
|
893
894
|
value = value.content;
|
|
894
895
|
}
|
|
895
896
|
return /* @__PURE__ */ React9.createElement("div", {
|
|
896
|
-
className:
|
|
897
|
+
className: mx5("truncate", textPadding, classNames)
|
|
897
898
|
}, value);
|
|
898
899
|
},
|
|
899
900
|
...props,
|
|
@@ -948,7 +949,7 @@ var ColumnBuilder = class {
|
|
|
948
949
|
addSuffix: true
|
|
949
950
|
}) : value.toISOString() : void 0;
|
|
950
951
|
return /* @__PURE__ */ React9.createElement("div", {
|
|
951
|
-
className:
|
|
952
|
+
className: mx5(textPadding, classNames)
|
|
952
953
|
}, str);
|
|
953
954
|
} catch (err) {
|
|
954
955
|
log2.info("formatError", {
|
|
@@ -1087,11 +1088,11 @@ var ColumnBuilder = class {
|
|
|
1087
1088
|
const value = cell.getValue();
|
|
1088
1089
|
if (value) {
|
|
1089
1090
|
return /* @__PURE__ */ React9.createElement(IconOn, {
|
|
1090
|
-
className:
|
|
1091
|
+
className: mx5("block mli-auto", getSize4(6), on?.className ?? "text-green-700")
|
|
1091
1092
|
});
|
|
1092
1093
|
} else if (value === false) {
|
|
1093
1094
|
return /* @__PURE__ */ React9.createElement(IconOff, {
|
|
1094
|
-
className:
|
|
1095
|
+
className: mx5("block mli-auto", getSize4(6), off?.className ?? "text-red-700")
|
|
1095
1096
|
});
|
|
1096
1097
|
} else {
|
|
1097
1098
|
return null;
|
|
@@ -1125,6 +1126,7 @@ export {
|
|
|
1125
1126
|
tfootTh,
|
|
1126
1127
|
tfootTr,
|
|
1127
1128
|
theadResizeRoot,
|
|
1129
|
+
theadResizeThumb,
|
|
1128
1130
|
theadRoot,
|
|
1129
1131
|
theadTh,
|
|
1130
1132
|
theadTr,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/ColumnMenu.tsx", "../../../src/components/SortButton.tsx", "../../../src/translations.ts", "../../../src/components/Table/Table.tsx", "../../../src/components/Table/TableBody.tsx", "../../../src/components/Table/TableContext.tsx", "../../../src/theme.ts", "../../../src/components/Cell/Cell.tsx", "../../../src/components/Table/TableFooter.tsx", "../../../src/components/Table/TableHead.tsx", "../../../src/components/Cell/CellCombobox.tsx", "../../../src/helpers.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Check, Trash, X, GearSix } from '@phosphor-icons/react';\nimport { type HeaderContext, type RowData } from '@tanstack/react-table';\nimport React, { type FC, type PropsWithChildren, useRef, useState } from 'react';\n\nimport { Button, DensityProvider, Input, Popover, Select, Separator, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\nimport { safeParseInt } from '@dxos/util';\n\nimport { SortButton } from './SortButton';\nimport { type TableDef, type ColumnProps, type ColumnType } from '../schema';\nimport { translationKey } from '../translations';\n\nexport type ColumnMenuProps<TData extends RowData, TValue> = {\n context: HeaderContext<TData, TValue>;\n tableDefs: TableDef[];\n tableDef: TableDef;\n column: ColumnProps;\n onUpdate?: (id: string, column: ColumnProps) => void;\n onDelete?: (id: string) => void;\n};\n\nexport const ColumnMenu = <TData extends RowData, TValue>({ column, ...props }: ColumnMenuProps<TData, TValue>) => {\n const title = column.label?.length ? column.label : column.id;\n\n const header = props.context.header;\n\n const canSort = header.column.getCanSort();\n const sortDirection = header.column.getIsSorted();\n const toggleSort = header.column.getToggleSortingHandler();\n\n return (\n <div className='flex items-center gap-2'>\n <div className='flex-1 min-is-0 truncate' title={title}>\n {title}\n </div>\n <div className='flex gap-0'>\n {canSort && toggleSort && <SortButton sortDirection={sortDirection} onClick={toggleSort} />}\n <ColumnPanel {...props} column={column} />\n </div>\n </div>\n );\n};\n\nconst Section: FC<PropsWithChildren & { className?: string }> = ({ children, className }) => (\n <div role='none' className={mx('p-2', className)}>\n {children}\n </div>\n);\n\nexport const ColumnPanel = <TData extends RowData, TValue>({\n context,\n tableDefs,\n tableDef,\n column,\n onUpdate,\n onDelete,\n}: ColumnMenuProps<TData, TValue>) => {\n const [open, setOpen] = useState(false);\n const [prop, setProp] = useState(column.id);\n const [refTable, setRefTable] = useState(column.refTable);\n const [refProp, setRefProp] = useState(column.refProp);\n const [type, setType] = useState(String(column.type));\n const [label, setLabel] = useState(column.label);\n const [digits, setDigits] = useState(String(column.digits ?? '0'));\n const propRef = useRef<HTMLInputElement>(null);\n const { t } = useTranslation(translationKey);\n\n const handleCancel = () => {\n setProp(column.id);\n setOpen(false);\n };\n\n const handleSave = () => {\n // Check valid.\n if (!prop.length || !prop.match(/^[a-zA-Z_].+/i)) {\n propRef.current?.focus();\n return;\n }\n\n // If already exists then check same type.\n const current = tableDef.columns.find((c) => c.id !== column.id && c.id === prop);\n if (current) {\n // TODO(burdon): Allow multiple columns with different refProps. Ensure correct table prop is updated.\n if (current.type !== 'ref' /* || current.ref !== refTable */) {\n // TODO(burdon): Show error.\n propRef.current?.focus();\n return;\n }\n }\n\n onUpdate?.(prop, {\n id: prop, // TODO(burdon): Make unique.\n prop,\n label,\n type: type as ColumnProps['type'],\n refTable,\n refProp,\n digits: safeParseInt(digits),\n });\n\n setOpen(false);\n };\n\n return (\n <Popover.Root open={open} onOpenChange={(nextOpen) => setOpen(nextOpen)}>\n <Popover.Trigger asChild>\n <Button variant='ghost'>\n <GearSix className={mx(getSize(4), 'rotate-90')} />\n </Button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content>\n <Popover.Viewport classNames='w-60'>\n <DensityProvider density='fine'>\n <div className='flex flex-col gap-1'>\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1'>{t('column label label')}</Input.Label>\n <Input.TextInput\n placeholder='Column label'\n value={label ?? ''}\n onChange={(event) => setLabel(event.target.value)}\n autoFocus\n />\n </Input.Root>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('property key label')}</Input.Label>\n <Input.TextInput\n ref={propRef}\n placeholder='Property key'\n // TODO(burdon): Provide hooks for value normalization, ENTER, ESC, etc.\n value={prop ?? ''}\n onChange={(event) => setProp(event.target.value.replace(/[^\\w_]/g, ''))}\n />\n </Input.Root>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('column type label')}</Input.Label>\n <Select.Root value={type} onValueChange={setType}>\n <Select.TriggerButton placeholder='Type' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {(['number', 'boolean', 'string', 'ref'] as ColumnType[]).map((type) => (\n <Select.Option key={type} value={type}>\n {t(`${type} column type label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n </Section>\n\n {type === 'number' && (\n <>\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('digits label')}</Input.Label>\n {/* TODO(burdon): Constrain input to numbers. */}\n <Input.TextInput value={digits ?? ''} onChange={(event) => setDigits(event.target.value)} />\n </Input.Root>\n </Section>\n </>\n )}\n\n {/* TODO(burdon): Selectors on same line. */}\n {type === 'ref' && (\n <>\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>Table</Input.Label>\n <Select.Root value={refTable} onValueChange={setRefTable}>\n <Select.TriggerButton placeholder='Table' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {tableDefs\n .filter((t) => t.id !== tableDef.id)\n .map(({ id, name }) => (\n <Select.Option key={id} value={id}>\n {name ?? id}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n\n {refTable && (\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>Table property</Input.Label>\n <Select.Root value={refProp} onValueChange={setRefProp}>\n <Select.TriggerButton placeholder='Property' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {tableDefs\n .find((tableDef) => tableDef.id === refTable)\n ?.columns.map(({ id, label }) => (\n <Select.Option key={id} value={id}>\n {label ?? id}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n )}\n </Section>\n </>\n )}\n\n <Separator classNames='mli-2' />\n\n <Section className='space-b-1.5'>\n {/* TODO(burdon): Style as DropdownMenuItem. */}\n <Button variant='primary' classNames='is-full flex gap-2' onClick={handleSave}>\n <span>{t('save label')}</span>\n <div className='grow' />\n <Check className={getSize(5)} />\n </Button>\n <Button classNames='is-full flex gap-2' onClick={handleCancel}>\n <span>{t('cancel label', { ns: 'os' })}</span>\n <div className='grow' />\n <X className={getSize(5)} />\n </Button>\n <Button classNames='is-full flex gap-2' onClick={() => onDelete?.(column.id)}>\n <span>{t('delete label')}</span>\n <div className='grow' />\n <Trash className={getSize(5)} />\n </Button>\n </Section>\n </div>\n </DensityProvider>\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { CaretUpDown, SortAscending, SortDescending } from '@phosphor-icons/react';\nimport { type SortDirection } from '@tanstack/react-table';\nimport React, { type ReactElement } from 'react';\n\nimport { Button } from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\ntype SortButtonProps = { sortDirection: false | SortDirection; onClick: (e: any) => void };\n\nexport const SortButton = ({ sortDirection, onClick }: SortButtonProps) => {\n let icon: ReactElement;\n const size = getSize(4);\n\n switch (sortDirection) {\n case 'asc':\n icon = <SortAscending className={size} />;\n break;\n case 'desc':\n icon = <SortDescending className={size} />;\n break;\n default:\n icon = <CaretUpDown className={size} />;\n }\n\n return (\n <Button variant='ghost' onClick={onClick}>\n {icon}\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const translationKey = 'table';\n\nexport default [\n {\n 'en-US': {\n [translationKey]: {\n 'no selection label': ' ',\n 'number column type label': 'Number',\n 'boolean column type label': 'Toggle',\n 'date column type label': 'Date',\n 'string column type label': 'Text',\n 'ref column type label': 'Reference',\n 'digits label': 'Decimal places',\n 'save label': 'Save',\n 'delete label': 'Delete',\n 'column label label': 'Label',\n 'property key label': 'Property',\n 'column type label': 'Type',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport {\n getCoreRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnSizingInfoState,\n type GroupingState,\n type RowData,\n type ColumnSizingState,\n type OnChangeFn,\n type RowSelectionState,\n getGroupedRowModel,\n getExpandedRowModel,\n} from '@tanstack/react-table';\nimport { useVirtualizer, type VirtualizerOptions } from '@tanstack/react-virtual';\nimport React, { Fragment, useCallback, useEffect, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useDefaultValue, useOnTransition } from '@dxos/react-ui';\n\nimport { TableBody } from './TableBody';\nimport { TableProvider as UntypedTableProvider, type TypedTableProvider, useTableContext } from './TableContext';\nimport { TableFooter } from './TableFooter';\nimport { TableHead } from './TableHead';\nimport { type TableProps } from './props';\nimport { groupTh, tableRoot } from '../../theme';\n\nexport const Table = <TData extends RowData>(props: TableProps<TData>) => {\n const {\n role,\n onColumnResize,\n columnVisibility,\n header = true,\n rowsSelectable,\n debug,\n onDataSelectionChange,\n getScrollElement,\n pinLastRow,\n } = props;\n\n const columns = useDefaultValue(props.columns, []);\n const data = useDefaultValue(props.data, []);\n\n const TableProvider = UntypedTableProvider as TypedTableProvider<TData>;\n\n const [columnsInitialised, setColumnsInitialised] = useState(false);\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>({});\n\n useEffect(() => {\n if (columnsInitialised) {\n return;\n }\n\n setColumnSizing(\n columns\n .filter((column) => !!column.size && (column as any).prop !== undefined)\n .reduce<ColumnSizingState>((state, column) => {\n state[(column as any).prop] = column.size!;\n return state;\n }, {}),\n );\n\n setColumnsInitialised(true);\n }, [columns, setColumnSizing]);\n\n const [columnSizingInfo, setColumnSizingInfo] = useState<ColumnSizingInfoState>({} as ColumnSizingInfoState);\n\n // Notify on column resize.\n const notifyColumnResize = useCallback(() => onColumnResize?.(columnSizing), [onColumnResize, columnSizing]);\n useOnTransition(columnSizingInfo.isResizingColumn, (v) => typeof v === 'string', false, notifyColumnResize);\n\n const [rowSelection = {}, setRowSelection] = useControllableState({\n prop: props.rowSelection,\n onChange: props.onRowSelectionChange,\n defaultProp: props.defaultRowSelection,\n });\n\n // TODO(thure): Does @tanstack/react-table really need this intervention? It did seem necessary to enforce single-selection...\n const handleRowSelectionChange = useCallback<OnChangeFn<RowSelectionState>>(\n (updaterOrValue) => {\n const nextRowSelection = typeof updaterOrValue === 'function' ? updaterOrValue(rowSelection) : updaterOrValue;\n if (rowsSelectable === 'multi') {\n setRowSelection(nextRowSelection);\n } else if (rowsSelectable) {\n const nextRowSelectionKey = Object.keys(nextRowSelection).filter((id) => !rowSelection[id])[0];\n setRowSelection(nextRowSelectionKey ? { [nextRowSelectionKey]: true } : {});\n } else {\n setRowSelection({});\n }\n },\n [rowsSelectable, setRowSelection, rowSelection],\n );\n\n const [grouping, handleGroupingChange] = useState<GroupingState>(props.grouping ?? []);\n useEffect(() => handleGroupingChange(props.grouping ?? []), [handleGroupingChange, props.grouping]);\n\n const table = useReactTable({\n // Data\n meta: {},\n data,\n\n // Columns\n columns,\n defaultColumn: {\n size: 256, // Required in order remove default width.\n maxSize: 1024,\n },\n\n // State\n state: {\n columnVisibility,\n columnSizing,\n columnSizingInfo,\n rowSelection,\n grouping,\n },\n\n // Resize columns\n columnResizeMode: 'onChange',\n enableColumnResizing: true,\n onColumnSizingChange: setColumnSizing,\n onColumnSizingInfoChange: setColumnSizingInfo,\n\n // Rows\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n\n // Grouping\n getGroupedRowModel: grouping.length > 1 ? getGroupedRowModel() : undefined,\n onGroupingChange: handleGroupingChange,\n\n enableMultiRowSelection: rowsSelectable === 'multi' ? true : undefined,\n enableRowSelection: rowsSelectable === true ? true : undefined,\n\n onRowSelectionChange: handleRowSelectionChange,\n\n enableSorting: true,\n enableColumnPinning: true,\n\n // Debug\n debugTable: debug,\n });\n\n useEffect(() => {\n onDataSelectionChange?.(Object.keys(rowSelection).map((id) => table.getRowModel().rowsById[id].original));\n }, [onDataSelectionChange, rowSelection, table]);\n\n useEffect(() => {\n if (!pinLastRow) {\n return;\n }\n\n // Clear row pinning\n table.resetRowPinning();\n\n const rows = table.getRowModel().rows;\n rows[rows.length - 1].pin('bottom');\n }, [pinLastRow, table, data]);\n\n // Create additional expansion column if all columns have fixed width.\n const expand = false; // columns.map((column) => column.size).filter(Boolean).length === columns?.length;\n\n if (!getScrollElement) {\n log.warn('Table: getScrollElement is not set. This is required for virtualized tables.');\n }\n\n return (\n <TableProvider\n {...props}\n table={table}\n header={header}\n expand={expand}\n isGrid={role === 'grid' || role === 'treegrid'}\n >\n <TableImpl<TData> debug={false} getScrollElement={getScrollElement} {...props} />\n </TableProvider>\n );\n};\n\n/**\n * Pure implementation of table outside of context set-up.\n */\nconst TableImpl = <TData extends RowData>(props: TableProps<TData>) => {\n const { debug, classNames, getScrollElement, role, footer, grouping, fullWidth } = props;\n const { table } = useTableContext<TData>('TableImpl');\n\n const centerRows = table.getCenterRows();\n const bottomRows = table.getBottomRows();\n\n const rows = [...centerRows, ...bottomRows];\n\n if (debug) {\n return (\n <pre className='font-mono text-xs text-neutral-500 m-1 p-2 ring'>\n <code>{JSON.stringify(table.getState(), undefined, 2)}</code>\n </pre>\n );\n }\n\n const virtualisable = getScrollElement !== undefined;\n const isResizingColumn = table.getState().columnSizingInfo.isResizingColumn;\n\n return (\n <table\n role={role}\n className={tableRoot(props, classNames)}\n {...(!fullWidth && { style: { width: table.getTotalSize() } })}\n >\n <TableHead />\n\n {grouping?.length !== 0 ? (\n virtualisable ? (\n isResizingColumn ? (\n <MemoizedVirtualisedTableContent getScrollElement={getScrollElement} />\n ) : (\n <VirtualizedTableContent getScrollElement={getScrollElement} />\n )\n ) : (\n <TableBody rows={rows} />\n )\n ) : (\n <GroupedTableContent />\n )}\n\n {footer && <TableFooter />}\n </table>\n );\n};\n\nconst VirtualizedTableContent = ({\n getScrollElement,\n}: Pick<VirtualizerOptions<Element, Element>, 'getScrollElement'>) => {\n const { table } = useTableContext('VirtualizedTableContent');\n\n const centerRows = table.getCenterRows();\n const pinnedRows = table.getBottomRows();\n\n const rows = [...centerRows, ...pinnedRows];\n\n const { getTotalSize, getVirtualItems } = useVirtualizer({\n getScrollElement,\n count: rows.length,\n overscan: 8,\n estimateSize: () => 40,\n });\n\n const virtualRows = getVirtualItems();\n const totalSize = getTotalSize();\n\n const paddingTop = virtualRows.length > 0 ? virtualRows?.[0]?.start || 0 : 0;\n const paddingBottom = virtualRows.length > 0 ? totalSize - (virtualRows?.[virtualRows.length - 1]?.end || 0) : 0;\n\n return (\n <>\n {paddingTop > 0 && (\n <tbody role='none'>\n <tr role='none'>\n <td style={{ height: `${paddingTop}px` }} role='none' />\n </tr>\n </tbody>\n )}\n <TableBody rows={virtualRows.map((virtualRow) => rows[virtualRow.index])} />\n {paddingBottom > 0 && (\n <tbody role='none'>\n <tr role='none'>\n <td style={{ height: `${paddingBottom}px` }} role='none' />\n </tr>\n </tbody>\n )}\n </>\n );\n};\n\nexport const MemoizedVirtualisedTableContent = React.memo(VirtualizedTableContent);\n\nconst GroupedTableContent = () => {\n const {\n table: { getGroupedRowModel, getHeaderGroups, getState },\n debug,\n } = useTableContext('GroupedTableContent');\n return (\n <>\n {getGroupedRowModel().rows.map((row, i) => {\n return (\n <Fragment key={i}>\n {/* TODO(burdon): Customize group header renderer. */}\n <thead>\n <tr>\n {debug && <th />}\n <th\n // TODO(burdon): Calculate row span.\n colSpan={getHeaderGroups()[0].headers.length}\n className={groupTh({})}\n >\n {getState().grouping[0]}[{String(row.getGroupingValue(getState().grouping[0]))}]\n </th>\n </tr>\n </thead>\n <TableBody rows={row.subRows} />\n </Fragment>\n );\n })}\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { flexRender, type Row, type RowData } from '@tanstack/react-table';\nimport React from 'react';\n\nimport { useTableContext } from './TableContext';\nimport { tbodyTr } from '../../theme';\nimport { Cell } from '../Cell/Cell';\n\nconst TABLE_BODY_NAME = 'TableBody';\n\ntype TableBodyProps<TData extends RowData> = {\n rows: Row<TData>[];\n};\n\nconst TableBody = <TData extends RowData>({ rows }: TableBodyProps<TData>) => {\n const { table, keyAccessor, currentDatum, debug, expand, isGrid, onDatumClick } =\n useTableContext<TData>(TABLE_BODY_NAME);\n\n const rowSelection = table.getState().rowSelection;\n const domAttributes = useArrowNavigationGroup({ axis: 'grid' });\n const canBeCurrent = !isGrid && !!onDatumClick;\n\n return (\n <tbody {...(isGrid && domAttributes)}>\n {rows.map((row) => {\n const isCurrent = currentDatum === row.original;\n const isSelected = rowSelection?.[row.id];\n return (\n <tr\n key={keyAccessor ? keyAccessor(row.original) : row.id}\n className={tbodyTr({ canBeCurrent })}\n {...(isCurrent && { 'aria-current': 'location' })}\n {...(isSelected && { 'aria-selected': 'true' })}\n {...(canBeCurrent && {\n tabIndex: 0,\n onClick: () => {\n onDatumClick(row.original);\n },\n onKeyUp: ({ key }) => {\n if (key === 'Enter' || key === ' ') {\n onDatumClick(row.original);\n }\n },\n })}\n >\n {debug && <td>{row.id}</td>}\n\n {row.getVisibleCells().map((cell) => {\n return (\n <Cell key={cell.id} cell={cell}>\n {flexRender(cell.column.columnDef.cell, { className: 'pli-2', ...cell.getContext() })}\n </Cell>\n );\n })}\n\n {expand && <td />}\n </tr>\n );\n })}\n </tbody>\n );\n};\n\nTableBody.displayName = TABLE_BODY_NAME;\n\nexport { TableBody };\n\nexport type { TableBodyProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport { type RowData } from '@tanstack/react-table';\nimport { type ReactNode } from 'react';\n\nimport { type TableContextValue } from './props';\n\nexport const TABLE_NAME = 'Table';\n\ntype CreateContextResult<TData extends RowData> = Readonly<\n [TypedTableProvider<unknown>, (consumerName: string) => TableContextValue<TData>]\n>;\n\nexport type TypedTableProvider<TData extends RowData> = {\n (props: TableContextValue<TData> & { children: ReactNode }): JSX.Element;\n displayName: string;\n};\n\nconst [TableProvider, useUntypedTableContext]: CreateContextResult<unknown> =\n createContext<TableContextValue<unknown>>(TABLE_NAME);\n\nexport const useTableContext = <TData extends RowData>(consumerName: string) =>\n useUntypedTableContext(consumerName) as TableContextValue<TData>;\n\nexport { TableProvider };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type CellContext } from '@tanstack/react-table';\n\nimport { modalSurface, focusRing, ghostSelected, ghostSelectedCurrent, groupBorder, mx } from '@dxos/react-ui-theme';\nimport { type ComponentFunction } from '@dxos/react-ui-types';\n\nimport { type TableContextValue, type TableFlags } from './components';\n\nexport const currentRow = '!bg-neutral-75 !dark:bg-neutral-850';\nexport const selectedRow = '!bg-primary-100 dark:!bg-primary-700';\nexport const flushPadding = 'pli-0 plb-0';\nexport const textPadding = 'pli-2 plb-0.5';\nexport const headPadding = 'pli-2 plb-1';\n\nexport const gridCellFocusRing =\n 'focus-within:z-[11] focus-within:outline outline-2 outline-primary-500 dark:outline-primary-400';\n\n//\n// table\n//\n\nexport type TableStyleProps = Partial<TableContextValue<any>>;\n\nexport const tableRoot: ComponentFunction<TableStyleProps> = ({ fullWidth }, ...etc) =>\n mx('table-fixed', fullWidth && 'is-full', ...etc);\n\nexport const groupTh: ComponentFunction<TableStyleProps> = (_props, ...etc) =>\n mx('text-start font-medium', flushPadding, ...etc);\n\n//\n// thead\n//\n\nexport type TheadStyleProps = Partial<TableFlags>;\n\nexport const theadRoot: ComponentFunction<TheadStyleProps> = ({ header, stickyHeader }, ...etc) =>\n mx(\n header ? stickyHeader && 'sticky block-start-[--sticky-top] z-[1]' : 'collapse',\n header && 'base-surface',\n 'drop-shadow-sm',\n ...etc,\n );\n\nexport const theadTr: ComponentFunction<TheadStyleProps> = (_props, ...etc) => mx('group', ...etc);\n\nexport const theadTh: ComponentFunction<TheadStyleProps> = ({ border }, ...etc) =>\n mx(\n 'relative',\n 'text-start font-medium select-none truncate',\n headPadding,\n border && groupBorder,\n border && 'border border-t-0 border-b-0 border-neutral-200',\n ...etc,\n );\n\nexport const theadResizeRoot: ComponentFunction<{ isResizing: boolean }> = ({ isResizing }) => {\n return mx(\n 'absolute h-full w-[4px] top-0 right-0',\n 'cursor-col-resize',\n 'user-select-none',\n 'touch-action-none',\n !isResizing && 'group-hover:bg-neutral-100 dark:group-hover:bg-neutral-800',\n 'pointer-coarse:bg-neutral-100 dark:pointer-coarse:bg-neutral-800',\n isResizing && 'bg-primary-500 dark:bg-primary-400',\n );\n};\n\n//\n// tbody\n//\n\nexport type TbodyStyleProps = Partial<TableContextValue<any>>;\nexport const tbodyRoot: ComponentFunction<TbodyStyleProps> = (_props, ...etc) => mx(...etc);\n\nexport type TbodyTrStyleProps = Partial<{ canBeCurrent?: boolean }>;\nexport const tbodyTr: ComponentFunction<TbodyTrStyleProps> = ({ canBeCurrent }, ...etc) =>\n mx(\n 'group',\n canBeCurrent ? ghostSelectedCurrent : ghostSelected,\n canBeCurrent && focusRing,\n canBeCurrent && 'cursor-pointer rounded',\n ...etc,\n );\n\n//\n// td, th\n//\n\nexport const tdRoot: ComponentFunction<TbodyStyleProps> = ({ border, isGrid }, ...etc) =>\n mx('relative', flushPadding, border && 'border', border && groupBorder, isGrid && gridCellFocusRing, ...etc);\n\nexport const tdContent: ComponentFunction<CellContext<any, any>> = (_props, ...etc) => mx(...etc);\n\n//\n// tfoot\n//\n\nexport type TfootStyleProps = Partial<TableContextValue<any>>;\n\nexport const tfootRoot: ComponentFunction<TfootStyleProps> = (_props, ...etc) =>\n mx('sticky block-end-0 z-10', modalSurface, ...etc);\n\nexport const tfootTr: ComponentFunction<TfootStyleProps> = (_props, ...etc) => mx(...etc);\n\nexport const tfootTh: ComponentFunction<TfootStyleProps> = ({ border }, ...etc) =>\n mx(textPadding, modalSurface, border && groupBorder, ...etc);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { type Cell as CellType, type RowData } from '@tanstack/react-table';\nimport React, { type PropsWithChildren } from 'react';\n\nimport { tdRoot } from '../../theme';\nimport { useTableContext } from '../Table/TableContext';\n\ntype CellProps<TData extends RowData, TValue> = PropsWithChildren<{\n cell: CellType<TData, TValue>;\n}>;\n\nconst CELL_NAME = 'Cell';\n\nconst FocusableCell = <TData extends RowData, TValue>({ cell, children }: CellProps<TData, TValue>) => {\n const tableContext = useTableContext(CELL_NAME);\n const domAttributes = useFocusableGroup({ tabBehavior: 'limited' });\n\n const className = tdRoot(tableContext, cell.column.columnDef.meta?.cell?.classNames);\n\n return (\n <td tabIndex={0} {...domAttributes} className={className}>\n {children}\n </td>\n );\n};\n\nconst StaticCell = <TData extends RowData, TValue>({ cell, children }: CellProps<TData, TValue>) => {\n const tableContext = useTableContext(CELL_NAME);\n return <td className={tdRoot(tableContext, cell.column.columnDef.meta?.cell?.classNames)}>{children}</td>;\n};\n\nconst Cell = <TData extends RowData, TValue>({ cell, children }: CellProps<TData, TValue>) => {\n const { isGrid } = useTableContext(CELL_NAME);\n const Root = isGrid ? FocusableCell : StaticCell;\n return <Root cell={cell}>{children}</Root>;\n};\n\nCell.displayName = CELL_NAME;\n\nexport { Cell };\n\nexport type { CellProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { flexRender, type RowData } from '@tanstack/react-table';\nimport React from 'react';\n\nimport { useTableContext } from './TableContext';\nimport { tfootRoot, tfootTr, tfootTh } from '../../theme';\n\ntype TableFooterProps = {};\n\nconst TABLE_FOOT_NAME = 'TableFooter';\n\nconst TableFooter = <TData extends RowData>(props: TableFooterProps) => {\n const tableContext = useTableContext<TData>(TABLE_FOOT_NAME);\n const { table, expand, debug } = tableContext;\n const footers = table.getFooterGroups();\n\n return (\n <tfoot className={tfootRoot(props)}>\n {footers.map((footerGroup) => (\n <tr key={footerGroup.id} className={tfootTr(tableContext)}>\n {debug && <th />}\n\n {footerGroup.headers.map((footer) => {\n return (\n <th key={footer.id} className={tfootTh(tableContext, footer.column.columnDef.meta?.footer?.classNames)}>\n {footer.isPlaceholder ? null : flexRender(footer.column.columnDef.footer, footer.getContext())}\n </th>\n );\n })}\n\n {expand && <th />}\n </tr>\n ))}\n </tfoot>\n );\n};\n\nTableFooter.displayName = TABLE_FOOT_NAME;\n\nexport { TableFooter };\n\nexport type { TableFooterProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { flexRender, type RowData } from '@tanstack/react-table';\nimport React from 'react';\n\nimport { useTableContext } from './TableContext';\nimport { theadResizeRoot, theadRoot, theadTh, theadTr } from '../../theme';\n\nconst TABLE_HEAD_NAME = 'TableHeader';\n\ntype TableHeadProps = {};\n\nconst TableHead = <TData extends RowData>(_props: TableHeadProps) => {\n const tableContext = useTableContext<TData>(TABLE_HEAD_NAME);\n const headerGroups = tableContext.table.getHeaderGroups();\n\n return (\n <thead className={theadRoot(tableContext)}>\n {headerGroups.map((headerGroup) => {\n return (\n // Group element to hover resize handles.\n <tr key={headerGroup.id} className={theadTr(tableContext)}>\n {/* TODO(burdon): Calc. width. */}\n {tableContext.debug && (\n <th className='font-mono' style={{ width: 32 }}>\n #\n </th>\n )}\n\n {headerGroup.headers.map((header) => {\n const isResizing = header.column.getIsResizing();\n const onResize = header.getResizeHandler();\n const resizable = header.column.columnDef.meta?.resizable;\n\n return (\n <th\n key={header.id}\n style={{\n width: header.getSize(),\n }}\n className={theadTh(tableContext, header.column.columnDef.meta?.header?.classNames)}\n >\n {!header || header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n\n {/*\n * Resize handle.\n * https://codesandbox.io/p/sandbox/github/tanstack/table/tree/main/examples/react/column-sizing\n */}\n\n {resizable && (\n <div\n className={theadResizeRoot({ isResizing })}\n onDoubleClick={header.column.resetSize} // TODO(zan): How should non-pointer users reset column sizing?\n onMouseDown={onResize}\n onTouchStart={onResize}\n />\n )}\n </th>\n );\n })}\n\n {tableContext.expand && <th />}\n </tr>\n );\n })}\n </thead>\n );\n};\n\nTableHead.displayName = TABLE_HEAD_NAME;\n\nexport { TableHead };\n\nexport type { TableHeadProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CaretDown } from '@phosphor-icons/react';\nimport { type RowData } from '@tanstack/react-table';\nimport React, { useCallback, useState } from 'react';\n\nimport { Popover, useTranslation } from '@dxos/react-ui';\nimport { PopoverCombobox } from '@dxos/react-ui-searchlist';\nimport { descriptionText, getSize, mx, staticPlaceholderText } from '@dxos/react-ui-theme';\n\nimport { type SearchListQueryModel } from '../../helpers';\nimport { translationKey } from '../../translations';\n\nexport type ComboboxCellItems<TData extends RowData> = Record<string, { label: string; data: TData }>;\n\nconst initialItems = <TData extends RowData>(model: SearchListQueryModel<TData>, value?: TData) =>\n value\n ? {\n [model.getId(value)]: { label: model.getText(value), data: value },\n }\n : {};\n\nexport const CellCombobox = <TData extends RowData>({\n model,\n value,\n onValueChange,\n}: {\n model: SearchListQueryModel<TData>;\n value: TData;\n onValueChange: (value: TData) => void;\n}) => {\n const { t } = useTranslation(translationKey);\n const [items, setItems] = useState<ComboboxCellItems<TData>>(initialItems(model, value));\n const [loading, setLoading] = useState(false);\n const [searchInputValue, setSearchInputValue] = useState('');\n const handleSearchInputValueChange = async (text?: string) => {\n setSearchInputValue(text ?? '');\n setLoading(true);\n const items = await model.query(text);\n setItems(\n items.reduce(\n (acc: ComboboxCellItems<TData>, item) => {\n acc[model.getId(item)] = {\n label: model.getText(item),\n data: item,\n };\n return acc;\n },\n initialItems(model, value),\n ),\n );\n setLoading(false);\n };\n\n const handleValueChange = useCallback(\n (id: string) => {\n onValueChange(items[id]?.data);\n },\n [items, onValueChange],\n );\n\n return (\n <PopoverCombobox.Root placeholder={t('no selection label')}>\n <PopoverCombobox.Trigger variant='ghost' classNames='is-full rounded-none ring-inset'>\n {value ? (\n <>\n <span\n className={mx(\n 'font-normal text-start text-base flex-1 min-is-0 truncate mie-2',\n !value && staticPlaceholderText,\n )}\n >\n {model.getText(value)}\n </span>\n <CaretDown weight='bold' className={getSize(3)} />\n </>\n ) : null}\n </PopoverCombobox.Trigger>\n <PopoverCombobox.Content shouldFilter={false} classNames='is-[--radix-popover-trigger-width]'>\n <PopoverCombobox.Input value={searchInputValue} onValueChange={handleSearchInputValueChange} />\n <PopoverCombobox.List>\n {searchInputValue.length < 1 ? (\n <p className={mx('text-center', descriptionText)}>Start typing to search</p>\n ) : loading ? (\n <p className={mx('text-center', descriptionText)}>Searching…</p>\n ) : (\n <>\n <PopoverCombobox.Empty classNames={['text-center', descriptionText]}>No results</PopoverCombobox.Empty>\n {Object.entries(items).map(([id, { label }]) => (\n <PopoverCombobox.Item key={id} value={id} onSelect={handleValueChange} classNames='truncate'>\n {label}\n </PopoverCombobox.Item>\n ))}\n </>\n )}\n </PopoverCombobox.List>\n <Popover.Arrow />\n </PopoverCombobox.Content>\n </PopoverCombobox.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { Check, ClipboardText, type Icon, X } from '@phosphor-icons/react';\nimport {\n createColumnHelper,\n type ColumnDef,\n type ColumnMeta,\n type RowData,\n type ColumnHelper,\n type CellContext,\n} from '@tanstack/react-table';\nimport { format } from 'date-fns/format';\nimport { formatDistanceToNow } from 'date-fns/formatDistanceToNow';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { type PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { type ClassNameValue, Input, Tooltip } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { CellCombobox } from './components';\nimport { useTableContext } from './components/Table/TableContext';\nimport { textPadding } from './theme';\n\nexport type ValueUpdater<TData extends RowData, TValue> = (row: TData, id: string, value: TValue) => void;\n\nexport const createColumnBuilder = <TData extends RowData>() => ({\n helper: createColumnHelper<TData>(),\n builder: new ColumnBuilder<TData>(),\n});\n\n// TODO(thure): This interface is redundant, e.g. `classNames` == `meta.cell.classNames`\n/**\n * NOTE: Can use `meta` for custom properties.\n */\nexport type BaseColumnOptions<TData, TValue> = Partial<ColumnDef<TData, TValue>> & {\n meta?: ColumnMeta<TData, TValue>;\n label?: string;\n classNames?: ClassNameValue;\n onUpdate?: ValueUpdater<TData, TValue | undefined>;\n};\n\n// TODO(burdon): Better abstraction?\nexport type SearchListQueryModel<TData extends RowData> = {\n getId(object: TData): string;\n getText(object: TData): string;\n query(text?: string): Promise<TData[]>;\n};\n\nexport type ComboboxColumnOptions<TData extends RowData> = BaseColumnOptions<TData, any> & {\n model: SearchListQueryModel<TData>;\n};\n\nexport type StringColumnOptions<TData extends RowData> = BaseColumnOptions<TData, string> & {};\nexport type SelectRowColumnOptions<TData extends RowData> = BaseColumnOptions<TData, string> & {};\n\nexport type NumberColumnOptions<TData extends RowData> = BaseColumnOptions<TData, number> & {\n digits?: number;\n};\n\nexport type KeyColumnOptions<TData extends RowData> = BaseColumnOptions<TData, PublicKey> & {\n tooltip?: boolean;\n};\n\nexport type DateColumnOptions<TData extends RowData> = BaseColumnOptions<TData, Date> & {\n format?: string;\n relative?: boolean;\n};\n\nexport type SwitchColumnOptions<TData extends RowData> = BaseColumnOptions<TData, boolean> & {};\n\nexport type IconColumnOptions<TData extends RowData> = BaseColumnOptions<TData, boolean> & {\n on?: {\n Icon?: Icon;\n className?: string;\n };\n off?: {\n Icon?: Icon;\n className?: string;\n };\n};\n\nconst ComboboxBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, TData>) => {\n const { model, onUpdate } = cellContext.column.columnDef.meta as ColumnMeta<TData, TData>;\n return model ? (\n <CellCombobox<TData>\n model={model}\n value={cellContext.getValue()}\n onValueChange={(value) => onUpdate?.(cellContext.row.original, cellContext.column.id, value)}\n />\n ) : null;\n};\n\nconst StringBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, string>) => {\n const ref = useRef<HTMLInputElement>(null);\n const { findPrevFocusable } = useFocusFinders();\n\n const { onUpdate, cell } = cellContext.column.columnDef.meta as ColumnMeta<TData, string>;\n\n // https://tanstack.com/table/v8/docs/examples/react/editable-data\n const initialValue = cellContext.getValue();\n const [value, setValue] = useState(() => {\n // TODO(burdon): Temporary shim for automerge.\n if ((initialValue as any)?.content) {\n return (initialValue as any)?.content;\n }\n\n return initialValue;\n });\n\n const handleSave = () => {\n ref.current && document.activeElement === ref.current && findPrevFocusable(ref.current)?.focus();\n\n if (value !== initialValue) {\n onUpdate?.(cellContext.row.original, cellContext.column.id, value);\n }\n };\n\n const handleCancel = () => setValue(initialValue);\n\n let placeholder = false;\n const columns = cellContext.table.getVisibleFlatColumns();\n\n // Calling getRowModel is expensive, so only do it when we're a cell in the first position\n if (columns[0].id === cellContext.column.id) {\n const rowCount = cellContext.table.getRowModel().rows.length;\n placeholder = cellContext.row.index === rowCount - 1 && columns[0].id === cellContext.column.id;\n }\n\n // TODO(burdon): Don't render inputs unless mouse over (Show ellipsis when div)?\n return (\n <Input.Root>\n <Input.TextInput\n ref={ref}\n variant='subdued'\n placeholder={placeholder ? 'Add row...' : undefined}\n classNames={['is-full', textPadding, cell?.classNames]}\n value={value ?? ''}\n onBlur={handleSave}\n onChange={(event) => setValue(event.target.value)}\n onKeyDown={(event) => (event.key === 'Enter' && handleSave()) || (event.key === 'Escape' && handleCancel())}\n />\n </Input.Root>\n );\n};\n\nconst parseNumber = (text?: string) => (text?.trim().length ? Number(text) : NaN);\n\nconst displayNumber = (value?: number, digits?: number) =>\n value || value === 0\n ? value.toLocaleString(undefined, {\n minimumFractionDigits: digits ?? 0,\n maximumFractionDigits: digits ?? 2,\n })\n : '';\n\nconst NumberBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, number>) => {\n const { onUpdate, digits } = cellContext.column.columnDef.meta as ColumnMeta<TData, string>;\n const value = cellContext.getValue();\n const [text, setText] = useState<string>(displayNumber(value, digits));\n const { findPrevFocusable } = useFocusFinders();\n const ref = useRef<HTMLInputElement | null>(null);\n\n // Update display value if `digits` changes and input is not in focus.\n useEffect(() => {\n (!document.activeElement || document.activeElement !== ref.current) && setText(displayNumber(value, digits));\n }, [digits, value]);\n\n const handleEdit = () => setText(value !== undefined ? String(value) : '');\n\n // TODO(burdon): Property is encoded as float (e.g., 6.1 => 6.099)\n const handleSave = () => {\n const nextValue = parseNumber(text);\n\n if (!isNaN(nextValue)) {\n onUpdate?.(cellContext.row.original, cellContext.column.id, nextValue);\n setText(displayNumber(nextValue, digits));\n } else {\n // Reset the text to display the original value without updating the model.\n setText(displayNumber(value, digits));\n }\n\n // Shift focus only if input is focused on save (e.g. on `Enter`).\n ref.current && document.activeElement === ref.current && findPrevFocusable(ref.current)?.focus();\n };\n\n const _handleCancel = () => {\n setText(displayNumber(value, digits));\n ref.current && findPrevFocusable(ref.current)?.focus();\n };\n\n return (\n <Input.Root>\n <Input.TextInput\n ref={ref}\n variant='subdued'\n value={text}\n classNames={['is-full text-end font-mono', textPadding]}\n onBlur={handleSave}\n onFocus={handleEdit}\n onChange={({ target: { value } }) => setText(value)}\n onKeyDown={(event) => {\n // TODO(thure): `Escape` is reserved for blurring the input and moving focus to the cell\n return /* (event.key === 'Escape' && handleCancel()) || */ event.key === 'Enter' && handleSave();\n }}\n />\n </Input.Root>\n );\n};\n\nconst RowSelectorBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, unknown>) => {\n const { cell } = cellContext.column.columnDef.meta as ColumnMeta<TData, unknown>;\n const { row } = cellContext;\n\n const checked = row.getCanSelect()\n ? row.getIsSelected()\n : row.getCanSelectSubRows() && (row.getIsSomeSelected() ? 'indeterminate' : row.getIsAllSubRowsSelected());\n\n return (\n <div className='flex justify-center w-full h-full' role='presentation'>\n <Input.Root>\n <Input.Checkbox\n size={4}\n classNames={[cell?.classNames]}\n checked={checked}\n onCheckedChange={(event) => {\n if (row.getCanSelect()) {\n row.getToggleSelectedHandler()(event);\n }\n }}\n disabled={!(row.getCanSelect() || row.getCanSelectSubRows())}\n />\n </Input.Root>\n </div>\n );\n};\n\nconst SwitchBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, boolean>) => {\n const { onUpdate } = cellContext.column.columnDef.meta as ColumnMeta<TData, boolean>;\n const value = cellContext.getValue();\n return (\n <Input.Root>\n <Input.Switch\n classNames='block mli-auto'\n onClick={(event) => event.stopPropagation()}\n disabled={!onUpdate}\n checked={!!value}\n onCheckedChange={(value) => {\n onUpdate?.(cellContext.row.original, cellContext.column.id, !!value);\n }}\n />\n </Input.Root>\n );\n};\n\n/**\n * Util to create column definitions.\n */\nexport class ColumnBuilder<TData extends RowData> {\n /**\n * Combobox value\n */\n combobox({\n label,\n classNames,\n model,\n onUpdate,\n ...props\n }: ComboboxColumnOptions<TData>): Partial<ColumnDef<TData, any>> {\n return {\n minSize: 100,\n header: (column) => {\n return label ?? column.header.id;\n },\n cell:\n model && onUpdate\n ? ComboboxBuilderCell\n : (cellContext) => {\n const cellValue = cellContext.getValue();\n return <div className={mx('truncate', classNames)}>{cellValue ? model?.getText(cellValue) : ''}</div>;\n },\n ...props,\n meta: {\n ...props.meta,\n model,\n onUpdate,\n cell: { classNames, ...props.meta?.cell },\n },\n };\n }\n\n /**\n * String formats.\n */\n string({ label, classNames, onUpdate, ...props }: StringColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, string>\n > {\n return {\n minSize: 100,\n // TODO(burdon): Default.\n header: (column) => {\n return label ?? column.header.id;\n },\n cell: onUpdate\n ? StringBuilderCell\n : (cell) => {\n let value = cell.getValue();\n // TODO(burdon): Hack to support automerge.\n if (typeof value === 'object' && (value as any)?.__typename === 'dxos.Text.v0') {\n value = (value as any).content;\n }\n\n return <div className={mx('truncate', textPadding, classNames)}>{value}</div>;\n },\n ...props,\n meta: {\n ...props.meta,\n onUpdate,\n cell: { ...props.meta?.cell, classNames },\n },\n };\n }\n\n /**\n * Number formats.\n */\n number({ label, minSize, classNames, digits, onUpdate, ...props }: NumberColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, number>\n > {\n return {\n size: 100,\n minSize: 100,\n header: (cell) => label ?? cell.header.id,\n cell: NumberBuilderCell,\n ...props,\n meta: {\n ...props.meta,\n onUpdate,\n digits,\n header: { classNames: 'text-end', ...props.meta?.header },\n cell: { ...props.meta?.cell, classNames },\n },\n };\n }\n\n /**\n * Date formats.\n */\n // TODO(burdon): Date picker (pluggable renderers?)\n date({ label, format: formatSpec, relative, classNames, ...props }: DateColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, Date>\n > {\n return {\n size: 220, // TODO(burdon): Depends on format.\n minSize: 100,\n header: (cell) => label ?? cell.header.id,\n cell: (cell) => {\n const value = cell.getValue();\n\n try {\n const str = value\n ? formatSpec\n ? format(value, formatSpec)\n : relative\n ? formatDistanceToNow(value, { addSuffix: true })\n : value.toISOString()\n : undefined;\n\n return <div className={mx(textPadding, classNames)}>{str}</div>;\n } catch (err) {\n log.info('formatError', { value });\n return null;\n }\n },\n ...props,\n meta: { ...props.meta, cell: { ...props.meta?.cell, classNames } },\n };\n }\n\n /**\n * PublicKey with tooltip.\n */\n key({ label, tooltip, classNames, ...props }: KeyColumnOptions<TData> = {}): Partial<ColumnDef<TData, PublicKey>> {\n return {\n size: 94,\n minSize: 94,\n header: (cell) => label ?? cell.header.id,\n cell: (cell) => {\n const value = cell.getValue();\n if (!value) {\n return;\n }\n\n // TODO(burdon): Factor out styles.\n const element = value.truncate();\n if (!tooltip) {\n return element;\n }\n\n return (\n <Tooltip.Provider>\n <Tooltip.Root>\n <Tooltip.Trigger>{element}</Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='right'>\n <Tooltip.Arrow />\n <ClipboardText\n onClick={(ev) => {\n ev.stopPropagation(); // Prevent select row.\n void navigator.clipboard.writeText(value.toHex());\n }}\n />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </Tooltip.Provider>\n );\n },\n ...props,\n meta: { ...props.meta, cell: { ...props.meta?.cell, classNames: ['font-mono', textPadding, classNames] } },\n };\n }\n\n /**\n * Row selector\n */\n selectRow({ classNames, onUpdate, id = 'selectRow' }: SelectRowColumnOptions<TData> = {}): Parameters<\n ColumnHelper<TData>['display']\n >[0] {\n return {\n id,\n size: 32,\n enableResizing: false,\n meta: { onUpdate, cell: { classNames } },\n header: ({ table }) => {\n const { rowsSelectable } = useTableContext('HELPER_SELECT_ROW_HEADER_CELL');\n const checked = table.getIsSomeRowsSelected() ? 'indeterminate' : table.getIsAllRowsSelected();\n return rowsSelectable === 'multi' ? (\n <div className='flex justify-center w-full h-full' role='presentation'>\n <Input.Root>\n <Input.Checkbox\n size={4}\n classNames={['mli-auto', classNames]}\n checked={checked}\n onCheckedChange={() => table.toggleAllRowsSelected()}\n />\n </Input.Root>\n </div>\n ) : null;\n },\n cell: RowSelectorBuilderCell,\n };\n }\n\n /**\n * Switch\n */\n switch({ label, classNames, onUpdate, ...props }: SwitchColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, boolean>\n > {\n return {\n size: 50,\n minSize: 50,\n header: (column) => label ?? column.header.id,\n // TODO(Zan): Implement sort algorithm\n enableSorting: true,\n cell: SwitchBuilderCell,\n ...props,\n meta: { ...props.meta, onUpdate, cell: { ...props.meta?.cell, classNames: [textPadding, classNames] } },\n };\n }\n\n /**\n * Icon based on boolean value.\n */\n icon({ label, size, on, off, ...props }: IconColumnOptions<TData> = {}): Partial<ColumnDef<TData, boolean>> {\n const IconOn = on?.Icon ?? Check;\n const IconOff = off?.Icon ?? X;\n return {\n size: size ?? 32,\n // TODO(Zan): Implement sort algorithm\n enableSorting: false,\n header: (column) => <div className={'justify-center'}>{label ?? column.header.id}</div>,\n cell: (cell) => {\n const value = cell.getValue();\n if (value) {\n return <IconOn className={mx('block mli-auto', getSize(6), on?.className ?? 'text-green-700')} />;\n } else if (value === false) {\n return <IconOff className={mx('block mli-auto', getSize(6), off?.className ?? 'text-red-700')} />;\n } else {\n return null;\n }\n },\n ...props,\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Check", "Trash", "X", "GearSix", "React", "useRef", "useState", "Button", "DensityProvider", "Input", "Popover", "Select", "Separator", "useTranslation", "getSize", "mx", "safeParseInt", "CaretUpDown", "SortAscending", "SortDescending", "React", "Button", "getSize", "SortButton", "sortDirection", "onClick", "icon", "size", "getSize", "SortAscending", "className", "SortDescending", "CaretUpDown", "Button", "variant", "translationKey", "ColumnMenu", "column", "props", "title", "label", "length", "id", "header", "context", "canSort", "getCanSort", "sortDirection", "getIsSorted", "toggleSort", "getToggleSortingHandler", "React", "div", "className", "SortButton", "onClick", "ColumnPanel", "Section", "children", "role", "mx", "tableDefs", "tableDef", "onUpdate", "onDelete", "open", "setOpen", "useState", "prop", "setProp", "refTable", "setRefTable", "refProp", "setRefProp", "type", "setType", "String", "setLabel", "digits", "setDigits", "propRef", "useRef", "t", "useTranslation", "translationKey", "handleCancel", "handleSave", "match", "current", "focus", "columns", "find", "c", "safeParseInt", "Popover", "Root", "onOpenChange", "nextOpen", "Trigger", "asChild", "Button", "variant", "GearSix", "getSize", "Portal", "Content", "Viewport", "classNames", "DensityProvider", "density", "Input", "Label", "TextInput", "placeholder", "value", "onChange", "event", "target", "autoFocus", "ref", "replace", "Select", "onValueChange", "TriggerButton", "map", "Option", "key", "filter", "name", "Separator", "span", "Check", "ns", "X", "Trash", "Arrow", "useControllableState", "getCoreRowModel", "getSortedRowModel", "useReactTable", "getGroupedRowModel", "getExpandedRowModel", "useVirtualizer", "React", "Fragment", "useCallback", "useEffect", "useState", "log", "useDefaultValue", "useOnTransition", "useArrowNavigationGroup", "flexRender", "React", "createContext", "TABLE_NAME", "TableProvider", "useUntypedTableContext", "createContext", "useTableContext", "consumerName", "modalSurface", "focusRing", "ghostSelected", "ghostSelectedCurrent", "groupBorder", "mx", "currentRow", "selectedRow", "flushPadding", "textPadding", "headPadding", "gridCellFocusRing", "tableRoot", "fullWidth", "etc", "mx", "groupTh", "_props", "theadRoot", "header", "stickyHeader", "theadTr", "theadTh", "border", "groupBorder", "theadResizeRoot", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Check, Trash, X, GearSix } from '@phosphor-icons/react';\nimport { type HeaderContext, type RowData } from '@tanstack/react-table';\nimport React, { type FC, type PropsWithChildren, useRef, useState } from 'react';\n\nimport { Button, DensityProvider, Input, Popover, Select, Separator, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\nimport { safeParseInt } from '@dxos/util';\n\nimport { SortButton } from './SortButton';\nimport { type TableDef, type ColumnProps, type ColumnType } from '../schema';\nimport { translationKey } from '../translations';\n\nexport type ColumnMenuProps<TData extends RowData, TValue> = {\n context: HeaderContext<TData, TValue>;\n tableDefs: TableDef[];\n tableDef: TableDef;\n column: ColumnProps;\n onUpdate?: (id: string, column: ColumnProps) => void;\n onDelete?: (id: string) => void;\n};\n\nexport const ColumnMenu = <TData extends RowData, TValue>({ column, ...props }: ColumnMenuProps<TData, TValue>) => {\n const title = column.label?.length ? column.label : column.id;\n\n const header = props.context.header;\n\n const canSort = header.column.getCanSort();\n const sortDirection = header.column.getIsSorted();\n const toggleSort = header.column.getToggleSortingHandler();\n\n return (\n <div className='flex items-center gap-2'>\n <div className='flex-1 min-is-0 truncate' title={title}>\n {title}\n </div>\n <div className='flex gap-0'>\n {canSort && toggleSort && <SortButton sortDirection={sortDirection} onClick={toggleSort} />}\n <ColumnPanel {...props} column={column} />\n </div>\n </div>\n );\n};\n\nconst Section: FC<PropsWithChildren & { className?: string }> = ({ children, className }) => (\n <div role='none' className={mx('p-2', className)}>\n {children}\n </div>\n);\n\nexport const ColumnPanel = <TData extends RowData, TValue>({\n context,\n tableDefs,\n tableDef,\n column,\n onUpdate,\n onDelete,\n}: ColumnMenuProps<TData, TValue>) => {\n const [open, setOpen] = useState(false);\n const [prop, setProp] = useState(column.id);\n const [refTable, setRefTable] = useState(column.refTable);\n const [refProp, setRefProp] = useState(column.refProp);\n const [type, setType] = useState(String(column.type));\n const [label, setLabel] = useState(column.label);\n const [digits, setDigits] = useState(String(column.digits ?? '0'));\n const propRef = useRef<HTMLInputElement>(null);\n const { t } = useTranslation(translationKey);\n\n const handleCancel = () => {\n setProp(column.id);\n setOpen(false);\n };\n\n const handleSave = () => {\n // Check valid.\n if (!prop.length || !prop.match(/^[a-zA-Z_].+/i)) {\n propRef.current?.focus();\n return;\n }\n\n // If already exists then check same type.\n const current = tableDef.columns.find((c) => c.id !== column.id && c.id === prop);\n if (current) {\n // TODO(burdon): Allow multiple columns with different refProps. Ensure correct table prop is updated.\n if (current.type !== 'ref' /* || current.ref !== refTable */) {\n // TODO(burdon): Show error.\n propRef.current?.focus();\n return;\n }\n }\n\n onUpdate?.(prop, {\n id: prop, // TODO(burdon): Make unique.\n prop,\n label,\n type: type as ColumnProps['type'],\n refTable,\n refProp,\n digits: safeParseInt(digits),\n });\n\n setOpen(false);\n };\n\n return (\n <Popover.Root open={open} onOpenChange={(nextOpen) => setOpen(nextOpen)}>\n <Popover.Trigger asChild>\n <Button variant='ghost'>\n <GearSix className={mx(getSize(4), 'rotate-90')} />\n </Button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content>\n <Popover.Viewport classNames='w-60'>\n <DensityProvider density='fine'>\n <div className='flex flex-col gap-1'>\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1'>{t('column label label')}</Input.Label>\n <Input.TextInput\n placeholder='Column label'\n value={label ?? ''}\n onChange={(event) => setLabel(event.target.value)}\n autoFocus\n />\n </Input.Root>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('property key label')}</Input.Label>\n <Input.TextInput\n ref={propRef}\n placeholder='Property key'\n // TODO(burdon): Provide hooks for value normalization, ENTER, ESC, etc.\n value={prop ?? ''}\n onChange={(event) => setProp(event.target.value.replace(/[^\\w_]/g, ''))}\n />\n </Input.Root>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('column type label')}</Input.Label>\n <Select.Root value={type} onValueChange={setType}>\n <Select.TriggerButton placeholder='Type' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {(['number', 'boolean', 'string', 'ref'] as ColumnType[]).map((type) => (\n <Select.Option key={type} value={type}>\n {t(`${type} column type label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n </Section>\n\n {type === 'number' && (\n <>\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('digits label')}</Input.Label>\n {/* TODO(burdon): Constrain input to numbers. */}\n <Input.TextInput value={digits ?? ''} onChange={(event) => setDigits(event.target.value)} />\n </Input.Root>\n </Section>\n </>\n )}\n\n {/* TODO(burdon): Selectors on same line. */}\n {type === 'ref' && (\n <>\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>Table</Input.Label>\n <Select.Root value={refTable} onValueChange={setRefTable}>\n <Select.TriggerButton placeholder='Table' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {tableDefs\n .filter((t) => t.id !== tableDef.id)\n .map(({ id, name }) => (\n <Select.Option key={id} value={id}>\n {name ?? id}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n\n {refTable && (\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>Table property</Input.Label>\n <Select.Root value={refProp} onValueChange={setRefProp}>\n <Select.TriggerButton placeholder='Property' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {tableDefs\n .find((tableDef) => tableDef.id === refTable)\n ?.columns.map(({ id, label }) => (\n <Select.Option key={id} value={id}>\n {label ?? id}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n )}\n </Section>\n </>\n )}\n\n <Separator classNames='mli-2' />\n\n <Section className='space-b-1.5'>\n {/* TODO(burdon): Style as DropdownMenuItem. */}\n <Button variant='primary' classNames='is-full flex gap-2' onClick={handleSave}>\n <span>{t('save label')}</span>\n <div className='grow' />\n <Check className={getSize(5)} />\n </Button>\n <Button classNames='is-full flex gap-2' onClick={handleCancel}>\n <span>{t('cancel label', { ns: 'os' })}</span>\n <div className='grow' />\n <X className={getSize(5)} />\n </Button>\n <Button classNames='is-full flex gap-2' onClick={() => onDelete?.(column.id)}>\n <span>{t('delete label')}</span>\n <div className='grow' />\n <Trash className={getSize(5)} />\n </Button>\n </Section>\n </div>\n </DensityProvider>\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { CaretUpDown, SortAscending, SortDescending } from '@phosphor-icons/react';\nimport { type SortDirection } from '@tanstack/react-table';\nimport React, { type ReactElement } from 'react';\n\nimport { Button } from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\ntype SortButtonProps = { sortDirection: false | SortDirection; onClick: (e: any) => void };\n\nexport const SortButton = ({ sortDirection, onClick }: SortButtonProps) => {\n let icon: ReactElement;\n const size = getSize(4);\n\n switch (sortDirection) {\n case 'asc':\n icon = <SortAscending className={size} />;\n break;\n case 'desc':\n icon = <SortDescending className={size} />;\n break;\n default:\n icon = <CaretUpDown className={size} />;\n }\n\n return (\n <Button variant='ghost' onClick={onClick}>\n {icon}\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const translationKey = 'table';\n\nexport default [\n {\n 'en-US': {\n [translationKey]: {\n 'no selection label': ' ',\n 'number column type label': 'Number',\n 'boolean column type label': 'Toggle',\n 'date column type label': 'Date',\n 'string column type label': 'Text',\n 'ref column type label': 'Reference',\n 'digits label': 'Decimal places',\n 'save label': 'Save',\n 'delete label': 'Delete',\n 'column label label': 'Label',\n 'property key label': 'Property',\n 'column type label': 'Type',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport {\n getCoreRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnSizingInfoState,\n type GroupingState,\n type RowData,\n type ColumnSizingState,\n type OnChangeFn,\n type RowSelectionState,\n getGroupedRowModel,\n getExpandedRowModel,\n} from '@tanstack/react-table';\nimport { useVirtualizer, type VirtualizerOptions } from '@tanstack/react-virtual';\nimport React, { Fragment, useCallback, useEffect, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useDefaultValue, useOnTransition } from '@dxos/react-ui';\n\nimport { TableBody } from './TableBody';\nimport { TableProvider as UntypedTableProvider, type TypedTableProvider, useTableContext } from './TableContext';\nimport { TableFooter } from './TableFooter';\nimport { TableHead } from './TableHead';\nimport { type TableProps } from './props';\nimport { groupTh, tableRoot } from '../../theme';\n\nexport const Table = <TData extends RowData>(props: TableProps<TData>) => {\n const {\n role,\n onColumnResize,\n columnVisibility,\n header = true,\n rowsSelectable,\n debug,\n onDataSelectionChange,\n getScrollElement,\n pinLastRow,\n } = props;\n\n const columns = useDefaultValue(props.columns, []);\n const data = useDefaultValue(props.data, []);\n\n const TableProvider = UntypedTableProvider as TypedTableProvider<TData>;\n\n const [columnsInitialised, setColumnsInitialised] = useState(false);\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>({});\n\n useEffect(() => {\n if (columnsInitialised) {\n return;\n }\n\n setColumnSizing(\n columns\n .filter((column) => !!column.size && (column as any).prop !== undefined)\n .reduce<ColumnSizingState>((state, column) => {\n state[(column as any).prop] = column.size!;\n return state;\n }, {}),\n );\n\n setColumnsInitialised(true);\n }, [columns, setColumnSizing]);\n\n const [columnSizingInfo, setColumnSizingInfo] = useState<ColumnSizingInfoState>({} as ColumnSizingInfoState);\n\n // Notify on column resize.\n const notifyColumnResize = useCallback(() => onColumnResize?.(columnSizing), [onColumnResize, columnSizing]);\n useOnTransition(columnSizingInfo.isResizingColumn, (v) => typeof v === 'string', false, notifyColumnResize);\n\n const [rowSelection = {}, setRowSelection] = useControllableState({\n prop: props.rowSelection,\n onChange: props.onRowSelectionChange,\n defaultProp: props.defaultRowSelection,\n });\n\n // TODO(thure): Does @tanstack/react-table really need this intervention? It did seem necessary to enforce single-selection...\n const handleRowSelectionChange = useCallback<OnChangeFn<RowSelectionState>>(\n (updaterOrValue) => {\n const nextRowSelection = typeof updaterOrValue === 'function' ? updaterOrValue(rowSelection) : updaterOrValue;\n if (rowsSelectable === 'multi') {\n setRowSelection(nextRowSelection);\n } else if (rowsSelectable) {\n const nextRowSelectionKey = Object.keys(nextRowSelection).filter((id) => !rowSelection[id])[0];\n setRowSelection(nextRowSelectionKey ? { [nextRowSelectionKey]: true } : {});\n } else {\n setRowSelection({});\n }\n },\n [rowsSelectable, setRowSelection, rowSelection],\n );\n\n const [grouping, handleGroupingChange] = useState<GroupingState>(props.grouping ?? []);\n useEffect(() => handleGroupingChange(props.grouping ?? []), [handleGroupingChange, props.grouping]);\n\n const table = useReactTable({\n // Data\n meta: {},\n data,\n\n // Columns\n columns,\n defaultColumn: {\n size: 256, // Required in order remove default width.\n maxSize: 1024,\n },\n\n // State\n state: {\n columnVisibility,\n columnSizing,\n columnSizingInfo,\n rowSelection,\n grouping,\n },\n\n // Resize columns\n columnResizeMode: 'onChange',\n enableColumnResizing: true,\n onColumnSizingChange: setColumnSizing,\n onColumnSizingInfoChange: setColumnSizingInfo,\n\n // Rows\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n\n // Grouping\n getGroupedRowModel: grouping.length > 1 ? getGroupedRowModel() : undefined,\n onGroupingChange: handleGroupingChange,\n\n enableMultiRowSelection: rowsSelectable === 'multi' ? true : undefined,\n enableRowSelection: rowsSelectable === true ? true : undefined,\n\n onRowSelectionChange: handleRowSelectionChange,\n\n enableSorting: true,\n enableColumnPinning: true,\n\n // Debug\n debugTable: debug,\n });\n\n useEffect(() => {\n onDataSelectionChange?.(Object.keys(rowSelection).map((id) => table.getRowModel().rowsById[id].original));\n }, [onDataSelectionChange, rowSelection, table]);\n\n useEffect(() => {\n if (!pinLastRow) {\n return;\n }\n\n // Clear row pinning\n table.resetRowPinning();\n\n const rows = table.getRowModel().rows;\n rows[rows.length - 1].pin('bottom');\n }, [pinLastRow, table, data]);\n\n // Create additional expansion column if all columns have fixed width.\n const expand = false; // columns.map((column) => column.size).filter(Boolean).length === columns?.length;\n\n if (!getScrollElement) {\n log.warn('Table: getScrollElement is not set. This is required for virtualized tables.');\n }\n\n return (\n <TableProvider\n {...props}\n table={table}\n header={header}\n expand={expand}\n isGrid={role === 'grid' || role === 'treegrid'}\n >\n <TableImpl<TData> debug={false} getScrollElement={getScrollElement} {...props} />\n </TableProvider>\n );\n};\n\n/**\n * Pure implementation of table outside of context set-up.\n */\nconst TableImpl = <TData extends RowData>(props: TableProps<TData>) => {\n const { debug, classNames, getScrollElement, role, footer, grouping, fullWidth } = props;\n const { table } = useTableContext<TData>('TableImpl');\n\n const centerRows = table.getCenterRows();\n const bottomRows = table.getBottomRows();\n\n const rows = [...centerRows, ...bottomRows];\n\n if (debug) {\n return (\n <pre className='font-mono text-xs text-neutral-500 m-1 p-2 ring'>\n <code>{JSON.stringify(table.getState(), undefined, 2)}</code>\n </pre>\n );\n }\n\n const isResizingColumn = table.getState().columnSizingInfo.isResizingColumn;\n\n return (\n <table\n role={role}\n className={tableRoot(props, classNames)}\n {...(!fullWidth && { style: { width: table.getTotalSize() } })}\n >\n <TableHead />\n\n {grouping?.length !== 0 ? (\n getScrollElement ? (\n isResizingColumn ? (\n <MemoizedVirtualisedTableContent getScrollElement={getScrollElement} />\n ) : (\n <VirtualizedTableContent getScrollElement={getScrollElement} />\n )\n ) : (\n <TableBody rows={rows} />\n )\n ) : (\n <GroupedTableContent />\n )}\n\n {footer && <TableFooter />}\n </table>\n );\n};\n\nconst VirtualizedTableContent = ({\n getScrollElement,\n}: Pick<VirtualizerOptions<Element, Element>, 'getScrollElement'>) => {\n const { table } = useTableContext('VirtualizedTableContent');\n\n const centerRows = table.getCenterRows();\n const pinnedRows = table.getBottomRows();\n\n const rows = [...centerRows, ...pinnedRows];\n\n const { getTotalSize, getVirtualItems } = useVirtualizer({\n getScrollElement,\n count: rows.length,\n overscan: 4,\n estimateSize: () => 33,\n });\n\n const virtualRows = getVirtualItems();\n const totalSize = getTotalSize();\n\n const paddingTop = virtualRows.length > 0 ? virtualRows?.[0]?.start || 0 : 0;\n const paddingBottom = virtualRows.length > 0 ? totalSize - (virtualRows?.[virtualRows.length - 1]?.end || 0) : 0;\n\n return (\n <>\n {paddingTop > 0 && (\n <tbody role='none'>\n <tr role='none'>\n <td style={{ height: `${paddingTop}px` }} role='none' />\n </tr>\n </tbody>\n )}\n <TableBody rows={virtualRows.map((virtualRow) => rows[virtualRow.index])} />\n {paddingBottom > 0 && (\n <tbody role='none'>\n <tr role='none'>\n <td style={{ height: `${paddingBottom}px` }} role='none' />\n </tr>\n </tbody>\n )}\n </>\n );\n};\n\nexport const MemoizedVirtualisedTableContent = React.memo(VirtualizedTableContent) as typeof VirtualizedTableContent;\n\nconst GroupedTableContent = () => {\n const {\n table: { getGroupedRowModel, getHeaderGroups, getState },\n debug,\n } = useTableContext('GroupedTableContent');\n return (\n <>\n {getGroupedRowModel().rows.map((row, i) => {\n return (\n <Fragment key={i}>\n {/* TODO(burdon): Customize group header renderer. */}\n <thead>\n <tr>\n {debug && <th />}\n <th\n // TODO(burdon): Calculate row span.\n colSpan={getHeaderGroups()[0].headers.length}\n className={groupTh({})}\n >\n {getState().grouping[0]}[{String(row.getGroupingValue(getState().grouping[0]))}]\n </th>\n </tr>\n </thead>\n <TableBody rows={row.subRows} />\n </Fragment>\n );\n })}\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { flexRender, type Row, type RowData } from '@tanstack/react-table';\nimport React from 'react';\n\nimport { useTableContext } from './TableContext';\nimport { tbodyTr } from '../../theme';\nimport { Cell } from '../Cell/Cell';\n\nconst TABLE_BODY_NAME = 'TableBody';\n\ntype TableBodyProps<TData extends RowData> = {\n rows: Row<TData>[];\n};\n\nconst TableBody = <TData extends RowData>({ rows }: TableBodyProps<TData>) => {\n const { table, keyAccessor, currentDatum, debug, expand, isGrid, onDatumClick } =\n useTableContext<TData>(TABLE_BODY_NAME);\n\n const rowSelection = table.getState().rowSelection;\n const domAttributes = useArrowNavigationGroup({ axis: 'grid' });\n const canBeCurrent = !isGrid && !!onDatumClick;\n\n return (\n <tbody {...(isGrid && domAttributes)}>\n {rows.map((row) => {\n const isCurrent = currentDatum === row.original;\n const isSelected = rowSelection?.[row.id];\n return (\n <tr\n key={keyAccessor ? keyAccessor(row.original) : row.id}\n className={tbodyTr({ canBeCurrent })}\n {...(isCurrent && { 'aria-current': 'location' })}\n {...(isSelected && { 'aria-selected': 'true' })}\n {...(canBeCurrent && {\n tabIndex: 0,\n onClick: () => {\n onDatumClick(row.original);\n },\n onKeyUp: ({ key }) => {\n if (key === 'Enter' || key === ' ') {\n onDatumClick(row.original);\n }\n },\n })}\n >\n {debug && <td>{row.id}</td>}\n\n {row.getVisibleCells().map((cell) => {\n return (\n <Cell key={cell.id} cell={cell}>\n {flexRender(cell.column.columnDef.cell, { className: 'pli-2', ...cell.getContext() })}\n </Cell>\n );\n })}\n\n {expand && <td />}\n </tr>\n );\n })}\n </tbody>\n );\n};\n\nTableBody.displayName = TABLE_BODY_NAME;\n\nexport { TableBody };\n\nexport type { TableBodyProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport { type RowData } from '@tanstack/react-table';\nimport { type ReactNode } from 'react';\n\nimport { type TableContextValue } from './props';\n\nexport const TABLE_NAME = 'Table';\n\ntype CreateContextResult<TData extends RowData> = Readonly<\n [TypedTableProvider<unknown>, (consumerName: string) => TableContextValue<TData>]\n>;\n\nexport type TypedTableProvider<TData extends RowData> = {\n (props: TableContextValue<TData> & { children: ReactNode }): JSX.Element;\n displayName: string;\n};\n\nconst [TableProvider, useUntypedTableContext]: CreateContextResult<unknown> =\n createContext<TableContextValue<unknown>>(TABLE_NAME);\n\nexport const useTableContext = <TData extends RowData>(consumerName: string) =>\n useUntypedTableContext(consumerName) as TableContextValue<TData>;\n\nexport { TableProvider };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type CellContext } from '@tanstack/react-table';\n\nimport {\n modalSurface,\n fixedSurface,\n focusRing,\n ghostSelected,\n ghostSelectedCurrent,\n groupBorder,\n mx,\n} from '@dxos/react-ui-theme';\nimport { type ComponentFunction } from '@dxos/react-ui-types';\n\nimport { type TableContextValue, type TableFlags } from './components';\n\nexport const currentRow = '!bg-neutral-75 !dark:bg-neutral-850';\nexport const selectedRow = '!bg-primary-100 dark:!bg-primary-700';\nexport const flushPadding = 'pli-0 plb-0';\nexport const textPadding = 'pli-2 plb-0.5';\nexport const headPadding = 'pli-2 plb-1.5';\n\nexport const gridCellFocusRing =\n 'focus-within:z-[11] focus-within:outline outline-2 outline-primary-500 dark:outline-primary-400';\n\n//\n// table\n//\n\nexport type TableStyleProps = Partial<TableContextValue<any>>;\n\nexport const tableRoot: ComponentFunction<TableStyleProps> = ({ fullWidth }, ...etc) =>\n mx('table-fixed', fullWidth && 'is-full', ...etc);\n\nexport const groupTh: ComponentFunction<TableStyleProps> = (_props, ...etc) =>\n mx('text-start font-medium', flushPadding, ...etc);\n\n//\n// thead\n//\n\nexport type TheadStyleProps = Partial<TableFlags>;\n\nexport const theadRoot: ComponentFunction<TheadStyleProps> = ({ header, stickyHeader }, ...etc) =>\n mx(header ? stickyHeader && 'sticky block-start-[--sticky-top] z-[1]' : 'collapse', header && fixedSurface, ...etc);\n\nexport const theadTr: ComponentFunction<TheadStyleProps> = (_props, ...etc) => mx('group', ...etc);\n\nexport const theadTh: ComponentFunction<TheadStyleProps> = ({ border }, ...etc) =>\n mx(\n 'relative text-start font-medium select-none truncate',\n headPadding,\n border && 'border',\n border && groupBorder,\n ...etc,\n );\n\nexport const theadResizeRoot: ComponentFunction<TheadStyleProps> = (_props, ...etc) =>\n mx(\n 'absolute top-0 pis-1 h-full z-[10] w-[7px] -right-[5px] cursor-col-resize select-none touch-none opacity-20 hover:opacity-100',\n ...etc,\n );\n\nexport const theadResizeThumb: ComponentFunction<TheadStyleProps> = (_props, ...etc) =>\n mx('flex group-hover:bg-neutral-700 -ml-[2px] w-[1px] h-full', ...etc);\n\n//\n// tbody\n//\n\nexport type TbodyStyleProps = Partial<TableContextValue<any>>;\nexport const tbodyRoot: ComponentFunction<TbodyStyleProps> = (_props, ...etc) => mx(...etc);\n\nexport type TbodyTrStyleProps = Partial<{ canBeCurrent?: boolean }>;\nexport const tbodyTr: ComponentFunction<TbodyTrStyleProps> = ({ canBeCurrent }, ...etc) =>\n mx(\n 'group',\n canBeCurrent ? ghostSelectedCurrent : ghostSelected,\n canBeCurrent && focusRing,\n canBeCurrent && 'cursor-pointer rounded',\n ...etc,\n );\n\n//\n// td, th\n//\n\nexport const tdRoot: ComponentFunction<TbodyStyleProps> = ({ border, isGrid }, ...etc) =>\n mx('relative', flushPadding, border && 'border', border && groupBorder, isGrid && gridCellFocusRing, ...etc);\n\nexport const tdContent: ComponentFunction<CellContext<any, any>> = (_props, ...etc) => mx(...etc);\n\n//\n// tfoot\n//\n\nexport type TfootStyleProps = Partial<TableContextValue<any>>;\n\nexport const tfootRoot: ComponentFunction<TfootStyleProps> = (_props, ...etc) =>\n mx('sticky block-end-0 z-10', modalSurface, ...etc);\n\nexport const tfootTr: ComponentFunction<TfootStyleProps> = (_props, ...etc) => mx(...etc);\n\nexport const tfootTh: ComponentFunction<TfootStyleProps> = ({ border }, ...etc) =>\n mx(textPadding, modalSurface, border && groupBorder, ...etc);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { type Cell as CellType, type RowData } from '@tanstack/react-table';\nimport React, { type PropsWithChildren } from 'react';\n\nimport { tdRoot } from '../../theme';\nimport { useTableContext } from '../Table/TableContext';\n\ntype CellProps<TData extends RowData, TValue> = PropsWithChildren<{\n cell: CellType<TData, TValue>;\n}>;\n\nconst CELL_NAME = 'Cell';\n\nconst FocusableCell = <TData extends RowData, TValue>({ cell, children }: CellProps<TData, TValue>) => {\n const tableContext = useTableContext(CELL_NAME);\n const domAttributes = useFocusableGroup({ tabBehavior: 'limited' });\n\n const className = tdRoot(tableContext, cell.column.columnDef.meta?.cell?.classNames);\n\n return (\n <td tabIndex={0} {...domAttributes} className={className}>\n {children}\n </td>\n );\n};\n\nconst StaticCell = <TData extends RowData, TValue>({ cell, children }: CellProps<TData, TValue>) => {\n const tableContext = useTableContext(CELL_NAME);\n return <td className={tdRoot(tableContext, cell.column.columnDef.meta?.cell?.classNames)}>{children}</td>;\n};\n\nconst Cell = <TData extends RowData, TValue>({ cell, children }: CellProps<TData, TValue>) => {\n const { isGrid } = useTableContext(CELL_NAME);\n const Root = isGrid ? FocusableCell : StaticCell;\n return <Root cell={cell}>{children}</Root>;\n};\n\nCell.displayName = CELL_NAME;\n\nexport { Cell };\n\nexport type { CellProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { flexRender, type RowData } from '@tanstack/react-table';\nimport React from 'react';\n\nimport { useTableContext } from './TableContext';\nimport { tfootRoot, tfootTr, tfootTh } from '../../theme';\n\ntype TableFooterProps = {};\n\nconst TABLE_FOOT_NAME = 'TableFooter';\n\nconst TableFooter = <TData extends RowData>(props: TableFooterProps) => {\n const tableContext = useTableContext<TData>(TABLE_FOOT_NAME);\n const { table, expand, debug } = tableContext;\n const footers = table.getFooterGroups();\n\n return (\n <tfoot className={tfootRoot(props)}>\n {footers.map((footerGroup) => (\n <tr key={footerGroup.id} className={tfootTr(tableContext)}>\n {debug && <th />}\n\n {footerGroup.headers.map((footer) => {\n return (\n <th key={footer.id} className={tfootTh(tableContext, footer.column.columnDef.meta?.footer?.classNames)}>\n {footer.isPlaceholder ? null : flexRender(footer.column.columnDef.footer, footer.getContext())}\n </th>\n );\n })}\n\n {expand && <th />}\n </tr>\n ))}\n </tfoot>\n );\n};\n\nTableFooter.displayName = TABLE_FOOT_NAME;\n\nexport { TableFooter };\n\nexport type { TableFooterProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { flexRender, type RowData } from '@tanstack/react-table';\nimport React from 'react';\n\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { useTableContext } from './TableContext';\nimport { theadResizeRoot, theadResizeThumb, theadRoot, theadTh, theadTr } from '../../theme';\n\nconst TABLE_HEAD_NAME = 'TableHeader';\n\ntype TableHeadProps = {};\n\nconst TableHead = <TData extends RowData>(_props: TableHeadProps) => {\n const tableContext = useTableContext<TData>(TABLE_HEAD_NAME);\n const headerGroups = tableContext.table.getHeaderGroups();\n const state = tableContext.table.getState();\n\n return (\n <thead className={theadRoot(tableContext)}>\n {headerGroups.map((headerGroup) => {\n return (\n // Group element to hover resize handles.\n <tr key={headerGroup.id} className={theadTr(tableContext)}>\n {/* TODO(burdon): Calc. width. */}\n {tableContext.debug && (\n <th className='font-mono' style={{ width: 32 }}>\n #\n </th>\n )}\n\n {headerGroup.headers.map((header) => {\n const isResizing = header.column.getIsResizing();\n const resizeHandler = header.getResizeHandler();\n\n return (\n <th\n key={header.id}\n style={{\n width: header.getSize(),\n }}\n className={theadTh(tableContext, header.column.columnDef.meta?.header?.classNames)}\n >\n {!header || header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n\n {/*\n * Resize handle.\n * https://codesandbox.io/p/sandbox/github/tanstack/table/tree/main/examples/react/column-sizing\n */}\n {header.column.columnDef.meta?.resizable && (\n <div\n className={theadResizeRoot(tableContext, isResizing && 'hidden')}\n style={{\n transform: `translateX(${isResizing ? state.columnSizingInfo.deltaOffset : 0}px)`,\n }}\n onMouseDown={resizeHandler}\n onTouchStart={resizeHandler}\n >\n <div className={mx(theadResizeThumb(tableContext))} />\n </div>\n )}\n </th>\n );\n })}\n\n {tableContext.expand && <th />}\n </tr>\n );\n })}\n </thead>\n );\n};\n\nTableHead.displayName = TABLE_HEAD_NAME;\n\nexport { TableHead };\n\nexport type { TableHeadProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CaretDown } from '@phosphor-icons/react';\nimport { type RowData } from '@tanstack/react-table';\nimport React, { useCallback, useState } from 'react';\n\nimport { Popover, useTranslation } from '@dxos/react-ui';\nimport { PopoverCombobox } from '@dxos/react-ui-searchlist';\nimport { descriptionText, getSize, mx, staticPlaceholderText } from '@dxos/react-ui-theme';\n\nimport { type SearchListQueryModel } from '../../helpers';\nimport { translationKey } from '../../translations';\n\nexport type ComboboxCellItems<TData extends RowData> = Record<string, { label: string; data: TData }>;\n\nconst initialItems = <TData extends RowData>(model: SearchListQueryModel<TData>, value?: TData) =>\n value\n ? {\n [model.getId(value)]: { label: model.getText(value), data: value },\n }\n : {};\n\nexport const CellCombobox = <TData extends RowData>({\n model,\n value,\n onValueChange,\n}: {\n model: SearchListQueryModel<TData>;\n value: TData;\n onValueChange: (value: TData) => void;\n}) => {\n const { t } = useTranslation(translationKey);\n const [items, setItems] = useState<ComboboxCellItems<TData>>(initialItems(model, value));\n const [loading, setLoading] = useState(false);\n const [searchInputValue, setSearchInputValue] = useState('');\n const handleSearchInputValueChange = async (text?: string) => {\n setSearchInputValue(text ?? '');\n setLoading(true);\n const items = await model.query(text);\n setItems(\n items.reduce(\n (acc: ComboboxCellItems<TData>, item) => {\n acc[model.getId(item)] = {\n label: model.getText(item),\n data: item,\n };\n return acc;\n },\n initialItems(model, value),\n ),\n );\n setLoading(false);\n };\n\n const handleValueChange = useCallback(\n (id: string) => {\n onValueChange(items[id]?.data);\n },\n [items, onValueChange],\n );\n\n return (\n <PopoverCombobox.Root placeholder={t('no selection label')}>\n <PopoverCombobox.Trigger variant='ghost' classNames='is-full rounded-none ring-inset'>\n {value ? (\n <>\n <span\n className={mx(\n 'font-normal text-start text-base flex-1 min-is-0 truncate mie-2',\n !value && staticPlaceholderText,\n )}\n >\n {model.getText(value)}\n </span>\n <CaretDown weight='bold' className={getSize(3)} />\n </>\n ) : null}\n </PopoverCombobox.Trigger>\n <PopoverCombobox.Content shouldFilter={false} classNames='is-[--radix-popover-trigger-width]'>\n <PopoverCombobox.Input value={searchInputValue} onValueChange={handleSearchInputValueChange} />\n <PopoverCombobox.List>\n {searchInputValue.length < 1 ? (\n <p className={mx('text-center', descriptionText)}>Start typing to search</p>\n ) : loading ? (\n <p className={mx('text-center', descriptionText)}>Searching…</p>\n ) : (\n <>\n <PopoverCombobox.Empty classNames={['text-center', descriptionText]}>No results</PopoverCombobox.Empty>\n {Object.entries(items).map(([id, { label }]) => (\n <PopoverCombobox.Item key={id} value={id} onSelect={handleValueChange} classNames='truncate'>\n {label}\n </PopoverCombobox.Item>\n ))}\n </>\n )}\n </PopoverCombobox.List>\n <Popover.Arrow />\n </PopoverCombobox.Content>\n </PopoverCombobox.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { Check, ClipboardText, type Icon, X } from '@phosphor-icons/react';\nimport {\n createColumnHelper,\n type ColumnDef,\n type ColumnMeta,\n type RowData,\n type ColumnHelper,\n type CellContext,\n} from '@tanstack/react-table';\nimport { format } from 'date-fns/format';\nimport { formatDistanceToNow } from 'date-fns/formatDistanceToNow';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { type PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { type ClassNameValue, Input, Tooltip } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { CellCombobox } from './components';\nimport { useTableContext } from './components/Table/TableContext';\nimport { textPadding } from './theme';\n\nexport type ValueUpdater<TData extends RowData, TValue> = (row: TData, id: string, value: TValue) => void;\n\nexport const createColumnBuilder = <TData extends RowData>() => ({\n helper: createColumnHelper<TData>(),\n builder: new ColumnBuilder<TData>(),\n});\n\n// TODO(thure): This interface is redundant, e.g. `classNames` == `meta.cell.classNames`\n/**\n * NOTE: Can use `meta` for custom properties.\n */\nexport type BaseColumnOptions<TData, TValue> = Partial<ColumnDef<TData, TValue>> & {\n meta?: ColumnMeta<TData, TValue>;\n label?: string;\n classNames?: ClassNameValue;\n onUpdate?: ValueUpdater<TData, TValue | undefined>;\n};\n\n// TODO(burdon): Better abstraction?\nexport type SearchListQueryModel<TData extends RowData> = {\n getId(object: TData): string;\n getText(object: TData): string;\n query(text?: string): Promise<TData[]>;\n};\n\nexport type ComboboxColumnOptions<TData extends RowData> = BaseColumnOptions<TData, any> & {\n model: SearchListQueryModel<TData>;\n};\n\nexport type StringColumnOptions<TData extends RowData> = BaseColumnOptions<TData, string> & {};\nexport type SelectRowColumnOptions<TData extends RowData> = BaseColumnOptions<TData, string> & {};\n\nexport type NumberColumnOptions<TData extends RowData> = BaseColumnOptions<TData, number> & {\n digits?: number;\n};\n\nexport type KeyColumnOptions<TData extends RowData> = BaseColumnOptions<TData, PublicKey> & {\n tooltip?: boolean;\n};\n\nexport type DateColumnOptions<TData extends RowData> = BaseColumnOptions<TData, Date> & {\n format?: string;\n relative?: boolean;\n};\n\nexport type SwitchColumnOptions<TData extends RowData> = BaseColumnOptions<TData, boolean> & {};\n\nexport type IconColumnOptions<TData extends RowData> = BaseColumnOptions<TData, boolean> & {\n on?: {\n Icon?: Icon;\n className?: string;\n };\n off?: {\n Icon?: Icon;\n className?: string;\n };\n};\n\nconst ComboboxBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, TData>) => {\n const { model, onUpdate } = cellContext.column.columnDef.meta as ColumnMeta<TData, TData>;\n return model ? (\n <CellCombobox<TData>\n model={model}\n value={cellContext.getValue()}\n onValueChange={(value) => onUpdate?.(cellContext.row.original, cellContext.column.id, value)}\n />\n ) : null;\n};\n\nconst StringBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, string>) => {\n const ref = useRef<HTMLInputElement>(null);\n const { findPrevFocusable } = useFocusFinders();\n\n const { onUpdate, cell } = cellContext.column.columnDef.meta as ColumnMeta<TData, string>;\n\n // https://tanstack.com/table/v8/docs/examples/react/editable-data\n const initialValue = cellContext.getValue();\n const [value, setValue] = useState(() => {\n // TODO(burdon): Temporary shim for automerge.\n if ((initialValue as any)?.content) {\n return (initialValue as any)?.content;\n }\n\n return initialValue;\n });\n\n const handleSave = () => {\n ref.current && document.activeElement === ref.current && findPrevFocusable(ref.current)?.focus();\n\n if (value !== initialValue) {\n onUpdate?.(cellContext.row.original, cellContext.column.id, value);\n }\n };\n\n const handleCancel = () => setValue(initialValue);\n\n let placeholder = false;\n const columns = cellContext.table.getVisibleFlatColumns();\n\n // Calling getRowModel is expensive, so only do it when we're a cell in the first position\n if (columns[0].id === cellContext.column.id) {\n const rowCount = cellContext.table.getRowModel().rows.length;\n placeholder = cellContext.row.index === rowCount - 1 && columns[0].id === cellContext.column.id;\n }\n\n // TODO(burdon): Don't render inputs unless mouse over (Show ellipsis when div)?\n return (\n <Input.Root>\n <Input.TextInput\n ref={ref}\n variant='subdued'\n placeholder={placeholder ? 'Add row...' : undefined}\n classNames={['is-full', textPadding, cell?.classNames]}\n value={value ?? ''}\n onBlur={handleSave}\n onChange={(event) => setValue(event.target.value)}\n onKeyDown={(event) => (event.key === 'Enter' && handleSave()) || (event.key === 'Escape' && handleCancel())}\n />\n </Input.Root>\n );\n};\n\nconst parseNumber = (text?: string) => (text?.trim().length ? Number(text) : NaN);\n\nconst displayNumber = (value?: number, digits?: number) =>\n value || value === 0\n ? value.toLocaleString(undefined, {\n minimumFractionDigits: digits ?? 0,\n maximumFractionDigits: digits ?? 2,\n })\n : '';\n\nconst NumberBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, number>) => {\n const { onUpdate, digits } = cellContext.column.columnDef.meta as ColumnMeta<TData, string>;\n const value = cellContext.getValue();\n const [text, setText] = useState<string>(displayNumber(value, digits));\n const { findPrevFocusable } = useFocusFinders();\n const ref = useRef<HTMLInputElement | null>(null);\n\n // Update display value if `digits` changes and input is not in focus.\n useEffect(() => {\n (!document.activeElement || document.activeElement !== ref.current) && setText(displayNumber(value, digits));\n }, [digits, value]);\n\n const handleEdit = () => setText(value !== undefined ? String(value) : '');\n\n // TODO(burdon): Property is encoded as float (e.g., 6.1 => 6.099)\n const handleSave = () => {\n const nextValue = parseNumber(text);\n\n if (!isNaN(nextValue)) {\n onUpdate?.(cellContext.row.original, cellContext.column.id, nextValue);\n setText(displayNumber(nextValue, digits));\n } else {\n // Reset the text to display the original value without updating the model.\n setText(displayNumber(value, digits));\n }\n\n // Shift focus only if input is focused on save (e.g. on `Enter`).\n ref.current && document.activeElement === ref.current && findPrevFocusable(ref.current)?.focus();\n };\n\n const _handleCancel = () => {\n setText(displayNumber(value, digits));\n ref.current && findPrevFocusable(ref.current)?.focus();\n };\n\n return (\n <Input.Root>\n <Input.TextInput\n ref={ref}\n variant='subdued'\n value={text}\n classNames={['is-full text-end font-mono', textPadding]}\n onBlur={handleSave}\n onFocus={handleEdit}\n onChange={({ target: { value } }) => setText(value)}\n onKeyDown={(event) => {\n // TODO(thure): `Escape` is reserved for blurring the input and moving focus to the cell\n return /* (event.key === 'Escape' && handleCancel()) || */ event.key === 'Enter' && handleSave();\n }}\n />\n </Input.Root>\n );\n};\n\nconst RowSelectorBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, unknown>) => {\n const { cell } = cellContext.column.columnDef.meta as ColumnMeta<TData, unknown>;\n const { row } = cellContext;\n\n const checked = row.getCanSelect()\n ? row.getIsSelected()\n : row.getCanSelectSubRows() && (row.getIsSomeSelected() ? 'indeterminate' : row.getIsAllSubRowsSelected());\n\n return (\n <div className='flex justify-center w-full h-full' role='presentation'>\n <Input.Root>\n <Input.Checkbox\n size={4}\n classNames={[cell?.classNames]}\n checked={checked}\n onCheckedChange={(event) => {\n if (row.getCanSelect()) {\n row.getToggleSelectedHandler()(event);\n }\n }}\n disabled={!(row.getCanSelect() || row.getCanSelectSubRows())}\n />\n </Input.Root>\n </div>\n );\n};\n\nconst SwitchBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, boolean>) => {\n const { onUpdate } = cellContext.column.columnDef.meta as ColumnMeta<TData, boolean>;\n const value = cellContext.getValue();\n return (\n <Input.Root>\n <Input.Switch\n classNames='block mli-auto'\n onClick={(event) => event.stopPropagation()}\n disabled={!onUpdate}\n checked={!!value}\n onCheckedChange={(value) => {\n onUpdate?.(cellContext.row.original, cellContext.column.id, !!value);\n }}\n />\n </Input.Root>\n );\n};\n\n/**\n * Util to create column definitions.\n */\nexport class ColumnBuilder<TData extends RowData> {\n /**\n * Combobox value\n */\n combobox({\n label,\n classNames,\n model,\n onUpdate,\n ...props\n }: ComboboxColumnOptions<TData>): Partial<ColumnDef<TData, any>> {\n return {\n minSize: 100,\n header: (column) => {\n return label ?? column.header.id;\n },\n cell:\n model && onUpdate\n ? ComboboxBuilderCell\n : (cellContext) => {\n const cellValue = cellContext.getValue();\n return <div className={mx('truncate', classNames)}>{cellValue ? model?.getText(cellValue) : ''}</div>;\n },\n ...props,\n meta: {\n ...props.meta,\n model,\n onUpdate,\n cell: { classNames, ...props.meta?.cell },\n },\n };\n }\n\n /**\n * String formats.\n */\n string({ label, classNames, onUpdate, ...props }: StringColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, string>\n > {\n return {\n minSize: 100,\n // TODO(burdon): Default.\n header: (column) => {\n return label ?? column.header.id;\n },\n cell: onUpdate\n ? StringBuilderCell\n : (cell) => {\n let value = cell.getValue();\n // TODO(burdon): Hack to support automerge.\n if (typeof value === 'object' && (value as any)?.__typename === 'dxos.Text.v0') {\n value = (value as any).content;\n }\n\n return <div className={mx('truncate', textPadding, classNames)}>{value}</div>;\n },\n ...props,\n meta: {\n ...props.meta,\n onUpdate,\n cell: { ...props.meta?.cell, classNames },\n },\n };\n }\n\n /**\n * Number formats.\n */\n number({ label, minSize, classNames, digits, onUpdate, ...props }: NumberColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, number>\n > {\n return {\n size: 100,\n minSize: 100,\n header: (cell) => label ?? cell.header.id,\n cell: NumberBuilderCell,\n ...props,\n meta: {\n ...props.meta,\n onUpdate,\n digits,\n header: { classNames: 'text-end', ...props.meta?.header },\n cell: { ...props.meta?.cell, classNames },\n },\n };\n }\n\n /**\n * Date formats.\n */\n // TODO(burdon): Date picker (pluggable renderers?)\n date({ label, format: formatSpec, relative, classNames, ...props }: DateColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, Date>\n > {\n return {\n size: 220, // TODO(burdon): Depends on format.\n minSize: 100,\n header: (cell) => label ?? cell.header.id,\n cell: (cell) => {\n const value = cell.getValue();\n\n try {\n const str = value\n ? formatSpec\n ? format(value, formatSpec)\n : relative\n ? formatDistanceToNow(value, { addSuffix: true })\n : value.toISOString()\n : undefined;\n\n return <div className={mx(textPadding, classNames)}>{str}</div>;\n } catch (err) {\n log.info('formatError', { value });\n return null;\n }\n },\n ...props,\n meta: { ...props.meta, cell: { ...props.meta?.cell, classNames } },\n };\n }\n\n /**\n * PublicKey with tooltip.\n */\n key({ label, tooltip, classNames, ...props }: KeyColumnOptions<TData> = {}): Partial<ColumnDef<TData, PublicKey>> {\n return {\n size: 94,\n minSize: 94,\n header: (cell) => label ?? cell.header.id,\n cell: (cell) => {\n const value = cell.getValue();\n if (!value) {\n return;\n }\n\n // TODO(burdon): Factor out styles.\n const element = value.truncate();\n if (!tooltip) {\n return element;\n }\n\n return (\n <Tooltip.Provider>\n <Tooltip.Root>\n <Tooltip.Trigger>{element}</Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='right'>\n <Tooltip.Arrow />\n <ClipboardText\n onClick={(ev) => {\n ev.stopPropagation(); // Prevent select row.\n void navigator.clipboard.writeText(value.toHex());\n }}\n />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </Tooltip.Provider>\n );\n },\n ...props,\n meta: { ...props.meta, cell: { ...props.meta?.cell, classNames: ['font-mono', textPadding, classNames] } },\n };\n }\n\n /**\n * Row selector\n */\n selectRow({ classNames, onUpdate, id = 'selectRow' }: SelectRowColumnOptions<TData> = {}): Parameters<\n ColumnHelper<TData>['display']\n >[0] {\n return {\n id,\n size: 32,\n enableResizing: false,\n meta: { onUpdate, cell: { classNames } },\n header: ({ table }) => {\n const { rowsSelectable } = useTableContext('HELPER_SELECT_ROW_HEADER_CELL');\n const checked = table.getIsSomeRowsSelected() ? 'indeterminate' : table.getIsAllRowsSelected();\n return rowsSelectable === 'multi' ? (\n <div className='flex justify-center w-full h-full' role='presentation'>\n <Input.Root>\n <Input.Checkbox\n size={4}\n classNames={['mli-auto', classNames]}\n checked={checked}\n onCheckedChange={() => table.toggleAllRowsSelected()}\n />\n </Input.Root>\n </div>\n ) : null;\n },\n cell: RowSelectorBuilderCell,\n };\n }\n\n /**\n * Switch\n */\n switch({ label, classNames, onUpdate, ...props }: SwitchColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, boolean>\n > {\n return {\n size: 50,\n minSize: 50,\n header: (column) => label ?? column.header.id,\n // TODO(Zan): Implement sort algorithm\n enableSorting: true,\n cell: SwitchBuilderCell,\n ...props,\n meta: { ...props.meta, onUpdate, cell: { ...props.meta?.cell, classNames: [textPadding, classNames] } },\n };\n }\n\n /**\n * Icon based on boolean value.\n */\n icon({ label, size, on, off, ...props }: IconColumnOptions<TData> = {}): Partial<ColumnDef<TData, boolean>> {\n const IconOn = on?.Icon ?? Check;\n const IconOff = off?.Icon ?? X;\n return {\n size: size ?? 32,\n // TODO(Zan): Implement sort algorithm\n enableSorting: false,\n header: (column) => <div className={'justify-center'}>{label ?? column.header.id}</div>,\n cell: (cell) => {\n const value = cell.getValue();\n if (value) {\n return <IconOn className={mx('block mli-auto', getSize(6), on?.className ?? 'text-green-700')} />;\n } else if (value === false) {\n return <IconOff className={mx('block mli-auto', getSize(6), off?.className ?? 'text-red-700')} />;\n } else {\n return null;\n }\n },\n ...props,\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Check", "Trash", "X", "GearSix", "React", "useRef", "useState", "Button", "DensityProvider", "Input", "Popover", "Select", "Separator", "useTranslation", "getSize", "mx", "safeParseInt", "CaretUpDown", "SortAscending", "SortDescending", "React", "Button", "getSize", "SortButton", "sortDirection", "onClick", "icon", "size", "getSize", "SortAscending", "className", "SortDescending", "CaretUpDown", "Button", "variant", "translationKey", "ColumnMenu", "column", "props", "title", "label", "length", "id", "header", "context", "canSort", "getCanSort", "sortDirection", "getIsSorted", "toggleSort", "getToggleSortingHandler", "React", "div", "className", "SortButton", "onClick", "ColumnPanel", "Section", "children", "role", "mx", "tableDefs", "tableDef", "onUpdate", "onDelete", "open", "setOpen", "useState", "prop", "setProp", "refTable", "setRefTable", "refProp", "setRefProp", "type", "setType", "String", "setLabel", "digits", "setDigits", "propRef", "useRef", "t", "useTranslation", "translationKey", "handleCancel", "handleSave", "match", "current", "focus", "columns", "find", "c", "safeParseInt", "Popover", "Root", "onOpenChange", "nextOpen", "Trigger", "asChild", "Button", "variant", "GearSix", "getSize", "Portal", "Content", "Viewport", "classNames", "DensityProvider", "density", "Input", "Label", "TextInput", "placeholder", "value", "onChange", "event", "target", "autoFocus", "ref", "replace", "Select", "onValueChange", "TriggerButton", "map", "Option", "key", "filter", "name", "Separator", "span", "Check", "ns", "X", "Trash", "Arrow", "useControllableState", "getCoreRowModel", "getSortedRowModel", "useReactTable", "getGroupedRowModel", "getExpandedRowModel", "useVirtualizer", "React", "Fragment", "useCallback", "useEffect", "useState", "log", "useDefaultValue", "useOnTransition", "useArrowNavigationGroup", "flexRender", "React", "createContext", "TABLE_NAME", "TableProvider", "useUntypedTableContext", "createContext", "useTableContext", "consumerName", "modalSurface", "fixedSurface", "focusRing", "ghostSelected", "ghostSelectedCurrent", "groupBorder", "mx", "currentRow", "selectedRow", "flushPadding", "textPadding", "headPadding", "gridCellFocusRing", "tableRoot", "fullWidth", "etc", "mx", "groupTh", "_props", "theadRoot", "header", "stickyHeader", "fixedSurface", "theadTr", "theadTh", "border", "groupBorder", "theadResizeRoot", "theadResizeThumb", "tbodyRoot", "tbodyTr", "canBeCurrent", "ghostSelectedCurrent", "ghostSelected", "focusRing", "tdRoot", "isGrid", "tdContent", "tfootRoot", "modalSurface", "tfootTr", "tfootTh", "useFocusableGroup", "React", "CELL_NAME", "FocusableCell", "cell", "children", "tableContext", "useTableContext", "domAttributes", "useFocusableGroup", "tabBehavior", "className", "tdRoot", "column", "columnDef", "meta", "classNames", "React", "td", "tabIndex", "StaticCell", "Cell", "isGrid", "Root", "displayName", "TABLE_BODY_NAME", "TableBody", "rows", "table", "keyAccessor", "currentDatum", "debug", "expand", "isGrid", "onDatumClick", "useTableContext", "rowSelection", "getState", "domAttributes", "useArrowNavigationGroup", "axis", "canBeCurrent", "React", "tbody", "map", "row", "isCurrent", "original", "isSelected", "id", "tr", "key", "className", "tbodyTr", "tabIndex", "onClick", "onKeyUp", "td", "getVisibleCells", "cell", "Cell", "flexRender", "column", "columnDef", "getContext", "displayName", "flexRender", "React", "TABLE_FOOT_NAME", "TableFooter", "props", "tableContext", "useTableContext", "table", "expand", "debug", "footers", "getFooterGroups", "React", "tfoot", "className", "tfootRoot", "map", "footerGroup", "tr", "key", "id", "tfootTr", "th", "headers", "footer", "tfootTh", "column", "columnDef", "meta", "classNames", "isPlaceholder", "flexRender", "getContext", "displayName", "flexRender", "React", "mx", "TABLE_HEAD_NAME", "TableHead", "_props", "tableContext", "useTableContext", "headerGroups", "table", "getHeaderGroups", "state", "getState", "React", "thead", "className", "theadRoot", "map", "headerGroup", "tr", "key", "id", "theadTr", "debug", "th", "style", "width", "headers", "header", "isResizing", "column", "getIsResizing", "resizeHandler", "getResizeHandler", "getSize", "theadTh", "columnDef", "meta", "classNames", "isPlaceholder", "flexRender", "getContext", "resizable", "div", "theadResizeRoot", "transform", "columnSizingInfo", "deltaOffset", "onMouseDown", "onTouchStart", "mx", "theadResizeThumb", "expand", "displayName", "Table", "props", "role", "onColumnResize", "columnVisibility", "header", "rowsSelectable", "debug", "onDataSelectionChange", "getScrollElement", "pinLastRow", "columns", "useDefaultValue", "data", "TableProvider", "UntypedTableProvider", "columnsInitialised", "setColumnsInitialised", "useState", "columnSizing", "setColumnSizing", "useEffect", "filter", "column", "size", "prop", "undefined", "reduce", "state", "columnSizingInfo", "setColumnSizingInfo", "notifyColumnResize", "useCallback", "useOnTransition", "isResizingColumn", "v", "rowSelection", "setRowSelection", "useControllableState", "onChange", "onRowSelectionChange", "defaultProp", "defaultRowSelection", "handleRowSelectionChange", "updaterOrValue", "nextRowSelection", "nextRowSelectionKey", "Object", "keys", "id", "grouping", "handleGroupingChange", "table", "useReactTable", "meta", "defaultColumn", "maxSize", "columnResizeMode", "enableColumnResizing", "onColumnSizingChange", "onColumnSizingInfoChange", "getCoreRowModel", "getSortedRowModel", "getExpandedRowModel", "getGroupedRowModel", "length", "onGroupingChange", "enableMultiRowSelection", "enableRowSelection", "enableSorting", "enableColumnPinning", "debugTable", "map", "getRowModel", "rowsById", "original", "resetRowPinning", "rows", "pin", "expand", "log", "warn", "React", "isGrid", "TableImpl", "classNames", "footer", "fullWidth", "useTableContext", "centerRows", "getCenterRows", "bottomRows", "getBottomRows", "pre", "className", "code", "JSON", "stringify", "getState", "tableRoot", "style", "width", "getTotalSize", "TableHead", "MemoizedVirtualisedTableContent", "VirtualizedTableContent", "TableBody", "GroupedTableContent", "TableFooter", "pinnedRows", "getVirtualItems", "useVirtualizer", "count", "overscan", "estimateSize", "virtualRows", "totalSize", "paddingTop", "start", "paddingBottom", "end", "tbody", "tr", "td", "height", "virtualRow", "index", "memo", "getHeaderGroups", "row", "i", "Fragment", "key", "thead", "th", "colSpan", "headers", "groupTh", "String", "getGroupingValue", "subRows", "CaretDown", "React", "useCallback", "useState", "Popover", "useTranslation", "PopoverCombobox", "descriptionText", "getSize", "mx", "staticPlaceholderText", "initialItems", "model", "value", "getId", "label", "getText", "data", "CellCombobox", "onValueChange", "t", "useTranslation", "translationKey", "items", "setItems", "useState", "loading", "setLoading", "searchInputValue", "setSearchInputValue", "handleSearchInputValueChange", "text", "query", "reduce", "acc", "item", "handleValueChange", "useCallback", "id", "React", "PopoverCombobox", "Root", "placeholder", "Trigger", "variant", "classNames", "span", "className", "mx", "staticPlaceholderText", "CaretDown", "weight", "getSize", "Content", "shouldFilter", "Input", "List", "length", "p", "descriptionText", "Empty", "Object", "entries", "map", "Item", "key", "onSelect", "Popover", "Arrow", "useFocusFinders", "Check", "ClipboardText", "X", "createColumnHelper", "format", "formatDistanceToNow", "React", "useEffect", "useRef", "useState", "log", "Input", "Tooltip", "getSize", "mx", "createColumnBuilder", "helper", "createColumnHelper", "builder", "ColumnBuilder", "ComboboxBuilderCell", "cellContext", "model", "onUpdate", "column", "columnDef", "meta", "React", "CellCombobox", "value", "getValue", "onValueChange", "row", "original", "id", "StringBuilderCell", "ref", "useRef", "findPrevFocusable", "useFocusFinders", "cell", "initialValue", "setValue", "useState", "content", "handleSave", "current", "document", "activeElement", "focus", "handleCancel", "placeholder", "columns", "table", "getVisibleFlatColumns", "rowCount", "getRowModel", "rows", "length", "index", "Input", "Root", "TextInput", "variant", "undefined", "classNames", "textPadding", "onBlur", "onChange", "event", "target", "onKeyDown", "key", "parseNumber", "text", "trim", "Number", "NaN", "displayNumber", "digits", "toLocaleString", "minimumFractionDigits", "maximumFractionDigits", "NumberBuilderCell", "setText", "useEffect", "handleEdit", "String", "nextValue", "isNaN", "_handleCancel", "onFocus", "RowSelectorBuilderCell", "checked", "getCanSelect", "getIsSelected", "getCanSelectSubRows", "getIsSomeSelected", "getIsAllSubRowsSelected", "div", "className", "role", "Checkbox", "size", "onCheckedChange", "getToggleSelectedHandler", "disabled", "SwitchBuilderCell", "Switch", "onClick", "stopPropagation", "combobox", "label", "props", "minSize", "header", "cellValue", "mx", "getText", "string", "__typename", "number", "date", "format", "formatSpec", "relative", "str", "formatDistanceToNow", "addSuffix", "toISOString", "err", "log", "info", "tooltip", "element", "truncate", "Tooltip", "Provider", "Trigger", "Portal", "Content", "side", "Arrow", "ClipboardText", "ev", "navigator", "clipboard", "writeText", "toHex", "selectRow", "enableResizing", "rowsSelectable", "useTableContext", "getIsSomeRowsSelected", "getIsAllRowsSelected", "toggleAllRowsSelected", "switch", "enableSorting", "icon", "on", "off", "IconOn", "Icon", "Check", "IconOff", "X", "getSize"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/ui/react-ui-table/src/components/SortButton.tsx":{"bytes":3261,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/translations.ts":{"bytes":2343,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/components/ColumnMenu.tsx":{"bytes":30689,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/SortButton.tsx","kind":"import-statement","original":"./SortButton"},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"../translations"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableContext.tsx":{"bytes":2237,"imports":[{"path":"@radix-ui/react-context","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/theme.ts":{"bytes":10035,"imports":[{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/Cell.tsx":{"bytes":4937,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"../../theme"},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"../Table/TableContext"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableBody.tsx":{"bytes":7765,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./TableContext"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"../../theme"},{"path":"packages/ui/react-ui-table/src/components/Cell/Cell.tsx","kind":"import-statement","original":"../Cell/Cell"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableFooter.tsx":{"bytes":4745,"imports":[{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./TableContext"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"../../theme"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableHead.tsx":{"bytes":7970,"imports":[{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./TableContext"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"../../theme"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/Table.tsx":{"bytes":32779,"imports":[{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/TableBody.tsx","kind":"import-statement","original":"./TableBody"},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./TableContext"},{"path":"packages/ui/react-ui-table/src/components/Table/TableFooter.tsx","kind":"import-statement","original":"./TableFooter"},{"path":"packages/ui/react-ui-table/src/components/Table/TableHead.tsx","kind":"import-statement","original":"./TableHead"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"../../theme"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/props.ts":{"bytes":3095,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/index.ts":{"bytes":557,"imports":[{"path":"packages/ui/react-ui-table/src/components/Table/Table.tsx","kind":"import-statement","original":"./Table"},{"path":"packages/ui/react-ui-table/src/components/Table/props.ts","kind":"import-statement","original":"./props"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx":{"bytes":11696,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/index.ts":{"bytes":494,"imports":[{"path":"packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx","kind":"import-statement","original":"./CellCombobox"}],"format":"esm"},"packages/ui/react-ui-table/src/components/index.ts":{"bytes":644,"imports":[{"path":"packages/ui/react-ui-table/src/components/ColumnMenu.tsx","kind":"import-statement","original":"./ColumnMenu"},{"path":"packages/ui/react-ui-table/src/components/Table/index.ts","kind":"import-statement","original":"./Table"},{"path":"packages/ui/react-ui-table/src/components/Cell/index.ts","kind":"import-statement","original":"./Cell"}],"format":"esm"},"packages/ui/react-ui-table/src/helpers.tsx":{"bytes":51909,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"date-fns/format","kind":"import-statement","external":true},{"path":"date-fns/formatDistanceToNow","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./components/Table/TableContext"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"./theme"}],"format":"esm"},"packages/ui/react-ui-table/src/schema.ts":{"bytes":1111,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/types.ts":{"bytes":1830,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/index.ts":{"bytes":1017,"imports":[{"path":"packages/ui/react-ui-table/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-table/src/helpers.tsx","kind":"import-statement","original":"./helpers"},{"path":"packages/ui/react-ui-table/src/schema.ts","kind":"import-statement","original":"./schema"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"./theme"},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/ui/react-ui-table/src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-table/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":90581},"packages/ui/react-ui-table/dist/lib/browser/index.mjs":{"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"date-fns/format","kind":"import-statement","external":true},{"path":"date-fns/formatDistanceToNow","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"exports":["CellCombobox","ColumnBuilder","ColumnMenu","ColumnPanel","MemoizedVirtualisedTableContent","Table","createColumnBuilder","currentRow","flushPadding","gridCellFocusRing","groupTh","headPadding","selectedRow","tableRoot","tbodyRoot","tbodyTr","tdContent","tdRoot","textPadding","tfootRoot","tfootTh","tfootTr","theadResizeRoot","theadRoot","theadTh","theadTr","translations"],"entryPoint":"packages/ui/react-ui-table/src/index.ts","inputs":{"packages/ui/react-ui-table/src/components/ColumnMenu.tsx":{"bytesInOutput":8248},"packages/ui/react-ui-table/src/components/SortButton.tsx":{"bytesInOutput":796},"packages/ui/react-ui-table/src/translations.ts":{"bytesInOutput":611},"packages/ui/react-ui-table/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/Table/Table.tsx":{"bytesInOutput":8490},"packages/ui/react-ui-table/src/components/Table/TableBody.tsx":{"bytesInOutput":1733},"packages/ui/react-ui-table/src/components/Table/TableContext.tsx":{"bytesInOutput":234},"packages/ui/react-ui-table/src/theme.ts":{"bytesInOutput":2142},"packages/ui/react-ui-table/src/components/Cell/Cell.tsx":{"bytesInOutput":1000},"packages/ui/react-ui-table/src/components/Table/TableFooter.tsx":{"bytesInOutput":1030},"packages/ui/react-ui-table/src/components/Table/TableHead.tsx":{"bytesInOutput":1754},"packages/ui/react-ui-table/src/components/Table/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx":{"bytesInOutput":3095},"packages/ui/react-ui-table/src/components/Cell/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/helpers.tsx":{"bytesInOutput":12689}},"bytes":43204}}}
|
|
1
|
+
{"inputs":{"packages/ui/react-ui-table/src/components/SortButton.tsx":{"bytes":3261,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/translations.ts":{"bytes":2343,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/components/ColumnMenu.tsx":{"bytes":30689,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/SortButton.tsx","kind":"import-statement","original":"./SortButton"},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"../translations"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableContext.tsx":{"bytes":2237,"imports":[{"path":"@radix-ui/react-context","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/theme.ts":{"bytes":9834,"imports":[{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/Cell.tsx":{"bytes":4937,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"../../theme"},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"../Table/TableContext"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableBody.tsx":{"bytes":7765,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./TableContext"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"../../theme"},{"path":"packages/ui/react-ui-table/src/components/Cell/Cell.tsx","kind":"import-statement","original":"../Cell/Cell"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableFooter.tsx":{"bytes":4745,"imports":[{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./TableContext"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"../../theme"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableHead.tsx":{"bytes":8895,"imports":[{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./TableContext"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"../../theme"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/Table.tsx":{"bytes":32636,"imports":[{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/TableBody.tsx","kind":"import-statement","original":"./TableBody"},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./TableContext"},{"path":"packages/ui/react-ui-table/src/components/Table/TableFooter.tsx","kind":"import-statement","original":"./TableFooter"},{"path":"packages/ui/react-ui-table/src/components/Table/TableHead.tsx","kind":"import-statement","original":"./TableHead"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"../../theme"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/props.ts":{"bytes":3095,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/index.ts":{"bytes":557,"imports":[{"path":"packages/ui/react-ui-table/src/components/Table/Table.tsx","kind":"import-statement","original":"./Table"},{"path":"packages/ui/react-ui-table/src/components/Table/props.ts","kind":"import-statement","original":"./props"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx":{"bytes":11696,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/index.ts":{"bytes":494,"imports":[{"path":"packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx","kind":"import-statement","original":"./CellCombobox"}],"format":"esm"},"packages/ui/react-ui-table/src/components/index.ts":{"bytes":644,"imports":[{"path":"packages/ui/react-ui-table/src/components/ColumnMenu.tsx","kind":"import-statement","original":"./ColumnMenu"},{"path":"packages/ui/react-ui-table/src/components/Table/index.ts","kind":"import-statement","original":"./Table"},{"path":"packages/ui/react-ui-table/src/components/Cell/index.ts","kind":"import-statement","original":"./Cell"}],"format":"esm"},"packages/ui/react-ui-table/src/helpers.tsx":{"bytes":51909,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"date-fns/format","kind":"import-statement","external":true},{"path":"date-fns/formatDistanceToNow","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./components/Table/TableContext"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"./theme"}],"format":"esm"},"packages/ui/react-ui-table/src/schema.ts":{"bytes":1111,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/types.ts":{"bytes":1830,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/index.ts":{"bytes":1017,"imports":[{"path":"packages/ui/react-ui-table/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-table/src/helpers.tsx","kind":"import-statement","original":"./helpers"},{"path":"packages/ui/react-ui-table/src/schema.ts","kind":"import-statement","original":"./schema"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"./theme"},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/ui/react-ui-table/src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-table/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":90934},"packages/ui/react-ui-table/dist/lib/browser/index.mjs":{"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"date-fns/format","kind":"import-statement","external":true},{"path":"date-fns/formatDistanceToNow","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"exports":["CellCombobox","ColumnBuilder","ColumnMenu","ColumnPanel","MemoizedVirtualisedTableContent","Table","createColumnBuilder","currentRow","flushPadding","gridCellFocusRing","groupTh","headPadding","selectedRow","tableRoot","tbodyRoot","tbodyTr","tdContent","tdRoot","textPadding","tfootRoot","tfootTh","tfootTr","theadResizeRoot","theadResizeThumb","theadRoot","theadTh","theadTr","translations"],"entryPoint":"packages/ui/react-ui-table/src/index.ts","inputs":{"packages/ui/react-ui-table/src/components/ColumnMenu.tsx":{"bytesInOutput":8248},"packages/ui/react-ui-table/src/components/SortButton.tsx":{"bytesInOutput":796},"packages/ui/react-ui-table/src/translations.ts":{"bytesInOutput":611},"packages/ui/react-ui-table/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/Table/Table.tsx":{"bytesInOutput":8440},"packages/ui/react-ui-table/src/components/Table/TableBody.tsx":{"bytesInOutput":1733},"packages/ui/react-ui-table/src/components/Table/TableContext.tsx":{"bytesInOutput":234},"packages/ui/react-ui-table/src/theme.ts":{"bytesInOutput":2033},"packages/ui/react-ui-table/src/components/Cell/Cell.tsx":{"bytesInOutput":1000},"packages/ui/react-ui-table/src/components/Table/TableFooter.tsx":{"bytesInOutput":1030},"packages/ui/react-ui-table/src/components/Table/TableHead.tsx":{"bytesInOutput":2020},"packages/ui/react-ui-table/src/components/Table/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx":{"bytesInOutput":3095},"packages/ui/react-ui-table/src/components/Cell/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/helpers.tsx":{"bytesInOutput":12689}},"bytes":43331}}}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { type VirtualizerOptions } from '@tanstack/react-virtual';
|
|
2
|
-
import React from 'react';
|
|
3
2
|
import { type TableProps } from './props';
|
|
4
3
|
export declare const Table: <TData extends unknown>(props: TableProps<TData>) => JSX.Element;
|
|
5
|
-
export declare const MemoizedVirtualisedTableContent:
|
|
4
|
+
export declare const MemoizedVirtualisedTableContent: ({ getScrollElement, }: Pick<VirtualizerOptions<Element, Element>, 'getScrollElement'>) => JSX.Element;
|
|
6
5
|
//# sourceMappingURL=Table.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/Table.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/Table.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAUlF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,eAAO,MAAM,KAAK,kEAuJjB,CAAC;AA+FF,eAAO,MAAM,+BAA+B,0BA1CzC,KAAK,mBAAmB,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB,CAAC,gBA0CmD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableHead.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/TableHead.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TableHead.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/TableHead.tsx"],"names":[],"mappings":"AAcA,KAAK,cAAc,GAAG,EAAE,CAAC;AAEzB,QAAA,MAAM,SAAS;oCAAmC,cAAc;;CA4D/D,CAAC;AAIF,OAAO,EAAE,SAAS,EAAE,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -5,7 +5,7 @@ export declare const currentRow = "!bg-neutral-75 !dark:bg-neutral-850";
|
|
|
5
5
|
export declare const selectedRow = "!bg-primary-100 dark:!bg-primary-700";
|
|
6
6
|
export declare const flushPadding = "pli-0 plb-0";
|
|
7
7
|
export declare const textPadding = "pli-2 plb-0.5";
|
|
8
|
-
export declare const headPadding = "pli-2 plb-1";
|
|
8
|
+
export declare const headPadding = "pli-2 plb-1.5";
|
|
9
9
|
export declare const gridCellFocusRing = "focus-within:z-[11] focus-within:outline outline-2 outline-primary-500 dark:outline-primary-400";
|
|
10
10
|
export type TableStyleProps = Partial<TableContextValue<any>>;
|
|
11
11
|
export declare const tableRoot: ComponentFunction<TableStyleProps>;
|
|
@@ -14,9 +14,8 @@ export type TheadStyleProps = Partial<TableFlags>;
|
|
|
14
14
|
export declare const theadRoot: ComponentFunction<TheadStyleProps>;
|
|
15
15
|
export declare const theadTr: ComponentFunction<TheadStyleProps>;
|
|
16
16
|
export declare const theadTh: ComponentFunction<TheadStyleProps>;
|
|
17
|
-
export declare const theadResizeRoot: ComponentFunction<
|
|
18
|
-
|
|
19
|
-
}>;
|
|
17
|
+
export declare const theadResizeRoot: ComponentFunction<TheadStyleProps>;
|
|
18
|
+
export declare const theadResizeThumb: ComponentFunction<TheadStyleProps>;
|
|
20
19
|
export type TbodyStyleProps = Partial<TableContextValue<any>>;
|
|
21
20
|
export declare const tbodyRoot: ComponentFunction<TbodyStyleProps>;
|
|
22
21
|
export type TbodyTrStyleProps = Partial<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/theme.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/theme.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAWzD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEvE,eAAO,MAAM,UAAU,wCAAwC,CAAC;AAChE,eAAO,MAAM,WAAW,yCAAyC,CAAC;AAClE,eAAO,MAAM,YAAY,gBAAgB,CAAC;AAC1C,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAC3C,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAE3C,eAAO,MAAM,iBAAiB,oGACqE,CAAC;AAMpG,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CACN,CAAC;AAEpD,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CACH,CAAC;AAMrD,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAElD,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CAC4D,CAAC;AAEtH,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAA2C,CAAC;AAEnG,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAOpD,CAAC;AAEJ,eAAO,MAAM,eAAe,EAAE,iBAAiB,CAAC,eAAe,CAI5D,CAAC;AAEJ,eAAO,MAAM,gBAAgB,EAAE,iBAAiB,CAAC,eAAe,CACQ,CAAC;AAMzE,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CAAkC,CAAC;AAE5F,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AACpE,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,iBAAiB,CAOtD,CAAC;AAMJ,eAAO,MAAM,MAAM,EAAE,iBAAiB,CAAC,eAAe,CACwD,CAAC;AAE/G,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAkC,CAAC;AAMlG,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CACJ,CAAC;AAEtD,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAAkC,CAAC;AAE1F,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CACO,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/react-ui-table",
|
|
3
|
-
"version": "0.4.9-main.
|
|
3
|
+
"version": "0.4.9-main.f3fe18b",
|
|
4
4
|
"description": "A table component.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -22,15 +22,15 @@
|
|
|
22
22
|
"@tanstack/react-table": "^8.13.2",
|
|
23
23
|
"@tanstack/react-virtual": "^3.0.1",
|
|
24
24
|
"date-fns": "^3.3.1",
|
|
25
|
-
"@dxos/async": "0.4.9-main.
|
|
26
|
-
"@dxos/
|
|
27
|
-
"@dxos/
|
|
28
|
-
"@dxos/
|
|
29
|
-
"@dxos/
|
|
30
|
-
"@dxos/react-ui-searchlist": "0.4.9-main.
|
|
31
|
-
"@dxos/react-ui-
|
|
32
|
-
"@dxos/
|
|
33
|
-
"@dxos/
|
|
25
|
+
"@dxos/async": "0.4.9-main.f3fe18b",
|
|
26
|
+
"@dxos/invariant": "0.4.9-main.f3fe18b",
|
|
27
|
+
"@dxos/react-ui": "0.4.9-main.f3fe18b",
|
|
28
|
+
"@dxos/keys": "0.4.9-main.f3fe18b",
|
|
29
|
+
"@dxos/log": "0.4.9-main.f3fe18b",
|
|
30
|
+
"@dxos/react-ui-searchlist": "0.4.9-main.f3fe18b",
|
|
31
|
+
"@dxos/react-ui-theme": "0.4.9-main.f3fe18b",
|
|
32
|
+
"@dxos/react-ui-types": "0.4.9-main.f3fe18b",
|
|
33
|
+
"@dxos/util": "0.4.9-main.f3fe18b"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@phosphor-icons/react": "^2.0.5",
|
|
@@ -40,10 +40,10 @@
|
|
|
40
40
|
"react-dom": "^18.2.0",
|
|
41
41
|
"vite": "^5.1.5",
|
|
42
42
|
"vite-plugin-turbosnap": "^1.0.2",
|
|
43
|
-
"@dxos/
|
|
44
|
-
"@dxos/
|
|
45
|
-
"@dxos/react-ui-theme": "0.4.9-main.
|
|
46
|
-
"@dxos/
|
|
43
|
+
"@dxos/random": "0.4.9-main.f3fe18b",
|
|
44
|
+
"@dxos/storybook-utils": "0.4.9-main.f3fe18b",
|
|
45
|
+
"@dxos/react-ui-theme": "0.4.9-main.f3fe18b",
|
|
46
|
+
"@dxos/echo-schema": "0.4.9-main.f3fe18b"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"@phosphor-icons/react": "^2.0.5",
|
|
@@ -201,7 +201,6 @@ const TableImpl = <TData extends RowData>(props: TableProps<TData>) => {
|
|
|
201
201
|
);
|
|
202
202
|
}
|
|
203
203
|
|
|
204
|
-
const virtualisable = getScrollElement !== undefined;
|
|
205
204
|
const isResizingColumn = table.getState().columnSizingInfo.isResizingColumn;
|
|
206
205
|
|
|
207
206
|
return (
|
|
@@ -213,7 +212,7 @@ const TableImpl = <TData extends RowData>(props: TableProps<TData>) => {
|
|
|
213
212
|
<TableHead />
|
|
214
213
|
|
|
215
214
|
{grouping?.length !== 0 ? (
|
|
216
|
-
|
|
215
|
+
getScrollElement ? (
|
|
217
216
|
isResizingColumn ? (
|
|
218
217
|
<MemoizedVirtualisedTableContent getScrollElement={getScrollElement} />
|
|
219
218
|
) : (
|
|
@@ -244,8 +243,8 @@ const VirtualizedTableContent = ({
|
|
|
244
243
|
const { getTotalSize, getVirtualItems } = useVirtualizer({
|
|
245
244
|
getScrollElement,
|
|
246
245
|
count: rows.length,
|
|
247
|
-
overscan:
|
|
248
|
-
estimateSize: () =>
|
|
246
|
+
overscan: 4,
|
|
247
|
+
estimateSize: () => 33,
|
|
249
248
|
});
|
|
250
249
|
|
|
251
250
|
const virtualRows = getVirtualItems();
|
|
@@ -275,7 +274,7 @@ const VirtualizedTableContent = ({
|
|
|
275
274
|
);
|
|
276
275
|
};
|
|
277
276
|
|
|
278
|
-
export const MemoizedVirtualisedTableContent = React.memo(VirtualizedTableContent);
|
|
277
|
+
export const MemoizedVirtualisedTableContent = React.memo(VirtualizedTableContent) as typeof VirtualizedTableContent;
|
|
279
278
|
|
|
280
279
|
const GroupedTableContent = () => {
|
|
281
280
|
const {
|
|
@@ -5,8 +5,10 @@
|
|
|
5
5
|
import { flexRender, type RowData } from '@tanstack/react-table';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
|
|
8
|
+
import { mx } from '@dxos/react-ui-theme';
|
|
9
|
+
|
|
8
10
|
import { useTableContext } from './TableContext';
|
|
9
|
-
import { theadResizeRoot, theadRoot, theadTh, theadTr } from '../../theme';
|
|
11
|
+
import { theadResizeRoot, theadResizeThumb, theadRoot, theadTh, theadTr } from '../../theme';
|
|
10
12
|
|
|
11
13
|
const TABLE_HEAD_NAME = 'TableHeader';
|
|
12
14
|
|
|
@@ -15,6 +17,7 @@ type TableHeadProps = {};
|
|
|
15
17
|
const TableHead = <TData extends RowData>(_props: TableHeadProps) => {
|
|
16
18
|
const tableContext = useTableContext<TData>(TABLE_HEAD_NAME);
|
|
17
19
|
const headerGroups = tableContext.table.getHeaderGroups();
|
|
20
|
+
const state = tableContext.table.getState();
|
|
18
21
|
|
|
19
22
|
return (
|
|
20
23
|
<thead className={theadRoot(tableContext)}>
|
|
@@ -31,8 +34,7 @@ const TableHead = <TData extends RowData>(_props: TableHeadProps) => {
|
|
|
31
34
|
|
|
32
35
|
{headerGroup.headers.map((header) => {
|
|
33
36
|
const isResizing = header.column.getIsResizing();
|
|
34
|
-
const
|
|
35
|
-
const resizable = header.column.columnDef.meta?.resizable;
|
|
37
|
+
const resizeHandler = header.getResizeHandler();
|
|
36
38
|
|
|
37
39
|
return (
|
|
38
40
|
<th
|
|
@@ -50,14 +52,17 @@ const TableHead = <TData extends RowData>(_props: TableHeadProps) => {
|
|
|
50
52
|
* Resize handle.
|
|
51
53
|
* https://codesandbox.io/p/sandbox/github/tanstack/table/tree/main/examples/react/column-sizing
|
|
52
54
|
*/}
|
|
53
|
-
|
|
54
|
-
{resizable && (
|
|
55
|
+
{header.column.columnDef.meta?.resizable && (
|
|
55
56
|
<div
|
|
56
|
-
className={theadResizeRoot(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
className={theadResizeRoot(tableContext, isResizing && 'hidden')}
|
|
58
|
+
style={{
|
|
59
|
+
transform: `translateX(${isResizing ? state.columnSizingInfo.deltaOffset : 0}px)`,
|
|
60
|
+
}}
|
|
61
|
+
onMouseDown={resizeHandler}
|
|
62
|
+
onTouchStart={resizeHandler}
|
|
63
|
+
>
|
|
64
|
+
<div className={mx(theadResizeThumb(tableContext))} />
|
|
65
|
+
</div>
|
|
61
66
|
)}
|
|
62
67
|
</th>
|
|
63
68
|
);
|
package/src/theme.ts
CHANGED
|
@@ -4,7 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
import { type CellContext } from '@tanstack/react-table';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
modalSurface,
|
|
9
|
+
fixedSurface,
|
|
10
|
+
focusRing,
|
|
11
|
+
ghostSelected,
|
|
12
|
+
ghostSelectedCurrent,
|
|
13
|
+
groupBorder,
|
|
14
|
+
mx,
|
|
15
|
+
} from '@dxos/react-ui-theme';
|
|
8
16
|
import { type ComponentFunction } from '@dxos/react-ui-types';
|
|
9
17
|
|
|
10
18
|
import { type TableContextValue, type TableFlags } from './components';
|
|
@@ -13,7 +21,7 @@ export const currentRow = '!bg-neutral-75 !dark:bg-neutral-850';
|
|
|
13
21
|
export const selectedRow = '!bg-primary-100 dark:!bg-primary-700';
|
|
14
22
|
export const flushPadding = 'pli-0 plb-0';
|
|
15
23
|
export const textPadding = 'pli-2 plb-0.5';
|
|
16
|
-
export const headPadding = 'pli-2 plb-1';
|
|
24
|
+
export const headPadding = 'pli-2 plb-1.5';
|
|
17
25
|
|
|
18
26
|
export const gridCellFocusRing =
|
|
19
27
|
'focus-within:z-[11] focus-within:outline outline-2 outline-primary-500 dark:outline-primary-400';
|
|
@@ -37,36 +45,27 @@ export const groupTh: ComponentFunction<TableStyleProps> = (_props, ...etc) =>
|
|
|
37
45
|
export type TheadStyleProps = Partial<TableFlags>;
|
|
38
46
|
|
|
39
47
|
export const theadRoot: ComponentFunction<TheadStyleProps> = ({ header, stickyHeader }, ...etc) =>
|
|
40
|
-
mx(
|
|
41
|
-
header ? stickyHeader && 'sticky block-start-[--sticky-top] z-[1]' : 'collapse',
|
|
42
|
-
header && 'base-surface',
|
|
43
|
-
'drop-shadow-sm',
|
|
44
|
-
...etc,
|
|
45
|
-
);
|
|
48
|
+
mx(header ? stickyHeader && 'sticky block-start-[--sticky-top] z-[1]' : 'collapse', header && fixedSurface, ...etc);
|
|
46
49
|
|
|
47
50
|
export const theadTr: ComponentFunction<TheadStyleProps> = (_props, ...etc) => mx('group', ...etc);
|
|
48
51
|
|
|
49
52
|
export const theadTh: ComponentFunction<TheadStyleProps> = ({ border }, ...etc) =>
|
|
50
53
|
mx(
|
|
51
|
-
'relative',
|
|
52
|
-
'text-start font-medium select-none truncate',
|
|
54
|
+
'relative text-start font-medium select-none truncate',
|
|
53
55
|
headPadding,
|
|
56
|
+
border && 'border',
|
|
54
57
|
border && groupBorder,
|
|
55
|
-
border && 'border border-t-0 border-b-0 border-neutral-200',
|
|
56
58
|
...etc,
|
|
57
59
|
);
|
|
58
60
|
|
|
59
|
-
export const theadResizeRoot: ComponentFunction<
|
|
60
|
-
|
|
61
|
-
'absolute h-full w-[
|
|
62
|
-
|
|
63
|
-
'user-select-none',
|
|
64
|
-
'touch-action-none',
|
|
65
|
-
!isResizing && 'group-hover:bg-neutral-100 dark:group-hover:bg-neutral-800',
|
|
66
|
-
'pointer-coarse:bg-neutral-100 dark:pointer-coarse:bg-neutral-800',
|
|
67
|
-
isResizing && 'bg-primary-500 dark:bg-primary-400',
|
|
61
|
+
export const theadResizeRoot: ComponentFunction<TheadStyleProps> = (_props, ...etc) =>
|
|
62
|
+
mx(
|
|
63
|
+
'absolute top-0 pis-1 h-full z-[10] w-[7px] -right-[5px] cursor-col-resize select-none touch-none opacity-20 hover:opacity-100',
|
|
64
|
+
...etc,
|
|
68
65
|
);
|
|
69
|
-
|
|
66
|
+
|
|
67
|
+
export const theadResizeThumb: ComponentFunction<TheadStyleProps> = (_props, ...etc) =>
|
|
68
|
+
mx('flex group-hover:bg-neutral-700 -ml-[2px] w-[1px] h-full', ...etc);
|
|
70
69
|
|
|
71
70
|
//
|
|
72
71
|
// tbody
|