@pdg/react-table 1.0.18 → 1.0.20

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.
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { TableContextValue } from './TableContext.types';
3
+ declare const TableContext: import("react").Context<TableContextValue>;
4
+ export default TableContext;
@@ -0,0 +1,6 @@
1
+ export interface TableContextValue {
2
+ menuOpen: boolean;
3
+ openMenuId?: string;
4
+ setMenuOpen(menuOpen: boolean, openMenuId?: string): void;
5
+ }
6
+ export declare const TableContextDefaultValue: TableContextValue;
@@ -0,0 +1,5 @@
1
+ import TableContext from './TableContext';
2
+ export default TableContext;
3
+ export { TableContext };
4
+ export * from './TableContext.types';
5
+ export { default as useFormState } from './useTableState';
@@ -0,0 +1,2 @@
1
+ import { TableContextValue } from './TableContext.types';
2
+ export default function useTableState(): TableContextValue;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { TableContextProviderProps as Props } from './TableContextProvider.types';
3
+ declare const TableContextProvider: React.FC<Props>;
4
+ export default TableContextProvider;
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+ import { TableContextValue } from '../TableContext';
3
+ export interface TableContextProviderProps {
4
+ value: TableContextValue;
5
+ children: ReactNode;
6
+ }
@@ -0,0 +1,4 @@
1
+ import TableContextProvider from './TableContextProvider';
2
+ export default TableContextProvider;
3
+ export { TableContextProvider };
4
+ export * from './TableContextProvider.types';
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { TableMenuButtonProps as Props } from './TableMenuButton.types';
3
+ declare const TableMenuButton: React.ForwardRefExoticComponent<Pick<Props, "children" | "className" | "style" | "classes" | "form" | "slot" | "title" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "nonce" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "action" | "centerRipple" | "disabled" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "sx" | "TouchRippleProps" | "touchRippleRef" | "disableElevation" | "disableFocusRipple" | "endIcon" | "fullWidth" | "href" | "startIcon" | "variant" | "key" | "autoFocus" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "name" | "type" | "value" | "icon" | "placement" | "menuList"> & React.RefAttributes<HTMLButtonElement>>;
4
+ export default TableMenuButton;
@@ -0,0 +1,11 @@
1
+ import { ButtonProps } from '@mui/material';
2
+ import { ReactElement } from 'react';
3
+ import { PopperPlacementType } from '@mui/base/Popper/Popper.types';
4
+ export interface TableMenuButtonProps extends Omit<ButtonProps, 'size' | 'startIcon' | 'endIcon' | 'onClick'> {
5
+ icon?: string;
6
+ startIcon?: string;
7
+ endIcon?: string;
8
+ placement?: PopperPlacementType;
9
+ menuList: ReactElement;
10
+ }
11
+ export declare const TableMenuButtonDefaultProps: Pick<TableMenuButtonProps, 'variant' | 'color' | 'placement'>;
@@ -0,0 +1,4 @@
1
+ import TableMenuButton from './TableMenuButton';
2
+ export default TableMenuButton;
3
+ export { TableMenuButton };
4
+ export * from './TableMenuButton.types';
package/dist/index.d.ts CHANGED
@@ -2,4 +2,5 @@ export * from './@types';
2
2
  export * from './Table';
3
3
  export * from './SearchTable';
4
4
  export * from './TableButton';
5
+ export * from './TableMenuButton';
5
6
  export * from './TableIcon';
