reshaped 3.0.6 → 3.0.8-rc.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.
@@ -39,7 +39,7 @@ const ModalSubtitle = (props) => {
39
39
  return (_jsx(Text, { variant: "body-3", color: "neutral-faded", attributes: { id: `${id}-subtitle` }, children: children }));
40
40
  };
41
41
  const Modal = (props) => {
42
- const { children, onClose, onOpen, active, size, padding = 4, position = "center", transparentOverlay, ariaLabel, autoFocus = true, disableSwipeGesture, overlayClassName, containerRef, className, attributes, } = props;
42
+ const { children, onClose, onOpen, active, size, padding = 4, position = "center", transparentOverlay, ariaLabel, autoFocus = true, disableSwipeGesture, overlayClassName, className, attributes, } = props;
43
43
  const id = useElementId();
44
44
  const clientPosition = useResponsiveClientValue(position);
45
45
  const [titleMounted, setTitleMounted] = React.useState(false);
@@ -164,7 +164,7 @@ const Modal = (props) => {
164
164
  setHideProgress(progress / 2);
165
165
  dragDistanceRef.current = dragDistance;
166
166
  }, [dragDistance, clientPosition, rootRef]);
167
- return (_jsx(Overlay, { onClose: onClose, onOpen: onOpen, active: active, transparent: transparentOverlay || hideProgress, className: overlayClassName, containerRef: containerRef, attributes: {
167
+ return (_jsx(Overlay, { onClose: onClose, onOpen: onOpen, active: active, transparent: transparentOverlay || hideProgress, className: overlayClassName, attributes: {
168
168
  onTouchStart: handleDragStart,
169
169
  }, children: ({ active }) => {
170
170
  const rootClassNames = classNames(s.root, className, paddingStyles?.classNames, active && s["--active"], dragging && s["--dragging"], responsiveClassNames(s, "--position", position));
@@ -1 +1 @@
1
- .root{background:var(--rs-color-background-elevation-overlay);box-shadow:var(--rs-shadow-overlay);color:var(--rs-color-foreground-neutral);transition:var(--rs-easing-accelerate) var(--rs-duration-medium);transition-property:transform,opacity;will-change:transform}.root:focus-visible{box-shadow:var(--rs-focus-shadow);outline:none}.--dragging{transition:none}.root{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);--rs-modal-size-m:var(--rs-modal-size-s);--rs-modal-size-l:var(--rs-modal-size-m);--rs-modal-size-xl:var(--rs-modal-size-l);--rs-modal-size:var(--rs-modal-size-s)}.--position-center{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(100vw - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center.--active,[dir=rtl] .--position-center.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(100vh - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom.--active,[dir=rtl] .--position-bottom.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start{transform:translate(100%)}.--position-start.--active,[dir=rtl] .--position-start.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end{transform:translate(-100%)}.--position-end.--active,[dir=rtl] .--position-end.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:100%;opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen.--active,[dir=rtl] .--position-full-screen.--active{opacity:1;transform:translate(0)!important}.--active,[dir=rtl] .--active{transition-timing-function:var(--rs-easing-decelerate)}@media (--rs-viewport-m ){.root{--rs-modal-size:var(--rs-modal-size-m)}.--position-center--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(100vw - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--m.--active,[dir=rtl] .--position-center--m.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--m{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(100vh - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom--m.--active,[dir=rtl] .--position-bottom--m.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--m{transform:translate(100%)}.--position-start--m.--active,[dir=rtl] .--position-start--m.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--m{transform:translate(-100%)}.--position-end--m.--active,[dir=rtl] .--position-end--m.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--m{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:100%;opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--m.--active,[dir=rtl] .--position-full-screen--m.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-l ){.root{--rs-modal-size:var(--rs-modal-size-l)}.--position-center--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(100vw - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--l.--active,[dir=rtl] .--position-center--l.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--l{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(100vh - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom--l.--active,[dir=rtl] .--position-bottom--l.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--l{transform:translate(100%)}.--position-start--l.--active,[dir=rtl] .--position-start--l.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--l{transform:translate(-100%)}.--position-end--l.--active,[dir=rtl] .--position-end--l.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--l{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:100%;opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--l.--active,[dir=rtl] .--position-full-screen--l.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-xl ){.root{--rs-modal-size:var(--rs-modal-size-xl)}.--position-center--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(100vw - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--xl.--active,[dir=rtl] .--position-center--xl.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--xl{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(100vh - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:absolute;transform:translateY(100%);width:100%}.--position-bottom--xl.--active,[dir=rtl] .--position-bottom--xl.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--xl{transform:translate(100%)}.--position-start--xl.--active,[dir=rtl] .--position-start--xl.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:absolute;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--xl{transform:translate(-100%)}.--position-end--xl.--active,[dir=rtl] .--position-end--xl.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--xl{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:100%;opacity:0;overflow:auto;position:absolute;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--xl.--active,[dir=rtl] .--position-full-screen--xl.--active{opacity:1;transform:translate(0)!important}}
1
+ .root{background:var(--rs-color-background-elevation-overlay);box-shadow:var(--rs-shadow-overlay);color:var(--rs-color-foreground-neutral);transition:var(--rs-easing-accelerate) var(--rs-duration-medium);transition-property:transform,opacity;will-change:transform}.root:focus-visible{box-shadow:var(--rs-focus-shadow);outline:none}.root{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);--rs-modal-size-m:var(--rs-modal-size-s);--rs-modal-size-l:var(--rs-modal-size-m);--rs-modal-size-xl:var(--rs-modal-size-l);--rs-modal-size:var(--rs-modal-size-s)}.--position-center{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(100vw - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center.--active,[dir=rtl] .--position-center.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(100vh - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:fixed;transform:translateY(100%);width:100%}.--position-bottom.--active,[dir=rtl] .--position-bottom.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start{transform:translate(100%)}.--position-start.--active,[dir=rtl] .--position-start.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end{transform:translate(-100%)}.--position-end.--active,[dir=rtl] .--position-end.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:100%;opacity:0;overflow:auto;position:fixed;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen.--active,[dir=rtl] .--position-full-screen.--active{opacity:1;transform:translate(0)!important}.--active,[dir=rtl] .--active{transition-timing-function:var(--rs-easing-decelerate)}.--dragging{transition:none}@media (--rs-viewport-m ){.root{--rs-modal-size:var(--rs-modal-size-m)}.--position-center--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(100vw - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--m.--active,[dir=rtl] .--position-center--m.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--m{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(100vh - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:fixed;transform:translateY(100%);width:100%}.--position-bottom--m.--active,[dir=rtl] .--position-bottom--m.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--m{transform:translate(100%)}.--position-start--m.--active,[dir=rtl] .--position-start--m.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--m{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--m{transform:translate(-100%)}.--position-end--m.--active,[dir=rtl] .--position-end--m.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--m{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:100%;opacity:0;overflow:auto;position:fixed;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--m.--active,[dir=rtl] .--position-full-screen--m.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-l ){.root{--rs-modal-size:var(--rs-modal-size-l)}.--position-center--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(100vw - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--l.--active,[dir=rtl] .--position-center--l.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--l{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(100vh - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:fixed;transform:translateY(100%);width:100%}.--position-bottom--l.--active,[dir=rtl] .--position-bottom--l.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--l{transform:translate(100%)}.--position-start--l.--active,[dir=rtl] .--position-start--l.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--l{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--l{transform:translate(-100%)}.--position-end--l.--active,[dir=rtl] .--position-end--l.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--l{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:100%;opacity:0;overflow:auto;position:fixed;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--l.--active,[dir=rtl] .--position-full-screen--l.--active{opacity:1;transform:translate(0)!important}}@media (--rs-viewport-xl ){.root{--rs-modal-size:var(--rs-modal-size-xl)}.--position-center--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:var(--rs-radius-large);height:auto;inset:0;margin:var(--rs-unit-x4);max-height:none;max-width:calc(100vw - var(--rs-unit-x8));opacity:0;overflow:hidden;position:relative;transform:scale(.96);width:var(--rs-modal-size)}.--position-center--xl.--active,[dir=rtl] .--position-center--xl.--active{opacity:1;transform:translate(0) scale(1)!important}.--position-bottom--xl{--rs-modal-size-s:auto;border-radius:var(--rs-radius-large) var(--rs-radius-large) 0 0;height:var(--rs-modal-size);inset:0;inset-block-start:auto;margin:0;margin-top:var(--rs-unit-x4);max-height:calc(100vh - var(--rs-unit-x4));max-width:100%;opacity:1;overflow:auto;position:fixed;transform:translateY(100%);width:100%}.--position-bottom--xl.--active,[dir=rtl] .--position-bottom--xl.--active{transform:translateY(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-start--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-end:auto;margin:0;margin-inline-end:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(-100%);width:var(--rs-modal-size)}[dir=rtl] .--position-start--xl{transform:translate(100%)}.--position-start--xl.--active,[dir=rtl] .--position-start--xl.--active{transform:translate(min(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-end--xl{--rs-modal-size-s:calc(var(--rs-unit-x1) * 100);border-radius:0;height:100%;inset:0;inset-inline-start:auto;margin:0;margin-inline-start:var(--rs-unit-x4);max-height:100%;max-width:calc(100vw - var(--rs-unit-x4));opacity:1;overflow:auto;position:fixed;transform:translate(100%);width:var(--rs-modal-size)}[dir=rtl] .--position-end--xl{transform:translate(-100%)}.--position-end--xl.--active,[dir=rtl] .--position-end--xl.--active{transform:translate(max(var(--rs-modal-drag,0px),0px)) scale(1)!important}.--position-full-screen--xl{--rs-modal-size-s:100%;border-radius:0;height:100%;inset:0;inset-block-start:auto;margin:0;max-height:100%;max-width:100%;opacity:0;overflow:auto;position:fixed;transform:translateY(var(--rs-unit-x4));width:100%}.--position-full-screen--xl.--active,[dir=rtl] .--position-full-screen--xl.--active{opacity:1;transform:translate(0)!important}}
@@ -28,4 +28,4 @@ export type Props = {
28
28
  attributes?: G.Attributes<"div"> & {
29
29
  ref?: React.RefObject<HTMLDivElement | null>;
30
30
  };
31
- } & Pick<OverlayProps, "onClose" | "onOpen" | "active" | "containerRef">;
31
+ } & Pick<OverlayProps, "onClose" | "onOpen" | "active">;
@@ -19,6 +19,5 @@ export declare const size: () => React.JSX.Element;
19
19
  export declare const padding: () => React.JSX.Element;
20
20
  export declare const composition: () => React.JSX.Element;
21
21
  export declare const overlay: () => React.JSX.Element;
22
- export declare const customContainer: () => React.JSX.Element;
23
22
  export declare const edgeCases: () => React.JSX.Element;
24
23
  export declare const trapFocusEdgeCases: () => React.JSX.Element;
@@ -1,5 +1,4 @@
1
1
  import React from "react";
2
- import { createRoot } from "react-dom/client";
3
2
  import { Example } from "../../../utilities/storybook/index.js";
4
3
  import Modal from "../index.js";
5
4
  import View from "../../View/index.js";
@@ -8,7 +7,6 @@ import Dismissible from "../../Dismissible/index.js";
8
7
  import DropdownMenu from "../../DropdownMenu/index.js";
9
8
  import Switch from "../../Switch/index.js";
10
9
  import TextField from "../../TextField/index.js";
11
- import Reshaped from "../../Reshaped/index.js";
12
10
  import useToggle from "../../../hooks/useToggle.js";
13
11
  import Radio from "../../Radio/index.js";
14
12
  export default {
@@ -102,40 +100,6 @@ export const overlay = () => (<Example>
102
100
  <View height="1000px"/>
103
101
  </Example.Item>
104
102
  </Example>);
105
- export const customContainer = () => {
106
- const toggle = useToggle();
107
- const containerRef = React.useRef(null);
108
- const shadowRootRef = React.useRef(null);
109
- React.useEffect(() => {
110
- if (!shadowRootRef.current)
111
- return;
112
- if (shadowRootRef.current.shadowRoot)
113
- return;
114
- const shadowRoot = shadowRootRef.current?.attachShadow({ mode: "open" });
115
- const root = createRoot(shadowRoot);
116
- root.render(<Reshaped theme="reshaped">
117
- <Modal active containerRef={{ current: shadowRootRef.current?.shadowRoot }}>
118
- Modal content
119
- </Modal>
120
- </Reshaped>);
121
- }, []);
122
- return (<Example>
123
- <Example.Item title="inside an element">
124
- <View backgroundColor="neutral-faded" height="400px" borderRadius="medium" attributes={{ ref: containerRef }} padding={4} overflow="auto">
125
- <View height="5000px">
126
- <Button onClick={toggle.activate}>Open</Button>
127
- </View>
128
- </View>
129
- <Modal onClose={toggle.deactivate} active={toggle.active} containerRef={containerRef} position="end">
130
- Modal content
131
- </Modal>
132
- </Example.Item>
133
-
134
- <Example.Item title="shadow DOM">
135
- <div ref={shadowRootRef} style={{ height: 400 }}/>
136
- </Example.Item>
137
- </Example>);
138
- };
139
103
  export const edgeCases = () => {
140
104
  const menuModalToggle = useToggle();
141
105
  const scrollModalToggle = useToggle();
@@ -12,14 +12,14 @@ import useIsDismissible from "../../hooks/_private/useIsDismissible.js";
12
12
  import Portal from "../_private/Portal/index.js";
13
13
  import s from "./Overlay.module.css";
14
14
  const Overlay = (props) => {
15
- const { active, children, transparent, onClose, onOpen, containerRef, className, attributes } = props;
16
- const clickThrough = transparent === true && !containerRef?.current;
17
- const opacity = transparent === true ? 0 : (1 - (transparent || 0)) * 0.7;
15
+ const { active, children, transparent, onClose, onOpen, className, attributes } = props;
16
+ const clickThrough = transparent === true;
17
+ const opacity = clickThrough ? 0 : (1 - (transparent || 0)) * 0.7;
18
18
  const [mounted, setMounted] = React.useState(false);
19
19
  const [animated, setAnimated] = React.useState(false);
20
20
  const contentRef = React.useRef(null);
21
21
  const isMouseDownValidRef = React.useRef(false);
22
- const { lockScroll, unlockScroll } = useScrollLock({ ref: containerRef });
22
+ const { lockScroll, unlockScroll } = useScrollLock();
23
23
  const { active: rendered, activate: render, deactivate: remove } = useToggle(active || false);
24
24
  const { active: visible, activate: show, deactivate: hide } = useToggle(active || false);
25
25
  const isDismissible = useIsDismissible(active, contentRef);
@@ -50,7 +50,7 @@ const Overlay = (props) => {
50
50
  close();
51
51
  };
52
52
  const handleTransitionEnd = (e) => {
53
- if (e.propertyName !== "transform" || !e.pseudoElement)
53
+ if (e.propertyName !== "background-color")
54
54
  return;
55
55
  setAnimated(false);
56
56
  if (visible)
@@ -101,6 +101,6 @@ const Overlay = (props) => {
101
101
  }, []);
102
102
  if (!rendered || !mounted)
103
103
  return null;
104
- return (_jsx(Portal, { targetRef: containerRef, children: _jsx(Portal.Scope, { children: (ref) => (_jsx("div", { ...attributes, ref: ref, style: { "--rs-overlay-opacity": opacity }, role: "button", tabIndex: -1, className: rootClassNames, onMouseDown: handleMouseDown, onMouseUp: handleMouseUp, onTransitionEnd: handleTransitionEnd, children: _jsx("div", { className: s.wrapper, children: _jsx("div", { className: s.inner, children: _jsx("div", { className: s.content, ref: contentRef, children: typeof children === "function" ? children({ active: visible }) : children }) }) }) })) }) }));
104
+ return (_jsx(Portal, { children: _jsx(Portal.Scope, { children: (ref) => (_jsx("div", { ...attributes, ref: ref, style: { "--rs-overlay-opacity": opacity }, role: "button", tabIndex: -1, className: rootClassNames, onMouseDown: handleMouseDown, onMouseUp: handleMouseUp, onTransitionEnd: handleTransitionEnd, children: _jsx("div", { className: s.wrapper, children: _jsx("div", { className: s.inner, children: _jsx("div", { className: s.content, ref: contentRef, children: typeof children === "function" ? children({ active: visible }) : children }) }) }) })) }) }));
105
105
  };
106
106
  export default Overlay;
@@ -1 +1 @@
1
- .root{overflow:auto;-webkit-overflow-scrolling:touch;color:var(--rs-color-white);cursor:default!important;z-index:var(--rs-z-index-overlay)}.root,.root:before{inset:0;position:absolute}.root:before{background:var(--rs-color-black);content:"";opacity:0;pointer-events:none;transform:scale(1.01)}.wrapper{display:table;height:100%;width:100%}.inner{display:table-cell;text-align:center}.content,.inner{vertical-align:middle}.content{display:inline-block;text-align:initial}.root.--visible:before{opacity:var(--rs-overlay-opacity);transform:scale(1)}.root.--click-through{color:inherit;pointer-events:none}.root.--click-through .content,.root.--click-through>:not(.wrapper){pointer-events:all}.root.--animated:before{transition:var(--rs-duration-medium) var(--rs-easing-standard);transition-property:opacity,transform}
1
+ .root{overflow:auto;-webkit-overflow-scrolling:touch;background-color:rgba(var(--rs-color-rgb-black),0);color:var(--rs-color-white);cursor:default!important;inset:0;opacity:0;position:fixed;z-index:var(--rs-z-index-overlay)}.wrapper{display:table;height:100%;width:100%}.inner{display:table-cell;text-align:center}.content,.inner{vertical-align:middle}.content{display:inline-block;text-align:initial}.root.--visible{background-color:rgba(var(--rs-color-rgb-black),var(--rs-overlay-opacity));opacity:1}.root.--click-through{color:inherit;pointer-events:none}.root.--click-through .content,.root.--click-through>:not(.wrapper){pointer-events:all}.root.--animated{transition:var(--rs-duration-medium) var(--rs-easing-accelerate);transition-property:background-color,transform,opacity}.root.--animated.--visible{transition-timing-function:var(--rs-easing-decelerate)}
@@ -8,7 +8,6 @@ export type Props = {
8
8
  active?: boolean;
9
9
  onClose?: () => void;
10
10
  onOpen?: () => void;
11
- containerRef?: React.RefObject<HTMLElement | ShadowRoot>;
12
11
  className?: G.ClassName;
13
12
  attributes?: G.Attributes<"div">;
14
13
  };
@@ -9,3 +9,4 @@ declare const _default: {
9
9
  };
10
10
  export default _default;
11
11
  export declare const base: () => import("react").JSX.Element;
12
+ export declare const shadowDom: () => import("react").JSX.Element;
@@ -1,6 +1,8 @@
1
+ import { createRoot } from "react-dom/client";
1
2
  import { Example } from "../../../utilities/storybook/index.js";
2
3
  import Overlay from "../index.js";
3
4
  import Button from "../../Button/index.js";
5
+ import Reshaped from "../../Reshaped/index.js";
4
6
  import useToggle from "../../../hooks/useToggle.js";
5
7
  export default {
6
8
  title: "Utilities/Overlay",
@@ -32,3 +34,25 @@ export const base = () => {
32
34
  </Example.Item>
33
35
  </Example>);
34
36
  };
37
+ class CustomElement extends window.HTMLElement {
38
+ constructor() {
39
+ super();
40
+ this.attachShadow({ mode: "open" });
41
+ if (!this.shadowRoot)
42
+ return;
43
+ const overlay = (<Reshaped>
44
+ <Overlay active>Content</Overlay>
45
+ </Reshaped>);
46
+ const root = createRoot(this.shadowRoot);
47
+ root.render(overlay);
48
+ }
49
+ }
50
+ window.customElements.define("custom-element", CustomElement);
51
+ export const shadowDom = () => {
52
+ return (<Example>
53
+ <Example.Item>
54
+ {/* @ts-ignore */}
55
+ <custom-element />
56
+ </Example.Item>
57
+ </Example>);
58
+ };
@@ -15,6 +15,7 @@ import cooldown from "./utilities/cooldown.js";
15
15
  import { Provider, useFlyoutTriggerContext, useFlyoutContext } from "./Flyout.context.js";
16
16
  const FlyoutRoot = (props) => {
17
17
  const { triggerType = "click", onOpen, onClose, children, disabled, forcePosition, trapFocusMode, width, disableHideAnimation, disableContentHover, contentGap, contentClassName, contentAttributes, position: passedPosition, active: passedActive, id: passedId, instanceRef, containerRef, } = props;
18
+ const resolvedActive = disabled === true ? false : passedActive;
18
19
  const parentFlyoutContext = useFlyoutContext();
19
20
  const parentFlyoutTriggerContext = useFlyoutTriggerContext();
20
21
  const isSubmenu = parentFlyoutContext.trapFocusMode === "action-menu" ||
@@ -37,7 +38,7 @@ const FlyoutRoot = (props) => {
37
38
  const flyout = useFlyout(triggerElRef, flyoutElRef, {
38
39
  width,
39
40
  position: passedPosition,
40
- defaultActive: passedActive,
41
+ defaultActive: resolvedActive,
41
42
  container: containerRef?.current,
42
43
  forcePosition,
43
44
  });
@@ -53,15 +54,15 @@ const FlyoutRoot = (props) => {
53
54
  * Called from the internal actions
54
55
  */
55
56
  const handleOpen = React.useCallback(() => {
56
- const canOpen = !lockedRef.current && status === "idle" && !disabled;
57
+ const canOpen = !lockedRef.current && status === "idle";
57
58
  if (!canOpen)
58
59
  return;
59
60
  onOpen?.();
60
61
  // eslint-disable-next-line react-hooks/exhaustive-deps
61
- }, [status, disabled]);
62
+ }, [status]);
62
63
  const handleClose = React.useCallback((options) => {
63
64
  const isLocked = triggerType === "click" && !isDismissible();
64
- const canClose = !isLocked && status !== "idle" && !disabled;
65
+ const canClose = !isLocked && (status !== "idle" || disabled);
65
66
  if (!canClose)
66
67
  return;
67
68
  onClose?.();
@@ -69,7 +70,7 @@ const FlyoutRoot = (props) => {
69
70
  parentFlyoutContext?.handleClose?.();
70
71
  },
71
72
  // eslint-disable-next-line react-hooks/exhaustive-deps
72
- [status, isDismissible, triggerType, disabled]);
73
+ [status, isDismissible, triggerType]);
73
74
  /**
74
75
  * Trigger event handlers
75
76
  */
@@ -111,12 +112,12 @@ const FlyoutRoot = (props) => {
111
112
  const handleContentMouseDown = () => (lockedBlurEffects.current = true);
112
113
  const handleContentMouseUp = () => (lockedBlurEffects.current = false);
113
114
  const handleTransitionStart = React.useCallback((e) => {
114
- if (!passedActive)
115
+ if (!resolvedActive)
115
116
  return;
116
117
  if (flyoutElRef.current !== e.currentTarget || e.propertyName !== "transform")
117
118
  return;
118
119
  transitionStartedRef.current = true;
119
- }, [passedActive]);
120
+ }, [resolvedActive]);
120
121
  const handleTransitionEnd = React.useCallback((e) => {
121
122
  if (flyoutElRef.current !== e.currentTarget || e.propertyName !== "transform")
122
123
  return;
@@ -129,10 +130,12 @@ const FlyoutRoot = (props) => {
129
130
  * Control the display based on the props
130
131
  */
131
132
  useIsomorphicLayoutEffect(() => {
132
- if (passedActive) {
133
+ if (resolvedActive) {
133
134
  render();
134
135
  return;
135
136
  }
137
+ if (disabled)
138
+ cooldown.cool();
136
139
  /**
137
140
  * Check that transitions are enabled and it has been triggered on tooltip open
138
141
  * - keyboard focus navigation could move too fast and ignore the transitions completely
@@ -148,7 +151,7 @@ const FlyoutRoot = (props) => {
148
151
  // In case transitions are disabled globally - remove from the DOM immediately
149
152
  remove();
150
153
  }
151
- }, [passedActive, render, hide, remove, disableHideAnimation]);
154
+ }, [resolvedActive, render, hide, remove, disableHideAnimation, disabled]);
152
155
  React.useEffect(() => {
153
156
  // Wait after positioning before show is triggered to animate flyout from the right side
154
157
  if (status === "positioned")
@@ -11,7 +11,7 @@ class Cooldown {
11
11
  this.status = "cold";
12
12
  if (currentTimer === this.timer)
13
13
  this.timer = undefined;
14
- }, 1000);
14
+ }, 500);
15
15
  this.timer = currentTimer;
16
16
  };
17
17
  }
@@ -1,8 +1,9 @@
1
1
  "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import React from "react";
4
4
  import ReactDOM from "react-dom";
5
5
  import Theme from "../../Theme/index.js";
6
+ import s from "./Portal.module.css";
6
7
  const PortalScopeContext = React.createContext({});
7
8
  export const usePortalScope = () => {
8
9
  return React.useContext(PortalScopeContext);
@@ -13,6 +14,10 @@ export const usePortalScope = () => {
13
14
  */
14
15
  const Portal = (props) => {
15
16
  const { children, targetRef } = props;
17
+ const rootRef = React.useRef(null);
18
+ const rootNode = rootRef.current?.getRootNode();
19
+ const isShadowDom = rootNode instanceof ShadowRoot;
20
+ const defaultTargetEl = isShadowDom ? rootNode : document.body;
16
21
  /**
17
22
  * Check for parent portal to render inside it
18
23
  * To avoid z-iondex issues
@@ -22,8 +27,9 @@ const Portal = (props) => {
22
27
  */
23
28
  const portal = usePortalScope();
24
29
  const nextScopeRef = targetRef || portal.scopeRef;
30
+ const targetEl = nextScopeRef?.current || defaultTargetEl;
25
31
  /* Preserve the current theme when rendered in body */
26
- return ReactDOM.createPortal(_jsx(Theme, { children: children }), nextScopeRef?.current || document.body);
32
+ return (_jsxs(_Fragment, { children: [ReactDOM.createPortal(_jsx(Theme, { children: children }), targetEl), _jsx("div", { ref: rootRef, className: s.root })] }));
27
33
  };
28
34
  function PortalScope(props) {
29
35
  const { children } = props;
@@ -0,0 +1 @@
1
+ .root{display:contents}
@@ -1,7 +1,4 @@
1
- import React from "react";
2
- declare const useScrollLock: (args?: {
3
- ref?: React.RefObject<HTMLElement | ShadowRoot>;
4
- }) => {
1
+ declare const useScrollLock: () => {
5
2
  scrollLocked: boolean;
6
3
  lockScroll: () => void;
7
4
  unlockScroll: () => void;
@@ -17,16 +17,11 @@ const getScrollbarWidth = (() => {
17
17
  return scrollbarWidth;
18
18
  };
19
19
  })();
20
- const useScrollLock = (args) => {
21
- const { ref } = args || {};
20
+ const useScrollLock = () => {
22
21
  const [locked, setLocked] = React.useState(false);
23
22
  const overflowStyleRef = React.useRef();
24
23
  const isOverflowingRef = React.useRef(false);
25
- let targetEl = document.body;
26
- if (ref?.current) {
27
- targetEl =
28
- ref?.current instanceof ShadowRoot ? ref?.current?.host : ref.current;
29
- }
24
+ const targetEl = document.body;
30
25
  const lockScroll = React.useCallback(() => {
31
26
  const rect = targetEl.getBoundingClientRect();
32
27
  isOverflowingRef.current = rect.left + rect.right < window.innerWidth;
@@ -112,9 +112,8 @@ class TrapFocus {
112
112
  if (!this.trapped || !this.chainId)
113
113
  return;
114
114
  this.trapped = false;
115
- if (this.trigger) {
116
- const preventScroll = withoutFocusReturn || !checkKeyboardMode();
117
- this.trigger.focus({ preventScroll });
115
+ if (this.trigger && !withoutFocusReturn) {
116
+ this.trigger.focus({ preventScroll: !checkKeyboardMode() });
118
117
  }
119
118
  TrapFocus.chain.removePreviousTill(this.chainId, (item) => document.body.contains(item.data.trigger));
120
119
  this.mutationObserver?.disconnect();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "reshaped",
3
3
  "description": "Professionally crafted design system in React & Figma for building products of any scale and complexity",
4
- "version": "3.0.6",
4
+ "version": "3.0.8-rc.0",
5
5
  "license": "MIT",
6
6
  "email": "hello@reshaped.so",
7
7
  "homepage": "https://reshaped.so",