@atlaskit/link-picker 1.27.2 → 1.28.1

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 (36) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/compass.yml +1 -1
  3. package/dist/cjs/common/utils/analytics/analytics.codegen.js +1 -1
  4. package/dist/cjs/ui/index.js +2 -3
  5. package/dist/cjs/ui/link-picker/form-footer/feature-discovery/index.js +52 -0
  6. package/dist/cjs/ui/link-picker/form-footer/feature-discovery/styled.js +16 -0
  7. package/dist/cjs/ui/link-picker/form-footer/index.js +21 -11
  8. package/dist/cjs/ui/link-picker/index.js +12 -3
  9. package/dist/cjs/version.json +1 -1
  10. package/dist/es2019/common/utils/analytics/analytics.codegen.js +1 -1
  11. package/dist/es2019/ui/index.js +2 -3
  12. package/dist/es2019/ui/link-picker/form-footer/feature-discovery/index.js +41 -0
  13. package/dist/es2019/ui/link-picker/form-footer/feature-discovery/styled.js +15 -0
  14. package/dist/es2019/ui/link-picker/form-footer/index.js +15 -8
  15. package/dist/es2019/ui/link-picker/index.js +11 -2
  16. package/dist/es2019/version.json +1 -1
  17. package/dist/esm/common/utils/analytics/analytics.codegen.js +1 -1
  18. package/dist/esm/ui/index.js +2 -3
  19. package/dist/esm/ui/link-picker/form-footer/feature-discovery/index.js +44 -0
  20. package/dist/esm/ui/link-picker/form-footer/feature-discovery/styled.js +8 -0
  21. package/dist/esm/ui/link-picker/form-footer/index.js +21 -11
  22. package/dist/esm/ui/link-picker/index.js +12 -3
  23. package/dist/esm/version.json +1 -1
  24. package/dist/types/common/types.d.ts +1 -0
  25. package/dist/types/common/utils/analytics/analytics.codegen.d.ts +2 -2
  26. package/dist/types/ui/link-picker/form-footer/feature-discovery/index.d.ts +15 -0
  27. package/dist/types/ui/link-picker/form-footer/feature-discovery/styled.d.ts +1 -0
  28. package/dist/types/ui/link-picker/form-footer/index.d.ts +4 -1
  29. package/dist/types/ui/link-picker/index.d.ts +1 -0
  30. package/dist/types-ts4.5/common/types.d.ts +1 -0
  31. package/dist/types-ts4.5/common/utils/analytics/analytics.codegen.d.ts +2 -2
  32. package/dist/types-ts4.5/ui/link-picker/form-footer/feature-discovery/index.d.ts +15 -0
  33. package/dist/types-ts4.5/ui/link-picker/form-footer/feature-discovery/styled.d.ts +1 -0
  34. package/dist/types-ts4.5/ui/link-picker/form-footer/index.d.ts +4 -1
  35. package/dist/types-ts4.5/ui/link-picker/index.d.ts +1 -0
  36. package/package.json +10 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlaskit/link-picker
2
2
 
3
+ ## 1.28.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`f01deb5e6ab`](https://bitbucket.org/atlassian/atlassian-frontend/commits/f01deb5e6ab) - Use injected env vars instead of version.json
8
+
9
+ ## 1.28.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [`db2a42eb771`](https://bitbucket.org/atlassian/atlassian-frontend/commits/db2a42eb771) - [ux] EDM-7273 Jira create feature discovery
14
+
3
15
  ## 1.27.2
4
16
 
5
17
  ### Patch Changes
package/compass.yml CHANGED
@@ -21,7 +21,7 @@ links:
21
21
  url: 'https://product-fabric.atlassian.net/jira/software/c/projects/EDM/boards/893'
22
22
  - name: ''
23
23
  type: ON_CALL
24
- url: 'https://atlassian.app.opsgenie.com/settings/schedule/detail/98927e5e-f400-41a3-bdd1-b580c9b1d78b'
24
+ url: 'https://atlassian.app.opsgenie.com/settings/schedule/detail/b9c8b313-dd6d-4a41-8eeb-d7a9df55be9d'
25
25
  - name: ''
26
26
  type: DASHBOARD
27
27
  url: 'https://atlassian.signalfx.com/#/dashboard/EXwrMgYAwAA?groupId=EXwtbIrA4AA&configId=EXwrNLcA4AA'
@@ -11,7 +11,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
11
11
  *
12
12
  * Generates Typescript types for analytics events from analytics.spec.yaml
13
13
  *
14
- * @codegen <<SignedSource::e7a81d0d46e015c9728ae9557b47040f>>
14
+ * @codegen <<SignedSource::cd5b926575a5c379425d0d72e5339f12>>
15
15
  * @codegenCommand yarn workspace @atlaskit/link-picker run codegen-analytics
16
16
  */
17
17
 
@@ -14,7 +14,6 @@ var _analyticsNext = require("@atlaskit/analytics-next");
14
14
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
15
15
  var _constants = require("../common/constants");
16
16
  var _sessionProvider = require("../controllers/session-provider");
17
- var _version = require("../version.json");
18
17
  var _errorBoundary = require("./error-boundary");
19
18
  var _loaderFallback = require("./loader-fallback");
20
19
  var _messagesProvider = require("./messages-provider");
@@ -26,8 +25,8 @@ var testIds = {
26
25
  };
27
26
  exports.testIds = testIds;