package/dist/index.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- import*as React from'react';import React__default,{useRef,useEffect,cloneElement,useState,isValidElement,createRef,PureComponent,useLayoutEffect,useMemo,useCallback}from'react';import {styled,TableRow,lighten,TableCell,Box,Tooltip,Stack,Pagination,Paper,Table as Table$1,TableHead,TableBody,Icon,TableFooter,Grid,Button}from'@mui/material';import {findDOMNode}from'react-dom';import {useSortable,sortableKeyboardCoordinates,arrayMove,SortableContext,verticalListSortingStrategy}from'@dnd-kit/sortable';import dayjs from'dayjs';import {useSensors,useSensor,MouseSensor,TouchSensor,KeyboardSensor,DndContext,closestCenter}from'@dnd-kit/core';import {Search,SearchGroup,FormHidden}from'@pdg/react-form';/******************************************************************************
1
+ import*as React from'react';import React__default,{useRef,useEffect,cloneElement,useState,isValidElement,createRef,PureComponent,useLayoutEffect,createContext,useContext,useMemo,useCallback,useId}from'react';import {styled,TableRow,lighten,TableCell,Box,Tooltip,Stack,Pagination,Paper,Table as Table$1,TableHead,TableBody,Icon,TableFooter,Grid,Button,Popper,Grow,ClickAwayListener}from'@mui/material';import {findDOMNode}from'react-dom';import {useSortable,sortableKeyboardCoordinates,arrayMove,SortableContext,verticalListSortingStrategy}from'@dnd-kit/sortable';import dayjs from'dayjs';import {useSensors,useSensor,MouseSensor,TouchSensor,KeyboardSensor,DndContext,closestCenter}from'@dnd-kit/core';import {Search,SearchGroup,FormHidden}from'@pdg/react-form';/******************************************************************************
2
2
  Copyright (c) Microsoft Corporation.
3
3
 
4
4
  Permission to use, copy, modify, and/or distribute this software for any
@@ -8228,9 +8228,6 @@ function useResizeDetector(props) {
8228
8228
  };var StyledBodyRow$1 = styled(TableRow)(function (_a) {
8229
8229
  var theme = _a.theme;
8230
8230
  return ({
8231
- '&:last-child > .MuiTableCell-root': {
8232
- borderBottom: 0,
8233
- },
8234
8231
  '&.odd-color:nth-of-type(odd):not(:hover)': {
8235
8232
  backgroundColor: lighten(theme.palette.action.hover, 0.4),
8236
8233
  },
@@ -8339,11 +8336,31 @@ var equal = function (v1, v2) {
8339
8336
  default:
8340
8337
  return column.align || defaultAlign;
8341
8338
  }
8339
+ }var TableContextDefaultValue = {
8340
+ menuOpen: false,
8341
+ openMenuId: undefined,
8342
+ // eslint-disable-next-line
8343
+ setMenuOpen: function () { },
8344
+ };var TableContext = createContext(TableContextDefaultValue);function useTableState() {
8345
+ var value = useContext(TableContext);
8346
+ if (value === undefined) {
8347
+ throw new Error('useFormState should be used within TableContext.Provider');
8348
+ }
8349
+ return value;
8342
8350
  }var StyledTableCell = styled(TableCell)(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n &.ellipsis {\n position: relative;\n max-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n"], ["\n &.ellipsis {\n position: relative;\n max-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n"])));
8343
8351
  var TableCommonCell = function (_a) {
8352
+ // Use ---------------------------------------------------------------------------------------------------------------
8344
8353
  var children = _a.children, initClassName = _a.className, initStyle = _a.style, initSx = _a.sx, type = _a.type, column = _a.column, defaultAlign = _a.defaultAlign, initDefaultEllipsis = _a.defaultEllipsis, index = _a.index, item = _a.item, onClick = _a.onClick;
8354
+ var menuOpen = useTableState().menuOpen;
8355
+ // Memo --------------------------------------------------------------------------------------------------------------
8345
8356
  var align = useMemo(function () { return getTableColumnAlign(column, defaultAlign); }, [column, defaultAlign]);
8346
- var ellipsis = useMemo(function () { return type !== 'head' && (column.ellipsis != null ? column.ellipsis : !!initDefaultEllipsis); }, [type, column, initDefaultEllipsis]);
8357
+ var ellipsis = useMemo(function () {
8358
+ return type !== 'head' &&
8359
+ column.type !== 'img' &&
8360
+ column.type !== 'button' &&
8361
+ column.type !== 'buttons' &&
8362
+ (column.ellipsis != null ? column.ellipsis : !!initDefaultEllipsis);
8363
+ }, [type, column, initDefaultEllipsis]);
8347
8364
  var className = useMemo(function () {
8348
8365
  var _a, _b, _c, _d, _e, _f;
8349
8366
  var className;
@@ -8436,26 +8453,30 @@ var TableCommonCell = function (_a) {
8436
8453
  }, [column, index, initSx, item, type]);
8437
8454
  // Event Handler ---------------------------------------------------------------------------------------------------
8438
8455
  var handleClick = useCallback(function (e) {
8439
- e.stopPropagation();
8440
- if (type === 'body') {
8441
- if (item != null && index != null) {
8442
- if (column.onClick) {
8443
- column.onClick(item, index);
8444
- }
8445
- else {
8446
- if (onClick)
8447
- onClick(item, index);
8456
+ if (!menuOpen) {
8457
+ e.stopPropagation();
8458
+ if (type === 'body') {
8459
+ if (item != null && index != null) {
8460
+ if (column.onClick) {
8461
+ column.onClick(item, index);
8462
+ }
8463
+ else {
8464
+ if (onClick)
8465
+ onClick(item, index);
8466
+ }
8448
8467
  }
8449
8468
  }
8450
8469
  }
8451
- }, [type, column, onClick, item, index]);
8470
+ }, [menuOpen, type, item, index, column, onClick]);
8452
8471
  // Render ----------------------------------------------------------------------------------------------------------
8453
8472
  return (React__default.createElement(StyledTableCell, { align: align, className: classNames(className, 'TableCommonCell', ellipsis && 'ellipsis', column.type ? "column-type-".concat(column.type) : false), style: style, sx: sx, onClick: type === 'body' ? handleClick : undefined }, children));
8454
8473
  };
8455
8474
  var templateObject_1$1;var StyledButtonsBox = styled(Box)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n"], ["\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n"])));
8456
8475
  var TableBodyCell = function (_a) {
8457
- // Memo --------------------------------------------------------------------------------------------------------------
8476
+ // Use ---------------------------------------------------------------------------------------------------------------
8458
8477
  var item = _a.item, index = _a.index, column = _a.column, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, onClick = _a.onClick;
8478
+ var menuOpen = useTableState().menuOpen;
8479
+ // Memo --------------------------------------------------------------------------------------------------------------
8459
8480
  var buttonsBoxJustifyContent = useMemo(function () {
8460
8481
  switch (getTableColumnAlign(column, defaultAlign)) {
8461
8482
  case 'center':
@@ -8488,10 +8509,10 @@ var TableBodyCell = function (_a) {
8488
8509
  }
8489
8510
  break;
8490
8511
  case 'button':
8491
- data = (React__default.createElement(Box, { className: 'TableBoxyCell-button-box', onClick: function (e) { return e.stopPropagation(); } }, data));
8512
+ data = (React__default.createElement(Box, { className: 'TableBoxyCell-button-box', onClick: menuOpen ? undefined : function (e) { return e.stopPropagation(); } }, data));
8492
8513
  break;
8493
8514
  case 'buttons':
8494
- data = (React__default.createElement(StyledButtonsBox, { className: 'TableBodyCell-buttons-box', justifyContent: buttonsBoxJustifyContent, onClick: function (e) { return e.stopPropagation(); } }, data));
8515
+ data = (React__default.createElement(StyledButtonsBox, { className: 'TableBodyCell-buttons-box', justifyContent: buttonsBoxJustifyContent, onClick: menuOpen ? undefined : function (e) { return e.stopPropagation(); } }, data));
8495
8516
  break;
8496
8517
  }
8497
8518
  switch (column.type) {
@@ -8499,9 +8520,11 @@ var TableBodyCell = function (_a) {
8499
8520
  {
8500
8521
  var img = React__default.createElement("img", { src: data, style: { maxWidth: '100%', verticalAlign: 'middle' }, alt: '' });
8501
8522
  var placement = ((_a = column.tooltipProps) === null || _a === void 0 ? void 0 : _a.placement) ? (_b = column.tooltipProps) === null || _b === void 0 ? void 0 : _b.placement : 'left';
8502
- data = (React__default.createElement("a", { href: data, target: '_blank', onClick: function (e) {
8503
- e.stopPropagation();
8504
- } },
8523
+ data = (React__default.createElement("a", { href: data, target: '_blank', onClick: menuOpen
8524
+ ? undefined
8525
+ : function (e) {
8526
+ e.stopPropagation();
8527
+ } },
8505
8528
  React__default.createElement(Tooltip, __assign$1({ className: 'TableBodyCell-tooltip', title: React__default.createElement("div", { style: { paddingTop: 3, paddingBottom: 3 } }, img) }, column.tooltipProps, { placement: placement }), img)));
8506
8529
  }
8507
8530
  break;
@@ -8528,8 +8551,7 @@ var TableBodyCell = function (_a) {
8528
8551
  break;
8529
8552
  }
8530
8553
  setData(data);
8531
- // eslint-disable-next-line react-hooks/exhaustive-deps
8532
- }, [item, column]);
8554
+ }, [item, column, index, buttonsBoxJustifyContent, menuOpen]);
8533
8555
  // Event Handler ---------------------------------------------------------------------------------------------------
8534
8556
  var handleClick = useCallback(function (item, index) {
8535
8557
  if (column.onClick) {
@@ -8546,9 +8568,6 @@ var TableBodyCell = function (_a) {
8546
8568
  var templateObject_1;var StyledBodyRow = styled(TableRow)(function (_a) {
8547
8569
  var theme = _a.theme;
8548
8570
  return ({
8549
- '&:last-child > .MuiTableCell-root': {
8550
- borderBottom: 0,
8551
- },
8552
8571
  '&.odd-color:nth-of-type(odd):not(:hover)': {
8553
8572
  backgroundColor: lighten(theme.palette.action.hover, 0.4),
8554
8573
  },
@@ -8598,7 +8617,7 @@ TableBodyRow.defaultProps = TableBodyRowDefaultProps;var TableHeadCell = functio
8598
8617
  return (_c = column.footer) === null || _c === void 0 ? void 0 : _c.value;
8599
8618
  }
8600
8619
  }, [column]);
8601
- return (React__default.createElement(TableCommonCell, { type: 'head', className: 'TableFooterCell', column: column, defaultAlign: defaultAlign, style: { borderTop: '1px solid rgba(224, 224, 224, 1)' } }, data));
8620
+ return (React__default.createElement(TableCommonCell, { type: 'head', className: 'TableFooterCell', column: column, defaultAlign: defaultAlign }, data));
8602
8621
  };var TablePagination = function (_a) {
8603
8622
  var className = _a.className, style = _a.style, sx = _a.sx, paging = _a.paging, align = _a.align, onChange = _a.onChange;
8604
8623
  return (React__default.createElement(Stack, { alignItems: align },
@@ -8694,7 +8713,10 @@ TableBodyRow.defaultProps = TableBodyRowDefaultProps;var TableHeadCell = functio
8694
8713
  style.appendChild(document.createTextNode(css));
8695
8714
  }
8696
8715
  }var css_248z = "[data-simplebar]{position:relative;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:flex-start}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto!important;height:auto!important;z-index:0}.simplebar-offset{direction:inherit!important;box-sizing:inherit!important;resize:none!important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch}.simplebar-content-wrapper{direction:inherit;box-sizing:border-box!important;position:relative;display:block;height:100%;width:auto;max-width:100%;max-height:100%;scrollbar-width:none;-ms-overflow-style:none}.simplebar-content-wrapper::-webkit-scrollbar,.simplebar-hide-scrollbar::-webkit-scrollbar{width:0;height:0}.simplebar-content:after,.simplebar-content:before{content:' ';display:table}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none}.simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;height:100%;width:100%;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;flex-grow:inherit;flex-shrink:0;flex-basis:0}.simplebar-height-auto-observer{box-sizing:inherit;display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden}[data-simplebar].simplebar-dragging .simplebar-content{pointer-events:none;user-select:none;-webkit-user-select:none}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{position:absolute;left:0;right:0;min-height:10px}.simplebar-scrollbar:before{position:absolute;content:'';background:#000;border-radius:7px;left:2px;right:2px;opacity:0;transition:opacity .2s .5s linear}.simplebar-scrollbar.simplebar-visible:before{opacity:.5;transition-delay:0s;transition-duration:0s}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-scrollbar:before{top:2px;bottom:2px;left:2px;right:2px}.simplebar-track.simplebar-horizontal{left:0;height:11px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:0;bottom:0;min-height:0;min-width:10px;width:auto}[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical{right:auto;left:0}.simplebar-dummy-scrollbar-size{direction:rtl;position:fixed;opacity:0;visibility:hidden;height:500px;width:500px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:scrollbar!important}.simplebar-dummy-scrollbar-size>div{width:200%;height:200%;margin:10px 0}.simplebar-hide-scrollbar{position:fixed;left:0;visibility:hidden;overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none}\n";
8697
- styleInject(css_248z);function columnFilter(v) {
8716
+ styleInject(css_248z);var TableContextProvider = function (_a) {
8717
+ var children = _a.children, value = _a.value;
8718
+ return React__default.createElement(TableContext.Provider, { value: value }, children);
8719
+ };function columnFilter(v) {
8698
8720
  return v !== undefined && v !== null && v !== false;
8699
8721
  }
8700
8722
  var Table = React__default.forwardRef(function (_a, ref) {
@@ -8716,8 +8738,11 @@ var Table = React__default.forwardRef(function (_a, ref) {
8716
8738
  }), useSensor(KeyboardSensor, {
8717
8739
  coordinateGetter: sortableKeyboardCoordinates,
8718
8740
  }));
8741
+ // State -------------------------------------------------------------------------------------------------------------
8742
+ var _b = useState(false), menuOpen = _b[0], setMenuOpen = _b[1];
8743
+ var _c = useState(undefined), openMenuId = _c[0], setOpenMenuId = _c[1];
8719
8744
  // State - containerHeight -------------------------------------------------------------------------------------------
8720
- var _b = useState(), containerHeight = _b[0], setContainerHeight = _b[1];
8745
+ var _d = useState(), containerHeight = _d[0], setContainerHeight = _d[1];
8721
8746
  var containerHeightDetector = useResizeDetector({
8722
8747
  handleHeight: true,
8723
8748
  handleWidth: false,
@@ -8731,7 +8756,7 @@ var Table = React__default.forwardRef(function (_a, ref) {
8731
8756
  },
8732
8757
  }).ref;
8733
8758
  // State - footerHeight --------------------------------------------------------------------------------------------
8734
- var _c = useState(), pagingHeight = _c[0], setPagingHeight = _c[1];
8759
+ var _e = useState(), pagingHeight = _e[0], setPagingHeight = _e[1];
8735
8760
  var pagingHeightResizeDetector = useResizeDetector({
8736
8761
  handleHeight: true,
8737
8762
  handleWidth: false,
@@ -8745,11 +8770,11 @@ var Table = React__default.forwardRef(function (_a, ref) {
8745
8770
  },
8746
8771
  }).ref;
8747
8772
  // State -----------------------------------------------------------------------------------------------------------
8748
- var _d = useAutoUpdateLayoutState(initColumns), columns = _d[0], setColumns = _d[1];
8749
- var _e = useState(), finalColumns = _e[0], setFinalColumns = _e[1];
8750
- var _f = useAutoUpdateLayoutState(initItems), items = _f[0], setItems = _f[1];
8751
- var _g = useState(), sortableItems = _g[0], setSortableItems = _g[1];
8752
- var _h = useAutoUpdateLayoutState(initPaging), paging = _h[0], setPaging = _h[1];
8773
+ var _f = useAutoUpdateLayoutState(initColumns), columns = _f[0], setColumns = _f[1];
8774
+ var _g = useState(), finalColumns = _g[0], setFinalColumns = _g[1];
8775
+ var _h = useAutoUpdateLayoutState(initItems), items = _h[0], setItems = _h[1];
8776
+ var _j = useState(), sortableItems = _j[0], setSortableItems = _j[1];
8777
+ var _k = useAutoUpdateLayoutState(initPaging), paging = _k[0], setPaging = _k[1];
8753
8778
  // Memo --------------------------------------------------------------------------------------------------------------
8754
8779
  var tableSx = useMemo(function () {
8755
8780
  var sx = {
@@ -8880,21 +8905,37 @@ var Table = React__default.forwardRef(function (_a, ref) {
8880
8905
  return style;
8881
8906
  }, [fullHeight]);
8882
8907
  // Render ----------------------------------------------------------------------------------------------------------
8883
- return finalColumns ? (React__default.createElement(Paper, { ref: fullHeight ? containerHeightDetector : undefined, className: classNames('Table', className), variant: 'outlined', style: style, sx: sx },
8884
- React__default.createElement(SimpleBar, { style: simpleBarStyle },
8885
- React__default.createElement(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd },
8886
- React__default.createElement(Table$1, { stickyHeader: !isNoData && stickyHeader, sx: tableSx, style: tableStyle },
8887
- React__default.createElement(TableHead, null,
8888
- React__default.createElement(TableRow, null, finalColumns.map(function (column, idx) { return (React__default.createElement(TableHeadCell, { key: idx, column: column, defaultAlign: defaultAlign })); }))),
8889
- React__default.createElement(TableBody, null, sortableItems ? (sortableItems.length > 0 ? (React__default.createElement(SortableContext, { items: sortableItems, strategy: verticalListSortingStrategy }, sortableItems.map(function (item, idx) { return (React__default.createElement(TableBodyRow, { key: item.id, className: classNames(!!showOddColor && 'odd-color', !!showEvenColor && 'even-color'), hover: true, sx: onGetBodyRowSx ? onGetBodyRowSx(item, idx) : undefined, id: item.id, index: idx, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, sortable: sortable, columns: finalColumns, item: item, onClick: onClick })); }))) : (React__default.createElement(StyledBodyRow$1, null,
8890
- React__default.createElement(TableCell, { colSpan: finalColumns.length, style: { flex: 1 } }, noData ? (noData) : (React__default.createElement(StyledNoDataDiv, null,
8891
- React__default.createElement("div", null,
8892
- React__default.createElement(Icon, null, "error")),
8893
- React__default.createElement("div", null, "\uAC80\uC0C9\uB41C \uC815\uBCF4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."))))))) : undefined),
8894
- !isNoData && footer && (React__default.createElement(TableFooter, null,
8895
- React__default.createElement(TableRow, null, finalColumns.map(function (column, idx) { return (React__default.createElement(TableFooterCell, { key: idx, column: column, defaultAlign: defaultAlign })); }))))))),
8896
- paging && paging.total > 0 && (React__default.createElement(Stack, { ref: fullHeight ? pagingHeightResizeDetector : undefined, alignItems: pagingAlign, style: pagingStyle },
8897
- React__default.createElement(TablePagination, { className: pagination === null || pagination === void 0 ? void 0 : pagination.className, style: pagination === null || pagination === void 0 ? void 0 : pagination.style, sx: pagination === null || pagination === void 0 ? void 0 : pagination.sx, paging: paging, align: pagingAlign, onChange: onPageChange }))))) : null;
8908
+ return finalColumns ? (React__default.createElement(TableContextProvider, { value: {
8909
+ menuOpen: menuOpen,
8910
+ openMenuId: openMenuId,
8911
+ setMenuOpen: function (newMenuOpen, newOpenMenuId) {
8912
+ if (newMenuOpen) {
8913
+ setMenuOpen(newMenuOpen);
8914
+ setOpenMenuId(newOpenMenuId);
8915
+ }
8916
+ else {
8917
+ if (openMenuId === newOpenMenuId) {
8918
+ setMenuOpen(false);
8919
+ setOpenMenuId(undefined);
8920
+ }
8921
+ }
8922
+ },
8923
+ } },
8924
+ React__default.createElement(Paper, { ref: fullHeight ? containerHeightDetector : undefined, className: classNames('Table', className), variant: 'outlined', style: style, sx: sx },
8925
+ React__default.createElement(SimpleBar, { style: simpleBarStyle },
8926
+ React__default.createElement(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd },
8927
+ React__default.createElement(Table$1, { stickyHeader: !isNoData && stickyHeader, sx: tableSx, style: tableStyle },
8928
+ React__default.createElement(TableHead, null,
8929
+ React__default.createElement(TableRow, null, finalColumns.map(function (column, idx) { return (React__default.createElement(TableHeadCell, { key: idx, column: column, defaultAlign: defaultAlign })); }))),
8930
+ React__default.createElement(TableBody, null, sortableItems ? (sortableItems.length > 0 ? (React__default.createElement(SortableContext, { items: sortableItems, strategy: verticalListSortingStrategy }, sortableItems.map(function (item, idx) { return (React__default.createElement(TableBodyRow, { key: item.id, className: classNames(!!showOddColor && 'odd-color', !!showEvenColor && 'even-color'), hover: true, sx: onGetBodyRowSx ? onGetBodyRowSx(item, idx) : undefined, id: item.id, index: idx, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, sortable: sortable, columns: finalColumns, item: item, onClick: onClick })); }))) : (React__default.createElement(StyledBodyRow$1, null,
8931
+ React__default.createElement(TableCell, { colSpan: finalColumns.length, style: { flex: 1 } }, noData ? (noData) : (React__default.createElement(StyledNoDataDiv, null,
8932
+ React__default.createElement("div", null,
8933
+ React__default.createElement(Icon, null, "error")),
8934
+ React__default.createElement("div", null, "\uAC80\uC0C9\uB41C \uC815\uBCF4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."))))))) : undefined),
8935
+ !isNoData && footer && (React__default.createElement(TableFooter, null,
8936
+ React__default.createElement(TableRow, null, finalColumns.map(function (column, idx) { return (React__default.createElement(TableFooterCell, { key: idx, column: column, defaultAlign: defaultAlign })); }))))))),
8937
+ paging && paging.total > 0 && (React__default.createElement(Stack, { ref: fullHeight ? pagingHeightResizeDetector : undefined, alignItems: pagingAlign, style: pagingStyle },
8938
+ React__default.createElement(TablePagination, { className: pagination === null || pagination === void 0 ? void 0 : pagination.className, style: pagination === null || pagination === void 0 ? void 0 : pagination.style, sx: pagination === null || pagination === void 0 ? void 0 : pagination.sx, paging: paging, align: pagingAlign, onChange: onPageChange })))))) : null;
8898
8939
  });
8899
8940
  Table.displayName = 'Table';
8900
8941
  Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var SearchTable = React__default.forwardRef(function (_a, ref) {
@@ -9248,4 +9289,93 @@ TableIcon.defaultProps = TableIconDefaultProps;var TableButton = React__default.
9248
9289
  children));
9249
9290
  });
9250
9291
  TableButton.displayName = 'TableButton';
9251
- TableButton.defaultProps = TableButtonDefaultProps;export{SearchTable,SearchTableDefaultProps,Table,TableButton,TableButtonDefaultProps,TableDefaultProps,TableIcon,TableIconDefaultProps};//# sourceMappingURL=index.esm.js.map
9292
+ TableButton.defaultProps = TableButtonDefaultProps;var TableMenuButtonDefaultProps = {
9293
+ variant: 'outlined',
9294
+ color: 'primary',
9295
+ placement: 'bottom',
9296
+ };var TableMenuButton = React__default.forwardRef(function (_a, ref) {
9297
+ // ID ----------------------------------------------------------------------------------------------------------------
9298
+ var children = _a.children, className = _a.className, initSx = _a.sx, color = _a.color, icon = _a.icon, startIcon = _a.startIcon, endIcon = _a.endIcon, placement = _a.placement, menuList = _a.menuList, props = __rest$1(_a, ["children", "className", "sx", "color", "icon", "startIcon", "endIcon", "placement", "menuList"]);
9299
+ var buttonId = useId();
9300
+ var menuId = useId();
9301
+ // Use ---------------------------------------------------------------------------------------------------------------
9302
+ var _b = useTableState(), menuOpen = _b.menuOpen, openMenuId = _b.openMenuId, setMenuOpen = _b.setMenuOpen;
9303
+ // Ref ---------------------------------------------------------------------------------------------------------------
9304
+ var anchorRef = useRef();
9305
+ // State -------------------------------------------------------------------------------------------------------------
9306
+ var _c = useState(false), open = _c[0], setOpen = _c[1];
9307
+ // Effect ------------------------------------------------------------------------------------------------------------
9308
+ useEffect(function () {
9309
+ if (open && menuOpen && openMenuId !== menuId) {
9310
+ setOpen(false);
9311
+ }
9312
+ }, [menuId, menuOpen, open, openMenuId]);
9313
+ // Memo --------------------------------------------------------------------------------------------------------------
9314
+ var sx = useMemo(function () { return (__assign$1({ minWidth: 0, px: !startIcon && !endIcon ? 0.7 : 1.7 }, initSx)); }, [endIcon, initSx, startIcon]);
9315
+ // Event Handler -----------------------------------------------------------------------------------------------------
9316
+ var handleClick = useCallback(function () {
9317
+ setOpen(function (old) { return !old; });
9318
+ if (!open) {
9319
+ setMenuOpen(true, menuId);
9320
+ }
9321
+ else {
9322
+ setMenuOpen(false, menuId);
9323
+ }
9324
+ }, [menuId, open, setMenuOpen]);
9325
+ var handleClose = useCallback(function () {
9326
+ if (open) {
9327
+ setOpen(false);
9328
+ setMenuOpen(false, menuId);
9329
+ }
9330
+ }, [menuId, open, setMenuOpen]);
9331
+ var handleListKeyDown = useCallback(function (event) {
9332
+ if (event.key === 'Tab') {
9333
+ event.preventDefault();
9334
+ if (open) {
9335
+ setOpen(false);
9336
+ setMenuOpen(false, menuId);
9337
+ }
9338
+ }
9339
+ else if (event.key === 'Escape') {
9340
+ if (open) {
9341
+ setOpen(false);
9342
+ setMenuOpen(false, menuId);
9343
+ }
9344
+ }
9345
+ }, [menuId, open, setMenuOpen]);
9346
+ // Memo --------------------------------------------------------------------------------------------------------------
9347
+ var finalMenuList = useMemo(function () {
9348
+ return React__default.cloneElement(menuList, {
9349
+ autoFocusItem: open,
9350
+ id: menuId,
9351
+ 'aria-labelledby': buttonId,
9352
+ onKeyDown: handleListKeyDown,
9353
+ // onClick: handleClose,
9354
+ });
9355
+ }, [buttonId, handleListKeyDown, menuId, menuList, open]);
9356
+ // Render ----------------------------------------------------------------------------------------------------------
9357
+ return (React__default.createElement("span", null,
9358
+ React__default.createElement(Button, __assign$1({ ref: function (r) {
9359
+ if (ref) {
9360
+ if (typeof ref === 'function') {
9361
+ ref(r);
9362
+ }
9363
+ else {
9364
+ ref.current = r;
9365
+ }
9366
+ }
9367
+ anchorRef.current = r;
9368
+ }, id: buttonId, "aria-controls": open ? menuId : undefined, "aria-expanded": open ? 'true' : undefined, "aria-haspopup": 'true', className: classNames(className, 'TableMenuButton'), type: 'button', size: 'small', sx: sx, color: color, onClick: handleClick, startIcon: startIcon ? (React__default.createElement(TableIcon, { fontSize: 'small', sx: { mr: -0.5 } }, startIcon)) : undefined, endIcon: endIcon ? (React__default.createElement(TableIcon, { fontSize: 'small', sx: { ml: -0.5 } }, endIcon)) : undefined }, props),
9369
+ icon && (React__default.createElement(TableIcon, { fontSize: 'small', color: color }, icon)),
9370
+ children),
9371
+ React__default.createElement(Popper, { open: open, anchorEl: anchorRef.current, role: undefined, placement: placement, transition: true }, function (_a) {
9372
+ var TransitionProps = _a.TransitionProps, placement = _a.placement;
9373
+ return (React__default.createElement(Grow, __assign$1({}, TransitionProps, { style: {
9374
+ transformOrigin: placement === 'bottom-start' ? 'left top' : 'left bottom',
9375
+ } }),
9376
+ React__default.createElement(Paper, null,
9377
+ React__default.createElement(ClickAwayListener, { onClickAway: handleClose }, finalMenuList))));
9378
+ })));
9379
+ });
9380
+ TableMenuButton.displayName = 'TableMenuButton';
9381
+ TableMenuButton.defaultProps = TableMenuButtonDefaultProps;export{SearchTable,SearchTableDefaultProps,Table,TableButton,TableButtonDefaultProps,TableDefaultProps,TableIcon,TableIconDefaultProps,TableMenuButton,TableMenuButtonDefaultProps};//# sourceMappingURL=index.esm.js.map