@xcelsior/ui-spreadsheets 1.0.11 → 1.0.13

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.d.mts CHANGED
@@ -297,6 +297,8 @@ interface SpreadsheetProps<T = any> {
297
297
  cellComments?: CellComment[];
298
298
  /** Custom row actions to display in the index column */
299
299
  rowActions?: RowAction<T>[];
300
+ /** Custom menu items to display in the toolbar's "More" dropdown menu */
301
+ toolbarMenuItems?: ToolbarMenuItem[];
300
302
  /**
301
303
  * Enable server-side mode for filtering, sorting, and pagination.
302
304
  * When enabled, the component will NOT perform client-side filtering, sorting, or pagination.
@@ -450,6 +452,21 @@ interface SpreadsheetFilterDropdownProps {
450
452
  /** Custom className */
451
453
  className?: string;
452
454
  }
455
+ /**
456
+ * A menu item that can be added to the toolbar's "More" dropdown menu
457
+ */
458
+ interface ToolbarMenuItem {
459
+ /** Unique identifier for the menu item */
460
+ id: string;
461
+ /** Display label for the menu item */
462
+ label: string;
463
+ /** Icon component to display (e.g., from react-icons) */
464
+ icon?: React$1.ReactNode;
465
+ /** Callback when menu item is clicked */
466
+ onClick: () => void;
467
+ /** Whether the menu item is disabled */
468
+ disabled?: boolean;
469
+ }
453
470
  /**
454
471
  * Props for SpreadsheetToolbar component
455
472
  */
