@atlaskit/smart-card 18.0.19 → 18.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 18.0.20
4
+
5
+ ### Patch Changes
6
+
7
+ - [`451f99db28a`](https://bitbucket.org/atlassian/atlassian-frontend/commits/451f99db28a) - Flexible UI: Improve link title truncate to support url string
8
+
3
9
  ## 18.0.19
4
10
 
5
11
  ### Patch Changes
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "18.0.19",
3
+ "version": "18.0.20",
4
4
  "sideEffects": false
5
5
  }
@@ -2,6 +2,8 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
5
7
  Object.defineProperty(exports, "__esModule", {
6
8
  value: true
7
9
  });
@@ -9,7 +11,7 @@ exports.default = void 0;
9
11
 
10
12
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
13
 
12
- var _react = _interopRequireDefault(require("react"));
14
+ var _react = _interopRequireWildcard(require("react"));
13
15
 
14
16
  var _core = require("@emotion/core");
15
17
 
@@ -23,6 +25,10 @@ var _token = require("../../../../../utils/token");
23
25
 
24
26
  var _templateObject, _templateObject2, _templateObject3, _templateObject4;
25
27
 
28
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
29
+
30
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
31
+
26
32
  var DEFAULT_MAX_LINES = 2;
27
33
  var MAXIMUM_MAX_LINES = 2;
28
34
  var MINIMUM_MAX_LINES = 1;
@@ -40,9 +46,9 @@ var getThemeStyles = function getThemeStyles(theme) {
40
46
  }
41
47
  };
42
48
 
