@atlaskit/link-picker 3.13.0 → 3.14.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @atlaskit/link-picker
2
2
 
3
+ ## 3.14.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`d21c47b4f935f`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/d21c47b4f935f) -
8
+ [ux] New prop submitOnInputChange for link picker that removes the submit button and adds a submit
9
+ on input change
10
+
3
11
  ## 3.13.0
4
12
 
5
13
  ### Minor Changes
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+ var _react = require("react");
10
+ var _useDebounce3 = require("use-debounce");
11
+ var _url = require("@atlaskit/linking-common/url");
12
+ var AutoSubmitOnChange = function AutoSubmitOnChange(_ref) {
13
+ var url = _ref.url,
14
+ isSubmitting = _ref.isSubmitting,
15
+ isSelectedItem = _ref.isSelectedItem,
16
+ onSubmit = _ref.onSubmit,
17
+ onClearInvalidUrl = _ref.onClearInvalidUrl;
18
+ // Debounce the URL to avoid rapid successive submissions during typing
19
+ var _useDebounce = (0, _useDebounce3.useDebounce)(url, 300),
20
+ _useDebounce2 = (0, _slicedToArray2.default)(_useDebounce, 1),
21
+ debouncedUrl = _useDebounce2[0];
22
+ var isBlank = url === '';
23
+ // Auto-submit when URL changes
24
+ (0, _react.useEffect)(function () {
25
+ //prevents misalignment between url and debounced url when clear button is clicked
26
+ if (isBlank) {
27
+ onClearInvalidUrl();
28
+ return;
29
+ }
30
+ // Only auto-submit if debouncedUrl is not empty and not already submitting
31
+ if (debouncedUrl.trim() && !isSubmitting && !isSelectedItem) {
32
+ var normalized = (0, _url.normalizeUrl)(debouncedUrl);
33
+ if (normalized) {
34
+ onSubmit();
35
+ }
36
+ }
37
+ //onSubmit() left out to prevent infinite loop
38
+ // eslint-disable-next-line react-hooks/exhaustive-deps
39
+ }, [debouncedUrl, isSubmitting, isSelectedItem, onClearInvalidUrl, isBlank]);
40
+
41
+ // This component renders nothing
42
+ return null;
43
+ };
44
+ var _default = exports.default = AutoSubmitOnChange;
@@ -36,6 +36,7 @@ var _handleNavKeyDown = require("../../common/utils/handleNavKeyDown");
36
36
  var _usePlugins2 = require("../../services/use-plugins");
37
37
  var _useSearchQuery = require("../../services/use-search-query");
38
38
  var _announcer = require("./announcer");
39
+ var _autoSubmitOnChange = _interopRequireDefault(require("./autoSubmitOnChange"));
39
40
  var _formFooter = require("./form-footer");
40
41
  var _linkPickerSubmitButton = require("./form-footer/link-picker-submit-button");
41
42
  var _messages = require("./messages");
