@dxos/react-ui-table 0.4.9 → 0.4.10-main.1ada56e

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.
@@ -229,7 +229,7 @@ var ColumnPanel = ({ context, tableDefs, tableDef, column, onUpdate, onDelete })
229
229
  import { useControllableState } from "@radix-ui/react-use-controllable-state";
230
230
  import { getCoreRowModel, getSortedRowModel, useReactTable, getGroupedRowModel, getExpandedRowModel } from "@tanstack/react-table";
231
231
  import { useVirtualizer } from "@tanstack/react-virtual";
232
- import React8, { Fragment, useCallback, useEffect, useState as useState2 } from "react";
232
+ import React8, { Fragment, useCallback, useEffect as useEffect2, useState as useState3 } from "react";
233
233
  import { log } from "@dxos/log";
234
234
  import { useDefaultValue, useOnTransition } from "@dxos/react-ui";
235
235
 
@@ -268,7 +268,7 @@ var theadResizeRoot = ({ isResizing }) => {
268
268
  return mx2("absolute h-full w-[4px] top-0 right-0", "cursor-col-resize", "user-select-none", "touch-action-none", !isResizing && "group-hover:bg-neutral-100 dark:group-hover:bg-neutral-800", "pointer-coarse:bg-neutral-100 dark:pointer-coarse:bg-neutral-800", isResizing && "bg-primary-500 dark:bg-primary-400");
269
269
  };
270
270
  var tbodyRoot = (_props, ...etc) => mx2(...etc);
271
- var tbodyTr = ({ canBeCurrent }, ...etc) => mx2("group", canBeCurrent ? ghostSelectedCurrent : ghostSelected, canBeCurrent && focusRing, canBeCurrent && "cursor-pointer rounded", ...etc);
271
+ var tbodyTr = ({ canBeCurrent, isPinned }, ...etc) => mx2("group", canBeCurrent ? ghostSelectedCurrent : ghostSelected, canBeCurrent && focusRing, canBeCurrent && "cursor-pointer rounded", isPinned && "sticky z-[20] bottom-[-1px] base-surface shadow-sm", ...etc);
272
272
  var tdRoot = ({ border, isGrid }, ...etc) => mx2("relative", flushPadding, border && "border", border && groupBorder, isGrid && gridCellFocusRing, ...etc);
273
273
  var tdContent = (_props, ...etc) => mx2(...etc);
274
274
  var tfootRoot = (_props, ...etc) => mx2("sticky block-end-0 z-10", modalSurface, ...etc);
