@wordpress/format-library 3.0.20 → 3.1.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 (44) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE.md +1 -1
  3. package/README.md +7 -1
  4. package/build/default-formats.native.js +3 -1
  5. package/build/default-formats.native.js.map +1 -1
  6. package/build/link/index.native.js +2 -2
  7. package/build/link/index.native.js.map +1 -1
  8. package/build/link/modal-screens/link-picker-screen.native.js +12 -25
  9. package/build/link/modal-screens/link-picker-screen.native.js.map +1 -1
  10. package/build/link/modal-screens/link-settings-screen.native.js +50 -19
  11. package/build/link/modal-screens/link-settings-screen.native.js.map +1 -1
  12. package/build/text-color/index.native.js +192 -0
  13. package/build/text-color/index.native.js.map +1 -0
  14. package/build/text-color/inline.js +1 -0
  15. package/build/text-color/inline.js.map +1 -1
  16. package/build/text-color/inline.native.js +191 -0
  17. package/build/text-color/inline.native.js.map +1 -0
  18. package/build-module/default-formats.native.js +2 -1
  19. package/build-module/default-formats.native.js.map +1 -1
  20. package/build-module/link/index.native.js +1 -1
  21. package/build-module/link/index.native.js.map +1 -1
  22. package/build-module/link/modal-screens/link-picker-screen.native.js +12 -26
  23. package/build-module/link/modal-screens/link-picker-screen.native.js.map +1 -1
  24. package/build-module/link/modal-screens/link-settings-screen.native.js +50 -19
  25. package/build-module/link/modal-screens/link-settings-screen.native.js.map +1 -1
  26. package/build-module/text-color/index.native.js +173 -0
  27. package/build-module/text-color/index.native.js.map +1 -0
  28. package/build-module/text-color/inline.js +1 -2
  29. package/build-module/text-color/inline.js.map +1 -1
  30. package/build-module/text-color/inline.native.js +177 -0
  31. package/build-module/text-color/inline.native.js.map +1 -0
  32. package/package.json +13 -15
  33. package/src/default-formats.native.js +2 -1
  34. package/src/link/index.native.js +1 -1
  35. package/src/link/modal-screens/link-picker-screen.native.js +12 -23
  36. package/src/link/modal-screens/link-settings-screen.native.js +27 -14
  37. package/src/link/test/index.native.js +137 -0
  38. package/src/link/test/modal.native.js +3 -3
  39. package/src/text-color/index.native.js +194 -0
  40. package/src/text-color/inline.js +1 -1
  41. package/src/text-color/inline.native.js +186 -0
  42. package/src/text-color/style.native.scss +23 -0
  43. package/src/text-color/test/__snapshots__/index.native.js.snap +29 -0
  44. package/src/text-color/test/index.native.js +178 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 3.1.1 (2022-02-10)