@@ -118,6 +119,8 @@ var LinkPicker = exports.LinkPicker = (0, _analytics.withLinkPickerAnalyticsCont
118
119
  _ref$previewableLinks = _ref.previewableLinksOnly,
119
120
  previewableLinksOnly = _ref$previewableLinks === void 0 ? false : _ref$previewableLinks,
120
121
  additionalError = _ref.additionalError,
122
+ _ref$submitOnInputCha = _ref.submitOnInputChange,
123
+ submitOnInputChange = _ref$submitOnInputCha === void 0 ? false : _ref$submitOnInputCha,
121
124
  recentSearchListSize = _ref.recentSearchListSize,
122
125
  shouldRenderNoResultsImage = _ref.shouldRenderNoResultsImage;
123
126
  var _useAnalyticsEvents = (0, _analyticsNext.useAnalyticsEvents)(),
@@ -159,6 +162,7 @@ var LinkPicker = exports.LinkPicker = (0, _analytics.withLinkPickerAnalyticsCont
159
162
  var selectedItem = items === null || items === void 0 ? void 0 : items[selectedIndex];
160
163
  var isSelectedItem = (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.url) === url;
161
164
  var previewableOnly = (0, _platformFeatureFlags.fg)('platform-linking-link-picker-previewable-only') && previewableLinksOnly;
165
+ var flaggedSubmitOnInputChange = (0, _platformFeatureFlags.fg)('platform-linking-link-picker-previewable-only') && submitOnInputChange;
162
166
  var _useLinkPickerAnalyti = (0, _analytics.useLinkPickerAnalytics)(),
163
167
  trackAttribute = _useLinkPickerAnalyti.trackAttribute,
164
168
  getAttributes = _useLinkPickerAnalyti.getAttributes;
@@ -249,6 +253,13 @@ var LinkPicker = exports.LinkPicker = (0, _analytics.withLinkPickerAnalyticsCont
249
253
  handleInsert(_url, name, 'typeAhead', _objectSpread({}, selectedItem));
250
254
  }
251
255
  }, [handleInsert, trackAttribute, items, activePlugin, isSubmitting]);
