@ceed/ads 1.41.3-next.5 → 1.41.3-next.7

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.cjs CHANGED
@@ -458,16 +458,25 @@ function useSlotRef(slotProp, ref) {
458
458
  const isFunctionForm = typeof slotProp === "function";
459
459
  const slotRef = isFunctionForm ? void 0 : slotProp?.ref;
460
460
  const mergedRef = useMergedRef(slotRef, ref);
461
+ const latestSlotRef = (0, import_react6.useRef)(null);
462
+ const stableMergedRef = (0, import_react6.useCallback)(
463
+ (value) => {
464
+ assignRef(latestSlotRef.current, value);
465
+ assignRef(ref, value);
466
+ },
467
+ [ref]
468
+ );
461
469
  return (0, import_react6.useMemo)(() => {
462
470
  if (isFunctionForm) {
463
471
  return ((ownerState) => {
464
472
  const resolved = slotProp(ownerState) ?? {};
465
- const merged = mergeRefs(resolved.ref, ref);
466
- return merged ? { ...resolved, ref: merged } : { ...resolved };
473
+ const resolvedRef = resolved.ref;
474
+ latestSlotRef.current = resolvedRef ?? null;
475
+ return resolvedRef || ref ? { ...resolved, ref: stableMergedRef } : { ...resolved };
467
476
  });
468
477
  }
469
478
  return mergedRef ? { ...slotProp, ref: mergedRef } : { ...slotProp };
470
- }, [isFunctionForm, slotProp, mergedRef, ref]);
479
+ }, [isFunctionForm, slotProp, mergedRef, ref, stableMergedRef]);
471
480
  }
472
481
 
473
482
  // src/components/Autocomplete/Autocomplete.tsx
@@ -2610,7 +2619,10 @@ function computeAutoFitWidth(params) {
2610
2619
  return finalWidth;
2611
2620
  }
2612
2621
  function getHeaderCellId(tableId, columnId) {
2613
- return `${tableId}_header_${columnId}`.trim();
2622
+ return `${tableId}_header_${columnId}`;
2623
+ }
2624
+ function sanitizeColumnId(field) {
2625
+ return String(field).trim().replace(/\s+/g, "_");
2614
2626
  }
2615
2627
 
2616
2628
  // src/components/DataTable/styled.tsx
@@ -3567,7 +3579,7 @@ var HeadCell = (props) => {
3567
3579
  }, [ref]);
3568
3580
  const [isHovered, setIsHovered] = (0, import_react26.useState)(false);
3569
3581
  const sortable = type === "actions" ? false : _sortable;
3570
- const headId = (0, import_react26.useMemo)(() => getHeaderCellId(tableId, columnId ?? field), [tableId, columnId, field]);
3582
+ const headId = (0, import_react26.useMemo)(() => getHeaderCellId(tableId, columnId), [tableId, columnId]);
3571
3583
  const isResizingRef = (0, import_react26.useRef)(false);