28
27
  var PACKAGE_DATA = {
29
- packageName: _version.name,
30
- packageVersion: _version.version,
28
+ packageName: "@atlaskit/link-picker",
29
+ packageVersion: "1.28.1",
31
30
  componentName: _constants.COMPONENT_NAME,
32
31
  source: _constants.COMPONENT_NAME
33
32
  };
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = require("react");
8
+ var _react2 = require("@emotion/react");
9
+ var _storageClient = require("@atlaskit/frontend-utilities/storage-client");
10
+ var _styled = require("./styled");
11
+ /** @jsx jsx */
12
+
13
+ var LOCAL_STORAGE_CLIENT_KEY = '@atlaskit/link-picker';
14
+ var LOCAL_STORAGE_DISCOVERY_KEY = 'action-discovery-jira-create';
15
+ var LOCAL_STORAGE_DISCOVERY_VALUE = 'discovered';
16
+ var LOCAL_STORAGE_DISCOVERY_EXPIRY_IN_MS = 15552000000; // 180 days
17
+
18
+ /**
19
+ * This is a hacky solution to help with the feature discovery.
20
+ * This implementation must be removed once the experiment is completed.
21
+ *
22
+ * Cleanup ticket:
23
+ * https://product-fabric.atlassian.net/browse/EDM-7480
24
+ */
25
+ var FeatureDiscovery = function FeatureDiscovery(_ref) {
26
+ var children = _ref.children,
27
+ testId = _ref.testId;
28
+ var storageClient = (0, _react.useMemo)(function () {
29
+ return new _storageClient.StorageClient(LOCAL_STORAGE_CLIENT_KEY);
30
+ }, []);
31
+ // Set this to `false` if you want to always show the feature discovery pulse.
32
+ // (or open Application tab in your devtools and delete the relevent row)
33
+ var discovered = (0, _react.useMemo)(function () {
34
+ return storageClient.getItem(LOCAL_STORAGE_DISCOVERY_KEY) === LOCAL_STORAGE_DISCOVERY_VALUE;
35
+ }, [storageClient]);
36
+ (0, _react.useEffect)(function () {
37
+ return function () {
38
+ if (!discovered) {
39
+ storageClient.setItemWithExpiry(LOCAL_STORAGE_DISCOVERY_KEY, LOCAL_STORAGE_DISCOVERY_VALUE, LOCAL_STORAGE_DISCOVERY_EXPIRY_IN_MS);
40
+ }
41
+ };
42
+ }, [storageClient, discovered]);
43
+ if (discovered) {
44
+ return children;
45
+ }
46
+ return (0, _react2.jsx)("span", {
47
+ css: _styled.pulseStyles,
48
+ "data-testid": "".concat(testId, "-discovery")
49
+ }, children);
50
+ };
51
+ var _default = FeatureDiscovery;
52
+ exports.default = _default;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.pulseStyles = void 0;
8
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
9
+ var _react = require("@emotion/react");
10
+ var _templateObject, _templateObject2;
11
+ var pulseKeyframes = (0, _react.keyframes)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n to {\n box-shadow: 0 0 0 7px rgba(0, 0, 0, 0);\n }\n"])));
12
+
13
+ // Styling from atlassian-frontend/packages/design-system/onboarding/src/styled/target.tsx
14
+ var pulseColor = 'rgb(101, 84, 192)';
15
+ var pulseStyles = (0, _react.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n display: inline-flex;\n border-radius: 3px;\n box-shadow: 0 0 0 0 ", ";\n animation: ", " 1.45s cubic-bezier(0.5, 0, 0, 1) infinite;\n"])), pulseColor, pulseKeyframes);
16
+ exports.pulseStyles = pulseStyles;
@@ -14,9 +14,10 @@ var _reactIntlNext = require("react-intl-next");
14
14
  var _button = _interopRequireWildcard(require("@atlaskit/button"));
15
15
  var _add = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/add"));
16
16
  var _errors = require("../../../common/utils/errors");
17
+ var _featureDiscovery = _interopRequireDefault(require("./feature-discovery"));
17
18
  var _styled = require("./styled");
18
19
  var _utils = require("./utils");
19
- var _excluded = ["isLoading", "error", "url", "queryState", "items", "isEditing", "onCancel", "action"];
20
+ var _excluded = ["isLoading", "error", "url", "queryState", "items", "isEditing", "onCancel", "action", "createFeatureDiscovery"];
20
21
  /** @jsx jsx */
21
22
  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); }
22
23
  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; }
