@wordpress/format-library 4.27.2 → 4.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.
- package/CHANGELOG.md +2 -0
- package/build/bold/index.js +1 -2
- package/build/bold/index.js.map +1 -1
- package/build/code/index.js +1 -2
- package/build/code/index.js.map +1 -1
- package/build/default-formats.js +1 -2
- package/build/default-formats.js.map +1 -1
- package/build/default-formats.native.js +1 -2
- package/build/default-formats.native.js.map +1 -1
- package/build/image/index.js +1 -2
- package/build/image/index.js.map +1 -1
- package/build/italic/index.js +1 -2
- package/build/italic/index.js.map +1 -1
- package/build/keyboard/index.js +1 -2
- package/build/keyboard/index.js.map +1 -1
- package/build/language/index.js +1 -2
- package/build/language/index.js.map +1 -1
- package/build/link/index.js +73 -24
- package/build/link/index.js.map +1 -1
- package/build/link/index.native.js +1 -2
- package/build/link/index.native.js.map +1 -1
- package/build/link/inline.js +74 -76
- package/build/link/inline.js.map +1 -1
- package/build/link/modal-screens/link-picker-screen.native.js +1 -2
- package/build/link/modal-screens/link-picker-screen.native.js.map +1 -1
- package/build/link/modal-screens/link-settings-screen.native.js +1 -2
- package/build/link/modal-screens/link-settings-screen.native.js.map +1 -1
- package/build/link/modal-screens/screens.native.js +1 -2
- package/build/link/modal-screens/screens.native.js.map +1 -1
- package/build/link/modal.native.js +1 -2
- package/build/link/modal.native.js.map +1 -1
- package/build/link/use-link-instance-key.js +1 -2
- package/build/link/use-link-instance-key.js.map +1 -1
- package/build/strikethrough/index.js +1 -2
- package/build/strikethrough/index.js.map +1 -1
- package/build/subscript/index.js +1 -2
- package/build/subscript/index.js.map +1 -1
- package/build/superscript/index.js +1 -2
- package/build/superscript/index.js.map +1 -1
- package/build/text-color/index.js +6 -7
- package/build/text-color/index.js.map +1 -1
- package/build/text-color/index.native.js +1 -2
- package/build/text-color/index.native.js.map +1 -1
- package/build/text-color/inline.js +6 -12
- package/build/text-color/inline.js.map +1 -1
- package/build/underline/index.js +1 -2
- package/build/underline/index.js.map +1 -1
- package/build/unknown/index.js +1 -2
- package/build/unknown/index.js.map +1 -1
- package/build-module/link/index.js +74 -24
- package/build-module/link/index.js.map +1 -1
- package/build-module/link/inline.js +72 -73
- package/build-module/link/inline.js.map +1 -1
- package/build-module/text-color/index.js +2 -1
- package/build-module/text-color/index.js.map +1 -1
- package/build-module/text-color/inline.js +7 -13
- package/build-module/text-color/inline.js.map +1 -1
- package/package.json +14 -14
- package/src/link/index.js +84 -35
- package/src/link/inline.js +87 -93
- package/src/text-color/index.js +1 -0
- package/src/text-color/inline.js +2 -12
|
@@ -2,14 +2,14 @@ import { createElement } from "react";
|
|
|
2
2
|
/**
|
|
3
3
|
* WordPress dependencies
|
|
4
4
|
*/
|
|
5
|
-
import { useMemo,
|
|
5
|
+
import { useMemo, createInterpolateElement } from '@wordpress/element';
|
|
6
6
|
import { __, sprintf } from '@wordpress/i18n';
|
|
7
7
|
import { speak } from '@wordpress/a11y';
|
|
8
8
|
import { Popover } from '@wordpress/components';
|
|
9
9
|
import { prependHTTP } from '@wordpress/url';
|
|
10
10
|
import { create, insert, isCollapsed, applyFormat, removeFormat, slice, replace, split, concat, useAnchor } from '@wordpress/rich-text';
|
|
11
|
-
import { __experimentalLinkControl as LinkControl, store as blockEditorStore
|
|
12
|
-
import { useSelect } from '@wordpress/data';
|
|
11
|
+
import { __experimentalLinkControl as LinkControl, store as blockEditorStore } from '@wordpress/block-editor';
|
|
12
|
+
import { useDispatch, useSelect } from '@wordpress/data';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Internal dependencies
|
|
@@ -23,9 +23,9 @@ const LINK_SETTINGS = [...LinkControl.DEFAULT_LINK_SETTINGS, {
|
|
|
23
23
|
function InlineLinkUI({
|
|
24
24
|
isActive,
|
|
25
25
|
activeAttributes,
|
|
26
|
-
addingLink,
|
|
27
26
|
value,
|
|
28
27
|
onChange,
|
|
28
|
+
onFocusOutside,
|
|
29
29
|
stopAddingLink,
|
|
30
30
|
contentRef
|
|
31
31
|
}) {
|
|
@@ -33,17 +33,23 @@ function InlineLinkUI({
|
|
|
33
33
|
|
|
34
34
|
// Get the text content minus any HTML tags.
|
|
35
35
|
const richTextText = richLinkTextValue.text;
|
|
36
|
+
const {
|
|
37
|
+
selectionChange
|
|
38
|
+
} = useDispatch(blockEditorStore);
|
|
36
39
|
const {
|
|
37
40
|
createPageEntity,
|
|
38
|
-
userCanCreatePages
|
|
41
|
+
userCanCreatePages,
|
|
42
|
+
selectionStart
|
|
39
43
|
} = useSelect(select => {
|
|
40
44
|
const {
|
|
41
|
-
getSettings
|
|
45
|
+
getSettings,
|
|
46
|
+
getSelectionStart
|
|
42
47
|
} = select(blockEditorStore);
|
|
43
48
|
const _settings = getSettings();
|
|
44
49
|
return {
|
|
45
50
|
createPageEntity: _settings.__experimentalCreatePageEntity,
|
|
46
|
-
userCanCreatePages: _settings.__experimentalUserCanCreatePages
|
|
51
|
+
userCanCreatePages: _settings.__experimentalUserCanCreatePages,
|
|
52
|
+
selectionStart: getSelectionStart()
|
|
47
53
|
};
|
|
48
54
|
}, []);
|
|
49
55
|
const linkValue = useMemo(() => ({
|
|
@@ -78,65 +84,74 @@ function InlineLinkUI({
|
|
|
78
84
|
nofollow: nextValue.nofollow
|
|
79
85
|
});
|
|
80
86
|
const newText = nextValue.title || newUrl;
|
|
87
|
+
|
|
88
|
+
// Scenario: we have any active text selection or an active format.
|
|
89
|
+
let newValue;
|
|
81
90
|
if (isCollapsed(value) && !isActive) {
|
|
82
91
|
// Scenario: we don't have any actively selected text or formats.
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
92
|
+
const inserted = insert(value, newText);
|
|
93
|
+
newValue = applyFormat(inserted, linkFormat, value.start, value.start + newText.length);
|
|
94
|
+
onChange(newValue);
|
|
95
|
+
|
|
96
|
+
// Close the Link UI.
|
|
97
|
+
stopAddingLink();
|
|
98
|
+
|
|
99
|
+
// Move the selection to the end of the inserted link outside of the format boundary
|
|
100
|
+
// so the user can continue typing after the link.
|
|
101
|
+
selectionChange({
|
|
102
|
+
clientId: selectionStart.clientId,
|
|
103
|
+
identifier: selectionStart.attributeKey,
|
|
104
|
+
start: value.start + newText.length + 1
|
|
105
|
+
});
|
|
106
|
+
return;
|
|
107
|
+
} else if (newText === richTextText) {
|
|
108
|
+
newValue = applyFormat(value, linkFormat);
|
|
87
109
|
} else {
|
|
88
|
-
// Scenario:
|
|
89
|
-
let newValue;
|
|
90
|
-
if (newText === richTextText) {
|
|
91
|
-
// If we're not updating the text then ignore.
|
|
92
|
-
newValue = applyFormat(value, linkFormat);
|
|
93
|
-
} else {
|
|
94
|
-
// Create new RichText value for the new text in order that we
|
|
95
|
-
// can apply formats to it.
|
|
96
|
-
newValue = create({
|
|
97
|
-
text: newText
|
|
98
|
-
});
|
|
110
|
+
// Scenario: Editing an existing link.
|
|
99
111
|
|
|
100
|
-
|
|
101
|
-
|
|
112
|
+
// Create new RichText value for the new text in order that we
|
|
113
|
+
// can apply formats to it.
|
|
114
|
+
newValue = create({
|
|
115
|
+
text: newText
|
|
116
|
+
});
|
|
117
|
+
// Apply the new Link format to this new text value.
|
|
118
|
+
newValue = applyFormat(newValue, linkFormat, 0, newText.length);
|
|
102
119
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
120
|
+
// Get the boundaries of the active link format.
|
|
121
|
+
const boundary = getFormatBoundary(value, {
|
|
122
|
+
type: 'core/link'
|
|
123
|
+
});
|
|
107
124
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
125
|
+
// Split the value at the start of the active link format.
|
|
126
|
+
// Passing "start" as the 3rd parameter is required to ensure
|
|
127
|
+
// the second half of the split value is split at the format's
|
|
128
|
+
// start boundary and avoids relying on the value's "end" property
|
|
129
|
+
// which may not correspond correctly.
|
|
130
|
+
const [valBefore, valAfter] = split(value, boundary.start, boundary.start);
|
|
114
131
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
onChange(newValue);
|
|
132
|
+
// Update the original (full) RichTextValue replacing the
|
|
133
|
+
// target text with the *new* RichTextValue containing:
|
|
134
|
+
// 1. The new text content.
|
|
135
|
+
// 2. The new link format.
|
|
136
|
+
// As "replace" will operate on the first match only, it is
|
|
137
|
+
// run only against the second half of the value which was
|
|
138
|
+
// split at the active format's boundary. This avoids a bug
|
|
139
|
+
// with incorrectly targetted replacements.
|
|
140
|
+
// See: https://github.com/WordPress/gutenberg/issues/41771.
|
|
141
|
+
// Note original formats will be lost when applying this change.
|
|
142
|
+
// That is expected behaviour.
|
|
143
|
+
// See: https://github.com/WordPress/gutenberg/pull/33849#issuecomment-936134179.
|
|
144
|
+
const newValAfter = replace(valAfter, richTextText, newValue);
|
|
145
|
+
newValue = concat(valBefore, newValAfter);
|
|
131
146
|
}
|
|
147
|
+
onChange(newValue);
|
|
132
148
|
|
|
133
149
|
// Focus should only be returned to the rich text on submit if this link is not
|
|
134
150
|
// being created for the first time. If it is then focus should remain within the
|
|
135
151
|
// Link UI because it should remain open for the user to modify the link they have
|
|
136
152
|
// just created.
|
|
137
153
|
if (!isNewLink) {
|
|
138
|
-
|
|
139
|
-
stopAddingLink(returnFocusToRichText);
|
|
154
|
+
stopAddingLink();
|
|
140
155
|
}
|
|
141
156
|
if (!isValidHref(newUrl)) {
|
|
142
157
|
speak(__('Warning: the link has been inserted but may have errors. Please test it.'), 'assertive');
|
|
@@ -148,25 +163,11 @@ function InlineLinkUI({
|
|
|
148
163
|
}
|
|
149
164
|
const popoverAnchor = useAnchor({
|
|
150
165
|
editableContentElement: contentRef.current,
|
|
151
|
-
settings
|
|
166
|
+
settings: {
|
|
167
|
+
...settings,
|
|
168
|
+
isActive
|
|
169
|
+
}
|
|
152
170
|
});
|
|
153
|
-
|
|
154
|
-
// As you change the link by interacting with the Link UI
|
|
155
|
-
// the return value of document.getSelection jumps to the field you're editing,
|
|
156
|
-
// not the highlighted text. Given that useAnchor uses document.getSelection,
|
|
157
|
-
// it will return null, since it can't find the <mark> element within the Link UI.
|
|
158
|
-
// This caches the last truthy value of the selection anchor reference.
|
|
159
|
-
// This ensures the Popover is positioned correctly on initial submission of the link.
|
|
160
|
-
const cachedRect = useCachedTruthy(popoverAnchor.getBoundingClientRect());
|
|
161
|
-
popoverAnchor.getBoundingClientRect = () => cachedRect;
|
|
162
|
-
|
|
163
|
-
// Focus should only be moved into the Popover when the Link is being created or edited.
|
|
164
|
-
// When the Link is in "preview" mode focus should remain on the rich text because at
|
|
165
|
-
// this point the Link dialog is informational only and thus the user should be able to
|
|
166
|
-
// continue editing the rich text.
|
|
167
|
-
// Ref used because the focusOnMount prop shouldn't evolve during render of a Popover
|
|
168
|
-
// otherwise it causes a render of the content.
|
|
169
|
-
const focusOnMount = useRef(addingLink ? 'firstElement' : false);
|
|
170
171
|
async function handleCreate(pageTitle) {
|
|
171
172
|
const page = await createPageEntity({
|
|
172
173
|
title: pageTitle,
|
|
@@ -188,9 +189,8 @@ function InlineLinkUI({
|
|
|
188
189
|
}
|
|
189
190
|
return createElement(Popover, {
|
|
190
191
|
anchor: popoverAnchor,
|
|
191
|
-
focusOnMount: focusOnMount.current,
|
|
192
192
|
onClose: stopAddingLink,
|
|
193
|
-
onFocusOutside:
|
|
193
|
+
onFocusOutside: onFocusOutside,
|
|
194
194
|
placement: "bottom",
|
|
195
195
|
offset: 10,
|
|
196
196
|
shift: true
|
|
@@ -198,7 +198,6 @@ function InlineLinkUI({
|
|
|
198
198
|
value: linkValue,
|
|
199
199
|
onChange: onChangeLink,
|
|
200
200
|
onRemove: removeLink,
|
|
201
|
-
forceIsEditingLink: addingLink,
|
|
202
201
|
hasRichPreviews: true,
|
|
203
202
|
createSuggestion: createPageEntity && handleCreate,
|
|
204
203
|
withCreateSuggestion: userCanCreatePages,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useMemo","useRef","createInterpolateElement","__","sprintf","speak","Popover","prependHTTP","create","insert","isCollapsed","applyFormat","removeFormat","slice","replace","split","concat","useAnchor","__experimentalLinkControl","LinkControl","store","blockEditorStore","useCachedTruthy","useSelect","createLinkFormat","isValidHref","getFormatBoundary","link","settings","LINK_SETTINGS","DEFAULT_LINK_SETTINGS","id","title","InlineLinkUI","isActive","activeAttributes","addingLink","value","onChange","stopAddingLink","contentRef","richLinkTextValue","getRichTextValueFromSelection","richTextText","text","createPageEntity","userCanCreatePages","select","getSettings","_settings","__experimentalCreatePageEntity","__experimentalUserCanCreatePages","linkValue","url","type","opensInNewTab","target","nofollow","rel","includes","removeLink","newValue","onChangeLink","nextValue","hasLink","isNewLink","newUrl","linkFormat","undefined","String","opensInNewWindow","newText","toInsert","length","boundary","valBefore","valAfter","start","newValAfter","returnFocusToRichText","popoverAnchor","editableContentElement","current","cachedRect","getBoundingClientRect","focusOnMount","handleCreate","pageTitle","page","status","rendered","kind","createButtonText","searchTerm","mark","createElement","anchor","onClose","onFocusOutside","placement","offset","shift","onRemove","forceIsEditingLink","hasRichPreviews","createSuggestion","withCreateSuggestion","createSuggestionButtonText","hasTextControl","showInitialSuggestions","suggestionsQuery","initialSuggestionsSearchOptions","subtype","perPage","textStart","textEnd","end"],"sources":["@wordpress/format-library/src/link/inline.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo, useRef, createInterpolateElement } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { speak } from '@wordpress/a11y';\nimport { Popover } from '@wordpress/components';\nimport { prependHTTP } from '@wordpress/url';\nimport {\n\tcreate,\n\tinsert,\n\tisCollapsed,\n\tapplyFormat,\n\tremoveFormat,\n\tslice,\n\treplace,\n\tsplit,\n\tconcat,\n\tuseAnchor,\n} from '@wordpress/rich-text';\nimport {\n\t__experimentalLinkControl as LinkControl,\n\tstore as blockEditorStore,\n\tuseCachedTruthy,\n} from '@wordpress/block-editor';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { createLinkFormat, isValidHref, getFormatBoundary } from './utils';\nimport { link as settings } from './index';\n\nconst LINK_SETTINGS = [\n\t...LinkControl.DEFAULT_LINK_SETTINGS,\n\t{\n\t\tid: 'nofollow',\n\t\ttitle: __( 'Mark as nofollow' ),\n\t},\n];\n\nfunction InlineLinkUI( {\n\tisActive,\n\tactiveAttributes,\n\taddingLink,\n\tvalue,\n\tonChange,\n\tstopAddingLink,\n\tcontentRef,\n} ) {\n\tconst richLinkTextValue = getRichTextValueFromSelection( value, isActive );\n\n\t// Get the text content minus any HTML tags.\n\tconst richTextText = richLinkTextValue.text;\n\n\tconst { createPageEntity, userCanCreatePages } = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\tconst _settings = getSettings();\n\n\t\treturn {\n\t\t\tcreatePageEntity: _settings.__experimentalCreatePageEntity,\n\t\t\tuserCanCreatePages: _settings.__experimentalUserCanCreatePages,\n\t\t};\n\t}, [] );\n\n\tconst linkValue = useMemo(\n\t\t() => ( {\n\t\t\turl: activeAttributes.url,\n\t\t\ttype: activeAttributes.type,\n\t\t\tid: activeAttributes.id,\n\t\t\topensInNewTab: activeAttributes.target === '_blank',\n\t\t\tnofollow: activeAttributes.rel?.includes( 'nofollow' ),\n\t\t\ttitle: richTextText,\n\t\t} ),\n\t\t[\n\t\t\tactiveAttributes.id,\n\t\t\tactiveAttributes.rel,\n\t\t\tactiveAttributes.target,\n\t\t\tactiveAttributes.type,\n\t\t\tactiveAttributes.url,\n\t\t\trichTextText,\n\t\t]\n\t);\n\n\tfunction removeLink() {\n\t\tconst newValue = removeFormat( value, 'core/link' );\n\t\tonChange( newValue );\n\t\tstopAddingLink();\n\t\tspeak( __( 'Link removed.' ), 'assertive' );\n\t}\n\n\tfunction onChangeLink( nextValue ) {\n\t\tconst hasLink = linkValue?.url;\n\t\tconst isNewLink = ! hasLink;\n\n\t\t// Merge the next value with the current link value.\n\t\tnextValue = {\n\t\t\t...linkValue,\n\t\t\t...nextValue,\n\t\t};\n\n\t\tconst newUrl = prependHTTP( nextValue.url );\n\t\tconst linkFormat = createLinkFormat( {\n\t\t\turl: newUrl,\n\t\t\ttype: nextValue.type,\n\t\t\tid:\n\t\t\t\tnextValue.id !== undefined && nextValue.id !== null\n\t\t\t\t\t? String( nextValue.id )\n\t\t\t\t\t: undefined,\n\t\t\topensInNewWindow: nextValue.opensInNewTab,\n\t\t\tnofollow: nextValue.nofollow,\n\t\t} );\n\n\t\tconst newText = nextValue.title || newUrl;\n\n\t\tif ( isCollapsed( value ) && ! isActive ) {\n\t\t\t// Scenario: we don't have any actively selected text or formats.\n\t\t\tconst toInsert = applyFormat(\n\t\t\t\tcreate( { text: newText } ),\n\t\t\t\tlinkFormat,\n\t\t\t\t0,\n\t\t\t\tnewText.length\n\t\t\t);\n\t\t\tonChange( insert( value, toInsert ) );\n\t\t} else {\n\t\t\t// Scenario: we have any active text selection or an active format.\n\t\t\tlet newValue;\n\n\t\t\tif ( newText === richTextText ) {\n\t\t\t\t// If we're not updating the text then ignore.\n\t\t\t\tnewValue = applyFormat( value, linkFormat );\n\t\t\t} else {\n\t\t\t\t// Create new RichText value for the new text in order that we\n\t\t\t\t// can apply formats to it.\n\t\t\t\tnewValue = create( { text: newText } );\n\n\t\t\t\t// Apply the new Link format to this new text value.\n\t\t\t\tnewValue = applyFormat(\n\t\t\t\t\tnewValue,\n\t\t\t\t\tlinkFormat,\n\t\t\t\t\t0,\n\t\t\t\t\tnewText.length\n\t\t\t\t);\n\n\t\t\t\t// Get the boundaries of the active link format.\n\t\t\t\tconst boundary = getFormatBoundary( value, {\n\t\t\t\t\ttype: 'core/link',\n\t\t\t\t} );\n\n\t\t\t\t// Split the value at the start of the active link format.\n\t\t\t\t// Passing \"start\" as the 3rd parameter is required to ensure\n\t\t\t\t// the second half of the split value is split at the format's\n\t\t\t\t// start boundary and avoids relying on the value's \"end\" property\n\t\t\t\t// which may not correspond correctly.\n\t\t\t\tconst [ valBefore, valAfter ] = split(\n\t\t\t\t\tvalue,\n\t\t\t\t\tboundary.start,\n\t\t\t\t\tboundary.start\n\t\t\t\t);\n\n\t\t\t\t// Update the original (full) RichTextValue replacing the\n\t\t\t\t// target text with the *new* RichTextValue containing:\n\t\t\t\t// 1. The new text content.\n\t\t\t\t// 2. The new link format.\n\t\t\t\t// As \"replace\" will operate on the first match only, it is\n\t\t\t\t// run only against the second half of the value which was\n\t\t\t\t// split at the active format's boundary. This avoids a bug\n\t\t\t\t// with incorrectly targetted replacements.\n\t\t\t\t// See: https://github.com/WordPress/gutenberg/issues/41771.\n\t\t\t\t// Note original formats will be lost when applying this change.\n\t\t\t\t// That is expected behaviour.\n\t\t\t\t// See: https://github.com/WordPress/gutenberg/pull/33849#issuecomment-936134179.\n\t\t\t\tconst newValAfter = replace( valAfter, richTextText, newValue );\n\n\t\t\t\tnewValue = concat( valBefore, newValAfter );\n\t\t\t}\n\n\t\t\tonChange( newValue );\n\t\t}\n\n\t\t// Focus should only be returned to the rich text on submit if this link is not\n\t\t// being created for the first time. If it is then focus should remain within the\n\t\t// Link UI because it should remain open for the user to modify the link they have\n\t\t// just created.\n\t\tif ( ! isNewLink ) {\n\t\t\tconst returnFocusToRichText = true;\n\t\t\tstopAddingLink( returnFocusToRichText );\n\t\t}\n\n\t\tif ( ! isValidHref( newUrl ) ) {\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\t}\n\n\tconst popoverAnchor = useAnchor( {\n\t\teditableContentElement: contentRef.current,\n\t\tsettings,\n\t} );\n\n\t// As you change the link by interacting with the Link UI\n\t// the return value of document.getSelection jumps to the field you're editing,\n\t// not the highlighted text. Given that useAnchor uses document.getSelection,\n\t// it will return null, since it can't find the <mark> element within the Link UI.\n\t// This caches the last truthy value of the selection anchor reference.\n\t// This ensures the Popover is positioned correctly on initial submission of the link.\n\tconst cachedRect = useCachedTruthy( popoverAnchor.getBoundingClientRect() );\n\tpopoverAnchor.getBoundingClientRect = () => cachedRect;\n\n\t// Focus should only be moved into the Popover when the Link is being created or edited.\n\t// When the Link is in \"preview\" mode focus should remain on the rich text because at\n\t// this point the Link dialog is informational only and thus the user should be able to\n\t// continue editing the rich text.\n\t// Ref used because the focusOnMount prop shouldn't evolve during render of a Popover\n\t// otherwise it causes a render of the content.\n\tconst focusOnMount = useRef( addingLink ? 'firstElement' : false );\n\n\tasync function handleCreate( pageTitle ) {\n\t\tconst page = await createPageEntity( {\n\t\t\ttitle: pageTitle,\n\t\t\tstatus: 'draft',\n\t\t} );\n\n\t\treturn {\n\t\t\tid: page.id,\n\t\t\ttype: page.type,\n\t\t\ttitle: page.title.rendered,\n\t\t\turl: page.link,\n\t\t\tkind: 'post-type',\n\t\t};\n\t}\n\n\tfunction createButtonText( searchTerm ) {\n\t\treturn createInterpolateElement(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t__( 'Create page: <mark>%s</mark>' ),\n\t\t\t\tsearchTerm\n\t\t\t),\n\t\t\t{ mark: <mark /> }\n\t\t);\n\t}\n\n\treturn (\n\t\t<Popover\n\t\t\tanchor={ popoverAnchor }\n\t\t\tfocusOnMount={ focusOnMount.current }\n\t\t\tonClose={ stopAddingLink }\n\t\t\tonFocusOutside={ () => stopAddingLink( false ) }\n\t\t\tplacement=\"bottom\"\n\t\t\toffset={ 10 }\n\t\t\tshift\n\t\t>\n\t\t\t<LinkControl\n\t\t\t\tvalue={ linkValue }\n\t\t\t\tonChange={ onChangeLink }\n\t\t\t\tonRemove={ removeLink }\n\t\t\t\tforceIsEditingLink={ addingLink }\n\t\t\t\thasRichPreviews\n\t\t\t\tcreateSuggestion={ createPageEntity && handleCreate }\n\t\t\t\twithCreateSuggestion={ userCanCreatePages }\n\t\t\t\tcreateSuggestionButtonText={ createButtonText }\n\t\t\t\thasTextControl\n\t\t\t\tsettings={ LINK_SETTINGS }\n\t\t\t\tshowInitialSuggestions={ true }\n\t\t\t\tsuggestionsQuery={ {\n\t\t\t\t\t// always show Pages as initial suggestions\n\t\t\t\t\tinitialSuggestionsSearchOptions: {\n\t\t\t\t\t\ttype: 'post',\n\t\t\t\t\t\tsubtype: 'page',\n\t\t\t\t\t\tperPage: 20,\n\t\t\t\t\t},\n\t\t\t\t} }\n\t\t\t/>\n\t\t</Popover>\n\t);\n}\n\nfunction getRichTextValueFromSelection( value, isActive ) {\n\t// Default to the selection ranges on the RichTextValue object.\n\tlet textStart = value.start;\n\tlet textEnd = value.end;\n\n\t// If the format is currently active then the rich text value\n\t// should always be taken from the bounds of the active format\n\t// and not the selected text.\n\tif ( isActive ) {\n\t\tconst boundary = getFormatBoundary( value, {\n\t\t\ttype: 'core/link',\n\t\t} );\n\n\t\ttextStart = boundary.start;\n\n\t\t// Text *selection* always extends +1 beyond the edge of the format.\n\t\t// We account for that here.\n\t\ttextEnd = boundary.end + 1;\n\t}\n\n\t// Get a RichTextValue containing the selected text content.\n\treturn slice( value, textStart, textEnd );\n}\n\nexport default InlineLinkUI;\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,OAAO,EAAEC,MAAM,EAAEC,wBAAwB,QAAQ,oBAAoB;AAC9E,SAASC,EAAE,EAAEC,OAAO,QAAQ,iBAAiB;AAC7C,SAASC,KAAK,QAAQ,iBAAiB;AACvC,SAASC,OAAO,QAAQ,uBAAuB;AAC/C,SAASC,WAAW,QAAQ,gBAAgB;AAC5C,SACCC,MAAM,EACNC,MAAM,EACNC,WAAW,EACXC,WAAW,EACXC,YAAY,EACZC,KAAK,EACLC,OAAO,EACPC,KAAK,EACLC,MAAM,EACNC,SAAS,QACH,sBAAsB;AAC7B,SACCC,yBAAyB,IAAIC,WAAW,EACxCC,KAAK,IAAIC,gBAAgB,EACzBC,eAAe,QACT,yBAAyB;AAChC,SAASC,SAAS,QAAQ,iBAAiB;;AAE3C;AACA;AACA;AACA,SAASC,gBAAgB,EAAEC,WAAW,EAAEC,iBAAiB,QAAQ,SAAS;AAC1E,SAASC,IAAI,IAAIC,QAAQ,QAAQ,SAAS;AAE1C,MAAMC,aAAa,GAAG,CACrB,GAAGV,WAAW,CAACW,qBAAqB,EACpC;EACCC,EAAE,EAAE,UAAU;EACdC,KAAK,EAAE7B,EAAE,CAAE,kBAAmB;AAC/B,CAAC,CACD;AAED,SAAS8B,YAAYA,CAAE;EACtBC,QAAQ;EACRC,gBAAgB;EAChBC,UAAU;EACVC,KAAK;EACLC,QAAQ;EACRC,cAAc;EACdC;AACD,CAAC,EAAG;EACH,MAAMC,iBAAiB,GAAGC,6BAA6B,CAAEL,KAAK,EAAEH,QAAS,CAAC;;EAE1E;EACA,MAAMS,YAAY,GAAGF,iBAAiB,CAACG,IAAI;EAE3C,MAAM;IAAEC,gBAAgB;IAAEC;EAAmB,CAAC,GAAGvB,SAAS,CAAIwB,MAAM,IAAM;IACzE,MAAM;MAAEC;IAAY,CAAC,GAAGD,MAAM,CAAE1B,gBAAiB,CAAC;IAClD,MAAM4B,SAAS,GAAGD,WAAW,CAAC,CAAC;IAE/B,OAAO;MACNH,gBAAgB,EAAEI,SAAS,CAACC,8BAA8B;MAC1DJ,kBAAkB,EAAEG,SAAS,CAACE;IAC/B,CAAC;EACF,CAAC,EAAE,EAAG,CAAC;EAEP,MAAMC,SAAS,GAAGpD,OAAO,CACxB,OAAQ;IACPqD,GAAG,EAAElB,gBAAgB,CAACkB,GAAG;IACzBC,IAAI,EAAEnB,gBAAgB,CAACmB,IAAI;IAC3BvB,EAAE,EAAEI,gBAAgB,CAACJ,EAAE;IACvBwB,aAAa,EAAEpB,gBAAgB,CAACqB,MAAM,KAAK,QAAQ;IACnDC,QAAQ,EAAEtB,gBAAgB,CAACuB,GAAG,EAAEC,QAAQ,CAAE,UAAW,CAAC;IACtD3B,KAAK,EAAEW;EACR,CAAC,CAAE,EACH,CACCR,gBAAgB,CAACJ,EAAE,EACnBI,gBAAgB,CAACuB,GAAG,EACpBvB,gBAAgB,CAACqB,MAAM,EACvBrB,gBAAgB,CAACmB,IAAI,EACrBnB,gBAAgB,CAACkB,GAAG,EACpBV,YAAY,CAEd,CAAC;EAED,SAASiB,UAAUA,CAAA,EAAG;IACrB,MAAMC,QAAQ,GAAGjD,YAAY,CAAEyB,KAAK,EAAE,WAAY,CAAC;IACnDC,QAAQ,CAAEuB,QAAS,CAAC;IACpBtB,cAAc,CAAC,CAAC;IAChBlC,KAAK,CAAEF,EAAE,CAAE,eAAgB,CAAC,EAAE,WAAY,CAAC;EAC5C;EAEA,SAAS2D,YAAYA,CAAEC,SAAS,EAAG;IAClC,MAAMC,OAAO,GAAGZ,SAAS,EAAEC,GAAG;IAC9B,MAAMY,SAAS,GAAG,CAAED,OAAO;;IAE3B;IACAD,SAAS,GAAG;MACX,GAAGX,SAAS;MACZ,GAAGW;IACJ,CAAC;IAED,MAAMG,MAAM,GAAG3D,WAAW,CAAEwD,SAAS,CAACV,GAAI,CAAC;IAC3C,MAAMc,UAAU,GAAG3C,gBAAgB,CAAE;MACpC6B,GAAG,EAAEa,MAAM;MACXZ,IAAI,EAAES,SAAS,CAACT,IAAI;MACpBvB,EAAE,EACDgC,SAAS,CAAChC,EAAE,KAAKqC,SAAS,IAAIL,SAAS,CAAChC,EAAE,KAAK,IAAI,GAChDsC,MAAM,CAAEN,SAAS,CAAChC,EAAG,CAAC,GACtBqC,SAAS;MACbE,gBAAgB,EAAEP,SAAS,CAACR,aAAa;MACzCE,QAAQ,EAAEM,SAAS,CAACN;IACrB,CAAE,CAAC;IAEH,MAAMc,OAAO,GAAGR,SAAS,CAAC/B,KAAK,IAAIkC,MAAM;IAEzC,IAAKxD,WAAW,CAAE2B,KAAM,CAAC,IAAI,CAAEH,QAAQ,EAAG;MACzC;MACA,MAAMsC,QAAQ,GAAG7D,WAAW,CAC3BH,MAAM,CAAE;QAAEoC,IAAI,EAAE2B;MAAQ,CAAE,CAAC,EAC3BJ,UAAU,EACV,CAAC,EACDI,OAAO,CAACE,MACT,CAAC;MACDnC,QAAQ,CAAE7B,MAAM,CAAE4B,KAAK,EAAEmC,QAAS,CAAE,CAAC;IACtC,CAAC,MAAM;MACN;MACA,IAAIX,QAAQ;MAEZ,IAAKU,OAAO,KAAK5B,YAAY,EAAG;QAC/B;QACAkB,QAAQ,GAAGlD,WAAW,CAAE0B,KAAK,EAAE8B,UAAW,CAAC;MAC5C,CAAC,MAAM;QACN;QACA;QACAN,QAAQ,GAAGrD,MAAM,CAAE;UAAEoC,IAAI,EAAE2B;QAAQ,CAAE,CAAC;;QAEtC;QACAV,QAAQ,GAAGlD,WAAW,CACrBkD,QAAQ,EACRM,UAAU,EACV,CAAC,EACDI,OAAO,CAACE,MACT,CAAC;;QAED;QACA,MAAMC,QAAQ,GAAGhD,iBAAiB,CAAEW,KAAK,EAAE;UAC1CiB,IAAI,EAAE;QACP,CAAE,CAAC;;QAEH;QACA;QACA;QACA;QACA;QACA,MAAM,CAAEqB,SAAS,EAAEC,QAAQ,CAAE,GAAG7D,KAAK,CACpCsB,KAAK,EACLqC,QAAQ,CAACG,KAAK,EACdH,QAAQ,CAACG,KACV,CAAC;;QAED;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,MAAMC,WAAW,GAAGhE,OAAO,CAAE8D,QAAQ,EAAEjC,YAAY,EAAEkB,QAAS,CAAC;QAE/DA,QAAQ,GAAG7C,MAAM,CAAE2D,SAAS,EAAEG,WAAY,CAAC;MAC5C;MAEAxC,QAAQ,CAAEuB,QAAS,CAAC;IACrB;;IAEA;IACA;IACA;IACA;IACA,IAAK,CAAEI,SAAS,EAAG;MAClB,MAAMc,qBAAqB,GAAG,IAAI;MAClCxC,cAAc,CAAEwC,qBAAsB,CAAC;IACxC;IAEA,IAAK,CAAEtD,WAAW,CAAEyC,MAAO,CAAC,EAAG;MAC9B7D,KAAK,CACJF,EAAE,CACD,0EACD,CAAC,EACD,WACD,CAAC;IACF,CAAC,MAAM,IAAK+B,QAAQ,EAAG;MACtB7B,KAAK,CAAEF,EAAE,CAAE,cAAe,CAAC,EAAE,WAAY,CAAC;IAC3C,CAAC,MAAM;MACNE,KAAK,CAAEF,EAAE,CAAE,gBAAiB,CAAC,EAAE,WAAY,CAAC;IAC7C;EACD;EAEA,MAAM6E,aAAa,GAAG/D,SAAS,CAAE;IAChCgE,sBAAsB,EAAEzC,UAAU,CAAC0C,OAAO;IAC1CtD;EACD,CAAE,CAAC;;EAEH;EACA;EACA;EACA;EACA;EACA;EACA,MAAMuD,UAAU,GAAG7D,eAAe,CAAE0D,aAAa,CAACI,qBAAqB,CAAC,CAAE,CAAC;EAC3EJ,aAAa,CAACI,qBAAqB,GAAG,MAAMD,UAAU;;EAEtD;EACA;EACA;EACA;EACA;EACA;EACA,MAAME,YAAY,GAAGpF,MAAM,CAAEmC,UAAU,GAAG,cAAc,GAAG,KAAM,CAAC;EAElE,eAAekD,YAAYA,CAAEC,SAAS,EAAG;IACxC,MAAMC,IAAI,GAAG,MAAM3C,gBAAgB,CAAE;MACpCb,KAAK,EAAEuD,SAAS;MAChBE,MAAM,EAAE;IACT,CAAE,CAAC;IAEH,OAAO;MACN1D,EAAE,EAAEyD,IAAI,CAACzD,EAAE;MACXuB,IAAI,EAAEkC,IAAI,CAAClC,IAAI;MACftB,KAAK,EAAEwD,IAAI,CAACxD,KAAK,CAAC0D,QAAQ;MAC1BrC,GAAG,EAAEmC,IAAI,CAAC7D,IAAI;MACdgE,IAAI,EAAE;IACP,CAAC;EACF;EAEA,SAASC,gBAAgBA,CAAEC,UAAU,EAAG;IACvC,OAAO3F,wBAAwB,CAC9BE,OAAO,EACN;IACAD,EAAE,CAAE,8BAA+B,CAAC,EACpC0F,UACD,CAAC,EACD;MAAEC,IAAI,EAAEC,aAAA,aAAO;IAAE,CAClB,CAAC;EACF;EAEA,OACCA,aAAA,CAACzF,OAAO;IACP0F,MAAM,EAAGhB,aAAe;IACxBK,YAAY,EAAGA,YAAY,CAACH,OAAS;IACrCe,OAAO,EAAG1D,cAAgB;IAC1B2D,cAAc,EAAGA,CAAA,KAAM3D,cAAc,CAAE,KAAM,CAAG;IAChD4D,SAAS,EAAC,QAAQ;IAClBC,MAAM,EAAG,EAAI;IACbC,KAAK;EAAA,GAELN,aAAA,CAAC5E,WAAW;IACXkB,KAAK,EAAGe,SAAW;IACnBd,QAAQ,EAAGwB,YAAc;IACzBwC,QAAQ,EAAG1C,UAAY;IACvB2C,kBAAkB,EAAGnE,UAAY;IACjCoE,eAAe;IACfC,gBAAgB,EAAG5D,gBAAgB,IAAIyC,YAAc;IACrDoB,oBAAoB,EAAG5D,kBAAoB;IAC3C6D,0BAA0B,EAAGf,gBAAkB;IAC/CgB,cAAc;IACdhF,QAAQ,EAAGC,aAAe;IAC1BgF,sBAAsB,EAAG,IAAM;IAC/BC,gBAAgB,EAAG;MAClB;MACAC,+BAA+B,EAAE;QAChCzD,IAAI,EAAE,MAAM;QACZ0D,OAAO,EAAE,MAAM;QACfC,OAAO,EAAE;MACV;IACD;EAAG,CACH,CACO,CAAC;AAEZ;AAEA,SAASvE,6BAA6BA,CAAEL,KAAK,EAAEH,QAAQ,EAAG;EACzD;EACA,IAAIgF,SAAS,GAAG7E,KAAK,CAACwC,KAAK;EAC3B,IAAIsC,OAAO,GAAG9E,KAAK,CAAC+E,GAAG;;EAEvB;EACA;EACA;EACA,IAAKlF,QAAQ,EAAG;IACf,MAAMwC,QAAQ,GAAGhD,iBAAiB,CAAEW,KAAK,EAAE;MAC1CiB,IAAI,EAAE;IACP,CAAE,CAAC;IAEH4D,SAAS,GAAGxC,QAAQ,CAACG,KAAK;;IAE1B;IACA;IACAsC,OAAO,GAAGzC,QAAQ,CAAC0C,GAAG,GAAG,CAAC;EAC3B;;EAEA;EACA,OAAOvG,KAAK,CAAEwB,KAAK,EAAE6E,SAAS,EAAEC,OAAQ,CAAC;AAC1C;AAEA,eAAelF,YAAY"}
|
|
1
|
+
{"version":3,"names":["useMemo","createInterpolateElement","__","sprintf","speak","Popover","prependHTTP","create","insert","isCollapsed","applyFormat","removeFormat","slice","replace","split","concat","useAnchor","__experimentalLinkControl","LinkControl","store","blockEditorStore","useDispatch","useSelect","createLinkFormat","isValidHref","getFormatBoundary","link","settings","LINK_SETTINGS","DEFAULT_LINK_SETTINGS","id","title","InlineLinkUI","isActive","activeAttributes","value","onChange","onFocusOutside","stopAddingLink","contentRef","richLinkTextValue","getRichTextValueFromSelection","richTextText","text","selectionChange","createPageEntity","userCanCreatePages","selectionStart","select","getSettings","getSelectionStart","_settings","__experimentalCreatePageEntity","__experimentalUserCanCreatePages","linkValue","url","type","opensInNewTab","target","nofollow","rel","includes","removeLink","newValue","onChangeLink","nextValue","hasLink","isNewLink","newUrl","linkFormat","undefined","String","opensInNewWindow","newText","inserted","start","length","clientId","identifier","attributeKey","boundary","valBefore","valAfter","newValAfter","popoverAnchor","editableContentElement","current","handleCreate","pageTitle","page","status","rendered","kind","createButtonText","searchTerm","mark","createElement","anchor","onClose","placement","offset","shift","onRemove","hasRichPreviews","createSuggestion","withCreateSuggestion","createSuggestionButtonText","hasTextControl","showInitialSuggestions","suggestionsQuery","initialSuggestionsSearchOptions","subtype","perPage","textStart","textEnd","end"],"sources":["@wordpress/format-library/src/link/inline.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useMemo, createInterpolateElement } from '@wordpress/element';\nimport { __, sprintf } from '@wordpress/i18n';\nimport { speak } from '@wordpress/a11y';\nimport { Popover } from '@wordpress/components';\nimport { prependHTTP } from '@wordpress/url';\nimport {\n\tcreate,\n\tinsert,\n\tisCollapsed,\n\tapplyFormat,\n\tremoveFormat,\n\tslice,\n\treplace,\n\tsplit,\n\tconcat,\n\tuseAnchor,\n} from '@wordpress/rich-text';\nimport {\n\t__experimentalLinkControl as LinkControl,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { createLinkFormat, isValidHref, getFormatBoundary } from './utils';\nimport { link as settings } from './index';\n\nconst LINK_SETTINGS = [\n\t...LinkControl.DEFAULT_LINK_SETTINGS,\n\t{\n\t\tid: 'nofollow',\n\t\ttitle: __( 'Mark as nofollow' ),\n\t},\n];\n\nfunction InlineLinkUI( {\n\tisActive,\n\tactiveAttributes,\n\tvalue,\n\tonChange,\n\tonFocusOutside,\n\tstopAddingLink,\n\tcontentRef,\n} ) {\n\tconst richLinkTextValue = getRichTextValueFromSelection( value, isActive );\n\n\t// Get the text content minus any HTML tags.\n\tconst richTextText = richLinkTextValue.text;\n\n\tconst { selectionChange } = useDispatch( blockEditorStore );\n\n\tconst { createPageEntity, userCanCreatePages, selectionStart } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getSettings, getSelectionStart } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst _settings = getSettings();\n\n\t\t\treturn {\n\t\t\t\tcreatePageEntity: _settings.__experimentalCreatePageEntity,\n\t\t\t\tuserCanCreatePages: _settings.__experimentalUserCanCreatePages,\n\t\t\t\tselectionStart: getSelectionStart(),\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tconst linkValue = useMemo(\n\t\t() => ( {\n\t\t\turl: activeAttributes.url,\n\t\t\ttype: activeAttributes.type,\n\t\t\tid: activeAttributes.id,\n\t\t\topensInNewTab: activeAttributes.target === '_blank',\n\t\t\tnofollow: activeAttributes.rel?.includes( 'nofollow' ),\n\t\t\ttitle: richTextText,\n\t\t} ),\n\t\t[\n\t\t\tactiveAttributes.id,\n\t\t\tactiveAttributes.rel,\n\t\t\tactiveAttributes.target,\n\t\t\tactiveAttributes.type,\n\t\t\tactiveAttributes.url,\n\t\t\trichTextText,\n\t\t]\n\t);\n\n\tfunction removeLink() {\n\t\tconst newValue = removeFormat( value, 'core/link' );\n\t\tonChange( newValue );\n\t\tstopAddingLink();\n\t\tspeak( __( 'Link removed.' ), 'assertive' );\n\t}\n\n\tfunction onChangeLink( nextValue ) {\n\t\tconst hasLink = linkValue?.url;\n\t\tconst isNewLink = ! hasLink;\n\n\t\t// Merge the next value with the current link value.\n\t\tnextValue = {\n\t\t\t...linkValue,\n\t\t\t...nextValue,\n\t\t};\n\n\t\tconst newUrl = prependHTTP( nextValue.url );\n\t\tconst linkFormat = createLinkFormat( {\n\t\t\turl: newUrl,\n\t\t\ttype: nextValue.type,\n\t\t\tid:\n\t\t\t\tnextValue.id !== undefined && nextValue.id !== null\n\t\t\t\t\t? String( nextValue.id )\n\t\t\t\t\t: undefined,\n\t\t\topensInNewWindow: nextValue.opensInNewTab,\n\t\t\tnofollow: nextValue.nofollow,\n\t\t} );\n\n\t\tconst newText = nextValue.title || newUrl;\n\n\t\t// Scenario: we have any active text selection or an active format.\n\t\tlet newValue;\n\t\tif ( isCollapsed( value ) && ! isActive ) {\n\t\t\t// Scenario: we don't have any actively selected text or formats.\n\t\t\tconst inserted = insert( value, newText );\n\n\t\t\tnewValue = applyFormat(\n\t\t\t\tinserted,\n\t\t\t\tlinkFormat,\n\t\t\t\tvalue.start,\n\t\t\t\tvalue.start + newText.length\n\t\t\t);\n\n\t\t\tonChange( newValue );\n\n\t\t\t// Close the Link UI.\n\t\t\tstopAddingLink();\n\n\t\t\t// Move the selection to the end of the inserted link outside of the format boundary\n\t\t\t// so the user can continue typing after the link.\n\t\t\tselectionChange( {\n\t\t\t\tclientId: selectionStart.clientId,\n\t\t\t\tidentifier: selectionStart.attributeKey,\n\t\t\t\tstart: value.start + newText.length + 1,\n\t\t\t} );\n\n\t\t\treturn;\n\t\t} else if ( newText === richTextText ) {\n\t\t\tnewValue = applyFormat( value, linkFormat );\n\t\t} else {\n\t\t\t// Scenario: Editing an existing link.\n\n\t\t\t// Create new RichText value for the new text in order that we\n\t\t\t// can apply formats to it.\n\t\t\tnewValue = create( { text: newText } );\n\t\t\t// Apply the new Link format to this new text value.\n\t\t\tnewValue = applyFormat( newValue, linkFormat, 0, newText.length );\n\n\t\t\t// Get the boundaries of the active link format.\n\t\t\tconst boundary = getFormatBoundary( value, {\n\t\t\t\ttype: 'core/link',\n\t\t\t} );\n\n\t\t\t// Split the value at the start of the active link format.\n\t\t\t// Passing \"start\" as the 3rd parameter is required to ensure\n\t\t\t// the second half of the split value is split at the format's\n\t\t\t// start boundary and avoids relying on the value's \"end\" property\n\t\t\t// which may not correspond correctly.\n\t\t\tconst [ valBefore, valAfter ] = split(\n\t\t\t\tvalue,\n\t\t\t\tboundary.start,\n\t\t\t\tboundary.start\n\t\t\t);\n\n\t\t\t// Update the original (full) RichTextValue replacing the\n\t\t\t// target text with the *new* RichTextValue containing:\n\t\t\t// 1. The new text content.\n\t\t\t// 2. The new link format.\n\t\t\t// As \"replace\" will operate on the first match only, it is\n\t\t\t// run only against the second half of the value which was\n\t\t\t// split at the active format's boundary. This avoids a bug\n\t\t\t// with incorrectly targetted replacements.\n\t\t\t// See: https://github.com/WordPress/gutenberg/issues/41771.\n\t\t\t// Note original formats will be lost when applying this change.\n\t\t\t// That is expected behaviour.\n\t\t\t// See: https://github.com/WordPress/gutenberg/pull/33849#issuecomment-936134179.\n\t\t\tconst newValAfter = replace( valAfter, richTextText, newValue );\n\n\t\t\tnewValue = concat( valBefore, newValAfter );\n\t\t}\n\n\t\tonChange( newValue );\n\n\t\t// Focus should only be returned to the rich text on submit if this link is not\n\t\t// being created for the first time. If it is then focus should remain within the\n\t\t// Link UI because it should remain open for the user to modify the link they have\n\t\t// just created.\n\t\tif ( ! isNewLink ) {\n\t\t\tstopAddingLink();\n\t\t}\n\n\t\tif ( ! isValidHref( newUrl ) ) {\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\t}\n\n\tconst popoverAnchor = useAnchor( {\n\t\teditableContentElement: contentRef.current,\n\t\tsettings: { ...settings, isActive },\n\t} );\n\n\tasync function handleCreate( pageTitle ) {\n\t\tconst page = await createPageEntity( {\n\t\t\ttitle: pageTitle,\n\t\t\tstatus: 'draft',\n\t\t} );\n\n\t\treturn {\n\t\t\tid: page.id,\n\t\t\ttype: page.type,\n\t\t\ttitle: page.title.rendered,\n\t\t\turl: page.link,\n\t\t\tkind: 'post-type',\n\t\t};\n\t}\n\n\tfunction createButtonText( searchTerm ) {\n\t\treturn createInterpolateElement(\n\t\t\tsprintf(\n\t\t\t\t/* translators: %s: search term. */\n\t\t\t\t__( 'Create page: <mark>%s</mark>' ),\n\t\t\t\tsearchTerm\n\t\t\t),\n\t\t\t{ mark: <mark /> }\n\t\t);\n\t}\n\n\treturn (\n\t\t<Popover\n\t\t\tanchor={ popoverAnchor }\n\t\t\tonClose={ stopAddingLink }\n\t\t\tonFocusOutside={ onFocusOutside }\n\t\t\tplacement=\"bottom\"\n\t\t\toffset={ 10 }\n\t\t\tshift\n\t\t>\n\t\t\t<LinkControl\n\t\t\t\tvalue={ linkValue }\n\t\t\t\tonChange={ onChangeLink }\n\t\t\t\tonRemove={ removeLink }\n\t\t\t\thasRichPreviews\n\t\t\t\tcreateSuggestion={ createPageEntity && handleCreate }\n\t\t\t\twithCreateSuggestion={ userCanCreatePages }\n\t\t\t\tcreateSuggestionButtonText={ createButtonText }\n\t\t\t\thasTextControl\n\t\t\t\tsettings={ LINK_SETTINGS }\n\t\t\t\tshowInitialSuggestions={ true }\n\t\t\t\tsuggestionsQuery={ {\n\t\t\t\t\t// always show Pages as initial suggestions\n\t\t\t\t\tinitialSuggestionsSearchOptions: {\n\t\t\t\t\t\ttype: 'post',\n\t\t\t\t\t\tsubtype: 'page',\n\t\t\t\t\t\tperPage: 20,\n\t\t\t\t\t},\n\t\t\t\t} }\n\t\t\t/>\n\t\t</Popover>\n\t);\n}\n\nfunction getRichTextValueFromSelection( value, isActive ) {\n\t// Default to the selection ranges on the RichTextValue object.\n\tlet textStart = value.start;\n\tlet textEnd = value.end;\n\n\t// If the format is currently active then the rich text value\n\t// should always be taken from the bounds of the active format\n\t// and not the selected text.\n\tif ( isActive ) {\n\t\tconst boundary = getFormatBoundary( value, {\n\t\t\ttype: 'core/link',\n\t\t} );\n\n\t\ttextStart = boundary.start;\n\n\t\t// Text *selection* always extends +1 beyond the edge of the format.\n\t\t// We account for that here.\n\t\ttextEnd = boundary.end + 1;\n\t}\n\n\t// Get a RichTextValue containing the selected text content.\n\treturn slice( value, textStart, textEnd );\n}\n\nexport default InlineLinkUI;\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,OAAO,EAAEC,wBAAwB,QAAQ,oBAAoB;AACtE,SAASC,EAAE,EAAEC,OAAO,QAAQ,iBAAiB;AAC7C,SAASC,KAAK,QAAQ,iBAAiB;AACvC,SAASC,OAAO,QAAQ,uBAAuB;AAC/C,SAASC,WAAW,QAAQ,gBAAgB;AAC5C,SACCC,MAAM,EACNC,MAAM,EACNC,WAAW,EACXC,WAAW,EACXC,YAAY,EACZC,KAAK,EACLC,OAAO,EACPC,KAAK,EACLC,MAAM,EACNC,SAAS,QACH,sBAAsB;AAC7B,SACCC,yBAAyB,IAAIC,WAAW,EACxCC,KAAK,IAAIC,gBAAgB,QACnB,yBAAyB;AAChC,SAASC,WAAW,EAAEC,SAAS,QAAQ,iBAAiB;;AAExD;AACA;AACA;AACA,SAASC,gBAAgB,EAAEC,WAAW,EAAEC,iBAAiB,QAAQ,SAAS;AAC1E,SAASC,IAAI,IAAIC,QAAQ,QAAQ,SAAS;AAE1C,MAAMC,aAAa,GAAG,CACrB,GAAGV,WAAW,CAACW,qBAAqB,EACpC;EACCC,EAAE,EAAE,UAAU;EACdC,KAAK,EAAE7B,EAAE,CAAE,kBAAmB;AAC/B,CAAC,CACD;AAED,SAAS8B,YAAYA,CAAE;EACtBC,QAAQ;EACRC,gBAAgB;EAChBC,KAAK;EACLC,QAAQ;EACRC,cAAc;EACdC,cAAc;EACdC;AACD,CAAC,EAAG;EACH,MAAMC,iBAAiB,GAAGC,6BAA6B,CAAEN,KAAK,EAAEF,QAAS,CAAC;;EAE1E;EACA,MAAMS,YAAY,GAAGF,iBAAiB,CAACG,IAAI;EAE3C,MAAM;IAAEC;EAAgB,CAAC,GAAGvB,WAAW,CAAED,gBAAiB,CAAC;EAE3D,MAAM;IAAEyB,gBAAgB;IAAEC,kBAAkB;IAAEC;EAAe,CAAC,GAAGzB,SAAS,CACvE0B,MAAM,IAAM;IACb,MAAM;MAAEC,WAAW;MAAEC;IAAkB,CAAC,GACvCF,MAAM,CAAE5B,gBAAiB,CAAC;IAC3B,MAAM+B,SAAS,GAAGF,WAAW,CAAC,CAAC;IAE/B,OAAO;MACNJ,gBAAgB,EAAEM,SAAS,CAACC,8BAA8B;MAC1DN,kBAAkB,EAAEK,SAAS,CAACE,gCAAgC;MAC9DN,cAAc,EAAEG,iBAAiB,CAAC;IACnC,CAAC;EACF,CAAC,EACD,EACD,CAAC;EAED,MAAMI,SAAS,GAAGtD,OAAO,CACxB,OAAQ;IACPuD,GAAG,EAAErB,gBAAgB,CAACqB,GAAG;IACzBC,IAAI,EAAEtB,gBAAgB,CAACsB,IAAI;IAC3B1B,EAAE,EAAEI,gBAAgB,CAACJ,EAAE;IACvB2B,aAAa,EAAEvB,gBAAgB,CAACwB,MAAM,KAAK,QAAQ;IACnDC,QAAQ,EAAEzB,gBAAgB,CAAC0B,GAAG,EAAEC,QAAQ,CAAE,UAAW,CAAC;IACtD9B,KAAK,EAAEW;EACR,CAAC,CAAE,EACH,CACCR,gBAAgB,CAACJ,EAAE,EACnBI,gBAAgB,CAAC0B,GAAG,EACpB1B,gBAAgB,CAACwB,MAAM,EACvBxB,gBAAgB,CAACsB,IAAI,EACrBtB,gBAAgB,CAACqB,GAAG,EACpBb,YAAY,CAEd,CAAC;EAED,SAASoB,UAAUA,CAAA,EAAG;IACrB,MAAMC,QAAQ,GAAGpD,YAAY,CAAEwB,KAAK,EAAE,WAAY,CAAC;IACnDC,QAAQ,CAAE2B,QAAS,CAAC;IACpBzB,cAAc,CAAC,CAAC;IAChBlC,KAAK,CAAEF,EAAE,CAAE,eAAgB,CAAC,EAAE,WAAY,CAAC;EAC5C;EAEA,SAAS8D,YAAYA,CAAEC,SAAS,EAAG;IAClC,MAAMC,OAAO,GAAGZ,SAAS,EAAEC,GAAG;IAC9B,MAAMY,SAAS,GAAG,CAAED,OAAO;;IAE3B;IACAD,SAAS,GAAG;MACX,GAAGX,SAAS;MACZ,GAAGW;IACJ,CAAC;IAED,MAAMG,MAAM,GAAG9D,WAAW,CAAE2D,SAAS,CAACV,GAAI,CAAC;IAC3C,MAAMc,UAAU,GAAG9C,gBAAgB,CAAE;MACpCgC,GAAG,EAAEa,MAAM;MACXZ,IAAI,EAAES,SAAS,CAACT,IAAI;MACpB1B,EAAE,EACDmC,SAAS,CAACnC,EAAE,KAAKwC,SAAS,IAAIL,SAAS,CAACnC,EAAE,KAAK,IAAI,GAChDyC,MAAM,CAAEN,SAAS,CAACnC,EAAG,CAAC,GACtBwC,SAAS;MACbE,gBAAgB,EAAEP,SAAS,CAACR,aAAa;MACzCE,QAAQ,EAAEM,SAAS,CAACN;IACrB,CAAE,CAAC;IAEH,MAAMc,OAAO,GAAGR,SAAS,CAAClC,KAAK,IAAIqC,MAAM;;IAEzC;IACA,IAAIL,QAAQ;IACZ,IAAKtD,WAAW,CAAE0B,KAAM,CAAC,IAAI,CAAEF,QAAQ,EAAG;MACzC;MACA,MAAMyC,QAAQ,GAAGlE,MAAM,CAAE2B,KAAK,EAAEsC,OAAQ,CAAC;MAEzCV,QAAQ,GAAGrD,WAAW,CACrBgE,QAAQ,EACRL,UAAU,EACVlC,KAAK,CAACwC,KAAK,EACXxC,KAAK,CAACwC,KAAK,GAAGF,OAAO,CAACG,MACvB,CAAC;MAEDxC,QAAQ,CAAE2B,QAAS,CAAC;;MAEpB;MACAzB,cAAc,CAAC,CAAC;;MAEhB;MACA;MACAM,eAAe,CAAE;QAChBiC,QAAQ,EAAE9B,cAAc,CAAC8B,QAAQ;QACjCC,UAAU,EAAE/B,cAAc,CAACgC,YAAY;QACvCJ,KAAK,EAAExC,KAAK,CAACwC,KAAK,GAAGF,OAAO,CAACG,MAAM,GAAG;MACvC,CAAE,CAAC;MAEH;IACD,CAAC,MAAM,IAAKH,OAAO,KAAK/B,YAAY,EAAG;MACtCqB,QAAQ,GAAGrD,WAAW,CAAEyB,KAAK,EAAEkC,UAAW,CAAC;IAC5C,CAAC,MAAM;MACN;;MAEA;MACA;MACAN,QAAQ,GAAGxD,MAAM,CAAE;QAAEoC,IAAI,EAAE8B;MAAQ,CAAE,CAAC;MACtC;MACAV,QAAQ,GAAGrD,WAAW,CAAEqD,QAAQ,EAAEM,UAAU,EAAE,CAAC,EAAEI,OAAO,CAACG,MAAO,CAAC;;MAEjE;MACA,MAAMI,QAAQ,GAAGvD,iBAAiB,CAAEU,KAAK,EAAE;QAC1CqB,IAAI,EAAE;MACP,CAAE,CAAC;;MAEH;MACA;MACA;MACA;MACA;MACA,MAAM,CAAEyB,SAAS,EAAEC,QAAQ,CAAE,GAAGpE,KAAK,CACpCqB,KAAK,EACL6C,QAAQ,CAACL,KAAK,EACdK,QAAQ,CAACL,KACV,CAAC;;MAED;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA,MAAMQ,WAAW,GAAGtE,OAAO,CAAEqE,QAAQ,EAAExC,YAAY,EAAEqB,QAAS,CAAC;MAE/DA,QAAQ,GAAGhD,MAAM,CAAEkE,SAAS,EAAEE,WAAY,CAAC;IAC5C;IAEA/C,QAAQ,CAAE2B,QAAS,CAAC;;IAEpB;IACA;IACA;IACA;IACA,IAAK,CAAEI,SAAS,EAAG;MAClB7B,cAAc,CAAC,CAAC;IACjB;IAEA,IAAK,CAAEd,WAAW,CAAE4C,MAAO,CAAC,EAAG;MAC9BhE,KAAK,CACJF,EAAE,CACD,0EACD,CAAC,EACD,WACD,CAAC;IACF,CAAC,MAAM,IAAK+B,QAAQ,EAAG;MACtB7B,KAAK,CAAEF,EAAE,CAAE,cAAe,CAAC,EAAE,WAAY,CAAC;IAC3C,CAAC,MAAM;MACNE,KAAK,CAAEF,EAAE,CAAE,gBAAiB,CAAC,EAAE,WAAY,CAAC;IAC7C;EACD;EAEA,MAAMkF,aAAa,GAAGpE,SAAS,CAAE;IAChCqE,sBAAsB,EAAE9C,UAAU,CAAC+C,OAAO;IAC1C3D,QAAQ,EAAE;MAAE,GAAGA,QAAQ;MAAEM;IAAS;EACnC,CAAE,CAAC;EAEH,eAAesD,YAAYA,CAAEC,SAAS,EAAG;IACxC,MAAMC,IAAI,GAAG,MAAM5C,gBAAgB,CAAE;MACpCd,KAAK,EAAEyD,SAAS;MAChBE,MAAM,EAAE;IACT,CAAE,CAAC;IAEH,OAAO;MACN5D,EAAE,EAAE2D,IAAI,CAAC3D,EAAE;MACX0B,IAAI,EAAEiC,IAAI,CAACjC,IAAI;MACfzB,KAAK,EAAE0D,IAAI,CAAC1D,KAAK,CAAC4D,QAAQ;MAC1BpC,GAAG,EAAEkC,IAAI,CAAC/D,IAAI;MACdkE,IAAI,EAAE;IACP,CAAC;EACF;EAEA,SAASC,gBAAgBA,CAAEC,UAAU,EAAG;IACvC,OAAO7F,wBAAwB,CAC9BE,OAAO,EACN;IACAD,EAAE,CAAE,8BAA+B,CAAC,EACpC4F,UACD,CAAC,EACD;MAAEC,IAAI,EAAEC,aAAA,aAAO;IAAE,CAClB,CAAC;EACF;EAEA,OACCA,aAAA,CAAC3F,OAAO;IACP4F,MAAM,EAAGb,aAAe;IACxBc,OAAO,EAAG5D,cAAgB;IAC1BD,cAAc,EAAGA,cAAgB;IACjC8D,SAAS,EAAC,QAAQ;IAClBC,MAAM,EAAG,EAAI;IACbC,KAAK;EAAA,GAELL,aAAA,CAAC9E,WAAW;IACXiB,KAAK,EAAGmB,SAAW;IACnBlB,QAAQ,EAAG4B,YAAc;IACzBsC,QAAQ,EAAGxC,UAAY;IACvByC,eAAe;IACfC,gBAAgB,EAAG3D,gBAAgB,IAAI0C,YAAc;IACrDkB,oBAAoB,EAAG3D,kBAAoB;IAC3C4D,0BAA0B,EAAGb,gBAAkB;IAC/Cc,cAAc;IACdhF,QAAQ,EAAGC,aAAe;IAC1BgF,sBAAsB,EAAG,IAAM;IAC/BC,gBAAgB,EAAG;MAClB;MACAC,+BAA+B,EAAE;QAChCtD,IAAI,EAAE,MAAM;QACZuD,OAAO,EAAE,MAAM;QACfC,OAAO,EAAE;MACV;IACD;EAAG,CACH,CACO,CAAC;AAEZ;AAEA,SAASvE,6BAA6BA,CAAEN,KAAK,EAAEF,QAAQ,EAAG;EACzD;EACA,IAAIgF,SAAS,GAAG9E,KAAK,CAACwC,KAAK;EAC3B,IAAIuC,OAAO,GAAG/E,KAAK,CAACgF,GAAG;;EAEvB;EACA;EACA;EACA,IAAKlF,QAAQ,EAAG;IACf,MAAM+C,QAAQ,GAAGvD,iBAAiB,CAAEU,KAAK,EAAE;MAC1CqB,IAAI,EAAE;IACP,CAAE,CAAC;IAEHyD,SAAS,GAAGjC,QAAQ,CAACL,KAAK;;IAE1B;IACA;IACAuC,OAAO,GAAGlC,QAAQ,CAACmC,GAAG,GAAG,CAAC;EAC3B;;EAEA;EACA,OAAOvG,KAAK,CAAEuB,KAAK,EAAE8E,SAAS,EAAEC,OAAQ,CAAC;AAC1C;AAEA,eAAelF,YAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__","useCallback","useMemo","useState","RichTextToolbarButton","useSettings","Icon","color","colorIcon","textColor","textColorIcon","removeFormat","default","InlineColorUI","getActiveColors","transparentValue","name","title","EMPTY_ARRAY","getComputedStyleProperty","element","property","ownerDocument","defaultView","style","getComputedStyle","value","getPropertyValue","parentElement","fillComputedColors","backgroundColor","TextColorEdit","onChange","isActive","activeAttributes","contentRef","allowCustomControl","colors","isAddingColor","setIsAddingColor","enableIsAddingColor","disableIsAddingColor","colorIndicatorStyle","current","hasColorsToChoose","length","createElement","Fragment","className","icon","Object","keys","onClick","role","onClose","tagName","attributes","class","edit"],"sources":["@wordpress/format-library/src/text-color/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useCallback, useMemo, useState } from '@wordpress/element';\nimport { RichTextToolbarButton, useSettings } from '@wordpress/block-editor';\nimport {\n\tIcon,\n\tcolor as colorIcon,\n\ttextColor as textColorIcon,\n} from '@wordpress/icons';\nimport { removeFormat } from '@wordpress/rich-text';\n\n/**\n * Internal dependencies\n */\nimport { default as InlineColorUI, getActiveColors } from './inline';\n\nexport const transparentValue = 'rgba(0, 0, 0, 0)';\n\nconst name = 'core/text-color';\nconst title = __( 'Highlight' );\n\nconst EMPTY_ARRAY = [];\n\nfunction getComputedStyleProperty( element, property ) {\n\tconst { ownerDocument } = element;\n\tconst { defaultView } = ownerDocument;\n\tconst style = defaultView.getComputedStyle( element );\n\tconst value = style.getPropertyValue( property );\n\n\tif (\n\t\tproperty === 'background-color' &&\n\t\tvalue === transparentValue &&\n\t\telement.parentElement\n\t) {\n\t\treturn getComputedStyleProperty( element.parentElement, property );\n\t}\n\n\treturn value;\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:\n\t\t\tbackgroundColor === transparentValue\n\t\t\t\t? getComputedStyleProperty( element, 'background-color' )\n\t\t\t\t: backgroundColor,\n\t};\n}\n\nfunction TextColorEdit( {\n\tvalue,\n\tonChange,\n\tisActive,\n\tactiveAttributes,\n\tcontentRef,\n} ) {\n\tconst [ allowCustomControl, colors = EMPTY_ARRAY ] = useSettings(\n\t\t'color.custom',\n\t\t'color.palette'\n\t);\n\tconst [ isAddingColor, setIsAddingColor ] = useState( false );\n\tconst enableIsAddingColor = useCallback(\n\t\t() => setIsAddingColor( true ),\n\t\t[ setIsAddingColor ]\n\t);\n\tconst disableIsAddingColor = useCallback(\n\t\t() => setIsAddingColor( false ),\n\t\t[ setIsAddingColor ]\n\t);\n\tconst colorIndicatorStyle = useMemo(\n\t\t() =>\n\t\t\tfillComputedColors(\n\t\t\t\tcontentRef.current,\n\t\t\t\tgetActiveColors( value, name, colors )\n\t\t\t),\n\t\t[ value, colors ]\n\t);\n\n\tconst hasColorsToChoose = colors.length || ! allowCustomControl;\n\tif ( ! hasColorsToChoose && ! isActive ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<RichTextToolbarButton\n\t\t\t\tclassName=\"format-library-text-color-button\"\n\t\t\t\tisActive={ isActive }\n\t\t\t\ticon={\n\t\t\t\t\t<Icon\n\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\tObject.keys( activeAttributes ).length\n\t\t\t\t\t\t\t\t? textColorIcon\n\t\t\t\t\t\t\t\t: colorIcon\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyle={ colorIndicatorStyle }\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\ttitle={ title }\n\t\t\t\t// If has no colors to choose but a color is active remove the color onClick.\n\t\t\t\tonClick={\n\t\t\t\t\thasColorsToChoose\n\t\t\t\t\t\t? enableIsAddingColor\n\t\t\t\t\t\t: () => onChange( removeFormat( value, name ) )\n\t\t\t\t}\n\t\t\t\trole=\"menuitemcheckbox\"\n\t\t\t/>\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\tedit: TextColorEdit,\n};\n"],"mappings":";AAAA;AACA;AACA;AACA,SAASA,EAAE,QAAQ,iBAAiB;AACpC,SAASC,WAAW,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,oBAAoB;AACnE,SAASC,qBAAqB,EAAEC,WAAW,QAAQ,yBAAyB;AAC5E,SACCC,IAAI,EACJC,KAAK,IAAIC,SAAS,EAClBC,SAAS,IAAIC,aAAa,QACpB,kBAAkB;AACzB,SAASC,YAAY,QAAQ,sBAAsB;;AAEnD;AACA;AACA;AACA,SAASC,OAAO,IAAIC,aAAa,EAAEC,eAAe,QAAQ,UAAU;AAEpE,OAAO,MAAMC,gBAAgB,GAAG,kBAAkB;AAElD,MAAMC,IAAI,GAAG,iBAAiB;AAC9B,MAAMC,KAAK,GAAGjB,EAAE,CAAE,WAAY,CAAC;AAE/B,MAAMkB,WAAW,GAAG,EAAE;AAEtB,SAASC,wBAAwBA,CAAEC,OAAO,EAAEC,QAAQ,EAAG;EACtD,MAAM;IAAEC;EAAc,CAAC,GAAGF,OAAO;EACjC,MAAM;IAAEG;EAAY,CAAC,GAAGD,aAAa;EACrC,MAAME,KAAK,GAAGD,WAAW,CAACE,gBAAgB,CAAEL,OAAQ,CAAC;EACrD,MAAMM,KAAK,GAAGF,KAAK,CAACG,gBAAgB,CAAEN,QAAS,CAAC;EAEhD,IACCA,QAAQ,KAAK,kBAAkB,IAC/BK,KAAK,KAAKX,gBAAgB,IAC1BK,OAAO,CAACQ,aAAa,EACpB;IACD,OAAOT,wBAAwB,CAAEC,OAAO,CAACQ,aAAa,EAAEP,QAAS,CAAC;EACnE;EAEA,OAAOK,KAAK;AACb;AAEA,SAASG,kBAAkBA,CAAET,OAAO,EAAE;EAAEb,KAAK;EAAEuB;AAAgB,CAAC,EAAG;EAClE,IAAK,CAAEvB,KAAK,IAAI,CAAEuB,eAAe,EAAG;IACnC;EACD;EAEA,OAAO;IACNvB,KAAK,EAAEA,KAAK,IAAIY,wBAAwB,CAAEC,OAAO,EAAE,OAAQ,CAAC;IAC5DU,eAAe,EACdA,eAAe,KAAKf,gBAAgB,GACjCI,wBAAwB,CAAEC,OAAO,EAAE,kBAAmB,CAAC,GACvDU;EACL,CAAC;AACF;AAEA,SAASC,aAAaA,CAAE;EACvBL,KAAK;EACLM,QAAQ;EACRC,QAAQ;EACRC,gBAAgB;EAChBC;AACD,CAAC,EAAG;EACH,MAAM,CAAEC,kBAAkB,EAAEC,MAAM,GAAGnB,WAAW,CAAE,GAAGb,WAAW,CAC/D,cAAc,EACd,eACD,CAAC;EACD,MAAM,CAAEiC,aAAa,EAAEC,gBAAgB,CAAE,GAAGpC,QAAQ,CAAE,KAAM,CAAC;EAC7D,MAAMqC,mBAAmB,GAAGvC,WAAW,CACtC,MAAMsC,gBAAgB,CAAE,IAAK,CAAC,EAC9B,CAAEA,gBAAgB,CACnB,CAAC;EACD,MAAME,oBAAoB,GAAGxC,WAAW,CACvC,MAAMsC,gBAAgB,CAAE,KAAM,CAAC,EAC/B,CAAEA,gBAAgB,CACnB,CAAC;EACD,MAAMG,mBAAmB,GAAGxC,OAAO,CAClC,MACC2B,kBAAkB,CACjBM,UAAU,CAACQ,OAAO,EAClB7B,eAAe,CAAEY,KAAK,EAAEV,IAAI,EAAEqB,MAAO,CACtC,CAAC,EACF,CAAEX,KAAK,EAAEW,MAAM,CAChB,CAAC;EAED,MAAMO,iBAAiB,GAAGP,MAAM,CAACQ,MAAM,IAAI,CAAET,kBAAkB;EAC/D,IAAK,CAAEQ,iBAAiB,IAAI,CAAEX,QAAQ,EAAG;IACxC,OAAO,IAAI;EACZ;EAEA,OACCa,aAAA,CAAAC,QAAA,QACCD,aAAA,CAAC1C,qBAAqB;IACrB4C,SAAS,EAAC,kCAAkC;IAC5Cf,QAAQ,EAAGA,QAAU;IACrBgB,IAAI,EACHH,aAAA,CAACxC,IAAI;MACJ2C,IAAI,EACHC,MAAM,CAACC,IAAI,CAAEjB,gBAAiB,CAAC,CAACW,MAAM,GACnCnC,aAAa,GACbF,SACH;MACDgB,KAAK,EAAGkB;IAAqB,CAC7B,CACD;IACDzB,KAAK,EAAGA;IACR;IAAA;IACAmC,OAAO,EACNR,iBAAiB,GACdJ,mBAAmB,GACnB,MAAMR,QAAQ,CAAErB,YAAY,CAAEe,KAAK,EAAEV,IAAK,CAAE,CAC/C;IACDqC,IAAI,EAAC;EAAkB,CACvB,CAAC,EACAf,aAAa,IACdQ,aAAA,CAACjC,aAAa;IACbG,IAAI,EAAGA,IAAM;IACbsC,OAAO,EAAGb,oBAAsB;IAChCP,gBAAgB,EAAGA,gBAAkB;IACrCR,KAAK,EAAGA,KAAO;IACfM,QAAQ,EAAGA,QAAU;IACrBG,UAAU,EAAGA;
|
|
1
|
+
{"version":3,"names":["__","useCallback","useMemo","useState","RichTextToolbarButton","useSettings","Icon","color","colorIcon","textColor","textColorIcon","removeFormat","default","InlineColorUI","getActiveColors","transparentValue","name","title","EMPTY_ARRAY","getComputedStyleProperty","element","property","ownerDocument","defaultView","style","getComputedStyle","value","getPropertyValue","parentElement","fillComputedColors","backgroundColor","TextColorEdit","onChange","isActive","activeAttributes","contentRef","allowCustomControl","colors","isAddingColor","setIsAddingColor","enableIsAddingColor","disableIsAddingColor","colorIndicatorStyle","current","hasColorsToChoose","length","createElement","Fragment","className","icon","Object","keys","onClick","role","onClose","tagName","attributes","class","edit"],"sources":["@wordpress/format-library/src/text-color/index.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useCallback, useMemo, useState } from '@wordpress/element';\nimport { RichTextToolbarButton, useSettings } from '@wordpress/block-editor';\nimport {\n\tIcon,\n\tcolor as colorIcon,\n\ttextColor as textColorIcon,\n} from '@wordpress/icons';\nimport { removeFormat } from '@wordpress/rich-text';\n\n/**\n * Internal dependencies\n */\nimport { default as InlineColorUI, getActiveColors } from './inline';\n\nexport const transparentValue = 'rgba(0, 0, 0, 0)';\n\nconst name = 'core/text-color';\nconst title = __( 'Highlight' );\n\nconst EMPTY_ARRAY = [];\n\nfunction getComputedStyleProperty( element, property ) {\n\tconst { ownerDocument } = element;\n\tconst { defaultView } = ownerDocument;\n\tconst style = defaultView.getComputedStyle( element );\n\tconst value = style.getPropertyValue( property );\n\n\tif (\n\t\tproperty === 'background-color' &&\n\t\tvalue === transparentValue &&\n\t\telement.parentElement\n\t) {\n\t\treturn getComputedStyleProperty( element.parentElement, property );\n\t}\n\n\treturn value;\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:\n\t\t\tbackgroundColor === transparentValue\n\t\t\t\t? getComputedStyleProperty( element, 'background-color' )\n\t\t\t\t: backgroundColor,\n\t};\n}\n\nfunction TextColorEdit( {\n\tvalue,\n\tonChange,\n\tisActive,\n\tactiveAttributes,\n\tcontentRef,\n} ) {\n\tconst [ allowCustomControl, colors = EMPTY_ARRAY ] = useSettings(\n\t\t'color.custom',\n\t\t'color.palette'\n\t);\n\tconst [ isAddingColor, setIsAddingColor ] = useState( false );\n\tconst enableIsAddingColor = useCallback(\n\t\t() => setIsAddingColor( true ),\n\t\t[ setIsAddingColor ]\n\t);\n\tconst disableIsAddingColor = useCallback(\n\t\t() => setIsAddingColor( false ),\n\t\t[ setIsAddingColor ]\n\t);\n\tconst colorIndicatorStyle = useMemo(\n\t\t() =>\n\t\t\tfillComputedColors(\n\t\t\t\tcontentRef.current,\n\t\t\t\tgetActiveColors( value, name, colors )\n\t\t\t),\n\t\t[ value, colors ]\n\t);\n\n\tconst hasColorsToChoose = colors.length || ! allowCustomControl;\n\tif ( ! hasColorsToChoose && ! isActive ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<RichTextToolbarButton\n\t\t\t\tclassName=\"format-library-text-color-button\"\n\t\t\t\tisActive={ isActive }\n\t\t\t\ticon={\n\t\t\t\t\t<Icon\n\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\tObject.keys( activeAttributes ).length\n\t\t\t\t\t\t\t\t? textColorIcon\n\t\t\t\t\t\t\t\t: colorIcon\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyle={ colorIndicatorStyle }\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\ttitle={ title }\n\t\t\t\t// If has no colors to choose but a color is active remove the color onClick.\n\t\t\t\tonClick={\n\t\t\t\t\thasColorsToChoose\n\t\t\t\t\t\t? enableIsAddingColor\n\t\t\t\t\t\t: () => onChange( removeFormat( value, name ) )\n\t\t\t\t}\n\t\t\t\trole=\"menuitemcheckbox\"\n\t\t\t/>\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\tisActive={ isActive }\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\tedit: TextColorEdit,\n};\n"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { createElement } from "react";
|
|
|
5
5
|
import { useCallback, useMemo } from '@wordpress/element';
|
|
6
6
|
import { useSelect } from '@wordpress/data';
|
|
7
7
|
import { applyFormat, removeFormat, getActiveFormat, useAnchor } from '@wordpress/rich-text';
|
|
8
|
-
import { ColorPalette, getColorClassName, getColorObjectByColorValue, getColorObjectByAttributeValues, store as blockEditorStore
|
|
8
|
+
import { ColorPalette, getColorClassName, getColorObjectByColorValue, getColorObjectByAttributeValues, store as blockEditorStore } from '@wordpress/block-editor';
|
|
9
9
|
import { Popover, privateApis as componentsPrivateApis } from '@wordpress/components';
|
|
10
10
|
import { __ } from '@wordpress/i18n';
|
|
11
11
|
|
|
@@ -119,22 +119,16 @@ export default function InlineColorUI({
|
|
|
119
119
|
value,
|
|
120
120
|
onChange,
|
|
121
121
|
onClose,
|
|
122
|
-
contentRef
|
|
122
|
+
contentRef,
|
|
123
|
+
isActive
|
|
123
124
|
}) {
|
|
124
125
|
const popoverAnchor = useAnchor({
|
|
125
126
|
editableContentElement: contentRef.current,
|
|
126
|
-
settings
|
|
127
|
+
settings: {
|
|
128
|
+
...settings,
|
|
129
|
+
isActive
|
|
130
|
+
}
|
|
127
131
|
});
|
|
128
|
-
|
|
129
|
-
/*
|
|
130
|
-
As you change the text color by typing a HEX value into a field,
|
|
131
|
-
the return value of document.getSelection jumps to the field you're editing,
|
|
132
|
-
not the highlighted text. Given that useAnchor uses document.getSelection,
|
|
133
|
-
it will return null, since it can't find the <mark> element within the HEX input.
|
|
134
|
-
This caches the last truthy value of the selection anchor reference.
|
|
135
|
-
*/
|
|
136
|
-
const cachedRect = useCachedTruthy(popoverAnchor.getBoundingClientRect());
|
|
137
|
-
popoverAnchor.getBoundingClientRect = () => cachedRect;
|
|
138
132
|
return createElement(Popover, {
|
|
139
133
|
onClose: onClose,
|
|
140
134
|
className: "format-library__inline-color-popover",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useMemo","useSelect","applyFormat","removeFormat","getActiveFormat","useAnchor","ColorPalette","getColorClassName","getColorObjectByColorValue","getColorObjectByAttributeValues","store","blockEditorStore","useCachedTruthy","Popover","privateApis","componentsPrivateApis","__","textColor","settings","transparentValue","unlock","Tabs","TABS","name","title","parseCSS","css","split","reduce","accumulator","rule","property","value","color","backgroundColor","parseClassName","className","colorSettings","startsWith","endsWith","colorSlug","replace","colorObject","getActiveColors","activeColorFormat","attributes","style","class","setColors","colors","styles","classNames","push","join","slug","length","type","ColorPicker","onChange","select","_getSettings$colors","getSettings","onColorChange","activeColors","createElement","InlineColorUI","onClose","contentRef","popoverAnchor","editableContentElement","current","cachedRect","getBoundingClientRect","anchor","TabList","map","tab","Tab","tabId","key","TabPanel","focusable"],"sources":["@wordpress/format-library/src/text-color/inline.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tapplyFormat,\n\tremoveFormat,\n\tgetActiveFormat,\n\tuseAnchor,\n} from '@wordpress/rich-text';\nimport {\n\tColorPalette,\n\tgetColorClassName,\n\tgetColorObjectByColorValue,\n\tgetColorObjectByAttributeValues,\n\tstore as blockEditorStore,\n\tuseCachedTruthy,\n} from '@wordpress/block-editor';\nimport {\n\tPopover,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { textColor as settings, transparentValue } from './index';\nimport { unlock } from '../lock-unlock';\n\nconst { Tabs } = unlock( componentsPrivateApis );\n\nconst TABS = [\n\t{ name: 'color', title: __( 'Text' ) },\n\t{ name: 'backgroundColor', title: __( 'Background' ) },\n];\n\nfunction parseCSS( css = '' ) {\n\treturn css.split( ';' ).reduce( ( accumulator, rule ) => {\n\t\tif ( rule ) {\n\t\t\tconst [ property, value ] = rule.split( ':' );\n\t\t\tif ( property === 'color' ) accumulator.color = value;\n\t\t\tif ( property === 'background-color' && value !== transparentValue )\n\t\t\t\taccumulator.backgroundColor = value;\n\t\t}\n\t\treturn accumulator;\n\t}, {} );\n}\n\nexport function parseClassName( className = '', colorSettings ) {\n\treturn className.split( ' ' ).reduce( ( accumulator, name ) => {\n\t\t// `colorSlug` could contain dashes, so simply match the start and end.\n\t\tif ( name.startsWith( 'has-' ) && name.endsWith( '-color' ) ) {\n\t\t\tconst colorSlug = name\n\t\t\t\t.replace( /^has-/, '' )\n\t\t\t\t.replace( /-color$/, '' );\n\t\t\tconst colorObject = getColorObjectByAttributeValues(\n\t\t\t\tcolorSettings,\n\t\t\t\tcolorSlug\n\t\t\t);\n\t\t\taccumulator.color = colorObject.color;\n\t\t}\n\t\treturn accumulator;\n\t}, {} );\n}\n\nexport function getActiveColors( value, name, colorSettings ) {\n\tconst activeColorFormat = getActiveFormat( value, name );\n\n\tif ( ! activeColorFormat ) {\n\t\treturn {};\n\t}\n\n\treturn {\n\t\t...parseCSS( activeColorFormat.attributes.style ),\n\t\t...parseClassName( activeColorFormat.attributes.class, colorSettings ),\n\t};\n}\n\nfunction setColors( value, name, colorSettings, colors ) {\n\tconst { color, backgroundColor } = {\n\t\t...getActiveColors( value, name, colorSettings ),\n\t\t...colors,\n\t};\n\n\tif ( ! color && ! backgroundColor ) {\n\t\treturn removeFormat( value, name );\n\t}\n\n\tconst styles = [];\n\tconst classNames = [];\n\tconst attributes = {};\n\n\tif ( backgroundColor ) {\n\t\tstyles.push( [ 'background-color', backgroundColor ].join( ':' ) );\n\t} else {\n\t\t// Override default browser color for mark element.\n\t\tstyles.push( [ 'background-color', transparentValue ].join( ':' ) );\n\t}\n\n\tif ( color ) {\n\t\tconst colorObject = getColorObjectByColorValue( colorSettings, color );\n\n\t\tif ( colorObject ) {\n\t\t\tclassNames.push( getColorClassName( 'color', colorObject.slug ) );\n\t\t} else {\n\t\t\tstyles.push( [ 'color', color ].join( ':' ) );\n\t\t}\n\t}\n\n\tif ( styles.length ) attributes.style = styles.join( ';' );\n\tif ( classNames.length ) attributes.class = classNames.join( ' ' );\n\n\treturn applyFormat( value, { type: name, attributes } );\n}\n\nfunction ColorPicker( { name, property, value, onChange } ) {\n\tconst colors = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn getSettings().colors ?? [];\n\t}, [] );\n\tconst onColorChange = useCallback(\n\t\t( color ) => {\n\t\t\tonChange(\n\t\t\t\tsetColors( value, name, colors, { [ property ]: color } )\n\t\t\t);\n\t\t},\n\t\t[ colors, onChange, property ]\n\t);\n\tconst activeColors = useMemo(\n\t\t() => getActiveColors( value, name, colors ),\n\t\t[ name, value, colors ]\n\t);\n\n\treturn (\n\t\t<ColorPalette\n\t\t\tvalue={ activeColors[ property ] }\n\t\t\tonChange={ onColorChange }\n\t\t/>\n\t);\n}\n\nexport default function InlineColorUI( {\n\tname,\n\tvalue,\n\tonChange,\n\tonClose,\n\tcontentRef,\n} ) {\n\tconst popoverAnchor = useAnchor( {\n\t\teditableContentElement: contentRef.current,\n\t\tsettings,\n\t} );\n\n\t/*\n\t As you change the text color by typing a HEX value into a field,\n\t the return value of document.getSelection jumps to the field you're editing,\n\t not the highlighted text. Given that useAnchor uses document.getSelection,\n\t it will return null, since it can't find the <mark> element within the HEX input.\n\t This caches the last truthy value of the selection anchor reference.\n\t */\n\tconst cachedRect = useCachedTruthy( popoverAnchor.getBoundingClientRect() );\n\tpopoverAnchor.getBoundingClientRect = () => cachedRect;\n\n\treturn (\n\t\t<Popover\n\t\t\tonClose={ onClose }\n\t\t\tclassName=\"format-library__inline-color-popover\"\n\t\t\tanchor={ popoverAnchor }\n\t\t>\n\t\t\t<Tabs>\n\t\t\t\t<Tabs.TabList>\n\t\t\t\t\t{ TABS.map( ( tab ) => (\n\t\t\t\t\t\t<Tabs.Tab tabId={ tab.name } key={ tab.name }>\n\t\t\t\t\t\t\t{ tab.title }\n\t\t\t\t\t\t</Tabs.Tab>\n\t\t\t\t\t) ) }\n\t\t\t\t</Tabs.TabList>\n\t\t\t\t{ TABS.map( ( tab ) => (\n\t\t\t\t\t<Tabs.TabPanel\n\t\t\t\t\t\ttabId={ tab.name }\n\t\t\t\t\t\tfocusable={ false }\n\t\t\t\t\t\tkey={ tab.name }\n\t\t\t\t\t>\n\t\t\t\t\t\t<ColorPicker\n\t\t\t\t\t\t\tname={ name }\n\t\t\t\t\t\t\tproperty={ tab.name }\n\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Tabs.TabPanel>\n\t\t\t\t) ) }\n\t\t\t</Tabs>\n\t\t</Popover>\n\t);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["useCallback","useMemo","useSelect","applyFormat","removeFormat","getActiveFormat","useAnchor","ColorPalette","getColorClassName","getColorObjectByColorValue","getColorObjectByAttributeValues","store","blockEditorStore","Popover","privateApis","componentsPrivateApis","__","textColor","settings","transparentValue","unlock","Tabs","TABS","name","title","parseCSS","css","split","reduce","accumulator","rule","property","value","color","backgroundColor","parseClassName","className","colorSettings","startsWith","endsWith","colorSlug","replace","colorObject","getActiveColors","activeColorFormat","attributes","style","class","setColors","colors","styles","classNames","push","join","slug","length","type","ColorPicker","onChange","select","_getSettings$colors","getSettings","onColorChange","activeColors","createElement","InlineColorUI","onClose","contentRef","isActive","popoverAnchor","editableContentElement","current","anchor","TabList","map","tab","Tab","tabId","key","TabPanel","focusable"],"sources":["@wordpress/format-library/src/text-color/inline.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useCallback, useMemo } from '@wordpress/element';\nimport { useSelect } from '@wordpress/data';\nimport {\n\tapplyFormat,\n\tremoveFormat,\n\tgetActiveFormat,\n\tuseAnchor,\n} from '@wordpress/rich-text';\nimport {\n\tColorPalette,\n\tgetColorClassName,\n\tgetColorObjectByColorValue,\n\tgetColorObjectByAttributeValues,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport {\n\tPopover,\n\tprivateApis as componentsPrivateApis,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport { textColor as settings, transparentValue } from './index';\nimport { unlock } from '../lock-unlock';\n\nconst { Tabs } = unlock( componentsPrivateApis );\n\nconst TABS = [\n\t{ name: 'color', title: __( 'Text' ) },\n\t{ name: 'backgroundColor', title: __( 'Background' ) },\n];\n\nfunction parseCSS( css = '' ) {\n\treturn css.split( ';' ).reduce( ( accumulator, rule ) => {\n\t\tif ( rule ) {\n\t\t\tconst [ property, value ] = rule.split( ':' );\n\t\t\tif ( property === 'color' ) accumulator.color = value;\n\t\t\tif ( property === 'background-color' && value !== transparentValue )\n\t\t\t\taccumulator.backgroundColor = value;\n\t\t}\n\t\treturn accumulator;\n\t}, {} );\n}\n\nexport function parseClassName( className = '', colorSettings ) {\n\treturn className.split( ' ' ).reduce( ( accumulator, name ) => {\n\t\t// `colorSlug` could contain dashes, so simply match the start and end.\n\t\tif ( name.startsWith( 'has-' ) && name.endsWith( '-color' ) ) {\n\t\t\tconst colorSlug = name\n\t\t\t\t.replace( /^has-/, '' )\n\t\t\t\t.replace( /-color$/, '' );\n\t\t\tconst colorObject = getColorObjectByAttributeValues(\n\t\t\t\tcolorSettings,\n\t\t\t\tcolorSlug\n\t\t\t);\n\t\t\taccumulator.color = colorObject.color;\n\t\t}\n\t\treturn accumulator;\n\t}, {} );\n}\n\nexport function getActiveColors( value, name, colorSettings ) {\n\tconst activeColorFormat = getActiveFormat( value, name );\n\n\tif ( ! activeColorFormat ) {\n\t\treturn {};\n\t}\n\n\treturn {\n\t\t...parseCSS( activeColorFormat.attributes.style ),\n\t\t...parseClassName( activeColorFormat.attributes.class, colorSettings ),\n\t};\n}\n\nfunction setColors( value, name, colorSettings, colors ) {\n\tconst { color, backgroundColor } = {\n\t\t...getActiveColors( value, name, colorSettings ),\n\t\t...colors,\n\t};\n\n\tif ( ! color && ! backgroundColor ) {\n\t\treturn removeFormat( value, name );\n\t}\n\n\tconst styles = [];\n\tconst classNames = [];\n\tconst attributes = {};\n\n\tif ( backgroundColor ) {\n\t\tstyles.push( [ 'background-color', backgroundColor ].join( ':' ) );\n\t} else {\n\t\t// Override default browser color for mark element.\n\t\tstyles.push( [ 'background-color', transparentValue ].join( ':' ) );\n\t}\n\n\tif ( color ) {\n\t\tconst colorObject = getColorObjectByColorValue( colorSettings, color );\n\n\t\tif ( colorObject ) {\n\t\t\tclassNames.push( getColorClassName( 'color', colorObject.slug ) );\n\t\t} else {\n\t\t\tstyles.push( [ 'color', color ].join( ':' ) );\n\t\t}\n\t}\n\n\tif ( styles.length ) attributes.style = styles.join( ';' );\n\tif ( classNames.length ) attributes.class = classNames.join( ' ' );\n\n\treturn applyFormat( value, { type: name, attributes } );\n}\n\nfunction ColorPicker( { name, property, value, onChange } ) {\n\tconst colors = useSelect( ( select ) => {\n\t\tconst { getSettings } = select( blockEditorStore );\n\t\treturn getSettings().colors ?? [];\n\t}, [] );\n\tconst onColorChange = useCallback(\n\t\t( color ) => {\n\t\t\tonChange(\n\t\t\t\tsetColors( value, name, colors, { [ property ]: color } )\n\t\t\t);\n\t\t},\n\t\t[ colors, onChange, property ]\n\t);\n\tconst activeColors = useMemo(\n\t\t() => getActiveColors( value, name, colors ),\n\t\t[ name, value, colors ]\n\t);\n\n\treturn (\n\t\t<ColorPalette\n\t\t\tvalue={ activeColors[ property ] }\n\t\t\tonChange={ onColorChange }\n\t\t/>\n\t);\n}\n\nexport default function InlineColorUI( {\n\tname,\n\tvalue,\n\tonChange,\n\tonClose,\n\tcontentRef,\n\tisActive,\n} ) {\n\tconst popoverAnchor = useAnchor( {\n\t\teditableContentElement: contentRef.current,\n\t\tsettings: { ...settings, isActive },\n\t} );\n\n\treturn (\n\t\t<Popover\n\t\t\tonClose={ onClose }\n\t\t\tclassName=\"format-library__inline-color-popover\"\n\t\t\tanchor={ popoverAnchor }\n\t\t>\n\t\t\t<Tabs>\n\t\t\t\t<Tabs.TabList>\n\t\t\t\t\t{ TABS.map( ( tab ) => (\n\t\t\t\t\t\t<Tabs.Tab tabId={ tab.name } key={ tab.name }>\n\t\t\t\t\t\t\t{ tab.title }\n\t\t\t\t\t\t</Tabs.Tab>\n\t\t\t\t\t) ) }\n\t\t\t\t</Tabs.TabList>\n\t\t\t\t{ TABS.map( ( tab ) => (\n\t\t\t\t\t<Tabs.TabPanel\n\t\t\t\t\t\ttabId={ tab.name }\n\t\t\t\t\t\tfocusable={ false }\n\t\t\t\t\t\tkey={ tab.name }\n\t\t\t\t\t>\n\t\t\t\t\t\t<ColorPicker\n\t\t\t\t\t\t\tname={ name }\n\t\t\t\t\t\t\tproperty={ tab.name }\n\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Tabs.TabPanel>\n\t\t\t\t) ) }\n\t\t\t</Tabs>\n\t\t</Popover>\n\t);\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wordpress/format-library",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.28.1",
|
|
4
4
|
"description": "Format library for the WordPress editor.",
|
|
5
5
|
"author": "The WordPress Contributors",
|
|
6
6
|
"license": "GPL-2.0-or-later",
|
|
@@ -26,18 +26,18 @@
|
|
|
26
26
|
"react-native": "src/index",
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@babel/runtime": "^7.16.0",
|
|
29
|
-
"@wordpress/a11y": "^3.
|
|
30
|
-
"@wordpress/block-editor": "^12.
|
|
31
|
-
"@wordpress/components": "^
|
|
32
|
-
"@wordpress/compose": "^6.
|
|
33
|
-
"@wordpress/data": "^9.
|
|
34
|
-
"@wordpress/element": "^5.
|
|
35
|
-
"@wordpress/html-entities": "^3.
|
|
36
|
-
"@wordpress/i18n": "^4.
|
|
37
|
-
"@wordpress/icons": "^9.
|
|
38
|
-
"@wordpress/private-apis": "^0.
|
|
39
|
-
"@wordpress/rich-text": "^6.
|
|
40
|
-
"@wordpress/url": "^3.
|
|
29
|
+
"@wordpress/a11y": "^3.51.0",
|
|
30
|
+
"@wordpress/block-editor": "^12.19.1",
|
|
31
|
+
"@wordpress/components": "^26.0.1",
|
|
32
|
+
"@wordpress/compose": "^6.28.0",
|
|
33
|
+
"@wordpress/data": "^9.21.0",
|
|
34
|
+
"@wordpress/element": "^5.28.0",
|
|
35
|
+
"@wordpress/html-entities": "^3.51.0",
|
|
36
|
+
"@wordpress/i18n": "^4.51.0",
|
|
37
|
+
"@wordpress/icons": "^9.42.0",
|
|
38
|
+
"@wordpress/private-apis": "^0.33.0",
|
|
39
|
+
"@wordpress/rich-text": "^6.28.1",
|
|
40
|
+
"@wordpress/url": "^3.52.0"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
43
|
"react": "^18.0.0",
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"publishConfig": {
|
|
47
47
|
"access": "public"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "5902fc0f490528da6965dd4cf97f11192bcf5956"
|
|
50
50
|
}
|