@gfazioli/mantine-split-pane 2.7.3 → 4.0.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.
Files changed (38) hide show
  1. package/README.md +2 -1
  2. package/dist/cjs/Dynamic/SplitDynamic.cjs.map +1 -1
  3. package/dist/cjs/Pane/SplitPane.cjs +160 -50
  4. package/dist/cjs/Pane/SplitPane.cjs.map +1 -1
  5. package/dist/cjs/Resizer/SplitResizer.cjs +56 -33
  6. package/dist/cjs/Resizer/SplitResizer.cjs.map +1 -1
  7. package/dist/cjs/Split.cjs +32 -11
  8. package/dist/cjs/Split.cjs.map +1 -1
  9. package/dist/cjs/Split.context.cjs +3 -1
  10. package/dist/cjs/Split.context.cjs.map +1 -1
  11. package/dist/cjs/hooks/use-responsive-value.cjs +19 -0
  12. package/dist/cjs/hooks/use-responsive-value.cjs.map +1 -0
  13. package/dist/cjs/hooks/use-split-resizer-orientation.cjs +2 -6
  14. package/dist/cjs/hooks/use-split-resizer-orientation.cjs.map +1 -1
  15. package/dist/esm/Dynamic/SplitDynamic.mjs.map +1 -1
  16. package/dist/esm/Pane/SplitPane.mjs +164 -54
  17. package/dist/esm/Pane/SplitPane.mjs.map +1 -1
  18. package/dist/esm/Resizer/SplitResizer.mjs +56 -33
  19. package/dist/esm/Resizer/SplitResizer.mjs.map +1 -1
  20. package/dist/esm/Split.context.mjs +4 -2
  21. package/dist/esm/Split.context.mjs.map +1 -1
  22. package/dist/esm/Split.mjs +33 -12
  23. package/dist/esm/Split.mjs.map +1 -1
  24. package/dist/esm/hooks/use-responsive-value.mjs +17 -0
  25. package/dist/esm/hooks/use-responsive-value.mjs.map +1 -0
  26. package/dist/esm/hooks/use-split-resizer-orientation.mjs +2 -6
  27. package/dist/esm/hooks/use-split-resizer-orientation.mjs.map +1 -1
  28. package/dist/types/Dynamic/SplitDynamic.d.ts +16 -6
  29. package/dist/types/Pane/SplitPane.d.ts +34 -18
  30. package/dist/types/Resizer/SplitResizer.d.ts +16 -12
  31. package/dist/types/Split.context.d.ts +14 -8
  32. package/dist/types/Split.d.ts +13 -3
  33. package/dist/types/hooks/use-responsive-value.d.ts +13 -0
  34. package/dist/types/hooks/use-split-resizer-orientation.d.ts +11 -2
  35. package/dist/types/index.d.mts +1 -0
  36. package/dist/types/index.d.ts +1 -0
  37. package/dist/types/types.d.ts +3 -0
  38. package/package.json +1 -1
@@ -3,6 +3,7 @@
3
3
 
4
4
  var React = require('react');
5
5
  var core = require('@mantine/core');
6
+ var useResponsiveValue = require('../hooks/use-responsive-value.cjs');
6
7
  var useSplitResizerOrientation = require('../hooks/use-split-resizer-orientation.cjs');
7
8
  var Split_context = require('../Split.context.cjs');
8
9
  var SplitResizer_module = require('./SplitResizer.module.css.cjs');
@@ -104,9 +105,10 @@ const defaultProps = {
104
105
  cursorVertical: "col-resize",
105
106
  cursorHorizontal: "row-resize"
106
107
  };