256
+ var handleClearInvalidUrl = (0, _platformFeatureFlags.fg)('platform-linking-link-picker-previewable-only') ?
257
+ // eslint-disable-next-line react-hooks/rules-of-hooks
258
+ (0, _react.useCallback)(function () {
259
+ dispatch({
260
+ invalidUrl: false
261
+ });
262
+ }, [dispatch]) : function () {};
252
263
  var handleSubmit = (0, _react.useCallback)( /*#__PURE__*/function () {
253
264
  var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(event) {
254
265
  var normalized, urlResponse, responseObject;
@@ -432,7 +443,13 @@ var LinkPicker = exports.LinkPicker = (0, _analytics.withLinkPickerAnalyticsCont
432
443
  // Use onSubmitCapture instead of onSubmit so that any possible parent form isn't submitted
433
444
  onSubmitCapture: handleSubmit,
434
445
  className: (0, _runtime.ax)(["_19bv164s _u5f31pah _ca0q1k79 _n3td1t3k _vchhusvi _1e0ctcjq"])
435
- }, /*#__PURE__*/React.createElement(_trackMount.TrackMount, null), isActivePlugin && /*#__PURE__*/React.createElement(_react.Fragment, null, screenReaderText && /*#__PURE__*/React.createElement(_announcer.Announcer, {
446
+ }, /*#__PURE__*/React.createElement(_trackMount.TrackMount, null), flaggedSubmitOnInputChange && /*#__PURE__*/React.createElement(_autoSubmitOnChange.default, {
447
+ url: url,
448
+ isSubmitting: isSubmitting,
449
+ isSelectedItem: isSelectedItem,
450
+ onSubmit: handleSubmit,
451
+ onClearInvalidUrl: handleClearInvalidUrl
452
+ }), isActivePlugin && /*#__PURE__*/React.createElement(_react.Fragment, null, screenReaderText && /*#__PURE__*/React.createElement(_announcer.Announcer, {
436
453
  ariaLive: "assertive",
437
454
  text: screenReaderText,
438
455
  ariaRelevant: "additions",
@@ -517,7 +534,7 @@ var LinkPicker = exports.LinkPicker = (0, _analytics.withLinkPickerAnalyticsCont
517
534
  action: pluginAction,
518
535
  customSubmitButtonLabel: customSubmitButtonLabel,
519
536
  submitMessageId: submitMessageId,
520
- hideSubmitButton: moveSubmitButton,
537
+ hideSubmitButton: moveSubmitButton || flaggedSubmitOnInputChange,
521
538
  className: (0, _runtime.ax)([(!queryState || !(plugins !== null && plugins !== void 0 && plugins.length)) && "_19pkpxbi"])
522
539
  }));
523
540
  }));
@@ -25,7 +25,7 @@ var testIds = exports.testIds = {
25
25
  };
26
26
  var PACKAGE_DATA = exports.PACKAGE_DATA = {
27
27
  packageName: "@atlaskit/link-picker" || '',
28
- packageVersion: "3.12.1" || '',
28
+ packageVersion: "0.0.0-development" || '',
29
29
  componentName: _constants.COMPONENT_NAME,
30
30
  source: _constants.COMPONENT_NAME
31
31
  };
@@ -0,0 +1,35 @@
1
+ import { useEffect } from 'react';
2
+ import { useDebounce } from 'use-debounce';
3
+ import { normalizeUrl } from '@atlaskit/linking-common/url';
4
+ const AutoSubmitOnChange = ({
5
+ url,
6
+ isSubmitting,
7
+ isSelectedItem,
8
+ onSubmit,
9
+ onClearInvalidUrl
10
+ }) => {
11
+ // Debounce the URL to avoid rapid successive submissions during typing
12
+ const [debouncedUrl] = useDebounce(url, 300);
13
+ const isBlank = url === '';
14
+ // Auto-submit when URL changes
15
+ useEffect(() => {
16
+ //prevents misalignment between url and debounced url when clear button is clicked
17
+ if (isBlank) {
18
+ onClearInvalidUrl();
19
+ return;
20
+ }
21
+ // Only auto-submit if debouncedUrl is not empty and not already submitting
22
+ if (debouncedUrl.trim() && !isSubmitting && !isSelectedItem) {
23
+ const normalized = normalizeUrl(debouncedUrl);
24
+ if (normalized) {
25
+ onSubmit();
26
+ }
27
+ }
28
+ //onSubmit() left out to prevent infinite loop
29
+ // eslint-disable-next-line react-hooks/exhaustive-deps
30
+ }, [debouncedUrl, isSubmitting, isSelectedItem, onClearInvalidUrl, isBlank]);
31
+
32
+ // This component renders nothing
33
+ return null;
34
+ };
35
+ export default AutoSubmitOnChange;
@@ -24,6 +24,7 @@ import { handleNavKeyDown } from '../../common/utils/handleNavKeyDown';
24
24
  import { usePlugins } from '../../services/use-plugins';
25
25
  import { useSearchQuery } from '../../services/use-search-query';
26
26
  import { Announcer } from './announcer';
27
+ import AutoSubmitOnChange from './autoSubmitOnChange';
27
28
  import { FormFooter, testIds as formFooterTestIds } from './form-footer';
28
29
  import { LinkPickerSubmitButton } from './form-footer/link-picker-submit-button';
29
30
  import { formMessages, linkMessages, linkTextMessages, searchMessages } from './messages';
@@ -106,6 +107,7 @@ export const LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(({
106
107
  inputRef,
107
108
  previewableLinksOnly = false,
108
109
  additionalError,
110
+ submitOnInputChange = false,
109
111
  recentSearchListSize,
110
112
  shouldRenderNoResultsImage
111
113
  }) => {
@@ -150,6 +152,7 @@ export const LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(({
150
152
  const selectedItem = items === null || items === void 0 ? void 0 : items[selectedIndex];
151
153
  const isSelectedItem = (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.url) === url;
152
154
  const previewableOnly = fg('platform-linking-link-picker-previewable-only') && previewableLinksOnly;
155
+ const flaggedSubmitOnInputChange = fg('platform-linking-link-picker-previewable-only') && submitOnInputChange;
153
156
  const {
154
157
  trackAttribute,
155
158
  getAttributes
@@ -244,6 +247,13 @@ export const LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(({
244
247
  });
245
248
  }
246
249
  }, [handleInsert, trackAttribute, items, activePlugin, isSubmitting]);
250
+ const handleClearInvalidUrl = fg('platform-linking-link-picker-previewable-only') ?
251
+ // eslint-disable-next-line react-hooks/rules-of-hooks
252
+ useCallback(() => {
253
+ dispatch({
254
+ invalidUrl: false
255
+ });
256
+ }, [dispatch]) : () => {};
247
257
  const handleSubmit = useCallback(async event => {
248
258
  event === null || event === void 0 ? void 0 : event.preventDefault();
249
259
  if (isSubmitting) {
@@ -387,7 +397,13 @@ export const LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(({
387
397
  // Use onSubmitCapture instead of onSubmit so that any possible parent form isn't submitted
388
398
  onSubmitCapture: handleSubmit,
389
399
  className: ax(["_19bv164s _u5f31pah _ca0q1k79 _n3td1t3k _vchhusvi _1e0ctcjq"])
390
- }, /*#__PURE__*/React.createElement(TrackMount, null), isActivePlugin && /*#__PURE__*/React.createElement(Fragment, null, screenReaderText && /*#__PURE__*/React.createElement(Announcer, {
400
+ }, /*#__PURE__*/React.createElement(TrackMount, null), flaggedSubmitOnInputChange && /*#__PURE__*/React.createElement(AutoSubmitOnChange, {
401
+ url: url,
402
+ isSubmitting: isSubmitting,
403
+ isSelectedItem: isSelectedItem,
404
+ onSubmit: handleSubmit,
405
+ onClearInvalidUrl: handleClearInvalidUrl
406
+ }), isActivePlugin && /*#__PURE__*/React.createElement(Fragment, null, screenReaderText && /*#__PURE__*/React.createElement(Announcer, {
391
407
  ariaLive: "assertive",
392
408
  text: screenReaderText,
393
409
  ariaRelevant: "additions",
@@ -472,7 +488,7 @@ export const LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(({
472
488
  action: pluginAction,
473
489
  customSubmitButtonLabel: customSubmitButtonLabel,
474
490
  submitMessageId: submitMessageId,
475
- hideSubmitButton: moveSubmitButton,
491
+ hideSubmitButton: moveSubmitButton || flaggedSubmitOnInputChange,
476
492
  className: ax([(!queryState || !(plugins !== null && plugins !== void 0 && plugins.length)) && "_19pkpxbi"])
477
493
  }));
478
494
  }));
@@ -15,7 +15,7 @@ export const testIds = {
15
15
  };
16
16
  export const PACKAGE_DATA = {
17
17
  packageName: "@atlaskit/link-picker" || '',
18
- packageVersion: "3.12.1" || '',
18
+ packageVersion: "0.0.0-development" || '',
19
19
  componentName: COMPONENT_NAME,
20
20
  source: COMPONENT_NAME
21
21
  };
@@ -0,0 +1,37 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import { useEffect } from 'react';
3
+ import { useDebounce } from 'use-debounce';
4
+ import { normalizeUrl } from '@atlaskit/linking-common/url';
5
+ var AutoSubmitOnChange = function AutoSubmitOnChange(_ref) {
6
+ var url = _ref.url,
7
+ isSubmitting = _ref.isSubmitting,
8
+ isSelectedItem = _ref.isSelectedItem,
9
+ onSubmit = _ref.onSubmit,
10
+ onClearInvalidUrl = _ref.onClearInvalidUrl;
11
+ // Debounce the URL to avoid rapid successive submissions during typing
12
+ var _useDebounce = useDebounce(url, 300),
13
+ _useDebounce2 = _slicedToArray(_useDebounce, 1),
14
+ debouncedUrl = _useDebounce2[0];
15
+ var isBlank = url === '';
16
+ // Auto-submit when URL changes
17
+ useEffect(function () {
18
+ //prevents misalignment between url and debounced url when clear button is clicked
19
+ if (isBlank) {
20
+ onClearInvalidUrl();
21
+ return;
22
+ }
23
+ // Only auto-submit if debouncedUrl is not empty and not already submitting
24
+ if (debouncedUrl.trim() && !isSubmitting && !isSelectedItem) {
25
+ var normalized = normalizeUrl(debouncedUrl);
26
+ if (normalized) {
27
+ onSubmit();
28
+ }
29
+ }
30
+ //onSubmit() left out to prevent infinite loop
31
+ // eslint-disable-next-line react-hooks/exhaustive-deps
32
+ }, [debouncedUrl, isSubmitting, isSelectedItem, onClearInvalidUrl, isBlank]);
33
+
34
+ // This component renders nothing
35
+ return null;
36
+ };
37
+ export default AutoSubmitOnChange;
@@ -30,6 +30,7 @@ import { handleNavKeyDown } from '../../common/utils/handleNavKeyDown';
30
30
  import { usePlugins } from '../../services/use-plugins';
31
31
  import { useSearchQuery } from '../../services/use-search-query';
32
32
  import { Announcer } from './announcer';
33
+ import AutoSubmitOnChange from './autoSubmitOnChange';
33
34
  import { FormFooter, testIds as formFooterTestIds } from './form-footer';
34
35
  import { LinkPickerSubmitButton } from './form-footer/link-picker-submit-button';
35
36
  import { formMessages, linkMessages, linkTextMessages, searchMessages } from './messages';
@@ -109,6 +110,8 @@ export var LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(functi
109
110
  _ref$previewableLinks = _ref.previewableLinksOnly,
110
111
  previewableLinksOnly = _ref$previewableLinks === void 0 ? false : _ref$previewableLinks,
111
112
  additionalError = _ref.additionalError,
113
+ _ref$submitOnInputCha = _ref.submitOnInputChange,
114
+ submitOnInputChange = _ref$submitOnInputCha === void 0 ? false : _ref$submitOnInputCha,
112
115
  recentSearchListSize = _ref.recentSearchListSize,
113
116
  shouldRenderNoResultsImage = _ref.shouldRenderNoResultsImage;
114
117
  var _useAnalyticsEvents = useAnalyticsEvents(),
@@ -150,6 +153,7 @@ export var LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(functi
150
153
  var selectedItem = items === null || items === void 0 ? void 0 : items[selectedIndex];
151
154
  var isSelectedItem = (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.url) === url;
152
155
  var previewableOnly = fg('platform-linking-link-picker-previewable-only') && previewableLinksOnly;
156
+ var flaggedSubmitOnInputChange = fg('platform-linking-link-picker-previewable-only') && submitOnInputChange;
153
157
  var _useLinkPickerAnalyti = useLinkPickerAnalytics(),
154
158
  trackAttribute = _useLinkPickerAnalyti.trackAttribute,
155
159
  getAttributes = _useLinkPickerAnalyti.getAttributes;
@@ -240,6 +244,13 @@ export var LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(functi
240
244
  handleInsert(_url, name, 'typeAhead', _objectSpread({}, selectedItem));
241
245
  }
242
246
  }, [handleInsert, trackAttribute, items, activePlugin, isSubmitting]);
247
+ var handleClearInvalidUrl = fg('platform-linking-link-picker-previewable-only') ?
248
+ // eslint-disable-next-line react-hooks/rules-of-hooks
249
+ useCallback(function () {
250
+ dispatch({
251
+ invalidUrl: false
252
+ });
253
+ }, [dispatch]) : function () {};
243
254
  var handleSubmit = useCallback( /*#__PURE__*/function () {
244
255
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(event) {
245
256
  var normalized, urlResponse, responseObject;
@@ -423,7 +434,13 @@ export var LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(functi
423
434
  // Use onSubmitCapture instead of onSubmit so that any possible parent form isn't submitted
424
435
  onSubmitCapture: handleSubmit,
425
436
  className: ax(["_19bv164s _u5f31pah _ca0q1k79 _n3td1t3k _vchhusvi _1e0ctcjq"])
426
- }, /*#__PURE__*/React.createElement(TrackMount, null), isActivePlugin && /*#__PURE__*/React.createElement(Fragment, null, screenReaderText && /*#__PURE__*/React.createElement(Announcer, {
437
+ }, /*#__PURE__*/React.createElement(TrackMount, null), flaggedSubmitOnInputChange && /*#__PURE__*/React.createElement(AutoSubmitOnChange, {
438
+ url: url,
439
+ isSubmitting: isSubmitting,
440
+ isSelectedItem: isSelectedItem,
441
+ onSubmit: handleSubmit,
442
+ onClearInvalidUrl: handleClearInvalidUrl
443
+ }), isActivePlugin && /*#__PURE__*/React.createElement(Fragment, null, screenReaderText && /*#__PURE__*/React.createElement(Announcer, {
427
444
  ariaLive: "assertive",
428
445
  text: screenReaderText,
429
446
  ariaRelevant: "additions",
@@ -508,7 +525,7 @@ export var LinkPicker = withLinkPickerAnalyticsContext( /*#__PURE__*/memo(functi
508
525
  action: pluginAction,
509
526
  customSubmitButtonLabel: customSubmitButtonLabel,
510
527
  submitMessageId: submitMessageId,
511
- hideSubmitButton: moveSubmitButton,
528
+ hideSubmitButton: moveSubmitButton || flaggedSubmitOnInputChange,
512
529
  className: ax([(!queryState || !(plugins !== null && plugins !== void 0 && plugins.length)) && "_19pkpxbi"])
513
530
  }));
514
531
  }));
@@ -16,7 +16,7 @@ export var testIds = {
16
16
  };
17
17
  export var PACKAGE_DATA = {
18
18
  packageName: "@atlaskit/link-picker" || '',
19
- packageVersion: "3.12.1" || '',
19
+ packageVersion: "0.0.0-development" || '',
20
20
  componentName: COMPONENT_NAME,
21
21
  source: COMPONENT_NAME
22
22
  };
@@ -171,6 +171,8 @@ export interface LinkPickerProps {
171
171
  previewableLinksOnly?: boolean;
172
172
  /**This prop passes one additional error that is secondary to component errors */
173
173
  additionalError?: React.ReactNode;
174
+ /**This prop disables submit button and handles submit on input change */
175
+ submitOnInputChange?: boolean;
174
176
  /** Showing dynamic list size based on window height */
175
177
  recentSearchListSize?: number;
176
178
  /** Controls showing the image in the no results state */
@@ -0,0 +1,9 @@
1
+ interface AutoSubmitOnChangeProps {
2
+ url: string;
3
+ isSubmitting: boolean;
4
+ isSelectedItem: boolean;
5
+ onSubmit: () => void;
6
+ onClearInvalidUrl: () => void;
7
+ }
8
+ declare const AutoSubmitOnChange: ({ url, isSubmitting, isSelectedItem, onSubmit, onClearInvalidUrl, }: AutoSubmitOnChangeProps) => null;
9
+ export default AutoSubmitOnChange;
@@ -174,6 +174,8 @@ export interface LinkPickerProps {
174
174
  previewableLinksOnly?: boolean;
175
175
  /**This prop passes one additional error that is secondary to component errors */
176
176
  additionalError?: React.ReactNode;
177
+ /**This prop disables submit button and handles submit on input change */
178
+ submitOnInputChange?: boolean;
177
179
  /** Showing dynamic list size based on window height */
178
180
  recentSearchListSize?: number;
179
181
  /** Controls showing the image in the no results state */
@@ -0,0 +1,9 @@
1
+ interface AutoSubmitOnChangeProps {
2
+ url: string;
3
+ isSubmitting: boolean;
4
+ isSelectedItem: boolean;
5
+ onSubmit: () => void;
6
+ onClearInvalidUrl: () => void;
7
+ }
8
+ declare const AutoSubmitOnChange: ({ url, isSubmitting, isSelectedItem, onSubmit, onClearInvalidUrl, }: AutoSubmitOnChangeProps) => null;
9
+ export default AutoSubmitOnChange;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/link-picker",
3
- "version": "3.13.0",
3
+ "version": "3.14.0",
4
4
  "description": "Standalone link picker",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "publishConfig": {