@crispy-seed/data-table 0.10.4 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/data-table-recipe.css +58 -0
- package/dist/data-table-recipe.layered.css +63 -0
- package/dist/index.cjs +702 -328
- package/dist/index.d.ts +119 -55
- package/dist/index.js +702 -329
- package/dist/styles.css +63 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as React from 'react';
|
|
2
2
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
3
3
|
|
|
4
4
|
declare interface DataTableVariant {
|
|
@@ -57,18 +57,22 @@ interface ToolbarFilter {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
60
|
+
* Attio-parity follow-up (bring the discovery doc's PARTIAL #7 to full parity, on top
|
|
61
|
+
* of the earlier GRC live-review fix): the ColumnCalc footer's own aggregation set --
|
|
62
|
+
* six apply to every column, six more to numeric ones, one more to non-numeric ones.
|
|
63
|
+
* The six universal ops are `count` (GRC's own addition, kept) plus Attio's measured
|
|
64
|
+
* four -- `empty`/`notEmpty` labelled "Count empty"/"Count filled", `percentEmpty` /
|
|
65
|
+
* `percentFilled` -- plus `none`, which is Attio's own menu entry for "no calculation",
|
|
66
|
+
* not a conditionally-appended "Clear" item: it renders nothing (`computeColumnCalc`
|
|
67
|
+
* returns `null` for it) and, unlike `setColumnCalcOp(key, undefined)`, is a real,
|
|
68
|
+
* explicit, controllable op value so it overrides a column's `summaryDefaultOp`
|
|
69
|
+
* instead of falling back to it. Numeric columns still additionally get sum / average
|
|
70
|
+
* / median / min / max / range (GRC's set, not in Attio's own measured menu but kept --
|
|
71
|
+
* this table's contract, not a straight port); non-numeric columns still get
|
|
72
|
+
* count-unique. The styled layer picks which extra set to offer off the column's own
|
|
73
|
+
* cell type (`column-calc.tsx`'s `ColumnCalcCell`).
|
|
70
74
|
*/
|
|
71
|
-
type DataTableCalcOp = "count" | "empty" | "notEmpty" | "sum" | "average" | "median" | "min" | "max" | "range" | "countUnique";
|
|
75
|
+
type DataTableCalcOp = "count" | "empty" | "notEmpty" | "percentEmpty" | "percentFilled" | "none" | "sum" | "average" | "median" | "min" | "max" | "range" | "countUnique";
|
|
72
76
|
|
|
73
77
|
/** Everything a saved view actually captures -- deliberately the same five controlled
|
|
74
78
|
* props `useDataTableColumns` + the toolbar sort/filter hooks already expose, so
|
|
@@ -114,6 +118,15 @@ interface UseDataTableViewsProps {
|
|
|
114
118
|
storageKey?: string;
|
|
115
119
|
}
|
|
116
120
|
|
|
121
|
+
/** The context a consumer's `cellContextMenuItems` render slot gets -- everything it
|
|
122
|
+
* needs to build its own `MenuItem`s (which row/column this menu opened for, the raw
|
|
123
|
+
* value already read off `getColumnValue`) without re-deriving any of it itself. */
|
|
124
|
+
interface DataTableCellContextMenuContext<TRow> {
|
|
125
|
+
row: TRow;
|
|
126
|
+
column: DataTableColumn<TRow>;
|
|
127
|
+
value: unknown;
|
|
128
|
+
}
|
|
129
|
+
|
|
117
130
|
type DataTableCellType = "text" | "entity" | "url" | "email" | "tags" | "status" | "number" | "currency" | "date" | "datetime" | "rating" | "checkbox" | "chip" | "chip-list";
|
|
118
131
|
|
|
119
132
|
/** A `select`/`reference`/`actor` editor's own choice list -- `value`/`label` are
|
|
@@ -138,7 +151,7 @@ interface DataTableColumn<TRow> {
|
|
|
138
151
|
*/
|
|
139
152
|
key: string;
|
|
140
153
|
/** 헤더 셀에 표시할 내용입니다. */
|
|
141
|
-
header:
|
|
154
|
+
header: React.ReactNode;
|
|
142
155
|
/** 이 열을 클릭해 정렬할 수 있는지 여부입니다. */
|
|
143
156
|
sortable?: boolean;
|
|
144
157
|
/**
|
|
@@ -149,7 +162,7 @@ interface DataTableColumn<TRow> {
|
|
|
149
162
|
/** 셀 내용을 직접 그립니다. 지정하면 `type`의 기본 렌더러 대신 이것을 사용합니다.
|
|
150
163
|
* `editable`이어도 편집/always-live 상태에는 영향이 없습니다 -- 이 필드는 REST
|
|
151
164
|
* 상태의 표시만 바꿉니다. */
|
|
152
|
-
render?: (row: TRow) =>
|
|
165
|
+
render?: (row: TRow) => React.ReactNode;
|
|
153
166
|
/** `type: "currency"`의 통화 기호입니다. @default "$" */
|
|
154
167
|
symbol?: string;
|
|
155
168
|
/** `type: "rating"`의 별 개수입니다. @default 5 */
|
|
@@ -276,11 +289,11 @@ interface DataTableColumn<TRow> {
|
|
|
276
289
|
* 줄임표 처리되고, 아이콘은 `flex-shrink:0`). `type: "text"`(기본)와 `"url"`/
|
|
277
290
|
* `"email"` 열에서 동작합니다.
|
|
278
291
|
*/
|
|
279
|
-
suffixIcon?: (row: TRow) =>
|
|
292
|
+
suffixIcon?: (row: TRow) => React.ReactNode;
|
|
280
293
|
}
|
|
281
294
|
interface DataTableProps<TRow extends {
|
|
282
295
|
id: string;
|
|
283
|
-
}> extends DataTableVariantProps, Omit<PrimitiveProps, "asChild">, Omit<
|
|
296
|
+
}> extends DataTableVariantProps, Omit<PrimitiveProps, "asChild">, Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
|
|
284
297
|
columns: DataTableColumn<TRow>[];
|
|
285
298
|
data: TRow[];
|
|
286
299
|
/** `type`이 있는 열의 number/currency/date/datetime 표시에 쓰는 로캘입니다. @default "en-US" */
|
|
@@ -298,9 +311,9 @@ interface DataTableProps<TRow extends {
|
|
|
298
311
|
* 씁니다. 생략하면 karrot 아이콘 셋의 chevron을 씁니다.
|
|
299
312
|
*/
|
|
300
313
|
sortIcon?: {
|
|
301
|
-
idle?:
|
|
302
|
-
asc?:
|
|
303
|
-
desc?:
|
|
314
|
+
idle?: React.ReactNode;
|
|
315
|
+
asc?: React.ReactNode;
|
|
316
|
+
desc?: React.ReactNode;
|
|
304
317
|
};
|
|
305
318
|
/** 왼쪽에 40px짜리 체크박스 선택 열을 추가합니다. */
|
|
306
319
|
selectable?: boolean;
|
|
@@ -316,10 +329,21 @@ interface DataTableProps<TRow extends {
|
|
|
316
329
|
getRowSelectionLabel?: (row: TRow) => string;
|
|
317
330
|
/** 선택 체크박스가 checked일 때 표시할 아이콘입니다. 생략하면 karrot의 체크 아이콘을
|
|
318
331
|
* 씁니다. */
|
|
319
|
-
selectionCheckedIcon?:
|
|
332
|
+
selectionCheckedIcon?: React.ReactNode;
|
|
320
333
|
/** 전체 선택 체크박스가 일부만 선택됐을 때(indeterminate) 표시할 아이콘입니다.
|
|
321
334
|
* 생략하면 karrot의 minus 아이콘을 씁니다. */
|
|
322
|
-
selectionIndeterminateIcon?:
|
|
335
|
+
selectionIndeterminateIcon?: React.ReactNode;
|
|
336
|
+
/**
|
|
337
|
+
* 행이 하나 이상 선택되면 테이블 하단 중앙에 뜨는 벌크 액션 바(Attio 스타일 floating
|
|
338
|
+
* pill, gap #4)에 넣을 소비자 액션입니다. 현재 선택된 행 id 목록을 받는 render prop --
|
|
339
|
+
* 이 컴포넌트는 바의 크롬("N selected" + 지우기 버튼)만 제공하고, 실제 액션 버튼(Add
|
|
340
|
+
* to list, Send email, …)은 항상 소비자 자신의 것입니다 (`toolbarActions`와 같은
|
|
341
|
+
* "크롬 vs 소비자 콘텐츠" 분리). 생략하면 바는 크롬만 보여줍니다. `selectable`이 꺼져
|
|
342
|
+
* 있으면 무시됩니다(선택 자체가 없으므로).
|
|
343
|
+
*/
|
|
344
|
+
bulkActions?: (selectedIds: string[]) => React.ReactNode;
|
|
345
|
+
/** 벌크 액션 바의 지우기(x) 버튼 접근성 이름입니다. @default "Clear selection" */
|
|
346
|
+
clearSelectionLabel?: string;
|
|
323
347
|
/** 제어할 검색어입니다. */
|
|
324
348
|
query?: string;
|
|
325
349
|
/** 비제어 방식으로 사용할 때의 초기 검색어입니다. */
|
|
@@ -356,7 +380,7 @@ interface DataTableProps<TRow extends {
|
|
|
356
380
|
* 행 개수 텍스트를 직접 만듭니다. 생략하면 crisp의 기본 형식을 씁니다: 검색/필터로
|
|
357
381
|
* 줄지 않았으면 "N rows"(단수는 "row"), 줄었으면 "N of M".
|
|
358
382
|
*/
|
|
359
|
-
countLabel?: (shown: number, total: number) =>
|
|
383
|
+
countLabel?: (shown: number, total: number) => React.ReactNode;
|
|
360
384
|
/**
|
|
361
385
|
* 툴바 오른쪽, 행 개수 옆에 렌더링할 커스텀 액션입니다(예: Download/내보내기 버튼).
|
|
362
386
|
* 이전에는 이 자리에 넣을 공식 prop이 없어서 소비자가 `.seed-data-table__toolbar`
|
|
@@ -365,7 +389,7 @@ interface DataTableProps<TRow extends {
|
|
|
365
389
|
* 렌더링됩니다). 검색/정렬/필터보다 뒤, 카운트보다 앞(같은 그룹 안에서 카운트
|
|
366
390
|
* 왼쪽)에 옵니다.
|
|
367
391
|
*/
|
|
368
|
-
toolbarActions?:
|
|
392
|
+
toolbarActions?: React.ReactNode;
|
|
369
393
|
/** 헤더의 열별 메뉴(이름 변경 / 숨기기 / 왼쪽·오른쪽으로 이동)를 켭니다, seed `Menu`. */
|
|
370
394
|
columnMenu?: boolean;
|
|
371
395
|
/** 헤더를 드래그해 열 순서를 바꿀 수 있게 합니다. @default true */
|
|
@@ -429,6 +453,24 @@ interface DataTableProps<TRow extends {
|
|
|
429
453
|
* 커밋됩니다.
|
|
430
454
|
*/
|
|
431
455
|
onEdit?: (id: string, key: string, value: string) => Promise<void> | void;
|
|
456
|
+
/**
|
|
457
|
+
* Attio parity (attio-column-features-full.md gap #1) -- right-click any body cell
|
|
458
|
+
* to open a menu: Copy (any cell, built-in -- `navigator.clipboard.writeText` of the
|
|
459
|
+
* cell's own display text), Clear value/Paste (editable cells only, see
|
|
460
|
+
* `cell-context-menu.tsx`'s own `isClearableEditableCell`/`isSimpleEditableCell` for
|
|
461
|
+
* exactly which shapes qualify), and View edit history (only when
|
|
462
|
+
* `onViewEditHistory` is passed). @default true
|
|
463
|
+
*/
|
|
464
|
+
cellContextMenu?: boolean;
|
|
465
|
+
/** Shown as "View edit history" in the cell context menu, only when passed -- the
|
|
466
|
+
* consumer owns whatever history UI opens (a drawer, a modal, …); this component
|
|
467
|
+
* only fires the callback with the row and the column's key. */
|
|
468
|
+
onViewEditHistory?: (row: TRow, columnKey: string) => void;
|
|
469
|
+
/** Extra `MenuItem`s appended to the end of every cell's right-click menu (e.g. a
|
|
470
|
+
* consumer's own "Assign to…") -- rendered inside the SAME `MenuScrollArea` the
|
|
471
|
+
* built-in items are, so a `<MenuItem>` from this package's own `Menu` export
|
|
472
|
+
* composes the way `column-menu.tsx`'s own items do. */
|
|
473
|
+
cellContextMenuItems?: (ctx: DataTableCellContextMenuContext<TRow>) => React.ReactNode;
|
|
432
474
|
/** 행을 클릭할 수 있게 하는 호버 표시입니다 (crisp의 3%/4% 포그라운드 틴트). 커서
|
|
433
475
|
* 모양은 `onRowClick`이 있는지에 따로 달려 있습니다 -- 이 값과 독립적으로 켤 수
|
|
434
476
|
* 있습니다(crisp의 두 prop, `interactive`/`onRowClick`도 서로 독립적입니다). */
|
|
@@ -439,19 +481,19 @@ interface DataTableProps<TRow extends {
|
|
|
439
481
|
/** 주어지면 맨 아래에 crisp가 측정한 "+ New" 추가 행 버튼을 렌더링합니다. */
|
|
440
482
|
onAddRow?: () => void;
|
|
441
483
|
/** 추가 행 버튼의 라벨입니다. @default "New record" */
|
|
442
|
-
addRowLabel?:
|
|
484
|
+
addRowLabel?: React.ReactNode;
|
|
443
485
|
/** 전체 본문을 이 상태로 대체합니다(로딩 아이콘 + `loadingLabel`) -- 필터/정렬
|
|
444
486
|
* 재조회나 최초 로드처럼 행 전체가 아직 없을 때를 위한 것입니다. `error`/빈 상태
|
|
445
487
|
* 보다 우선합니다. 인라인 스크롤 로딩 표시기(`onLoadMore`)와는 별개입니다. */
|
|
446
488
|
loading?: boolean;
|
|
447
489
|
/** `loading`일 때 스피너 옆에 보이는 텍스트입니다. @default "Loading..." */
|
|
448
|
-
loadingLabel?:
|
|
490
|
+
loadingLabel?: React.ReactNode;
|
|
449
491
|
/** 주어지면 행 대신 이 내용을 본문에 렌더링합니다(crisp의 `.crisp-datatable-empty`
|
|
450
492
|
* 칸 재사용). `loading`보다는 아래, 빈 상태보다는 위 우선순위입니다. */
|
|
451
|
-
error?:
|
|
493
|
+
error?: React.ReactNode;
|
|
452
494
|
/** 검색/필터를 거치고도 행이 하나도 없을 때 본문에 렌더링할 내용입니다.
|
|
453
495
|
* @default "No results." */
|
|
454
|
-
empty?:
|
|
496
|
+
empty?: React.ReactNode;
|
|
455
497
|
/**
|
|
456
498
|
* Attio 스타일 무한 스크롤: 스크롤 컨테이너 바닥 근처의 sentinel 행이 뷰에 들어오면
|
|
457
499
|
* 호출됩니다. `Promise`를 반환하면 그동안 자동으로 `loadingMore`가 켜집니다(직접
|
|
@@ -475,7 +517,7 @@ interface DataTableProps<TRow extends {
|
|
|
475
517
|
* `style={{ height: "100%" }}` 같은 바운드를 주는 것만으로도 "전체 높이" 모드가
|
|
476
518
|
* 됩니다 -- 새 prop 없이 기존 `style` 전달만으로 두 모드 다 지원됩니다.
|
|
477
519
|
*/
|
|
478
|
-
scrollProps?: Omit<
|
|
520
|
+
scrollProps?: Omit<React.ComponentPropsWithoutRef<"div">, "ref" | "onScroll">;
|
|
479
521
|
}
|
|
480
522
|
/**
|
|
481
523
|
* @see https://seed-design.io/react/components/data-table
|
|
@@ -483,8 +525,8 @@ interface DataTableProps<TRow extends {
|
|
|
483
525
|
declare const DataTable: <TRow extends {
|
|
484
526
|
id: string;
|
|
485
527
|
}>(props: DataTableProps<TRow> & {
|
|
486
|
-
ref?:
|
|
487
|
-
}) =>
|
|
528
|
+
ref?: React.ForwardedRef<HTMLDivElement>;
|
|
529
|
+
}) => React.ReactElement;
|
|
488
530
|
|
|
489
531
|
interface DataTableViewsControlProps extends UseDataTableViewsProps {
|
|
490
532
|
/** The trigger's label when no view is active. @default "Views" */
|
|
@@ -494,7 +536,7 @@ interface DataTableViewsControlProps extends UseDataTableViewsProps {
|
|
|
494
536
|
* meaningful "no view" state to switch back to. */
|
|
495
537
|
showClearRow?: boolean;
|
|
496
538
|
/** The clear row's own label, when `showClearRow` is on. @default "label" */
|
|
497
|
-
clearLabel?:
|
|
539
|
+
clearLabel?: React.ReactNode;
|
|
498
540
|
/**
|
|
499
541
|
* Reads the table's CURRENT column order/visibility/widths/pins + toolbar sort/
|
|
500
542
|
* filter conditions -- called when the user picks "Save as new view" or "Update
|
|
@@ -527,10 +569,32 @@ declare namespace DataTableViewsControl {
|
|
|
527
569
|
var displayName: string;
|
|
528
570
|
}
|
|
529
571
|
|
|
572
|
+
interface DataTableBulkBarProps {
|
|
573
|
+
/** The clear ("x") button's accessible name. @default "Clear selection" */
|
|
574
|
+
clearLabel?: string;
|
|
575
|
+
/**
|
|
576
|
+
* The consumer's own bulk-action buttons, as a render prop receiving the current
|
|
577
|
+
* selected row ids -- e.g. `<DataTableBulkBar>{(ids) => <ActionButton
|
|
578
|
+
* onClick={() => addToList(ids)}>Add to list</ActionButton>}</DataTableBulkBar>`.
|
|
579
|
+
* Omit for just the bar's own chrome ("N selected" + clear).
|
|
580
|
+
*/
|
|
581
|
+
children?: (selectedIds: string[]) => React.ReactNode;
|
|
582
|
+
}
|
|
583
|
+
/**
|
|
584
|
+
* The floating bulk-action pill (gap #4) -- renders nothing while no row is selected
|
|
585
|
+
* (reads `selectedIds` off the table-wide context itself, so a consumer doesn't have
|
|
586
|
+
* to gate this on `selectable`/`selectedIds` on their own). Composed as the LAST
|
|
587
|
+
* child of the table's own root (`DataTable.tsx`), which is `position: relative` for
|
|
588
|
+
* exactly this reason -- see `data-table.ts`'s own `bulkBar` slot comment for why its
|
|
589
|
+
* geometry borrows `contextual-floating-button`'s already-measured vars rather than a
|
|
590
|
+
* guessed literal.
|
|
591
|
+
*/
|
|
592
|
+
declare function DataTableBulkBar({ clearLabel, children, }: DataTableBulkBarProps): react_jsx_runtime.JSX.Element | null;
|
|
593
|
+
|
|
530
594
|
type ResizablePanelSide = "left" | "right";
|
|
531
595
|
|
|
532
596
|
type ResizablePanelHandleVariant = "panel" | "column";
|
|
533
|
-
type ResizablePanelProps = Omit<
|
|
597
|
+
type ResizablePanelProps = Omit<React.ComponentPropsWithoutRef<"div">, "children" | "onResize"> & {
|
|
534
598
|
/** Which edge of its container the panel is anchored to. @default "left" */
|
|
535
599
|
side?: ResizablePanelSide;
|
|
536
600
|
/** Controlled width, in px. */
|
|
@@ -619,9 +683,9 @@ type ResizablePanelProps = Omit<react.ComponentPropsWithoutRef<"div">, "children
|
|
|
619
683
|
* observe `animationName` changes on the SAME node that carries
|
|
620
684
|
* `data-state`/the keyframe animation above.
|
|
621
685
|
*/
|
|
622
|
-
panelElementRef?:
|
|
686
|
+
panelElementRef?: React.Ref<HTMLDivElement>;
|
|
623
687
|
className?: string;
|
|
624
|
-
children?:
|
|
688
|
+
children?: React.ReactNode;
|
|
625
689
|
};
|
|
626
690
|
/**
|
|
627
691
|
* An adjustable-panel primitive with two layout models (`floating`'s own doc
|
|
@@ -637,7 +701,7 @@ type ResizablePanelProps = Omit<react.ComponentPropsWithoutRef<"div">, "children
|
|
|
637
701
|
* lives in `useResizablePanel` (`@seed-design/react-resizable-panel`), this
|
|
638
702
|
* component owns the DOM + recipe classes on top of it.
|
|
639
703
|
*/
|
|
640
|
-
declare const ResizablePanel:
|
|
704
|
+
declare const ResizablePanel: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref">, "children" | "onResize"> & {
|
|
641
705
|
/** Which edge of its container the panel is anchored to. @default "left" */
|
|
642
706
|
side?: ResizablePanelSide;
|
|
643
707
|
/** Controlled width, in px. */
|
|
@@ -726,10 +790,10 @@ declare const ResizablePanel: react.ForwardRefExoticComponent<Omit<Omit<react.De
|
|
|
726
790
|
* observe `animationName` changes on the SAME node that carries
|
|
727
791
|
* `data-state`/the keyframe animation above.
|
|
728
792
|
*/
|
|
729
|
-
panelElementRef?:
|
|
793
|
+
panelElementRef?: React.Ref<HTMLDivElement>;
|
|
730
794
|
className?: string;
|
|
731
|
-
children?:
|
|
732
|
-
} &
|
|
795
|
+
children?: React.ReactNode;
|
|
796
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
733
797
|
|
|
734
798
|
/** One Highlights card -- label, value and an optional icon, laid out the way
|
|
735
799
|
* Attio's own peek panel lays its own out (your-moon/crisp#448, measured
|
|
@@ -738,8 +802,8 @@ declare const ResizablePanel: react.ForwardRefExoticComponent<Omit<Omit<react.De
|
|
|
738
802
|
type RecordPreviewHighlight = {
|
|
739
803
|
key: string;
|
|
740
804
|
label: string;
|
|
741
|
-
value:
|
|
742
|
-
icon?:
|
|
805
|
+
value: React.ReactNode;
|
|
806
|
+
icon?: React.ComponentType<{
|
|
743
807
|
size?: number;
|
|
744
808
|
}>;
|
|
745
809
|
};
|
|
@@ -752,7 +816,7 @@ type RecordPreviewSection = {
|
|
|
752
816
|
key: string;
|
|
753
817
|
label: string;
|
|
754
818
|
count: number;
|
|
755
|
-
content?:
|
|
819
|
+
content?: React.ReactNode;
|
|
756
820
|
};
|
|
757
821
|
/** One tab of the panel's own mini detail view (a "tabs" capability with no
|
|
758
822
|
* your-moon/crisp equivalent -- crisp's own peek only ever shows Highlights
|
|
@@ -764,12 +828,12 @@ type RecordPreviewSection = {
|
|
|
764
828
|
* tab has been visited) -- see `Tabs.tsx`. */
|
|
765
829
|
type RecordPreviewTab = {
|
|
766
830
|
key: string;
|
|
767
|
-
label:
|
|
768
|
-
content:
|
|
831
|
+
label: React.ReactNode;
|
|
832
|
+
content: React.ReactNode;
|
|
769
833
|
/** Rendered right after `label` inside the tab trigger, e.g. an unread
|
|
770
834
|
* count -- purely presentational, this component attaches no meaning to
|
|
771
835
|
* it. */
|
|
772
|
-
badge?:
|
|
836
|
+
badge?: React.ReactNode;
|
|
773
837
|
};
|
|
774
838
|
/** The record this panel previews. Only `name` is read directly here --
|
|
775
839
|
* everything else the panel shows comes from `highlights`/`activity`/
|
|
@@ -781,7 +845,7 @@ type RecordPreviewRecord = {
|
|
|
781
845
|
name?: string;
|
|
782
846
|
[key: string]: unknown;
|
|
783
847
|
};
|
|
784
|
-
type RecordPreviewProps = Omit<
|
|
848
|
+
type RecordPreviewProps = Omit<React.ComponentPropsWithoutRef<"div">, "children" | "title" | "onResize"> & {
|
|
785
849
|
/** Whether the panel is mounted/visible. */
|
|
786
850
|
open: boolean;
|
|
787
851
|
onClose: () => void;
|
|
@@ -802,7 +866,7 @@ type RecordPreviewProps = Omit<react.ComponentPropsWithoutRef<"div">, "children"
|
|
|
802
866
|
nextRecordLabel?: string;
|
|
803
867
|
/** "2 of 37 in All Companies" (your-moon/crisp#413) -- a single
|
|
804
868
|
* pre-formatted string; omit for no counter at all. */
|
|
805
|
-
counterLabel?:
|
|
869
|
+
counterLabel?: React.ReactNode;
|
|
806
870
|
/**
|
|
807
871
|
* Lets a person drag the panel wider or narrower from its own left edge --
|
|
808
872
|
* this port reuses `ResizablePanel`'s own handle (`side="right"`, whose
|
|
@@ -818,7 +882,7 @@ type RecordPreviewProps = Omit<react.ComponentPropsWithoutRef<"div">, "children"
|
|
|
818
882
|
minWidth?: number;
|
|
819
883
|
maxWidth?: number;
|
|
820
884
|
/** The panel's heading, and so its accessible name. Defaults to `record.name`. */
|
|
821
|
-
title?:
|
|
885
|
+
title?: React.ReactNode;
|
|
822
886
|
/** Avatar image URL beside the title. Omit for an initials tile built from
|
|
823
887
|
* `record.name`'s first character. */
|
|
824
888
|
avatar?: string;
|
|
@@ -827,13 +891,13 @@ type RecordPreviewProps = Omit<react.ComponentPropsWithoutRef<"div">, "children"
|
|
|
827
891
|
record: RecordPreviewRecord | null;
|
|
828
892
|
/** Heading above the highlight cards (default "Highlights"). Omit the
|
|
829
893
|
* whole section by omitting `highlights`. */
|
|
830
|
-
highlightsLabel?:
|
|
894
|
+
highlightsLabel?: React.ReactNode;
|
|
831
895
|
highlights?: RecordPreviewHighlight[];
|
|
832
896
|
/** Heading above the activity feed (default "Activity"). */
|
|
833
|
-
activityLabel?:
|
|
834
|
-
viewAllActivityLabel?:
|
|
897
|
+
activityLabel?: React.ReactNode;
|
|
898
|
+
viewAllActivityLabel?: React.ReactNode;
|
|
835
899
|
onViewAllActivity?: () => void;
|
|
836
|
-
activity?:
|
|
900
|
+
activity?: React.ReactNode;
|
|
837
901
|
/** Collapsed sections below Activity (your-moon/crisp#413). Omit for no
|
|
838
902
|
* sections at all. */
|
|
839
903
|
sections?: RecordPreviewSection[];
|
|
@@ -859,9 +923,9 @@ type RecordPreviewProps = Omit<react.ComponentPropsWithoutRef<"div">, "children"
|
|
|
859
923
|
onTabChange?: (key: string) => void;
|
|
860
924
|
/** Label for the synthesized overview tab -- see `tabs`'s own doc
|
|
861
925
|
* comment. @default "Overview" */
|
|
862
|
-
overviewTabLabel?:
|
|
926
|
+
overviewTabLabel?: React.ReactNode;
|
|
863
927
|
/** Rendered below the panel's content, e.g. an Edit button. */
|
|
864
|
-
footer?:
|
|
928
|
+
footer?: React.ReactNode;
|
|
865
929
|
/**
|
|
866
930
|
* An optional dimming backdrop behind the panel -- OFF by default (this
|
|
867
931
|
* is a peek, not a modal: Attio's own peek never dims the table it
|
|
@@ -917,5 +981,5 @@ declare namespace RecordPreview {
|
|
|
917
981
|
var displayName: string;
|
|
918
982
|
}
|
|
919
983
|
|
|
920
|
-
export { DataTable, DataTableViewsControl, RecordPreview, ResizablePanel };
|
|
921
|
-
export type { DataTableColumn, DataTableColumnKind, DataTableProps, DataTableView, DataTableViewState, DataTableViewsControlProps, RecordPreviewHighlight, RecordPreviewProps, RecordPreviewRecord, RecordPreviewSection, RecordPreviewTab, ResizablePanelHandleVariant, ResizablePanelProps, ResizablePanelSide, ToolbarFilter, ToolbarFilterOp, ToolbarSort, ToolbarSortDirection };
|
|
984
|
+
export { DataTable, DataTableBulkBar, DataTableViewsControl, RecordPreview, ResizablePanel };
|
|
985
|
+
export type { DataTableBulkBarProps, DataTableCellContextMenuContext, DataTableColumn, DataTableColumnKind, DataTableProps, DataTableView, DataTableViewState, DataTableViewsControlProps, RecordPreviewHighlight, RecordPreviewProps, RecordPreviewRecord, RecordPreviewSection, RecordPreviewTab, ResizablePanelHandleVariant, ResizablePanelProps, ResizablePanelSide, ToolbarFilter, ToolbarFilterOp, ToolbarSort, ToolbarSortDirection };
|