@@ -492,8 +509,8 @@ interface SpreadsheetToolbarProps {
492
509
  onClearSelection: () => void;
493
510
  /** Callback for manual save */
494
511
  onSave?: () => void;
495
- /** Callback for export */
496
- onExport?: () => void;
512
+ /** Custom menu items to display in the "More" dropdown menu */
513
+ menuItems?: ToolbarMenuItem[];
497
514
  /** Callback for settings */
498
515
  onSettings?: () => void;
499
516
  /** Callback for keyboard shortcuts */
@@ -556,7 +573,7 @@ interface SpreadsheetColumnGroupHeaderProps {
556
573
  * />
557
574
  * ```
558
575
  */
559
- declare function Spreadsheet<T extends Record<string, any>>({ data, columns, columnGroups, getRowId, onCellEdit, onSelectionChange, onSortChange, onFilterChange, onRowClick, onRowDoubleClick, onRowClone, onRowDelete, onAddCellComment, onRowHighlight, showToolbar, showPagination, showRowIndex, enableRowSelection, enableCellEditing, enableComments, enableHighlighting, enableUndoRedo, defaultPageSize, pageSizeOptions, defaultZoom, autoSave, compactMode, isLoading, className, emptyMessage, rowHighlights: externalRowHighlights, cellComments: externalCellComments, rowActions, serverSide, totalItems, currentPage: controlledCurrentPage, pageSize: controlledPageSize, onPageChange, sortConfig: controlledSortConfig, filters: controlledFilters, }: SpreadsheetProps<T>): react_jsx_runtime.JSX.Element;
576
+ declare function Spreadsheet<T extends Record<string, any>>({ data, columns, columnGroups, getRowId, onCellEdit, onSelectionChange, onSortChange, onFilterChange, onRowClick, onRowDoubleClick, onRowClone, onRowDelete, onAddCellComment, onRowHighlight, showToolbar, showPagination, showRowIndex, enableRowSelection, enableCellEditing, enableComments, enableHighlighting, enableUndoRedo, defaultPageSize, pageSizeOptions, defaultZoom, autoSave, compactMode, isLoading, className, emptyMessage, rowHighlights: externalRowHighlights, cellComments: externalCellComments, rowActions, toolbarMenuItems, serverSide, totalItems, currentPage: controlledCurrentPage, pageSize: controlledPageSize, onPageChange, sortConfig: controlledSortConfig, filters: controlledFilters, }: SpreadsheetProps<T>): react_jsx_runtime.JSX.Element;
560
577
  declare namespace Spreadsheet {
561
578
  var displayName: string;
562
579
  }
@@ -672,4 +689,4 @@ interface SpreadsheetSettingsModalProps {
672
689
  */
673
690
  declare const SpreadsheetSettingsModal: React.FC<SpreadsheetSettingsModalProps>;
674
691
 
675
- export { type CellComment, type CellHighlight, type CellPosition, type PaginationState, type RowAction, type SelectionState, Spreadsheet, MemoizedSpreadsheetCell as SpreadsheetCell, type SpreadsheetCellProps, type SpreadsheetColumn, type SpreadsheetColumnFilter, type SpreadsheetColumnGroup, type SpreadsheetColumnGroupHeaderProps, SpreadsheetFilterDropdown, type SpreadsheetFilterDropdownProps, SpreadsheetHeader, type SpreadsheetHeaderProps, type SpreadsheetProps, type SpreadsheetSettings, SpreadsheetSettingsModal, type SpreadsheetSortConfig, type SpreadsheetState, SpreadsheetToolbar, type SpreadsheetToolbarProps };
692
+ export { type CellComment, type CellHighlight, type CellPosition, type PaginationState, type RowAction, type SelectionState, Spreadsheet, MemoizedSpreadsheetCell as SpreadsheetCell, type SpreadsheetCellProps, type SpreadsheetColumn, type SpreadsheetColumnFilter, type SpreadsheetColumnGroup, type SpreadsheetColumnGroupHeaderProps, SpreadsheetFilterDropdown, type SpreadsheetFilterDropdownProps, SpreadsheetHeader, type SpreadsheetHeaderProps, type SpreadsheetProps, type SpreadsheetSettings, SpreadsheetSettingsModal, type SpreadsheetSortConfig, type SpreadsheetState, SpreadsheetToolbar, type SpreadsheetToolbarProps, type ToolbarMenuItem };
package/dist/index.d.ts CHANGED
@@ -297,6 +297,8 @@ interface SpreadsheetProps<T = any> {
297
297
  cellComments?: CellComment[];
298
298
  /** Custom row actions to display in the index column */
299
299
  rowActions?: RowAction<T>[];
300
+ /** Custom menu items to display in the toolbar's "More" dropdown menu */
301
+ toolbarMenuItems?: ToolbarMenuItem[];
300
302
  /**
301
303
  * Enable server-side mode for filtering, sorting, and pagination.
302
304
  * When enabled, the component will NOT perform client-side filtering, sorting, or pagination.
@@ -450,6 +452,21 @@ interface SpreadsheetFilterDropdownProps {
450
452
  /** Custom className */
451
453
  className?: string;
452
454
  }
455
+ /**
456
+ * A menu item that can be added to the toolbar's "More" dropdown menu
457
+ */
458
+ interface ToolbarMenuItem {
459
+ /** Unique identifier for the menu item */
460
+ id: string;
461
+ /** Display label for the menu item */
462
+ label: string;
463
+ /** Icon component to display (e.g., from react-icons) */
464
+ icon?: React$1.ReactNode;
465
+ /** Callback when menu item is clicked */
466
+ onClick: () => void;
467
+ /** Whether the menu item is disabled */
468
+ disabled?: boolean;
469
+ }
453
470
  /**
454
471
  * Props for SpreadsheetToolbar component
455
472
  */
@@ -492,8 +509,8 @@ interface SpreadsheetToolbarProps {
492
509
  onClearSelection: () => void;
493
510
  /** Callback for manual save */
494
511
  onSave?: () => void;
495
- /** Callback for export */
496
- onExport?: () => void;
512
+ /** Custom menu items to display in the "More" dropdown menu */
513
+ menuItems?: ToolbarMenuItem[];
497
514
  /** Callback for settings */
498
515
  onSettings?: () => void;
499
516
  /** Callback for keyboard shortcuts */
@@ -556,7 +573,7 @@ interface SpreadsheetColumnGroupHeaderProps {
556
573
  * />
557
574
  * ```
558
575
  */
559
- declare function Spreadsheet<T extends Record<string, any>>({ data, columns, columnGroups, getRowId, onCellEdit, onSelectionChange, onSortChange, onFilterChange, onRowClick, onRowDoubleClick, onRowClone, onRowDelete, onAddCellComment, onRowHighlight, showToolbar, showPagination, showRowIndex, enableRowSelection, enableCellEditing, enableComments, enableHighlighting, enableUndoRedo, defaultPageSize, pageSizeOptions, defaultZoom, autoSave, compactMode, isLoading, className, emptyMessage, rowHighlights: externalRowHighlights, cellComments: externalCellComments, rowActions, serverSide, totalItems, currentPage: controlledCurrentPage, pageSize: controlledPageSize, onPageChange, sortConfig: controlledSortConfig, filters: controlledFilters, }: SpreadsheetProps<T>): react_jsx_runtime.JSX.Element;
576
+ declare function Spreadsheet<T extends Record<string, any>>({ data, columns, columnGroups, getRowId, onCellEdit, onSelectionChange, onSortChange, onFilterChange, onRowClick, onRowDoubleClick, onRowClone, onRowDelete, onAddCellComment, onRowHighlight, showToolbar, showPagination, showRowIndex, enableRowSelection, enableCellEditing, enableComments, enableHighlighting, enableUndoRedo, defaultPageSize, pageSizeOptions, defaultZoom, autoSave, compactMode, isLoading, className, emptyMessage, rowHighlights: externalRowHighlights, cellComments: externalCellComments, rowActions, toolbarMenuItems, serverSide, totalItems, currentPage: controlledCurrentPage, pageSize: controlledPageSize, onPageChange, sortConfig: controlledSortConfig, filters: controlledFilters, }: SpreadsheetProps<T>): react_jsx_runtime.JSX.Element;
560
577
  declare namespace Spreadsheet {
561
578
  var displayName: string;
562
579
  }
@@ -672,4 +689,4 @@ interface SpreadsheetSettingsModalProps {
672
689
  */
673
690
  declare const SpreadsheetSettingsModal: React.FC<SpreadsheetSettingsModalProps>;
674
691
 
675
- export { type CellComment, type CellHighlight, type CellPosition, type PaginationState, type RowAction, type SelectionState, Spreadsheet, MemoizedSpreadsheetCell as SpreadsheetCell, type SpreadsheetCellProps, type SpreadsheetColumn, type SpreadsheetColumnFilter, type SpreadsheetColumnGroup, type SpreadsheetColumnGroupHeaderProps, SpreadsheetFilterDropdown, type SpreadsheetFilterDropdownProps, SpreadsheetHeader, type SpreadsheetHeaderProps, type SpreadsheetProps, type SpreadsheetSettings, SpreadsheetSettingsModal, type SpreadsheetSortConfig, type SpreadsheetState, SpreadsheetToolbar, type SpreadsheetToolbarProps };
692
+ export { type CellComment, type CellHighlight, type CellPosition, type PaginationState, type RowAction, type SelectionState, Spreadsheet, MemoizedSpreadsheetCell as SpreadsheetCell, type SpreadsheetCellProps, type SpreadsheetColumn, type SpreadsheetColumnFilter, type SpreadsheetColumnGroup, type SpreadsheetColumnGroupHeaderProps, SpreadsheetFilterDropdown, type SpreadsheetFilterDropdownProps, SpreadsheetHeader, type SpreadsheetHeaderProps, type SpreadsheetProps, type SpreadsheetSettings, SpreadsheetSettingsModal, type SpreadsheetSortConfig, type SpreadsheetState, SpreadsheetToolbar, type SpreadsheetToolbarProps, type ToolbarMenuItem };
package/dist/index.js CHANGED
@@ -134,9 +134,6 @@ function HiCog(props) {
134
134
  function HiDotsVertical(props) {
135
135
  return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 20 20", "fill": "currentColor", "aria-hidden": "true" }, "child": [{ "tag": "path", "attr": { "d": "M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z" } }] })(props);
136
136
  }
137
- function HiDownload(props) {
138
- return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 20 20", "fill": "currentColor", "aria-hidden": "true" }, "child": [{ "tag": "path", "attr": { "fillRule": "evenodd", "d": "M3 17a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm3.293-7.707a1 1 0 011.414 0L9 10.586V3a1 1 0 112 0v7.586l1.293-1.293a1 1 0 111.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z", "clipRule": "evenodd" } }] })(props);
139
- }
140
137
  function HiDuplicate(props) {
141
138
  return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 20 20", "fill": "currentColor", "aria-hidden": "true" }, "child": [{ "tag": "path", "attr": { "d": "M7 9a2 2 0 012-2h6a2 2 0 012 2v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9z" } }, { "tag": "path", "attr": { "d": "M5 3a2 2 0 00-2 2v6a2 2 0 002 2V5h8a2 2 0 00-2-2H5z" } }] })(props);
142
139
  }
@@ -375,7 +372,7 @@ var SpreadsheetCell = ({
375
372
  {
376
373
  className: cn(
377
374
  "flex-1 truncate",
378
- isEditable && "cursor-text hover:bg-gray-50 px-0.5 rounded min-h-[18px] flex items-center bg-blue-50"
375
+ isEditable && "cursor-text hover:bg-gray-50 px-0.5 rounded min-h-[18px] flex items-center bg-yellow-50/50"
379
376
  ),
380
377
  title: String(value ?? ""),
381
378
  children: renderContent()
@@ -806,7 +803,7 @@ var SpreadsheetToolbar = ({
806
803
  onRedo,
807
804
  onClearSelection,
808
805
  onSave,
809
- onExport,
806
+ menuItems,
810
807
  onSettings,
811
808
  onShowShortcuts,
812
809
  hasActiveFilters,
@@ -1062,22 +1059,27 @@ var SpreadsheetToolbar = ({
1062
1059
  ]
1063
1060
  }
1064
1061
  ),
1065
- (onSettings || onShowShortcuts) && onExport && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "border-t border-gray-100 my-1" }),
1066
- onExport && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1062
+ menuItems && menuItems.length > 0 && (onSettings || onShowShortcuts) && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "border-t border-gray-100 my-1" }),
1063
+ menuItems?.map((item) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1067
1064
  "button",
1068
1065
  {
1069
1066
  type: "button",
1067
+ disabled: item.disabled,
1070
1068
  onClick: () => {
1071
- onExport();
1069
+ item.onClick();
1072
1070
  setShowMoreMenu(false);
1073
1071
  },
1074
- className: "w-full px-3 py-2 text-left hover:bg-gray-50 flex items-center gap-2 text-xs transition-colors",
1072
+ className: cn(
1073
+ "w-full px-3 py-2 text-left hover:bg-gray-50 flex items-center gap-2 text-xs transition-colors",
1074
+ item.disabled && "opacity-50 cursor-not-allowed"
1075
+ ),
1075
1076
  children: [
1076
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(HiDownload, { className: "h-3.5 w-3.5 text-gray-500" }),
1077
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-gray-700", children: "Export" })
1077
+ item.icon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "h-3.5 w-3.5 text-gray-500 flex items-center justify-center", children: item.icon }),
1078
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-gray-700", children: item.label })
1078
1079
  ]
1079
- }
1080
- )
1080
+ },
1081
+ item.id
1082
+ ))
1081
1083
  ] })
1082
1084
  ] })
1083
1085
  ] })
@@ -2900,6 +2902,7 @@ function Spreadsheet({
2900
2902
  rowHighlights: externalRowHighlights,
2901
2903
  cellComments: externalCellComments,
2902
2904
  rowActions,
2905
+ toolbarMenuItems,
2903
2906
  // Server-side mode props
2904
2907
  serverSide = false,
2905
2908
  totalItems,
@@ -3304,7 +3307,7 @@ function Spreadsheet({
3304
3307
  onSave: handleSave,
3305
3308
  onSettings: () => setShowSettingsModal(true),
3306
3309
  onShowShortcuts: () => setShowKeyboardShortcuts(true),
3307
- onExport: () => console.log("Export clicked")
3310
+ menuItems: toolbarMenuItems
3308
3311
  }
3309
3312
  ),
3310
3313
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { ref: tableRef, className: "flex-1 overflow-auto border border-gray-200 rounded", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(