3572
3584
  const resizer = (0, import_react26.useMemo)(
3573
3585
  () => resizable ?? true ? Resizer(
@@ -3576,9 +3588,9 @@ var HeadCell = (props) => {
3576
3588
  (isResizing) => {
3577
3589
  isResizingRef.current = isResizing;
3578
3590
  },
3579
- onAutoFit ? () => onAutoFit(columnId ?? String(field)) : void 0
3591
+ onAutoFit ? () => onAutoFit(columnId) : void 0
3580
3592
  ) : null,
3581
- [resizable, ref, colRef, onAutoFit, columnId, field]
3593
+ [resizable, ref, colRef, onAutoFit, columnId]
3582
3594
  );
3583
3595
  const style = (0, import_react26.useMemo)(
3584
3596
  () => ({
@@ -3848,7 +3860,7 @@ var BodyCell = (props) => {
3848
3860
  {
3849
3861
  ref: cellRef,
3850
3862
  key: field,
3851
- headers: getHeaderCellId(tableId, props.columnId ?? field),
3863
+ headers: getHeaderCellId(tableId, props.columnId),
3852
3864
  sx: {
3853
3865
  textAlign: getTextAlign({ type }),
3854
3866
  verticalAlign: editMode ? "top" : "middle",
@@ -3948,8 +3960,8 @@ function useColumnWidths(columnsById) {
3948
3960
  });
3949
3961
  setWidths((prev) => {
3950
3962
  const keys = Object.keys(measured);
3951
- const same = keys.length === Object.keys(prev).length && keys.every((key) => prev[key] === measured[key]);
3952
- return same ? prev : measured;
3963
+ const same = keys.every((key) => prev[key] === measured[key]);
3964
+ return same ? prev : { ...prev, ...measured };
3953
3965
  });
3954
3966
  return () => roRef.current?.disconnect();
3955
3967
  }, [columnsById]);
@@ -4036,10 +4048,10 @@ function useDataTableRenderer({
4036
4048
  [reorderedColumns]
4037
4049
  );
4038
4050
  const allColumnIds = (0, import_react27.useMemo)(() => {
4039
- const taken = new Set(reorderedColumns.map((column) => String(column.field)));
4051
+ const taken = new Set(reorderedColumns.map((column) => sanitizeColumnId(column.field)));
4040
4052
  const assigned = /* @__PURE__ */ new Set();
4041
4053
  return reorderedColumns.map((column) => {
4042
- const field = String(column.field);
4054
+ const field = sanitizeColumnId(column.field);
4043
4055
  if (!assigned.has(field)) {
4044
4056
  assigned.add(field);
4045
4057
  return field;
@@ -4190,7 +4202,7 @@ function useDataTableRenderer({
4190
4202
  field: key
4191
4203
  }));
4192
4204
  return baseColumns.map((column, index) => {
4193
- const columnId = columnIds[index] ?? String(column.field);
4205
+ const columnId = columnIds[index] ?? sanitizeColumnId(column.field);
4194
4206
  const isLeftPinned = effectivePinnedLeft?.includes(column.field);
4195
4207
  const isRightPinned = effectivePinnedRight?.includes(column.field);
4196
4208
  const isPinned = isLeftPinned || isRightPinned;
@@ -5028,13 +5040,13 @@ function Component(props, apiRef) {
5028
5040
  }
5029
5041
  },
5030
5042
  headerCheckboxElement
5031
- ), columns.map((c, i) => (
5043
+ ), columns.map((c) => (
5032
5044
  // @ts-ignore
5033
5045
  /* @__PURE__ */ import_react30.default.createElement(
5034
5046
  HeadCell2,
5035
5047
  {
5036
5048
  tableId,
5037
- key: `${c.field.toString()}_${i}`,
5049
+ key: c.columnId,
5038
5050
  stickyHeader: props.stickyHeader,
5039
5051
  editMode: !!c.isCellEditable,
5040
5052
  onSortChange: handleSortChange,
@@ -5676,7 +5688,7 @@ var ModalOverflow = MotionModalOverflow;
5676
5688
  ModalOverflow.displayName = "ModalOverflow";
5677
5689
  var ModalFrame = import_react32.default.forwardRef((props, ref) => {
5678
5690
  const { title, children, titleStartDecorator, onClose, ...innerProps } = props;
5679
- return /* @__PURE__ */ import_react32.default.createElement(StyledModalDialog, { ref, ...innerProps }, /* @__PURE__ */ import_react32.default.createElement(ModalClose, { onClick: onClose }), /* @__PURE__ */ import_react32.default.createElement(DialogTitle_default, null, titleStartDecorator, title), /* @__PURE__ */ import_react32.default.createElement(DialogContent_default, null, children));
5691
+ return /* @__PURE__ */ import_react32.default.createElement(StyledModalDialog, { ...innerProps, ref }, /* @__PURE__ */ import_react32.default.createElement(ModalClose, { onClick: onClose }), /* @__PURE__ */ import_react32.default.createElement(DialogTitle_default, null, titleStartDecorator, title), /* @__PURE__ */ import_react32.default.createElement(DialogContent_default, null, children));
5680
5692
  });
5681
5693
  ModalFrame.displayName = "ModalFrame";
5682
5694
 
@@ -7311,7 +7323,7 @@ var import_joy60 = require("@mui/joy");
7311
7323
  // src/components/IconMenuButton/IconMenuButton.tsx
7312
7324
  var import_react50 = __toESM(require("react"));
7313
7325
  var import_joy61 = require("@mui/joy");
7314
- var MenuButtonRootSlot = import_react50.default.forwardRef(function MenuButtonRootSlot2({ as, ...rest }, ref) {
7326
+ var MenuButtonRootSlot = import_react50.default.forwardRef(function MenuButtonRootSlot2({ as, ownerState: _ownerState, ...rest }, ref) {
7315
7327
  return /* @__PURE__ */ import_react50.default.createElement(import_joy61.IconButton, { ...rest, component: as ?? "button", ref });
7316
7328
  });
7317
7329
  function IconMenuButtonInner(props, ref) {
@@ -7349,7 +7361,8 @@ function IconMenuButtonInner(props, ref) {
7349
7361
  slots: { root: MenuButtonRootSlot },
7350
7362
  slotProps: {
7351
7363
  root: {
7352
- component: props.buttonComponent ?? "button",
7364
+ // 기본값 'button'은 MenuButtonRootSlot 한 곳에만 둔다.
7365
+ component: props.buttonComponent,
7353
7366
  size,
7354
7367
  variant,
7355
7368
  color,