UNPKG

@atlaskit/editor-common

Version:

A package that contains common classes and components for editor and renderer

108 lines (106 loc) 5.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.MediaBadges = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _debounce = _interopRequireDefault(require("lodash/debounce")); var _platformFeatureFlags = require("@atlaskit/platform-feature-flags"); var _primitives = require("@atlaskit/primitives"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } var MEDIA_BADGE_VISIBILITY_BREAKPOINT = 200; var containerStyles = (0, _primitives.xcss)({ display: 'flex', position: 'absolute', top: 'space.0', right: 'space.0', // eslint-disable-next-line @atlaskit/design-system/use-tokens-typography lineHeight: "var(--ds-space-200, 16px)", gap: 'space.025', zIndex: 'card', height: 'fit-content', width: 'fit-content', margin: 'space.075' }); // The above styles are used for both editor and renderer, and in renderer the // document body is the main scroll area. This means it overscrolls the primary // toolbar, where the z-index is "2". We have to hack in our own z-index less // than that to ensure our badge appears under the toolbar when scrolled. var hackedZIndexStyles = (0, _primitives.xcss)({ // @ts-ignore zIndex: '1' }); var resizeOffsetStyles = (0, _primitives.xcss)({ right: 'space.150' }); var smallBadgeStyles = (0, _primitives.xcss)({ margin: 'space.025' }); var getBadgeSize = function getBadgeSize(width, height) { // width is the original width of image, not resized or currently rendered to user. Defaulting to medium for now return width && width < 70 || height && height < 70 ? 'small' : 'medium'; }; var getBadgeVisible = function getBadgeVisible(width, height) { if (!(0, _platformFeatureFlags.fg)('platform_editor_support_media_badge_visibility')) { return true; } return width && width < MEDIA_BADGE_VISIBILITY_BREAKPOINT || height && height < MEDIA_BADGE_VISIBILITY_BREAKPOINT ? false : true; }; var MediaBadges = exports.MediaBadges = function MediaBadges(_ref) { var children = _ref.children, mediaElement = _ref.mediaElement, mediaWidth = _ref.mediaWidth, mediaHeight = _ref.mediaHeight, extendedResizeOffset = _ref.extendedResizeOffset, _ref$useMinimumZIndex = _ref.useMinimumZIndex, useMinimumZIndex = _ref$useMinimumZIndex === void 0 ? false : _ref$useMinimumZIndex; var _useState = (0, _react.useState)(getBadgeSize(mediaWidth, mediaHeight)), _useState2 = (0, _slicedToArray2.default)(_useState, 2), badgeSize = _useState2[0], setBadgeSize = _useState2[1]; var _useState3 = (0, _react.useState)(getBadgeVisible(mediaWidth, mediaHeight)), _useState4 = (0, _slicedToArray2.default)(_useState3, 2), visible = _useState4[0], setVisible = _useState4[1]; (0, _react.useEffect)(function () { var observer = new ResizeObserver((0, _debounce.default)(function (entries) { var _entries = (0, _slicedToArray2.default)(entries, 1), entry = _entries[0]; var _entry$contentRect = entry.contentRect, width = _entry$contentRect.width, height = _entry$contentRect.height; setBadgeSize(getBadgeSize(width, height)); if ((0, _platformFeatureFlags.fg)('platform_editor_support_media_badge_visibility')) { setVisible(getBadgeVisible(width, height)); } })); if (mediaElement) { // Ignored via go/ees005 // eslint-disable-next-line @atlaskit/editor/no-as-casting observer.observe(mediaElement); } return function () { observer.disconnect(); }; }, [mediaElement]); if (typeof children === 'function') { children = children({ badgeSize: badgeSize, visible: visible }); } if (!mediaElement || _react.default.Children.count(children) === 0) { return null; } return /*#__PURE__*/_react.default.createElement(_primitives.Box, { as: "div", testId: "media-badges", "data-media-badges": "true", contentEditable: false, xcss: [containerStyles, useMinimumZIndex && hackedZIndexStyles, extendedResizeOffset && resizeOffsetStyles, badgeSize === 'small' && smallBadgeStyles] }, children); };