@lensui/lens-table 0.1.64 → 0.1.66

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/index.css CHANGED
@@ -2128,7 +2128,9 @@
2128
2128
  }
2129
2129
  .rvg-choice-content {
2130
2130
  min-width: var(--reference-width);
2131
+ max-height: 240px;
2131
2132
  padding: 5px;
2133
+ overflow-y: auto;
2132
2134
  transform-origin: var(--transform-origin);
2133
2135
  border-radius: 4px;
2134
2136
  }
@@ -2650,3 +2652,152 @@
2650
2652
  margin: 0;
2651
2653
  -webkit-appearance: none;
2652
2654
  }
2655
+ .rvg-searchable-choice-editor {
2656
+ display: flex;
2657
+ padding-right: 24px;
2658
+ align-items: center;
2659
+ }
2660
+ .rvg-searchable-choice-editor > input {
2661
+ min-width: 0;
2662
+ width: 100%;
2663
+ height: 100%;
2664
+ padding: 0 4px;
2665
+ border: 0;
2666
+ outline: 0;
2667
+ background: transparent;
2668
+ color: var(--rvg-color-text);
2669
+ font:
2670
+ var(--rvg-font-size-body) Inter,
2671
+ ui-sans-serif,
2672
+ system-ui,
2673
+ sans-serif;
2674
+ box-sizing: border-box;
2675
+ }
2676
+ .rvg-searchable-choice-editor > input.is-pristine {
2677
+ color: var(--rvg-color-subtle);
2678
+ }
2679
+ .rvg-searchable-choice-indicator {
2680
+ position: absolute;
2681
+ top: 50%;
2682
+ right: 4px;
2683
+ display: grid;
2684
+ width: 16px;
2685
+ height: 16px;
2686
+ place-items: center;
2687
+ border-radius: 3px;
2688
+ background: var(--rvg-color-hover-muted);
2689
+ transform: translateY(-50%);
2690
+ }
2691
+ .rvg-searchable-choice-content {
2692
+ z-index: 1000;
2693
+ }
2694
+ .rvg-searchable-choice-content .rvg-choice-item {
2695
+ width: 100%;
2696
+ border: 0;
2697
+ background: transparent;
2698
+ text-align: left;
2699
+ }
2700
+ .rvg-searchable-choice-content .rvg-choice-item:is(:hover, .is-active) {
2701
+ background: var(--rvg-color-hover);
2702
+ }
2703
+ .rvg-searchable-choice-content .rvg-choice-item.is-selected {
2704
+ background: var(--rvg-color-primary-soft);
2705
+ color: var(--rvg-color-primary);
2706
+ font-weight: 600;
2707
+ }
2708
+ .rvg-textarea-editor {
2709
+ padding-right: 24px;
2710
+ }
2711
+ .rvg-textarea-trigger {
2712
+ position: absolute;
2713
+ top: 50%;
2714
+ right: 4px;
2715
+ display: grid;
2716
+ width: 16px;
2717
+ height: 16px;
2718
+ padding: 0;
2719
+ place-items: center;
2720
+ border: 0;
2721
+ border-radius: 3px;
2722
+ background: var(--rvg-color-hover-muted);
2723
+ color: #3c4043;
2724
+ cursor: pointer;
2725
+ transform: translateY(-50%);
2726
+ }
2727
+ .rvg-multiline-icon {
2728
+ width: 13px;
2729
+ height: 13px;
2730
+ fill: currentColor;
2731
+ }
2732
+ .rvg-textarea-backdrop {
2733
+ position: fixed;
2734
+ z-index: 1200;
2735
+ inset: 0;
2736
+ display: grid;
2737
+ padding: 32px;
2738
+ place-items: center;
2739
+ background: rgb(0 0 0 / 24%);
2740
+ }
2741
+ .rvg-textarea-dialog {
2742
+ display: grid;
2743
+ width: min(720px, calc(100vw - 64px));
2744
+ max-height: calc(100vh - 64px);
2745
+ grid-template-rows: 52px minmax(220px, 1fr) 64px;
2746
+ overflow: hidden;
2747
+ border: 1px solid var(--rvg-color-border);
2748
+ border-radius: 12px;
2749
+ background: var(--rvg-color-bg);
2750
+ box-shadow: 0 18px 54px rgb(0 0 0 / 28%);
2751
+ }
2752
+ .rvg-textarea-dialog > header {
2753
+ display: flex;
2754
+ padding: 0 20px;
2755
+ align-items: center;
2756
+ border-bottom: 1px solid var(--rvg-color-grid);
2757
+ color: var(--rvg-color-text);
2758
+ font:
2759
+ 600 16px Inter,
2760
+ ui-sans-serif,
2761
+ system-ui,
2762
+ sans-serif;
2763
+ }
2764
+ .rvg-textarea-dialog > textarea {
2765
+ min-height: 220px;
2766
+ margin: 20px;
2767
+ padding: 10px;
2768
+ resize: none;
2769
+ border: 1px solid var(--rvg-color-border);
2770
+ outline: none;
2771
+ background: var(--rvg-color-bg);
2772
+ color: var(--rvg-color-text);
2773
+ font:
2774
+ 14px/1.5 Inter,
2775
+ ui-sans-serif,
2776
+ system-ui,
2777
+ sans-serif;
2778
+ }
2779
+ .rvg-textarea-dialog > textarea:focus {
2780
+ border-color: var(--rvg-color-primary);
2781
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--rvg-color-primary) 18%, transparent);
2782
+ }
2783
+ .rvg-textarea-dialog > footer {
2784
+ display: flex;
2785
+ padding: 12px 20px;
2786
+ align-items: center;
2787
+ justify-content: flex-end;
2788
+ border-top: 1px solid var(--rvg-color-grid);
2789
+ }
2790
+ .rvg-textarea-dialog > footer button {
2791
+ min-width: 88px;
2792
+ height: 36px;
2793
+ border: 0;
2794
+ border-radius: 6px;
2795
+ background: var(--rvg-color-primary);
2796
+ color: #fff;
2797
+ font:
2798
+ 14px Inter,
2799
+ ui-sans-serif,
2800
+ system-ui,
2801
+ sans-serif;
2802
+ cursor: pointer;
2803
+ }
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { ReactNode, MouseEvent, CSSProperties, RefAttributes, ReactElement } from 'react';
1
+ import { ReactNode, MouseEvent, CSSProperties, RefAttributes } from 'react';
2
2
 