43
- var getAnchorStyles = function getAnchorStyles(size, theme, maxLines) {
49
+ var getAnchorStyles = function getAnchorStyles(size, theme, maxLines, hasSpace) {
44
50
  var sizeStyles = (0, _utils.getLinkSizeStyles)(size);
45
- return (0, _core.css)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n flex: 1 1 auto;\n ", "\n ", "\n // Theme should be last to be spread because it contains override values\n ", "\n "])), sizeStyles, (0, _utils.getTruncateStyles)(maxLines, (0, _utils.getLinkLineHeight)(size)), getThemeStyles(theme));
51
+ return (0, _core.css)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n flex: 1 1 auto;\n ", "\n ", "\n // Theme should be last to be spread because it contains override values\n ", "\n "])), sizeStyles, (0, _utils.getTruncateStyles)(maxLines, (0, _utils.getLinkLineHeight)(size), hasSpace ? 'break-word' : 'break-all'), getThemeStyles(theme));
46
52
  };
47
53
 
48
54
  var getMaxLines = function getMaxLines(maxLines) {
@@ -78,6 +84,9 @@ var Link = function Link(_ref) {
78
84
  url = _ref.url,
79
85
  onClick = _ref.onClick,
80
86
  target = _ref.target;
87
+ var hasSpace = (0, _react.useMemo)(function () {
88
+ return text ? (0, _utils.hasWhiteSpace)(text) : false;
89
+ }, [text]);
81
90
  return (0, _core.jsx)("span", {
82
91
  css: containerStyles
83
92
  }, (0, _core.jsx)(_tooltip.default, {
@@ -85,7 +94,7 @@ var Link = function Link(_ref) {
85
94
  testId: "".concat(testId, "-tooltip"),
86
95
  tag: "span"
87
96
  }, (0, _core.jsx)("a", {
88
- css: [getAnchorStyles(size, theme, getMaxLines(maxLines)), overrideCss],
97
+ css: [getAnchorStyles(size, theme, getMaxLines(maxLines), hasSpace), overrideCss],
89
98
  "data-smart-element-link": true,
90
99
  "data-testid": testId,
91
100
  onClick: onClick,
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.getTruncateStyles = exports.getMaxLines = exports.getLinkSizeStyles = exports.getLinkLineHeight = exports.getIconWidth = exports.getIconSizeStyles = exports.getFormattedMessage = void 0;
8
+ exports.hasWhiteSpace = exports.getTruncateStyles = exports.getMaxLines = exports.getLinkSizeStyles = exports.getLinkLineHeight = exports.getIconWidth = exports.getIconSizeStyles = exports.getFormattedMessage = void 0;
9
9
 
10
10
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
11
 
@@ -111,7 +111,14 @@ exports.getMaxLines = getMaxLines;
111
111
 
112
112
  var getTruncateStyles = function getTruncateStyles(maxLines) {
113
113
  var lineHeight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '1rem';
114
- return (0, _core.css)(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["\n display: -webkit-box;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-word;\n -webkit-line-clamp: ", ";\n -webkit-box-orient: vertical;\n // Fallback options\n max-height: calc(", " * ", ");\n "])), maxLines, maxLines, lineHeight);
114
+ var wordBreak = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'break-word';
115
+ return (0, _core.css)(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["\n display: -webkit-box;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: ", ";\n -webkit-line-clamp: ", ";\n -webkit-box-orient: vertical;\n // Fallback options\n max-height: calc(", " * ", ");\n "])), wordBreak, maxLines, maxLines, lineHeight);
115
116
  };
116
117
 
117
- exports.getTruncateStyles = getTruncateStyles;
118
+ exports.getTruncateStyles = getTruncateStyles;
119
+
120
+ var hasWhiteSpace = function hasWhiteSpace(str) {
121
+ return str.search(/\s/) >= 0;
122
+ };
123
+
124
+ exports.hasWhiteSpace = hasWhiteSpace;
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "18.0.19",
3
+ "version": "18.0.20",
4
4
  "sideEffects": false
5
5
  }
@@ -1,9 +1,9 @@
1
1
  /** @jsx jsx */
2
- import React from 'react';
2
+ import React, { useMemo } from 'react';
3
3
  import { css, jsx } from '@emotion/core';
4
4
  import Tooltip from '@atlaskit/tooltip';
5
5
  import { SmartLinkSize, SmartLinkTheme } from '../../../../../constants';
6
- import { getLinkLineHeight, getLinkSizeStyles, getTruncateStyles } from '../../utils';
6
+ import { getLinkLineHeight, getLinkSizeStyles, getTruncateStyles, hasWhiteSpace } from '../../utils';
7
7
  import { tokens } from '../../../../../utils/token';
8
8
  const DEFAULT_MAX_LINES = 2;
9
9
  const MAXIMUM_MAX_LINES = 2;
@@ -42,12 +42,12 @@ const getThemeStyles = theme => {
42
42
  }
43
43
  };
44
44
 
45
- const getAnchorStyles = (size, theme, maxLines) => {
45
+ const getAnchorStyles = (size, theme, maxLines, hasSpace) => {
46
46
  const sizeStyles = getLinkSizeStyles(size);
47
47
  return css`
48
48
  flex: 1 1 auto;
49
49
  ${sizeStyles}
50
- ${getTruncateStyles(maxLines, getLinkLineHeight(size))}
50
+ ${getTruncateStyles(maxLines, getLinkLineHeight(size), hasSpace ? 'break-word' : 'break-all')}
51
51
  // Theme should be last to be spread because it contains override values
52
52
  ${getThemeStyles(theme)}
53
53
  `;
@@ -82,19 +82,22 @@ const Link = ({
82
82
  url,
83
83
  onClick,
84
84
  target
85
- }) => jsx("span", {
86
- css: containerStyles
87
- }, jsx(Tooltip, {
88
- content: text,
89
- testId: `${testId}-tooltip`,
90
- tag: "span"
91
- }, jsx("a", {
92
- css: [getAnchorStyles(size, theme, getMaxLines(maxLines)), overrideCss],
93
- "data-smart-element-link": true,
94
- "data-testid": testId,
95
- onClick: onClick,
96
- href: url,
97
- target: target || '_blank'
98
- }, text)));
85
+ }) => {
86
+ const hasSpace = useMemo(() => text ? hasWhiteSpace(text) : false, [text]);
87
+ return jsx("span", {
88
+ css: containerStyles
89
+ }, jsx(Tooltip, {
90
+ content: text,
91
+ testId: `${testId}-tooltip`,
92
+ tag: "span"
93
+ }, jsx("a", {
94
+ css: [getAnchorStyles(size, theme, getMaxLines(maxLines), hasSpace), overrideCss],
95
+ "data-smart-element-link": true,
96
+ "data-testid": testId,
97
+ onClick: onClick,
98
+ href: url,
99
+ target: target || '_blank'
100
+ }, text)));
101
+ };
99
102
 
100
103
  export default Link;
@@ -107,13 +107,16 @@ export const getMaxLines = (value, defaultValue, max, min) => {
107
107
 
108
108
  return value;
109
109
  };
110
- export const getTruncateStyles = (maxLines, lineHeight = '1rem') => css`
110
+ export const getTruncateStyles = (maxLines, lineHeight = '1rem', wordBreak = 'break-word') => css`
111
111
  display: -webkit-box;
112
112
  overflow: hidden;
113
113
  text-overflow: ellipsis;
114
- word-break: break-word;
114
+ word-break: ${wordBreak};
115
115
  -webkit-line-clamp: ${maxLines};
116
116
  -webkit-box-orient: vertical;
117
117
  // Fallback options
118
118
  max-height: calc(${maxLines} * ${lineHeight});
119
- `;
119
+ `;
120
+ export const hasWhiteSpace = str => {
121
+ return str.search(/\s/) >= 0;
122
+ };
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "18.0.19",
3
+ "version": "18.0.20",
4
4
  "sideEffects": false
5
5
  }
@@ -3,11 +3,11 @@ import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral
3
3
  var _templateObject, _templateObject2, _templateObject3, _templateObject4;
4
4
 
5
5
  /** @jsx jsx */
6
- import React from 'react';
6
+ import React, { useMemo } from 'react';
7
7
  import { css, jsx } from '@emotion/core';
8
8
  import Tooltip from '@atlaskit/tooltip';
9
9
  import { SmartLinkSize, SmartLinkTheme } from '../../../../../constants';
10
- import { getLinkLineHeight, getLinkSizeStyles, getTruncateStyles } from '../../utils';
10
+ import { getLinkLineHeight, getLinkSizeStyles, getTruncateStyles, hasWhiteSpace } from '../../utils';
11
11
  import { tokens } from '../../../../../utils/token';
12
12
  var DEFAULT_MAX_LINES = 2;
13
13
  var MAXIMUM_MAX_LINES = 2;
@@ -26,9 +26,9 @@ var getThemeStyles = function getThemeStyles(theme) {
26
26
  }
27
27
  };