6
+
7
+ ### Bug Fix
8
+
9
+ - Removed unused `@wordpress/dom` and `@wordpress/keycodes` dependencies ([#38388](https://github.com/WordPress/gutenberg/pull/38388)).
10
+
11
+ ## 3.1.0 (2022-01-27)
12
+
5
13
  ## 3.0.0 (2021-07-29)
6
14
 
7
15
  ### Breaking Change
package/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ## Gutenberg
2
2
 
3
- Copyright 2016-2021 by the contributors
3
+ Copyright 2016-2022 by the contributors
4
4
 
5
5
  **License for Contributions (on and after April 15, 2021)**
6
6
 
package/README.md CHANGED
@@ -12,4 +12,10 @@ npm install @wordpress/format-library --save
12
12
 
13
13
  _This package assumes that your code will run in an **ES2015+** environment. If you're using an environment that has limited or no support for such language features and APIs, you should include [the polyfill shipped in `@wordpress/babel-preset-default`](https://github.com/WordPress/gutenberg/tree/HEAD/packages/babel-preset-default#polyfill) in your code._
14
14
 
15
- <br/><br/><p align="center"><img src="https://s.w.org/style/images/codeispoetry.png?1" alt="Code is Poetry." /></p>
15
+ ## Contributing to this package
16
+
17
+ This is an individual package that's part of the Gutenberg project. The project is organized as a monorepo. It's made up of multiple self-contained software packages, each with a specific purpose. The packages in this monorepo are published to [npm](https://www.npmjs.com/) and used by [WordPress](https://make.wordpress.org/core/) as well as other software projects.
18
+
19
+ To find out more about contributing to this package or Gutenberg as a whole, please read the project's main [contributor guide](https://github.com/WordPress/gutenberg/tree/HEAD/CONTRIBUTING.md).
20
+
21
+ <br /><br /><p align="center"><img src="https://s.w.org/style/images/codeispoetry.png?1" alt="Code is Poetry." /></p>
@@ -13,9 +13,11 @@ var _link = require("./link");
13
13
 
14
14
  var _strikethrough = require("./strikethrough");
15
15
 
16
+ var _textColor = require("./text-color");
17
+
16
18
  /**
17
19
  * Internal dependencies
18
20
  */
19
- var _default = [_bold.bold, _italic.italic, _link.link, _strikethrough.strikethrough];
21
+ var _default = [_bold.bold, _italic.italic, _link.link, _strikethrough.strikethrough, _textColor.textColor];
20
22
  exports.default = _default;
21
23
  //# sourceMappingURL=default-formats.native.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/format-library/src/default-formats.native.js"],"names":["bold","italic","link","strikethrough"],"mappings":";;;;;;;AAGA;;AACA;;AACA;;AACA;;AANA;AACA;AACA;eAMe,CAAEA,UAAF,EAAQC,cAAR,EAAgBC,UAAhB,EAAsBC,4BAAtB,C","sourcesContent":["/**\n * Internal dependencies\n */\nimport { bold } from './bold';\nimport { italic } from './italic';\nimport { link } from './link';\nimport { strikethrough } from './strikethrough';\n\nexport default [ bold, italic, link, strikethrough ];\n"]}
1
+ {"version":3,"sources":["@wordpress/format-library/src/default-formats.native.js"],"names":["bold","italic","link","strikethrough","textColor"],"mappings":";;;;;;;AAGA;;AACA;;AACA;;AACA;;AACA;;AAPA;AACA;AACA;eAOe,CAAEA,UAAF,EAAQC,cAAR,EAAgBC,UAAhB,EAAsBC,4BAAtB,EAAqCC,oBAArC,C","sourcesContent":["/**\n * Internal dependencies\n */\nimport { bold } from './bold';\nimport { italic } from './italic';\nimport { link } from './link';\nimport { strikethrough } from './strikethrough';\nimport { textColor } from './text-color';\n\nexport default [ bold, italic, link, strikethrough, textColor ];\n"]}
@@ -11,7 +11,7 @@ var _element = require("@wordpress/element");
11
11
 
12
12
  var _lodash = require("lodash");
13
13
 
14
- var _reactNative = require("react-native");
14
+ var _clipboard = _interopRequireDefault(require("@react-native-clipboard/clipboard"));
15
15
 
16
16
  var _i18n = require("@wordpress/i18n");
17
17
 
@@ -145,7 +145,7 @@ const link = {
145
145
  }
146
146
 
147
147
  async getURLFromClipboard() {
148
- const clipboardText = await _reactNative.Clipboard.getString();
148
+ const clipboardText = await _clipboard.default.getString();
149
149
 
150
150
  if (!clipboardText) {
151
151
  return;
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/format-library/src/link/index.native.js"],"names":["name","link","title","tagName","className","attributes","url","target","edit","LinkEdit","Component","constructor","arguments","addLink","bind","stopAddingLink","onRemoveFormat","getURLFromClipboard","state","addingLink","value","onChange","props","text","newValue","type","start","end","activeFormats","needsSelectionUpdate","setState","clipboardURL","undefined","getLinkSelection","isActive","startFormat","startIndex","endIndex","formats","speak","linkSelection","clipboardText","Clipboard","getString","render","activeAttributes","linkIcon"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { find } from 'lodash';\nimport { Clipboard } from 'react-native';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Component } from '@wordpress/element';\nimport { withSpokenMessages } from '@wordpress/components';\nimport { RichTextToolbarButton } from '@wordpress/block-editor';\nimport {\n\tapplyFormat,\n\tgetActiveFormat,\n\tgetTextContent,\n\tisCollapsed,\n\tremoveFormat,\n\tslice,\n} from '@wordpress/rich-text';\nimport { isURL } from '@wordpress/url';\nimport { link as linkIcon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport ModalLinkUI from './modal';\nimport { isValidHref } from './utils';\n\nconst name = 'core/link';\n\nexport const link = {\n\tname,\n\ttitle: __( 'Link' ),\n\ttagName: 'a',\n\tclassName: null,\n\tattributes: {\n\t\turl: 'href',\n\t\ttarget: 'target',\n\t},\n\tedit: withSpokenMessages(\n\t\tclass LinkEdit extends Component {\n\t\t\tconstructor() {\n\t\t\t\tsuper( ...arguments );\n\n\t\t\t\tthis.addLink = this.addLink.bind( this );\n\t\t\t\tthis.stopAddingLink = this.stopAddingLink.bind( this );\n\t\t\t\tthis.onRemoveFormat = this.onRemoveFormat.bind( this );\n\t\t\t\tthis.getURLFromClipboard = this.getURLFromClipboard.bind(\n\t\t\t\t\tthis\n\t\t\t\t);\n\t\t\t\tthis.state = {\n\t\t\t\t\taddingLink: false,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\taddLink() {\n\t\t\t\tconst { value, onChange } = this.props;\n\t\t\t\tconst text = getTextContent( slice( value ) );\n\n\t\t\t\tif ( text && isURL( text ) && isValidHref( text ) ) {\n\t\t\t\t\tconst newValue = applyFormat( value, {\n\t\t\t\t\t\ttype: name,\n\t\t\t\t\t\tattributes: { url: text },\n\t\t\t\t\t} );\n\t\t\t\t\tnewValue.start = newValue.end;\n\t\t\t\t\tnewValue.activeFormats = [];\n\t\t\t\t\tonChange( { ...newValue, needsSelectionUpdate: true } );\n\t\t\t\t} else {\n\t\t\t\t\tthis.setState( { addingLink: true } );\n\t\t\t\t\tthis.getURLFromClipboard();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstopAddingLink() {\n\t\t\t\tthis.setState( { addingLink: false, clipboardURL: undefined } );\n\t\t\t}\n\n\t\t\tgetLinkSelection() {\n\t\t\t\tconst { value, isActive } = this.props;\n\t\t\t\tconst startFormat = getActiveFormat( value, 'core/link' );\n\n\t\t\t\t// if the link isn't selected, get the link manually by looking around the cursor\n\t\t\t\t// TODO: handle partly selected links\n\t\t\t\tif ( startFormat && isCollapsed( value ) && isActive ) {\n\t\t\t\t\tlet startIndex = value.start;\n\t\t\t\t\tlet endIndex = value.end;\n\n\t\t\t\t\twhile ( find( value.formats[ startIndex ], startFormat ) ) {\n\t\t\t\t\t\tstartIndex--;\n\t\t\t\t\t}\n\n\t\t\t\t\tendIndex++;\n\n\t\t\t\t\twhile ( find( value.formats[ endIndex ], startFormat ) ) {\n\t\t\t\t\t\tendIndex++;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...value,\n\t\t\t\t\t\tstart: startIndex + 1,\n\t\t\t\t\t\tend: endIndex,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tonRemoveFormat() {\n\t\t\t\tconst { onChange, speak, value } = this.props;\n\t\t\t\tconst startFormat = getActiveFormat( value, 'core/link' );\n\n\t\t\t\t// Before we try to remove anything we check if there is something at the caret position to remove.\n\t\t\t\tif ( isCollapsed( value ) && startFormat === undefined ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst linkSelection = this.getLinkSelection();\n\n\t\t\t\tonChange( removeFormat( linkSelection, name ) );\n\t\t\t\tspeak( __( 'Link removed.' ), 'assertive' );\n\t\t\t}\n\n\t\t\tasync getURLFromClipboard() {\n\t\t\t\tconst clipboardText = await Clipboard.getString();\n\t\t\t\tif ( ! clipboardText ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Check if pasted text is URL\n\t\t\t\tif ( ! isURL( clipboardText ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.setState( { clipboardURL: clipboardText } );\n\t\t\t}\n\n\t\t\trender() {\n\t\t\t\tconst { isActive, activeAttributes, onChange } = this.props;\n\t\t\t\tconst linkSelection = this.getLinkSelection();\n\t\t\t\t// If no URL is set and we have a clipboard URL let's use it\n\t\t\t\tif ( ! activeAttributes.url && this.state.clipboardURL ) {\n\t\t\t\t\tactiveAttributes.url = this.state.clipboardURL;\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ModalLinkUI\n\t\t\t\t\t\t\tisVisible={ this.state.addingLink }\n\t\t\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\t\t\tactiveAttributes={ activeAttributes }\n\t\t\t\t\t\t\tonClose={ this.stopAddingLink }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\tonRemove={ this.onRemoveFormat }\n\t\t\t\t\t\t\tvalue={ linkSelection }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\t\ticon={ linkIcon }\n\t\t\t\t\t\t\ttitle={ __( 'Link' ) }\n\t\t\t\t\t\t\tonClick={ this.addLink }\n\t\t\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\t\t\tshortcutType=\"primary\"\n\t\t\t\t\t\t\tshortcutCharacter=\"k\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t),\n};\n"]}
1
+ {"version":3,"sources":["@wordpress/format-library/src/link/index.native.js"],"names":["name","link","title","tagName","className","attributes","url","target","edit","LinkEdit","Component","constructor","arguments","addLink","bind","stopAddingLink","onRemoveFormat","getURLFromClipboard","state","addingLink","value","onChange","props","text","newValue","type","start","end","activeFormats","needsSelectionUpdate","setState","clipboardURL","undefined","getLinkSelection","isActive","startFormat","startIndex","endIndex","formats","speak","linkSelection","clipboardText","Clipboard","getString","render","activeAttributes","linkIcon"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { find } from 'lodash';\nimport Clipboard from '@react-native-clipboard/clipboard';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Component } from '@wordpress/element';\nimport { withSpokenMessages } from '@wordpress/components';\nimport { RichTextToolbarButton } from '@wordpress/block-editor';\nimport {\n\tapplyFormat,\n\tgetActiveFormat,\n\tgetTextContent,\n\tisCollapsed,\n\tremoveFormat,\n\tslice,\n} from '@wordpress/rich-text';\nimport { isURL } from '@wordpress/url';\nimport { link as linkIcon } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport ModalLinkUI from './modal';\nimport { isValidHref } from './utils';\n\nconst name = 'core/link';\n\nexport const link = {\n\tname,\n\ttitle: __( 'Link' ),\n\ttagName: 'a',\n\tclassName: null,\n\tattributes: {\n\t\turl: 'href',\n\t\ttarget: 'target',\n\t},\n\tedit: withSpokenMessages(\n\t\tclass LinkEdit extends Component {\n\t\t\tconstructor() {\n\t\t\t\tsuper( ...arguments );\n\n\t\t\t\tthis.addLink = this.addLink.bind( this );\n\t\t\t\tthis.stopAddingLink = this.stopAddingLink.bind( this );\n\t\t\t\tthis.onRemoveFormat = this.onRemoveFormat.bind( this );\n\t\t\t\tthis.getURLFromClipboard = this.getURLFromClipboard.bind(\n\t\t\t\t\tthis\n\t\t\t\t);\n\t\t\t\tthis.state = {\n\t\t\t\t\taddingLink: false,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\taddLink() {\n\t\t\t\tconst { value, onChange } = this.props;\n\t\t\t\tconst text = getTextContent( slice( value ) );\n\n\t\t\t\tif ( text && isURL( text ) && isValidHref( text ) ) {\n\t\t\t\t\tconst newValue = applyFormat( value, {\n\t\t\t\t\t\ttype: name,\n\t\t\t\t\t\tattributes: { url: text },\n\t\t\t\t\t} );\n\t\t\t\t\tnewValue.start = newValue.end;\n\t\t\t\t\tnewValue.activeFormats = [];\n\t\t\t\t\tonChange( { ...newValue, needsSelectionUpdate: true } );\n\t\t\t\t} else {\n\t\t\t\t\tthis.setState( { addingLink: true } );\n\t\t\t\t\tthis.getURLFromClipboard();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstopAddingLink() {\n\t\t\t\tthis.setState( { addingLink: false, clipboardURL: undefined } );\n\t\t\t}\n\n\t\t\tgetLinkSelection() {\n\t\t\t\tconst { value, isActive } = this.props;\n\t\t\t\tconst startFormat = getActiveFormat( value, 'core/link' );\n\n\t\t\t\t// if the link isn't selected, get the link manually by looking around the cursor\n\t\t\t\t// TODO: handle partly selected links\n\t\t\t\tif ( startFormat && isCollapsed( value ) && isActive ) {\n\t\t\t\t\tlet startIndex = value.start;\n\t\t\t\t\tlet endIndex = value.end;\n\n\t\t\t\t\twhile ( find( value.formats[ startIndex ], startFormat ) ) {\n\t\t\t\t\t\tstartIndex--;\n\t\t\t\t\t}\n\n\t\t\t\t\tendIndex++;\n\n\t\t\t\t\twhile ( find( value.formats[ endIndex ], startFormat ) ) {\n\t\t\t\t\t\tendIndex++;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...value,\n\t\t\t\t\t\tstart: startIndex + 1,\n\t\t\t\t\t\tend: endIndex,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tonRemoveFormat() {\n\t\t\t\tconst { onChange, speak, value } = this.props;\n\t\t\t\tconst startFormat = getActiveFormat( value, 'core/link' );\n\n\t\t\t\t// Before we try to remove anything we check if there is something at the caret position to remove.\n\t\t\t\tif ( isCollapsed( value ) && startFormat === undefined ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst linkSelection = this.getLinkSelection();\n\n\t\t\t\tonChange( removeFormat( linkSelection, name ) );\n\t\t\t\tspeak( __( 'Link removed.' ), 'assertive' );\n\t\t\t}\n\n\t\t\tasync getURLFromClipboard() {\n\t\t\t\tconst clipboardText = await Clipboard.getString();\n\t\t\t\tif ( ! clipboardText ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Check if pasted text is URL\n\t\t\t\tif ( ! isURL( clipboardText ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.setState( { clipboardURL: clipboardText } );\n\t\t\t}\n\n\t\t\trender() {\n\t\t\t\tconst { isActive, activeAttributes, onChange } = this.props;\n\t\t\t\tconst linkSelection = this.getLinkSelection();\n\t\t\t\t// If no URL is set and we have a clipboard URL let's use it\n\t\t\t\tif ( ! activeAttributes.url && this.state.clipboardURL ) {\n\t\t\t\t\tactiveAttributes.url = this.state.clipboardURL;\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ModalLinkUI\n\t\t\t\t\t\t\tisVisible={ this.state.addingLink }\n\t\t\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\t\t\tactiveAttributes={ activeAttributes }\n\t\t\t\t\t\t\tonClose={ this.stopAddingLink }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\tonRemove={ this.onRemoveFormat }\n\t\t\t\t\t\t\tvalue={ linkSelection }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<RichTextToolbarButton\n\t\t\t\t\t\t\tname=\"link\"\n\t\t\t\t\t\t\ticon={ linkIcon }\n\t\t\t\t\t\t\ttitle={ __( 'Link' ) }\n\t\t\t\t\t\t\tonClick={ this.addLink }\n\t\t\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\t\t\tshortcutType=\"primary\"\n\t\t\t\t\t\t\tshortcutCharacter=\"k\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t),\n};\n"]}
@@ -40,35 +40,22 @@ const LinkPickerScreen = () => {
40
40
  title
41
41
  } = _ref;
42
42
 
43
- if (_reactNative.Platform.OS === 'android') {
44
- _reactNative.Keyboard.dismiss();
45
-
46
- (0, _lodash.delay)(() => {
47
- navigation.navigate(_screens.default.settings, {
48
- inputValue: url,
49
- text: title
50
- });
51
- }, 100);
52
- return;
53
- }
54
-
55
- navigation.navigate(_screens.default.settings, {
56
- inputValue: url,
57
- text: title
58
- });
43
+ _reactNative.Keyboard.dismiss();
44
+
45
+ (0, _lodash.delay)(() => {
46
+ navigation.navigate(_screens.default.settings, {
47
+ inputValue: url,
48
+ text: title
49
+ });
50
+ }, 100);
59
51
  };
60
52
 
61
53
  const onCancel = () => {
62
- if (_reactNative.Platform.OS === 'android') {
63
- _reactNative.Keyboard.dismiss();
64
-
65
- (0, _lodash.delay)(() => {
66
- navigation.goBack();
67
- }, 100);
68
- return;
69
- }
54
+ _reactNative.Keyboard.dismiss();
70
55
 
71
- navigation.goBack();
56
+ (0, _lodash.delay)(() => {
57
+ navigation.goBack();
58
+ }, 100);
72
59
  };
73
60
 
74
61
  const {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/format-library/src/link/modal-screens/link-picker-screen.native.js"],"names":["LinkPickerScreen","navigation","route","onLinkPicked","url","title","Platform","OS","Keyboard","dismiss","navigate","linkSettingsScreens","settings","inputValue","text","onCancel","goBack","params"],"mappings":";;;;;;;;;AASA;;AANA;;AACA;;AACA;;AAMA;;AAKA;;AAhBA;AACA;AACA;;AAIA;AACA;AACA;;AAKA;AACA;AACA;AAGA,MAAMA,gBAAgB,GAAG,MAAM;AAC9B,QAAMC,UAAU,GAAG,4BAAnB;AACA,QAAMC,KAAK,GAAG,uBAAd;;AACA,QAAMC,YAAY,GAAG,QAAsB;AAAA,QAApB;AAAEC,MAAAA,GAAF;AAAOC,MAAAA;AAAP,KAAoB;;AAC1C,QAAKC,sBAASC,EAAT,KAAgB,SAArB,EAAiC;AAChCC,4BAASC,OAAT;;AACA,yBAAO,MAAM;AACZR,QAAAA,UAAU,CAACS,QAAX,CAAqBC,iBAAoBC,QAAzC,EAAmD;AAClDC,UAAAA,UAAU,EAAET,GADsC;AAElDU,UAAAA,IAAI,EAAET;AAF4C,SAAnD;AAIA,OALD,EAKG,GALH;AAMA;AACA;;AACDJ,IAAAA,UAAU,CAACS,QAAX,CAAqBC,iBAAoBC,QAAzC,EAAmD;AAClDC,MAAAA,UAAU,EAAET,GADsC;AAElDU,MAAAA,IAAI,EAAET;AAF4C,KAAnD;AAIA,GAfD;;AAiBA,QAAMU,QAAQ,GAAG,MAAM;AACtB,QAAKT,sBAASC,EAAT,KAAgB,SAArB,EAAiC;AAChCC,4BAASC,OAAT;;AACA,yBAAO,MAAM;AACZR,QAAAA,UAAU,CAACe,MAAX;AACA,OAFD,EAEG,GAFH;AAGA;AACA;;AACDf,IAAAA,UAAU,CAACe,MAAX;AACA,GATD;;AAWA,QAAM;AAAEH,IAAAA;AAAF,MAAiBX,KAAK,CAACe,MAA7B;AACA,SAAO,sBAAS,MAAM;AACrB,WACC,4BAAC,sBAAD;AACC,MAAA,KAAK,EAAGJ,UADT;AAEC,MAAA,YAAY,EAAGV,YAFhB;AAGC,MAAA,QAAQ,EAAGY;AAHZ,MADD;AAOA,GARM,EAQJ,CAAEF,UAAF,CARI,CAAP;AASA,CAzCD;;eA2Ceb,gB","sourcesContent":["/**\n * External dependencies\n */\nimport { Platform, Keyboard } from 'react-native';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport { delay } from 'lodash';\n/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\n\nimport { LinkPicker } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport linkSettingsScreens from './screens';\n\nconst LinkPickerScreen = () => {\n\tconst navigation = useNavigation();\n\tconst route = useRoute();\n\tconst onLinkPicked = ( { url, title } ) => {\n\t\tif ( Platform.OS === 'android' ) {\n\t\t\tKeyboard.dismiss();\n\t\t\tdelay( () => {\n\t\t\t\tnavigation.navigate( linkSettingsScreens.settings, {\n\t\t\t\t\tinputValue: url,\n\t\t\t\t\ttext: title,\n\t\t\t\t} );\n\t\t\t}, 100 );\n\t\t\treturn;\n\t\t}\n\t\tnavigation.navigate( linkSettingsScreens.settings, {\n\t\t\tinputValue: url,\n\t\t\ttext: title,\n\t\t} );\n\t};\n\n\tconst onCancel = () => {\n\t\tif ( Platform.OS === 'android' ) {\n\t\t\tKeyboard.dismiss();\n\t\t\tdelay( () => {\n\t\t\t\tnavigation.goBack();\n\t\t\t}, 100 );\n\t\t\treturn;\n\t\t}\n\t\tnavigation.goBack();\n\t};\n\n\tconst { inputValue } = route.params;\n\treturn useMemo( () => {\n\t\treturn (\n\t\t\t<LinkPicker\n\t\t\t\tvalue={ inputValue }\n\t\t\t\tonLinkPicked={ onLinkPicked }\n\t\t\t\tonCancel={ onCancel }\n\t\t\t/>\n\t\t);\n\t}, [ inputValue ] );\n};\n\nexport default LinkPickerScreen;\n"]}
1
+ {"version":3,"sources":["@wordpress/format-library/src/link/modal-screens/link-picker-screen.native.js"],"names":["LinkPickerScreen","navigation","route","onLinkPicked","url","title","Keyboard","dismiss","navigate","linkSettingsScreens","settings","inputValue","text","onCancel","goBack","params"],"mappings":";;;;;;;;;AASA;;AANA;;AACA;;AACA;;AAMA;;AAKA;;AAhBA;AACA;AACA;;AAIA;AACA;AACA;;AAKA;AACA;AACA;AAGA,MAAMA,gBAAgB,GAAG,MAAM;AAC9B,QAAMC,UAAU,GAAG,4BAAnB;AACA,QAAMC,KAAK,GAAG,uBAAd;;AACA,QAAMC,YAAY,GAAG,QAAsB;AAAA,QAApB;AAAEC,MAAAA,GAAF;AAAOC,MAAAA;AAAP,KAAoB;;AAC1CC,0BAASC,OAAT;;AACA,uBAAO,MAAM;AACZN,MAAAA,UAAU,CAACO,QAAX,CAAqBC,iBAAoBC,QAAzC,EAAmD;AAClDC,QAAAA,UAAU,EAAEP,GADsC;AAElDQ,QAAAA,IAAI,EAAEP;AAF4C,OAAnD;AAIA,KALD,EAKG,GALH;AAMA,GARD;;AAUA,QAAMQ,QAAQ,GAAG,MAAM;AACtBP,0BAASC,OAAT;;AACA,uBAAO,MAAM;AACZN,MAAAA,UAAU,CAACa,MAAX;AACA,KAFD,EAEG,GAFH;AAGA,GALD;;AAOA,QAAM;AAAEH,IAAAA;AAAF,MAAiBT,KAAK,CAACa,MAA7B;AACA,SAAO,sBAAS,MAAM;AACrB,WACC,4BAAC,sBAAD;AACC,MAAA,KAAK,EAAGJ,UADT;AAEC,MAAA,YAAY,EAAGR,YAFhB;AAGC,MAAA,QAAQ,EAAGU;AAHZ,MADD;AAOA,GARM,EAQJ,CAAEF,UAAF,CARI,CAAP;AASA,CA9BD;;eAgCeX,gB","sourcesContent":["/**\n * External dependencies\n */\nimport { Keyboard } from 'react-native';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport { delay } from 'lodash';\n/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\n\nimport { LinkPicker } from '@wordpress/components';\n\n/**\n * Internal dependencies\n */\nimport linkSettingsScreens from './screens';\n\nconst LinkPickerScreen = () => {\n\tconst navigation = useNavigation();\n\tconst route = useRoute();\n\tconst onLinkPicked = ( { url, title } ) => {\n\t\tKeyboard.dismiss();\n\t\tdelay( () => {\n\t\t\tnavigation.navigate( linkSettingsScreens.settings, {\n\t\t\t\tinputValue: url,\n\t\t\t\ttext: title,\n\t\t\t} );\n\t\t}, 100 );\n\t};\n\n\tconst onCancel = () => {\n\t\tKeyboard.dismiss();\n\t\tdelay( () => {\n\t\t\tnavigation.goBack();\n\t\t}, 100 );\n\t};\n\n\tconst { inputValue } = route.params;\n\treturn useMemo( () => {\n\t\treturn (\n\t\t\t<LinkPicker\n\t\t\t\tvalue={ inputValue }\n\t\t\t\tonLinkPicked={ onLinkPicked }\n\t\t\t\tonCancel={ onCancel }\n\t\t\t/>\n\t\t);\n\t}, [ inputValue ] );\n};\n\nexport default LinkPickerScreen;\n"]}
@@ -77,7 +77,9 @@ const LinkSettingsScreen = _ref => {
77
77
 
78
78
  (0, _element.useEffect)(() => {
79
79
  onHandleClosingBottomSheet(() => {
80
- submit(inputValue);
80
+ submit(inputValue, {
81
+ skipStateUpdates: true
82
+ });
81
83
  });
82
84
  }, [inputValue, opensInNewWindow, text]);
83
85
  (0, _element.useEffect)(() => {
@@ -87,24 +89,37 @@ const LinkSettingsScreen = _ref => {
87
89
  } = linkValues;
88
90
 
89
91
  if (!!inputValue && !isActiveLink && isVisible) {
90
- submitLink(false);
91
- } else if (inputValue === '' && isActiveLink || isRemovingLink) {
92
- removeLink(false);
92
+ submitLink({
93
+ shouldCloseBottomSheet: false
94
+ });
95
+ } else if ((inputValue === '' && isActiveLink || isRemovingLink) && isVisible) {
96
+ removeLink({
97
+ shouldCloseBottomSheet: false
98
+ });
93
99
  }
94
100
  }, [inputValue, isVisible, linkValues.isActiveLink, linkValues.isRemovingLink]);
95
101
 
96
- const clearFormat = () => {
102
+ const clearFormat = function () {
103
+ let {
104
+ skipStateUpdates = false
105
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
97
106
  onChange({ ...value,
98
107
  activeFormats: []
99
108
  });
100
- setLinkValues({
101
- isActiveLink: false,
102
- isRemovingLink: true
103
- });
109
+
110
+ if (!skipStateUpdates) {
111
+ setLinkValues({
112
+ isActiveLink: false,
113
+ isRemovingLink: true
114
+ });
115
+ }
104
116
  };
105
117
 
106
118
  const submitLink = function () {
107
- let shouldCloseBottomSheet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
119
+ let {
120
+ shouldCloseBottomSheet = true,
121
+ skipStateUpdates = false
122
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
108
123
  const url = (0, _url.prependHTTP)(inputValue);
109
124
  const linkText = text || inputValue;
110
125
  const format = (0, _utils.createLinkFormat)({
@@ -145,10 +160,13 @@ const LinkSettingsScreen = _ref => {
145
160
  onChange({ ...newAttributes,
146
161
  needsSelectionUpdate: true
147
162
  });
148
- setLinkValues({
149
- isActiveLink: true,
150
- isRemovingLink: false
151
- });
163
+
164
+ if (!skipStateUpdates) {
165
+ setLinkValues({
166
+ isActiveLink: true,
167
+ isRemovingLink: false
168
+ });
169
+ }
152
170
 
153
171
  if (!(0, _utils.isValidHref)(url)) {
154
172
  speak((0, _i18n.__)('Warning: the link has been inserted but may have errors. Please test it.'), 'assertive');
@@ -164,8 +182,13 @@ const LinkSettingsScreen = _ref => {
164
182
  };
165
183
 
166
184
  const removeLink = function () {
167
- let shouldCloseBottomSheet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
168
- clearFormat();
185
+ let {
186
+ shouldCloseBottomSheet = true,
187
+ skipStateUpdates = false
188
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
189
+ clearFormat({
190
+ skipStateUpdates
191
+ });
169
192
  onRemove();
170
193
 
171
194
  if (shouldCloseBottomSheet) {
@@ -173,11 +196,19 @@ const LinkSettingsScreen = _ref => {
173
196
  }
174
197
  };
175
198
 
176
- const submit = submitValue => {
199
+ const submit = function (submitValue) {
200
+ let {
201
+ skipStateUpdates = false
202
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
203
+
177
204
  if (submitValue === '') {
178
- removeLink();
205
+ removeLink({
206
+ skipStateUpdates
207
+ });
179
208
  } else {
180
- submitLink();
209
+ submitLink({
210
+ skipStateUpdates
211
+ });
181
212
  }
182
213
  };
183
214
 
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/format-library/src/link/modal-screens/link-settings-screen.native.js"],"names":["LinkSettingsScreen","onRemove","onClose","onChange","speak","value","isActive","activeAttributes","isVisible","text","setText","opensInNewWindow","setOpensInNewWindows","target","linkValues","setLinkValues","isActiveLink","isRemovingLink","shouldEnableBottomSheetMaxHeight","onHandleClosingBottomSheet","listProps","BottomSheetContext","navigation","route","inputValue","url","params","onLinkCellPressed","navigate","linkSettingsScreens","picker","submit","submitLink","removeLink","clearFormat","activeFormats","shouldCloseBottomSheet","linkText","format","newAttributes","toInsert","length","start","end","textLength","needsSelectionUpdate","submitValue","unsubscribe","addListener","shouldShowLinkOptions","textColor","undefined","external","styles","clearLinkButton","safeAreaBottomInset"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { useNavigation, useRoute } from '@react-navigation/native';\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useState, useContext, useEffect, useMemo } from '@wordpress/element';\nimport { prependHTTP } from '@wordpress/url';\n\nimport { BottomSheet, BottomSheetContext } from '@wordpress/components';\nimport {\n\tcreate,\n\tinsert,\n\tisCollapsed,\n\tapplyFormat,\n\tgetTextContent,\n\tslice,\n} from '@wordpress/rich-text';\nimport { external, textColor } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { createLinkFormat, isValidHref } from '../utils';\nimport linkSettingsScreens from './screens';\n\nimport styles from '../modal.scss';\n\nconst LinkSettingsScreen = ( {\n\tonRemove,\n\tonClose,\n\tonChange,\n\tspeak,\n\tvalue,\n\tisActive,\n\tactiveAttributes,\n\tisVisible,\n} ) => {\n\tconst [ text, setText ] = useState( getTextContent( slice( value ) ) );\n\tconst [ opensInNewWindow, setOpensInNewWindows ] = useState(\n\t\tactiveAttributes.target === '_blank'\n\t);\n\tconst [ linkValues, setLinkValues ] = useState( {\n\t\tisActiveLink: isActive,\n\t\tisRemovingLink: false,\n\t} );\n\n\tconst {\n\t\tshouldEnableBottomSheetMaxHeight,\n\t\tonHandleClosingBottomSheet,\n\t\tlistProps,\n\t} = useContext( BottomSheetContext );\n\n\tconst navigation = useNavigation();\n\tconst route = useRoute();\n\tconst { inputValue = activeAttributes.url || '' } = route.params || {};\n\tconst onLinkCellPressed = () => {\n\t\tshouldEnableBottomSheetMaxHeight( false );\n\t\tnavigation.navigate( linkSettingsScreens.picker, { inputValue } );\n\t};\n\tuseEffect( () => {\n\t\tonHandleClosingBottomSheet( () => {\n\t\t\tsubmit( inputValue );\n\t\t} );\n\t}, [ inputValue, opensInNewWindow, text ] );\n\n\tuseEffect( () => {\n\t\tconst { isActiveLink, isRemovingLink } = linkValues;\n\t\tif ( !! inputValue && ! isActiveLink && isVisible ) {\n\t\t\tsubmitLink( false );\n\t\t} else if ( ( inputValue === '' && isActiveLink ) || isRemovingLink ) {\n\t\t\tremoveLink( false );\n\t\t}\n\t}, [\n\t\tinputValue,\n\t\tisVisible,\n\t\tlinkValues.isActiveLink,\n\t\tlinkValues.isRemovingLink,\n\t] );\n\n\tconst clearFormat = () => {\n\t\tonChange( { ...value, activeFormats: [] } );\n\t\tsetLinkValues( { isActiveLink: false, isRemovingLink: true } );\n\t};\n\n\tconst submitLink = ( shouldCloseBottomSheet = true ) => {\n\t\tconst url = prependHTTP( inputValue );\n\t\tconst linkText = text || inputValue;\n\t\tconst format = createLinkFormat( {\n\t\t\turl,\n\t\t\topensInNewWindow,\n\t\t\ttext: linkText,\n\t\t} );\n\t\tlet newAttributes;\n\t\tif ( isCollapsed( value ) && ! isActive ) {\n\t\t\t// insert link\n\t\t\tconst toInsert = applyFormat(\n\t\t\t\tcreate( { text: linkText } ),\n\t\t\t\tformat,\n\t\t\t\t0,\n\t\t\t\tlinkText.length\n\t\t\t);\n\t\t\tnewAttributes = insert( value, toInsert );\n\t\t} else if ( text !== getTextContent( slice( value ) ) ) {\n\t\t\t// edit text in selected link\n\t\t\tconst toInsert = applyFormat(\n\t\t\t\tcreate( { text } ),\n\t\t\t\tformat,\n\t\t\t\t0,\n\t\t\t\ttext.length\n\t\t\t);\n\t\t\tnewAttributes = insert( value, toInsert, value.start, value.end );\n\t\t} else {\n\t\t\t// transform selected text into link\n\t\t\tnewAttributes = applyFormat( value, format );\n\t\t}\n\t\t// move selection to end of link\n\t\tconst textLength = newAttributes.text.length;\n\t\t// check for zero width spaces\n\t\tif ( newAttributes.end > textLength ) {\n\t\t\tnewAttributes.start = textLength;\n\t\t\tnewAttributes.end = textLength;\n\t\t} else {\n\t\t\tnewAttributes.start = newAttributes.end;\n\t\t}\n\t\tnewAttributes.activeFormats = [];\n\t\tonChange( { ...newAttributes, needsSelectionUpdate: true } );\n\t\tsetLinkValues( { isActiveLink: true, isRemovingLink: false } );\n\n\t\tif ( ! isValidHref( url ) ) {\n\t\t\tspeak(\n\t\t\t\t__(\n\t\t\t\t\t'Warning: the link has been inserted but may have errors. Please test it.'\n\t\t\t\t),\n\t\t\t\t'assertive'\n\t\t\t);\n\t\t} else if ( isActive ) {\n\t\t\tspeak( __( 'Link edited.' ), 'assertive' );\n\t\t} else {\n\t\t\tspeak( __( 'Link inserted' ), 'assertive' );\n\t\t}\n\n\t\tif ( shouldCloseBottomSheet ) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst removeLink = ( shouldCloseBottomSheet = true ) => {\n\t\tclearFormat();\n\t\tonRemove();\n\t\tif ( shouldCloseBottomSheet ) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst submit = ( submitValue ) => {\n\t\tif ( submitValue === '' ) {\n\t\t\tremoveLink();\n\t\t} else {\n\t\t\tsubmitLink();\n\t\t}\n\t};\n\n\tuseEffect( () => {\n\t\tconst unsubscribe = navigation.addListener( 'focus', () => {\n\t\t\tconst { params = {} } = route;\n\t\t\tif ( ! text && params.text ) {\n\t\t\t\tsetText( params.text );\n\t\t\t}\n\t\t} );\n\t\treturn unsubscribe;\n\t}, [ navigation, route.params?.text, text ] );\n\n\treturn useMemo( () => {\n\t\tconst shouldShowLinkOptions = !! inputValue;\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BottomSheet.LinkCell\n\t\t\t\t\tvalue={ inputValue }\n\t\t\t\t\tonPress={ onLinkCellPressed }\n\t\t\t\t/>\n\t\t\t\t<BottomSheet.Cell\n\t\t\t\t\ticon={ textColor }\n\t\t\t\t\tlabel={ __( 'Link text' ) }\n\t\t\t\t\tvalue={ text }\n\t\t\t\t\tplaceholder={ __( 'Add link text' ) }\n\t\t\t\t\tonChangeValue={ setText }\n\t\t\t\t\tonSubmit={ submit }\n\t\t\t\t\tseparatorType={ shouldShowLinkOptions ? undefined : 'none' }\n\t\t\t\t/>\n\t\t\t\t{ shouldShowLinkOptions && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<BottomSheet.SwitchCell\n\t\t\t\t\t\t\ticon={ external }\n\t\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\t\tvalue={ opensInNewWindow }\n\t\t\t\t\t\t\tonValueChange={ setOpensInNewWindows }\n\t\t\t\t\t\t\tseparatorType={ 'fullWidth' }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BottomSheet.Cell\n\t\t\t\t\t\t\tlabel={ __( 'Remove link' ) }\n\t\t\t\t\t\t\tlabelStyle={ styles.clearLinkButton }\n\t\t\t\t\t\t\tseparatorType={ 'none' }\n\t\t\t\t\t\t\tonPress={ removeLink }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</>\n\t\t);\n\t}, [ inputValue, text, opensInNewWindow, listProps.safeAreaBottomInset ] );\n};\n\nexport default LinkSettingsScreen;\n"]}
1
+ {"version":3,"sources":["@wordpress/format-library/src/link/modal-screens/link-settings-screen.native.js"],"names":["LinkSettingsScreen","onRemove","onClose","onChange","speak","value","isActive","activeAttributes","isVisible","text","setText","opensInNewWindow","setOpensInNewWindows","target","linkValues","setLinkValues","isActiveLink","isRemovingLink","shouldEnableBottomSheetMaxHeight","onHandleClosingBottomSheet","listProps","BottomSheetContext","navigation","route","inputValue","url","params","onLinkCellPressed","navigate","linkSettingsScreens","picker","submit","skipStateUpdates","submitLink","shouldCloseBottomSheet","removeLink","clearFormat","activeFormats","linkText","format","newAttributes","toInsert","length","start","end","textLength","needsSelectionUpdate","submitValue","unsubscribe","addListener","shouldShowLinkOptions","textColor","undefined","external","styles","clearLinkButton","safeAreaBottomInset"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { useNavigation, useRoute } from '@react-navigation/native';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useState, useContext, useEffect, useMemo } from '@wordpress/element';\nimport { prependHTTP } from '@wordpress/url';\nimport { BottomSheet, BottomSheetContext } from '@wordpress/components';\nimport {\n\tcreate,\n\tinsert,\n\tisCollapsed,\n\tapplyFormat,\n\tgetTextContent,\n\tslice,\n} from '@wordpress/rich-text';\nimport { external, textColor } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport { createLinkFormat, isValidHref } from '../utils';\nimport linkSettingsScreens from './screens';\n\nimport styles from '../modal.scss';\n\nconst LinkSettingsScreen = ( {\n\tonRemove,\n\tonClose,\n\tonChange,\n\tspeak,\n\tvalue,\n\tisActive,\n\tactiveAttributes,\n\tisVisible,\n} ) => {\n\tconst [ text, setText ] = useState( getTextContent( slice( value ) ) );\n\tconst [ opensInNewWindow, setOpensInNewWindows ] = useState(\n\t\tactiveAttributes.target === '_blank'\n\t);\n\tconst [ linkValues, setLinkValues ] = useState( {\n\t\tisActiveLink: isActive,\n\t\tisRemovingLink: false,\n\t} );\n\n\tconst {\n\t\tshouldEnableBottomSheetMaxHeight,\n\t\tonHandleClosingBottomSheet,\n\t\tlistProps,\n\t} = useContext( BottomSheetContext );\n\n\tconst navigation = useNavigation();\n\tconst route = useRoute();\n\tconst { inputValue = activeAttributes.url || '' } = route.params || {};\n\tconst onLinkCellPressed = () => {\n\t\tshouldEnableBottomSheetMaxHeight( false );\n\t\tnavigation.navigate( linkSettingsScreens.picker, { inputValue } );\n\t};\n\tuseEffect( () => {\n\t\tonHandleClosingBottomSheet( () => {\n\t\t\tsubmit( inputValue, { skipStateUpdates: true } );\n\t\t} );\n\t}, [ inputValue, opensInNewWindow, text ] );\n\n\tuseEffect( () => {\n\t\tconst { isActiveLink, isRemovingLink } = linkValues;\n\t\tif ( !! inputValue && ! isActiveLink && isVisible ) {\n\t\t\tsubmitLink( { shouldCloseBottomSheet: false } );\n\t\t} else if (\n\t\t\t( ( inputValue === '' && isActiveLink ) || isRemovingLink ) &&\n\t\t\tisVisible\n\t\t) {\n\t\t\tremoveLink( { shouldCloseBottomSheet: false } );\n\t\t}\n\t}, [\n\t\tinputValue,\n\t\tisVisible,\n\t\tlinkValues.isActiveLink,\n\t\tlinkValues.isRemovingLink,\n\t] );\n\n\tconst clearFormat = ( { skipStateUpdates = false } = {} ) => {\n\t\tonChange( { ...value, activeFormats: [] } );\n\t\tif ( ! skipStateUpdates ) {\n\t\t\tsetLinkValues( { isActiveLink: false, isRemovingLink: true } );\n\t\t}\n\t};\n\n\tconst submitLink = ( {\n\t\tshouldCloseBottomSheet = true,\n\t\tskipStateUpdates = false,\n\t} = {} ) => {\n\t\tconst url = prependHTTP( inputValue );\n\t\tconst linkText = text || inputValue;\n\t\tconst format = createLinkFormat( {\n\t\t\turl,\n\t\t\topensInNewWindow,\n\t\t\ttext: linkText,\n\t\t} );\n\t\tlet newAttributes;\n\t\tif ( isCollapsed( value ) && ! isActive ) {\n\t\t\t// insert link\n\t\t\tconst toInsert = applyFormat(\n\t\t\t\tcreate( { text: linkText } ),\n\t\t\t\tformat,\n\t\t\t\t0,\n\t\t\t\tlinkText.length\n\t\t\t);\n\t\t\tnewAttributes = insert( value, toInsert );\n\t\t} else if ( text !== getTextContent( slice( value ) ) ) {\n\t\t\t// edit text in selected link\n\t\t\tconst toInsert = applyFormat(\n\t\t\t\tcreate( { text } ),\n\t\t\t\tformat,\n\t\t\t\t0,\n\t\t\t\ttext.length\n\t\t\t);\n\t\t\tnewAttributes = insert( value, toInsert, value.start, value.end );\n\t\t} else {\n\t\t\t// transform selected text into link\n\t\t\tnewAttributes = applyFormat( value, format );\n\t\t}\n\t\t// move selection to end of link\n\t\tconst textLength = newAttributes.text.length;\n\t\t// check for zero width spaces\n\t\tif ( newAttributes.end > textLength ) {\n\t\t\tnewAttributes.start = textLength;\n\t\t\tnewAttributes.end = textLength;\n\t\t} else {\n\t\t\tnewAttributes.start = newAttributes.end;\n\t\t}\n\t\tnewAttributes.activeFormats = [];\n\t\tonChange( { ...newAttributes, needsSelectionUpdate: true } );\n\t\tif ( ! skipStateUpdates ) {\n\t\t\tsetLinkValues( { isActiveLink: true, isRemovingLink: false } );\n\t\t}\n\n\t\tif ( ! isValidHref( url ) ) {\n\t\t\tspeak(\n\t\t\t\t__(\n\t\t\t\t\t'Warning: the link has been inserted but may have errors. Please test it.'\n\t\t\t\t),\n\t\t\t\t'assertive'\n\t\t\t);\n\t\t} else if ( isActive ) {\n\t\t\tspeak( __( 'Link edited.' ), 'assertive' );\n\t\t} else {\n\t\t\tspeak( __( 'Link inserted' ), 'assertive' );\n\t\t}\n\n\t\tif ( shouldCloseBottomSheet ) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst removeLink = ( {\n\t\tshouldCloseBottomSheet = true,\n\t\tskipStateUpdates = false,\n\t} = {} ) => {\n\t\tclearFormat( { skipStateUpdates } );\n\t\tonRemove();\n\t\tif ( shouldCloseBottomSheet ) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst submit = ( submitValue, { skipStateUpdates = false } = {} ) => {\n\t\tif ( submitValue === '' ) {\n\t\t\tremoveLink( { skipStateUpdates } );\n\t\t} else {\n\t\t\tsubmitLink( { skipStateUpdates } );\n\t\t}\n\t};\n\n\tuseEffect( () => {\n\t\tconst unsubscribe = navigation.addListener( 'focus', () => {\n\t\t\tconst { params = {} } = route;\n\t\t\tif ( ! text && params.text ) {\n\t\t\t\tsetText( params.text );\n\t\t\t}\n\t\t} );\n\t\treturn unsubscribe;\n\t}, [ navigation, route.params?.text, text ] );\n\n\treturn useMemo( () => {\n\t\tconst shouldShowLinkOptions = !! inputValue;\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BottomSheet.LinkCell\n\t\t\t\t\tvalue={ inputValue }\n\t\t\t\t\tonPress={ onLinkCellPressed }\n\t\t\t\t/>\n\t\t\t\t<BottomSheet.Cell\n\t\t\t\t\ticon={ textColor }\n\t\t\t\t\tlabel={ __( 'Link text' ) }\n\t\t\t\t\tvalue={ text }\n\t\t\t\t\tplaceholder={ __( 'Add link text' ) }\n\t\t\t\t\tonChangeValue={ setText }\n\t\t\t\t\tonSubmit={ submit }\n\t\t\t\t\tseparatorType={ shouldShowLinkOptions ? undefined : 'none' }\n\t\t\t\t/>\n\t\t\t\t{ shouldShowLinkOptions && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<BottomSheet.SwitchCell\n\t\t\t\t\t\t\ticon={ external }\n\t\t\t\t\t\t\tlabel={ __( 'Open in new tab' ) }\n\t\t\t\t\t\t\tvalue={ opensInNewWindow }\n\t\t\t\t\t\t\tonValueChange={ setOpensInNewWindows }\n\t\t\t\t\t\t\tseparatorType={ 'fullWidth' }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<BottomSheet.Cell\n\t\t\t\t\t\t\tlabel={ __( 'Remove link' ) }\n\t\t\t\t\t\t\tlabelStyle={ styles.clearLinkButton }\n\t\t\t\t\t\t\tseparatorType={ 'none' }\n\t\t\t\t\t\t\tonPress={ removeLink }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t) }\n\t\t\t</>\n\t\t);\n\t}, [ inputValue, text, opensInNewWindow, listProps.safeAreaBottomInset ] );\n};\n\nexport default LinkSettingsScreen;\n"]}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.textColor = void 0;
9
+
10
+ var _element = require("@wordpress/element");
11
+
12
+ var _lodash = require("lodash");
13
+
14
+ var _reactNative = require("react-native");
15
+
16
+ var _i18n = require("@wordpress/i18n");
17
+
18
+ var _blockEditor = require("@wordpress/block-editor");
19
+
20
+ var _components = require("@wordpress/components");
21
+
22
+ var _icons = require("@wordpress/icons");
23
+
24
+ var _richText = require("@wordpress/rich-text");
25
+
26
+ var _compose = require("@wordpress/compose");
27
+
28
+ var _inline = require("./inline.js");
29
+
30
+ var _index = require("./index.js");
31
+
32
+ var _inline2 = _interopRequireDefault(require("./inline"));
33
+
34
+ var _style = _interopRequireDefault(require("./style.scss"));
35
+
36
+ /**
37
+ * External dependencies
38
+ */
39
+
40
+ /**
41
+ * WordPress dependencies
42
+ */
43
+
44
+ /**
45
+ * Internal dependencies
46
+ */
47
+ const name = 'core/text-color';
48
+ const title = (0, _i18n.__)('Text color');
49
+ const EMPTY_ARRAY = [];
50
+
51
+ function getComputedStyleProperty(element, property) {
52
+ const {
53
+ props: {
54
+ style = {}
55
+ }
56
+ } = element;
57
+
58
+ if (property === 'background-color') {
59
+ var _baseColors$color;
60
+
61
+ const {
62
+ backgroundColor,
63
+ baseColors
64
+ } = style;
65
+
66
+ if (backgroundColor !== 'transparent') {
67
+ return backgroundColor;
68
+ } else if (baseColors && baseColors !== null && baseColors !== void 0 && (_baseColors$color = baseColors.color) !== null && _baseColors$color !== void 0 && _baseColors$color.background) {
69
+ var _baseColors$color2;
70
+
71
+ return baseColors === null || baseColors === void 0 ? void 0 : (_baseColors$color2 = baseColors.color) === null || _baseColors$color2 === void 0 ? void 0 : _baseColors$color2.background;
72
+ }
73
+
74
+ return 'transparent';
75
+ }
76
+ }
77
+
78
+ function fillComputedColors(element, _ref) {
79
+ let {
80
+ color,
81
+ backgroundColor
82
+ } = _ref;
83
+
84
+ if (!color && !backgroundColor) {
85
+ return;
86
+ }
87
+
88
+ return {
89
+ color: color || getComputedStyleProperty(element, 'color'),
90
+ backgroundColor: getComputedStyleProperty(element, 'background-color')
91
+ };
92
+ }
93
+
94
+ function TextColorEdit(_ref2) {
95
+ let {
96
+ value,
97
+ onChange,
98
+ isActive,
99
+ activeAttributes,
100
+ contentRef
101
+ } = _ref2;
102
+ const allowCustomControl = (0, _blockEditor.useSetting)('color.custom');
103
+ const colors = (0, _blockEditor.useSetting)('color.palette') || EMPTY_ARRAY;
104
+ const [isAddingColor, setIsAddingColor] = (0, _element.useState)(false);
105
+ const enableIsAddingColor = (0, _element.useCallback)(() => setIsAddingColor(true), [setIsAddingColor]);
106
+ const disableIsAddingColor = (0, _element.useCallback)(() => setIsAddingColor(false), [setIsAddingColor]);
107
+ const colorIndicatorStyle = (0, _element.useMemo)(() => fillComputedColors(contentRef, (0, _inline.getActiveColors)(value, name, colors)), [value, colors]);
108
+ const hasColorsToChoose = !(0, _lodash.isEmpty)(colors) || !allowCustomControl;
109
+ const onPressButton = (0, _element.useCallback)(() => {
110
+ if (hasColorsToChoose) {
111
+ enableIsAddingColor();
112
+ } else {
113
+ onChange((0, _richText.removeFormat)(value, name));
114
+ }
115
+ }, [hasColorsToChoose, value]);
116
+ const outlineStyle = (0, _compose.usePreferredColorSchemeStyle)(_style.default['components-inline-color__outline'], _style.default['components-inline-color__outline--dark']);
117
+
118
+ if (!hasColorsToChoose && !isActive) {
119
+ return null;
120
+ }
121
+
122
+ const isActiveStyle = { ...colorIndicatorStyle,
123
+ ...(!(colorIndicatorStyle !== null && colorIndicatorStyle !== void 0 && colorIndicatorStyle.backgroundColor) ? {
124
+ backgroundColor: 'transparent'
125
+ } : {}),
126
+ ..._style.default['components-inline-color--is-active']
127
+ };
128
+ const customContainerStyles = _style.default['components-inline-color__button-container'];
129
+ return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(_blockEditor.BlockControls, null, (0, _element.createElement)(_components.ToolbarGroup, null, isActive && (0, _element.createElement)(_reactNative.View, {
130
+ style: outlineStyle,
131
+ pointerEvents: "none"
132
+ }), (0, _element.createElement)(_components.ToolbarButton, {
133
+ name: "text-color",
134
+ isActive: isActive,
135
+ icon: (0, _element.createElement)(_icons.Icon, {
136
+ icon: _icons.textColor,
137
+ style: (colorIndicatorStyle === null || colorIndicatorStyle === void 0 ? void 0 : colorIndicatorStyle.color) && {
138
+ color: colorIndicatorStyle.color
139
+ }
140
+ }),
141
+ title: title,
142
+ extraProps: {
143
+ isActiveStyle,
144
+ customContainerStyles
145
+ } // If has no colors to choose but a color is active remove the color onClick
146
+ ,
147
+ onClick: onPressButton
148
+ }))), isAddingColor && (0, _element.createElement)(_inline2.default, {
149
+ name: name,
150
+ onClose: disableIsAddingColor,
151
+ activeAttributes: activeAttributes,
152
+ value: value,
153
+ onChange: onChange,
154
+ contentRef: contentRef
155
+ }));
156
+ }
157
+
158
+ const textColor = {
159
+ name,
160
+ title,
161
+ tagName: 'mark',
162
+ className: 'has-inline-color',
163
+ attributes: {
164
+ style: 'style',
165
+ class: 'class'
166
+ },
167
+
168
+ /*
169
+ * Since this format relies on the <mark> tag, it's important to
170
+ * prevent the default yellow background color applied by most
171
+ * browsers. The solution is to detect when this format is used with a
172
+ * text color but no background color, and in such cases to override
173
+ * the default styling with a transparent background.
174
+ *
175
+ * @see https://github.com/WordPress/gutenberg/pull/35516
176
+ */
177
+ __unstableFilterAttributeValue(key, value) {
178
+ if (key !== 'style') return value; // We need to remove the extra spaces within the styles on mobile
179
+
180
+ const newValue = value === null || value === void 0 ? void 0 : value.replace(/ /g, ''); // We should not add a background-color if it's already set
181
+
182
+ if (newValue && newValue.includes('background-color')) return newValue;
183
+ const addedCSS = ['background-color', _index.transparentValue].join(':'); // Prepend `addedCSS` to avoid a double `;;` as any the existing CSS
184
+ // rules will already include a `;`.
185
+
186
+ return newValue ? [addedCSS, newValue].join(';') : addedCSS;
187
+ },
188
+
189
+ edit: TextColorEdit
190
+ };
191
+ exports.textColor = textColor;
192
+ //# sourceMappingURL=index.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/format-library/src/text-color/index.native.js"],"names":["name","title","EMPTY_ARRAY","getComputedStyleProperty","element","property","props","style","backgroundColor","baseColors","color","background","fillComputedColors","TextColorEdit","value","onChange","isActive","activeAttributes","contentRef","allowCustomControl","colors","isAddingColor","setIsAddingColor","enableIsAddingColor","disableIsAddingColor","colorIndicatorStyle","hasColorsToChoose","onPressButton","outlineStyle","styles","isActiveStyle","customContainerStyles","textColorIcon","textColor","tagName","className","attributes","class","__unstableFilterAttributeValue","key","newValue","replace","includes","addedCSS","transparentValue","join","edit"],"mappings":";;;;;;;;;AAUA;;AAPA;;AACA;;AAKA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAKA;;AACA;;AACA;;AACA;;AAvBA;AACA;AACA;;AAIA;AACA;AACA;;AASA;AACA;AACA;AAMA,MAAMA,IAAI,GAAG,iBAAb;AACA,MAAMC,KAAK,GAAG,cAAI,YAAJ,CAAd;AAEA,MAAMC,WAAW,GAAG,EAApB;;AAEA,SAASC,wBAAT,CAAmCC,OAAnC,EAA4CC,QAA5C,EAAuD;AACtD,QAAM;AACLC,IAAAA,KAAK,EAAE;AAAEC,MAAAA,KAAK,GAAG;AAAV;AADF,MAEFH,OAFJ;;AAIA,MAAKC,QAAQ,KAAK,kBAAlB,EAAuC;AAAA;;AACtC,UAAM;AAAEG,MAAAA,eAAF;AAAmBC,MAAAA;AAAnB,QAAkCF,KAAxC;;AAEA,QAAKC,eAAe,KAAK,aAAzB,EAAyC;AACxC,aAAOA,eAAP;AACA,KAFD,MAEO,IAAKC,UAAU,IAAIA,UAAJ,aAAIA,UAAJ,oCAAIA,UAAU,CAAEC,KAAhB,8CAAI,kBAAmBC,UAAtC,EAAmD;AAAA;;AACzD,aAAOF,UAAP,aAAOA,UAAP,6CAAOA,UAAU,CAAEC,KAAnB,uDAAO,mBAAmBC,UAA1B;AACA;;AAED,WAAO,aAAP;AACA;AACD;;AAED,SAASC,kBAAT,CAA6BR,OAA7B,QAAmE;AAAA,MAA7B;AAAEM,IAAAA,KAAF;AAASF,IAAAA;AAAT,GAA6B;;AAClE,MAAK,CAAEE,KAAF,IAAW,CAAEF,eAAlB,EAAoC;AACnC;AACA;;AAED,SAAO;AACNE,IAAAA,KAAK,EAAEA,KAAK,IAAIP,wBAAwB,CAAEC,OAAF,EAAW,OAAX,CADlC;AAENI,IAAAA,eAAe,EAAEL,wBAAwB,CACxCC,OADwC,EAExC,kBAFwC;AAFnC,GAAP;AAOA;;AAED,SAASS,aAAT,QAMI;AAAA,MANoB;AACvBC,IAAAA,KADuB;AAEvBC,IAAAA,QAFuB;AAGvBC,IAAAA,QAHuB;AAIvBC,IAAAA,gBAJuB;AAKvBC,IAAAA;AALuB,GAMpB;AACH,QAAMC,kBAAkB,GAAG,6BAAY,cAAZ,CAA3B;AACA,QAAMC,MAAM,GAAG,6BAAY,eAAZ,KAAiClB,WAAhD;AACA,QAAM,CAAEmB,aAAF,EAAiBC,gBAAjB,IAAsC,uBAAU,KAAV,CAA5C;AACA,QAAMC,mBAAmB,GAAG,0BAAa,MAAMD,gBAAgB,CAAE,IAAF,CAAnC,EAA6C,CACxEA,gBADwE,CAA7C,CAA5B;AAGA,QAAME,oBAAoB,GAAG,0BAAa,MAAMF,gBAAgB,CAAE,KAAF,CAAnC,EAA8C,CAC1EA,gBAD0E,CAA9C,CAA7B;AAGA,QAAMG,mBAAmB,GAAG,sBAC3B,MACCb,kBAAkB,CACjBM,UADiB,EAEjB,6BAAiBJ,KAAjB,EAAwBd,IAAxB,EAA8BoB,MAA9B,CAFiB,CAFQ,EAM3B,CAAEN,KAAF,EAASM,MAAT,CAN2B,CAA5B;AASA,QAAMM,iBAAiB,GAAG,CAAE,qBAASN,MAAT,CAAF,IAAuB,CAAED,kBAAnD;AAEA,QAAMQ,aAAa,GAAG,0BAAa,MAAM;AACxC,QAAKD,iBAAL,EAAyB;AACxBH,MAAAA,mBAAmB;AACnB,KAFD,MAEO;AACNR,MAAAA,QAAQ,CAAE,4BAAcD,KAAd,EAAqBd,IAArB,CAAF,CAAR;AACA;AACD,GANqB,EAMnB,CAAE0B,iBAAF,EAAqBZ,KAArB,CANmB,CAAtB;AAQA,QAAMc,YAAY,GAAG,2CACpBC,eAAQ,kCAAR,CADoB,EAEpBA,eAAQ,wCAAR,CAFoB,CAArB;;AAKA,MAAK,CAAEH,iBAAF,IAAuB,CAAEV,QAA9B,EAAyC;AACxC,WAAO,IAAP;AACA;;AAED,QAAMc,aAAa,GAAG,EACrB,GAAGL,mBADkB;AAErB,QAAK,EAAEA,mBAAF,aAAEA,mBAAF,eAAEA,mBAAmB,CAAEjB,eAAvB,IACF;AAAEA,MAAAA,eAAe,EAAE;AAAnB,KADE,GAEF,EAFH,CAFqB;AAKrB,OAAGqB,eAAQ,oCAAR;AALkB,GAAtB;AAQA,QAAME,qBAAqB,GAC1BF,eAAQ,2CAAR,CADD;AAGA,SACC,qDACC,4BAAC,0BAAD,QACC,4BAAC,wBAAD,QACGb,QAAQ,IACT,4BAAC,iBAAD;AAAM,IAAA,KAAK,EAAGY,YAAd;AAA6B,IAAA,aAAa,EAAC;AAA3C,IAFF,EAKC,4BAAC,yBAAD;AACC,IAAA,IAAI,EAAC,YADN;AAEC,IAAA,QAAQ,EAAGZ,QAFZ;AAGC,IAAA,IAAI,EACH,4BAAC,WAAD;AACC,MAAA,IAAI,EAAGgB,gBADR;AAEC,MAAA,KAAK,EACJ,CAAAP,mBAAmB,SAAnB,IAAAA,mBAAmB,WAAnB,YAAAA,mBAAmB,CAAEf,KAArB,KAA8B;AAC7BA,QAAAA,KAAK,EAAEe,mBAAmB,CAACf;AADE;AAHhC,MAJF;AAaC,IAAA,KAAK,EAAGT,KAbT;AAcC,IAAA,UAAU,EAAG;AACZ6B,MAAAA,aADY;AAEZC,MAAAA;AAFY,KAdd,CAkBC;AAlBD;AAmBC,IAAA,OAAO,EAAGJ;AAnBX,IALD,CADD,CADD,EA8BGN,aAAa,IACd,4BAAC,gBAAD;AACC,IAAA,IAAI,EAAGrB,IADR;AAEC,IAAA,OAAO,EAAGwB,oBAFX;AAGC,IAAA,gBAAgB,EAAGP,gBAHpB;AAIC,IAAA,KAAK,EAAGH,KAJT;AAKC,IAAA,QAAQ,EAAGC,QALZ;AAMC,IAAA,UAAU,EAAGG;AANd,IA/BF,CADD;AA2CA;;AAEM,MAAMe,SAAS,GAAG;AACxBjC,EAAAA,IADwB;AAExBC,EAAAA,KAFwB;AAGxBiC,EAAAA,OAAO,EAAE,MAHe;AAIxBC,EAAAA,SAAS,EAAE,kBAJa;AAKxBC,EAAAA,UAAU,EAAE;AACX7B,IAAAA,KAAK,EAAE,OADI;AAEX8B,IAAAA,KAAK,EAAE;AAFI,GALY;;AASxB;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACCC,EAAAA,8BAA8B,CAAEC,GAAF,EAAOzB,KAAP,EAAe;AAC5C,QAAKyB,GAAG,KAAK,OAAb,EAAuB,OAAOzB,KAAP,CADqB,CAE5C;;AACA,UAAM0B,QAAQ,GAAG1B,KAAH,aAAGA,KAAH,uBAAGA,KAAK,CAAE2B,OAAP,CAAgB,IAAhB,EAAsB,EAAtB,CAAjB,CAH4C,CAI5C;;AACA,QAAKD,QAAQ,IAAIA,QAAQ,CAACE,QAAT,CAAmB,kBAAnB,CAAjB,EACC,OAAOF,QAAP;AACD,UAAMG,QAAQ,GAAG,CAAE,kBAAF,EAAsBC,uBAAtB,EAAyCC,IAAzC,CAA+C,GAA/C,CAAjB,CAP4C,CAQ5C;AACA;;AACA,WAAOL,QAAQ,GAAG,CAAEG,QAAF,EAAYH,QAAZ,EAAuBK,IAAvB,CAA6B,GAA7B,CAAH,GAAwCF,QAAvD;AACA,GA7BuB;;AA8BxBG,EAAAA,IAAI,EAAEjC;AA9BkB,CAAlB","sourcesContent":["/**\n * External dependencies\n */\nimport { isEmpty } from 'lodash';\nimport { View } from 'react-native';\n\n/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useCallback, useMemo, useState } from '@wordpress/element';\nimport { BlockControls, useSetting } from '@wordpress/block-editor';\nimport { ToolbarGroup, ToolbarButton } from '@wordpress/components';\nimport { Icon, textColor as textColorIcon } from '@wordpress/icons';\nimport { removeFormat } from '@wordpress/rich-text';\nimport { usePreferredColorSchemeStyle } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { getActiveColors } from './inline.js';\nimport { transparentValue } from './index.js';\nimport { default as InlineColorUI } from './inline';\nimport styles from './style.scss';\n\nconst name = 'core/text-color';\nconst title = __( 'Text color' );\n\nconst EMPTY_ARRAY = [];\n\nfunction getComputedStyleProperty( element, property ) {\n\tconst {\n\t\tprops: { style = {} },\n\t} = element;\n\n\tif ( property === 'background-color' ) {\n\t\tconst { backgroundColor, baseColors } = style;\n\n\t\tif ( backgroundColor !== 'transparent' ) {\n\t\t\treturn backgroundColor;\n\t\t} else if ( baseColors && baseColors?.color?.background ) {\n\t\t\treturn baseColors?.color?.background;\n\t\t}\n\n\t\treturn 'transparent';\n\t}\n}\n\nfunction fillComputedColors( element, { color, backgroundColor } ) {\n\tif ( ! color && ! backgroundColor ) {\n\t\treturn;\n\t}\n\n\treturn {\n\t\tcolor: color || getComputedStyleProperty( element, 'color' ),\n\t\tbackgroundColor: getComputedStyleProperty(\n\t\t\telement,\n\t\t\t'background-color'\n\t\t),\n\t};\n}\n\nfunction TextColorEdit( {\n\tvalue,\n\tonChange,\n\tisActive,\n\tactiveAttributes,\n\tcontentRef,\n} ) {\n\tconst allowCustomControl = useSetting( 'color.custom' );\n\tconst colors = useSetting( 'color.palette' ) || EMPTY_ARRAY;\n\tconst [ isAddingColor, setIsAddingColor ] = useState( false );\n\tconst enableIsAddingColor = useCallback( () => setIsAddingColor( true ), [\n\t\tsetIsAddingColor,\n\t] );\n\tconst disableIsAddingColor = useCallback( () => setIsAddingColor( false ), [\n\t\tsetIsAddingColor,\n\t] );\n\tconst colorIndicatorStyle = useMemo(\n\t\t() =>\n\t\t\tfillComputedColors(\n\t\t\t\tcontentRef,\n\t\t\t\tgetActiveColors( value, name, colors )\n\t\t\t),\n\t\t[ value, colors ]\n\t);\n\n\tconst hasColorsToChoose = ! isEmpty( colors ) || ! allowCustomControl;\n\n\tconst onPressButton = useCallback( () => {\n\t\tif ( hasColorsToChoose ) {\n\t\t\tenableIsAddingColor();\n\t\t} else {\n\t\t\tonChange( removeFormat( value, name ) );\n\t\t}\n\t}, [ hasColorsToChoose, value ] );\n\n\tconst outlineStyle = usePreferredColorSchemeStyle(\n\t\tstyles[ 'components-inline-color__outline' ],\n\t\tstyles[ 'components-inline-color__outline--dark' ]\n\t);\n\n\tif ( ! hasColorsToChoose && ! isActive ) {\n\t\treturn null;\n\t}\n\n\tconst isActiveStyle = {\n\t\t...colorIndicatorStyle,\n\t\t...( ! colorIndicatorStyle?.backgroundColor\n\t\t\t? { backgroundColor: 'transparent' }\n\t\t\t: {} ),\n\t\t...styles[ 'components-inline-color--is-active' ],\n\t};\n\n\tconst customContainerStyles =\n\t\tstyles[ 'components-inline-color__button-container' ];\n\n\treturn (\n\t\t<>\n\t\t\t<BlockControls>\n\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t{ isActive && (\n\t\t\t\t\t\t<View style={ outlineStyle } pointerEvents=\"none\" />\n\t\t\t\t\t) }\n\n\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\tname=\"text-color\"\n\t\t\t\t\t\tisActive={ isActive }\n\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\ticon={ textColorIcon }\n\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\tcolorIndicatorStyle?.color && {\n\t\t\t\t\t\t\t\t\t\tcolor: colorIndicatorStyle.color,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttitle={ title }\n\t\t\t\t\t\textraProps={ {\n\t\t\t\t\t\t\tisActiveStyle,\n\t\t\t\t\t\t\tcustomContainerStyles,\n\t\t\t\t\t\t} }\n\t\t\t\t\t\t// If has no colors to choose but a color is active remove the color onClick\n\t\t\t\t\t\tonClick={ onPressButton }\n\t\t\t\t\t/>\n\t\t\t\t</ToolbarGroup>\n\t\t\t</BlockControls>\n\t\t\t{ isAddingColor && (\n\t\t\t\t<InlineColorUI\n\t\t\t\t\tname={ name }\n\t\t\t\t\tonClose={ disableIsAddingColor }\n\t\t\t\t\tactiveAttributes={ activeAttributes }\n\t\t\t\t\tvalue={ value }\n\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\tcontentRef={ contentRef }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport const textColor = {\n\tname,\n\ttitle,\n\ttagName: 'mark',\n\tclassName: 'has-inline-color',\n\tattributes: {\n\t\tstyle: 'style',\n\t\tclass: 'class',\n\t},\n\t/*\n\t * Since this format relies on the <mark> tag, it's important to\n\t * prevent the default yellow background color applied by most\n\t * browsers. The solution is to detect when this format is used with a\n\t * text color but no background color, and in such cases to override\n\t * the default styling with a transparent background.\n\t *\n\t * @see https://github.com/WordPress/gutenberg/pull/35516\n\t */\n\t__unstableFilterAttributeValue( key, value ) {\n\t\tif ( key !== 'style' ) return value;\n\t\t// We need to remove the extra spaces within the styles on mobile\n\t\tconst newValue = value?.replace( / /g, '' );\n\t\t// We should not add a background-color if it's already set\n\t\tif ( newValue && newValue.includes( 'background-color' ) )\n\t\t\treturn newValue;\n\t\tconst addedCSS = [ 'background-color', transparentValue ].join( ':' );\n\t\t// Prepend `addedCSS` to avoid a double `;;` as any the existing CSS\n\t\t// rules will already include a `;`.\n\t\treturn newValue ? [ addedCSS, newValue ].join( ';' ) : addedCSS;\n\t},\n\tedit: TextColorEdit,\n};\n"]}
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = InlineColorUI;
7
7
  exports.getActiveColors = getActiveColors;
8
+ exports.parseClassName = parseClassName;
8
9
 
9
10
  var _element = require("@wordpress/element");
10
11