@@ -40,7 +41,9 @@ var messages = (0, _reactIntlNext.defineMessages)({
40
41
  var testIds = {
41
42
  insertButton: 'link-picker-insert-button',
42
43
  cancelButton: 'link-picker-cancel-button',
43
- actionButton: 'link-picker-action-button'
44
+ actionButton: 'link-picker-action-button',
45
+ /** Feature discovery for action button (css pulse) */
46
+ actionButtonDiscovery: 'link-picker-action-button-discovery'
44
47
  };
45
48
  exports.testIds = testIds;
46
49
  var FormFooter = /*#__PURE__*/(0, _react.memo)(function (_ref) {
@@ -52,6 +55,8 @@ var FormFooter = /*#__PURE__*/(0, _react.memo)(function (_ref) {
52
55
  isEditing = _ref.isEditing,
53
56
  onCancel = _ref.onCancel,
54
57
  action = _ref.action,
58
+ _ref$createFeatureDis = _ref.createFeatureDiscovery,
59
+ createFeatureDiscovery = _ref$createFeatureDis === void 0 ? false : _ref$createFeatureDis,
55
60
  restProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
56
61
  var intl = (0, _reactIntlNext.useIntl)();
57
62
  if (error && error instanceof _errors.UnauthenticatedError) {
@@ -59,19 +64,24 @@ var FormFooter = /*#__PURE__*/(0, _react.memo)(function (_ref) {
59
64
  }
60
65
  var isSubmitDisabled = (0, _utils.checkSubmitDisabled)(isLoading, error, url, queryState, items);
61
66
  var insertButtonMsg = isEditing ? messages.saveButton : messages.insertButton;
67
+ var createButton = function createButton(pluginAction) {
68
+ return (0, _react2.jsx)(_button.default, {
69
+ testId: testIds.actionButton,
70
+ onClick: pluginAction.callback,
71
+ appearance: "default",
72
+ iconBefore: (0, _react2.jsx)(_add.default, {
73
+ label: "",
74
+ size: "medium"
75
+ })
76
+ }, typeof pluginAction.label === 'string' ? pluginAction.label : intl.formatMessage(pluginAction.label));
77
+ };
62
78
  return (0, _react2.jsx)("footer", (0, _extends2.default)({
63
79
  css: _styled.formFooterStyles
64
80
  }, restProps), action && (0, _react2.jsx)("div", {
65
81
  css: _styled.formFooterActionStyles
66
- }, (0, _react2.jsx)(_button.default, {
67
- testId: testIds.actionButton,
68
- onClick: action.callback,
69
- appearance: "default",
70
- iconBefore: (0, _react2.jsx)(_add.default, {
71
- label: "",
72
- size: "medium"
73
- })
74
- }, typeof action.label === 'string' ? action.label : intl.formatMessage(action.label))), (0, _react2.jsx)(_button.ButtonGroup, null, (0, _react2.jsx)(_button.default, {
82
+ }, createFeatureDiscovery ? (0, _react2.jsx)(_featureDiscovery.default, {
83
+ testId: testIds.actionButtonDiscovery
84
+ }, createButton(action)) : createButton(action)), (0, _react2.jsx)(_button.ButtonGroup, null, (0, _react2.jsx)(_button.default, {
75
85
  appearance: "subtle",
76
86
  onClick: onCancel,
77
87
  testId: testIds.cancelButton
@@ -13,6 +13,7 @@ var _reactIntlNext = require("react-intl-next");
13
13
  var _analyticsNext = require("@atlaskit/analytics-next");
14
14
  var _url2 = require("@atlaskit/linking-common/url");
15
15
  var _userAgent = require("@atlaskit/linking-common/user-agent");
16
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
16
17
  var _visuallyHidden = _interopRequireDefault(require("@atlaskit/visually-hidden"));
17
18
  var _analytics = require("../../common/analytics");
18
19
  var _constants = require("../../common/constants");
@@ -44,13 +45,17 @@ var initState = {
44
45
  selectedIndex: -1,
45
46
  invalidUrl: false,
46
47
  activeTab: 0,
47
- preventHidingRecents: false
48
+ preventHidingRecents: false,
49
+ /** This only allows the feature discovery pulse - to be shown the ff must be on and active tab be Jira */
50
+ allowCreateFeatureDiscovery: true
48
51
  };
49
52
  function reducer(state, payload) {
50
53
  if (payload.url && state.url !== payload.url) {
51
54
  return _objectSpread(_objectSpread({}, state), {}, {
52
55
  invalidUrl: false,
53
- selectedIndex: (0, _url2.isSafeUrl)(payload.url) && payload.url.length ? -1 : state.selectedIndex
56
+ selectedIndex: (0, _url2.isSafeUrl)(payload.url) && payload.url.length ? -1 : state.selectedIndex,
57
+ /** When the user starts entering a url, stop pulsing the create button */
58
+ allowCreateFeatureDiscovery: false
54
59
  }, payload);
55
60
  }
56
61
  return _objectSpread(_objectSpread({}, state), payload);
@@ -96,7 +101,8 @@ var LinkPicker = (0, _analytics.withLinkPickerAnalyticsContext)( /*#__PURE__*/(0
96
101
  url = state.url,
97
102
  displayText = state.displayText,
98
103
  invalidUrl = state.invalidUrl,
99
- activeTab = state.activeTab;
104
+ activeTab = state.activeTab,
105
+ allowCreateFeatureDiscovery = state.allowCreateFeatureDiscovery;
100
106
  var intl = (0, _reactIntlNext.useIntl)();
101
107
  var queryState = (0, _useSearchQuery.useSearchQuery)(state);
102
108
  var _usePlugins = (0, _usePlugins2.usePlugins)(queryState, activeTab, plugins),
@@ -345,6 +351,9 @@ var LinkPicker = (0, _analytics.withLinkPickerAnalyticsContext)( /*#__PURE__*/(0
345
351
  onCancel: onCancel,
346
352
  action: pluginAction,
347
353
  css: !queryState || !(plugins !== null && plugins !== void 0 && plugins.length) ? _styled.formFooterMargin : undefined
354
+ /* Show the feature discovery pulse when we're on the Jira tab, we haven't started typing a url and
355
+ the feature flag is enabled */,
356
+ createFeatureDiscovery: (activePlugin === null || activePlugin === void 0 ? void 0 : activePlugin.tabKey) === 'jira' && allowCreateFeatureDiscovery && (0, _platformFeatureFlags.getBooleanFF)('platform.linking-platform.link-picker.enable-jira-create')
348
357
  }));
349
358
  }));
350
359
  exports.LinkPicker = LinkPicker;
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/link-picker",
3
- "version": "1.27.2",
3
+ "version": "1.28.1",
4
4
  "sideEffects": false
5
5
  }
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Generates Typescript types for analytics events from analytics.spec.yaml
5
5
  *
6
- * @codegen <<SignedSource::e7a81d0d46e015c9728ae9557b47040f>>
6
+ * @codegen <<SignedSource::cd5b926575a5c379425d0d72e5339f12>>
7
7
  * @codegenCommand yarn workspace @atlaskit/link-picker run codegen-analytics
8
8
  */
9
9
 
@@ -7,7 +7,6 @@ import { AnalyticsContext } from '@atlaskit/analytics-next';
7
7
  import { getBooleanFF } from '@atlaskit/platform-feature-flags';
8
8
  import { COMPONENT_NAME } from '../common/constants';
9
9
  import { LinkPickerSessionProvider } from '../controllers/session-provider';
10
- import { name as packageName, version as packageVersion } from '../version.json';
11
10
  import { ErrorBoundary } from './error-boundary';
12
11
  import { LoaderFallback } from './loader-fallback';
13
12
  import { MessagesProvider } from './messages-provider';
@@ -16,8 +15,8 @@ export const testIds = {
16
15
  linkPickerRoot: 'link-picker-root'
17
16
  };
18
17
  export const PACKAGE_DATA = {
19
- packageName,
20
- packageVersion,
18
+ packageName: "@atlaskit/link-picker",
19
+ packageVersion: "1.28.1",
21
20
  componentName: COMPONENT_NAME,
22
21
  source: COMPONENT_NAME
23
22
  };
@@ -0,0 +1,41 @@
1
+ /** @jsx jsx */
2
+ import { useEffect, useMemo } from 'react';
3
+ import { jsx } from '@emotion/react';
4
+ import { StorageClient } from '@atlaskit/frontend-utilities/storage-client';
5
+ import { pulseStyles } from './styled';
6
+ const LOCAL_STORAGE_CLIENT_KEY = '@atlaskit/link-picker';
7
+ const LOCAL_STORAGE_DISCOVERY_KEY = 'action-discovery-jira-create';
8
+ const LOCAL_STORAGE_DISCOVERY_VALUE = 'discovered';
9
+ const LOCAL_STORAGE_DISCOVERY_EXPIRY_IN_MS = 15552000000; // 180 days
10
+
11
+ /**
12
+ * This is a hacky solution to help with the feature discovery.
13
+ * This implementation must be removed once the experiment is completed.
14
+ *
15
+ * Cleanup ticket:
16
+ * https://product-fabric.atlassian.net/browse/EDM-7480
17
+ */
18
+ const FeatureDiscovery = ({
19
+ children,
20
+ testId
21
+ }) => {
22
+ const storageClient = useMemo(() => new StorageClient(LOCAL_STORAGE_CLIENT_KEY), []);
23
+ // Set this to `false` if you want to always show the feature discovery pulse.
24
+ // (or open Application tab in your devtools and delete the relevent row)
25
+ const discovered = useMemo(() => storageClient.getItem(LOCAL_STORAGE_DISCOVERY_KEY) === LOCAL_STORAGE_DISCOVERY_VALUE, [storageClient]);
26
+ useEffect(() => {
27
+ return () => {
28
+ if (!discovered) {
29
+ storageClient.setItemWithExpiry(LOCAL_STORAGE_DISCOVERY_KEY, LOCAL_STORAGE_DISCOVERY_VALUE, LOCAL_STORAGE_DISCOVERY_EXPIRY_IN_MS);
30
+ }
31
+ };
32
+ }, [storageClient, discovered]);
33
+ if (discovered) {
34
+ return children;
35
+ }
36
+ return jsx("span", {
37
+ css: pulseStyles,
38
+ "data-testid": `${testId}-discovery`
39
+ }, children);
40
+ };
41
+ export default FeatureDiscovery;
@@ -0,0 +1,15 @@
1
+ import { css, keyframes } from '@emotion/react';
2
+ const pulseKeyframes = keyframes`
3
+ to {
4
+ box-shadow: 0 0 0 7px rgba(0, 0, 0, 0);
5
+ }
6
+ `;
7
+
8
+ // Styling from atlassian-frontend/packages/design-system/onboarding/src/styled/target.tsx
9
+ const pulseColor = 'rgb(101, 84, 192)';
10
+ export const pulseStyles = css`
11
+ display: inline-flex;
12
+ border-radius: 3px;
13
+ box-shadow: 0 0 0 0 ${pulseColor};
14
+ animation: ${pulseKeyframes} 1.45s cubic-bezier(0.5, 0, 0, 1) infinite;
15
+ `;
@@ -6,6 +6,7 @@ import { defineMessages, useIntl } from 'react-intl-next';
6
6
  import Button, { ButtonGroup } from '@atlaskit/button';
7
7
  import EditorAddIcon from '@atlaskit/icon/glyph/editor/add';
8
8
  import { UnauthenticatedError } from '../../../common/utils/errors';
9
+ import FeatureDiscovery from './feature-discovery';
9
10
  import { formFooterActionStyles, formFooterStyles } from './styled';
10
11
  import { checkSubmitDisabled } from './utils';
11
12
  const messages = defineMessages({
@@ -28,7 +29,9 @@ const messages = defineMessages({
28
29
  export const testIds = {
29
30
  insertButton: 'link-picker-insert-button',
30
31
  cancelButton: 'link-picker-cancel-button',
31
- actionButton: 'link-picker-action-button'
32
+ actionButton: 'link-picker-action-button',
33
+ /** Feature discovery for action button (css pulse) */
34
+ actionButtonDiscovery: 'link-picker-action-button-discovery'
32
35
  };
33
36
  export const FormFooter = /*#__PURE__*/memo(({
34
37
  isLoading,
@@ -39,6 +42,7 @@ export const FormFooter = /*#__PURE__*/memo(({
39
42
  isEditing,
40
43
  onCancel,
41
44
  action,
45
+ createFeatureDiscovery = false,
42
46
  ...restProps
43
47
  }) => {
44
48
  const intl = useIntl();
@@ -47,19 +51,22 @@ export const FormFooter = /*#__PURE__*/memo(({
47
51
  }
48
52
  const isSubmitDisabled = checkSubmitDisabled(isLoading, error, url, queryState, items);
49
53
  const insertButtonMsg = isEditing ? messages.saveButton : messages.insertButton;
50
- return jsx("footer", _extends({
51
- css: formFooterStyles
52
- }, restProps), action && jsx("div", {
53
- css: formFooterActionStyles
54
- }, jsx(Button, {
54
+ const createButton = pluginAction => jsx(Button, {
55
55
  testId: testIds.actionButton,
56
- onClick: action.callback,
56
+ onClick: pluginAction.callback,
57
57
  appearance: "default",
58
58
  iconBefore: jsx(EditorAddIcon, {
59
59
  label: "",
60
60
  size: "medium"
61
61
  })
62
- }, typeof action.label === 'string' ? action.label : intl.formatMessage(action.label))), jsx(ButtonGroup, null, jsx(Button, {
62
+ }, typeof pluginAction.label === 'string' ? pluginAction.label : intl.formatMessage(pluginAction.label));
63
+ return jsx("footer", _extends({
64
+ css: formFooterStyles
65
+ }, restProps), action && jsx("div", {
66
+ css: formFooterActionStyles
67
+ }, createFeatureDiscovery ? jsx(FeatureDiscovery, {
68
+ testId: testIds.actionButtonDiscovery
69
+ }, createButton(action)) : createButton(action)), jsx(ButtonGroup, null, jsx(Button, {
63
70
  appearance: "subtle",
64
71
  onClick: onCancel,
65
72
  testId: testIds.cancelButton
@@ -5,6 +5,7 @@ import { FormattedMessage, useIntl } from 'react-intl-next';
5
5
  import { useAnalyticsEvents } from '@atlaskit/analytics-next';
6
6
  import { isSafeUrl, normalizeUrl } from '@atlaskit/linking-common/url';
7
7
  import { browser } from '@atlaskit/linking-common/user-agent';
8
+ import { getBooleanFF } from '@atlaskit/platform-feature-flags';
8
9
  import VisuallyHidden from '@atlaskit/visually-hidden';
9
10
  import { useLinkPickerAnalytics, withInputFieldTracking, withLinkPickerAnalyticsContext } from '../../common/analytics';
10
11
  import { ANALYTICS_CHANNEL } from '../../common/constants';
@@ -36,7 +37,9 @@ const initState = {
36
37
  selectedIndex: -1,
37
38
  invalidUrl: false,
38
39
  activeTab: 0,
39
- preventHidingRecents: false
40
+ preventHidingRecents: false,
41
+ /** This only allows the feature discovery pulse - to be shown the ff must be on and active tab be Jira */
42
+ allowCreateFeatureDiscovery: true
40
43
  };
41
44
  function reducer(state, payload) {
42
45
  if (payload.url && state.url !== payload.url) {
@@ -44,6 +47,8 @@ function reducer(state, payload) {
44
47
  ...state,
45
48
  invalidUrl: false,
46
49
  selectedIndex: isSafeUrl(payload.url) && payload.url.length ? -1 : state.selectedIndex,
50
+ /** When the user starts entering a url, stop pulsing the create button */
51
+ allowCreateFeatureDiscovery: false,
47
52
  ...payload
48
53
  };
49
54
  }
@@ -93,7 +98,8 @@ export const LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(({
93
98
  url,
94
99
  displayText,
95
100
  invalidUrl,
96
- activeTab
101
+ activeTab,
102
+ allowCreateFeatureDiscovery
97
103
  } = state;
98
104
  const intl = useIntl();
99
105
  const queryState = useSearchQuery(state);
@@ -345,5 +351,8 @@ export const LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(({
345
351
  onCancel: onCancel,
346
352
  action: pluginAction,
347
353
  css: !queryState || !(plugins !== null && plugins !== void 0 && plugins.length) ? formFooterMargin : undefined
354
+ /* Show the feature discovery pulse when we're on the Jira tab, we haven't started typing a url and
355
+ the feature flag is enabled */,
356
+ createFeatureDiscovery: (activePlugin === null || activePlugin === void 0 ? void 0 : activePlugin.tabKey) === 'jira' && allowCreateFeatureDiscovery && getBooleanFF('platform.linking-platform.link-picker.enable-jira-create')
348
357
  }));
349
358
  }));
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/link-picker",
3
- "version": "1.27.2",
3
+ "version": "1.28.1",
4
4
  "sideEffects": false
5
5
  }
@@ -4,7 +4,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  *
5
5
  * Generates Typescript types for analytics events from analytics.spec.yaml
6
6
  *
7
- * @codegen <<SignedSource::e7a81d0d46e015c9728ae9557b47040f>>
7
+ * @codegen <<SignedSource::cd5b926575a5c379425d0d72e5339f12>>
8
8
  * @codegenCommand yarn workspace @atlaskit/link-picker run codegen-analytics
9
9
  */
10
10
 
@@ -7,7 +7,6 @@ import { AnalyticsContext } from '@atlaskit/analytics-next';
7
7
  import { getBooleanFF } from '@atlaskit/platform-feature-flags';
8
8
  import { COMPONENT_NAME } from '../common/constants';
9
9
  import { LinkPickerSessionProvider } from '../controllers/session-provider';
10
- import { name as packageName, version as packageVersion } from '../version.json';
11
10
  import { ErrorBoundary } from './error-boundary';
12
11
  import { LoaderFallback } from './loader-fallback';
13
12
  import { MessagesProvider } from './messages-provider';
@@ -16,8 +15,8 @@ export var testIds = {
16
15
  linkPickerRoot: 'link-picker-root'
17
16
  };
18
17
  export var PACKAGE_DATA = {
19
- packageName: packageName,
20
- packageVersion: packageVersion,
18
+ packageName: "@atlaskit/link-picker",
19
+ packageVersion: "1.28.1",
21
20
  componentName: COMPONENT_NAME,
22
21
  source: COMPONENT_NAME
23
22
  };
@@ -0,0 +1,44 @@
1
+ /** @jsx jsx */
2
+ import { useEffect, useMemo } from 'react';
3
+ import { jsx } from '@emotion/react';
4
+ import { StorageClient } from '@atlaskit/frontend-utilities/storage-client';
5
+ import { pulseStyles } from './styled';
6
+ var LOCAL_STORAGE_CLIENT_KEY = '@atlaskit/link-picker';
7
+ var LOCAL_STORAGE_DISCOVERY_KEY = 'action-discovery-jira-create';
8
+ var LOCAL_STORAGE_DISCOVERY_VALUE = 'discovered';
9
+ var LOCAL_STORAGE_DISCOVERY_EXPIRY_IN_MS = 15552000000; // 180 days
10
+
11
+ /**
12
+ * This is a hacky solution to help with the feature discovery.
13
+ * This implementation must be removed once the experiment is completed.
14
+ *
15
+ * Cleanup ticket:
16
+ * https://product-fabric.atlassian.net/browse/EDM-7480
17
+ */
18
+ var FeatureDiscovery = function FeatureDiscovery(_ref) {
19
+ var children = _ref.children,
20
+ testId = _ref.testId;
21
+ var storageClient = useMemo(function () {
22
+ return new StorageClient(LOCAL_STORAGE_CLIENT_KEY);
23
+ }, []);
24
+ // Set this to `false` if you want to always show the feature discovery pulse.
25
+ // (or open Application tab in your devtools and delete the relevent row)
26
+ var discovered = useMemo(function () {
27
+ return storageClient.getItem(LOCAL_STORAGE_DISCOVERY_KEY) === LOCAL_STORAGE_DISCOVERY_VALUE;
28
+ }, [storageClient]);
29
+ useEffect(function () {
30
+ return function () {
31
+ if (!discovered) {
32
+ storageClient.setItemWithExpiry(LOCAL_STORAGE_DISCOVERY_KEY, LOCAL_STORAGE_DISCOVERY_VALUE, LOCAL_STORAGE_DISCOVERY_EXPIRY_IN_MS);
33
+ }
34
+ };
35
+ }, [storageClient, discovered]);
36
+ if (discovered) {
37
+ return children;
38
+ }
39
+ return jsx("span", {
40
+ css: pulseStyles,
41
+ "data-testid": "".concat(testId, "-discovery")
42
+ }, children);
43
+ };
44
+ export default FeatureDiscovery;
@@ -0,0 +1,8 @@
1
+ import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
2
+ var _templateObject, _templateObject2;
3
+ import { css, keyframes } from '@emotion/react';
4
+ var pulseKeyframes = keyframes(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n to {\n box-shadow: 0 0 0 7px rgba(0, 0, 0, 0);\n }\n"])));
5
+
6
+ // Styling from atlassian-frontend/packages/design-system/onboarding/src/styled/target.tsx
7
+ var pulseColor = 'rgb(101, 84, 192)';
8
+ export var pulseStyles = css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: inline-flex;\n border-radius: 3px;\n box-shadow: 0 0 0 0 ", ";\n animation: ", " 1.45s cubic-bezier(0.5, 0, 0, 1) infinite;\n"])), pulseColor, pulseKeyframes);
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
- var _excluded = ["isLoading", "error", "url", "queryState", "items", "isEditing", "onCancel", "action"];
3
+ var _excluded = ["isLoading", "error", "url", "queryState", "items", "isEditing", "onCancel", "action", "createFeatureDiscovery"];
4
4
  /** @jsx jsx */
5
5
  import { memo } from 'react';
6
6
  import { jsx } from '@emotion/react';
@@ -8,6 +8,7 @@ import { defineMessages, useIntl } from 'react-intl-next';
8
8
  import Button, { ButtonGroup } from '@atlaskit/button';
9
9
  import EditorAddIcon from '@atlaskit/icon/glyph/editor/add';
10
10
  import { UnauthenticatedError } from '../../../common/utils/errors';
11
+ import FeatureDiscovery from './feature-discovery';
11
12
  import { formFooterActionStyles, formFooterStyles } from './styled';
12
13
  import { checkSubmitDisabled } from './utils';
13
14
  var messages = defineMessages({
@@ -30,7 +31,9 @@ var messages = defineMessages({
30
31
  export var testIds = {
31
32
  insertButton: 'link-picker-insert-button',
32
33
  cancelButton: 'link-picker-cancel-button',
33
- actionButton: 'link-picker-action-button'
34
+ actionButton: 'link-picker-action-button',
35
+ /** Feature discovery for action button (css pulse) */
36
+ actionButtonDiscovery: 'link-picker-action-button-discovery'
34
37
  };
35
38
  export var FormFooter = /*#__PURE__*/memo(function (_ref) {
36
39
  var isLoading = _ref.isLoading,
@@ -41,6 +44,8 @@ export var FormFooter = /*#__PURE__*/memo(function (_ref) {
41
44
  isEditing = _ref.isEditing,
42
45
  onCancel = _ref.onCancel,
43
46
  action = _ref.action,
47
+ _ref$createFeatureDis = _ref.createFeatureDiscovery,
48
+ createFeatureDiscovery = _ref$createFeatureDis === void 0 ? false : _ref$createFeatureDis,
44
49
  restProps = _objectWithoutProperties(_ref, _excluded);
45
50
  var intl = useIntl();
46
51
  if (error && error instanceof UnauthenticatedError) {
@@ -48,19 +53,24 @@ export var FormFooter = /*#__PURE__*/memo(function (_ref) {
48
53
  }
49
54
  var isSubmitDisabled = checkSubmitDisabled(isLoading, error, url, queryState, items);
50
55
  var insertButtonMsg = isEditing ? messages.saveButton : messages.insertButton;
56
+ var createButton = function createButton(pluginAction) {
57
+ return jsx(Button, {
58
+ testId: testIds.actionButton,
59
+ onClick: pluginAction.callback,
60
+ appearance: "default",
61
+ iconBefore: jsx(EditorAddIcon, {
62
+ label: "",
63
+ size: "medium"
64
+ })
65
+ }, typeof pluginAction.label === 'string' ? pluginAction.label : intl.formatMessage(pluginAction.label));
66
+ };
51
67
  return jsx("footer", _extends({
52
68
  css: formFooterStyles
53
69
  }, restProps), action && jsx("div", {
54
70
  css: formFooterActionStyles
55
- }, jsx(Button, {
56
- testId: testIds.actionButton,
57
- onClick: action.callback,
58
- appearance: "default",
59
- iconBefore: jsx(EditorAddIcon, {
60
- label: "",
61
- size: "medium"
62
- })
63
- }, typeof action.label === 'string' ? action.label : intl.formatMessage(action.label))), jsx(ButtonGroup, null, jsx(Button, {
71
+ }, createFeatureDiscovery ? jsx(FeatureDiscovery, {
72
+ testId: testIds.actionButtonDiscovery
73
+ }, createButton(action)) : createButton(action)), jsx(ButtonGroup, null, jsx(Button, {
64
74
  appearance: "subtle",
65
75
  onClick: onCancel,
66
76
  testId: testIds.cancelButton
@@ -9,6 +9,7 @@ import { FormattedMessage, useIntl } from 'react-intl-next';
9
9
  import { useAnalyticsEvents } from '@atlaskit/analytics-next';
10
10
  import { isSafeUrl, normalizeUrl } from '@atlaskit/linking-common/url';
11
11
  import { browser } from '@atlaskit/linking-common/user-agent';
12
+ import { getBooleanFF } from '@atlaskit/platform-feature-flags';
12
13
  import VisuallyHidden from '@atlaskit/visually-hidden';
13
14
  import { useLinkPickerAnalytics, withInputFieldTracking, withLinkPickerAnalyticsContext } from '../../common/analytics';
14
15
  import { ANALYTICS_CHANNEL } from '../../common/constants';
@@ -37,13 +38,17 @@ var initState = {
37
38
  selectedIndex: -1,
38
39
  invalidUrl: false,
39
40
  activeTab: 0,
40
- preventHidingRecents: false
41
+ preventHidingRecents: false,
42
+ /** This only allows the feature discovery pulse - to be shown the ff must be on and active tab be Jira */
43
+ allowCreateFeatureDiscovery: true
41
44
  };
42
45
  function reducer(state, payload) {
43
46
  if (payload.url && state.url !== payload.url) {
44
47
  return _objectSpread(_objectSpread({}, state), {}, {
45
48
  invalidUrl: false,
46
- selectedIndex: isSafeUrl(payload.url) && payload.url.length ? -1 : state.selectedIndex
49
+ selectedIndex: isSafeUrl(payload.url) && payload.url.length ? -1 : state.selectedIndex,
50
+ /** When the user starts entering a url, stop pulsing the create button */
51
+ allowCreateFeatureDiscovery: false
47
52
  }, payload);
48
53
  }
49
54
  return _objectSpread(_objectSpread({}, state), payload);
@@ -89,7 +94,8 @@ export var LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(functi
89
94
  url = state.url,
90
95
  displayText = state.displayText,
91
96
  invalidUrl = state.invalidUrl,
92
- activeTab = state.activeTab;
97
+ activeTab = state.activeTab,
98
+ allowCreateFeatureDiscovery = state.allowCreateFeatureDiscovery;
93
99
  var intl = useIntl();
94
100
  var queryState = useSearchQuery(state);
95
101
  var _usePlugins = usePlugins(queryState, activeTab, plugins),
@@ -338,5 +344,8 @@ export var LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(functi
338
344
  onCancel: onCancel,
339
345
  action: pluginAction,
340
346
  css: !queryState || !(plugins !== null && plugins !== void 0 && plugins.length) ? formFooterMargin : undefined
347
+ /* Show the feature discovery pulse when we're on the Jira tab, we haven't started typing a url and
348
+ the feature flag is enabled */,
349
+ createFeatureDiscovery: (activePlugin === null || activePlugin === void 0 ? void 0 : activePlugin.tabKey) === 'jira' && allowCreateFeatureDiscovery && getBooleanFF('platform.linking-platform.link-picker.enable-jira-create')
341
350
  }));
342
351
  }));
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/link-picker",
3
- "version": "1.27.2",
3
+ "version": "1.28.1",
4
4
  "sideEffects": false
5
5
  }
@@ -70,4 +70,5 @@ export interface PickerState {
70
70
  activeTab: number;
71
71
  /** When true, even if the selected index is -1, don't hide the recents. */
72
72
  preventHidingRecents: boolean;
73
+ allowCreateFeatureDiscovery: boolean;
73
74
  }
@@ -3,11 +3,11 @@
3
3
  *
4
4
  * Generates Typescript types for analytics events from analytics.spec.yaml
5
5
  *
6
- * @codegen <<SignedSource::e7a81d0d46e015c9728ae9557b47040f>>
6
+ * @codegen <<SignedSource::cd5b926575a5c379425d0d72e5339f12>>
7
7
  * @codegenCommand yarn workspace @atlaskit/link-picker run codegen-analytics
8
8
  */
9
9
  export type PackageMetaDataType = {
10
- packageName: '@atlaskit/link-picker';
10
+ packageName: string;
11
11
  packageVersion: string;
12
12
  source: 'linkPicker';
13
13
  componentName: 'linkPicker';
@@ -0,0 +1,15 @@
1
+ /** @jsx jsx */
2
+ import { type FC } from 'react';
3
+ type FeatureDiscoveryProps = {
4
+ children: React.ReactElement;
5
+ testId?: string;
6
+ };
7
+ /**
8
+ * This is a hacky solution to help with the feature discovery.
9
+ * This implementation must be removed once the experiment is completed.
10
+ *
11
+ * Cleanup ticket:
12
+ * https://product-fabric.atlassian.net/browse/EDM-7480
13
+ */
14
+ declare const FeatureDiscovery: FC<FeatureDiscoveryProps>;
15
+ export default FeatureDiscovery;
@@ -0,0 +1 @@
1
+ export declare const pulseStyles: import("@emotion/react").SerializedStyles;
@@ -5,6 +5,8 @@ export declare const testIds: {
5
5
  readonly insertButton: "link-picker-insert-button";
6
6
  readonly cancelButton: "link-picker-cancel-button";
7
7
  readonly actionButton: "link-picker-action-button";
8
+ /** Feature discovery for action button (css pulse) */
9
+ readonly actionButtonDiscovery: "link-picker-action-button-discovery";
8
10
  };
9
11
  interface FormFooterProps extends React.HTMLAttributes<HTMLElement> {
10
12
  /** If the results section appears to be loading, impact whether the submit button is disabled */
@@ -16,6 +18,7 @@ interface FormFooterProps extends React.HTMLAttributes<HTMLElement> {
16
18
  isEditing?: boolean;
17
19
  onCancel?: () => void;
18
20
  action?: LinkPickerPluginAction;
21
+ createFeatureDiscovery?: boolean;
19
22
  }
20
- export declare const FormFooter: import("react").MemoExoticComponent<({ isLoading, error, url, queryState, items, isEditing, onCancel, action, ...restProps }: FormFooterProps) => jsx.JSX.Element | null>;
23
+ export declare const FormFooter: import("react").MemoExoticComponent<({ isLoading, error, url, queryState, items, isEditing, onCancel, action, createFeatureDiscovery, ...restProps }: FormFooterProps) => jsx.JSX.Element | null>;
21
24
  export {};
@@ -7,6 +7,7 @@ export declare const testIds: {
7
7
  readonly insertButton: "link-picker-insert-button";
8
8
  readonly cancelButton: "link-picker-cancel-button";
9
9
  readonly actionButton: "link-picker-action-button";
10
+ readonly actionButtonDiscovery: "link-picker-action-button-discovery";
10
11
  readonly tabsLoadingIndicator: string;
11
12
  readonly tabList: string;
12
13
  readonly tabItem: string;
@@ -70,4 +70,5 @@ export interface PickerState {
70
70
  activeTab: number;
71
71
  /** When true, even if the selected index is -1, don't hide the recents. */
72
72
  preventHidingRecents: boolean;
73
+ allowCreateFeatureDiscovery: boolean;
73
74
  }
@@ -3,11 +3,11 @@
3
3
  *
4
4
  * Generates Typescript types for analytics events from analytics.spec.yaml
5
5
  *
6
- * @codegen <<SignedSource::e7a81d0d46e015c9728ae9557b47040f>>
6
+ * @codegen <<SignedSource::cd5b926575a5c379425d0d72e5339f12>>
7
7
  * @codegenCommand yarn workspace @atlaskit/link-picker run codegen-analytics
8
8
  */
9
9
  export type PackageMetaDataType = {
10
- packageName: '@atlaskit/link-picker';
10
+ packageName: string;
11
11
  packageVersion: string;
12
12
  source: 'linkPicker';
13
13
  componentName: 'linkPicker';
@@ -0,0 +1,15 @@
1
+ /** @jsx jsx */
2
+ import { type FC } from 'react';
3
+ type FeatureDiscoveryProps = {
4
+ children: React.ReactElement;
5
+ testId?: string;
6
+ };
7
+ /**
8
+ * This is a hacky solution to help with the feature discovery.
9
+ * This implementation must be removed once the experiment is completed.
10
+ *
11
+ * Cleanup ticket:
12
+ * https://product-fabric.atlassian.net/browse/EDM-7480
13
+ */
14
+ declare const FeatureDiscovery: FC<FeatureDiscoveryProps>;
15
+ export default FeatureDiscovery;
@@ -0,0 +1 @@
1
+ export declare const pulseStyles: import("@emotion/react").SerializedStyles;
@@ -5,6 +5,8 @@ export declare const testIds: {
5
5
  readonly insertButton: "link-picker-insert-button";
6
6
  readonly cancelButton: "link-picker-cancel-button";
7
7
  readonly actionButton: "link-picker-action-button";
8
+ /** Feature discovery for action button (css pulse) */
9
+ readonly actionButtonDiscovery: "link-picker-action-button-discovery";
8
10
  };
9
11
  interface FormFooterProps extends React.HTMLAttributes<HTMLElement> {
10
12
  /** If the results section appears to be loading, impact whether the submit button is disabled */
@@ -16,6 +18,7 @@ interface FormFooterProps extends React.HTMLAttributes<HTMLElement> {
16
18
  isEditing?: boolean;
17
19
  onCancel?: () => void;
18
20
  action?: LinkPickerPluginAction;
21
+ createFeatureDiscovery?: boolean;
19
22
  }
20
- export declare const FormFooter: import("react").MemoExoticComponent<({ isLoading, error, url, queryState, items, isEditing, onCancel, action, ...restProps }: FormFooterProps) => jsx.JSX.Element | null>;
23
+ export declare const FormFooter: import("react").MemoExoticComponent<({ isLoading, error, url, queryState, items, isEditing, onCancel, action, createFeatureDiscovery, ...restProps }: FormFooterProps) => jsx.JSX.Element | null>;
21
24
  export {};
@@ -7,6 +7,7 @@ export declare const testIds: {
7
7
  readonly insertButton: "link-picker-insert-button";
8
8
  readonly cancelButton: "link-picker-cancel-button";
9
9
  readonly actionButton: "link-picker-action-button";
10
+ readonly actionButtonDiscovery: "link-picker-action-button-discovery";
10
11
  readonly tabsLoadingIndicator: string;
11
12
  readonly tabList: string;
12
13
  readonly tabItem: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/link-picker",
3
- "version": "1.27.2",
3
+ "version": "1.28.1",
4
4
  "description": "Standalone link picker",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "publishConfig": {
@@ -42,6 +42,9 @@
42
42
  },
43
43
  "platform.linking-platform.link-picker.fixed-height-search-results": {
44
44
  "type": "boolean"
45
+ },
46
+ "platform.linking-platform.link-picker.enable-jira-create": {
47
+ "type": "boolean"
45
48
  }
46
49
  },
47
50
  "scripts": {
@@ -50,19 +53,19 @@
50
53
  },
51
54
  "dependencies": {
52
55
  "@atlaskit/analytics-next": "^9.1.0",
53
- "@atlaskit/button": "^16.8.0",
56
+ "@atlaskit/button": "^16.9.0",
54
57
  "@atlaskit/empty-state": "^7.6.0",
55
58
  "@atlaskit/form": "^8.11.0",
56
59
  "@atlaskit/frontend-utilities": "^2.7.0",
57
60
  "@atlaskit/icon": "^21.12.0",
58
- "@atlaskit/linking-common": "^4.0.0",
61
+ "@atlaskit/linking-common": "^4.4.0",
59
62
  "@atlaskit/onboarding": "^10.8.2",
60
63
  "@atlaskit/platform-feature-flags": "^0.2.1",
61
64
  "@atlaskit/spinner": "^15.5.0",
62
65
  "@atlaskit/tabs": "^13.4.0",
63
66
  "@atlaskit/textfield": "^5.6.0",
64
67
  "@atlaskit/theme": "^12.5.0",
65
- "@atlaskit/tokens": "^1.12.0",
68
+ "@atlaskit/tokens": "^1.14.0",
66
69
  "@atlaskit/tooltip": "^17.8.0",
67
70
  "@atlaskit/ufo": "^0.2.0",
68
71
  "@atlaskit/visually-hidden": "^1.2.0",
@@ -81,10 +84,10 @@
81
84
  "devDependencies": {
82
85
  "@af/analytics-codegen": "^0.1.0",
83
86
  "@af/visual-regression": "*",
84
- "@atlaskit/dropdown-menu": "^11.10.0",
87
+ "@atlaskit/dropdown-menu": "^11.11.0",
85
88
  "@atlaskit/link-provider": "^1.6.0",
86
- "@atlaskit/link-test-helpers": "^4.1.0",
87
- "@atlaskit/linking-common": "^4.0.0",
89
+ "@atlaskit/link-test-helpers": "^6.0.0",
90
+ "@atlaskit/linking-common": "^4.4.0",
88
91
  "@atlaskit/visual-regression": "*",
89
92
  "@atlaskit/webdriver-runner": "*",
90
93
  "@atlassian/atlassian-frontend-prettier-config-1.0.0": "npm:@atlassian/atlassian-frontend-prettier-config@1.0.0",