107
- const SplitResizer = core.factory((_props, _) => {
108
+ const SplitResizer = core.factory((_props) => {
108
109
  const ctx = Split_context.useSplitContext();
109
- const props = core.useProps("SplitResizer", { ...defaultProps, ...ctx }, _props);
110
+ const { containerSize: _containerSize, ...ctxResizerProps } = ctx || {};
111
+ const props = core.useProps("SplitResizer", { ...defaultProps, ...ctxResizerProps }, _props);
110
112
  const {
111
113
  orientation: propOrientation,
112
114
  opacity,
@@ -144,11 +146,20 @@ const SplitResizer = core.factory((_props, _) => {
144
146
  mod,
145
147
  ...rest
146
148
  } = props;
147
- const orientation = useSplitResizerOrientation.useSplitResizerOrientation(propOrientation);
149
+ const orientation = useSplitResizerOrientation.useSplitResizerOrientation(propOrientation ?? "vertical");
150
+ const resolvedSize = useResponsiveValue.useResponsiveValue(size) ?? defaultProps.size;
151
+ const resolvedSpacing = useResponsiveValue.useResponsiveValue(spacing) ?? defaultProps.spacing;
152
+ const resolvedKnobSize = useResponsiveValue.useResponsiveValue(knobSize) ?? defaultProps.knobSize;
153
+ const resolvedProps = {
154
+ ...props,
155
+ size: resolvedSize,
156
+ spacing: resolvedSpacing,
157
+ knobSize: resolvedKnobSize
158
+ };
148
159
  const getStyles = core.useStyles({
149
160
  name: "SplitResizer",
150
161
  classes: SplitResizer_module,
151
- props,
162
+ props: resolvedProps,
152
163
  className,
153
164
  style,
154
165
  classNames,
@@ -159,12 +170,18 @@ const SplitResizer = core.factory((_props, _) => {
159
170
  });
160
171
  const containerRef = React.useRef(null);
161
172
  const processVerticalSize = (deltaX = 0) => {
162
- const minBeforeWidth = beforeRef.current.getMinWidth();
163
- const maxBeforeWidth = beforeRef.current.getMaxWidth();
164
- const minAfterWidth = afterRef.current.getMinWidth();
165
- const maxAfterWidth = afterRef.current.getMaxWidth();
173
+ if (!beforeRef?.current || !afterRef?.current) {
174
+ return;
175
+ }
176
+ const minBeforeWidth = beforeRef.current.getMinWidth?.();
177
+ const maxBeforeWidth = beforeRef.current.getMaxWidth?.();
178
+ const minAfterWidth = afterRef.current.getMinWidth?.();
179
+ const maxAfterWidth = afterRef.current.getMaxWidth?.();
166
180
  const beforePane = beforeRef.current.splitPane;
167
181
  const afterPane = afterRef.current.splitPane;
182
+ if (!beforePane || !afterPane) {
183
+ return;
184
+ }
168
185
  let beforeWidth = beforePane.getBoundingClientRect().width;
169
186
  let afterWidth = afterPane.getBoundingClientRect().width;
170
187
  const isBeforeWidthMaxExceeded = maxBeforeWidth && beforeWidth + deltaX > maxBeforeWidth;
@@ -184,8 +201,8 @@ const SplitResizer = core.factory((_props, _) => {
184
201
  width: afterWidth,
185
202
  height: afterPane.getBoundingClientRect().height
186
203
  };
187
- beforeRef.current.onResizing?.(beforePaneSizes);
188
- afterRef.current.onResizing?.(afterPaneSizes);
204
+ beforeRef?.current?.onResizing?.(beforePaneSizes);
205
+ afterRef?.current?.onResizing?.(afterPaneSizes);
189
206
  onResizing?.({
190
207
  beforePane: beforePaneSizes,
191
208
  afterPane: afterPaneSizes
@@ -231,12 +248,18 @@ const SplitResizer = core.factory((_props, _) => {
231
248
  setVerticalSize();
232
249
  };
233
250
  const processHorizontalSize = (deltaY = 0) => {
234
- const minBeforeHeight = beforeRef.current.getMinHeight();
235
- const maxBeforeHeight = beforeRef.current.getMaxHeight();
236
- const minAfterHeight = afterRef.current.getMinHeight();
237
- const maxAfterHeight = afterRef.current.getMaxHeight();
251
+ if (!beforeRef?.current || !afterRef?.current) {
252
+ return;
253
+ }
254
+ const minBeforeHeight = beforeRef.current.getMinHeight?.();
255
+ const maxBeforeHeight = beforeRef.current.getMaxHeight?.();
256
+ const minAfterHeight = afterRef.current.getMinHeight?.();
257
+ const maxAfterHeight = afterRef.current.getMaxHeight?.();
238
258
  const beforePane = beforeRef.current.splitPane;
239
259
  const afterPane = afterRef.current.splitPane;
260
+ if (!beforePane || !afterPane) {
261
+ return;
262
+ }
240
263
  let beforeHeight = beforePane.getBoundingClientRect().height;
241
264
  let afterHeight = afterPane.getBoundingClientRect().height;
242
265
  const isBeforeHeightMaxExceeded = maxBeforeHeight && beforeHeight + deltaY > maxBeforeHeight;
@@ -260,8 +283,8 @@ const SplitResizer = core.factory((_props, _) => {
260
283
  beforePane: beforePaneSizes,
261
284
  afterPane: afterPaneSizes
262
285
  });
263
- beforeRef.current.onResizing?.(beforePaneSizes);
264
- afterRef.current.onResizing?.(afterPaneSizes);
286
+ beforeRef?.current?.onResizing?.(beforePaneSizes);
287
+ afterRef?.current?.onResizing?.(afterPaneSizes);
265
288
  beforePane.style.height = beforeHeightString;
266
289
  afterPane.style.height = afterHeightString;
267
290
  }
@@ -316,13 +339,13 @@ const SplitResizer = core.factory((_props, _) => {
316
339
  document.addEventListener("touchend", handleTouchEnd);
317
340
  }
318
341
  onResizeStart?.();
319
- beforeRef.current.onResizeStart?.();
320
- afterRef.current.onResizeStart?.();
321
- document.body.style.cursor = orientation === "vertical" ? cursorVertical : cursorHorizontal;
342
+ beforeRef?.current?.onResizeStart?.();
343
+ afterRef?.current?.onResizeStart?.();
344
+ document.body.style.cursor = (orientation === "vertical" ? cursorVertical : cursorHorizontal) ?? "";
322
345
  };
323
346
  const handleMove = (event) => {
324
- if (!beforeRef.current || !afterRef.current) {
325
- throw new Error("beforeRef or afterRef is not defined");
347
+ if (!beforeRef?.current || !afterRef?.current) {
348
+ return;
326
349
  }
327
350
  event.preventDefault();
328
351
  event.stopPropagation();
@@ -341,8 +364,8 @@ const SplitResizer = core.factory((_props, _) => {
341
364
  }
342
365
  };
343
366
  const handleMouseUp = () => {
344
- if (!beforeRef.current || !afterRef.current) {
345
- throw new Error("beforeRef or afterRef is not defined");
367
+ if (!beforeRef?.current || !afterRef?.current) {
368
+ return;
346
369
  }
347
370
  document.body.style.userSelect = "initial";
348
371
  document.body.style.webkitUserSelect = "initial";
@@ -363,12 +386,12 @@ const SplitResizer = core.factory((_props, _) => {
363
386
  beforePane: beforePaneSizes,
364
387
  afterPane: afterPaneSizes
365
388
  });
366
- beforeRef.current.onResizeEnd?.(beforePaneSizes);
367
- afterRef.current.onResizeEnd?.(afterPaneSizes);
389
+ beforeRef?.current?.onResizeEnd?.(beforePaneSizes);
390
+ afterRef?.current?.onResizeEnd?.(afterPaneSizes);
368
391
  };
369
392
  const handleTouchEnd = () => {
370
- if (!beforeRef.current || !afterRef.current) {
371
- throw new Error("beforeRef or afterRef is not defined");
393
+ if (!beforeRef?.current || !afterRef?.current) {
394
+ return;
372
395
  }
373
396
  document.removeEventListener("touchmove", handleMove);
374
397
  document.removeEventListener("touchend", handleTouchEnd);
@@ -387,8 +410,8 @@ const SplitResizer = core.factory((_props, _) => {
387
410
  beforePane: beforePaneSizes,
388
411
  afterPane: afterPaneSizes
389
412
  });
390
- beforeRef.current.onResizeEnd?.(beforePaneSizes);
391
- afterRef.current.onResizeEnd?.(afterPaneSizes);
413
+ beforeRef?.current?.onResizeEnd?.(beforePaneSizes);
414
+ afterRef?.current?.onResizeEnd?.(afterPaneSizes);
392
415
  };
393
416
  const handleKeyUp = (event) => {
394
417
  if (containerRef.current !== document.activeElement) {
@@ -397,7 +420,7 @@ const SplitResizer = core.factory((_props, _) => {
397
420
  const code = event.nativeEvent.code;
398
421
  const arrowLeftRight = code === "ArrowRight" || code === "ArrowLeft";
399
422
  const arrowUpDown = code === "ArrowUp" || code === "ArrowDown";
400
- const delta = event.shiftKey ? shiftStep : step;
423
+ const delta = (event.shiftKey ? shiftStep : step) ?? 8;
401
424
  if (orientation === "vertical" && arrowLeftRight) {
402
425
  event.preventDefault();
403
426
  event.stopPropagation();
@@ -415,14 +438,14 @@ const SplitResizer = core.factory((_props, _) => {
415
438
  if (code === "Escape") {
416
439
  event.preventDefault();
417
440
  event.stopPropagation();
418
- containerRef.current.blur();
441
+ containerRef.current?.blur();
419
442
  }
420
443
  };
421
444
  const handleDoubleClick = (e) => {
422
445
  e.preventDefault();
423
446
  e.stopPropagation();
424
- beforeRef.current.resetInitialSize(e);
425
- afterRef.current.resetInitialSize(e);
447
+ beforeRef?.current?.resetInitialSize?.(e);
448
+ afterRef?.current?.resetInitialSize?.(e);
426
449
  onDoubleClick?.(e);
427
450
  };
428
451
  return /* @__PURE__ */ React.createElement(