@dxos/react-ui-table 0.5.9-main.bd82576 → 0.5.9-main.bdb299c
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 +7 -8
- 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 +3 -3
- package/dist/types/src/components/Table/Table.d.ts.map +1 -1
- package/dist/types/src/components/Table/TableContext.d.ts +2 -2
- package/dist/types/src/components/Table/TableContext.d.ts.map +1 -1
- package/package.json +15 -15
- package/src/components/ColumnMenu/ColumnMenu.stories.tsx +2 -2
- package/src/components/Table/Table.tsx +14 -5
- package/src/components/Table/TableContext.tsx +4 -9
- package/src/helpers.tsx +2 -2
|
@@ -301,8 +301,7 @@ var TableProvider = ({ children, ...value }) => {
|
|
|
301
301
|
}, children);
|
|
302
302
|
};
|
|
303
303
|
var useTableContext = () => {
|
|
304
|
-
|
|
305
|
-
return context;
|
|
304
|
+
return useContext(TableContext);
|
|
306
305
|
};
|
|
307
306
|
|
|
308
307
|
// packages/ui/react-ui-table/src/hooks/useColumnSorting.ts
|
|
@@ -585,7 +584,7 @@ var SortIndicator = ({ direction, onClick }) => {
|
|
|
585
584
|
// packages/ui/react-ui-table/src/components/Table/Table.tsx
|
|
586
585
|
import { Slot } from "@radix-ui/react-slot";
|
|
587
586
|
import { getCoreRowModel, getExpandedRowModel, getGroupedRowModel, getSortedRowModel, useReactTable } from "@tanstack/react-table";
|
|
588
|
-
import React9, { Fragment, useCallback as useCallback6, useEffect as useEffect3, useState as useState8, useContext as useContext3 } from "react";
|
|
587
|
+
import React9, { Fragment, useCallback as useCallback6, useEffect as useEffect3, useState as useState8, useContext as useContext3, memo } from "react";
|
|
589
588
|
import { useDefaultValue } from "@dxos/react-ui";
|
|
590
589
|
import { mx as mx5 } from "@dxos/react-ui-theme";
|
|
591
590
|
|
|
@@ -915,7 +914,7 @@ var TableImpl = (props) => {
|
|
|
915
914
|
}, /* @__PURE__ */ React9.createElement("code", null, JSON.stringify(table.getState(), void 0, 2)));
|
|
916
915
|
}
|
|
917
916
|
const isResizingColumn = table.getState().columnSizingInfo.isResizingColumn;
|
|
918
|
-
const TableComponent = isResizingColumn ?
|
|
917
|
+
const TableComponent = isResizingColumn ? MemoizedVirtualizedTableContent : VirtualizedTableContent;
|
|
919
918
|
return /* @__PURE__ */ React9.createElement("table", {
|
|
920
919
|
role,
|
|
921
920
|
className: tableRoot(props, classNames),
|
|
@@ -974,7 +973,7 @@ var VirtualizedTableContent = () => {
|
|
|
974
973
|
role: "none"
|
|
975
974
|
}))));
|
|
976
975
|
};
|
|
977
|
-
var
|
|
976
|
+
var MemoizedVirtualizedTableContent = /* @__PURE__ */ memo(VirtualizedTableContent);
|
|
978
977
|
var GroupedTableContent = () => {
|
|
979
978
|
const { table: { getGroupedRowModel: getGroupedRowModel2, getHeaderGroups, getState }, debug } = useTableContext();
|
|
980
979
|
return /* @__PURE__ */ React9.createElement(React9.Fragment, null, getGroupedRowModel2().rows.map((row, i) => {
|
|
@@ -1348,7 +1347,7 @@ var ColumnBuilder = class {
|
|
|
1348
1347
|
size: 50,
|
|
1349
1348
|
minSize: 50,
|
|
1350
1349
|
header: (column) => label ?? column.header.id,
|
|
1351
|
-
// TODO(
|
|
1350
|
+
// TODO(zan): Implement sort algorithm
|
|
1352
1351
|
enableSorting: true,
|
|
1353
1352
|
cell: SwitchBuilderCell,
|
|
1354
1353
|
...props,
|
|
@@ -1373,7 +1372,7 @@ var ColumnBuilder = class {
|
|
|
1373
1372
|
const IconOff = off?.Icon ?? X3;
|
|
1374
1373
|
return {
|
|
1375
1374
|
size: size ?? 32,
|
|
1376
|
-
// TODO(
|
|
1375
|
+
// TODO(zan): Implement sort algorithm
|
|
1377
1376
|
enableSorting: false,
|
|
1378
1377
|
header: (column) => /* @__PURE__ */ React10.createElement("div", {
|
|
1379
1378
|
className: "justify-center"
|
|
@@ -1551,7 +1550,7 @@ export {
|
|
|
1551
1550
|
ColumnBuilder,
|
|
1552
1551
|
ColumnMenu,
|
|
1553
1552
|
ColumnSettingsForm,
|
|
1554
|
-
|
|
1553
|
+
MemoizedVirtualizedTableContent,
|
|
1555
1554
|
SortIndicator,
|
|
1556
1555
|
Table,
|
|
1557
1556
|
TablePrimitive,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/translations.ts", "../../../src/components/Cell/CellCombobox.tsx", "../../../src/components/ColumnMenu/ColumnMenu.tsx", "../../../src/components/ColumnMenu/ColumnSettingsForm.tsx", "../../../src/hooks/useColumnSizing.ts", "../../../src/hooks/useColumnSorting.ts", "../../../src/components/Table/TableContext.tsx", "../../../src/hooks/usePinLastRow.ts", "../../../src/hooks/useRowSelection.ts", "../../../src/components/Table/Table.tsx", "../../../src/components/Table/TableBody.tsx", "../../../src/components/Table/TableRootContext.ts", "../../../src/theme.ts", "../../../src/components/Cell/Cell.tsx", "../../../src/components/Table/TableFooter.tsx", "../../../src/components/Table/TableHead.tsx", "../../../src/helpers.tsx", "../../../src/schema/schema.ts", "../../../src/schema/schemaToColumns.ts"],
|
|
4
|
-
"sourcesContent": ["//\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//\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 2024 DXOS.org\n//\n\nimport { X, GearSix, CaretDown, ArrowDown, ArrowUp, ArrowRight, ArrowLeft } from '@phosphor-icons/react';\nimport { type SortDirection, type HeaderContext, type RowData } from '@tanstack/react-table';\nimport React, { useRef, useState, useCallback } from 'react';\n\nimport { Button, DensityProvider, Popover, DropdownMenu } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { ColumnSettingsForm } from './ColumnSettingsForm';\nimport { useSortColumn } from '../../hooks';\nimport { type TableDef, type ColumnProps } from '../../schema';\n\nexport type ColumnMenuProps<TData extends RowData, TValue> = {\n context: HeaderContext<TData, TValue>;\n tablesToReference: TableDef[];\n tableDef: TableDef;\n column: ColumnProps;\n columnOrderable: boolean;\n columnPosition: 'start' | 'end' | undefined;\n onColumnReorder: (columnId: string, direction: 'left' | 'right') => void;\n onUpdate?: (id: string, column: ColumnProps) => void;\n onDelete?: (id: string) => void;\n};\n\nexport const ColumnMenu = <TData extends RowData, TValue>({\n column,\n columnOrderable,\n columnPosition,\n onColumnReorder,\n ...props\n}: ColumnMenuProps<TData, TValue>) => {\n const title = column.label?.length ? column.label : column.id;\n const header = props.context.header;\n\n const { canSort, sortDirection, onSelectSort, onToggleSort, onClearSort } = useSortColumn(header.column);\n\n const columnSettingsAnchorRef = useRef<any>(null);\n\n const [isColumnSettingsOpen, setIsColumnSettingsOpen] = useState(false);\n\n const shouldPreventFocusOnClose = useRef(false);\n\n const onOpenColumnSettings = useCallback(() => {\n shouldPreventFocusOnClose.current = true;\n setIsColumnSettingsOpen(true);\n }, [shouldPreventFocusOnClose, setIsColumnSettingsOpen]); // setIsColumnSettingsOpen is a dependency\n\n const onDropdownCloseAutoFocus = useCallback(\n (event: Event) => {\n if (shouldPreventFocusOnClose.current) {\n event.preventDefault();\n shouldPreventFocusOnClose.current = false;\n }\n },\n [shouldPreventFocusOnClose],\n );\n\n return (\n <div className='flex items-center justify-center justify-between'>\n <div className='flex items-center gap-1 truncate' title={title}>\n <SortIndicator direction={sortDirection} onClick={onToggleSort} />\n <div className='truncate'>{title}</div>\n </div>\n\n <DropdownMenu.Root modal={false}>\n <Popover.Root open={isColumnSettingsOpen} onOpenChange={setIsColumnSettingsOpen} modal={false}>\n <DropdownMenu.Trigger ref={columnSettingsAnchorRef} asChild>\n <Popover.Anchor asChild>\n <Button variant='ghost'>\n <CaretDown className={getSize(4)} />\n </Button>\n </Popover.Anchor>\n </DropdownMenu.Trigger>\n\n <DropdownMenu.Portal>\n <DropdownMenu.Content onCloseAutoFocus={onDropdownCloseAutoFocus} sideOffset={4} collisionPadding={8}>\n <DropdownMenu.Viewport>\n {canSort && (\n <>\n <DropdownMenu.Item onClick={() => onSelectSort('asc')}>\n <span className='grow'>Sort ascending</span>\n <span className='opacity-50'>\n <ArrowUp className={getSize(4)} />\n </span>\n </DropdownMenu.Item>\n <DropdownMenu.Item onClick={() => onSelectSort('desc')}>\n <span className='grow'>Sort descending</span>\n <span className='opacity-50'>\n <ArrowDown className={getSize(4)} />\n </span>\n </DropdownMenu.Item>\n {sortDirection && (\n <DropdownMenu.Item onClick={onClearSort}>\n <span className='grow'>Clear sort</span>\n <span className='opacity-50'>\n <X className={getSize(4)} />\n </span>\n </DropdownMenu.Item>\n )}\n </>\n )}\n\n {columnOrderable && (\n <>\n {columnPosition !== 'start' && (\n <DropdownMenu.Item onClick={() => onColumnReorder(header.column.id, 'left')}>\n <span className='grow'>Move left</span>\n <span className='opacity-50'>\n <ArrowLeft className={mx(getSize(4))} />\n </span>\n </DropdownMenu.Item>\n )}\n {columnPosition !== 'end' && (\n <DropdownMenu.Item onClick={() => onColumnReorder(header.column.id, 'right')}>\n <span className='grow'>Move right</span>\n <span className='opacity-50'>\n <ArrowRight className={mx(getSize(4))} />\n </span>\n </DropdownMenu.Item>\n )}\n </>\n )}\n\n <DropdownMenu.Item onClick={onOpenColumnSettings}>\n <span className='grow'>Column settings</span>\n <span className='opacity-50'>\n <GearSix className={mx(getSize(4), 'rotate-90')} />\n </span>\n </DropdownMenu.Item>\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n\n <Popover.Portal>\n <Popover.Content>\n <Popover.Viewport classNames='w-60'>\n <DensityProvider density='fine'>\n <ColumnSettingsForm {...props} column={column} onClose={() => setIsColumnSettingsOpen(false)} />\n </DensityProvider>\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </DropdownMenu.Root>\n </div>\n );\n};\n\nexport const SortIndicator = ({\n direction,\n onClick,\n}: {\n direction: SortDirection | undefined;\n onClick: (e: any) => void;\n}) => {\n if (direction === undefined) {\n return null;\n }\n\n let icon;\n\n switch (direction) {\n case 'asc':\n icon = <ArrowUp className={getSize(3)} />;\n break;\n case 'desc':\n icon = <ArrowDown className={getSize(3)} />;\n break;\n }\n\n return (\n <div onClick={onClick} className='flex items-center cursor-pointer'>\n {icon}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\nimport { Check, Trash, X } from '@phosphor-icons/react';\nimport React, { type FC, type PropsWithChildren, useRef, useState } from 'react';\n\nimport { Button, Input, Select, Separator, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\nimport { safeParseInt } from '@dxos/util';\n\nimport { type TableDef, type ColumnProps, type ColumnType } from '../../schema';\nimport { translationKey } from '../../translations';\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 type ColumnSettingsFormProps = {\n column: ColumnProps;\n tableDef: TableDef;\n tablesToReference: TableDef[];\n onUpdate?: ((id: string, column: ColumnProps) => void) | undefined;\n onDelete?: ((id: string) => void) | undefined;\n onClose?: () => void;\n};\n\nexport const ColumnSettingsForm = ({\n column,\n tableDef,\n tablesToReference,\n onUpdate,\n onDelete,\n onClose,\n}: ColumnSettingsFormProps) => {\n const [formState, setFormState] = useState({\n prop: column.id,\n refTable: column.refTable,\n refProp: column.refProp,\n type: String(column.type),\n label: column.label,\n digits: String(column.digits ?? '0'),\n });\n\n const propRef = useRef<HTMLInputElement>(null);\n const { t } = useTranslation(translationKey);\n\n const handleCancel = () => {\n onClose?.();\n };\n\n const handleSave = () => {\n const { prop, refTable, refProp, type, label, digits } = formState;\n\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?.(column.id, {\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 onClose?.();\n };\n\n const handleDelete = () => {\n onDelete?.(column.id);\n onClose?.();\n };\n\n return (\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={formState.label ?? ''}\n onChange={(event) => setFormState((prevState) => ({ ...prevState, label: 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 value={formState.prop ?? ''}\n onChange={(event) =>\n setFormState((prevState) => ({ ...prevState, prop: event.target.value.replace(/[^\\w_]/g, '') }))\n }\n />\n </Input.Root>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('column type label')}</Input.Label>\n <Select.Root\n value={formState.type}\n onValueChange={(value) => setFormState((prevState) => ({ ...prevState, type: value }))}\n >\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 {formState.type === 'number' && (\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('digits label')}</Input.Label>\n <Input.TextInput\n value={formState.digits ?? ''}\n onChange={(event) => setFormState((prevState) => ({ ...prevState, digits: event.target.value }))}\n />\n </Input.Root>\n </Section>\n )}\n\n {formState.type === 'ref' && (\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>Table</Input.Label>\n <Select.Root\n value={formState.refTable}\n onValueChange={(value) => setFormState((prevState) => ({ ...prevState, refTable: value }))}\n >\n <Select.TriggerButton placeholder='Table' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {tablesToReference\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 {formState.refTable && (\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>Table property</Input.Label>\n <Select.Root\n value={formState.refProp}\n onValueChange={(value) => setFormState((prevState) => ({ ...prevState, refProp: value }))}\n >\n <Select.TriggerButton placeholder='Property' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {tablesToReference\n .find((tableDef) => tableDef.id === formState.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 <Separator classNames='mli-2' />\n\n <Section className='space-b-1.5'>\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={handleDelete}>\n <span>{t('delete label')}</span>\n <div className='grow' />\n <Trash className={getSize(5)} />\n </Button>\n </Section>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\nimport { type ColumnSizingInfoState, type ColumnSizingState } from '@tanstack/react-table';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { useOnTransition } from '@dxos/react-ui';\n\nimport { type TableColumnDef } from '../components/Table';\n\nexport const useColumnResizing = ({\n columns,\n onColumnResize,\n}: {\n columns: TableColumnDef<any>[];\n onColumnResize: ((state: Record<string, number>) => void) | undefined;\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 return { columnSizing, columnSizingInfo, setColumnSizing, setColumnSizingInfo };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type SortDirection, type Column, type ColumnSort } from '@tanstack/react-table';\nimport { useState } from 'react';\n\nimport { useTableContext } from '../components/Table/TableContext';\n\nexport const useColumnSorting = () => {\n const [columnSorting, setColumnSorting] = useState<ColumnSort[]>([]);\n\n const sortColumn = (columnId: string, sortDirection: SortDirection) => {\n setColumnSorting([{ id: columnId, desc: sortDirection === 'desc' }]);\n };\n\n const clearColumnSorting = () => {\n setColumnSorting([]);\n };\n\n return { sorting: columnSorting, sortColumn, clearColumnSorting };\n};\n\nexport type ColumnSorting = ReturnType<typeof useColumnSorting>;\n\nexport const useSortColumn = (column: Column<any>) => {\n const { sorting, sortColumn, clearColumnSorting } = useTableContext();\n const [initialSortDirection, setInitialSortDirection] = useState<SortDirection | undefined>();\n\n const columnSort = sorting.find((s) => s.id === column.id);\n const sortDirection = columnSort ? (columnSort.desc ? ('desc' as const) : ('asc' as const)) : undefined;\n\n const canSort = column.getCanSort();\n\n const updateColumnSort = (direction: SortDirection) => {\n sortColumn(column.id, direction);\n };\n\n // Whichever sort is explicitly set first, will be the first sort direction\n // When toggling, we always go to the other direction, and then to unsorted.\n const onToggleSort = () => {\n if (sortDirection === undefined) {\n return;\n }\n\n if (sortDirection === initialSortDirection) {\n updateColumnSort(initialSortDirection === 'asc' ? 'desc' : 'asc');\n } else {\n clearColumnSorting();\n }\n };\n\n const onSelectSort = (direction: SortDirection) => {\n clearColumnSorting();\n setInitialSortDirection(direction);\n updateColumnSort(direction);\n };\n\n const onClearSort = () => {\n clearColumnSorting();\n };\n\n return { canSort, sortDirection, onSelectSort, onToggleSort, onClearSort };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type RowData } from '@tanstack/react-table';\nimport React, { useContext, createContext, type ReactNode } from 'react';\n\nimport { type TableContextValue } from './props';\n\nexport const TABLE_NAME = 'Table';\n\n// Create the context without a default value.\n// The expectation is that the provider will always supply a value, so no need to define a default here.\nconst TableContext = createContext<TableContextValue<RowData>>({} as TableContextValue<RowData>);\n\nexport type TypedTableProvider<TData extends RowData> = {\n (props: TableContextValue<TData> & { children: ReactNode }): JSX.Element;\n displayName: string;\n};\n\nexport const TableProvider: React.FC<TableContextValue<RowData> & { children: ReactNode }> = ({\n children,\n ...value\n}) => {\n return <TableContext.Provider value={value}>{children}</TableContext.Provider>;\n};\n\n// Create a custom hook to consume the context\nexport const useTableContext = <TData extends RowData>(): TableContextValue<TData> => {\n const context = useContext(TableContext as React.Context<TableContextValue<TData>>);\n\n return context;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Row, type Table } from '@tanstack/react-table';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { useTableRootContext } from '../components';\n\nexport const usePinLastRow = (pinLastRow: boolean | undefined, table: Table<any>, data: any[]) => {\n const { scrollContextRef } = useTableRootContext();\n const [pinnedRowKey, setPinnedRowKey] = useState<string>();\n\n // Scrolls to the bottom of a scrollable element.\n const scrollToBottom = useCallback(() => {\n const element = scrollContextRef.current;\n const scrollHeight = element?.scrollHeight;\n\n if (element && scrollHeight) {\n requestAnimationFrame(() => element.scrollTo({ top: scrollHeight }));\n }\n }, []);\n\n const pinRow = useCallback(\n (rowToPin: Row<any>) => {\n table.resetRowPinning();\n rowToPin.pin('bottom');\n setPinnedRowKey(rowToPin.id);\n },\n [table],\n );\n\n const clearRowPinning = useCallback(() => {\n table.resetRowPinning();\n setPinnedRowKey(undefined);\n }, [table]);\n\n // Define the logic for pinning the last row in a callback.\n const pinLastRowCallback = useCallback(() => {\n const rows = table.getRowModel().rows;\n\n if (rows.length === 0) {\n return clearRowPinning();\n }\n\n const lastRow = rows[rows.length - 1];\n if (lastRow.id === pinnedRowKey) {\n return;\n }\n\n pinRow(lastRow);\n\n if (pinnedRowKey !== undefined) {\n scrollToBottom();\n }\n }, [table, scrollToBottom, pinnedRowKey]);\n\n // Effect to handle pinning logic when data changes.\n useEffect(() => {\n if (pinLastRow) {\n pinLastRowCallback();\n }\n }, [data, pinLastRow, pinLastRowCallback]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { type OnChangeFn, type RowSelectionState } from '@tanstack/react-table';\nimport { useCallback } from 'react';\n\nimport { type TableProps } from '../components/Table';\n\nexport const useRowSelection = (\n props: Pick<\n TableProps<any>,\n 'rowsSelectable' | 'defaultRowSelection' | 'rowSelection' | 'onRowSelectionChange' | 'rowsSelectable'\n >,\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 (props.rowsSelectable === 'multi') {\n setRowSelection(nextRowSelection);\n } else if (props.rowsSelectable) {\n const nextRowSelectionKey = Object.keys(nextRowSelection).filter((id) => !rowSelection[id])[0];\n setRowSelection(nextRowSelectionKey ? { [nextRowSelectionKey]: true } : {});\n } else {\n setRowSelection({});\n }\n },\n [props.rowsSelectable, setRowSelection, rowSelection],\n );\n\n return { rowSelection, handleRowSelectionChange };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Primitive } from '@radix-ui/react-primitive';\nimport { Slot } from '@radix-ui/react-slot';\nimport {\n type GroupingState,\n type Row,\n type RowData,\n getCoreRowModel,\n getExpandedRowModel,\n getGroupedRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table';\nimport React, { type ComponentPropsWithoutRef, Fragment, useCallback, useEffect, useState, useContext } from 'react';\n\nimport { type ThemedClassName, useDefaultValue } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { TableBody } from './TableBody';\nimport { type TypedTableProvider, TableProvider as UntypedTableProvider, useTableContext } from './TableContext';\nimport { TableFooter } from './TableFooter';\nimport { TableHead } from './TableHead';\nimport { TableRootContext, useTableRootContext } from './TableRootContext';\nimport { type TableProps } from './props';\nimport { useColumnResizing, useColumnSorting, usePinLastRow, useRowSelection } from '../../hooks';\nimport { groupTh, tableRoot } from '../../theme';\n\ntype TableRootProps = { children: React.ReactNode };\n\nconst TableRoot = ({ children }: TableRootProps) => {\n const contextValue = useTableRootContext();\n return <TableRootContext.Provider value={contextValue}>{children}</TableRootContext.Provider>;\n};\n\ntype TableViewportProps = ThemedClassName<ComponentPropsWithoutRef<typeof Primitive.div>> & {\n asChild?: boolean;\n};\n\nconst TableViewport = ({ children, classNames, asChild, ...props }: TableViewportProps) => {\n const { scrollContextRef } = useContext(TableRootContext);\n\n const classes = mx(classNames, 'overflow-auto');\n\n return asChild ? (\n <Slot ref={scrollContextRef} className={classes} {...props}>\n {children}\n </Slot>\n ) : (\n <div role='none' className={classes} ref={scrollContextRef} {...props}>\n {children}\n </div>\n );\n};\n\nexport const TablePrimitive = <TData extends RowData>(props: TableProps<TData>) => {\n const {\n role,\n onColumnResize,\n columnVisibility,\n header = true,\n rowsSelectable,\n debug,\n onDataSelectionChange,\n pinLastRow,\n } = props;\n\n const columns = useDefaultValue(props.columns, []);\n const incomingData = useDefaultValue(props.data, []);\n\n const [data, setData] = useState([...incomingData]);\n\n // Reactivity workaround: https://github.com/dxos/dxos/issues/6376.\n const forceUpdate = useCallback(() => setData([...incomingData]), [incomingData]);\n useEffect(() => forceUpdate(), [JSON.stringify(incomingData), forceUpdate]);\n\n const TableProvider = UntypedTableProvider as TypedTableProvider<TData>;\n\n const { columnSizing, setColumnSizing, columnSizingInfo, setColumnSizingInfo } = useColumnResizing({\n columns,\n onColumnResize,\n });\n\n const { rowSelection, handleRowSelectionChange } = useRowSelection(props);\n\n const [grouping, handleGroupingChange] = useState<GroupingState>(props.grouping ?? []);\n useEffect(() => handleGroupingChange(props.grouping ?? []), [handleGroupingChange, props.grouping]);\n\n const columnSorting = useColumnSorting();\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 sorting: columnSorting.sorting,\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 usePinLastRow(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 return (\n <TableProvider\n {...{ ...props, ...columnSorting }}\n table={table}\n header={header}\n expand={expand}\n isGrid={role === 'grid' || role === 'treegrid'}\n >\n <TableImpl<TData> debug={false} {...props} />\n </TableProvider>\n );\n};\n\n// TODO(Zan): Smush this into the Table component.\n/**\n * Pure implementation of table outside of context set-up.\n */\nconst TableImpl = <TData extends RowData>(props: TableProps<TData>) => {\n const { debug, classNames, role, footer, grouping, fullWidth } = props;\n const { table } = useTableContext<TData>();\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 const TableComponent = isResizingColumn ? MemoizedVirtualisedTableContent : VirtualizedTableContent;\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 ? <TableComponent /> : <GroupedTableContent />}\n\n {footer && <TableFooter />}\n </table>\n );\n};\n\nconst VirtualizedTableContent = () => {\n const { table } = useTableContext();\n const { virtualizer, dispatch } = useContext(TableRootContext);\n\n const centerRows = table.getCenterRows();\n let pinnedRows = [] as Row<unknown>[];\n\n useEffect(() => {\n dispatch({ type: 'updateTableCount', count: centerRows.length });\n }, [centerRows.length]);\n\n try {\n // TODO(zan): Work out how to sync the row pinning with rendering\n // This is a hack because the first call to this function after a row is deleted will throw an error\n // because the row index is no longer in the table\n // The pin last row hook updates the pinned row key after the row is deleted\n pinnedRows = table.getBottomRows();\n } catch (_) {} // Ignore error\n\n const { getTotalSize, getVirtualItems } = virtualizer;\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 const rowsToRender = [...virtualRows.map((virtualRow) => centerRows[virtualRow.index]), ...pinnedRows].filter(\n (r) => !!r,\n );\n\n return (\n <Fragment>\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={rowsToRender} />\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 </Fragment>\n );\n};\n\nexport const MemoizedVirtualisedTableContent = React.memo(VirtualizedTableContent);\n\nconst GroupedTableContent = () => {\n const {\n table: { getGroupedRowModel, getHeaderGroups, getState },\n debug,\n } = useTableContext();\n\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// TODO(burdon): Floating \"add row\" jumps by 1 pixel on scroll.\n// TODO(burdon): Blue focus highlight is clipped by 1px on the left.\n// TODO(burdon): Focused row and focus ring passes over the sticky header.\nexport const Table = {\n Root: TableRoot,\n Viewport: TableViewport,\n Main: TablePrimitive,\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, { useContext } from 'react';\n\nimport { useTableContext } from './TableContext';\nimport { TableRootContext } from './TableRootContext';\nimport { tbodyTr } from '../../theme';\nimport { Cell } from '../Cell/Cell';\n\nconst TABLE_BODY_NAME = 'TableBody';\n\ntype TableBodyProps = {\n rows: Row<RowData>[];\n};\n\nconst TableBody = ({ rows }: TableBodyProps) => {\n const { table, keyAccessor, currentDatum, debug, expand, isGrid, onDatumClick } = useTableContext();\n\n const rowSelection = table.getState().rowSelection;\n const domAttributes = useArrowNavigationGroup({ axis: 'grid' });\n const canBeCurrent = !isGrid && !!onDatumClick;\n\n const { virtualizer } = useContext(TableRootContext);\n\n return (\n <tbody {...(isGrid && domAttributes)}>\n {rows.map((row) => {\n const isCurrent = currentDatum === row.original;\n const isSelected = rowSelection?.[row.id];\n\n const isPinned = row.getIsPinned();\n\n const classNames = tbodyTr({ canBeCurrent, isPinned: isPinned !== false });\n\n return (\n <tr\n key={keyAccessor ? keyAccessor(row.original) : row.id}\n className={classNames}\n data-index={row.index}\n ref={virtualizer.measureElement}\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 2024 DXOS.org\n//\n\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport { createContext, useRef, useState } from 'react';\n\ntype TableRootContextActions = { type: 'updateTableCount'; count: number };\n\nexport const useTableRootContext = () => {\n const scrollContextRef = useRef<HTMLDivElement>(null);\n const [tableCount, setTableCount] = useState(0);\n\n const virtualizer = useVirtualizer({\n getScrollElement: () => scrollContextRef?.current ?? null,\n count: tableCount,\n overscan: 8,\n estimateSize: () => 40,\n });\n\n const dispatch = (action: TableRootContextActions) => {\n switch (action.type) {\n case 'updateTableCount':\n setTableCount(action.count);\n break;\n\n default:\n break;\n }\n };\n\n return { scrollContextRef, virtualizer, dispatch };\n};\n\nexport type TableRootContextValue = ReturnType<typeof useTableRootContext>;\n\n// Create the context without a default value.\n// The expectation is that the provider will always supply a value, so no need to define a default here.\nexport const TableRootContext = createContext<TableRootContextValue>({} as TableRootContextValue);\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 = '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; isPinned?: boolean }>;\nexport const tbodyTr: ComponentFunction<TbodyTrStyleProps> = ({ canBeCurrent, isPinned }, ...etc) =>\n mx(\n 'group',\n canBeCurrent ? ghostSelectedCurrent : ghostSelected,\n canBeCurrent && focusRing,\n canBeCurrent && 'cursor-pointer rounded',\n isPinned && 'sticky z-1 bottom-[-1px] base-surface',\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();\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();\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();\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 } 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 = (props: TableFooterProps) => {\n const tableContext = useTableContext();\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 } 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 = (_props: TableHeadProps) => {\n const tableContext = useTableContext();\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 { 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, { useCallback, 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\n const getInitialValue = useCallback(() => {\n // TODO(burdon): Temporary shim for automerge.\n return (initialValue as any)?.content ?? initialValue;\n }, [initialValue]);\n\n const [value, setValue] = useState(getInitialValue);\n\n // Update value if initialValue changes externally (cell reactivity).\n useEffect(() => setValue(getInitialValue()), [getInitialValue]);\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: { ...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();\n const checked = table.getIsSomeRowsSelected() ? 'indeterminate' : table.getIsAllRowsSelected();\n\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 /**\n * This display column type is for nested/unhandled data to appear as JSON.\n */\n display({ label, classNames, ...props }: KeyColumnOptions<TData> = {}): Partial<ColumnDef<TData, PublicKey>> {\n return {\n size: 120,\n minSize: 120,\n header: (cell) => label ?? cell.header.id,\n cell: (cell) => {\n const value = cell.getValue();\n\n return (\n <div className='overflow-scroll'>\n <code className='text-xs'>{JSON.stringify(value)}</code>\n </div>\n );\n },\n ...props,\n meta: { ...props.meta, cell: { ...props.meta?.cell, classNames: ['font-mono', textPadding, classNames] } },\n };\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as AST from '@effect/schema/AST';\nimport type * as S from '@effect/schema/Schema';\n\nimport { type ColumnType } from './types';\n\n// TODO(burdon): Reconcile with react-ui-table.\nexport type ClassifiedColumnType = ColumnType | 'display';\n\n// TODO(burdon): Rename getX? and return typed array?\nexport const classifySchemaProperties = (schema: S.Schema<any, any>): [string, ClassifiedColumnType][] => {\n const recurse = (node: AST.AST, path: string[], acc: [string, ClassifiedColumnType][]) => {\n const properties = AST.getPropertySignatures(node);\n properties.forEach((prop) => {\n const propName = prop.name.toString();\n\n if (prop.isOptional) {\n const unwrappedAst = unwrapOptionProperty(prop);\n if (isStruct(unwrappedAst)) {\n return recurse(unwrappedAst, [...path, propName], acc);\n }\n }\n\n if (isStruct(prop.type)) {\n recurse(prop.type, [...path, propName], acc);\n } else {\n acc.push([path.concat(propName).join('.'), propertyToColumn(prop)]);\n }\n });\n\n return acc;\n };\n\n return recurse(schema.ast, [], []);\n};\n\nconst isStruct = (node: AST.AST) => AST.isTypeLiteral(node);\n\nconst isOptionalUnion = (prop: AST.PropertySignature) => AST.isUnion(prop.type) && prop.isOptional;\n\nconst unwrapOptionProperty = (prop: AST.PropertySignature) => {\n if (!isOptionalUnion(prop)) {\n throw new Error(`Not an optional property: ${String(prop.name)}`);\n }\n\n if (!AST.isUnion(prop.type)) {\n throw new Error(`Not a union type: ${String(prop.name)}`);\n }\n\n const [type, _undefinedCase] = prop.type.types;\n return type;\n};\n\nconst typeToColumn = (type: AST.AST): ClassifiedColumnType => {\n if (AST.isStringKeyword(type)) {\n return 'string';\n } else if (AST.isNumberKeyword(type)) {\n return 'number';\n } else if (AST.isBooleanKeyword(type)) {\n return 'boolean';\n }\n\n if (AST.isRefinement(type)) {\n return typeToColumn(type.from);\n }\n\n // TODO(zan): How should we be thinking about transformations?\n // - Which of these are we storing in the database?\n // - For types that aren't the 'DateFromString' transformation, should we be using the 'from' or 'to' type?\n\n if (AST.isTransformation(type)) {\n const identifier = AST.getIdentifierAnnotation(type);\n if (identifier._tag === 'Some') {\n if (identifier.value === 'DateFromString') {\n return 'date';\n }\n }\n }\n\n return 'display';\n};\n\nconst propertyToColumn = (prop: AST.PropertySignature): ClassifiedColumnType => {\n let type = prop.type;\n if (prop.isOptional) {\n type = unwrapOptionProperty(prop);\n }\n\n return typeToColumn(type);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ColumnDef } from '@tanstack/react-table';\n\nimport type { S } from '@dxos/echo-schema';\n\nimport { classifySchemaProperties } from './schema';\nimport { createColumnBuilder } from '../helpers';\n\nexport const schemaToColumnDefs = <T>(schema: S.Schema<T, any>): ColumnDef<T, any>[] => {\n const { helper, builder } = createColumnBuilder<T>();\n\n const classified = classifySchemaProperties(schema);\n return classified.map(([name, type]) => {\n const propertyKey = name.toString();\n\n let column: Partial<ColumnDef<any, any>> | undefined;\n switch (type) {\n case 'string': {\n column = builder.string({ label: propertyKey });\n break;\n }\n case 'number': {\n column = builder.number({ label: propertyKey });\n break;\n }\n case 'boolean': {\n column = builder.switch({ label: propertyKey });\n break;\n }\n case 'date': {\n column = builder.date({ label: propertyKey });\n break;\n }\n case 'display': {\n column = builder.display({ label: propertyKey, id: propertyKey });\n break;\n }\n default: {\n throw new Error(`Unhandled column type: ${type}`);\n }\n }\n\n return helper.accessor(propertyKey as any, column);\n });\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["translationKey", "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", "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", "X", "GearSix", "CaretDown", "ArrowDown", "ArrowUp", "ArrowRight", "ArrowLeft", "React", "useRef", "useState", "useCallback", "Button", "DensityProvider", "Popover", "DropdownMenu", "getSize", "mx", "Check", "Trash", "X", "React", "useRef", "useState", "Button", "Input", "Select", "Separator", "useTranslation", "getSize", "mx", "safeParseInt", "Section", "children", "className", "React", "div", "role", "mx", "ColumnSettingsForm", "column", "tableDef", "tablesToReference", "onUpdate", "onDelete", "onClose", "formState", "setFormState", "useState", "prop", "id", "refTable", "refProp", "type", "String", "label", "digits", "propRef", "useRef", "t", "useTranslation", "translationKey", "handleCancel", "handleSave", "length", "match", "current", "focus", "columns", "find", "c", "safeParseInt", "handleDelete", "Input", "Root", "Label", "classNames", "TextInput", "placeholder", "value", "onChange", "event", "prevState", "target", "autoFocus", "ref", "replace", "Select", "onValueChange", "TriggerButton", "Portal", "Content", "Viewport", "map", "Option", "key", "filter", "name", "Separator", "Button", "variant", "onClick", "span", "Check", "getSize", "ns", "X", "Trash", "useCallback", "useEffect", "useState", "useOnTransition", "useColumnResizing", "columns", "onColumnResize", "columnsInitialised", "setColumnsInitialised", "useState", "columnSizing", "setColumnSizing", "useEffect", "filter", "column", "size", "prop", "undefined", "reduce", "state", "columnSizingInfo", "setColumnSizingInfo", "notifyColumnResize", "useCallback", "useOnTransition", "isResizingColumn", "v", "useState", "React", "useContext", "createContext", "TableContext", "createContext", "TableProvider", "children", "value", "React", "Provider", "useTableContext", "context", "useContext", "useColumnSorting", "columnSorting", "setColumnSorting", "useState", "sortColumn", "columnId", "sortDirection", "id", "desc", "clearColumnSorting", "sorting", "useSortColumn", "column", "useTableContext", "initialSortDirection", "setInitialSortDirection", "columnSort", "find", "s", "undefined", "canSort", "getCanSort", "updateColumnSort", "direction", "onToggleSort", "onSelectSort", "onClearSort", "useCallback", "useEffect", "useState", "usePinLastRow", "pinLastRow", "table", "data", "scrollContextRef", "useTableRootContext", "pinnedRowKey", "setPinnedRowKey", "useState", "scrollToBottom", "useCallback", "element", "current", "scrollHeight", "requestAnimationFrame", "scrollTo", "top", "pinRow", "rowToPin", "resetRowPinning", "pin", "id", "clearRowPinning", "undefined", "pinLastRowCallback", "rows", "getRowModel", "length", "lastRow", "useEffect", "useControllableState", "useCallback", "useRowSelection", "props", "rowSelection", "setRowSelection", "useControllableState", "prop", "onChange", "onRowSelectionChange", "defaultProp", "defaultRowSelection", "handleRowSelectionChange", "useCallback", "updaterOrValue", "nextRowSelection", "rowsSelectable", "nextRowSelectionKey", "Object", "keys", "filter", "id", "ColumnMenu", "column", "columnOrderable", "columnPosition", "onColumnReorder", "props", "title", "label", "length", "id", "header", "context", "canSort", "sortDirection", "onSelectSort", "onToggleSort", "onClearSort", "useSortColumn", "columnSettingsAnchorRef", "useRef", "isColumnSettingsOpen", "setIsColumnSettingsOpen", "useState", "shouldPreventFocusOnClose", "onOpenColumnSettings", "useCallback", "current", "onDropdownCloseAutoFocus", "event", "preventDefault", "React", "div", "className", "SortIndicator", "direction", "onClick", "DropdownMenu", "Root", "modal", "Popover", "open", "onOpenChange", "Trigger", "ref", "asChild", "Anchor", "Button", "variant", "CaretDown", "getSize", "Portal", "Content", "onCloseAutoFocus", "sideOffset", "collisionPadding", "Viewport", "Item", "span", "ArrowUp", "ArrowDown", "X", "ArrowLeft", "mx", "ArrowRight", "GearSix", "Arrow", "classNames", "DensityProvider", "density", "ColumnSettingsForm", "onClose", "undefined", "icon", "Slot", "getCoreRowModel", "getExpandedRowModel", "getGroupedRowModel", "getSortedRowModel", "useReactTable", "React", "Fragment", "useCallback", "useEffect", "useState", "useContext", "useDefaultValue", "mx", "useArrowNavigationGroup", "flexRender", "React", "useContext", "useVirtualizer", "createContext", "useRef", "useState", "useTableRootContext", "scrollContextRef", "useRef", "tableCount", "setTableCount", "useState", "virtualizer", "useVirtualizer", "getScrollElement", "current", "count", "overscan", "estimateSize", "dispatch", "action", "type", "TableRootContext", "createContext", "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", "isResizing", "tbodyRoot", "tbodyTr", "canBeCurrent", "isPinned", "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", "virtualizer", "useContext", "TableRootContext", "React", "tbody", "map", "row", "isCurrent", "original", "isSelected", "id", "isPinned", "getIsPinned", "classNames", "tbodyTr", "tr", "key", "className", "data-index", "index", "ref", "measureElement", "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", "TABLE_HEAD_NAME", "TableHead", "_props", "tableContext", "useTableContext", "headerGroups", "table", "getHeaderGroups", "React", "thead", "className", "theadRoot", "map", "headerGroup", "tr", "key", "id", "theadTr", "debug", "th", "style", "width", "headers", "header", "isResizing", "column", "getIsResizing", "onResize", "getResizeHandler", "resizable", "columnDef", "meta", "getSize", "theadTh", "classNames", "isPlaceholder", "flexRender", "getContext", "div", "theadResizeRoot", "onDoubleClick", "resetSize", "onMouseDown", "onTouchStart", "expand", "displayName", "TableRoot", "children", "contextValue", "useTableRootContext", "React", "TableRootContext", "Provider", "value", "TableViewport", "classNames", "asChild", "props", "scrollContextRef", "useContext", "classes", "mx", "Slot", "ref", "className", "div", "role", "TablePrimitive", "onColumnResize", "columnVisibility", "header", "rowsSelectable", "debug", "onDataSelectionChange", "pinLastRow", "columns", "useDefaultValue", "incomingData", "data", "setData", "useState", "forceUpdate", "useCallback", "useEffect", "JSON", "stringify", "TableProvider", "UntypedTableProvider", "columnSizing", "setColumnSizing", "columnSizingInfo", "setColumnSizingInfo", "useColumnResizing", "rowSelection", "handleRowSelectionChange", "useRowSelection", "grouping", "handleGroupingChange", "columnSorting", "useColumnSorting", "table", "useReactTable", "meta", "defaultColumn", "size", "maxSize", "state", "sorting", "columnResizeMode", "enableColumnResizing", "onColumnSizingChange", "onColumnSizingInfoChange", "getCoreRowModel", "getSortedRowModel", "getExpandedRowModel", "getGroupedRowModel", "length", "undefined", "onGroupingChange", "enableMultiRowSelection", "enableRowSelection", "onRowSelectionChange", "enableSorting", "enableColumnPinning", "debugTable", "Object", "keys", "map", "id", "getRowModel", "rowsById", "original", "usePinLastRow", "expand", "isGrid", "TableImpl", "footer", "fullWidth", "useTableContext", "pre", "code", "getState", "isResizingColumn", "TableComponent", "MemoizedVirtualisedTableContent", "VirtualizedTableContent", "tableRoot", "style", "width", "getTotalSize", "TableHead", "GroupedTableContent", "TableFooter", "virtualizer", "dispatch", "centerRows", "getCenterRows", "pinnedRows", "type", "count", "getBottomRows", "_", "getVirtualItems", "virtualRows", "totalSize", "paddingTop", "start", "paddingBottom", "end", "rowsToRender", "virtualRow", "index", "filter", "r", "Fragment", "tbody", "tr", "td", "height", "TableBody", "rows", "memo", "getHeaderGroups", "row", "i", "key", "thead", "th", "colSpan", "headers", "groupTh", "String", "getGroupingValue", "subRows", "Table", "Root", "Viewport", "Main", "useFocusFinders", "Check", "ClipboardText", "X", "createColumnHelper", "format", "formatDistanceToNow", "React", "useCallback", "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", "getInitialValue", "useCallback", "content", "setValue", "useState", "useEffect", "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", "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", "display", "code", "JSON", "stringify", "AST", "classifySchemaProperties", "schema", "recurse", "node", "path", "acc", "properties", "getPropertySignatures", "forEach", "prop", "propName", "name", "toString", "isOptional", "unwrappedAst", "unwrapOptionProperty", "isStruct", "type", "push", "concat", "join", "propertyToColumn", "ast", "isTypeLiteral", "isOptionalUnion", "isUnion", "Error", "String", "_undefinedCase", "types", "typeToColumn", "isStringKeyword", "isNumberKeyword", "isBooleanKeyword", "isRefinement", "from", "isTransformation", "identifier", "getIdentifierAnnotation", "_tag", "value", "schemaToColumnDefs", "schema", "helper", "builder", "createColumnBuilder", "classified", "classifySchemaProperties", "map", "name", "type", "propertyKey", "toString", "column", "string", "label", "number", "switch", "date", "display", "id", "Error", "accessor"]
|
|
4
|
+
"sourcesContent": ["//\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//\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 2024 DXOS.org\n//\n\nimport { X, GearSix, CaretDown, ArrowDown, ArrowUp, ArrowRight, ArrowLeft } from '@phosphor-icons/react';\nimport { type SortDirection, type HeaderContext, type RowData } from '@tanstack/react-table';\nimport React, { useRef, useState, useCallback } from 'react';\n\nimport { Button, DensityProvider, Popover, DropdownMenu } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { ColumnSettingsForm } from './ColumnSettingsForm';\nimport { useSortColumn } from '../../hooks';\nimport { type TableDef, type ColumnProps } from '../../schema';\n\nexport type ColumnMenuProps<TData extends RowData, TValue> = {\n context: HeaderContext<TData, TValue>;\n tablesToReference: TableDef[];\n tableDef: TableDef;\n column: ColumnProps;\n columnOrderable: boolean;\n columnPosition: 'start' | 'end' | undefined;\n onColumnReorder: (columnId: string, direction: 'left' | 'right') => void;\n onUpdate?: (id: string, column: ColumnProps) => void;\n onDelete?: (id: string) => void;\n};\n\nexport const ColumnMenu = <TData extends RowData, TValue>({\n column,\n columnOrderable,\n columnPosition,\n onColumnReorder,\n ...props\n}: ColumnMenuProps<TData, TValue>) => {\n const title = column.label?.length ? column.label : column.id;\n const header = props.context.header;\n\n const { canSort, sortDirection, onSelectSort, onToggleSort, onClearSort } = useSortColumn(header.column);\n\n const columnSettingsAnchorRef = useRef<any>(null);\n\n const [isColumnSettingsOpen, setIsColumnSettingsOpen] = useState(false);\n\n const shouldPreventFocusOnClose = useRef(false);\n\n const onOpenColumnSettings = useCallback(() => {\n shouldPreventFocusOnClose.current = true;\n setIsColumnSettingsOpen(true);\n }, [shouldPreventFocusOnClose, setIsColumnSettingsOpen]); // setIsColumnSettingsOpen is a dependency\n\n const onDropdownCloseAutoFocus = useCallback(\n (event: Event) => {\n if (shouldPreventFocusOnClose.current) {\n event.preventDefault();\n shouldPreventFocusOnClose.current = false;\n }\n },\n [shouldPreventFocusOnClose],\n );\n\n return (\n <div className='flex items-center justify-center justify-between'>\n <div className='flex items-center gap-1 truncate' title={title}>\n <SortIndicator direction={sortDirection} onClick={onToggleSort} />\n <div className='truncate'>{title}</div>\n </div>\n\n <DropdownMenu.Root modal={false}>\n <Popover.Root open={isColumnSettingsOpen} onOpenChange={setIsColumnSettingsOpen} modal={false}>\n <DropdownMenu.Trigger ref={columnSettingsAnchorRef} asChild>\n <Popover.Anchor asChild>\n <Button variant='ghost'>\n <CaretDown className={getSize(4)} />\n </Button>\n </Popover.Anchor>\n </DropdownMenu.Trigger>\n\n <DropdownMenu.Portal>\n <DropdownMenu.Content onCloseAutoFocus={onDropdownCloseAutoFocus} sideOffset={4} collisionPadding={8}>\n <DropdownMenu.Viewport>\n {canSort && (\n <>\n <DropdownMenu.Item onClick={() => onSelectSort('asc')}>\n <span className='grow'>Sort ascending</span>\n <span className='opacity-50'>\n <ArrowUp className={getSize(4)} />\n </span>\n </DropdownMenu.Item>\n <DropdownMenu.Item onClick={() => onSelectSort('desc')}>\n <span className='grow'>Sort descending</span>\n <span className='opacity-50'>\n <ArrowDown className={getSize(4)} />\n </span>\n </DropdownMenu.Item>\n {sortDirection && (\n <DropdownMenu.Item onClick={onClearSort}>\n <span className='grow'>Clear sort</span>\n <span className='opacity-50'>\n <X className={getSize(4)} />\n </span>\n </DropdownMenu.Item>\n )}\n </>\n )}\n\n {columnOrderable && (\n <>\n {columnPosition !== 'start' && (\n <DropdownMenu.Item onClick={() => onColumnReorder(header.column.id, 'left')}>\n <span className='grow'>Move left</span>\n <span className='opacity-50'>\n <ArrowLeft className={mx(getSize(4))} />\n </span>\n </DropdownMenu.Item>\n )}\n {columnPosition !== 'end' && (\n <DropdownMenu.Item onClick={() => onColumnReorder(header.column.id, 'right')}>\n <span className='grow'>Move right</span>\n <span className='opacity-50'>\n <ArrowRight className={mx(getSize(4))} />\n </span>\n </DropdownMenu.Item>\n )}\n </>\n )}\n\n <DropdownMenu.Item onClick={onOpenColumnSettings}>\n <span className='grow'>Column settings</span>\n <span className='opacity-50'>\n <GearSix className={mx(getSize(4), 'rotate-90')} />\n </span>\n </DropdownMenu.Item>\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n\n <Popover.Portal>\n <Popover.Content>\n <Popover.Viewport classNames='w-60'>\n <DensityProvider density='fine'>\n <ColumnSettingsForm {...props} column={column} onClose={() => setIsColumnSettingsOpen(false)} />\n </DensityProvider>\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </DropdownMenu.Root>\n </div>\n );\n};\n\nexport const SortIndicator = ({\n direction,\n onClick,\n}: {\n direction: SortDirection | undefined;\n onClick: (e: any) => void;\n}) => {\n if (direction === undefined) {\n return null;\n }\n\n let icon;\n\n switch (direction) {\n case 'asc':\n icon = <ArrowUp className={getSize(3)} />;\n break;\n case 'desc':\n icon = <ArrowDown className={getSize(3)} />;\n break;\n }\n\n return (\n <div onClick={onClick} className='flex items-center cursor-pointer'>\n {icon}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\nimport { Check, Trash, X } from '@phosphor-icons/react';\nimport React, { type FC, type PropsWithChildren, useRef, useState } from 'react';\n\nimport { Button, Input, Select, Separator, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\nimport { safeParseInt } from '@dxos/util';\n\nimport { type TableDef, type ColumnProps, type ColumnType } from '../../schema';\nimport { translationKey } from '../../translations';\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 type ColumnSettingsFormProps = {\n column: ColumnProps;\n tableDef: TableDef;\n tablesToReference: TableDef[];\n onUpdate?: ((id: string, column: ColumnProps) => void) | undefined;\n onDelete?: ((id: string) => void) | undefined;\n onClose?: () => void;\n};\n\nexport const ColumnSettingsForm = ({\n column,\n tableDef,\n tablesToReference,\n onUpdate,\n onDelete,\n onClose,\n}: ColumnSettingsFormProps) => {\n const [formState, setFormState] = useState({\n prop: column.id,\n refTable: column.refTable,\n refProp: column.refProp,\n type: String(column.type),\n label: column.label,\n digits: String(column.digits ?? '0'),\n });\n\n const propRef = useRef<HTMLInputElement>(null);\n const { t } = useTranslation(translationKey);\n\n const handleCancel = () => {\n onClose?.();\n };\n\n const handleSave = () => {\n const { prop, refTable, refProp, type, label, digits } = formState;\n\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?.(column.id, {\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 onClose?.();\n };\n\n const handleDelete = () => {\n onDelete?.(column.id);\n onClose?.();\n };\n\n return (\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={formState.label ?? ''}\n onChange={(event) => setFormState((prevState) => ({ ...prevState, label: 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 value={formState.prop ?? ''}\n onChange={(event) =>\n setFormState((prevState) => ({ ...prevState, prop: event.target.value.replace(/[^\\w_]/g, '') }))\n }\n />\n </Input.Root>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('column type label')}</Input.Label>\n <Select.Root\n value={formState.type}\n onValueChange={(value) => setFormState((prevState) => ({ ...prevState, type: value }))}\n >\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 {formState.type === 'number' && (\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('digits label')}</Input.Label>\n <Input.TextInput\n value={formState.digits ?? ''}\n onChange={(event) => setFormState((prevState) => ({ ...prevState, digits: event.target.value }))}\n />\n </Input.Root>\n </Section>\n )}\n\n {formState.type === 'ref' && (\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>Table</Input.Label>\n <Select.Root\n value={formState.refTable}\n onValueChange={(value) => setFormState((prevState) => ({ ...prevState, refTable: value }))}\n >\n <Select.TriggerButton placeholder='Table' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {tablesToReference\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 {formState.refTable && (\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>Table property</Input.Label>\n <Select.Root\n value={formState.refProp}\n onValueChange={(value) => setFormState((prevState) => ({ ...prevState, refProp: value }))}\n >\n <Select.TriggerButton placeholder='Property' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {tablesToReference\n .find((tableDef) => tableDef.id === formState.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 <Separator classNames='mli-2' />\n\n <Section className='space-b-1.5'>\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={handleDelete}>\n <span>{t('delete label')}</span>\n <div className='grow' />\n <Trash className={getSize(5)} />\n </Button>\n </Section>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\nimport { type ColumnSizingInfoState, type ColumnSizingState } from '@tanstack/react-table';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { useOnTransition } from '@dxos/react-ui';\n\nimport { type TableColumnDef } from '../components/Table';\n\nexport const useColumnResizing = ({\n columns,\n onColumnResize,\n}: {\n columns: TableColumnDef<any>[];\n onColumnResize: ((state: Record<string, number>) => void) | undefined;\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 return { columnSizing, columnSizingInfo, setColumnSizing, setColumnSizingInfo };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type SortDirection, type Column, type ColumnSort } from '@tanstack/react-table';\nimport { useState } from 'react';\n\nimport { useTableContext } from '../components/Table/TableContext';\n\nexport const useColumnSorting = () => {\n const [columnSorting, setColumnSorting] = useState<ColumnSort[]>([]);\n\n const sortColumn = (columnId: string, sortDirection: SortDirection) => {\n setColumnSorting([{ id: columnId, desc: sortDirection === 'desc' }]);\n };\n\n const clearColumnSorting = () => {\n setColumnSorting([]);\n };\n\n return { sorting: columnSorting, sortColumn, clearColumnSorting };\n};\n\nexport type ColumnSorting = ReturnType<typeof useColumnSorting>;\n\nexport const useSortColumn = (column: Column<any>) => {\n const { sorting, sortColumn, clearColumnSorting } = useTableContext();\n const [initialSortDirection, setInitialSortDirection] = useState<SortDirection | undefined>();\n\n const columnSort = sorting.find((s) => s.id === column.id);\n const sortDirection = columnSort ? (columnSort.desc ? ('desc' as const) : ('asc' as const)) : undefined;\n\n const canSort = column.getCanSort();\n\n const updateColumnSort = (direction: SortDirection) => {\n sortColumn(column.id, direction);\n };\n\n // Whichever sort is explicitly set first, will be the first sort direction\n // When toggling, we always go to the other direction, and then to unsorted.\n const onToggleSort = () => {\n if (sortDirection === undefined) {\n return;\n }\n\n if (sortDirection === initialSortDirection) {\n updateColumnSort(initialSortDirection === 'asc' ? 'desc' : 'asc');\n } else {\n clearColumnSorting();\n }\n };\n\n const onSelectSort = (direction: SortDirection) => {\n clearColumnSorting();\n setInitialSortDirection(direction);\n updateColumnSort(direction);\n };\n\n const onClearSort = () => {\n clearColumnSorting();\n };\n\n return { canSort, sortDirection, onSelectSort, onToggleSort, onClearSort };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type RowData } from '@tanstack/react-table';\nimport React, { useContext, createContext, type ReactNode, type FC, type Context } from 'react';\n\nimport { type TableContextValue } from './props';\n\nexport const TABLE_NAME = 'Table';\n\n// Create the context without a default value.\n// The expectation is that the provider will always supply a value, so no need to define a default here.\nconst TableContext = createContext<TableContextValue<RowData>>({} as TableContextValue<RowData>);\n\nexport type TypedTableProvider<TData extends RowData> = {\n (props: TableContextValue<TData> & { children: ReactNode }): JSX.Element;\n displayName: string;\n};\n\nexport const TableProvider: FC<TableContextValue<RowData> & { children: ReactNode }> = ({ children, ...value }) => {\n return <TableContext.Provider value={value}>{children}</TableContext.Provider>;\n};\n\n// Create a custom hook to consume the context.\nexport const useTableContext = <TData extends RowData>(): TableContextValue<TData> => {\n return useContext(TableContext as Context<TableContextValue<TData>>);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Row, type Table } from '@tanstack/react-table';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { useTableRootContext } from '../components';\n\nexport const usePinLastRow = (pinLastRow: boolean | undefined, table: Table<any>, data: any[]) => {\n const { scrollContextRef } = useTableRootContext();\n const [pinnedRowKey, setPinnedRowKey] = useState<string>();\n\n // Scrolls to the bottom of a scrollable element.\n const scrollToBottom = useCallback(() => {\n const element = scrollContextRef.current;\n const scrollHeight = element?.scrollHeight;\n\n if (element && scrollHeight) {\n requestAnimationFrame(() => element.scrollTo({ top: scrollHeight }));\n }\n }, []);\n\n const pinRow = useCallback(\n (rowToPin: Row<any>) => {\n table.resetRowPinning();\n rowToPin.pin('bottom');\n setPinnedRowKey(rowToPin.id);\n },\n [table],\n );\n\n const clearRowPinning = useCallback(() => {\n table.resetRowPinning();\n setPinnedRowKey(undefined);\n }, [table]);\n\n // Define the logic for pinning the last row in a callback.\n const pinLastRowCallback = useCallback(() => {\n const rows = table.getRowModel().rows;\n\n if (rows.length === 0) {\n return clearRowPinning();\n }\n\n const lastRow = rows[rows.length - 1];\n if (lastRow.id === pinnedRowKey) {\n return;\n }\n\n pinRow(lastRow);\n\n if (pinnedRowKey !== undefined) {\n scrollToBottom();\n }\n }, [table, scrollToBottom, pinnedRowKey]);\n\n // Effect to handle pinning logic when data changes.\n useEffect(() => {\n if (pinLastRow) {\n pinLastRowCallback();\n }\n }, [data, pinLastRow, pinLastRowCallback]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { type OnChangeFn, type RowSelectionState } from '@tanstack/react-table';\nimport { useCallback } from 'react';\n\nimport { type TableProps } from '../components/Table';\n\nexport const useRowSelection = (\n props: Pick<\n TableProps<any>,\n 'rowsSelectable' | 'defaultRowSelection' | 'rowSelection' | 'onRowSelectionChange' | 'rowsSelectable'\n >,\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 (props.rowsSelectable === 'multi') {\n setRowSelection(nextRowSelection);\n } else if (props.rowsSelectable) {\n const nextRowSelectionKey = Object.keys(nextRowSelection).filter((id) => !rowSelection[id])[0];\n setRowSelection(nextRowSelectionKey ? { [nextRowSelectionKey]: true } : {});\n } else {\n setRowSelection({});\n }\n },\n [props.rowsSelectable, setRowSelection, rowSelection],\n );\n\n return { rowSelection, handleRowSelectionChange };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Primitive } from '@radix-ui/react-primitive';\nimport { Slot } from '@radix-ui/react-slot';\nimport {\n type GroupingState,\n type Row,\n type RowData,\n getCoreRowModel,\n getExpandedRowModel,\n getGroupedRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table';\nimport React, {\n type ComponentPropsWithoutRef,\n Fragment,\n useCallback,\n useEffect,\n useState,\n useContext,\n type ReactNode,\n memo,\n} from 'react';\n\nimport { type ThemedClassName, useDefaultValue } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { TableBody } from './TableBody';\nimport { type TypedTableProvider, TableProvider as UntypedTableProvider, useTableContext } from './TableContext';\nimport { TableFooter } from './TableFooter';\nimport { TableHead } from './TableHead';\nimport { TableRootContext, useTableRootContext } from './TableRootContext';\nimport { type TableProps } from './props';\nimport { useColumnResizing, useColumnSorting, usePinLastRow, useRowSelection } from '../../hooks';\nimport { groupTh, tableRoot } from '../../theme';\n\ntype TableRootProps = { children: ReactNode };\n\nconst TableRoot = ({ children }: TableRootProps) => {\n const contextValue = useTableRootContext();\n return <TableRootContext.Provider value={contextValue}>{children}</TableRootContext.Provider>;\n};\n\ntype TableViewportProps = ThemedClassName<ComponentPropsWithoutRef<typeof Primitive.div>> & {\n asChild?: boolean;\n};\n\nconst TableViewport = ({ children, classNames, asChild, ...props }: TableViewportProps) => {\n const { scrollContextRef } = useContext(TableRootContext);\n\n const classes = mx(classNames, 'overflow-auto');\n\n return asChild ? (\n <Slot ref={scrollContextRef} className={classes} {...props}>\n {children}\n </Slot>\n ) : (\n <div role='none' className={classes} ref={scrollContextRef} {...props}>\n {children}\n </div>\n );\n};\n\nexport const TablePrimitive = <TData extends RowData>(props: TableProps<TData>) => {\n const {\n role,\n onColumnResize,\n columnVisibility,\n header = true,\n rowsSelectable,\n debug,\n onDataSelectionChange,\n pinLastRow,\n } = props;\n\n const columns = useDefaultValue(props.columns, []);\n const incomingData = useDefaultValue(props.data, []);\n\n const [data, setData] = useState([...incomingData]);\n\n // Reactivity workaround: https://github.com/dxos/dxos/issues/6376.\n const forceUpdate = useCallback(() => setData([...incomingData]), [incomingData]);\n useEffect(() => forceUpdate(), [JSON.stringify(incomingData), forceUpdate]);\n\n const TableProvider = UntypedTableProvider as TypedTableProvider<TData>;\n\n const { columnSizing, setColumnSizing, columnSizingInfo, setColumnSizingInfo } = useColumnResizing({\n columns,\n onColumnResize,\n });\n\n const { rowSelection, handleRowSelectionChange } = useRowSelection(props);\n\n const [grouping, handleGroupingChange] = useState<GroupingState>(props.grouping ?? []);\n useEffect(() => handleGroupingChange(props.grouping ?? []), [handleGroupingChange, props.grouping]);\n\n const columnSorting = useColumnSorting();\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 sorting: columnSorting.sorting,\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 usePinLastRow(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 return (\n <TableProvider\n {...{ ...props, ...columnSorting }}\n table={table}\n header={header}\n expand={expand}\n isGrid={role === 'grid' || role === 'treegrid'}\n >\n <TableImpl<TData> debug={false} {...props} />\n </TableProvider>\n );\n};\n\n// TODO(zan): Smush this into the Table component.\n/**\n * Pure implementation of table outside of context set-up.\n */\nconst TableImpl = <TData extends RowData>(props: TableProps<TData>) => {\n const { debug, classNames, role, footer, grouping, fullWidth } = props;\n const { table } = useTableContext<TData>();\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 const TableComponent = isResizingColumn ? MemoizedVirtualizedTableContent : VirtualizedTableContent;\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 ? <TableComponent /> : <GroupedTableContent />}\n\n {footer && <TableFooter />}\n </table>\n );\n};\n\nconst VirtualizedTableContent = () => {\n const { table } = useTableContext();\n const { virtualizer, dispatch } = useContext(TableRootContext);\n\n const centerRows = table.getCenterRows();\n let pinnedRows = [] as Row<unknown>[];\n\n useEffect(() => {\n dispatch({ type: 'updateTableCount', count: centerRows.length });\n }, [centerRows.length]);\n\n try {\n // TODO(zan): Work out how to sync the row pinning with rendering\n // This is a hack because the first call to this function after a row is deleted will throw an error\n // because the row index is no longer in the table\n // The pin last row hook updates the pinned row key after the row is deleted\n pinnedRows = table.getBottomRows();\n } catch (_) {} // Ignore error\n\n const { getTotalSize, getVirtualItems } = virtualizer;\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 const rowsToRender = [...virtualRows.map((virtualRow) => centerRows[virtualRow.index]), ...pinnedRows].filter(\n (r) => !!r,\n );\n\n return (\n <Fragment>\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={rowsToRender} />\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 </Fragment>\n );\n};\n\nexport const MemoizedVirtualizedTableContent = memo(VirtualizedTableContent);\n\nconst GroupedTableContent = () => {\n const {\n table: { getGroupedRowModel, getHeaderGroups, getState },\n debug,\n } = useTableContext();\n\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// TODO(burdon): Floating \"add row\" jumps by 1 pixel on scroll.\n// TODO(burdon): Blue focus highlight is clipped by 1px on the left.\n// TODO(burdon): Focused row and focus ring passes over the sticky header.\nexport const Table = {\n Root: TableRoot,\n Viewport: TableViewport,\n Main: TablePrimitive,\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, { useContext } from 'react';\n\nimport { useTableContext } from './TableContext';\nimport { TableRootContext } from './TableRootContext';\nimport { tbodyTr } from '../../theme';\nimport { Cell } from '../Cell/Cell';\n\nconst TABLE_BODY_NAME = 'TableBody';\n\ntype TableBodyProps = {\n rows: Row<RowData>[];\n};\n\nconst TableBody = ({ rows }: TableBodyProps) => {\n const { table, keyAccessor, currentDatum, debug, expand, isGrid, onDatumClick } = useTableContext();\n\n const rowSelection = table.getState().rowSelection;\n const domAttributes = useArrowNavigationGroup({ axis: 'grid' });\n const canBeCurrent = !isGrid && !!onDatumClick;\n\n const { virtualizer } = useContext(TableRootContext);\n\n return (\n <tbody {...(isGrid && domAttributes)}>\n {rows.map((row) => {\n const isCurrent = currentDatum === row.original;\n const isSelected = rowSelection?.[row.id];\n\n const isPinned = row.getIsPinned();\n\n const classNames = tbodyTr({ canBeCurrent, isPinned: isPinned !== false });\n\n return (\n <tr\n key={keyAccessor ? keyAccessor(row.original) : row.id}\n className={classNames}\n data-index={row.index}\n ref={virtualizer.measureElement}\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 2024 DXOS.org\n//\n\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport { createContext, useRef, useState } from 'react';\n\ntype TableRootContextActions = { type: 'updateTableCount'; count: number };\n\nexport const useTableRootContext = () => {\n const scrollContextRef = useRef<HTMLDivElement>(null);\n const [tableCount, setTableCount] = useState(0);\n\n const virtualizer = useVirtualizer({\n getScrollElement: () => scrollContextRef?.current ?? null,\n count: tableCount,\n overscan: 8,\n estimateSize: () => 40,\n });\n\n const dispatch = (action: TableRootContextActions) => {\n switch (action.type) {\n case 'updateTableCount':\n setTableCount(action.count);\n break;\n\n default:\n break;\n }\n };\n\n return { scrollContextRef, virtualizer, dispatch };\n};\n\nexport type TableRootContextValue = ReturnType<typeof useTableRootContext>;\n\n// Create the context without a default value.\n// The expectation is that the provider will always supply a value, so no need to define a default here.\nexport const TableRootContext = createContext<TableRootContextValue>({} as TableRootContextValue);\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 = '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; isPinned?: boolean }>;\nexport const tbodyTr: ComponentFunction<TbodyTrStyleProps> = ({ canBeCurrent, isPinned }, ...etc) =>\n mx(\n 'group',\n canBeCurrent ? ghostSelectedCurrent : ghostSelected,\n canBeCurrent && focusRing,\n canBeCurrent && 'cursor-pointer rounded',\n isPinned && 'sticky z-1 bottom-[-1px] base-surface',\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();\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();\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();\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 } 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 = (props: TableFooterProps) => {\n const tableContext = useTableContext();\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 } 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 = (_props: TableHeadProps) => {\n const tableContext = useTableContext();\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 { 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, { useCallback, 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\n const getInitialValue = useCallback(() => {\n // TODO(burdon): Temporary shim for automerge.\n return (initialValue as any)?.content ?? initialValue;\n }, [initialValue]);\n\n const [value, setValue] = useState(getInitialValue);\n\n // Update value if initialValue changes externally (cell reactivity).\n useEffect(() => setValue(getInitialValue()), [getInitialValue]);\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: { ...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();\n const checked = table.getIsSomeRowsSelected() ? 'indeterminate' : table.getIsAllRowsSelected();\n\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 /**\n * This display column type is for nested/unhandled data to appear as JSON.\n */\n display({ label, classNames, ...props }: KeyColumnOptions<TData> = {}): Partial<ColumnDef<TData, PublicKey>> {\n return {\n size: 120,\n minSize: 120,\n header: (cell) => label ?? cell.header.id,\n cell: (cell) => {\n const value = cell.getValue();\n\n return (\n <div className='overflow-scroll'>\n <code className='text-xs'>{JSON.stringify(value)}</code>\n </div>\n );\n },\n ...props,\n meta: { ...props.meta, cell: { ...props.meta?.cell, classNames: ['font-mono', textPadding, classNames] } },\n };\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as AST from '@effect/schema/AST';\nimport type * as S from '@effect/schema/Schema';\n\nimport { type ColumnType } from './types';\n\n// TODO(burdon): Reconcile with react-ui-table.\nexport type ClassifiedColumnType = ColumnType | 'display';\n\n// TODO(burdon): Rename getX? and return typed array?\nexport const classifySchemaProperties = (schema: S.Schema<any, any>): [string, ClassifiedColumnType][] => {\n const recurse = (node: AST.AST, path: string[], acc: [string, ClassifiedColumnType][]) => {\n const properties = AST.getPropertySignatures(node);\n properties.forEach((prop) => {\n const propName = prop.name.toString();\n\n if (prop.isOptional) {\n const unwrappedAst = unwrapOptionProperty(prop);\n if (isStruct(unwrappedAst)) {\n return recurse(unwrappedAst, [...path, propName], acc);\n }\n }\n\n if (isStruct(prop.type)) {\n recurse(prop.type, [...path, propName], acc);\n } else {\n acc.push([path.concat(propName).join('.'), propertyToColumn(prop)]);\n }\n });\n\n return acc;\n };\n\n return recurse(schema.ast, [], []);\n};\n\nconst isStruct = (node: AST.AST) => AST.isTypeLiteral(node);\n\nconst isOptionalUnion = (prop: AST.PropertySignature) => AST.isUnion(prop.type) && prop.isOptional;\n\nconst unwrapOptionProperty = (prop: AST.PropertySignature) => {\n if (!isOptionalUnion(prop)) {\n throw new Error(`Not an optional property: ${String(prop.name)}`);\n }\n\n if (!AST.isUnion(prop.type)) {\n throw new Error(`Not a union type: ${String(prop.name)}`);\n }\n\n const [type, _undefinedCase] = prop.type.types;\n return type;\n};\n\nconst typeToColumn = (type: AST.AST): ClassifiedColumnType => {\n if (AST.isStringKeyword(type)) {\n return 'string';\n } else if (AST.isNumberKeyword(type)) {\n return 'number';\n } else if (AST.isBooleanKeyword(type)) {\n return 'boolean';\n }\n\n if (AST.isRefinement(type)) {\n return typeToColumn(type.from);\n }\n\n // TODO(zan): How should we be thinking about transformations?\n // - Which of these are we storing in the database?\n // - For types that aren't the 'DateFromString' transformation, should we be using the 'from' or 'to' type?\n\n if (AST.isTransformation(type)) {\n const identifier = AST.getIdentifierAnnotation(type);\n if (identifier._tag === 'Some') {\n if (identifier.value === 'DateFromString') {\n return 'date';\n }\n }\n }\n\n return 'display';\n};\n\nconst propertyToColumn = (prop: AST.PropertySignature): ClassifiedColumnType => {\n let type = prop.type;\n if (prop.isOptional) {\n type = unwrapOptionProperty(prop);\n }\n\n return typeToColumn(type);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ColumnDef } from '@tanstack/react-table';\n\nimport type { S } from '@dxos/echo-schema';\n\nimport { classifySchemaProperties } from './schema';\nimport { createColumnBuilder } from '../helpers';\n\nexport const schemaToColumnDefs = <T>(schema: S.Schema<T, any>): ColumnDef<T, any>[] => {\n const { helper, builder } = createColumnBuilder<T>();\n\n const classified = classifySchemaProperties(schema);\n return classified.map(([name, type]) => {\n const propertyKey = name.toString();\n\n let column: Partial<ColumnDef<any, any>> | undefined;\n switch (type) {\n case 'string': {\n column = builder.string({ label: propertyKey });\n break;\n }\n case 'number': {\n column = builder.number({ label: propertyKey });\n break;\n }\n case 'boolean': {\n column = builder.switch({ label: propertyKey });\n break;\n }\n case 'date': {\n column = builder.date({ label: propertyKey });\n break;\n }\n case 'display': {\n column = builder.display({ label: propertyKey, id: propertyKey });\n break;\n }\n default: {\n throw new Error(`Unhandled column type: ${type}`);\n }\n }\n\n return helper.accessor(propertyKey as any, column);\n });\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["translationKey", "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", "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", "X", "GearSix", "CaretDown", "ArrowDown", "ArrowUp", "ArrowRight", "ArrowLeft", "React", "useRef", "useState", "useCallback", "Button", "DensityProvider", "Popover", "DropdownMenu", "getSize", "mx", "Check", "Trash", "X", "React", "useRef", "useState", "Button", "Input", "Select", "Separator", "useTranslation", "getSize", "mx", "safeParseInt", "Section", "children", "className", "React", "div", "role", "mx", "ColumnSettingsForm", "column", "tableDef", "tablesToReference", "onUpdate", "onDelete", "onClose", "formState", "setFormState", "useState", "prop", "id", "refTable", "refProp", "type", "String", "label", "digits", "propRef", "useRef", "t", "useTranslation", "translationKey", "handleCancel", "handleSave", "length", "match", "current", "focus", "columns", "find", "c", "safeParseInt", "handleDelete", "Input", "Root", "Label", "classNames", "TextInput", "placeholder", "value", "onChange", "event", "prevState", "target", "autoFocus", "ref", "replace", "Select", "onValueChange", "TriggerButton", "Portal", "Content", "Viewport", "map", "Option", "key", "filter", "name", "Separator", "Button", "variant", "onClick", "span", "Check", "getSize", "ns", "X", "Trash", "useCallback", "useEffect", "useState", "useOnTransition", "useColumnResizing", "columns", "onColumnResize", "columnsInitialised", "setColumnsInitialised", "useState", "columnSizing", "setColumnSizing", "useEffect", "filter", "column", "size", "prop", "undefined", "reduce", "state", "columnSizingInfo", "setColumnSizingInfo", "notifyColumnResize", "useCallback", "useOnTransition", "isResizingColumn", "v", "useState", "React", "useContext", "createContext", "TableContext", "createContext", "TableProvider", "children", "value", "React", "Provider", "useTableContext", "useContext", "useColumnSorting", "columnSorting", "setColumnSorting", "useState", "sortColumn", "columnId", "sortDirection", "id", "desc", "clearColumnSorting", "sorting", "useSortColumn", "column", "useTableContext", "initialSortDirection", "setInitialSortDirection", "columnSort", "find", "s", "undefined", "canSort", "getCanSort", "updateColumnSort", "direction", "onToggleSort", "onSelectSort", "onClearSort", "useCallback", "useEffect", "useState", "usePinLastRow", "pinLastRow", "table", "data", "scrollContextRef", "useTableRootContext", "pinnedRowKey", "setPinnedRowKey", "useState", "scrollToBottom", "useCallback", "element", "current", "scrollHeight", "requestAnimationFrame", "scrollTo", "top", "pinRow", "rowToPin", "resetRowPinning", "pin", "id", "clearRowPinning", "undefined", "pinLastRowCallback", "rows", "getRowModel", "length", "lastRow", "useEffect", "useControllableState", "useCallback", "useRowSelection", "props", "rowSelection", "setRowSelection", "useControllableState", "prop", "onChange", "onRowSelectionChange", "defaultProp", "defaultRowSelection", "handleRowSelectionChange", "useCallback", "updaterOrValue", "nextRowSelection", "rowsSelectable", "nextRowSelectionKey", "Object", "keys", "filter", "id", "ColumnMenu", "column", "columnOrderable", "columnPosition", "onColumnReorder", "props", "title", "label", "length", "id", "header", "context", "canSort", "sortDirection", "onSelectSort", "onToggleSort", "onClearSort", "useSortColumn", "columnSettingsAnchorRef", "useRef", "isColumnSettingsOpen", "setIsColumnSettingsOpen", "useState", "shouldPreventFocusOnClose", "onOpenColumnSettings", "useCallback", "current", "onDropdownCloseAutoFocus", "event", "preventDefault", "React", "div", "className", "SortIndicator", "direction", "onClick", "DropdownMenu", "Root", "modal", "Popover", "open", "onOpenChange", "Trigger", "ref", "asChild", "Anchor", "Button", "variant", "CaretDown", "getSize", "Portal", "Content", "onCloseAutoFocus", "sideOffset", "collisionPadding", "Viewport", "Item", "span", "ArrowUp", "ArrowDown", "X", "ArrowLeft", "mx", "ArrowRight", "GearSix", "Arrow", "classNames", "DensityProvider", "density", "ColumnSettingsForm", "onClose", "undefined", "icon", "Slot", "getCoreRowModel", "getExpandedRowModel", "getGroupedRowModel", "getSortedRowModel", "useReactTable", "React", "Fragment", "useCallback", "useEffect", "useState", "useContext", "memo", "useDefaultValue", "mx", "useArrowNavigationGroup", "flexRender", "React", "useContext", "useVirtualizer", "createContext", "useRef", "useState", "useTableRootContext", "scrollContextRef", "useRef", "tableCount", "setTableCount", "useState", "virtualizer", "useVirtualizer", "getScrollElement", "current", "count", "overscan", "estimateSize", "dispatch", "action", "type", "TableRootContext", "createContext", "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", "isResizing", "tbodyRoot", "tbodyTr", "canBeCurrent", "isPinned", "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", "virtualizer", "useContext", "TableRootContext", "React", "tbody", "map", "row", "isCurrent", "original", "isSelected", "id", "isPinned", "getIsPinned", "classNames", "tbodyTr", "tr", "key", "className", "data-index", "index", "ref", "measureElement", "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", "TABLE_HEAD_NAME", "TableHead", "_props", "tableContext", "useTableContext", "headerGroups", "table", "getHeaderGroups", "React", "thead", "className", "theadRoot", "map", "headerGroup", "tr", "key", "id", "theadTr", "debug", "th", "style", "width", "headers", "header", "isResizing", "column", "getIsResizing", "onResize", "getResizeHandler", "resizable", "columnDef", "meta", "getSize", "theadTh", "classNames", "isPlaceholder", "flexRender", "getContext", "div", "theadResizeRoot", "onDoubleClick", "resetSize", "onMouseDown", "onTouchStart", "expand", "displayName", "TableRoot", "children", "contextValue", "useTableRootContext", "React", "TableRootContext", "Provider", "value", "TableViewport", "classNames", "asChild", "props", "scrollContextRef", "useContext", "classes", "mx", "Slot", "ref", "className", "div", "role", "TablePrimitive", "onColumnResize", "columnVisibility", "header", "rowsSelectable", "debug", "onDataSelectionChange", "pinLastRow", "columns", "useDefaultValue", "incomingData", "data", "setData", "useState", "forceUpdate", "useCallback", "useEffect", "JSON", "stringify", "TableProvider", "UntypedTableProvider", "columnSizing", "setColumnSizing", "columnSizingInfo", "setColumnSizingInfo", "useColumnResizing", "rowSelection", "handleRowSelectionChange", "useRowSelection", "grouping", "handleGroupingChange", "columnSorting", "useColumnSorting", "table", "useReactTable", "meta", "defaultColumn", "size", "maxSize", "state", "sorting", "columnResizeMode", "enableColumnResizing", "onColumnSizingChange", "onColumnSizingInfoChange", "getCoreRowModel", "getSortedRowModel", "getExpandedRowModel", "getGroupedRowModel", "length", "undefined", "onGroupingChange", "enableMultiRowSelection", "enableRowSelection", "onRowSelectionChange", "enableSorting", "enableColumnPinning", "debugTable", "Object", "keys", "map", "id", "getRowModel", "rowsById", "original", "usePinLastRow", "expand", "isGrid", "TableImpl", "footer", "fullWidth", "useTableContext", "pre", "code", "getState", "isResizingColumn", "TableComponent", "MemoizedVirtualizedTableContent", "VirtualizedTableContent", "tableRoot", "style", "width", "getTotalSize", "TableHead", "GroupedTableContent", "TableFooter", "virtualizer", "dispatch", "centerRows", "getCenterRows", "pinnedRows", "type", "count", "getBottomRows", "_", "getVirtualItems", "virtualRows", "totalSize", "paddingTop", "start", "paddingBottom", "end", "rowsToRender", "virtualRow", "index", "filter", "r", "Fragment", "tbody", "tr", "td", "height", "TableBody", "rows", "memo", "getHeaderGroups", "row", "i", "key", "thead", "th", "colSpan", "headers", "groupTh", "String", "getGroupingValue", "subRows", "Table", "Root", "Viewport", "Main", "useFocusFinders", "Check", "ClipboardText", "X", "createColumnHelper", "format", "formatDistanceToNow", "React", "useCallback", "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", "getInitialValue", "useCallback", "content", "setValue", "useState", "useEffect", "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", "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", "display", "code", "JSON", "stringify", "AST", "classifySchemaProperties", "schema", "recurse", "node", "path", "acc", "properties", "getPropertySignatures", "forEach", "prop", "propName", "name", "toString", "isOptional", "unwrappedAst", "unwrapOptionProperty", "isStruct", "type", "push", "concat", "join", "propertyToColumn", "ast", "isTypeLiteral", "isOptionalUnion", "isUnion", "Error", "String", "_undefinedCase", "types", "typeToColumn", "isStringKeyword", "isNumberKeyword", "isBooleanKeyword", "isRefinement", "from", "isTransformation", "identifier", "getIdentifierAnnotation", "_tag", "value", "schemaToColumnDefs", "schema", "helper", "builder", "createColumnBuilder", "classified", "classifySchemaProperties", "map", "name", "type", "propertyKey", "toString", "column", "string", "label", "number", "switch", "date", "display", "id", "Error", "accessor"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/ui/react-ui-table/src/translations.ts":{"bytes":2399,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx":{"bytes":11816,"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":526,"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/ColumnMenu/ColumnSettingsForm.tsx":{"bytes":25524,"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/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"packages/ui/react-ui-table/src/hooks/useColumnSizing.ts":{"bytes":5085,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableContext.tsx":{"bytes":3188,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/hooks/useColumnSorting.ts":{"bytes":6849,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"../components/Table/TableContext"}],"format":"esm"},"packages/ui/react-ui-table/src/hooks/usePinLastRow.ts":{"bytes":6405,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/index.ts","kind":"import-statement","original":"../components"}],"format":"esm"},"packages/ui/react-ui-table/src/hooks/useRowSelection.ts":{"bytes":5102,"imports":[{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/hooks/index.ts":{"bytes":847,"imports":[{"path":"packages/ui/react-ui-table/src/hooks/useColumnSizing.ts","kind":"import-statement","original":"./useColumnSizing"},{"path":"packages/ui/react-ui-table/src/hooks/useColumnSorting.ts","kind":"import-statement","original":"./useColumnSorting"},{"path":"packages/ui/react-ui-table/src/hooks/usePinLastRow.ts","kind":"import-statement","original":"./usePinLastRow"},{"path":"packages/ui/react-ui-table/src/hooks/useRowSelection.ts","kind":"import-statement","original":"./useRowSelection"}],"format":"esm"},"packages/ui/react-ui-table/src/components/ColumnMenu/ColumnMenu.tsx":{"bytes":21244,"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":"packages/ui/react-ui-table/src/components/ColumnMenu/ColumnSettingsForm.tsx","kind":"import-statement","original":"./ColumnSettingsForm"},{"path":"packages/ui/react-ui-table/src/hooks/index.ts","kind":"import-statement","original":"../../hooks"}],"format":"esm"},"packages/ui/react-ui-table/src/components/ColumnMenu/index.ts":{"bytes":640,"imports":[{"path":"packages/ui/react-ui-table/src/components/ColumnMenu/ColumnMenu.tsx","kind":"import-statement","original":"./ColumnMenu"},{"path":"packages/ui/react-ui-table/src/components/ColumnMenu/ColumnSettingsForm.tsx","kind":"import-statement","original":"./ColumnSettingsForm"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableRootContext.ts":{"bytes":3971,"imports":[{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/theme.ts":{"bytes":10278,"imports":[{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/Cell.tsx":{"bytes":4914,"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":8958,"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/components/Table/TableRootContext.ts","kind":"import-statement","original":"./TableRootContext"},{"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":4698,"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":7951,"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":31589,"imports":[{"path":"@radix-ui/react-slot","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","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","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/components/Table/TableRootContext.ts","kind":"import-statement","original":"./TableRootContext"},{"path":"packages/ui/react-ui-table/src/hooks/index.ts","kind":"import-statement","original":"../../hooks"},{"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":2907,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/index.ts":{"bytes":701,"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"},{"path":"packages/ui/react-ui-table/src/components/Table/TableRootContext.ts","kind":"import-statement","original":"./TableRootContext"}],"format":"esm"},"packages/ui/react-ui-table/src/components/index.ts":{"bytes":676,"imports":[{"path":"packages/ui/react-ui-table/src/components/Cell/index.ts","kind":"import-statement","original":"./Cell"},{"path":"packages/ui/react-ui-table/src/components/ColumnMenu/index.ts","kind":"import-statement","original":"./ColumnMenu"},{"path":"packages/ui/react-ui-table/src/components/Table/index.ts","kind":"import-statement","original":"./Table"}],"format":"esm"},"packages/ui/react-ui-table/src/helpers.tsx":{"bytes":55498,"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/schema.ts":{"bytes":9636,"imports":[{"path":"@effect/schema/AST","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/schema/schemaToColumns.ts":{"bytes":5260,"imports":[{"path":"packages/ui/react-ui-table/src/schema/schema.ts","kind":"import-statement","original":"./schema"},{"path":"packages/ui/react-ui-table/src/helpers.tsx","kind":"import-statement","original":"../helpers"}],"format":"esm"},"packages/ui/react-ui-table/src/schema/types.ts":{"bytes":1149,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/schema/index.ts":{"bytes":605,"imports":[{"path":"packages/ui/react-ui-table/src/schema/schemaToColumns.ts","kind":"import-statement","original":"./schemaToColumns"},{"path":"packages/ui/react-ui-table/src/schema/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/ui/react-ui-table/src/types.ts":{"bytes":1862,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/index.ts":{"bytes":1142,"imports":[{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"./translations"},{"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/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/ui/react-ui-table/src/schema/index.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/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":119591},"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-searchlist","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-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-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","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","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":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","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":"@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":"@effect/schema/AST","kind":"import-statement","external":true}],"exports":["CellCombobox","ColumnBuilder","ColumnMenu","ColumnSettingsForm","MemoizedVirtualisedTableContent","SortIndicator","Table","TablePrimitive","TableRootContext","createColumnBuilder","currentRow","flushPadding","gridCellFocusRing","groupTh","headPadding","schemaToColumnDefs","selectedRow","tableRoot","tbodyRoot","tbodyTr","tdContent","tdRoot","textPadding","tfootRoot","tfootTh","tfootTr","theadResizeRoot","theadRoot","theadTh","theadTr","translations","useColumnResizing","useColumnSorting","usePinLastRow","useRowSelection","useSortColumn","useTableRootContext"],"entryPoint":"packages/ui/react-ui-table/src/index.ts","inputs":{"packages/ui/react-ui-table/src/translations.ts":{"bytesInOutput":611},"packages/ui/react-ui-table/src/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx":{"bytesInOutput":2989},"packages/ui/react-ui-table/src/components/Cell/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/ColumnMenu/ColumnMenu.tsx":{"bytesInOutput":6168},"packages/ui/react-ui-table/src/components/ColumnMenu/ColumnSettingsForm.tsx":{"bytesInOutput":7006},"packages/ui/react-ui-table/src/hooks/useColumnSizing.ts":{"bytesInOutput":1068},"packages/ui/react-ui-table/src/hooks/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/hooks/useColumnSorting.ts":{"bytesInOutput":1472},"packages/ui/react-ui-table/src/components/Table/TableContext.tsx":{"bytesInOutput":358},"packages/ui/react-ui-table/src/hooks/usePinLastRow.ts":{"bytesInOutput":1381},"packages/ui/react-ui-table/src/hooks/useRowSelection.ts":{"bytesInOutput":1055},"packages/ui/react-ui-table/src/components/ColumnMenu/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/Table/Table.tsx":{"bytesInOutput":7453},"packages/ui/react-ui-table/src/components/Table/TableBody.tsx":{"bytesInOutput":1983},"packages/ui/react-ui-table/src/components/Table/TableRootContext.ts":{"bytesInOutput":758},"packages/ui/react-ui-table/src/theme.ts":{"bytesInOutput":2185},"packages/ui/react-ui-table/src/components/Cell/Cell.tsx":{"bytesInOutput":973},"packages/ui/react-ui-table/src/components/Table/TableFooter.tsx":{"bytesInOutput":1015},"packages/ui/react-ui-table/src/components/Table/TableHead.tsx":{"bytesInOutput":1739},"packages/ui/react-ui-table/src/components/Table/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/helpers.tsx":{"bytesInOutput":13550},"packages/ui/react-ui-table/src/schema/schema.ts":{"bytesInOutput":1962},"packages/ui/react-ui-table/src/schema/schemaToColumns.ts":{"bytesInOutput":1047},"packages/ui/react-ui-table/src/schema/index.ts":{"bytesInOutput":0}},"bytes":56882}}}
|
|
1
|
+
{"inputs":{"packages/ui/react-ui-table/src/translations.ts":{"bytes":2399,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx":{"bytes":11816,"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":526,"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/ColumnMenu/ColumnSettingsForm.tsx":{"bytes":25524,"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/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"packages/ui/react-ui-table/src/hooks/useColumnSizing.ts":{"bytes":5085,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableContext.tsx":{"bytes":3088,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/hooks/useColumnSorting.ts":{"bytes":6849,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"../components/Table/TableContext"}],"format":"esm"},"packages/ui/react-ui-table/src/hooks/usePinLastRow.ts":{"bytes":6405,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/index.ts","kind":"import-statement","original":"../components"}],"format":"esm"},"packages/ui/react-ui-table/src/hooks/useRowSelection.ts":{"bytes":5102,"imports":[{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/hooks/index.ts":{"bytes":847,"imports":[{"path":"packages/ui/react-ui-table/src/hooks/useColumnSizing.ts","kind":"import-statement","original":"./useColumnSizing"},{"path":"packages/ui/react-ui-table/src/hooks/useColumnSorting.ts","kind":"import-statement","original":"./useColumnSorting"},{"path":"packages/ui/react-ui-table/src/hooks/usePinLastRow.ts","kind":"import-statement","original":"./usePinLastRow"},{"path":"packages/ui/react-ui-table/src/hooks/useRowSelection.ts","kind":"import-statement","original":"./useRowSelection"}],"format":"esm"},"packages/ui/react-ui-table/src/components/ColumnMenu/ColumnMenu.tsx":{"bytes":21244,"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":"packages/ui/react-ui-table/src/components/ColumnMenu/ColumnSettingsForm.tsx","kind":"import-statement","original":"./ColumnSettingsForm"},{"path":"packages/ui/react-ui-table/src/hooks/index.ts","kind":"import-statement","original":"../../hooks"}],"format":"esm"},"packages/ui/react-ui-table/src/components/ColumnMenu/index.ts":{"bytes":640,"imports":[{"path":"packages/ui/react-ui-table/src/components/ColumnMenu/ColumnMenu.tsx","kind":"import-statement","original":"./ColumnMenu"},{"path":"packages/ui/react-ui-table/src/components/ColumnMenu/ColumnSettingsForm.tsx","kind":"import-statement","original":"./ColumnSettingsForm"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableRootContext.ts":{"bytes":3971,"imports":[{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/theme.ts":{"bytes":10278,"imports":[{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/Cell.tsx":{"bytes":4914,"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":8958,"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/components/Table/TableRootContext.ts","kind":"import-statement","original":"./TableRootContext"},{"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":4698,"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":7951,"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":31633,"imports":[{"path":"@radix-ui/react-slot","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","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","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/components/Table/TableRootContext.ts","kind":"import-statement","original":"./TableRootContext"},{"path":"packages/ui/react-ui-table/src/hooks/index.ts","kind":"import-statement","original":"../../hooks"},{"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":2907,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/index.ts":{"bytes":701,"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"},{"path":"packages/ui/react-ui-table/src/components/Table/TableRootContext.ts","kind":"import-statement","original":"./TableRootContext"}],"format":"esm"},"packages/ui/react-ui-table/src/components/index.ts":{"bytes":676,"imports":[{"path":"packages/ui/react-ui-table/src/components/Cell/index.ts","kind":"import-statement","original":"./Cell"},{"path":"packages/ui/react-ui-table/src/components/ColumnMenu/index.ts","kind":"import-statement","original":"./ColumnMenu"},{"path":"packages/ui/react-ui-table/src/components/Table/index.ts","kind":"import-statement","original":"./Table"}],"format":"esm"},"packages/ui/react-ui-table/src/helpers.tsx":{"bytes":55498,"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/schema.ts":{"bytes":9636,"imports":[{"path":"@effect/schema/AST","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/schema/schemaToColumns.ts":{"bytes":5260,"imports":[{"path":"packages/ui/react-ui-table/src/schema/schema.ts","kind":"import-statement","original":"./schema"},{"path":"packages/ui/react-ui-table/src/helpers.tsx","kind":"import-statement","original":"../helpers"}],"format":"esm"},"packages/ui/react-ui-table/src/schema/types.ts":{"bytes":1149,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/schema/index.ts":{"bytes":605,"imports":[{"path":"packages/ui/react-ui-table/src/schema/schemaToColumns.ts","kind":"import-statement","original":"./schemaToColumns"},{"path":"packages/ui/react-ui-table/src/schema/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/ui/react-ui-table/src/types.ts":{"bytes":1862,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/index.ts":{"bytes":1142,"imports":[{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"./translations"},{"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/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/ui/react-ui-table/src/schema/index.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/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":119572},"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-searchlist","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-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-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","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","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":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","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":"@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":"@effect/schema/AST","kind":"import-statement","external":true}],"exports":["CellCombobox","ColumnBuilder","ColumnMenu","ColumnSettingsForm","MemoizedVirtualizedTableContent","SortIndicator","Table","TablePrimitive","TableRootContext","createColumnBuilder","currentRow","flushPadding","gridCellFocusRing","groupTh","headPadding","schemaToColumnDefs","selectedRow","tableRoot","tbodyRoot","tbodyTr","tdContent","tdRoot","textPadding","tfootRoot","tfootTh","tfootTr","theadResizeRoot","theadRoot","theadTh","theadTr","translations","useColumnResizing","useColumnSorting","usePinLastRow","useRowSelection","useSortColumn","useTableRootContext"],"entryPoint":"packages/ui/react-ui-table/src/index.ts","inputs":{"packages/ui/react-ui-table/src/translations.ts":{"bytesInOutput":611},"packages/ui/react-ui-table/src/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx":{"bytesInOutput":2989},"packages/ui/react-ui-table/src/components/Cell/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/ColumnMenu/ColumnMenu.tsx":{"bytesInOutput":6168},"packages/ui/react-ui-table/src/components/ColumnMenu/ColumnSettingsForm.tsx":{"bytesInOutput":7006},"packages/ui/react-ui-table/src/hooks/useColumnSizing.ts":{"bytesInOutput":1068},"packages/ui/react-ui-table/src/hooks/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/hooks/useColumnSorting.ts":{"bytesInOutput":1472},"packages/ui/react-ui-table/src/components/Table/TableContext.tsx":{"bytesInOutput":331},"packages/ui/react-ui-table/src/hooks/usePinLastRow.ts":{"bytesInOutput":1381},"packages/ui/react-ui-table/src/hooks/useRowSelection.ts":{"bytesInOutput":1055},"packages/ui/react-ui-table/src/components/ColumnMenu/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/Table/Table.tsx":{"bytesInOutput":7452},"packages/ui/react-ui-table/src/components/Table/TableBody.tsx":{"bytesInOutput":1983},"packages/ui/react-ui-table/src/components/Table/TableRootContext.ts":{"bytesInOutput":758},"packages/ui/react-ui-table/src/theme.ts":{"bytesInOutput":2185},"packages/ui/react-ui-table/src/components/Cell/Cell.tsx":{"bytesInOutput":973},"packages/ui/react-ui-table/src/components/Table/TableFooter.tsx":{"bytesInOutput":1015},"packages/ui/react-ui-table/src/components/Table/TableHead.tsx":{"bytesInOutput":1739},"packages/ui/react-ui-table/src/components/Table/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/helpers.tsx":{"bytesInOutput":13550},"packages/ui/react-ui-table/src/schema/schema.ts":{"bytesInOutput":1962},"packages/ui/react-ui-table/src/schema/schemaToColumns.ts":{"bytesInOutput":1047},"packages/ui/react-ui-table/src/schema/index.ts":{"bytesInOutput":0}},"bytes":56854}}}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { type Primitive } from '@radix-ui/react-primitive';
|
|
2
|
-
import React, { type ComponentPropsWithoutRef } from 'react';
|
|
2
|
+
import React, { type ComponentPropsWithoutRef, type ReactNode } from 'react';
|
|
3
3
|
import { type ThemedClassName } from '@dxos/react-ui';
|
|
4
4
|
import { type TableProps } from './props';
|
|
5
5
|
type TableRootProps = {
|
|
6
|
-
children:
|
|
6
|
+
children: ReactNode;
|
|
7
7
|
};
|
|
8
8
|
type TableViewportProps = ThemedClassName<ComponentPropsWithoutRef<typeof Primitive.div>> & {
|
|
9
9
|
asChild?: boolean;
|
|
10
10
|
};
|
|
11
11
|
export declare const TablePrimitive: <TData extends unknown>(props: TableProps<TData>) => JSX.Element;
|
|
12
|
-
export declare const
|
|
12
|
+
export declare const MemoizedVirtualizedTableContent: React.MemoExoticComponent<() => JSX.Element>;
|
|
13
13
|
export declare const Table: {
|
|
14
14
|
Root: ({ children }: TableRootProps) => JSX.Element;
|
|
15
15
|
Viewport: ({ children, classNames, asChild, ...props }: TableViewportProps) => JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/Table.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAY3D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/Table.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAY3D,OAAO,KAAK,EAAE,EACZ,KAAK,wBAAwB,EAM7B,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,KAAK,eAAe,EAAmB,MAAM,gBAAgB,CAAC;AAQvE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAI1C,KAAK,cAAc,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAC;AAO9C,KAAK,kBAAkB,GAAG,eAAe,CAAC,wBAAwB,CAAC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG;IAC1F,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAkBF,eAAO,MAAM,cAAc,iCAAkC,WAAW,KAAK,CAAC,gBAwG7E,CAAC;AAyFF,eAAO,MAAM,+BAA+B,8CAAgC,CAAC;AAqC7E,eAAO,MAAM,KAAK;yBA/Pe,cAAc;4DASqB,kBAAkB;yCAgBzB,WAAW,KAAK,CAAC;CA0O7E,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type RowData } from '@tanstack/react-table';
|
|
2
|
-
import
|
|
2
|
+
import { type ReactNode, type FC } from 'react';
|
|
3
3
|
import { type TableContextValue } from './props';
|
|
4
4
|
export declare const TABLE_NAME = "Table";
|
|
5
5
|
export type TypedTableProvider<TData extends RowData> = {
|
|
@@ -8,7 +8,7 @@ export type TypedTableProvider<TData extends RowData> = {
|
|
|
8
8
|
}): JSX.Element;
|
|
9
9
|
displayName: string;
|
|
10
10
|
};
|
|
11
|
-
export declare const TableProvider:
|
|
11
|
+
export declare const TableProvider: FC<TableContextValue<RowData> & {
|
|
12
12
|
children: ReactNode;
|
|
13
13
|
}>;
|
|
14
14
|
export declare const useTableContext: <TData extends unknown>() => TableContextValue<TData>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableContext.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/TableContext.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,
|
|
1
|
+
{"version":3,"file":"TableContext.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/TableContext.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAc,EAA6B,KAAK,SAAS,EAAE,KAAK,EAAE,EAAgB,MAAM,OAAO,CAAC;AAEhG,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,eAAO,MAAM,UAAU,UAAU,CAAC;AAMlC,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,OAAO,IAAI;IACtD,CAAC,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,GAAG,GAAG,CAAC,OAAO,CAAC;IACzE,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CAElF,CAAC;AAGF,eAAO,MAAM,eAAe,+BAA8B,kBAAkB,KAAK,CAEhF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/react-ui-table",
|
|
3
|
-
"version": "0.5.9-main.
|
|
3
|
+
"version": "0.5.9-main.bdb299c",
|
|
4
4
|
"description": "A table component.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -26,15 +26,15 @@
|
|
|
26
26
|
"@tanstack/react-virtual": "^3.0.1",
|
|
27
27
|
"date-fns": "^3.3.1",
|
|
28
28
|
"effect": "^3.2.7",
|
|
29
|
-
"@dxos/async": "0.5.9-main.
|
|
30
|
-
"@dxos/
|
|
31
|
-
"@dxos/
|
|
32
|
-
"@dxos/log": "0.5.9-main.
|
|
33
|
-
"@dxos/react-ui": "0.5.9-main.
|
|
34
|
-
"@dxos/react-ui-searchlist": "0.5.9-main.
|
|
35
|
-
"@dxos/react-ui-types": "0.5.9-main.
|
|
36
|
-
"@dxos/react-ui-theme": "0.5.9-main.
|
|
37
|
-
"@dxos/util": "0.5.9-main.
|
|
29
|
+
"@dxos/async": "0.5.9-main.bdb299c",
|
|
30
|
+
"@dxos/keys": "0.5.9-main.bdb299c",
|
|
31
|
+
"@dxos/invariant": "0.5.9-main.bdb299c",
|
|
32
|
+
"@dxos/log": "0.5.9-main.bdb299c",
|
|
33
|
+
"@dxos/react-ui": "0.5.9-main.bdb299c",
|
|
34
|
+
"@dxos/react-ui-searchlist": "0.5.9-main.bdb299c",
|
|
35
|
+
"@dxos/react-ui-types": "0.5.9-main.bdb299c",
|
|
36
|
+
"@dxos/react-ui-theme": "0.5.9-main.bdb299c",
|
|
37
|
+
"@dxos/util": "0.5.9-main.bdb299c"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@phosphor-icons/react": "^2.1.5",
|
|
@@ -44,11 +44,11 @@
|
|
|
44
44
|
"react": "^18.2.0",
|
|
45
45
|
"react-dom": "^18.2.0",
|
|
46
46
|
"vite": "^5.2.9",
|
|
47
|
-
"@dxos/echo-
|
|
48
|
-
"@dxos/echo-
|
|
49
|
-
"@dxos/
|
|
50
|
-
"@dxos/
|
|
51
|
-
"@dxos/storybook-utils": "0.5.9-main.
|
|
47
|
+
"@dxos/echo-signals": "0.5.9-main.bdb299c",
|
|
48
|
+
"@dxos/echo-schema": "0.5.9-main.bdb299c",
|
|
49
|
+
"@dxos/react-ui-theme": "0.5.9-main.bdb299c",
|
|
50
|
+
"@dxos/random": "0.5.9-main.bdb299c",
|
|
51
|
+
"@dxos/storybook-utils": "0.5.9-main.bdb299c"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
54
|
"@phosphor-icons/react": "^2.1.5",
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import '@dxosTheme';
|
|
6
6
|
|
|
7
7
|
import { type SortDirection } from '@tanstack/react-table';
|
|
8
|
-
import React from 'react';
|
|
8
|
+
import React, { useState } from 'react';
|
|
9
9
|
|
|
10
10
|
import { withTheme } from '@dxos/storybook-utils';
|
|
11
11
|
|
|
@@ -83,7 +83,7 @@ export const Default = {
|
|
|
83
83
|
|
|
84
84
|
export const ReactiveSort = {
|
|
85
85
|
render: () => {
|
|
86
|
-
const [sort, setSort] =
|
|
86
|
+
const [sort, setSort] = useState<SortDirection | false>(false);
|
|
87
87
|
const props = {
|
|
88
88
|
column: {
|
|
89
89
|
id: 'test',
|
|
@@ -14,7 +14,16 @@ import {
|
|
|
14
14
|
getSortedRowModel,
|
|
15
15
|
useReactTable,
|
|
16
16
|
} from '@tanstack/react-table';
|
|
17
|
-
import React, {
|
|
17
|
+
import React, {
|
|
18
|
+
type ComponentPropsWithoutRef,
|
|
19
|
+
Fragment,
|
|
20
|
+
useCallback,
|
|
21
|
+
useEffect,
|
|
22
|
+
useState,
|
|
23
|
+
useContext,
|
|
24
|
+
type ReactNode,
|
|
25
|
+
memo,
|
|
26
|
+
} from 'react';
|
|
18
27
|
|
|
19
28
|
import { type ThemedClassName, useDefaultValue } from '@dxos/react-ui';
|
|
20
29
|
import { mx } from '@dxos/react-ui-theme';
|
|
@@ -28,7 +37,7 @@ import { type TableProps } from './props';
|
|
|
28
37
|
import { useColumnResizing, useColumnSorting, usePinLastRow, useRowSelection } from '../../hooks';
|
|
29
38
|
import { groupTh, tableRoot } from '../../theme';
|
|
30
39
|
|
|
31
|
-
type TableRootProps = { children:
|
|
40
|
+
type TableRootProps = { children: ReactNode };
|
|
32
41
|
|
|
33
42
|
const TableRoot = ({ children }: TableRootProps) => {
|
|
34
43
|
const contextValue = useTableRootContext();
|
|
@@ -161,7 +170,7 @@ export const TablePrimitive = <TData extends RowData>(props: TableProps<TData>)
|
|
|
161
170
|
);
|
|
162
171
|
};
|
|
163
172
|
|
|
164
|
-
// TODO(
|
|
173
|
+
// TODO(zan): Smush this into the Table component.
|
|
165
174
|
/**
|
|
166
175
|
* Pure implementation of table outside of context set-up.
|
|
167
176
|
*/
|
|
@@ -179,7 +188,7 @@ const TableImpl = <TData extends RowData>(props: TableProps<TData>) => {
|
|
|
179
188
|
|
|
180
189
|
const isResizingColumn = table.getState().columnSizingInfo.isResizingColumn;
|
|
181
190
|
|
|
182
|
-
const TableComponent = isResizingColumn ?
|
|
191
|
+
const TableComponent = isResizingColumn ? MemoizedVirtualizedTableContent : VirtualizedTableContent;
|
|
183
192
|
|
|
184
193
|
return (
|
|
185
194
|
<table
|
|
@@ -248,7 +257,7 @@ const VirtualizedTableContent = () => {
|
|
|
248
257
|
);
|
|
249
258
|
};
|
|
250
259
|
|
|
251
|
-
export const
|
|
260
|
+
export const MemoizedVirtualizedTableContent = memo(VirtualizedTableContent);
|
|
252
261
|
|
|
253
262
|
const GroupedTableContent = () => {
|
|
254
263
|
const {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type RowData } from '@tanstack/react-table';
|
|
6
|
-
import React, { useContext, createContext, type ReactNode } from 'react';
|
|
6
|
+
import React, { useContext, createContext, type ReactNode, type FC, type Context } from 'react';
|
|
7
7
|
|
|
8
8
|
import { type TableContextValue } from './props';
|
|
9
9
|
|
|
@@ -18,16 +18,11 @@ export type TypedTableProvider<TData extends RowData> = {
|
|
|
18
18
|
displayName: string;
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
export const TableProvider:
|
|
22
|
-
children,
|
|
23
|
-
...value
|
|
24
|
-
}) => {
|
|
21
|
+
export const TableProvider: FC<TableContextValue<RowData> & { children: ReactNode }> = ({ children, ...value }) => {
|
|
25
22
|
return <TableContext.Provider value={value}>{children}</TableContext.Provider>;
|
|
26
23
|
};
|
|
27
24
|
|
|
28
|
-
// Create a custom hook to consume the context
|
|
25
|
+
// Create a custom hook to consume the context.
|
|
29
26
|
export const useTableContext = <TData extends RowData>(): TableContextValue<TData> => {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return context;
|
|
27
|
+
return useContext(TableContext as Context<TableContextValue<TData>>);
|
|
33
28
|
};
|
package/src/helpers.tsx
CHANGED
|
@@ -468,7 +468,7 @@ export class ColumnBuilder<TData extends RowData> {
|
|
|
468
468
|
size: 50,
|
|
469
469
|
minSize: 50,
|
|
470
470
|
header: (column) => label ?? column.header.id,
|
|
471
|
-
// TODO(
|
|
471
|
+
// TODO(zan): Implement sort algorithm
|
|
472
472
|
enableSorting: true,
|
|
473
473
|
cell: SwitchBuilderCell,
|
|
474
474
|
...props,
|
|
@@ -484,7 +484,7 @@ export class ColumnBuilder<TData extends RowData> {
|
|
|
484
484
|
const IconOff = off?.Icon ?? X;
|
|
485
485
|
return {
|
|
486
486
|
size: size ?? 32,
|
|
487
|
-
// TODO(
|
|
487
|
+
// TODO(zan): Implement sort algorithm
|
|
488
488
|
enableSorting: false,
|
|
489
489
|
header: (column) => <div className={'justify-center'}>{label ?? column.header.id}</div>,
|
|
490
490
|
cell: (cell) => {
|