28
28
 
29
- var getAnchorStyles = function getAnchorStyles(size, theme, maxLines) {
29
+ var getAnchorStyles = function getAnchorStyles(size, theme, maxLines, hasSpace) {
30
30
  var sizeStyles = getLinkSizeStyles(size);
31
- return css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n flex: 1 1 auto;\n ", "\n ", "\n // Theme should be last to be spread because it contains override values\n ", "\n "])), sizeStyles, getTruncateStyles(maxLines, getLinkLineHeight(size)), getThemeStyles(theme));
31
+ return css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n flex: 1 1 auto;\n ", "\n ", "\n // Theme should be last to be spread because it contains override values\n ", "\n "])), sizeStyles, getTruncateStyles(maxLines, getLinkLineHeight(size), hasSpace ? 'break-word' : 'break-all'), getThemeStyles(theme));
32
32
  };
33
33
 
34
34
  var getMaxLines = function getMaxLines(maxLines) {
@@ -64,6 +64,9 @@ var Link = function Link(_ref) {
64
64
  url = _ref.url,
65
65
  onClick = _ref.onClick,
66
66
  target = _ref.target;
67
+ var hasSpace = useMemo(function () {
68
+ return text ? hasWhiteSpace(text) : false;
69
+ }, [text]);
67
70
  return jsx("span", {
68
71
  css: containerStyles
69
72
  }, jsx(Tooltip, {
@@ -71,7 +74,7 @@ var Link = function Link(_ref) {
71
74
  testId: "".concat(testId, "-tooltip"),
72
75
  tag: "span"
73
76
  }, jsx("a", {
74
- css: [getAnchorStyles(size, theme, getMaxLines(maxLines)), overrideCss],
77
+ css: [getAnchorStyles(size, theme, getMaxLines(maxLines), hasSpace), overrideCss],
75
78
  "data-smart-element-link": true,
76
79
  "data-testid": testId,
77
80
  onClick: onClick,
@@ -80,5 +80,9 @@ export var getMaxLines = function getMaxLines(value, defaultValue, max, min) {
80
80
  };
81
81
  export var getTruncateStyles = function getTruncateStyles(maxLines) {
82
82
  var lineHeight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '1rem';
83
- return css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n display: -webkit-box;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-word;\n -webkit-line-clamp: ", ";\n -webkit-box-orient: vertical;\n // Fallback options\n max-height: calc(", " * ", ");\n "])), maxLines, maxLines, lineHeight);
83
+ var wordBreak = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'break-word';
84
+ return css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n display: -webkit-box;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: ", ";\n -webkit-line-clamp: ", ";\n -webkit-box-orient: vertical;\n // Fallback options\n max-height: calc(", " * ", ");\n "])), wordBreak, maxLines, maxLines, lineHeight);
85
+ };
86
+ export var hasWhiteSpace = function hasWhiteSpace(str) {
87
+ return str.search(/\s/) >= 0;
84
88
  };
@@ -8,4 +8,5 @@ export declare const getIconWidth: (size?: SmartLinkSize | undefined) => string;
8
8
  export declare const getLinkLineHeight: (size: SmartLinkSize) => string;
9
9
  export declare const getLinkSizeStyles: (size: SmartLinkSize) => SerializedStyles;
10
10
  export declare const getMaxLines: (value: number, defaultValue: number, max: number, min: number) => number;
11
- export declare const getTruncateStyles: (maxLines: number, lineHeight?: string) => SerializedStyles;
11
+ export declare const getTruncateStyles: (maxLines: number, lineHeight?: string, wordBreak?: 'break-word' | 'break-all') => SerializedStyles;
12
+ export declare const hasWhiteSpace: (str: string) => boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "18.0.19",
3
+ "version": "18.0.20",
4
4
  "description": "Smart card component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"