@@ -318,11 +318,14 @@ var TableBody = ({ rows }) => {
318
318
  return /* @__PURE__ */ React5.createElement("tbody", isGrid && domAttributes, rows.map((row) => {
319
319
  const isCurrent = currentDatum === row.original;
320
320
  const isSelected = rowSelection?.[row.id];
321
+ const isPinned = row.getIsPinned();
322
+ const classNames = tbodyTr({
323
+ canBeCurrent,
324
+ isPinned: isPinned !== false
325
+ });
321
326
  return /* @__PURE__ */ React5.createElement("tr", {
322
327
  key: keyAccessor ? keyAccessor(row.original) : row.id,
323
- className: tbodyTr({
324
- canBeCurrent
325
- }),
328
+ className: classNames,
326
329
  ...isCurrent && {
327
330
  "aria-current": "location"
328
331
  },
@@ -419,6 +422,42 @@ var TableHead = (_props) => {
419
422
  };
420
423
  TableHead.displayName = TABLE_HEAD_NAME;
421
424
 
425
+ // packages/ui/react-ui-table/src/components/hooks/usePinLastRow.ts
426
+ import { useEffect, useState as useState2 } from "react";
427
+ var usePinLastRow = (pinLastRow, table, data, getScrollElement) => {
428
+ const [pinnedRowKey, setPinnedRowKey] = useState2();
429
+ useEffect(() => {
430
+ if (!pinLastRow) {
431
+ return;
432
+ }
433
+ const rows = table.getRowModel().rows;
434
+ const rowToPin = rows[rows.length - 1];
435
+ const rowId = rowToPin.id;
436
+ if (rowId === pinnedRowKey) {
437
+ return;
438
+ }
439
+ table.resetRowPinning();
440
+ rowToPin.pin("bottom");
441
+ const scrollElement = getScrollElement?.();
442
+ const isFirstRender = pinnedRowKey === void 0;
443
+ if (scrollElement && !isFirstRender) {
444
+ requestAnimationFrame(() => {
445
+ scrollElement.scrollTo({
446
+ top: scrollElement.scrollHeight
447
+ });
448
+ });
449
+ }
450
+ setPinnedRowKey(rowId);
451
+ }, [
452
+ pinLastRow,
453
+ table,
454
+ getScrollElement,
455
+ pinnedRowKey,
456
+ setPinnedRowKey,
457
+ data
458
+ ]);
459
+ };
460
+
422
461
  // packages/ui/react-ui-table/src/components/Table/Table.tsx
423
462
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/ui/react-ui-table/src/components/Table/Table.tsx";
424
463
  var Table = (props) => {
@@ -426,9 +465,9 @@ var Table = (props) => {
426
465
  const columns = useDefaultValue(props.columns, []);
427
466
  const data = useDefaultValue(props.data, []);
428
467
  const TableProvider2 = TableProvider;
429
- const [columnsInitialised, setColumnsInitialised] = useState2(false);
430
- const [columnSizing, setColumnSizing] = useState2({});
431
- useEffect(() => {
468
+ const [columnsInitialised, setColumnsInitialised] = useState3(false);
469
+ const [columnSizing, setColumnSizing] = useState3({});
470
+ useEffect2(() => {
432
471
  if (columnsInitialised) {
433
472
  return;
434
473
  }
@@ -441,7 +480,7 @@ var Table = (props) => {
441
480
  columns,
442
481
  setColumnSizing
443
482
  ]);
444
- const [columnSizingInfo, setColumnSizingInfo] = useState2({});
483
+ const [columnSizingInfo, setColumnSizingInfo] = useState3({});
445
484
  const notifyColumnResize = useCallback(() => onColumnResize?.(columnSizing), [
446
485
  onColumnResize,
447
486
  columnSizing
@@ -469,8 +508,8 @@ var Table = (props) => {
469
508
  setRowSelection,
470
509
  rowSelection
471
510
  ]);
472
- const [grouping, handleGroupingChange] = useState2(props.grouping ?? []);
473
- useEffect(() => handleGroupingChange(props.grouping ?? []), [
511
+ const [grouping, handleGroupingChange] = useState3(props.grouping ?? []);
512
+ useEffect2(() => handleGroupingChange(props.grouping ?? []), [
474
513
  handleGroupingChange,
475
514
  props.grouping
476
515
  ]);
@@ -512,30 +551,19 @@ var Table = (props) => {
512
551
  // Debug
513
552
  debugTable: debug
514
553
  });
515
- useEffect(() => {
554
+ useEffect2(() => {
516
555
  onDataSelectionChange?.(Object.keys(rowSelection).map((id) => table.getRowModel().rowsById[id].original));
517
556
  }, [
518
557
  onDataSelectionChange,
519
558
  rowSelection,
520
559
  table
521
560
  ]);
522
- useEffect(() => {
523
- if (!pinLastRow) {
524
- return;
525
- }
526
- table.resetRowPinning();
527
- const rows = table.getRowModel().rows;
528
- rows[rows.length - 1].pin("bottom");
529
- }, [
530
- pinLastRow,
531
- table,
532
- data
533
- ]);
561
+ usePinLastRow(pinLastRow, table, data, getScrollElement);
534
562
  const expand = false;
535
563
  if (!getScrollElement) {
536
564
  log.warn("Table: getScrollElement is not set. This is required for virtualized tables.", void 0, {
537
565
  F: __dxlog_file,
538
- L: 168,
566
+ L: 159,
539
567
  S: void 0,
540
568
  C: (f, a) => f(...a)
541
569
  });
@@ -588,13 +616,9 @@ var VirtualizedTableContent = ({ getScrollElement }) => {
588
616
  const { table } = useTableContext();
589
617
  const centerRows = table.getCenterRows();
590
618
  const pinnedRows = table.getBottomRows();
591
- const rows = [
592
- ...centerRows,
593
- ...pinnedRows
594
- ];
595
619
  const { getTotalSize, getVirtualItems } = useVirtualizer({
596
620
  getScrollElement,
597
- count: rows.length,
621
+ count: centerRows.length,
598
622
  overscan: 8,
599
623
  estimateSize: () => 40
600
624
  });
@@ -602,6 +626,10 @@ var VirtualizedTableContent = ({ getScrollElement }) => {
602
626
  const totalSize = getTotalSize();
603
627
  const paddingTop = virtualRows.length > 0 ? virtualRows?.[0]?.start || 0 : 0;
604
628
  const paddingBottom = virtualRows.length > 0 ? totalSize - (virtualRows?.[virtualRows.length - 1]?.end || 0) : 0;
629
+ const rowsToRender = [
630
+ ...virtualRows.map((virtualRow) => centerRows[virtualRow.index]),
631
+ ...pinnedRows
632
+ ];
605
633
  return /* @__PURE__ */ React8.createElement(React8.Fragment, null, paddingTop > 0 && /* @__PURE__ */ React8.createElement("tbody", {
606
634
  role: "none"
607
635
  }, /* @__PURE__ */ React8.createElement("tr", {
@@ -612,7 +640,7 @@ var VirtualizedTableContent = ({ getScrollElement }) => {
612
640
  },
613
641
  role: "none"
614
642
  }))), /* @__PURE__ */ React8.createElement(TableBody, {
615
- rows: virtualRows.map((virtualRow) => rows[virtualRow.index])
643
+ rows: rowsToRender
616
644
  }), paddingBottom > 0 && /* @__PURE__ */ React8.createElement("tbody", {
617
645
  role: "none"
618
646
  }, /* @__PURE__ */ React8.createElement("tr", {
@@ -642,7 +670,7 @@ var GroupedTableContent = () => {
642
670
 
643
671
  // packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx
644
672
  import { CaretDown } from "@phosphor-icons/react";
645
- import React9, { useCallback as useCallback2, useState as useState3 } from "react";
673
+ import React9, { useCallback as useCallback2, useState as useState4 } from "react";
646
674
  import { Popover as Popover2, useTranslation as useTranslation2 } from "@dxos/react-ui";
647
675
  import { PopoverCombobox } from "@dxos/react-ui-searchlist";
648
676
  import { descriptionText, getSize as getSize3, mx as mx3, staticPlaceholderText } from "@dxos/react-ui-theme";
@@ -654,9 +682,9 @@ var initialItems = (model, value) => value ? {
654
682
  } : {};
655
683
  var CellCombobox = ({ model, value, onValueChange }) => {
656
684
  const { t } = useTranslation2(translationKey);
657
- const [items, setItems] = useState3(initialItems(model, value));
658
- const [loading, setLoading] = useState3(false);
659
- const [searchInputValue, setSearchInputValue] = useState3("");
685
+ const [items, setItems] = useState4(initialItems(model, value));
686
+ const [loading, setLoading] = useState4(false);
687
+ const [searchInputValue, setSearchInputValue] = useState4("");
660
688
  const handleSearchInputValueChange = async (text) => {
661
689
  setSearchInputValue(text ?? "");
662
690
  setLoading(true);
@@ -715,7 +743,7 @@ import { Check as Check2, ClipboardText, X as X2 } from "@phosphor-icons/react";
715
743
  import { createColumnHelper } from "@tanstack/react-table";
716
744
  import { format } from "date-fns/format";
717
745
  import { formatDistanceToNow } from "date-fns/formatDistanceToNow";
718
- import React10, { useEffect as useEffect2, useRef as useRef2, useState as useState4 } from "react";
746
+ import React10, { useEffect as useEffect3, useRef as useRef2, useState as useState5 } from "react";
719
747
  import { log as log2 } from "@dxos/log";
720
748
  import { Input as Input2, Tooltip } from "@dxos/react-ui";
721
749
  import { getSize as getSize4, mx as mx4 } from "@dxos/react-ui-theme";
@@ -737,7 +765,7 @@ var StringBuilderCell = (cellContext) => {
737
765
  const { findPrevFocusable } = useFocusFinders();
738
766
  const { onUpdate, cell } = cellContext.column.columnDef.meta;
739
767
  const initialValue = cellContext.getValue();
740
- const [value, setValue] = useState4(() => {
768
+ const [value, setValue] = useState5(() => {
741
769
  if (initialValue?.content) {
742
770
  return initialValue?.content;
743
771
  }
@@ -779,10 +807,10 @@ var displayNumber = (value, digits) => value || value === 0 ? value.toLocaleStri
779
807
  var NumberBuilderCell = (cellContext) => {
780
808
  const { onUpdate, digits } = cellContext.column.columnDef.meta;
781
809
  const value = cellContext.getValue();
782
- const [text, setText] = useState4(displayNumber(value, digits));
810
+ const [text, setText] = useState5(displayNumber(value, digits));
783
811
  const { findPrevFocusable } = useFocusFinders();
784
812
  const ref = useRef2(null);
785
- useEffect2(() => {
813
+ useEffect3(() => {
786
814
  (!document.activeElement || document.activeElement !== ref.current) && setText(displayNumber(value, digits));
787
815
  }, [
788
816
  digits,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/components/ColumnMenu.tsx", "../../../src/components/SortButton.tsx", "../../../src/translations.ts", "../../../src/components/Table/Table.tsx", "../../../src/components/Table/TableBody.tsx", "../../../src/components/Table/TableContext.tsx", "../../../src/theme.ts", "../../../src/components/Cell/Cell.tsx", "../../../src/components/Table/TableFooter.tsx", "../../../src/components/Table/TableHead.tsx", "../../../src/components/Cell/CellCombobox.tsx", "../../../src/helpers.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Check, Trash, X, GearSix } from '@phosphor-icons/react';\nimport { type HeaderContext, type RowData } from '@tanstack/react-table';\nimport React, { type FC, type PropsWithChildren, useRef, useState } from 'react';\n\nimport { Button, DensityProvider, Input, Popover, Select, Separator, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\nimport { safeParseInt } from '@dxos/util';\n\nimport { SortButton } from './SortButton';\nimport { type TableDef, type ColumnProps, type ColumnType } from '../schema';\nimport { translationKey } from '../translations';\n\nexport type ColumnMenuProps<TData extends RowData, TValue> = {\n context: HeaderContext<TData, TValue>;\n tableDefs: TableDef[];\n tableDef: TableDef;\n column: ColumnProps;\n onUpdate?: (id: string, column: ColumnProps) => void;\n onDelete?: (id: string) => void;\n};\n\nexport const ColumnMenu = <TData extends RowData, TValue>({ column, ...props }: ColumnMenuProps<TData, TValue>) => {\n const title = column.label?.length ? column.label : column.id;\n\n const header = props.context.header;\n\n const canSort = header.column.getCanSort();\n const sortDirection = header.column.getIsSorted();\n const toggleSort = header.column.getToggleSortingHandler();\n\n return (\n <div className='flex items-center gap-2'>\n <div className='flex-1 min-is-0 truncate' title={title}>\n {title}\n </div>\n <div className='flex gap-0'>\n {canSort && toggleSort && <SortButton sortDirection={sortDirection} onClick={toggleSort} />}\n <ColumnPanel {...props} column={column} />\n </div>\n </div>\n );\n};\n\nconst Section: FC<PropsWithChildren & { className?: string }> = ({ children, className }) => (\n <div role='none' className={mx('p-2', className)}>\n {children}\n </div>\n);\n\nexport const ColumnPanel = <TData extends RowData, TValue>({\n context,\n tableDefs,\n tableDef,\n column,\n onUpdate,\n onDelete,\n}: ColumnMenuProps<TData, TValue>) => {\n const [open, setOpen] = useState(false);\n const [prop, setProp] = useState(column.id);\n const [refTable, setRefTable] = useState(column.refTable);\n const [refProp, setRefProp] = useState(column.refProp);\n const [type, setType] = useState(String(column.type));\n const [label, setLabel] = useState(column.label);\n const [digits, setDigits] = useState(String(column.digits ?? '0'));\n const propRef = useRef<HTMLInputElement>(null);\n const { t } = useTranslation(translationKey);\n\n const handleCancel = () => {\n setProp(column.id);\n setOpen(false);\n };\n\n const handleSave = () => {\n // Check valid.\n if (!prop.length || !prop.match(/^[a-zA-Z_].+/i)) {\n propRef.current?.focus();\n return;\n }\n\n // If already exists then check same type.\n const current = tableDef.columns.find((c) => c.id !== column.id && c.id === prop);\n if (current) {\n // TODO(burdon): Allow multiple columns with different refProps. Ensure correct table prop is updated.\n if (current.type !== 'ref' /* || current.ref !== refTable */) {\n // TODO(burdon): Show error.\n propRef.current?.focus();\n return;\n }\n }\n\n onUpdate?.(prop, {\n id: prop, // TODO(burdon): Make unique.\n prop,\n label,\n type: type as ColumnProps['type'],\n refTable,\n refProp,\n digits: safeParseInt(digits),\n });\n\n setOpen(false);\n };\n\n return (\n <Popover.Root open={open} onOpenChange={(nextOpen) => setOpen(nextOpen)}>\n <Popover.Trigger asChild>\n <Button variant='ghost'>\n <GearSix className={mx(getSize(4), 'rotate-90')} />\n </Button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content>\n <Popover.Viewport classNames='w-60'>\n <DensityProvider density='fine'>\n <div className='flex flex-col gap-1'>\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1'>{t('column label label')}</Input.Label>\n <Input.TextInput\n placeholder='Column label'\n value={label ?? ''}\n onChange={(event) => setLabel(event.target.value)}\n autoFocus\n />\n </Input.Root>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('property key label')}</Input.Label>\n <Input.TextInput\n ref={propRef}\n placeholder='Property key'\n // TODO(burdon): Provide hooks for value normalization, ENTER, ESC, etc.\n value={prop ?? ''}\n onChange={(event) => setProp(event.target.value.replace(/[^\\w_]/g, ''))}\n />\n </Input.Root>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('column type label')}</Input.Label>\n <Select.Root value={type} onValueChange={setType}>\n <Select.TriggerButton placeholder='Type' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {(['number', 'boolean', 'string', 'ref'] as ColumnType[]).map((type) => (\n <Select.Option key={type} value={type}>\n {t(`${type} column type label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n </Section>\n\n {type === 'number' && (\n <>\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('digits label')}</Input.Label>\n {/* TODO(burdon): Constrain input to numbers. */}\n <Input.TextInput value={digits ?? ''} onChange={(event) => setDigits(event.target.value)} />\n </Input.Root>\n </Section>\n </>\n )}\n\n {/* TODO(burdon): Selectors on same line. */}\n {type === 'ref' && (\n <>\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>Table</Input.Label>\n <Select.Root value={refTable} onValueChange={setRefTable}>\n <Select.TriggerButton placeholder='Table' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {tableDefs\n .filter((t) => t.id !== tableDef.id)\n .map(({ id, name }) => (\n <Select.Option key={id} value={id}>\n {name ?? id}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n\n {refTable && (\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>Table property</Input.Label>\n <Select.Root value={refProp} onValueChange={setRefProp}>\n <Select.TriggerButton placeholder='Property' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {tableDefs\n .find((tableDef) => tableDef.id === refTable)\n ?.columns.map(({ id, label }) => (\n <Select.Option key={id} value={id}>\n {label ?? id}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n )}\n </Section>\n </>\n )}\n\n <Separator classNames='mli-2' />\n\n <Section className='space-b-1.5'>\n {/* TODO(burdon): Style as DropdownMenuItem. */}\n <Button variant='primary' classNames='is-full flex gap-2' onClick={handleSave}>\n <span>{t('save label')}</span>\n <div className='grow' />\n <Check className={getSize(5)} />\n </Button>\n <Button classNames='is-full flex gap-2' onClick={handleCancel}>\n <span>{t('cancel label', { ns: 'os' })}</span>\n <div className='grow' />\n <X className={getSize(5)} />\n </Button>\n <Button classNames='is-full flex gap-2' onClick={() => onDelete?.(column.id)}>\n <span>{t('delete label')}</span>\n <div className='grow' />\n <Trash className={getSize(5)} />\n </Button>\n </Section>\n </div>\n </DensityProvider>\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { CaretUpDown, SortAscending, SortDescending } from '@phosphor-icons/react';\nimport { type SortDirection } from '@tanstack/react-table';\nimport React, { type ReactElement } from 'react';\n\nimport { Button } from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\ntype SortButtonProps = { sortDirection: false | SortDirection; onClick: (e: any) => void };\n\nexport const SortButton = ({ sortDirection, onClick }: SortButtonProps) => {\n let icon: ReactElement;\n const size = getSize(4);\n\n switch (sortDirection) {\n case 'asc':\n icon = <SortAscending className={size} />;\n break;\n case 'desc':\n icon = <SortDescending className={size} />;\n break;\n default:\n icon = <CaretUpDown className={size} />;\n }\n\n return (\n <Button variant='ghost' onClick={onClick}>\n {icon}\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const translationKey = 'table';\n\nexport default [\n {\n 'en-US': {\n [translationKey]: {\n 'no selection label': ' ',\n 'number column type label': 'Number',\n 'boolean column type label': 'Toggle',\n 'date column type label': 'Date',\n 'string column type label': 'Text',\n 'ref column type label': 'Reference',\n 'digits label': 'Decimal places',\n 'save label': 'Save',\n 'delete label': 'Delete',\n 'column label label': 'Label',\n 'property key label': 'Property',\n 'column type label': 'Type',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport {\n getCoreRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnSizingInfoState,\n type GroupingState,\n type RowData,\n type ColumnSizingState,\n type OnChangeFn,\n type RowSelectionState,\n getGroupedRowModel,\n getExpandedRowModel,\n} from '@tanstack/react-table';\nimport { useVirtualizer, type VirtualizerOptions } from '@tanstack/react-virtual';\nimport React, { Fragment, useCallback, useEffect, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useDefaultValue, useOnTransition } from '@dxos/react-ui';\n\nimport { TableBody } from './TableBody';\nimport { type TypedTableProvider, TableProvider as UntypedTableProvider, useTableContext } from './TableContext';\nimport { TableFooter } from './TableFooter';\nimport { TableHead } from './TableHead';\nimport { type TableProps } from './props';\nimport { groupTh, tableRoot } from '../../theme';\n\nexport const Table = <TData extends RowData>(props: TableProps<TData>) => {\n const {\n role,\n onColumnResize,\n columnVisibility,\n header = true,\n rowsSelectable,\n debug,\n onDataSelectionChange,\n getScrollElement,\n pinLastRow,\n } = props;\n\n const columns = useDefaultValue(props.columns, []);\n const data = useDefaultValue(props.data, []);\n\n const TableProvider = UntypedTableProvider as TypedTableProvider<TData>;\n\n const [columnsInitialised, setColumnsInitialised] = useState(false);\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>({});\n\n useEffect(() => {\n if (columnsInitialised) {\n return;\n }\n\n setColumnSizing(\n columns\n .filter((column) => !!column.size && (column as any).prop !== undefined)\n .reduce<ColumnSizingState>((state, column) => {\n state[(column as any).prop] = column.size!;\n return state;\n }, {}),\n );\n\n setColumnsInitialised(true);\n }, [columns, setColumnSizing]);\n\n const [columnSizingInfo, setColumnSizingInfo] = useState<ColumnSizingInfoState>({} as ColumnSizingInfoState);\n\n // Notify on column resize.\n const notifyColumnResize = useCallback(() => onColumnResize?.(columnSizing), [onColumnResize, columnSizing]);\n useOnTransition(columnSizingInfo.isResizingColumn, (v) => typeof v === 'string', false, notifyColumnResize);\n\n const [rowSelection = {}, setRowSelection] = useControllableState({\n prop: props.rowSelection,\n onChange: props.onRowSelectionChange,\n defaultProp: props.defaultRowSelection,\n });\n\n // TODO(thure): Does @tanstack/react-table really need this intervention? It did seem necessary to enforce single-selection...\n const handleRowSelectionChange = useCallback<OnChangeFn<RowSelectionState>>(\n (updaterOrValue) => {\n const nextRowSelection = typeof updaterOrValue === 'function' ? updaterOrValue(rowSelection) : updaterOrValue;\n if (rowsSelectable === 'multi') {\n setRowSelection(nextRowSelection);\n } else if (rowsSelectable) {\n const nextRowSelectionKey = Object.keys(nextRowSelection).filter((id) => !rowSelection[id])[0];\n setRowSelection(nextRowSelectionKey ? { [nextRowSelectionKey]: true } : {});\n } else {\n setRowSelection({});\n }\n },\n [rowsSelectable, setRowSelection, rowSelection],\n );\n\n const [grouping, handleGroupingChange] = useState<GroupingState>(props.grouping ?? []);\n useEffect(() => handleGroupingChange(props.grouping ?? []), [handleGroupingChange, props.grouping]);\n\n const table = useReactTable({\n // Data\n meta: {},\n data,\n\n // Columns\n columns,\n defaultColumn: {\n size: 256, // Required in order remove default width.\n maxSize: 1024,\n },\n\n // State\n state: {\n columnVisibility,\n columnSizing,\n columnSizingInfo,\n rowSelection,\n grouping,\n },\n\n // Resize columns\n columnResizeMode: 'onChange',\n enableColumnResizing: true,\n onColumnSizingChange: setColumnSizing,\n onColumnSizingInfoChange: setColumnSizingInfo,\n\n // Rows\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n\n // Grouping\n getGroupedRowModel: grouping.length > 1 ? getGroupedRowModel() : undefined,\n onGroupingChange: handleGroupingChange,\n\n enableMultiRowSelection: rowsSelectable === 'multi' ? true : undefined,\n enableRowSelection: rowsSelectable === true ? true : undefined,\n\n onRowSelectionChange: handleRowSelectionChange,\n\n enableSorting: true,\n enableColumnPinning: true,\n\n // Debug\n debugTable: debug,\n });\n\n useEffect(() => {\n onDataSelectionChange?.(Object.keys(rowSelection).map((id) => table.getRowModel().rowsById[id].original));\n }, [onDataSelectionChange, rowSelection, table]);\n\n useEffect(() => {\n if (!pinLastRow) {\n return;\n }\n\n // Clear row pinning\n table.resetRowPinning();\n\n const rows = table.getRowModel().rows;\n rows[rows.length - 1].pin('bottom');\n }, [pinLastRow, table, data]);\n\n // Create additional expansion column if all columns have fixed width.\n const expand = false; // columns.map((column) => column.size).filter(Boolean).length === columns?.length;\n\n if (!getScrollElement) {\n log.warn('Table: getScrollElement is not set. This is required for virtualized tables.');\n }\n\n return (\n <TableProvider\n {...props}\n table={table}\n header={header}\n expand={expand}\n isGrid={role === 'grid' || role === 'treegrid'}\n >\n <TableImpl<TData> debug={false} getScrollElement={getScrollElement} {...props} />\n </TableProvider>\n );\n};\n\n/**\n * Pure implementation of table outside of context set-up.\n */\nconst TableImpl = <TData extends RowData>(props: TableProps<TData>) => {\n const { debug, classNames, getScrollElement, role, footer, grouping, fullWidth } = props;\n const { table } = useTableContext();\n\n const centerRows = table.getCenterRows();\n const bottomRows = table.getBottomRows();\n\n const rows = [...centerRows, ...bottomRows];\n\n if (debug) {\n return (\n <pre className='font-mono text-xs text-neutral-500 m-1 p-2 ring'>\n <code>{JSON.stringify(table.getState(), undefined, 2)}</code>\n </pre>\n );\n }\n\n const virtualisable = getScrollElement !== undefined;\n const isResizingColumn = table.getState().columnSizingInfo.isResizingColumn;\n\n return (\n <table\n role={role}\n className={tableRoot(props, classNames)}\n {...(!fullWidth && { style: { width: table.getTotalSize() } })}\n >\n <TableHead />\n\n {grouping?.length !== 0 ? (\n virtualisable ? (\n isResizingColumn ? (\n <MemoizedVirtualisedTableContent getScrollElement={getScrollElement} />\n ) : (\n <VirtualizedTableContent getScrollElement={getScrollElement} />\n )\n ) : (\n <TableBody rows={rows} />\n )\n ) : (\n <GroupedTableContent />\n )}\n\n {footer && <TableFooter />}\n </table>\n );\n};\n\nconst VirtualizedTableContent = ({\n getScrollElement,\n}: Pick<VirtualizerOptions<Element, Element>, 'getScrollElement'>) => {\n const { table } = useTableContext();\n\n const centerRows = table.getCenterRows();\n const pinnedRows = table.getBottomRows();\n\n const rows = [...centerRows, ...pinnedRows];\n\n const { getTotalSize, getVirtualItems } = useVirtualizer({\n getScrollElement,\n count: rows.length,\n overscan: 8,\n estimateSize: () => 40,\n });\n\n const virtualRows = getVirtualItems();\n const totalSize = getTotalSize();\n\n const paddingTop = virtualRows.length > 0 ? virtualRows?.[0]?.start || 0 : 0;\n const paddingBottom = virtualRows.length > 0 ? totalSize - (virtualRows?.[virtualRows.length - 1]?.end || 0) : 0;\n\n return (\n <>\n {paddingTop > 0 && (\n <tbody role='none'>\n <tr role='none'>\n <td style={{ height: `${paddingTop}px` }} role='none' />\n </tr>\n </tbody>\n )}\n <TableBody rows={virtualRows.map((virtualRow) => rows[virtualRow.index])} />\n {paddingBottom > 0 && (\n <tbody role='none'>\n <tr role='none'>\n <td style={{ height: `${paddingBottom}px` }} role='none' />\n </tr>\n </tbody>\n )}\n </>\n );\n};\n\nexport const MemoizedVirtualisedTableContent = React.memo(VirtualizedTableContent);\n\nconst GroupedTableContent = () => {\n const {\n table: { getGroupedRowModel, getHeaderGroups, getState },\n debug,\n } = useTableContext();\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// Copyright 2023 DXOS.org\n//\n\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { flexRender, type Row, type RowData } from '@tanstack/react-table';\nimport React from 'react';\n\nimport { useTableContext } from './TableContext';\nimport { tbodyTr } from '../../theme';\nimport { Cell } from '../Cell/Cell';\n\nconst TABLE_BODY_NAME = 'TableBody';\n\ntype TableBodyProps = {\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 return (\n <tbody {...(isGrid && domAttributes)}>\n {rows.map((row) => {\n const isCurrent = currentDatum === row.original;\n const isSelected = rowSelection?.[row.id];\n return (\n <tr\n key={keyAccessor ? keyAccessor(row.original) : row.id}\n className={tbodyTr({ canBeCurrent })}\n {...(isCurrent && { 'aria-current': 'location' })}\n {...(isSelected && { 'aria-selected': 'true' })}\n {...(canBeCurrent && {\n tabIndex: 0,\n onClick: () => {\n onDatumClick(row.original);\n },\n onKeyUp: ({ key }) => {\n if (key === 'Enter' || key === ' ') {\n onDatumClick(row.original);\n }\n },\n })}\n >\n {debug && <td>{row.id}</td>}\n\n {row.getVisibleCells().map((cell) => {\n return (\n <Cell key={cell.id} cell={cell}>\n {flexRender(cell.column.columnDef.cell, { className: 'pli-2', ...cell.getContext() })}\n </Cell>\n );\n })}\n\n {expand && <td />}\n </tr>\n );\n })}\n </tbody>\n );\n};\n\nTableBody.displayName = TABLE_BODY_NAME;\n\nexport { TableBody };\n\nexport type { TableBodyProps };\n", "//\n// Copyright 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 2023 DXOS.org\n//\n\nimport { type CellContext } from '@tanstack/react-table';\n\nimport { modalSurface, focusRing, ghostSelected, ghostSelectedCurrent, groupBorder, mx } from '@dxos/react-ui-theme';\nimport { type ComponentFunction } from '@dxos/react-ui-types';\n\nimport { type TableContextValue, type TableFlags } from './components';\n\nexport const currentRow = '!bg-neutral-75 !dark:bg-neutral-850';\nexport const selectedRow = '!bg-primary-100 dark:!bg-primary-700';\nexport const flushPadding = 'pli-0 plb-0';\nexport const textPadding = 'pli-2 plb-0.5';\nexport const headPadding = 'pli-2 plb-1';\n\nexport const gridCellFocusRing =\n 'focus-within:z-[11] focus-within:outline outline-2 outline-primary-500 dark:outline-primary-400';\n\n//\n// table\n//\n\nexport type TableStyleProps = Partial<TableContextValue<any>>;\n\nexport const tableRoot: ComponentFunction<TableStyleProps> = ({ fullWidth }, ...etc) =>\n mx('table-fixed', fullWidth && 'is-full', ...etc);\n\nexport const groupTh: ComponentFunction<TableStyleProps> = (_props, ...etc) =>\n mx('text-start font-medium', flushPadding, ...etc);\n\n//\n// thead\n//\n\nexport type TheadStyleProps = Partial<TableFlags>;\n\nexport const theadRoot: ComponentFunction<TheadStyleProps> = ({ header, stickyHeader }, ...etc) =>\n mx(\n header ? stickyHeader && 'sticky block-start-[--sticky-top] z-[1]' : 'collapse',\n header && 'base-surface',\n 'drop-shadow-sm',\n ...etc,\n );\n\nexport const theadTr: ComponentFunction<TheadStyleProps> = (_props, ...etc) => mx('group', ...etc);\n\nexport const theadTh: ComponentFunction<TheadStyleProps> = ({ border }, ...etc) =>\n mx(\n 'relative',\n 'text-start font-medium select-none truncate',\n headPadding,\n border && groupBorder,\n border && 'border border-t-0 border-b-0 border-neutral-200',\n ...etc,\n );\n\nexport const theadResizeRoot: ComponentFunction<{ isResizing: boolean }> = ({ isResizing }) => {\n return mx(\n 'absolute h-full w-[4px] top-0 right-0',\n 'cursor-col-resize',\n 'user-select-none',\n 'touch-action-none',\n !isResizing && 'group-hover:bg-neutral-100 dark:group-hover:bg-neutral-800',\n 'pointer-coarse:bg-neutral-100 dark:pointer-coarse:bg-neutral-800',\n isResizing && 'bg-primary-500 dark:bg-primary-400',\n );\n};\n\n//\n// tbody\n//\n\nexport type TbodyStyleProps = Partial<TableContextValue<any>>;\nexport const tbodyRoot: ComponentFunction<TbodyStyleProps> = (_props, ...etc) => mx(...etc);\n\nexport type TbodyTrStyleProps = Partial<{ canBeCurrent?: boolean }>;\nexport const tbodyTr: ComponentFunction<TbodyTrStyleProps> = ({ canBeCurrent }, ...etc) =>\n mx(\n 'group',\n canBeCurrent ? ghostSelectedCurrent : ghostSelected,\n canBeCurrent && focusRing,\n canBeCurrent && 'cursor-pointer rounded',\n ...etc,\n );\n\n//\n// td, th\n//\n\nexport const tdRoot: ComponentFunction<TbodyStyleProps> = ({ border, isGrid }, ...etc) =>\n mx('relative', flushPadding, border && 'border', border && groupBorder, isGrid && gridCellFocusRing, ...etc);\n\nexport const tdContent: ComponentFunction<CellContext<any, any>> = (_props, ...etc) => mx(...etc);\n\n//\n// tfoot\n//\n\nexport type TfootStyleProps = Partial<TableContextValue<any>>;\n\nexport const tfootRoot: ComponentFunction<TfootStyleProps> = (_props, ...etc) =>\n mx('sticky block-end-0 z-10', modalSurface, ...etc);\n\nexport const tfootTr: ComponentFunction<TfootStyleProps> = (_props, ...etc) => mx(...etc);\n\nexport const tfootTh: ComponentFunction<TfootStyleProps> = ({ border }, ...etc) =>\n mx(textPadding, modalSurface, border && groupBorder, ...etc);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { type Cell as CellType, type RowData } from '@tanstack/react-table';\nimport React, { type PropsWithChildren } from 'react';\n\nimport { tdRoot } from '../../theme';\nimport { useTableContext } from '../Table/TableContext';\n\ntype CellProps<TData extends RowData, TValue> = PropsWithChildren<{\n cell: CellType<TData, TValue>;\n}>;\n\nconst CELL_NAME = 'Cell';\n\nconst FocusableCell = <TData extends RowData, TValue>({ cell, children }: CellProps<TData, TValue>) => {\n const tableContext = useTableContext();\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 { CaretDown } from '@phosphor-icons/react';\nimport { type RowData } from '@tanstack/react-table';\nimport React, { useCallback, useState } from 'react';\n\nimport { Popover, useTranslation } from '@dxos/react-ui';\nimport { PopoverCombobox } from '@dxos/react-ui-searchlist';\nimport { descriptionText, getSize, mx, staticPlaceholderText } from '@dxos/react-ui-theme';\n\nimport { type SearchListQueryModel } from '../../helpers';\nimport { translationKey } from '../../translations';\n\nexport type ComboboxCellItems<TData extends RowData> = Record<string, { label: string; data: TData }>;\n\nconst initialItems = <TData extends RowData>(model: SearchListQueryModel<TData>, value?: TData) =>\n value\n ? {\n [model.getId(value)]: { label: model.getText(value), data: value },\n }\n : {};\n\nexport const CellCombobox = <TData extends RowData>({\n model,\n value,\n onValueChange,\n}: {\n model: SearchListQueryModel<TData>;\n value: TData;\n onValueChange: (value: TData) => void;\n}) => {\n const { t } = useTranslation(translationKey);\n const [items, setItems] = useState<ComboboxCellItems<TData>>(initialItems(model, value));\n const [loading, setLoading] = useState(false);\n const [searchInputValue, setSearchInputValue] = useState('');\n const handleSearchInputValueChange = async (text?: string) => {\n setSearchInputValue(text ?? '');\n setLoading(true);\n const items = await model.query(text);\n setItems(\n items.reduce(\n (acc: ComboboxCellItems<TData>, item) => {\n acc[model.getId(item)] = {\n label: model.getText(item),\n data: item,\n };\n return acc;\n },\n initialItems(model, value),\n ),\n );\n setLoading(false);\n };\n\n const handleValueChange = useCallback(\n (id: string) => {\n onValueChange(items[id]?.data);\n },\n [items, onValueChange],\n );\n\n return (\n <PopoverCombobox.Root placeholder={t('no selection label')}>\n <PopoverCombobox.Trigger variant='ghost' classNames='is-full rounded-none ring-inset'>\n {value ? (\n <>\n <span\n className={mx(\n 'font-normal text-start text-base flex-1 min-is-0 truncate mie-2',\n !value && staticPlaceholderText,\n )}\n >\n {model.getText(value)}\n </span>\n <CaretDown weight='bold' className={getSize(3)} />\n </>\n ) : null}\n </PopoverCombobox.Trigger>\n <PopoverCombobox.Content shouldFilter={false} classNames='is-[--radix-popover-trigger-width]'>\n <PopoverCombobox.Input value={searchInputValue} onValueChange={handleSearchInputValueChange} />\n <PopoverCombobox.List>\n {searchInputValue.length < 1 ? (\n <p className={mx('text-center', descriptionText)}>Start typing to search</p>\n ) : loading ? (\n <p className={mx('text-center', descriptionText)}>Searching…</p>\n ) : (\n <>\n <PopoverCombobox.Empty classNames={['text-center', descriptionText]}>No results</PopoverCombobox.Empty>\n {Object.entries(items).map(([id, { label }]) => (\n <PopoverCombobox.Item key={id} value={id} onSelect={handleValueChange} classNames='truncate'>\n {label}\n </PopoverCombobox.Item>\n ))}\n </>\n )}\n </PopoverCombobox.List>\n <Popover.Arrow />\n </PopoverCombobox.Content>\n </PopoverCombobox.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { Check, ClipboardText, type Icon, X } from '@phosphor-icons/react';\nimport {\n createColumnHelper,\n type ColumnDef,\n type ColumnMeta,\n type RowData,\n type ColumnHelper,\n type CellContext,\n} from '@tanstack/react-table';\nimport { format } from 'date-fns/format';\nimport { formatDistanceToNow } from 'date-fns/formatDistanceToNow';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { type PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { type ClassNameValue, Input, Tooltip } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { CellCombobox } from './components';\nimport { useTableContext } from './components/Table/TableContext';\nimport { textPadding } from './theme';\n\nexport type ValueUpdater<TData extends RowData, TValue> = (row: TData, id: string, value: TValue) => void;\n\nexport const createColumnBuilder = <TData extends RowData>() => ({\n helper: createColumnHelper<TData>(),\n builder: new ColumnBuilder<TData>(),\n});\n\n// TODO(thure): This interface is redundant, e.g. `classNames` == `meta.cell.classNames`\n/**\n * NOTE: Can use `meta` for custom properties.\n */\nexport type BaseColumnOptions<TData, TValue> = Partial<ColumnDef<TData, TValue>> & {\n meta?: ColumnMeta<TData, TValue>;\n label?: string;\n classNames?: ClassNameValue;\n onUpdate?: ValueUpdater<TData, TValue | undefined>;\n};\n\n// TODO(burdon): Better abstraction?\nexport type SearchListQueryModel<TData extends RowData> = {\n getId(object: TData): string;\n getText(object: TData): string;\n query(text?: string): Promise<TData[]>;\n};\n\nexport type ComboboxColumnOptions<TData extends RowData> = BaseColumnOptions<TData, any> & {\n model: SearchListQueryModel<TData>;\n};\n\nexport type StringColumnOptions<TData extends RowData> = BaseColumnOptions<TData, string> & {};\nexport type SelectRowColumnOptions<TData extends RowData> = BaseColumnOptions<TData, string> & {};\n\nexport type NumberColumnOptions<TData extends RowData> = BaseColumnOptions<TData, number> & {\n digits?: number;\n};\n\nexport type KeyColumnOptions<TData extends RowData> = BaseColumnOptions<TData, PublicKey> & {\n tooltip?: boolean;\n};\n\nexport type DateColumnOptions<TData extends RowData> = BaseColumnOptions<TData, Date> & {\n format?: string;\n relative?: boolean;\n};\n\nexport type SwitchColumnOptions<TData extends RowData> = BaseColumnOptions<TData, boolean> & {};\n\nexport type IconColumnOptions<TData extends RowData> = BaseColumnOptions<TData, boolean> & {\n on?: {\n Icon?: Icon;\n className?: string;\n };\n off?: {\n Icon?: Icon;\n className?: string;\n };\n};\n\nconst ComboboxBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, TData>) => {\n const { model, onUpdate } = cellContext.column.columnDef.meta as ColumnMeta<TData, TData>;\n return model ? (\n <CellCombobox<TData>\n model={model}\n value={cellContext.getValue()}\n onValueChange={(value) => onUpdate?.(cellContext.row.original, cellContext.column.id, value)}\n />\n ) : null;\n};\n\nconst StringBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, string>) => {\n const ref = useRef<HTMLInputElement>(null);\n const { findPrevFocusable } = useFocusFinders();\n\n const { onUpdate, cell } = cellContext.column.columnDef.meta as ColumnMeta<TData, string>;\n\n // https://tanstack.com/table/v8/docs/examples/react/editable-data\n const initialValue = cellContext.getValue();\n const [value, setValue] = useState(() => {\n // TODO(burdon): Temporary shim for automerge.\n if ((initialValue as any)?.content) {\n return (initialValue as any)?.content;\n }\n\n return initialValue;\n });\n\n const handleSave = () => {\n ref.current && document.activeElement === ref.current && findPrevFocusable(ref.current)?.focus();\n\n if (value !== initialValue) {\n onUpdate?.(cellContext.row.original, cellContext.column.id, value);\n }\n };\n\n const handleCancel = () => setValue(initialValue);\n\n let placeholder = false;\n const columns = cellContext.table.getVisibleFlatColumns();\n\n // Calling getRowModel is expensive, so only do it when we're a cell in the first position\n if (columns[0].id === cellContext.column.id) {\n const rowCount = cellContext.table.getRowModel().rows.length;\n placeholder = cellContext.row.index === rowCount - 1 && columns[0].id === cellContext.column.id;\n }\n\n // TODO(burdon): Don't render inputs unless mouse over (Show ellipsis when div)?\n return (\n <Input.Root>\n <Input.TextInput\n ref={ref}\n variant='subdued'\n placeholder={placeholder ? 'Add row...' : undefined}\n classNames={['is-full', textPadding, cell?.classNames]}\n value={value ?? ''}\n onBlur={handleSave}\n onChange={(event) => setValue(event.target.value)}\n onKeyDown={(event) => (event.key === 'Enter' && handleSave()) || (event.key === 'Escape' && handleCancel())}\n />\n </Input.Root>\n );\n};\n\nconst parseNumber = (text?: string) => (text?.trim().length ? Number(text) : NaN);\n\nconst displayNumber = (value?: number, digits?: number) =>\n value || value === 0\n ? value.toLocaleString(undefined, {\n minimumFractionDigits: digits ?? 0,\n maximumFractionDigits: digits ?? 2,\n })\n : '';\n\nconst NumberBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, number>) => {\n const { onUpdate, digits } = cellContext.column.columnDef.meta as ColumnMeta<TData, string>;\n const value = cellContext.getValue();\n const [text, setText] = useState<string>(displayNumber(value, digits));\n const { findPrevFocusable } = useFocusFinders();\n const ref = useRef<HTMLInputElement | null>(null);\n\n // Update display value if `digits` changes and input is not in focus.\n useEffect(() => {\n (!document.activeElement || document.activeElement !== ref.current) && setText(displayNumber(value, digits));\n }, [digits, value]);\n\n const handleEdit = () => setText(value !== undefined ? String(value) : '');\n\n // TODO(burdon): Property is encoded as float (e.g., 6.1 => 6.099)\n const handleSave = () => {\n const nextValue = parseNumber(text);\n\n if (!isNaN(nextValue)) {\n onUpdate?.(cellContext.row.original, cellContext.column.id, nextValue);\n setText(displayNumber(nextValue, digits));\n } else {\n // Reset the text to display the original value without updating the model.\n setText(displayNumber(value, digits));\n }\n\n // Shift focus only if input is focused on save (e.g. on `Enter`).\n ref.current && document.activeElement === ref.current && findPrevFocusable(ref.current)?.focus();\n };\n\n const _handleCancel = () => {\n setText(displayNumber(value, digits));\n ref.current && findPrevFocusable(ref.current)?.focus();\n };\n\n return (\n <Input.Root>\n <Input.TextInput\n ref={ref}\n variant='subdued'\n value={text}\n classNames={['is-full text-end font-mono', textPadding]}\n onBlur={handleSave}\n onFocus={handleEdit}\n onChange={({ target: { value } }) => setText(value)}\n onKeyDown={(event) => {\n // TODO(thure): `Escape` is reserved for blurring the input and moving focus to the cell\n return /* (event.key === 'Escape' && handleCancel()) || */ event.key === 'Enter' && handleSave();\n }}\n />\n </Input.Root>\n );\n};\n\nconst RowSelectorBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, unknown>) => {\n const { cell } = cellContext.column.columnDef.meta as ColumnMeta<TData, unknown>;\n const { row } = cellContext;\n\n const checked = row.getCanSelect()\n ? row.getIsSelected()\n : row.getCanSelectSubRows() && (row.getIsSomeSelected() ? 'indeterminate' : row.getIsAllSubRowsSelected());\n\n return (\n <div className='flex justify-center w-full h-full' role='presentation'>\n <Input.Root>\n <Input.Checkbox\n size={4}\n classNames={[cell?.classNames]}\n checked={checked}\n onCheckedChange={(event) => {\n if (row.getCanSelect()) {\n row.getToggleSelectedHandler()(event);\n }\n }}\n disabled={!(row.getCanSelect() || row.getCanSelectSubRows())}\n />\n </Input.Root>\n </div>\n );\n};\n\nconst SwitchBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, boolean>) => {\n const { onUpdate } = cellContext.column.columnDef.meta as ColumnMeta<TData, boolean>;\n const value = cellContext.getValue();\n return (\n <Input.Root>\n <Input.Switch\n classNames='block mli-auto'\n onClick={(event) => event.stopPropagation()}\n disabled={!onUpdate}\n checked={!!value}\n onCheckedChange={(value) => {\n onUpdate?.(cellContext.row.original, cellContext.column.id, !!value);\n }}\n />\n </Input.Root>\n );\n};\n\n/**\n * Util to create column definitions.\n */\nexport class ColumnBuilder<TData extends RowData> {\n /**\n * Combobox value\n */\n combobox({\n label,\n classNames,\n model,\n onUpdate,\n ...props\n }: ComboboxColumnOptions<TData>): Partial<ColumnDef<TData, any>> {\n return {\n minSize: 100,\n header: (column) => {\n return label ?? column.header.id;\n },\n cell:\n model && onUpdate\n ? ComboboxBuilderCell\n : (cellContext) => {\n const cellValue = cellContext.getValue();\n return <div className={mx('truncate', classNames)}>{cellValue ? model?.getText(cellValue) : ''}</div>;\n },\n ...props,\n meta: {\n ...props.meta,\n model,\n onUpdate,\n cell: { classNames, ...props.meta?.cell },\n },\n };\n }\n\n /**\n * String formats.\n */\n string({ label, classNames, onUpdate, ...props }: StringColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, string>\n > {\n return {\n minSize: 100,\n // TODO(burdon): Default.\n header: (column) => {\n return label ?? column.header.id;\n },\n cell: onUpdate\n ? StringBuilderCell\n : (cell) => {\n let value = cell.getValue();\n // TODO(burdon): Hack to support automerge.\n if (typeof value === 'object' && (value as any)?.__typename === 'dxos.Text.v0') {\n value = (value as any).content;\n }\n\n return <div className={mx('truncate', textPadding, classNames)}>{value}</div>;\n },\n ...props,\n meta: {\n ...props.meta,\n onUpdate,\n cell: { ...props.meta?.cell, classNames },\n },\n };\n }\n\n /**\n * Number formats.\n */\n number({ label, minSize, classNames, digits, onUpdate, ...props }: NumberColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, number>\n > {\n return {\n size: 100,\n minSize: 100,\n header: (cell) => label ?? cell.header.id,\n cell: NumberBuilderCell,\n ...props,\n meta: {\n ...props.meta,\n onUpdate,\n digits,\n header: { classNames: 'text-end', ...props.meta?.header },\n cell: { ...props.meta?.cell, classNames },\n },\n };\n }\n\n /**\n * Date formats.\n */\n // TODO(burdon): Date picker (pluggable renderers?)\n date({ label, format: formatSpec, relative, classNames, ...props }: DateColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, Date>\n > {\n return {\n size: 220, // TODO(burdon): Depends on format.\n minSize: 100,\n header: (cell) => label ?? cell.header.id,\n cell: (cell) => {\n const value = cell.getValue();\n\n try {\n const str = value\n ? formatSpec\n ? format(value, formatSpec)\n : relative\n ? formatDistanceToNow(value, { addSuffix: true })\n : value.toISOString()\n : undefined;\n\n return <div className={mx(textPadding, classNames)}>{str}</div>;\n } catch (err) {\n log.info('formatError', { value });\n return null;\n }\n },\n ...props,\n meta: { ...props.meta, cell: { ...props.meta?.cell, classNames } },\n };\n }\n\n /**\n * PublicKey with tooltip.\n */\n key({ label, tooltip, classNames, ...props }: KeyColumnOptions<TData> = {}): Partial<ColumnDef<TData, PublicKey>> {\n return {\n size: 94,\n minSize: 94,\n header: (cell) => label ?? cell.header.id,\n cell: (cell) => {\n const value = cell.getValue();\n if (!value) {\n return;\n }\n\n // TODO(burdon): Factor out styles.\n const element = value.truncate();\n if (!tooltip) {\n return element;\n }\n\n return (\n <Tooltip.Provider>\n <Tooltip.Root>\n <Tooltip.Trigger>{element}</Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='right'>\n <Tooltip.Arrow />\n <ClipboardText\n onClick={(ev) => {\n ev.stopPropagation(); // Prevent select row.\n void navigator.clipboard.writeText(value.toHex());\n }}\n />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </Tooltip.Provider>\n );\n },\n ...props,\n meta: { ...props.meta, cell: { ...props.meta?.cell, classNames: ['font-mono', textPadding, classNames] } },\n };\n }\n\n /**\n * Row selector\n */\n selectRow({ classNames, onUpdate, id = 'selectRow' }: SelectRowColumnOptions<TData> = {}): Parameters<\n ColumnHelper<TData>['display']\n >[0] {\n return {\n id,\n size: 32,\n enableResizing: false,\n meta: { onUpdate, cell: { classNames } },\n header: ({ table }) => {\n const { rowsSelectable } = useTableContext();\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"],
5
- "mappings": "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",
6
- "names": ["Check", "Trash", "X", "GearSix", "React", "useRef", "useState", "Button", "DensityProvider", "Input", "Popover", "Select", "Separator", "useTranslation", "getSize", "mx", "safeParseInt", "CaretUpDown", "SortAscending", "SortDescending", "React", "Button", "getSize", "SortButton", "sortDirection", "onClick", "icon", "size", "getSize", "SortAscending", "className", "SortDescending", "CaretUpDown", "Button", "variant", "translationKey", "ColumnMenu", "column", "props", "title", "label", "length", "id", "header", "context", "canSort", "getCanSort", "sortDirection", "getIsSorted", "toggleSort", "getToggleSortingHandler", "React", "div", "className", "SortButton", "onClick", "ColumnPanel", "Section", "children", "role", "mx", "tableDefs", "tableDef", "onUpdate", "onDelete", "open", "setOpen", "useState", "prop", "setProp", "refTable", "setRefTable", "refProp", "setRefProp", "type", "setType", "String", "setLabel", "digits", "setDigits", "propRef", "useRef", "t", "useTranslation", "translationKey", "handleCancel", "handleSave", "match", "current", "focus", "columns", "find", "c", "safeParseInt", "Popover", "Root", "onOpenChange", "nextOpen", "Trigger", "asChild", "Button", "variant", "GearSix", "getSize", "Portal", "Content", "Viewport", "classNames", "DensityProvider", "density", "Input", "Label", "TextInput", "placeholder", "value", "onChange", "event", "target", "autoFocus", "ref", "replace", "Select", "onValueChange", "TriggerButton", "map", "Option", "key", "filter", "name", "Separator", "span", "Check", "ns", "X", "Trash", "Arrow", "useControllableState", "getCoreRowModel", "getSortedRowModel", "useReactTable", "getGroupedRowModel", "getExpandedRowModel", "useVirtualizer", "React", "Fragment", "useCallback", "useEffect", "useState", "log", "useDefaultValue", "useOnTransition", "useArrowNavigationGroup", "flexRender", "React", "React", "useContext", "createContext", "TableContext", "createContext", "TableProvider", "children", "value", "React", "Provider", "useTableContext", "context", "useContext", "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", "ghostSelectedCurrent", "ghostSelected", "focusRing", "tdRoot", "isGrid", "tdContent", "tfootRoot", "modalSurface", "tfootTr", "tfootTh", "useFocusableGroup", "React", "CELL_NAME", "FocusableCell", "cell", "children", "tableContext", "useTableContext", "domAttributes", "useFocusableGroup", "tabBehavior", "className", "tdRoot", "column", "columnDef", "meta", "classNames", "React", "td", "tabIndex", "StaticCell", "Cell", "isGrid", "Root", "displayName", "TABLE_BODY_NAME", "TableBody", "rows", "table", "keyAccessor", "currentDatum", "debug", "expand", "isGrid", "onDatumClick", "useTableContext", "rowSelection", "getState", "domAttributes", "useArrowNavigationGroup", "axis", "canBeCurrent", "React", "tbody", "map", "row", "isCurrent", "original", "isSelected", "id", "tr", "key", "className", "tbodyTr", "tabIndex", "onClick", "onKeyUp", "td", "getVisibleCells", "cell", "Cell", "flexRender", "column", "columnDef", "getContext", "displayName", "flexRender", "React", "TABLE_FOOT_NAME", "TableFooter", "props", "tableContext", "useTableContext", "table", "expand", "debug", "footers", "getFooterGroups", "React", "tfoot", "className", "tfootRoot", "map", "footerGroup", "tr", "key", "id", "tfootTr", "th", "headers", "footer", "tfootTh", "column", "columnDef", "meta", "classNames", "isPlaceholder", "flexRender", "getContext", "displayName", "flexRender", "React", "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", "Table", "props", "role", "onColumnResize", "columnVisibility", "header", "rowsSelectable", "debug", "onDataSelectionChange", "getScrollElement", "pinLastRow", "columns", "useDefaultValue", "data", "TableProvider", "UntypedTableProvider", "columnsInitialised", "setColumnsInitialised", "useState", "columnSizing", "setColumnSizing", "useEffect", "filter", "column", "size", "prop", "undefined", "reduce", "state", "columnSizingInfo", "setColumnSizingInfo", "notifyColumnResize", "useCallback", "useOnTransition", "isResizingColumn", "v", "rowSelection", "setRowSelection", "useControllableState", "onChange", "onRowSelectionChange", "defaultProp", "defaultRowSelection", "handleRowSelectionChange", "updaterOrValue", "nextRowSelection", "nextRowSelectionKey", "Object", "keys", "id", "grouping", "handleGroupingChange", "table", "useReactTable", "meta", "defaultColumn", "maxSize", "columnResizeMode", "enableColumnResizing", "onColumnSizingChange", "onColumnSizingInfoChange", "getCoreRowModel", "getSortedRowModel", "getExpandedRowModel", "getGroupedRowModel", "length", "onGroupingChange", "enableMultiRowSelection", "enableRowSelection", "enableSorting", "enableColumnPinning", "debugTable", "map", "getRowModel", "rowsById", "original", "resetRowPinning", "rows", "pin", "expand", "log", "warn", "React", "isGrid", "TableImpl", "classNames", "footer", "fullWidth", "useTableContext", "centerRows", "getCenterRows", "bottomRows", "getBottomRows", "pre", "className", "code", "JSON", "stringify", "getState", "virtualisable", "tableRoot", "style", "width", "getTotalSize", "TableHead", "MemoizedVirtualisedTableContent", "VirtualizedTableContent", "TableBody", "GroupedTableContent", "TableFooter", "pinnedRows", "getVirtualItems", "useVirtualizer", "count", "overscan", "estimateSize", "virtualRows", "totalSize", "paddingTop", "start", "paddingBottom", "end", "tbody", "tr", "td", "height", "virtualRow", "index", "memo", "getHeaderGroups", "row", "i", "Fragment", "key", "thead", "th", "colSpan", "headers", "groupTh", "String", "getGroupingValue", "subRows", "CaretDown", "React", "useCallback", "useState", "Popover", "useTranslation", "PopoverCombobox", "descriptionText", "getSize", "mx", "staticPlaceholderText", "initialItems", "model", "value", "getId", "label", "getText", "data", "CellCombobox", "onValueChange", "t", "useTranslation", "translationKey", "items", "setItems", "useState", "loading", "setLoading", "searchInputValue", "setSearchInputValue", "handleSearchInputValueChange", "text", "query", "reduce", "acc", "item", "handleValueChange", "useCallback", "id", "React", "PopoverCombobox", "Root", "placeholder", "Trigger", "variant", "classNames", "span", "className", "mx", "staticPlaceholderText", "CaretDown", "weight", "getSize", "Content", "shouldFilter", "Input", "List", "length", "p", "descriptionText", "Empty", "Object", "entries", "map", "Item", "key", "onSelect", "Popover", "Arrow", "useFocusFinders", "Check", "ClipboardText", "X", "createColumnHelper", "format", "formatDistanceToNow", "React", "useEffect", "useRef", "useState", "log", "Input", "Tooltip", "getSize", "mx", "createColumnBuilder", "helper", "createColumnHelper", "builder", "ColumnBuilder", "ComboboxBuilderCell", "cellContext", "model", "onUpdate", "column", "columnDef", "meta", "React", "CellCombobox", "value", "getValue", "onValueChange", "row", "original", "id", "StringBuilderCell", "ref", "useRef", "findPrevFocusable", "useFocusFinders", "cell", "initialValue", "setValue", "useState", "content", "handleSave", "current", "document", "activeElement", "focus", "handleCancel", "placeholder", "columns", "table", "getVisibleFlatColumns", "rowCount", "getRowModel", "rows", "length", "index", "Input", "Root", "TextInput", "variant", "undefined", "classNames", "textPadding", "onBlur", "onChange", "event", "target", "onKeyDown", "key", "parseNumber", "text", "trim", "Number", "NaN", "displayNumber", "digits", "toLocaleString", "minimumFractionDigits", "maximumFractionDigits", "NumberBuilderCell", "setText", "useEffect", "handleEdit", "String", "nextValue", "isNaN", "_handleCancel", "onFocus", "RowSelectorBuilderCell", "checked", "getCanSelect", "getIsSelected", "getCanSelectSubRows", "getIsSomeSelected", "getIsAllSubRowsSelected", "div", "className", "role", "Checkbox", "size", "onCheckedChange", "getToggleSelectedHandler", "disabled", "SwitchBuilderCell", "Switch", "onClick", "stopPropagation", "combobox", "label", "props", "minSize", "header", "cellValue", "mx", "getText", "string", "__typename", "number", "date", "format", "formatSpec", "relative", "str", "formatDistanceToNow", "addSuffix", "toISOString", "err", "log", "info", "tooltip", "element", "truncate", "Tooltip", "Provider", "Trigger", "Portal", "Content", "side", "Arrow", "ClipboardText", "ev", "navigator", "clipboard", "writeText", "toHex", "selectRow", "enableResizing", "rowsSelectable", "useTableContext", "getIsSomeRowsSelected", "getIsAllRowsSelected", "toggleAllRowsSelected", "switch", "enableSorting", "icon", "on", "off", "IconOn", "Icon", "Check", "IconOff", "X", "getSize"]
3
+ "sources": ["../../../src/components/ColumnMenu.tsx", "../../../src/components/SortButton.tsx", "../../../src/translations.ts", "../../../src/components/Table/Table.tsx", "../../../src/components/Table/TableBody.tsx", "../../../src/components/Table/TableContext.tsx", "../../../src/theme.ts", "../../../src/components/Cell/Cell.tsx", "../../../src/components/Table/TableFooter.tsx", "../../../src/components/Table/TableHead.tsx", "../../../src/components/hooks/usePinLastRow.ts", "../../../src/components/Cell/CellCombobox.tsx", "../../../src/helpers.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Check, Trash, X, GearSix } from '@phosphor-icons/react';\nimport { type HeaderContext, type RowData } from '@tanstack/react-table';\nimport React, { type FC, type PropsWithChildren, useRef, useState } from 'react';\n\nimport { Button, DensityProvider, Input, Popover, Select, Separator, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\nimport { safeParseInt } from '@dxos/util';\n\nimport { SortButton } from './SortButton';\nimport { type TableDef, type ColumnProps, type ColumnType } from '../schema';\nimport { translationKey } from '../translations';\n\nexport type ColumnMenuProps<TData extends RowData, TValue> = {\n context: HeaderContext<TData, TValue>;\n tableDefs: TableDef[];\n tableDef: TableDef;\n column: ColumnProps;\n onUpdate?: (id: string, column: ColumnProps) => void;\n onDelete?: (id: string) => void;\n};\n\nexport const ColumnMenu = <TData extends RowData, TValue>({ column, ...props }: ColumnMenuProps<TData, TValue>) => {\n const title = column.label?.length ? column.label : column.id;\n\n const header = props.context.header;\n\n const canSort = header.column.getCanSort();\n const sortDirection = header.column.getIsSorted();\n const toggleSort = header.column.getToggleSortingHandler();\n\n return (\n <div className='flex items-center gap-2'>\n <div className='flex-1 min-is-0 truncate' title={title}>\n {title}\n </div>\n <div className='flex gap-0'>\n {canSort && toggleSort && <SortButton sortDirection={sortDirection} onClick={toggleSort} />}\n <ColumnPanel {...props} column={column} />\n </div>\n </div>\n );\n};\n\nconst Section: FC<PropsWithChildren & { className?: string }> = ({ children, className }) => (\n <div role='none' className={mx('p-2', className)}>\n {children}\n </div>\n);\n\nexport const ColumnPanel = <TData extends RowData, TValue>({\n context,\n tableDefs,\n tableDef,\n column,\n onUpdate,\n onDelete,\n}: ColumnMenuProps<TData, TValue>) => {\n const [open, setOpen] = useState(false);\n const [prop, setProp] = useState(column.id);\n const [refTable, setRefTable] = useState(column.refTable);\n const [refProp, setRefProp] = useState(column.refProp);\n const [type, setType] = useState(String(column.type));\n const [label, setLabel] = useState(column.label);\n const [digits, setDigits] = useState(String(column.digits ?? '0'));\n const propRef = useRef<HTMLInputElement>(null);\n const { t } = useTranslation(translationKey);\n\n const handleCancel = () => {\n setProp(column.id);\n setOpen(false);\n };\n\n const handleSave = () => {\n // Check valid.\n if (!prop.length || !prop.match(/^[a-zA-Z_].+/i)) {\n propRef.current?.focus();\n return;\n }\n\n // If already exists then check same type.\n const current = tableDef.columns.find((c) => c.id !== column.id && c.id === prop);\n if (current) {\n // TODO(burdon): Allow multiple columns with different refProps. Ensure correct table prop is updated.\n if (current.type !== 'ref' /* || current.ref !== refTable */) {\n // TODO(burdon): Show error.\n propRef.current?.focus();\n return;\n }\n }\n\n onUpdate?.(prop, {\n id: prop, // TODO(burdon): Make unique.\n prop,\n label,\n type: type as ColumnProps['type'],\n refTable,\n refProp,\n digits: safeParseInt(digits),\n });\n\n setOpen(false);\n };\n\n return (\n <Popover.Root open={open} onOpenChange={(nextOpen) => setOpen(nextOpen)}>\n <Popover.Trigger asChild>\n <Button variant='ghost'>\n <GearSix className={mx(getSize(4), 'rotate-90')} />\n </Button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content>\n <Popover.Viewport classNames='w-60'>\n <DensityProvider density='fine'>\n <div className='flex flex-col gap-1'>\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1'>{t('column label label')}</Input.Label>\n <Input.TextInput\n placeholder='Column label'\n value={label ?? ''}\n onChange={(event) => setLabel(event.target.value)}\n autoFocus\n />\n </Input.Root>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('property key label')}</Input.Label>\n <Input.TextInput\n ref={propRef}\n placeholder='Property key'\n // TODO(burdon): Provide hooks for value normalization, ENTER, ESC, etc.\n value={prop ?? ''}\n onChange={(event) => setProp(event.target.value.replace(/[^\\w_]/g, ''))}\n />\n </Input.Root>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('column type label')}</Input.Label>\n <Select.Root value={type} onValueChange={setType}>\n <Select.TriggerButton placeholder='Type' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {(['number', 'boolean', 'string', 'ref'] as ColumnType[]).map((type) => (\n <Select.Option key={type} value={type}>\n {t(`${type} column type label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n </Section>\n\n {type === 'number' && (\n <>\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>{t('digits label')}</Input.Label>\n {/* TODO(burdon): Constrain input to numbers. */}\n <Input.TextInput value={digits ?? ''} onChange={(event) => setDigits(event.target.value)} />\n </Input.Root>\n </Section>\n </>\n )}\n\n {/* TODO(burdon): Selectors on same line. */}\n {type === 'ref' && (\n <>\n <Section>\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>Table</Input.Label>\n <Select.Root value={refTable} onValueChange={setRefTable}>\n <Select.TriggerButton placeholder='Table' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {tableDefs\n .filter((t) => t.id !== tableDef.id)\n .map(({ id, name }) => (\n <Select.Option key={id} value={id}>\n {name ?? id}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n\n {refTable && (\n <Input.Root>\n <Input.Label classNames='mbe-1 mbs-3'>Table property</Input.Label>\n <Select.Root value={refProp} onValueChange={setRefProp}>\n <Select.TriggerButton placeholder='Property' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {tableDefs\n .find((tableDef) => tableDef.id === refTable)\n ?.columns.map(({ id, label }) => (\n <Select.Option key={id} value={id}>\n {label ?? id}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n )}\n </Section>\n </>\n )}\n\n <Separator classNames='mli-2' />\n\n <Section className='space-b-1.5'>\n {/* TODO(burdon): Style as DropdownMenuItem. */}\n <Button variant='primary' classNames='is-full flex gap-2' onClick={handleSave}>\n <span>{t('save label')}</span>\n <div className='grow' />\n <Check className={getSize(5)} />\n </Button>\n <Button classNames='is-full flex gap-2' onClick={handleCancel}>\n <span>{t('cancel label', { ns: 'os' })}</span>\n <div className='grow' />\n <X className={getSize(5)} />\n </Button>\n <Button classNames='is-full flex gap-2' onClick={() => onDelete?.(column.id)}>\n <span>{t('delete label')}</span>\n <div className='grow' />\n <Trash className={getSize(5)} />\n </Button>\n </Section>\n </div>\n </DensityProvider>\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { CaretUpDown, SortAscending, SortDescending } from '@phosphor-icons/react';\nimport { type SortDirection } from '@tanstack/react-table';\nimport React, { type ReactElement } from 'react';\n\nimport { Button } from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\ntype SortButtonProps = { sortDirection: false | SortDirection; onClick: (e: any) => void };\n\nexport const SortButton = ({ sortDirection, onClick }: SortButtonProps) => {\n let icon: ReactElement;\n const size = getSize(4);\n\n switch (sortDirection) {\n case 'asc':\n icon = <SortAscending className={size} />;\n break;\n case 'desc':\n icon = <SortDescending className={size} />;\n break;\n default:\n icon = <CaretUpDown className={size} />;\n }\n\n return (\n <Button variant='ghost' onClick={onClick}>\n {icon}\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const translationKey = 'table';\n\nexport default [\n {\n 'en-US': {\n [translationKey]: {\n 'no selection label': ' ',\n 'number column type label': 'Number',\n 'boolean column type label': 'Toggle',\n 'date column type label': 'Date',\n 'string column type label': 'Text',\n 'ref column type label': 'Reference',\n 'digits label': 'Decimal places',\n 'save label': 'Save',\n 'delete label': 'Delete',\n 'column label label': 'Label',\n 'property key label': 'Property',\n 'column type label': 'Type',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport {\n getCoreRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnSizingInfoState,\n type GroupingState,\n type RowData,\n type ColumnSizingState,\n type OnChangeFn,\n type RowSelectionState,\n getGroupedRowModel,\n getExpandedRowModel,\n} from '@tanstack/react-table';\nimport { useVirtualizer, type VirtualizerOptions } from '@tanstack/react-virtual';\nimport React, { Fragment, useCallback, useEffect, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useDefaultValue, useOnTransition } from '@dxos/react-ui';\n\nimport { TableBody } from './TableBody';\nimport { type TypedTableProvider, TableProvider as UntypedTableProvider, useTableContext } from './TableContext';\nimport { TableFooter } from './TableFooter';\nimport { TableHead } from './TableHead';\nimport { type TableProps } from './props';\nimport { groupTh, tableRoot } from '../../theme';\nimport { usePinLastRow } from '../hooks/usePinLastRow';\n\nexport const Table = <TData extends RowData>(props: TableProps<TData>) => {\n const {\n role,\n onColumnResize,\n columnVisibility,\n header = true,\n rowsSelectable,\n debug,\n onDataSelectionChange,\n getScrollElement,\n pinLastRow,\n } = props;\n\n const columns = useDefaultValue(props.columns, []);\n const data = useDefaultValue(props.data, []);\n\n const TableProvider = UntypedTableProvider as TypedTableProvider<TData>;\n\n const [columnsInitialised, setColumnsInitialised] = useState(false);\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>({});\n\n useEffect(() => {\n if (columnsInitialised) {\n return;\n }\n\n setColumnSizing(\n columns\n .filter((column) => !!column.size && (column as any).prop !== undefined)\n .reduce<ColumnSizingState>((state, column) => {\n state[(column as any).prop] = column.size!;\n return state;\n }, {}),\n );\n\n setColumnsInitialised(true);\n }, [columns, setColumnSizing]);\n\n const [columnSizingInfo, setColumnSizingInfo] = useState<ColumnSizingInfoState>({} as ColumnSizingInfoState);\n\n // Notify on column resize.\n const notifyColumnResize = useCallback(() => onColumnResize?.(columnSizing), [onColumnResize, columnSizing]);\n useOnTransition(columnSizingInfo.isResizingColumn, (v) => typeof v === 'string', false, notifyColumnResize);\n\n const [rowSelection = {}, setRowSelection] = useControllableState({\n prop: props.rowSelection,\n onChange: props.onRowSelectionChange,\n defaultProp: props.defaultRowSelection,\n });\n\n // TODO(thure): Does @tanstack/react-table really need this intervention? It did seem necessary to enforce single-selection...\n const handleRowSelectionChange = useCallback<OnChangeFn<RowSelectionState>>(\n (updaterOrValue) => {\n const nextRowSelection = typeof updaterOrValue === 'function' ? updaterOrValue(rowSelection) : updaterOrValue;\n if (rowsSelectable === 'multi') {\n setRowSelection(nextRowSelection);\n } else if (rowsSelectable) {\n const nextRowSelectionKey = Object.keys(nextRowSelection).filter((id) => !rowSelection[id])[0];\n setRowSelection(nextRowSelectionKey ? { [nextRowSelectionKey]: true } : {});\n } else {\n setRowSelection({});\n }\n },\n [rowsSelectable, setRowSelection, rowSelection],\n );\n\n const [grouping, handleGroupingChange] = useState<GroupingState>(props.grouping ?? []);\n useEffect(() => handleGroupingChange(props.grouping ?? []), [handleGroupingChange, props.grouping]);\n\n const table = useReactTable({\n // Data\n meta: {},\n data,\n\n // Columns\n columns,\n defaultColumn: {\n size: 256, // Required in order remove default width.\n maxSize: 1024,\n },\n\n // State\n state: {\n columnVisibility,\n columnSizing,\n columnSizingInfo,\n rowSelection,\n grouping,\n },\n\n // Resize columns\n columnResizeMode: 'onChange',\n enableColumnResizing: true,\n onColumnSizingChange: setColumnSizing,\n onColumnSizingInfoChange: setColumnSizingInfo,\n\n // Rows\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n\n // Grouping\n getGroupedRowModel: grouping.length > 1 ? getGroupedRowModel() : undefined,\n onGroupingChange: handleGroupingChange,\n\n enableMultiRowSelection: rowsSelectable === 'multi' ? true : undefined,\n enableRowSelection: rowsSelectable === true ? true : undefined,\n\n onRowSelectionChange: handleRowSelectionChange,\n\n enableSorting: true,\n enableColumnPinning: true,\n\n // Debug\n debugTable: debug,\n });\n\n useEffect(() => {\n onDataSelectionChange?.(Object.keys(rowSelection).map((id) => table.getRowModel().rowsById[id].original));\n }, [onDataSelectionChange, rowSelection, table]);\n\n usePinLastRow(pinLastRow, table, data, getScrollElement);\n\n // Create additional expansion column if all columns have fixed width.\n const expand = false; // columns.map((column) => column.size).filter(Boolean).length === columns?.length;\n\n if (!getScrollElement) {\n log.warn('Table: getScrollElement is not set. This is required for virtualized tables.');\n }\n\n return (\n <TableProvider\n {...props}\n table={table}\n header={header}\n expand={expand}\n isGrid={role === 'grid' || role === 'treegrid'}\n >\n <TableImpl<TData> debug={false} getScrollElement={getScrollElement} {...props} />\n </TableProvider>\n );\n};\n\n/**\n * Pure implementation of table outside of context set-up.\n */\nconst TableImpl = <TData extends RowData>(props: TableProps<TData>) => {\n const { debug, classNames, getScrollElement, role, footer, grouping, fullWidth } = props;\n const { table } = useTableContext();\n\n const centerRows = table.getCenterRows();\n const bottomRows = table.getBottomRows();\n\n const rows = [...centerRows, ...bottomRows];\n\n if (debug) {\n return (\n <pre className='font-mono text-xs text-neutral-500 m-1 p-2 ring'>\n <code>{JSON.stringify(table.getState(), undefined, 2)}</code>\n </pre>\n );\n }\n\n const virtualisable = getScrollElement !== undefined;\n const isResizingColumn = table.getState().columnSizingInfo.isResizingColumn;\n\n return (\n <table\n role={role}\n className={tableRoot(props, classNames)}\n {...(!fullWidth && { style: { width: table.getTotalSize() } })}\n >\n <TableHead />\n\n {grouping?.length !== 0 ? (\n virtualisable ? (\n isResizingColumn ? (\n <MemoizedVirtualisedTableContent getScrollElement={getScrollElement} />\n ) : (\n <VirtualizedTableContent getScrollElement={getScrollElement} />\n )\n ) : (\n <TableBody rows={rows} />\n )\n ) : (\n <GroupedTableContent />\n )}\n\n {footer && <TableFooter />}\n </table>\n );\n};\n\nconst VirtualizedTableContent = ({\n getScrollElement,\n}: Pick<VirtualizerOptions<Element, Element>, 'getScrollElement'>) => {\n const { table } = useTableContext();\n\n const centerRows = table.getCenterRows();\n const pinnedRows = table.getBottomRows();\n\n const { getTotalSize, getVirtualItems } = useVirtualizer({\n getScrollElement,\n count: centerRows.length,\n overscan: 8,\n estimateSize: () => 40,\n });\n\n const virtualRows = getVirtualItems();\n const totalSize = getTotalSize();\n\n const paddingTop = virtualRows.length > 0 ? virtualRows?.[0]?.start || 0 : 0;\n const paddingBottom = virtualRows.length > 0 ? totalSize - (virtualRows?.[virtualRows.length - 1]?.end || 0) : 0;\n\n const rowsToRender = [...virtualRows.map((virtualRow) => centerRows[virtualRow.index]), ...pinnedRows];\n\n return (\n <>\n {paddingTop > 0 && (\n <tbody role='none'>\n <tr role='none'>\n <td style={{ height: `${paddingTop}px` }} role='none' />\n </tr>\n </tbody>\n )}\n <TableBody rows={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 </>\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// Copyright 2023 DXOS.org\n//\n\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { flexRender, type Row, type RowData } from '@tanstack/react-table';\nimport React from 'react';\n\nimport { useTableContext } from './TableContext';\nimport { tbodyTr } from '../../theme';\nimport { Cell } from '../Cell/Cell';\n\nconst TABLE_BODY_NAME = 'TableBody';\n\ntype TableBodyProps = {\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 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 {...(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 { 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 2023 DXOS.org\n//\n\nimport { type CellContext } from '@tanstack/react-table';\n\nimport { modalSurface, focusRing, ghostSelected, ghostSelectedCurrent, groupBorder, mx } from '@dxos/react-ui-theme';\nimport { type ComponentFunction } from '@dxos/react-ui-types';\n\nimport { type TableContextValue, type TableFlags } from './components';\n\nexport const currentRow = '!bg-neutral-75 !dark:bg-neutral-850';\nexport const selectedRow = '!bg-primary-100 dark:!bg-primary-700';\nexport const flushPadding = 'pli-0 plb-0';\nexport const textPadding = 'pli-2 plb-0.5';\nexport const headPadding = 'pli-2 plb-1';\n\nexport const gridCellFocusRing =\n 'focus-within:z-[11] focus-within:outline outline-2 outline-primary-500 dark:outline-primary-400';\n\n//\n// table\n//\n\nexport type TableStyleProps = Partial<TableContextValue<any>>;\n\nexport const tableRoot: ComponentFunction<TableStyleProps> = ({ fullWidth }, ...etc) =>\n mx('table-fixed', fullWidth && 'is-full', ...etc);\n\nexport const groupTh: ComponentFunction<TableStyleProps> = (_props, ...etc) =>\n mx('text-start font-medium', flushPadding, ...etc);\n\n//\n// thead\n//\n\nexport type TheadStyleProps = Partial<TableFlags>;\n\nexport const theadRoot: ComponentFunction<TheadStyleProps> = ({ header, stickyHeader }, ...etc) =>\n mx(\n header ? stickyHeader && 'sticky block-start-[--sticky-top] z-[1]' : 'collapse',\n header && 'base-surface',\n 'drop-shadow-sm',\n ...etc,\n );\n\nexport const theadTr: ComponentFunction<TheadStyleProps> = (_props, ...etc) => mx('group', ...etc);\n\nexport const theadTh: ComponentFunction<TheadStyleProps> = ({ border }, ...etc) =>\n mx(\n 'relative',\n 'text-start font-medium select-none truncate',\n headPadding,\n border && groupBorder,\n border && 'border border-t-0 border-b-0 border-neutral-200',\n ...etc,\n );\n\nexport const theadResizeRoot: ComponentFunction<{ isResizing: boolean }> = ({ isResizing }) => {\n return mx(\n 'absolute h-full w-[4px] top-0 right-0',\n 'cursor-col-resize',\n 'user-select-none',\n 'touch-action-none',\n !isResizing && 'group-hover:bg-neutral-100 dark:group-hover:bg-neutral-800',\n 'pointer-coarse:bg-neutral-100 dark:pointer-coarse:bg-neutral-800',\n isResizing && 'bg-primary-500 dark:bg-primary-400',\n );\n};\n\n//\n// tbody\n//\n\nexport type TbodyStyleProps = Partial<TableContextValue<any>>;\nexport const tbodyRoot: ComponentFunction<TbodyStyleProps> = (_props, ...etc) => mx(...etc);\n\nexport type TbodyTrStyleProps = Partial<{ canBeCurrent?: boolean; 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-[20] bottom-[-1px] base-surface shadow-sm',\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 2024 DXOS.org\n//\n\nimport { type Table } from '@tanstack/react-table';\nimport { useEffect, useState } from 'react';\n\nexport const usePinLastRow = (\n pinLastRow: boolean | undefined,\n table: Table<any>,\n data: any,\n getScrollElement?: () => Element | null,\n) => {\n const [pinnedRowKey, setPinnedRowKey] = useState<string>();\n\n useEffect(() => {\n if (!pinLastRow) {\n return;\n }\n\n const rows = table.getRowModel().rows;\n const rowToPin = rows[rows.length - 1];\n const rowId = rowToPin.id;\n\n if (rowId === pinnedRowKey) {\n return;\n }\n\n table.resetRowPinning();\n rowToPin.pin('bottom');\n\n const scrollElement = getScrollElement?.();\n const isFirstRender = pinnedRowKey === undefined;\n\n if (scrollElement && !isFirstRender) {\n requestAnimationFrame(() => {\n scrollElement.scrollTo({ top: scrollElement.scrollHeight });\n });\n }\n\n setPinnedRowKey(rowId);\n }, [pinLastRow, table, getScrollElement, pinnedRowKey, setPinnedRowKey, data]);\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 2023 DXOS.org\n//\n\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { Check, ClipboardText, type Icon, X } from '@phosphor-icons/react';\nimport {\n createColumnHelper,\n type ColumnDef,\n type ColumnMeta,\n type RowData,\n type ColumnHelper,\n type CellContext,\n} from '@tanstack/react-table';\nimport { format } from 'date-fns/format';\nimport { formatDistanceToNow } from 'date-fns/formatDistanceToNow';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { type PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { type ClassNameValue, Input, Tooltip } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { CellCombobox } from './components';\nimport { useTableContext } from './components/Table/TableContext';\nimport { textPadding } from './theme';\n\nexport type ValueUpdater<TData extends RowData, TValue> = (row: TData, id: string, value: TValue) => void;\n\nexport const createColumnBuilder = <TData extends RowData>() => ({\n helper: createColumnHelper<TData>(),\n builder: new ColumnBuilder<TData>(),\n});\n\n// TODO(thure): This interface is redundant, e.g. `classNames` == `meta.cell.classNames`\n/**\n * NOTE: Can use `meta` for custom properties.\n */\nexport type BaseColumnOptions<TData, TValue> = Partial<ColumnDef<TData, TValue>> & {\n meta?: ColumnMeta<TData, TValue>;\n label?: string;\n classNames?: ClassNameValue;\n onUpdate?: ValueUpdater<TData, TValue | undefined>;\n};\n\n// TODO(burdon): Better abstraction?\nexport type SearchListQueryModel<TData extends RowData> = {\n getId(object: TData): string;\n getText(object: TData): string;\n query(text?: string): Promise<TData[]>;\n};\n\nexport type ComboboxColumnOptions<TData extends RowData> = BaseColumnOptions<TData, any> & {\n model: SearchListQueryModel<TData>;\n};\n\nexport type StringColumnOptions<TData extends RowData> = BaseColumnOptions<TData, string> & {};\nexport type SelectRowColumnOptions<TData extends RowData> = BaseColumnOptions<TData, string> & {};\n\nexport type NumberColumnOptions<TData extends RowData> = BaseColumnOptions<TData, number> & {\n digits?: number;\n};\n\nexport type KeyColumnOptions<TData extends RowData> = BaseColumnOptions<TData, PublicKey> & {\n tooltip?: boolean;\n};\n\nexport type DateColumnOptions<TData extends RowData> = BaseColumnOptions<TData, Date> & {\n format?: string;\n relative?: boolean;\n};\n\nexport type SwitchColumnOptions<TData extends RowData> = BaseColumnOptions<TData, boolean> & {};\n\nexport type IconColumnOptions<TData extends RowData> = BaseColumnOptions<TData, boolean> & {\n on?: {\n Icon?: Icon;\n className?: string;\n };\n off?: {\n Icon?: Icon;\n className?: string;\n };\n};\n\nconst ComboboxBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, TData>) => {\n const { model, onUpdate } = cellContext.column.columnDef.meta as ColumnMeta<TData, TData>;\n return model ? (\n <CellCombobox<TData>\n model={model}\n value={cellContext.getValue()}\n onValueChange={(value) => onUpdate?.(cellContext.row.original, cellContext.column.id, value)}\n />\n ) : null;\n};\n\nconst StringBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, string>) => {\n const ref = useRef<HTMLInputElement>(null);\n const { findPrevFocusable } = useFocusFinders();\n\n const { onUpdate, cell } = cellContext.column.columnDef.meta as ColumnMeta<TData, string>;\n\n // https://tanstack.com/table/v8/docs/examples/react/editable-data\n const initialValue = cellContext.getValue();\n const [value, setValue] = useState(() => {\n // TODO(burdon): Temporary shim for automerge.\n if ((initialValue as any)?.content) {\n return (initialValue as any)?.content;\n }\n\n return initialValue;\n });\n\n const handleSave = () => {\n ref.current && document.activeElement === ref.current && findPrevFocusable(ref.current)?.focus();\n\n if (value !== initialValue) {\n onUpdate?.(cellContext.row.original, cellContext.column.id, value);\n }\n };\n\n const handleCancel = () => setValue(initialValue);\n\n let placeholder = false;\n const columns = cellContext.table.getVisibleFlatColumns();\n\n // Calling getRowModel is expensive, so only do it when we're a cell in the first position\n if (columns[0].id === cellContext.column.id) {\n const rowCount = cellContext.table.getRowModel().rows.length;\n placeholder = cellContext.row.index === rowCount - 1 && columns[0].id === cellContext.column.id;\n }\n\n // TODO(burdon): Don't render inputs unless mouse over (Show ellipsis when div)?\n return (\n <Input.Root>\n <Input.TextInput\n ref={ref}\n variant='subdued'\n placeholder={placeholder ? 'Add row...' : undefined}\n classNames={['is-full', textPadding, cell?.classNames]}\n value={value ?? ''}\n onBlur={handleSave}\n onChange={(event) => setValue(event.target.value)}\n onKeyDown={(event) => (event.key === 'Enter' && handleSave()) || (event.key === 'Escape' && handleCancel())}\n />\n </Input.Root>\n );\n};\n\nconst parseNumber = (text?: string) => (text?.trim().length ? Number(text) : NaN);\n\nconst displayNumber = (value?: number, digits?: number) =>\n value || value === 0\n ? value.toLocaleString(undefined, {\n minimumFractionDigits: digits ?? 0,\n maximumFractionDigits: digits ?? 2,\n })\n : '';\n\nconst NumberBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, number>) => {\n const { onUpdate, digits } = cellContext.column.columnDef.meta as ColumnMeta<TData, string>;\n const value = cellContext.getValue();\n const [text, setText] = useState<string>(displayNumber(value, digits));\n const { findPrevFocusable } = useFocusFinders();\n const ref = useRef<HTMLInputElement | null>(null);\n\n // Update display value if `digits` changes and input is not in focus.\n useEffect(() => {\n (!document.activeElement || document.activeElement !== ref.current) && setText(displayNumber(value, digits));\n }, [digits, value]);\n\n const handleEdit = () => setText(value !== undefined ? String(value) : '');\n\n // TODO(burdon): Property is encoded as float (e.g., 6.1 => 6.099)\n const handleSave = () => {\n const nextValue = parseNumber(text);\n\n if (!isNaN(nextValue)) {\n onUpdate?.(cellContext.row.original, cellContext.column.id, nextValue);\n setText(displayNumber(nextValue, digits));\n } else {\n // Reset the text to display the original value without updating the model.\n setText(displayNumber(value, digits));\n }\n\n // Shift focus only if input is focused on save (e.g. on `Enter`).\n ref.current && document.activeElement === ref.current && findPrevFocusable(ref.current)?.focus();\n };\n\n const _handleCancel = () => {\n setText(displayNumber(value, digits));\n ref.current && findPrevFocusable(ref.current)?.focus();\n };\n\n return (\n <Input.Root>\n <Input.TextInput\n ref={ref}\n variant='subdued'\n value={text}\n classNames={['is-full text-end font-mono', textPadding]}\n onBlur={handleSave}\n onFocus={handleEdit}\n onChange={({ target: { value } }) => setText(value)}\n onKeyDown={(event) => {\n // TODO(thure): `Escape` is reserved for blurring the input and moving focus to the cell\n return /* (event.key === 'Escape' && handleCancel()) || */ event.key === 'Enter' && handleSave();\n }}\n />\n </Input.Root>\n );\n};\n\nconst RowSelectorBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, unknown>) => {\n const { cell } = cellContext.column.columnDef.meta as ColumnMeta<TData, unknown>;\n const { row } = cellContext;\n\n const checked = row.getCanSelect()\n ? row.getIsSelected()\n : row.getCanSelectSubRows() && (row.getIsSomeSelected() ? 'indeterminate' : row.getIsAllSubRowsSelected());\n\n return (\n <div className='flex justify-center w-full h-full' role='presentation'>\n <Input.Root>\n <Input.Checkbox\n size={4}\n classNames={[cell?.classNames]}\n checked={checked}\n onCheckedChange={(event) => {\n if (row.getCanSelect()) {\n row.getToggleSelectedHandler()(event);\n }\n }}\n disabled={!(row.getCanSelect() || row.getCanSelectSubRows())}\n />\n </Input.Root>\n </div>\n );\n};\n\nconst SwitchBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, boolean>) => {\n const { onUpdate } = cellContext.column.columnDef.meta as ColumnMeta<TData, boolean>;\n const value = cellContext.getValue();\n return (\n <Input.Root>\n <Input.Switch\n classNames='block mli-auto'\n onClick={(event) => event.stopPropagation()}\n disabled={!onUpdate}\n checked={!!value}\n onCheckedChange={(value) => {\n onUpdate?.(cellContext.row.original, cellContext.column.id, !!value);\n }}\n />\n </Input.Root>\n );\n};\n\n/**\n * Util to create column definitions.\n */\nexport class ColumnBuilder<TData extends RowData> {\n /**\n * Combobox value\n */\n combobox({\n label,\n classNames,\n model,\n onUpdate,\n ...props\n }: ComboboxColumnOptions<TData>): Partial<ColumnDef<TData, any>> {\n return {\n minSize: 100,\n header: (column) => {\n return label ?? column.header.id;\n },\n cell:\n model && onUpdate\n ? ComboboxBuilderCell\n : (cellContext) => {\n const cellValue = cellContext.getValue();\n return <div className={mx('truncate', classNames)}>{cellValue ? model?.getText(cellValue) : ''}</div>;\n },\n ...props,\n meta: {\n ...props.meta,\n model,\n onUpdate,\n cell: { classNames, ...props.meta?.cell },\n },\n };\n }\n\n /**\n * String formats.\n */\n string({ label, classNames, onUpdate, ...props }: StringColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, string>\n > {\n return {\n minSize: 100,\n // TODO(burdon): Default.\n header: (column) => {\n return label ?? column.header.id;\n },\n cell: onUpdate\n ? StringBuilderCell\n : (cell) => {\n let value = cell.getValue();\n // TODO(burdon): Hack to support automerge.\n if (typeof value === 'object' && (value as any)?.__typename === 'dxos.Text.v0') {\n value = (value as any).content;\n }\n\n return <div className={mx('truncate', textPadding, classNames)}>{value}</div>;\n },\n ...props,\n meta: {\n ...props.meta,\n onUpdate,\n cell: { ...props.meta?.cell, classNames },\n },\n };\n }\n\n /**\n * Number formats.\n */\n number({ label, minSize, classNames, digits, onUpdate, ...props }: NumberColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, number>\n > {\n return {\n size: 100,\n minSize: 100,\n header: (cell) => label ?? cell.header.id,\n cell: NumberBuilderCell,\n ...props,\n meta: {\n ...props.meta,\n onUpdate,\n digits,\n header: { classNames: 'text-end', ...props.meta?.header },\n cell: { ...props.meta?.cell, classNames },\n },\n };\n }\n\n /**\n * Date formats.\n */\n // TODO(burdon): Date picker (pluggable renderers?)\n date({ label, format: formatSpec, relative, classNames, ...props }: DateColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, Date>\n > {\n return {\n size: 220, // TODO(burdon): Depends on format.\n minSize: 100,\n header: (cell) => label ?? cell.header.id,\n cell: (cell) => {\n const value = cell.getValue();\n\n try {\n const str = value\n ? formatSpec\n ? format(value, formatSpec)\n : relative\n ? formatDistanceToNow(value, { addSuffix: true })\n : value.toISOString()\n : undefined;\n\n return <div className={mx(textPadding, classNames)}>{str}</div>;\n } catch (err) {\n log.info('formatError', { value });\n return null;\n }\n },\n ...props,\n meta: { ...props.meta, cell: { ...props.meta?.cell, classNames } },\n };\n }\n\n /**\n * PublicKey with tooltip.\n */\n key({ label, tooltip, classNames, ...props }: KeyColumnOptions<TData> = {}): Partial<ColumnDef<TData, PublicKey>> {\n return {\n size: 94,\n minSize: 94,\n header: (cell) => label ?? cell.header.id,\n cell: (cell) => {\n const value = cell.getValue();\n if (!value) {\n return;\n }\n\n // TODO(burdon): Factor out styles.\n const element = value.truncate();\n if (!tooltip) {\n return element;\n }\n\n return (\n <Tooltip.Provider>\n <Tooltip.Root>\n <Tooltip.Trigger>{element}</Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='right'>\n <Tooltip.Arrow />\n <ClipboardText\n onClick={(ev) => {\n ev.stopPropagation(); // Prevent select row.\n void navigator.clipboard.writeText(value.toHex());\n }}\n />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </Tooltip.Provider>\n );\n },\n ...props,\n meta: { ...props.meta, cell: { ...props.meta?.cell, classNames: ['font-mono', textPadding, classNames] } },\n };\n }\n\n /**\n * Row selector\n */\n selectRow({ classNames, onUpdate, id = 'selectRow' }: SelectRowColumnOptions<TData> = {}): Parameters<\n ColumnHelper<TData>['display']\n >[0] {\n return {\n id,\n size: 32,\n enableResizing: false,\n meta: { onUpdate, cell: { classNames } },\n header: ({ table }) => {\n const { rowsSelectable } = useTableContext();\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"],
5
+ "mappings": "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",
6
+ "names": ["Check", "Trash", "X", "GearSix", "React", "useRef", "useState", "Button", "DensityProvider", "Input", "Popover", "Select", "Separator", "useTranslation", "getSize", "mx", "safeParseInt", "CaretUpDown", "SortAscending", "SortDescending", "React", "Button", "getSize", "SortButton", "sortDirection", "onClick", "icon", "size", "getSize", "SortAscending", "className", "SortDescending", "CaretUpDown", "Button", "variant", "translationKey", "ColumnMenu", "column", "props", "title", "label", "length", "id", "header", "context", "canSort", "getCanSort", "sortDirection", "getIsSorted", "toggleSort", "getToggleSortingHandler", "React", "div", "className", "SortButton", "onClick", "ColumnPanel", "Section", "children", "role", "mx", "tableDefs", "tableDef", "onUpdate", "onDelete", "open", "setOpen", "useState", "prop", "setProp", "refTable", "setRefTable", "refProp", "setRefProp", "type", "setType", "String", "setLabel", "digits", "setDigits", "propRef", "useRef", "t", "useTranslation", "translationKey", "handleCancel", "handleSave", "match", "current", "focus", "columns", "find", "c", "safeParseInt", "Popover", "Root", "onOpenChange", "nextOpen", "Trigger", "asChild", "Button", "variant", "GearSix", "getSize", "Portal", "Content", "Viewport", "classNames", "DensityProvider", "density", "Input", "Label", "TextInput", "placeholder", "value", "onChange", "event", "target", "autoFocus", "ref", "replace", "Select", "onValueChange", "TriggerButton", "map", "Option", "key", "filter", "name", "Separator", "span", "Check", "ns", "X", "Trash", "Arrow", "useControllableState", "getCoreRowModel", "getSortedRowModel", "useReactTable", "getGroupedRowModel", "getExpandedRowModel", "useVirtualizer", "React", "Fragment", "useCallback", "useEffect", "useState", "log", "useDefaultValue", "useOnTransition", "useArrowNavigationGroup", "flexRender", "React", "React", "useContext", "createContext", "TableContext", "createContext", "TableProvider", "children", "value", "React", "Provider", "useTableContext", "context", "useContext", "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", "React", "tbody", "map", "row", "isCurrent", "original", "isSelected", "id", "isPinned", "getIsPinned", "classNames", "tbodyTr", "tr", "key", "className", "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", "useEffect", "useState", "usePinLastRow", "pinLastRow", "table", "data", "getScrollElement", "pinnedRowKey", "setPinnedRowKey", "useState", "useEffect", "rows", "getRowModel", "rowToPin", "length", "rowId", "id", "resetRowPinning", "pin", "scrollElement", "isFirstRender", "undefined", "requestAnimationFrame", "scrollTo", "top", "scrollHeight", "Table", "props", "role", "onColumnResize", "columnVisibility", "header", "rowsSelectable", "debug", "onDataSelectionChange", "getScrollElement", "pinLastRow", "columns", "useDefaultValue", "data", "TableProvider", "UntypedTableProvider", "columnsInitialised", "setColumnsInitialised", "useState", "columnSizing", "setColumnSizing", "useEffect", "filter", "column", "size", "prop", "undefined", "reduce", "state", "columnSizingInfo", "setColumnSizingInfo", "notifyColumnResize", "useCallback", "useOnTransition", "isResizingColumn", "v", "rowSelection", "setRowSelection", "useControllableState", "onChange", "onRowSelectionChange", "defaultProp", "defaultRowSelection", "handleRowSelectionChange", "updaterOrValue", "nextRowSelection", "nextRowSelectionKey", "Object", "keys", "id", "grouping", "handleGroupingChange", "table", "useReactTable", "meta", "defaultColumn", "maxSize", "columnResizeMode", "enableColumnResizing", "onColumnSizingChange", "onColumnSizingInfoChange", "getCoreRowModel", "getSortedRowModel", "getExpandedRowModel", "getGroupedRowModel", "length", "onGroupingChange", "enableMultiRowSelection", "enableRowSelection", "enableSorting", "enableColumnPinning", "debugTable", "map", "getRowModel", "rowsById", "original", "usePinLastRow", "expand", "log", "warn", "React", "isGrid", "TableImpl", "classNames", "footer", "fullWidth", "useTableContext", "centerRows", "getCenterRows", "bottomRows", "getBottomRows", "rows", "pre", "className", "code", "JSON", "stringify", "getState", "virtualisable", "tableRoot", "style", "width", "getTotalSize", "TableHead", "MemoizedVirtualisedTableContent", "VirtualizedTableContent", "TableBody", "GroupedTableContent", "TableFooter", "pinnedRows", "getVirtualItems", "useVirtualizer", "count", "overscan", "estimateSize", "virtualRows", "totalSize", "paddingTop", "start", "paddingBottom", "end", "rowsToRender", "virtualRow", "index", "tbody", "tr", "td", "height", "memo", "getHeaderGroups", "row", "i", "Fragment", "key", "thead", "th", "colSpan", "headers", "groupTh", "String", "getGroupingValue", "subRows", "CaretDown", "React", "useCallback", "useState", "Popover", "useTranslation", "PopoverCombobox", "descriptionText", "getSize", "mx", "staticPlaceholderText", "initialItems", "model", "value", "getId", "label", "getText", "data", "CellCombobox", "onValueChange", "t", "useTranslation", "translationKey", "items", "setItems", "useState", "loading", "setLoading", "searchInputValue", "setSearchInputValue", "handleSearchInputValueChange", "text", "query", "reduce", "acc", "item", "handleValueChange", "useCallback", "id", "React", "PopoverCombobox", "Root", "placeholder", "Trigger", "variant", "classNames", "span", "className", "mx", "staticPlaceholderText", "CaretDown", "weight", "getSize", "Content", "shouldFilter", "Input", "List", "length", "p", "descriptionText", "Empty", "Object", "entries", "map", "Item", "key", "onSelect", "Popover", "Arrow", "useFocusFinders", "Check", "ClipboardText", "X", "createColumnHelper", "format", "formatDistanceToNow", "React", "useEffect", "useRef", "useState", "log", "Input", "Tooltip", "getSize", "mx", "createColumnBuilder", "helper", "createColumnHelper", "builder", "ColumnBuilder", "ComboboxBuilderCell", "cellContext", "model", "onUpdate", "column", "columnDef", "meta", "React", "CellCombobox", "value", "getValue", "onValueChange", "row", "original", "id", "StringBuilderCell", "ref", "useRef", "findPrevFocusable", "useFocusFinders", "cell", "initialValue", "setValue", "useState", "content", "handleSave", "current", "document", "activeElement", "focus", "handleCancel", "placeholder", "columns", "table", "getVisibleFlatColumns", "rowCount", "getRowModel", "rows", "length", "index", "Input", "Root", "TextInput", "variant", "undefined", "classNames", "textPadding", "onBlur", "onChange", "event", "target", "onKeyDown", "key", "parseNumber", "text", "trim", "Number", "NaN", "displayNumber", "digits", "toLocaleString", "minimumFractionDigits", "maximumFractionDigits", "NumberBuilderCell", "setText", "useEffect", "handleEdit", "String", "nextValue", "isNaN", "_handleCancel", "onFocus", "RowSelectorBuilderCell", "checked", "getCanSelect", "getIsSelected", "getCanSelectSubRows", "getIsSomeSelected", "getIsAllSubRowsSelected", "div", "className", "role", "Checkbox", "size", "onCheckedChange", "getToggleSelectedHandler", "disabled", "SwitchBuilderCell", "Switch", "onClick", "stopPropagation", "combobox", "label", "props", "minSize", "header", "cellValue", "mx", "getText", "string", "__typename", "number", "date", "format", "formatSpec", "relative", "str", "formatDistanceToNow", "addSuffix", "toISOString", "err", "log", "info", "tooltip", "element", "truncate", "Tooltip", "Provider", "Trigger", "Portal", "Content", "side", "Arrow", "ClipboardText", "ev", "navigator", "clipboard", "writeText", "toHex", "selectRow", "enableResizing", "rowsSelectable", "useTableContext", "getIsSomeRowsSelected", "getIsAllRowsSelected", "toggleAllRowsSelected", "switch", "enableSorting", "icon", "on", "off", "IconOn", "Icon", "Check", "IconOff", "X", "getSize"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/ui/react-ui-table/src/components/SortButton.tsx":{"bytes":3261,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/translations.ts":{"bytes":2343,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/components/ColumnMenu.tsx":{"bytes":30689,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/SortButton.tsx","kind":"import-statement","original":"./SortButton"},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"../translations"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableContext.tsx":{"bytes":3140,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/theme.ts":{"bytes":10035,"imports":[{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/Cell.tsx":{"bytes":4842,"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":7634,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./TableContext"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"../../theme"},{"path":"packages/ui/react-ui-table/src/components/Cell/Cell.tsx","kind":"import-statement","original":"../Cell/Cell"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableFooter.tsx":{"bytes":4638,"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":7863,"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":32610,"imports":[{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/TableBody.tsx","kind":"import-statement","original":"./TableBody"},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./TableContext"},{"path":"packages/ui/react-ui-table/src/components/Table/TableFooter.tsx","kind":"import-statement","original":"./TableFooter"},{"path":"packages/ui/react-ui-table/src/components/Table/TableHead.tsx","kind":"import-statement","original":"./TableHead"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"../../theme"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/props.ts":{"bytes":3075,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/index.ts":{"bytes":557,"imports":[{"path":"packages/ui/react-ui-table/src/components/Table/Table.tsx","kind":"import-statement","original":"./Table"},{"path":"packages/ui/react-ui-table/src/components/Table/props.ts","kind":"import-statement","original":"./props"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx":{"bytes":11696,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/index.ts":{"bytes":494,"imports":[{"path":"packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx","kind":"import-statement","original":"./CellCombobox"}],"format":"esm"},"packages/ui/react-ui-table/src/components/index.ts":{"bytes":644,"imports":[{"path":"packages/ui/react-ui-table/src/components/ColumnMenu.tsx","kind":"import-statement","original":"./ColumnMenu"},{"path":"packages/ui/react-ui-table/src/components/Table/index.ts","kind":"import-statement","original":"./Table"},{"path":"packages/ui/react-ui-table/src/components/Cell/index.ts","kind":"import-statement","original":"./Cell"}],"format":"esm"},"packages/ui/react-ui-table/src/helpers.tsx":{"bytes":51830,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"date-fns/format","kind":"import-statement","external":true},{"path":"date-fns/formatDistanceToNow","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./components/Table/TableContext"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"./theme"}],"format":"esm"},"packages/ui/react-ui-table/src/schema.ts":{"bytes":1111,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/types.ts":{"bytes":1830,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/index.ts":{"bytes":1017,"imports":[{"path":"packages/ui/react-ui-table/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-table/src/helpers.tsx","kind":"import-statement","original":"./helpers"},{"path":"packages/ui/react-ui-table/src/schema.ts","kind":"import-statement","original":"./schema"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"./theme"},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/ui/react-ui-table/src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-table/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":90595},"packages/ui/react-ui-table/dist/lib/browser/index.mjs":{"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"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":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"date-fns/format","kind":"import-statement","external":true},{"path":"date-fns/formatDistanceToNow","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"exports":["CellCombobox","ColumnBuilder","ColumnMenu","ColumnPanel","MemoizedVirtualisedTableContent","Table","createColumnBuilder","currentRow","flushPadding","gridCellFocusRing","groupTh","headPadding","selectedRow","tableRoot","tbodyRoot","tbodyTr","tdContent","tdRoot","textPadding","tfootRoot","tfootTh","tfootTr","theadResizeRoot","theadRoot","theadTh","theadTr","translations"],"entryPoint":"packages/ui/react-ui-table/src/index.ts","inputs":{"packages/ui/react-ui-table/src/components/ColumnMenu.tsx":{"bytesInOutput":8248},"packages/ui/react-ui-table/src/components/SortButton.tsx":{"bytesInOutput":796},"packages/ui/react-ui-table/src/translations.ts":{"bytesInOutput":611},"packages/ui/react-ui-table/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/Table/Table.tsx":{"bytesInOutput":8433},"packages/ui/react-ui-table/src/components/Table/TableBody.tsx":{"bytesInOutput":1718},"packages/ui/react-ui-table/src/components/Table/TableContext.tsx":{"bytesInOutput":358},"packages/ui/react-ui-table/src/theme.ts":{"bytesInOutput":2142},"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/components/Cell/CellCombobox.tsx":{"bytesInOutput":3095},"packages/ui/react-ui-table/src/components/Cell/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/helpers.tsx":{"bytesInOutput":12685}},"bytes":43195}}}
1
+ {"inputs":{"packages/ui/react-ui-table/src/components/SortButton.tsx":{"bytes":3261,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/translations.ts":{"bytes":2343,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/components/ColumnMenu.tsx":{"bytes":30689,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/SortButton.tsx","kind":"import-statement","original":"./SortButton"},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"../translations"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableContext.tsx":{"bytes":3140,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/theme.ts":{"bytes":10295,"imports":[{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/Cell.tsx":{"bytes":4842,"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":8051,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./TableContext"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"../../theme"},{"path":"packages/ui/react-ui-table/src/components/Cell/Cell.tsx","kind":"import-statement","original":"../Cell/Cell"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/TableFooter.tsx":{"bytes":4638,"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":7863,"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/hooks/usePinLastRow.ts":{"bytes":3993,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/Table.tsx":{"bytes":32122,"imports":[{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/Table/TableBody.tsx","kind":"import-statement","original":"./TableBody"},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./TableContext"},{"path":"packages/ui/react-ui-table/src/components/Table/TableFooter.tsx","kind":"import-statement","original":"./TableFooter"},{"path":"packages/ui/react-ui-table/src/components/Table/TableHead.tsx","kind":"import-statement","original":"./TableHead"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"../../theme"},{"path":"packages/ui/react-ui-table/src/components/hooks/usePinLastRow.ts","kind":"import-statement","original":"../hooks/usePinLastRow"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/props.ts":{"bytes":3075,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/components/Table/index.ts":{"bytes":557,"imports":[{"path":"packages/ui/react-ui-table/src/components/Table/Table.tsx","kind":"import-statement","original":"./Table"},{"path":"packages/ui/react-ui-table/src/components/Table/props.ts","kind":"import-statement","original":"./props"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx":{"bytes":11696,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"packages/ui/react-ui-table/src/components/Cell/index.ts":{"bytes":494,"imports":[{"path":"packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx","kind":"import-statement","original":"./CellCombobox"}],"format":"esm"},"packages/ui/react-ui-table/src/components/index.ts":{"bytes":644,"imports":[{"path":"packages/ui/react-ui-table/src/components/ColumnMenu.tsx","kind":"import-statement","original":"./ColumnMenu"},{"path":"packages/ui/react-ui-table/src/components/Table/index.ts","kind":"import-statement","original":"./Table"},{"path":"packages/ui/react-ui-table/src/components/Cell/index.ts","kind":"import-statement","original":"./Cell"}],"format":"esm"},"packages/ui/react-ui-table/src/helpers.tsx":{"bytes":51830,"imports":[{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"date-fns/format","kind":"import-statement","external":true},{"path":"date-fns/formatDistanceToNow","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-table/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-table/src/components/Table/TableContext.tsx","kind":"import-statement","original":"./components/Table/TableContext"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"./theme"}],"format":"esm"},"packages/ui/react-ui-table/src/schema.ts":{"bytes":1111,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/types.ts":{"bytes":1830,"imports":[],"format":"esm"},"packages/ui/react-ui-table/src/index.ts":{"bytes":1017,"imports":[{"path":"packages/ui/react-ui-table/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-table/src/helpers.tsx","kind":"import-statement","original":"./helpers"},{"path":"packages/ui/react-ui-table/src/schema.ts","kind":"import-statement","original":"./schema"},{"path":"packages/ui/react-ui-table/src/theme.ts","kind":"import-statement","original":"./theme"},{"path":"packages/ui/react-ui-table/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/ui/react-ui-table/src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-table/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":92797},"packages/ui/react-ui-table/dist/lib/browser/index.mjs":{"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"@tanstack/react-virtual","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"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":"react","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@fluentui/react-tabster","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"@tanstack/react-table","kind":"import-statement","external":true},{"path":"date-fns/format","kind":"import-statement","external":true},{"path":"date-fns/formatDistanceToNow","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"exports":["CellCombobox","ColumnBuilder","ColumnMenu","ColumnPanel","MemoizedVirtualisedTableContent","Table","createColumnBuilder","currentRow","flushPadding","gridCellFocusRing","groupTh","headPadding","selectedRow","tableRoot","tbodyRoot","tbodyTr","tdContent","tdRoot","textPadding","tfootRoot","tfootTh","tfootTr","theadResizeRoot","theadRoot","theadTh","theadTr","translations"],"entryPoint":"packages/ui/react-ui-table/src/index.ts","inputs":{"packages/ui/react-ui-table/src/components/ColumnMenu.tsx":{"bytesInOutput":8248},"packages/ui/react-ui-table/src/components/SortButton.tsx":{"bytesInOutput":796},"packages/ui/react-ui-table/src/translations.ts":{"bytesInOutput":611},"packages/ui/react-ui-table/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/Table/Table.tsx":{"bytesInOutput":8307},"packages/ui/react-ui-table/src/components/Table/TableBody.tsx":{"bytesInOutput":1825},"packages/ui/react-ui-table/src/components/Table/TableContext.tsx":{"bytesInOutput":358},"packages/ui/react-ui-table/src/theme.ts":{"bytesInOutput":2218},"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/hooks/usePinLastRow.ts":{"bytesInOutput":896},"packages/ui/react-ui-table/src/components/Table/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/components/Cell/CellCombobox.tsx":{"bytesInOutput":3095},"packages/ui/react-ui-table/src/components/Cell/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-table/src/helpers.tsx":{"bytesInOutput":12685}},"bytes":44217}}}
@@ -1 +1 @@
1
- {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/Table.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,KAAqD,MAAM,OAAO,CAAC;AAS1E,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,eAAO,MAAM,KAAK,kEAuJjB,CAAC;AAgGF,eAAO,MAAM,+BAA+B,oDA1CzC,KAAK,mBAAmB,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB,CAAC,iBA0CiB,CAAC"}
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/Table.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,KAAqD,MAAM,OAAO,CAAC;AAS1E,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAI1C,eAAO,MAAM,KAAK,kEA6IjB,CAAC;AAgGF,eAAO,MAAM,+BAA+B,oDA1CzC,KAAK,mBAAmB,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB,CAAC,iBA0CiB,CAAC"}
@@ -90,6 +90,9 @@ export declare const Dynamic: {
90
90
  export declare const Editable: {
91
91
  render: () => JSX.Element;
92
92
  };
93
+ export declare const PinnedLastRow: {
94
+ render: () => JSX.Element;
95
+ };
93
96
  export declare const Resizable: {
94
97
  render: () => JSX.Element;
95
98
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Table.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/Table.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,YAAY,CAAC;AAMpB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;;;;;;4BA4FsB,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAL5B,wBAuCE;AAEF,eAAO,MAAM,OAAO;;;;;CAKnB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;CAKrB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;CAMtB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;CAIjB,CAAC;AAEF,eAAO,MAAM,OAAO;;CAmCnB,CAAC;AAEF,eAAO,MAAM,QAAQ;;CA4BpB,CAAC;AAEF,eAAO,MAAM,SAAS;;CAyBrB,CAAC;AAEF,eAAO,MAAM,eAAe;;CA4B3B,CAAC"}
1
+ {"version":3,"file":"Table.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/Table.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,YAAY,CAAC;AAMpB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;;;;;;4BA4FsB,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAL5B,wBAuCE;AAEF,eAAO,MAAM,OAAO;;;;;CAKnB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;CAKrB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;CAMtB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;CAIjB,CAAC;AAEF,eAAO,MAAM,OAAO;;CAmCnB,CAAC;AAEF,eAAO,MAAM,QAAQ;;CA4BpB,CAAC;AAEF,eAAO,MAAM,aAAa;;CA6BzB,CAAC;AAEF,eAAO,MAAM,SAAS;;CAyBrB,CAAC;AAEF,eAAO,MAAM,eAAe;;CA4B3B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TableBody.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/TableBody.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAc,KAAK,GAAG,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAS3E,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;CACtB,CAAC;AAEF,QAAA,MAAM,SAAS;eAAc,cAAc;;CA8C1C,CAAC;AAIF,OAAO,EAAE,SAAS,EAAE,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"TableBody.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/TableBody.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAc,KAAK,GAAG,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAS3E,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;CACtB,CAAC;AAEF,QAAA,MAAM,SAAS;eAAc,cAAc;;CAmD1C,CAAC;AAIF,OAAO,EAAE,SAAS,EAAE,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Table } from '@tanstack/react-table';
2
+ export declare const usePinLastRow: (pinLastRow: boolean | undefined, table: Table<any>, data: any, getScrollElement?: () => Element | null) => void;
3
+ //# sourceMappingURL=usePinLastRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePinLastRow.d.ts","sourceRoot":"","sources":["../../../../../src/components/hooks/usePinLastRow.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAGnD,eAAO,MAAM,aAAa,eACZ,OAAO,GAAG,SAAS,SACxB,MAAM,GAAG,CAAC,QACX,GAAG,qBACU,MAAM,OAAO,GAAG,IAAI,SA+BxC,CAAC"}
@@ -21,6 +21,7 @@ export type TbodyStyleProps = Partial<TableContextValue<any>>;
21
21
  export declare const tbodyRoot: ComponentFunction<TbodyStyleProps>;
22
22
  export type TbodyTrStyleProps = Partial<{
23
23
  canBeCurrent?: boolean;
24
+ isPinned?: boolean;
24
25
  }>;
25
26
  export declare const tbodyTr: ComponentFunction<TbodyTrStyleProps>;
26
27
  export declare const tdRoot: ComponentFunction<TbodyStyleProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/theme.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEvE,eAAO,MAAM,UAAU,wCAAwC,CAAC;AAChE,eAAO,MAAM,WAAW,yCAAyC,CAAC;AAClE,eAAO,MAAM,YAAY,gBAAgB,CAAC;AAC1C,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAC3C,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAEzC,eAAO,MAAM,iBAAiB,oGACqE,CAAC;AAMpG,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CACN,CAAC;AAEpD,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CACH,CAAC;AAMrD,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAElD,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CAMtD,CAAC;AAEJ,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAA2C,CAAC;AAEnG,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAQpD,CAAC;AAEJ,eAAO,MAAM,eAAe,EAAE,iBAAiB,CAAC;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,CAUtE,CAAC;AAMF,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CAAkC,CAAC;AAE5F,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AACpE,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,iBAAiB,CAOtD,CAAC;AAMJ,eAAO,MAAM,MAAM,EAAE,iBAAiB,CAAC,eAAe,CACwD,CAAC;AAE/G,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAkC,CAAC;AAMlG,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CACJ,CAAC;AAEtD,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAAkC,CAAC;AAE1F,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CACO,CAAC"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/theme.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEvE,eAAO,MAAM,UAAU,wCAAwC,CAAC;AAChE,eAAO,MAAM,WAAW,yCAAyC,CAAC;AAClE,eAAO,MAAM,YAAY,gBAAgB,CAAC;AAC1C,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAC3C,eAAO,MAAM,WAAW,gBAAgB,CAAC;AAEzC,eAAO,MAAM,iBAAiB,oGACqE,CAAC;AAMpG,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CACN,CAAC;AAEpD,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CACH,CAAC;AAMrD,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAElD,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CAMtD,CAAC;AAEJ,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAA2C,CAAC;AAEnG,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAQpD,CAAC;AAEJ,eAAO,MAAM,eAAe,EAAE,iBAAiB,CAAC;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,CAUtE,CAAC;AAMF,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CAAkC,CAAC;AAE5F,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AACxF,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,iBAAiB,CAQtD,CAAC;AAMJ,eAAO,MAAM,MAAM,EAAE,iBAAiB,CAAC,eAAe,CACwD,CAAC;AAE/G,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAkC,CAAC;AAMlG,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CACJ,CAAC;AAEtD,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAAkC,CAAC;AAE1F,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CACO,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/react-ui-table",
3
- "version": "0.4.9",
3
+ "version": "0.4.10-main.1ada56e",
4
4
  "description": "A table component.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -22,15 +22,15 @@
22
22
  "@tanstack/react-table": "^8.13.2",
23
23
  "@tanstack/react-virtual": "^3.0.1",
24
24
  "date-fns": "^3.3.1",
25
- "@dxos/async": "0.4.9",
26
- "@dxos/keys": "0.4.9",
27
- "@dxos/log": "0.4.9",
28
- "@dxos/invariant": "0.4.9",
29
- "@dxos/react-ui": "0.4.9",
30
- "@dxos/react-ui-searchlist": "0.4.9",
31
- "@dxos/react-ui-theme": "0.4.9",
32
- "@dxos/react-ui-types": "0.4.9",
33
- "@dxos/util": "0.4.9"
25
+ "@dxos/async": "0.4.10-main.1ada56e",
26
+ "@dxos/invariant": "0.4.10-main.1ada56e",
27
+ "@dxos/keys": "0.4.10-main.1ada56e",
28
+ "@dxos/log": "0.4.10-main.1ada56e",
29
+ "@dxos/react-ui": "0.4.10-main.1ada56e",
30
+ "@dxos/react-ui-searchlist": "0.4.10-main.1ada56e",
31
+ "@dxos/react-ui-theme": "0.4.10-main.1ada56e",
32
+ "@dxos/util": "0.4.10-main.1ada56e",
33
+ "@dxos/react-ui-types": "0.4.10-main.1ada56e"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@phosphor-icons/react": "^2.0.5",
@@ -40,10 +40,10 @@
40
40
  "react-dom": "^18.2.0",
41
41
  "vite": "^5.1.5",
42
42
  "vite-plugin-turbosnap": "^1.0.2",
43
- "@dxos/echo-schema": "0.4.9",
44
- "@dxos/random": "0.4.9",
45
- "@dxos/react-ui-theme": "0.4.9",
46
- "@dxos/storybook-utils": "0.4.9"
43
+ "@dxos/random": "0.4.10-main.1ada56e",
44
+ "@dxos/echo-schema": "0.4.10-main.1ada56e",
45
+ "@dxos/react-ui-theme": "0.4.10-main.1ada56e",
46
+ "@dxos/storybook-utils": "0.4.10-main.1ada56e"
47
47
  },
48
48
  "peerDependencies": {
49
49
  "@phosphor-icons/react": "^2.0.5",
@@ -251,6 +251,37 @@ export const Editable = {
251
251
  },
252
252
  };
253
253
 
254
+ export const PinnedLastRow = {
255
+ render: () => {
256
+ const containerRef = useRef<HTMLDivElement | null>(null);
257
+ const [items, setItems] = useState<Item[]>(createItems(200));
258
+
259
+ const onUpdate: ValueUpdater<Item, any> = useCallback(
260
+ (item, prop, value) => setItems((items) => updateItems(items, item.publicKey, prop, value)),
261
+ [setItems],
262
+ );
263
+
264
+ const columns = useMemo(() => makeColumns(onUpdate), [onUpdate]);
265
+
266
+ return (
267
+ <div ref={containerRef} className='fixed inset-0 overflow-auto'>
268
+ <Table<Item>
269
+ role='grid'
270
+ rowsSelectable='multi'
271
+ keyAccessor={(row) => row.publicKey.toHex()}
272
+ columns={columns}
273
+ data={items}
274
+ fullWidth
275
+ stickyHeader
276
+ border
277
+ getScrollElement={() => containerRef.current}
278
+ pinLastRow
279
+ />
280
+ </div>
281
+ );
282
+ },
283
+ };
284
+
254
285
  export const Resizable = {
255
286
  render: () => {
256
287
  const containerRef = useRef<HTMLDivElement | null>(null);
@@ -27,6 +27,7 @@ import { TableFooter } from './TableFooter';
27
27
  import { TableHead } from './TableHead';
28
28
  import { type TableProps } from './props';
29
29
  import { groupTh, tableRoot } from '../../theme';
30
+ import { usePinLastRow } from '../hooks/usePinLastRow';
30
31
 
31
32
  export const Table = <TData extends RowData>(props: TableProps<TData>) => {
32
33
  const {
@@ -149,17 +150,7 @@ export const Table = <TData extends RowData>(props: TableProps<TData>) => {
149
150
  onDataSelectionChange?.(Object.keys(rowSelection).map((id) => table.getRowModel().rowsById[id].original));
150
151
  }, [onDataSelectionChange, rowSelection, table]);
151
152
 
152
- useEffect(() => {
153
- if (!pinLastRow) {
154
- return;
155
- }
156
-
157
- // Clear row pinning
158
- table.resetRowPinning();
159
-
160
- const rows = table.getRowModel().rows;
161
- rows[rows.length - 1].pin('bottom');
162
- }, [pinLastRow, table, data]);
153
+ usePinLastRow(pinLastRow, table, data, getScrollElement);
163
154
 
164
155
  // Create additional expansion column if all columns have fixed width.
165
156
  const expand = false; // columns.map((column) => column.size).filter(Boolean).length === columns?.length;
@@ -239,11 +230,9 @@ const VirtualizedTableContent = ({
239
230
  const centerRows = table.getCenterRows();
240
231
  const pinnedRows = table.getBottomRows();
241
232
 
242
- const rows = [...centerRows, ...pinnedRows];
243
-
244
233
  const { getTotalSize, getVirtualItems } = useVirtualizer({
245
234
  getScrollElement,
246
- count: rows.length,
235
+ count: centerRows.length,
247
236
  overscan: 8,
248
237
  estimateSize: () => 40,
249
238
  });
@@ -254,6 +243,8 @@ const VirtualizedTableContent = ({
254
243
  const paddingTop = virtualRows.length > 0 ? virtualRows?.[0]?.start || 0 : 0;
255
244
  const paddingBottom = virtualRows.length > 0 ? totalSize - (virtualRows?.[virtualRows.length - 1]?.end || 0) : 0;
256
245
 
246
+ const rowsToRender = [...virtualRows.map((virtualRow) => centerRows[virtualRow.index]), ...pinnedRows];
247
+
257
248
  return (
258
249
  <>
259
250
  {paddingTop > 0 && (
@@ -263,7 +254,7 @@ const VirtualizedTableContent = ({
263
254
  </tr>
264
255
  </tbody>
265
256
  )}
266
- <TableBody rows={virtualRows.map((virtualRow) => rows[virtualRow.index])} />
257
+ <TableBody rows={rowsToRender} />
267
258
  {paddingBottom > 0 && (
268
259
  <tbody role='none'>
269
260
  <tr role='none'>
@@ -28,10 +28,15 @@ const TableBody = ({ rows }: TableBodyProps) => {
28
28
  {rows.map((row) => {
29
29
  const isCurrent = currentDatum === row.original;
30
30
  const isSelected = rowSelection?.[row.id];
31
+
32
+ const isPinned = row.getIsPinned();
33
+
34
+ const classNames = tbodyTr({ canBeCurrent, isPinned: isPinned !== false });
35
+
31
36
  return (
32
37
  <tr
33
38
  key={keyAccessor ? keyAccessor(row.original) : row.id}
34
- className={tbodyTr({ canBeCurrent })}
39
+ className={classNames}
35
40
  {...(isCurrent && { 'aria-current': 'location' })}
36
41
  {...(isSelected && { 'aria-selected': 'true' })}
37
42
  {...(canBeCurrent && {
@@ -0,0 +1,43 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { type Table } from '@tanstack/react-table';
6
+ import { useEffect, useState } from 'react';
7
+
8
+ export const usePinLastRow = (
9
+ pinLastRow: boolean | undefined,
10
+ table: Table<any>,
11
+ data: any,
12
+ getScrollElement?: () => Element | null,
13
+ ) => {
14
+ const [pinnedRowKey, setPinnedRowKey] = useState<string>();
15
+
16
+ useEffect(() => {
17
+ if (!pinLastRow) {
18
+ return;
19
+ }
20
+
21
+ const rows = table.getRowModel().rows;
22
+ const rowToPin = rows[rows.length - 1];
23
+ const rowId = rowToPin.id;
24
+
25
+ if (rowId === pinnedRowKey) {
26
+ return;
27
+ }
28
+
29
+ table.resetRowPinning();
30
+ rowToPin.pin('bottom');
31
+
32
+ const scrollElement = getScrollElement?.();
33
+ const isFirstRender = pinnedRowKey === undefined;
34
+
35
+ if (scrollElement && !isFirstRender) {
36
+ requestAnimationFrame(() => {
37
+ scrollElement.scrollTo({ top: scrollElement.scrollHeight });
38
+ });
39
+ }
40
+
41
+ setPinnedRowKey(rowId);
42
+ }, [pinLastRow, table, getScrollElement, pinnedRowKey, setPinnedRowKey, data]);
43
+ };
package/src/theme.ts CHANGED
@@ -75,13 +75,14 @@ export const theadResizeRoot: ComponentFunction<{ isResizing: boolean }> = ({ is
75
75
  export type TbodyStyleProps = Partial<TableContextValue<any>>;
76
76
  export const tbodyRoot: ComponentFunction<TbodyStyleProps> = (_props, ...etc) => mx(...etc);
77
77
 
78
- export type TbodyTrStyleProps = Partial<{ canBeCurrent?: boolean }>;
79
- export const tbodyTr: ComponentFunction<TbodyTrStyleProps> = ({ canBeCurrent }, ...etc) =>
78
+ export type TbodyTrStyleProps = Partial<{ canBeCurrent?: boolean; isPinned?: boolean }>;
79
+ export const tbodyTr: ComponentFunction<TbodyTrStyleProps> = ({ canBeCurrent, isPinned }, ...etc) =>
80
80
  mx(
81
81
  'group',
82
82
  canBeCurrent ? ghostSelectedCurrent : ghostSelected,
83
83
  canBeCurrent && focusRing,
84
84
  canBeCurrent && 'cursor-pointer rounded',
85
+ isPinned && 'sticky z-[20] bottom-[-1px] base-surface shadow-sm',
85
86
  ...etc,
86
87
  );
87
88