3
3
  type GridKey = string | number;
4
4
  type SelectionMode = 'single' | 'multiple';
@@ -193,15 +193,29 @@ interface GridColumn<Row> {
193
193
  align?: 'left' | 'center' | 'right';
194
194
  /** Enables double-click / Enter editing when an editor or fallback input exists. */
195
195
  editable?: boolean | ((value: unknown, row: Row, rowIndex: number) => boolean);
196
- /** Built-in editor configuration for text, selectable, date, time, and range cells. */
196
+ /** Hide the painted active-cell fill and border while preserving selection semantics. */
197
+ suppressSelectionStyle?: boolean;
198
+ /** Built-in editor configuration for text, numeric, selectable, multiline, date, time, and range cells. */
197
199
  editor?: {
198
200
  type: 'text';
201
+ } | {
202
+ type: 'number';
203
+ min?: number;
204
+ max?: number;
205
+ integer?: boolean;
199
206
  } | {
200
207
  type: 'select';
201
208
  options: Array<{
202
209
  label: string;
203
210
  value: string;
204
211
  }>;
212
+ searchable?: boolean;
213
+ allowCustomValue?: boolean;
214
+ maxDropdownHeight?: number;
215
+ } | {
216
+ type: 'textarea';
217
+ title?: string;
218
+ maxLength?: number;
205
219
  } | {
206
220
  type: 'date' | 'time' | 'date-time' | 'year' | 'month' | 'date-range' | 'time-range' | 'date-time-range';
207
221
  format?: string;
@@ -407,6 +421,8 @@ interface TableProps<Row extends object> {
407
421
  }) => void;
408
422
  onColumnResize?: (columnKey: string, width: number) => void;
409
423
  rowDraggable?: boolean;
424
+ /** Order of the generated row utility columns. Defaults to drag, selection, then row number. */
425
+ utilityColumnOrder?: Array<'drag' | 'selection' | 'rowNumber'>;
410
426
  onRowsReorder?: (rows: Row[], detail: {
411
427
  sourceIndex: number;
412
428
  targetIndex: number;
@@ -441,7 +457,12 @@ interface ViewportRange {
441
457
  columnEnd: number;
442
458
  }
443
459
 
444
- declare const Table: <Row extends object>(props: TableProps<Row> & RefAttributes<TableRef<Row>>) => ReactElement;
460
+ interface CompatibleReactElement {
461
+ type: any;
462
+ props: any;
463
+ key: string | null;
464
+ }
465
+ declare const Table: <Row extends object>(props: TableProps<Row> & RefAttributes<TableRef<Row>>) => CompatibleReactElement;
445
466
 
446
467
  type LayoutColumn<Row> = GridColumn<Row> & {
447
468
  rowSelection?: boolean;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ReactNode, MouseEvent, CSSProperties, RefAttributes, ReactElement } from 'react';
1
+ import { ReactNode, MouseEvent, CSSProperties, RefAttributes } from 'react';
2
2
 
3
3
  type GridKey = string | number;
4
4
  type SelectionMode = 'single' | 'multiple';
@@ -193,15 +193,29 @@ interface GridColumn<Row> {
193
193
  align?: 'left' | 'center' | 'right';
194
194
  /** Enables double-click / Enter editing when an editor or fallback input exists. */
195
195
  editable?: boolean | ((value: unknown, row: Row, rowIndex: number) => boolean);
196
- /** Built-in editor configuration for text, selectable, date, time, and range cells. */
196
+ /** Hide the painted active-cell fill and border while preserving selection semantics. */
197
+ suppressSelectionStyle?: boolean;
198
+ /** Built-in editor configuration for text, numeric, selectable, multiline, date, time, and range cells. */
197
199
  editor?: {
198
200
  type: 'text';
201
+ } | {
202
+ type: 'number';
203
+ min?: number;
204
+ max?: number;
205
+ integer?: boolean;
199
206
  } | {
200
207
  type: 'select';
201
208
  options: Array<{
202
209
  label: string;
203
210
  value: string;
204
211
  }>;
212
+ searchable?: boolean;
213
+ allowCustomValue?: boolean;
214
+ maxDropdownHeight?: number;
215
+ } | {
216
+ type: 'textarea';
217
+ title?: string;
218
+ maxLength?: number;
205
219
  } | {
206
220
  type: 'date' | 'time' | 'date-time' | 'year' | 'month' | 'date-range' | 'time-range' | 'date-time-range';
207
221
  format?: string;
@@ -407,6 +421,8 @@ interface TableProps<Row extends object> {
407
421
  }) => void;
408
422
  onColumnResize?: (columnKey: string, width: number) => void;
409
423
  rowDraggable?: boolean;
424
+ /** Order of the generated row utility columns. Defaults to drag, selection, then row number. */
425
+ utilityColumnOrder?: Array<'drag' | 'selection' | 'rowNumber'>;
410
426
  onRowsReorder?: (rows: Row[], detail: {
411
427
  sourceIndex: number;
412
428
  targetIndex: number;
@@ -441,7 +457,12 @@ interface ViewportRange {
441
457
  columnEnd: number;
442
458
  }
443
459
 
444
- declare const Table: <Row extends object>(props: TableProps<Row> & RefAttributes<TableRef<Row>>) => ReactElement;
460
+ interface CompatibleReactElement {
461
+ type: any;
462
+ props: any;
463
+ key: string | null;
464
+ }
465
+ declare const Table: <Row extends object>(props: TableProps<Row> & RefAttributes<TableRef<Row>>) => CompatibleReactElement;
445
466
 
446
467
  type LayoutColumn<Row> = GridColumn<Row> & {
447
468
  rowSelection?: boolean;