@wordpress/format-library 5.32.0 → 5.32.1-next.ff1cebbba.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bold/index.js +69 -58
- package/build/bold/index.js.map +7 -1
- package/build/code/index.js +62 -54
- package/build/code/index.js.map +7 -1
- package/build/default-formats.js +52 -24
- package/build/default-formats.js.map +7 -1
- package/build/image/index.js +185 -153
- package/build/image/index.js.map +7 -1
- package/build/index.js +28 -18
- package/build/index.js.map +7 -1
- package/build/italic/index.js +69 -58
- package/build/italic/index.js.map +7 -1
- package/build/keyboard/index.js +47 -36
- package/build/keyboard/index.js.map +7 -1
- package/build/language/index.js +145 -113
- package/build/language/index.js.map +7 -1
- package/build/link/css-classes-setting.js +81 -0
- package/build/link/css-classes-setting.js.map +7 -0
- package/build/link/index.js +162 -167
- package/build/link/index.js.map +7 -1
- package/build/link/inline.js +186 -174
- package/build/link/inline.js.map +7 -1
- package/build/link/use-link-instance-key.js +25 -19
- package/build/link/use-link-instance-key.js.map +7 -1
- package/build/link/utils.js +66 -115
- package/build/link/utils.js.map +7 -1
- package/build/lock-unlock.js +31 -15
- package/build/lock-unlock.js.map +7 -1
- package/build/non-breaking-space/index.js +44 -28
- package/build/non-breaking-space/index.js.map +7 -1
- package/build/strikethrough/index.js +57 -42
- package/build/strikethrough/index.js.map +7 -1
- package/build/subscript/index.js +47 -36
- package/build/subscript/index.js.map +7 -1
- package/build/superscript/index.js +47 -36
- package/build/superscript/index.js.map +7 -1
- package/build/text-color/index.js +102 -70
- package/build/text-color/index.js.map +7 -1
- package/build/text-color/inline.js +118 -116
- package/build/text-color/inline.js.map +7 -1
- package/build/underline/index.js +62 -40
- package/build/underline/index.js.map +7 -1
- package/build/unknown/index.js +51 -37
- package/build/unknown/index.js.map +7 -1
- package/build-module/bold/index.js +52 -52
- package/build-module/bold/index.js.map +7 -1
- package/build-module/code/index.js +41 -46
- package/build-module/code/index.js.map +7 -1
- package/build-module/default-formats.js +34 -19
- package/build-module/default-formats.js.map +7 -1
- package/build-module/image/index.js +174 -144
- package/build-module/image/index.js.map +7 -1
- package/build-module/index.js +6 -14
- package/build-module/index.js.map +7 -1
- package/build-module/italic/index.js +52 -52
- package/build-module/italic/index.js.map +7 -1
- package/build-module/keyboard/index.js +25 -30
- package/build-module/keyboard/index.js.map +7 -1
- package/build-module/language/index.js +128 -105
- package/build-module/language/index.js.map +7 -1
- package/build-module/link/css-classes-setting.js +67 -0
- package/build-module/link/css-classes-setting.js.map +7 -0
- package/build-module/link/index.js +128 -146
- package/build-module/link/index.js.map +7 -1
- package/build-module/link/inline.js +158 -154
- package/build-module/link/inline.js.map +7 -1
- package/build-module/link/use-link-instance-key.js +7 -14
- package/build-module/link/use-link-instance-key.js.map +7 -1
- package/build-module/link/utils.js +46 -101
- package/build-module/link/utils.js.map +7 -1
- package/build-module/lock-unlock.js +8 -7
- package/build-module/lock-unlock.js.map +7 -1
- package/build-module/non-breaking-space/index.js +22 -22
- package/build-module/non-breaking-space/index.js.map +7 -1
- package/build-module/strikethrough/index.js +38 -36
- package/build-module/strikethrough/index.js.map +7 -1
- package/build-module/subscript/index.js +25 -30
- package/build-module/subscript/index.js.map +7 -1
- package/build-module/superscript/index.js +25 -30
- package/build-module/superscript/index.js.map +7 -1
- package/build-module/text-color/index.js +72 -61
- package/build-module/text-color/index.js.map +7 -1
- package/build-module/text-color/inline.js +107 -106
- package/build-module/text-color/inline.js.map +7 -1
- package/build-module/underline/index.js +43 -34
- package/build-module/underline/index.js.map +7 -1
- package/build-module/unknown/index.js +26 -28
- package/build-module/unknown/index.js.map +7 -1
- package/build-style/style-rtl.css +0 -194
- package/build-style/style.css +0 -194
- package/package.json +21 -15
- package/src/image/style.scss +3 -0
- package/src/link/css-classes-setting.js +89 -0
- package/src/link/index.js +1 -0
- package/src/link/inline.js +19 -0
- package/src/link/style.scss +3 -0
- package/src/link/test/css-classes-setting.js +144 -0
- package/src/link/utils.js +8 -0
- package/src/style.scss +4 -4
- package/src/text-color/style.scss +2 -0
- package/build/default-formats.native.js +0 -16
- package/build/default-formats.native.js.map +0 -1
- package/build/link/index.native.js +0 -174
- package/build/link/index.native.js.map +0 -1
- package/build/link/modal-screens/link-picker-screen.native.js +0 -67
- package/build/link/modal-screens/link-picker-screen.native.js.map +0 -1
- package/build/link/modal-screens/link-settings-screen.native.js +0 -226
- package/build/link/modal-screens/link-settings-screen.native.js.map +0 -1
- package/build/link/modal-screens/screens.native.js +0 -11
- package/build/link/modal-screens/screens.native.js.map +0 -1
- package/build/link/modal.native.js +0 -53
- package/build/link/modal.native.js.map +0 -1
- package/build/text-color/index.native.js +0 -134
- package/build/text-color/index.native.js.map +0 -1
- package/build/text-color/inline.native.js +0 -150
- package/build/text-color/inline.native.js.map +0 -1
- package/build-module/default-formats.native.js +0 -10
- package/build-module/default-formats.native.js.map +0 -1
- package/build-module/link/index.native.js +0 -166
- package/build-module/link/index.native.js.map +0 -1
- package/build-module/link/modal-screens/link-picker-screen.native.js +0 -59
- package/build-module/link/modal-screens/link-picker-screen.native.js.map +0 -1
- package/build-module/link/modal-screens/link-settings-screen.native.js +0 -218
- package/build-module/link/modal-screens/link-settings-screen.native.js.map +0 -1
- package/build-module/link/modal-screens/screens.native.js +0 -5
- package/build-module/link/modal-screens/screens.native.js.map +0 -1
- package/build-module/link/modal.native.js +0 -45
- package/build-module/link/modal.native.js.map +0 -1
- package/build-module/text-color/index.native.js +0 -126
- package/build-module/text-color/index.native.js.map +0 -1
- package/build-module/text-color/inline.native.js +0 -142
- package/build-module/text-color/inline.native.js.map +0 -1
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useState } from '@wordpress/element';
|
|
5
|
+
import { useInstanceId } from '@wordpress/compose';
|
|
6
|
+
import { __ } from '@wordpress/i18n';
|
|
7
|
+
import {
|
|
8
|
+
__experimentalInputControl as InputControl,
|
|
9
|
+
CheckboxControl,
|
|
10
|
+
VisuallyHidden,
|
|
11
|
+
__experimentalVStack as VStack,
|
|
12
|
+
} from '@wordpress/components';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* CSSClassesSettingComponent
|
|
16
|
+
*
|
|
17
|
+
* Presents a toggleable text input for editing link CSS classes. The input
|
|
18
|
+
* is shown when the toggle is enabled or when there is already a value. When
|
|
19
|
+
* toggled off and a value exists, it resets the value to an empty string.
|
|
20
|
+
*
|
|
21
|
+
* @param {Object} props - Component props.
|
|
22
|
+
* @param {Object} props.setting - Setting configuration object.
|
|
23
|
+
* @param {Object} props.value - Current link value object.
|
|
24
|
+
* @param {Function} props.onChange - Callback when value changes.
|
|
25
|
+
*/
|
|
26
|
+
const CSSClassesSettingComponent = ( { setting, value, onChange } ) => {
|
|
27
|
+
const hasValue = value ? value?.cssClasses?.length > 0 : false;
|
|
28
|
+
const [ isSettingActive, setIsSettingActive ] = useState( hasValue );
|
|
29
|
+
const instanceId = useInstanceId( CSSClassesSettingComponent );
|
|
30
|
+
const controlledRegionId = `css-classes-setting-${ instanceId }`;
|
|
31
|
+
|
|
32
|
+
// Sanitize user input: replace commas with spaces, collapse repeated spaces, and trim
|
|
33
|
+
const handleSettingChange = ( newValue ) => {
|
|
34
|
+
const sanitizedValue =
|
|
35
|
+
typeof newValue === 'string'
|
|
36
|
+
? newValue.replace( /,/g, ' ' ).replace( /\s+/g, ' ' ).trim()
|
|
37
|
+
: newValue;
|
|
38
|
+
onChange( {
|
|
39
|
+
...value,
|
|
40
|
+
[ setting.id ]: sanitizedValue,
|
|
41
|
+
} );
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const handleCheckboxChange = () => {
|
|
45
|
+
if ( isSettingActive ) {
|
|
46
|
+
if ( hasValue ) {
|
|
47
|
+
// Reset the value when hiding the input and a value exists.
|
|
48
|
+
handleSettingChange( '' );
|
|
49
|
+
}
|
|
50
|
+
setIsSettingActive( false );
|
|
51
|
+
} else {
|
|
52
|
+
setIsSettingActive( true );
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
return (
|
|
57
|
+
<fieldset>
|
|
58
|
+
<VisuallyHidden as="legend">{ setting.title }</VisuallyHidden>
|
|
59
|
+
<VStack spacing={ 3 }>
|
|
60
|
+
<CheckboxControl
|
|
61
|
+
__nextHasNoMarginBottom
|
|
62
|
+
label={ setting.title }
|
|
63
|
+
onChange={ handleCheckboxChange }
|
|
64
|
+
checked={ isSettingActive || hasValue }
|
|
65
|
+
aria-expanded={ isSettingActive }
|
|
66
|
+
aria-controls={
|
|
67
|
+
isSettingActive ? controlledRegionId : undefined
|
|
68
|
+
}
|
|
69
|
+
/>
|
|
70
|
+
{ isSettingActive && (
|
|
71
|
+
<div id={ controlledRegionId }>
|
|
72
|
+
<InputControl
|
|
73
|
+
label={ __( 'CSS classes' ) }
|
|
74
|
+
value={ value?.cssClasses }
|
|
75
|
+
onChange={ handleSettingChange }
|
|
76
|
+
help={ __(
|
|
77
|
+
'Separate multiple classes with spaces.'
|
|
78
|
+
) }
|
|
79
|
+
__unstableInputWidth="100%"
|
|
80
|
+
__next40pxDefaultSize
|
|
81
|
+
/>
|
|
82
|
+
</div>
|
|
83
|
+
) }
|
|
84
|
+
</VStack>
|
|
85
|
+
</fieldset>
|
|
86
|
+
);
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export default CSSClassesSettingComponent;
|
package/src/link/index.js
CHANGED
package/src/link/inline.js
CHANGED
|
@@ -29,6 +29,9 @@ import { useDispatch, useSelect } from '@wordpress/data';
|
|
|
29
29
|
*/
|
|
30
30
|
import { createLinkFormat, isValidHref, getFormatBoundary } from './utils';
|
|
31
31
|
import { link as settings } from './index';
|
|
32
|
+
import CSSClassesSettingComponent from './css-classes-setting';
|
|
33
|
+
|
|
34
|
+
// CSSClassesSettingComponent moved to its own file and imported above.
|
|
32
35
|
|
|
33
36
|
const LINK_SETTINGS = [
|
|
34
37
|
...LinkControl.DEFAULT_LINK_SETTINGS,
|
|
@@ -36,6 +39,19 @@ const LINK_SETTINGS = [
|
|
|
36
39
|
id: 'nofollow',
|
|
37
40
|
title: __( 'Mark as nofollow' ),
|
|
38
41
|
},
|
|
42
|
+
{
|
|
43
|
+
id: 'cssClasses',
|
|
44
|
+
title: __( 'Additional CSS class(es)' ),
|
|
45
|
+
render: ( setting, value, onChange ) => {
|
|
46
|
+
return (
|
|
47
|
+
<CSSClassesSettingComponent
|
|
48
|
+
setting={ setting }
|
|
49
|
+
value={ value }
|
|
50
|
+
onChange={ onChange }
|
|
51
|
+
/>
|
|
52
|
+
);
|
|
53
|
+
},
|
|
54
|
+
},
|
|
39
55
|
];
|
|
40
56
|
|
|
41
57
|
function InlineLinkUI( {
|
|
@@ -78,8 +94,10 @@ function InlineLinkUI( {
|
|
|
78
94
|
opensInNewTab: activeAttributes.target === '_blank',
|
|
79
95
|
nofollow: activeAttributes.rel?.includes( 'nofollow' ),
|
|
80
96
|
title: richTextText,
|
|
97
|
+
cssClasses: activeAttributes.class,
|
|
81
98
|
} ),
|
|
82
99
|
[
|
|
100
|
+
activeAttributes.class,
|
|
83
101
|
activeAttributes.id,
|
|
84
102
|
activeAttributes.rel,
|
|
85
103
|
activeAttributes.target,
|
|
@@ -116,6 +134,7 @@ function InlineLinkUI( {
|
|
|
116
134
|
: undefined,
|
|
117
135
|
opensInNewWindow: nextValue.opensInNewTab,
|
|
118
136
|
nofollow: nextValue.nofollow,
|
|
137
|
+
cssClasses: nextValue.cssClasses,
|
|
119
138
|
} );
|
|
120
139
|
|
|
121
140
|
const newText = nextValue.title || newUrl;
|
package/src/link/style.scss
CHANGED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { render, screen } from '@testing-library/react';
|
|
5
|
+
import userEvent from '@testing-library/user-event';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* WordPress dependencies
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Internal dependencies
|
|
13
|
+
*/
|
|
14
|
+
import CSSClassesSettingComponent from '../css-classes-setting';
|
|
15
|
+
|
|
16
|
+
describe( 'CSSClassesSettingComponent', () => {
|
|
17
|
+
it( 'renders checkbox and hides input by default when no value', async () => {
|
|
18
|
+
render(
|
|
19
|
+
<CSSClassesSettingComponent
|
|
20
|
+
setting={ {
|
|
21
|
+
id: 'cssClasses',
|
|
22
|
+
title: 'Additional CSS class(es)',
|
|
23
|
+
} }
|
|
24
|
+
value={ { cssClasses: '' } }
|
|
25
|
+
onChange={ () => {} }
|
|
26
|
+
/>
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
// Checkbox should be visible
|
|
30
|
+
const checkbox = screen.getByRole( 'checkbox', {
|
|
31
|
+
name: 'Additional CSS class(es)',
|
|
32
|
+
} );
|
|
33
|
+
expect( checkbox ).toBeVisible();
|
|
34
|
+
|
|
35
|
+
// aria-expanded should reflect collapsed state
|
|
36
|
+
expect( checkbox ).toHaveAttribute( 'aria-expanded', 'false' );
|
|
37
|
+
|
|
38
|
+
// aria-controls should not be present when region is not rendered
|
|
39
|
+
expect( checkbox ).not.toHaveAttribute( 'aria-controls' );
|
|
40
|
+
|
|
41
|
+
// Input should not be in the document initially
|
|
42
|
+
expect(
|
|
43
|
+
screen.queryByRole( 'textbox', {
|
|
44
|
+
name: 'CSS classes',
|
|
45
|
+
} )
|
|
46
|
+
).not.toBeInTheDocument();
|
|
47
|
+
} );
|
|
48
|
+
|
|
49
|
+
it( 'shows input when toggled on and calls onChange when typing', async () => {
|
|
50
|
+
const user = userEvent.setup();
|
|
51
|
+
const onChange = jest.fn();
|
|
52
|
+
|
|
53
|
+
render(
|
|
54
|
+
<CSSClassesSettingComponent
|
|
55
|
+
setting={ {
|
|
56
|
+
id: 'cssClasses',
|
|
57
|
+
title: 'Additional CSS class(es)',
|
|
58
|
+
} }
|
|
59
|
+
value={ { cssClasses: '' } }
|
|
60
|
+
onChange={ onChange }
|
|
61
|
+
/>
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
// Toggle on
|
|
65
|
+
const checkbox = screen.getByRole( 'checkbox', {
|
|
66
|
+
name: 'Additional CSS class(es)',
|
|
67
|
+
} );
|
|
68
|
+
// starts collapsed
|
|
69
|
+
expect( checkbox ).toHaveAttribute( 'aria-expanded', 'false' );
|
|
70
|
+
await user.click( checkbox );
|
|
71
|
+
// now expanded
|
|
72
|
+
expect( checkbox ).toHaveAttribute( 'aria-expanded', 'true' );
|
|
73
|
+
|
|
74
|
+
// aria-controls should be present when expanded
|
|
75
|
+
const regionId = checkbox.getAttribute( 'aria-controls' );
|
|
76
|
+
expect( regionId ).toBeTruthy();
|
|
77
|
+
|
|
78
|
+
// Input should appear
|
|
79
|
+
const input = screen.getByRole( 'textbox', {
|
|
80
|
+
name: 'CSS classes',
|
|
81
|
+
} );
|
|
82
|
+
expect( input ).toBeVisible();
|
|
83
|
+
|
|
84
|
+
// Type classes (including commas) - commas should be converted to spaces
|
|
85
|
+
await user.type( input, 'btn,btn-primary , btn-secondary' );
|
|
86
|
+
|
|
87
|
+
// onChange should have been called with the updated value object
|
|
88
|
+
expect( onChange ).toHaveBeenCalledWith(
|
|
89
|
+
expect.objectContaining( {
|
|
90
|
+
cssClasses: 'btn btn-primary btn-secondary',
|
|
91
|
+
} )
|
|
92
|
+
);
|
|
93
|
+
} );
|
|
94
|
+
|
|
95
|
+
it( 'hides input and clears value when toggled off with existing value', async () => {
|
|
96
|
+
const user = userEvent.setup();
|
|
97
|
+
const onChange = jest.fn();
|
|
98
|
+
|
|
99
|
+
render(
|
|
100
|
+
<CSSClassesSettingComponent
|
|
101
|
+
setting={ {
|
|
102
|
+
id: 'cssClasses',
|
|
103
|
+
title: 'Additional CSS class(es)',
|
|
104
|
+
} }
|
|
105
|
+
value={ { cssClasses: 'foo bar' } }
|
|
106
|
+
onChange={ onChange }
|
|
107
|
+
/>
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
const checkbox = screen.getByRole( 'checkbox', {
|
|
111
|
+
name: 'Additional CSS class(es)',
|
|
112
|
+
} );
|
|
113
|
+
|
|
114
|
+
// Initially expanded and has aria-controls
|
|
115
|
+
expect( checkbox ).toHaveAttribute( 'aria-expanded', 'true' );
|
|
116
|
+
const initialRegionId = checkbox.getAttribute( 'aria-controls' );
|
|
117
|
+
expect( initialRegionId ).toBeTruthy();
|
|
118
|
+
|
|
119
|
+
// Initially visible because there is a value
|
|
120
|
+
const input = screen.getByRole( 'textbox', {
|
|
121
|
+
name: 'CSS classes',
|
|
122
|
+
} );
|
|
123
|
+
expect( input ).toBeVisible();
|
|
124
|
+
|
|
125
|
+
// Toggle off
|
|
126
|
+
await user.click( checkbox );
|
|
127
|
+
// aria-expanded should now be false
|
|
128
|
+
expect( checkbox ).toHaveAttribute( 'aria-expanded', 'false' );
|
|
129
|
+
|
|
130
|
+
// Should have called onChange with cleared value
|
|
131
|
+
expect( onChange ).toHaveBeenCalledWith(
|
|
132
|
+
expect.objectContaining( { cssClasses: '' } )
|
|
133
|
+
);
|
|
134
|
+
// Input should be hidden afterwards
|
|
135
|
+
expect(
|
|
136
|
+
screen.queryByRole( 'textbox', {
|
|
137
|
+
name: 'CSS classes',
|
|
138
|
+
} )
|
|
139
|
+
).not.toBeInTheDocument();
|
|
140
|
+
|
|
141
|
+
// aria-controls should be removed when collapsed
|
|
142
|
+
expect( checkbox ).not.toHaveAttribute( 'aria-controls' );
|
|
143
|
+
} );
|
|
144
|
+
} );
|
package/src/link/utils.js
CHANGED
|
@@ -86,6 +86,7 @@ export function isValidHref( href ) {
|
|
|
86
86
|
* @param {string} options.id The ID of the link.
|
|
87
87
|
* @param {boolean} options.opensInNewWindow Whether this link will open in a new window.
|
|
88
88
|
* @param {boolean} options.nofollow Whether this link is marked as no follow relationship.
|
|
89
|
+
* @param {string} options.cssClasses The CSS classes to apply to the link.
|
|
89
90
|
* @return {Object} The final format object.
|
|
90
91
|
*/
|
|
91
92
|
export function createLinkFormat( {
|
|
@@ -94,6 +95,7 @@ export function createLinkFormat( {
|
|
|
94
95
|
id,
|
|
95
96
|
opensInNewWindow,
|
|
96
97
|
nofollow,
|
|
98
|
+
cssClasses,
|
|
97
99
|
} ) {
|
|
98
100
|
const format = {
|
|
99
101
|
type: 'core/link',
|
|
@@ -122,6 +124,12 @@ export function createLinkFormat( {
|
|
|
122
124
|
: 'nofollow';
|
|
123
125
|
}
|
|
124
126
|
|
|
127
|
+
const trimmedCssClasses = cssClasses?.trim();
|
|
128
|
+
|
|
129
|
+
if ( trimmedCssClasses?.length ) {
|
|
130
|
+
format.attributes.class = trimmedCssClasses;
|
|
131
|
+
}
|
|
132
|
+
|
|
125
133
|
return format;
|
|
126
134
|
}
|
|
127
135
|
|
package/src/style.scss
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@
|
|
2
|
-
@
|
|
3
|
-
@
|
|
4
|
-
@
|
|
1
|
+
@use "./image/style.scss" as *;
|
|
2
|
+
@use "./link/style.scss" as *;
|
|
3
|
+
@use "./text-color/style.scss" as *;
|
|
4
|
+
@use "./language/style.scss" as *;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _bold = require("./bold");
|
|
8
|
-
var _italic = require("./italic");
|
|
9
|
-
var _link = require("./link");
|
|
10
|
-
var _strikethrough = require("./strikethrough");
|
|
11
|
-
var _textColor = require("./text-color");
|
|
12
|
-
/**
|
|
13
|
-
* Internal dependencies
|
|
14
|
-
*/
|
|
15
|
-
var _default = exports.default = [_bold.bold, _italic.italic, _link.link, _strikethrough.strikethrough, _textColor.textColor];
|
|
16
|
-
//# sourceMappingURL=default-formats.native.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_bold","require","_italic","_link","_strikethrough","_textColor","_default","exports","default","bold","italic","link","strikethrough","textColor"],"sources":["@wordpress/format-library/src/default-formats.native.js"],"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"],"mappings":";;;;;;AAGA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AAPA;AACA;AACA;AAFA,IAAAK,QAAA,GAAAC,OAAA,CAAAC,OAAA,GASe,CAAEC,UAAI,EAAEC,cAAM,EAAEC,UAAI,EAAEC,4BAAa,EAAEC,oBAAS,CAAE","ignoreList":[]}
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.link = void 0;
|
|
8
|
-
var _clipboard = _interopRequireDefault(require("@react-native-clipboard/clipboard"));
|
|
9
|
-
var _i18n = require("@wordpress/i18n");
|
|
10
|
-
var _element = require("@wordpress/element");
|
|
11
|
-
var _components = require("@wordpress/components");
|
|
12
|
-
var _blockEditor = require("@wordpress/block-editor");
|
|
13
|
-
var _richText = require("@wordpress/rich-text");
|
|
14
|
-
var _url = require("@wordpress/url");
|
|
15
|
-
var _icons = require("@wordpress/icons");
|
|
16
|
-
var _modal = _interopRequireDefault(require("./modal"));
|
|
17
|
-
var _utils = require("./utils");
|
|
18
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
19
|
-
/**
|
|
20
|
-
* External dependencies
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* WordPress dependencies
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Internal dependencies
|
|
29
|
-
*/
|
|
30
|
-
|
|
31
|
-
const name = 'core/link';
|
|
32
|
-
const link = exports.link = {
|
|
33
|
-
name,
|
|
34
|
-
title: (0, _i18n.__)('Link'),
|
|
35
|
-
tagName: 'a',
|
|
36
|
-
className: null,
|
|
37
|
-
attributes: {
|
|
38
|
-
url: 'href',
|
|
39
|
-
target: 'target',
|
|
40
|
-
rel: 'rel'
|
|
41
|
-
},
|
|
42
|
-
edit: (0, _components.withSpokenMessages)(class LinkEdit extends _element.Component {
|
|
43
|
-
constructor() {
|
|
44
|
-
super(...arguments);
|
|
45
|
-
this.addLink = this.addLink.bind(this);
|
|
46
|
-
this.stopAddingLink = this.stopAddingLink.bind(this);
|
|
47
|
-
this.onRemoveFormat = this.onRemoveFormat.bind(this);
|
|
48
|
-
this.getURLFromClipboard = this.getURLFromClipboard.bind(this);
|
|
49
|
-
this.state = {
|
|
50
|
-
addingLink: false
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
addLink() {
|
|
54
|
-
const {
|
|
55
|
-
value,
|
|
56
|
-
onChange
|
|
57
|
-
} = this.props;
|
|
58
|
-
const text = (0, _richText.getTextContent)((0, _richText.slice)(value));
|
|
59
|
-
if (text && (0, _url.isURL)(text) && (0, _utils.isValidHref)(text)) {
|
|
60
|
-
const newValue = (0, _richText.applyFormat)(value, {
|
|
61
|
-
type: name,
|
|
62
|
-
attributes: {
|
|
63
|
-
url: text
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
newValue.start = newValue.end;
|
|
67
|
-
newValue.activeFormats = [];
|
|
68
|
-
onChange({
|
|
69
|
-
...newValue,
|
|
70
|
-
needsSelectionUpdate: true
|
|
71
|
-
});
|
|
72
|
-
} else {
|
|
73
|
-
this.setState({
|
|
74
|
-
addingLink: true
|
|
75
|
-
});
|
|
76
|
-
this.getURLFromClipboard();
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
stopAddingLink() {
|
|
80
|
-
this.setState({
|
|
81
|
-
addingLink: false,
|
|
82
|
-
clipboardURL: undefined
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
getLinkSelection() {
|
|
86
|
-
const {
|
|
87
|
-
value,
|
|
88
|
-
isActive
|
|
89
|
-
} = this.props;
|
|
90
|
-
const startFormat = (0, _richText.getActiveFormat)(value, 'core/link');
|
|
91
|
-
|
|
92
|
-
// If the link isn't selected, get the link manually by looking around the cursor
|
|
93
|
-
// TODO: handle partly selected links.
|
|
94
|
-
if (startFormat && (0, _richText.isCollapsed)(value) && isActive) {
|
|
95
|
-
let startIndex = value.start;
|
|
96
|
-
let endIndex = value.end;
|
|
97
|
-
while (value.formats[startIndex]?.find(format => format?.type === startFormat.type)) {
|
|
98
|
-
startIndex--;
|
|
99
|
-
}
|
|
100
|
-
endIndex++;
|
|
101
|
-
while (value.formats[endIndex]?.find(format => format?.type === startFormat.type)) {
|
|
102
|
-
endIndex++;
|
|
103
|
-
}
|
|
104
|
-
return {
|
|
105
|
-
...value,
|
|
106
|
-
start: startIndex + 1,
|
|
107
|
-
end: endIndex
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
return value;
|
|
111
|
-
}
|
|
112
|
-
onRemoveFormat() {
|
|
113
|
-
const {
|
|
114
|
-
onChange,
|
|
115
|
-
speak,
|
|
116
|
-
value
|
|
117
|
-
} = this.props;
|
|
118
|
-
const startFormat = (0, _richText.getActiveFormat)(value, 'core/link');
|
|
119
|
-
|
|
120
|
-
// Before we try to remove anything we check if there is something at the caret position to remove.
|
|
121
|
-
if ((0, _richText.isCollapsed)(value) && startFormat === undefined) {
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
const linkSelection = this.getLinkSelection();
|
|
125
|
-
onChange((0, _richText.removeFormat)(linkSelection, name));
|
|
126
|
-
speak((0, _i18n.__)('Link removed.'), 'assertive');
|
|
127
|
-
}
|
|
128
|
-
async getURLFromClipboard() {
|
|
129
|
-
const clipboardText = await _clipboard.default.getString();
|
|
130
|
-
if (!clipboardText) {
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
// Check if pasted text is URL.
|
|
134
|
-
if (!(0, _url.isURL)(clipboardText)) {
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
this.setState({
|
|
138
|
-
clipboardURL: clipboardText
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
render() {
|
|
142
|
-
const {
|
|
143
|
-
isActive,
|
|
144
|
-
activeAttributes,
|
|
145
|
-
onChange
|
|
146
|
-
} = this.props;
|
|
147
|
-
const linkSelection = this.getLinkSelection();
|
|
148
|
-
// If no URL is set and we have a clipboard URL let's use it.
|
|
149
|
-
if (!activeAttributes.url && this.state.clipboardURL) {
|
|
150
|
-
activeAttributes.url = this.state.clipboardURL;
|
|
151
|
-
}
|
|
152
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
153
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_modal.default, {
|
|
154
|
-
isVisible: this.state.addingLink,
|
|
155
|
-
isActive: isActive,
|
|
156
|
-
activeAttributes: activeAttributes,
|
|
157
|
-
onClose: this.stopAddingLink,
|
|
158
|
-
onChange: onChange,
|
|
159
|
-
onRemove: this.onRemoveFormat,
|
|
160
|
-
value: linkSelection
|
|
161
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_blockEditor.RichTextToolbarButton, {
|
|
162
|
-
name: "link",
|
|
163
|
-
icon: _icons.link,
|
|
164
|
-
title: (0, _i18n.__)('Link'),
|
|
165
|
-
onClick: this.addLink,
|
|
166
|
-
isActive: isActive,
|
|
167
|
-
shortcutType: "primary",
|
|
168
|
-
shortcutCharacter: "k"
|
|
169
|
-
})]
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
})
|
|
173
|
-
};
|
|
174
|
-
//# sourceMappingURL=index.native.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_clipboard","_interopRequireDefault","require","_i18n","_element","_components","_blockEditor","_richText","_url","_icons","_modal","_utils","_jsxRuntime","name","link","exports","title","__","tagName","className","attributes","url","target","rel","edit","withSpokenMessages","LinkEdit","Component","constructor","arguments","addLink","bind","stopAddingLink","onRemoveFormat","getURLFromClipboard","state","addingLink","value","onChange","props","text","getTextContent","slice","isURL","isValidHref","newValue","applyFormat","type","start","end","activeFormats","needsSelectionUpdate","setState","clipboardURL","undefined","getLinkSelection","isActive","startFormat","getActiveFormat","isCollapsed","startIndex","endIndex","formats","find","format","speak","linkSelection","removeFormat","clipboardText","Clipboard","getString","render","activeAttributes","jsxs","Fragment","children","jsx","default","isVisible","onClose","onRemove","RichTextToolbarButton","icon","linkIcon","onClick","shortcutType","shortcutCharacter"],"sources":["@wordpress/format-library/src/link/index.native.js"],"sourcesContent":["/**\n * External dependencies\n */\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\trel: 'rel',\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 =\n\t\t\t\t\tthis.getURLFromClipboard.bind( this );\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 (\n\t\t\t\t\t\tvalue.formats[ startIndex ]?.find(\n\t\t\t\t\t\t\t( format ) => format?.type === startFormat.type\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\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 (\n\t\t\t\t\t\tvalue.formats[ endIndex ]?.find(\n\t\t\t\t\t\t\t( format ) => format?.type === startFormat.type\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\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"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.default = void 0;
|
|
8
|
-
var _reactNative = require("react-native");
|
|
9
|
-
var _native = require("@react-navigation/native");
|
|
10
|
-
var _element = require("@wordpress/element");
|
|
11
|
-
var _components = require("@wordpress/components");
|
|
12
|
-
var _screens = _interopRequireDefault(require("./screens"));
|
|
13
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
14
|
-
/**
|
|
15
|
-
* External dependencies
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* WordPress dependencies
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Internal dependencies
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
|
-
const LinkPickerScreen = () => {
|
|
27
|
-
const navigation = (0, _native.useNavigation)();
|
|
28
|
-
const route = (0, _native.useRoute)();
|
|
29
|
-
const navigateToLinkTimeoutRef = (0, _element.useRef)(null);
|
|
30
|
-
const navigateBackTimeoutRef = (0, _element.useRef)(null);
|
|
31
|
-
const onLinkPicked = ({
|
|
32
|
-
url,
|
|
33
|
-
title
|
|
34
|
-
}) => {
|
|
35
|
-
_reactNative.Keyboard.dismiss();
|
|
36
|
-
navigateToLinkTimeoutRef.current = setTimeout(() => {
|
|
37
|
-
navigation.navigate(_screens.default.settings, {
|
|
38
|
-
inputValue: url,
|
|
39
|
-
text: title
|
|
40
|
-
});
|
|
41
|
-
}, 100);
|
|
42
|
-
};
|
|
43
|
-
const onCancel = () => {
|
|
44
|
-
_reactNative.Keyboard.dismiss();
|
|
45
|
-
navigateBackTimeoutRef.current = setTimeout(() => {
|
|
46
|
-
navigation.goBack();
|
|
47
|
-
}, 100);
|
|
48
|
-
};
|
|
49
|
-
(0, _element.useEffect)(() => {
|
|
50
|
-
return () => {
|
|
51
|
-
clearTimeout(navigateToLinkTimeoutRef.current);
|
|
52
|
-
clearTimeout(navigateBackTimeoutRef.current);
|
|
53
|
-
};
|
|
54
|
-
}, []);
|
|
55
|
-
const {
|
|
56
|
-
inputValue
|
|
57
|
-
} = route.params;
|
|
58
|
-
return (0, _element.useMemo)(() => {
|
|
59
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.LinkPicker, {
|
|
60
|
-
value: inputValue,
|
|
61
|
-
onLinkPicked: onLinkPicked,
|
|
62
|
-
onCancel: onCancel
|
|
63
|
-
});
|
|
64
|
-
}, [inputValue]);
|
|
65
|
-
};
|
|
66
|
-
var _default = exports.default = LinkPickerScreen;
|
|
67
|
-
//# sourceMappingURL=link-picker-screen.native.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_native","_element","_components","_screens","_interopRequireDefault","_jsxRuntime","LinkPickerScreen","navigation","useNavigation","route","useRoute","navigateToLinkTimeoutRef","useRef","navigateBackTimeoutRef","onLinkPicked","url","title","Keyboard","dismiss","current","setTimeout","navigate","linkSettingsScreens","settings","inputValue","text","onCancel","goBack","useEffect","clearTimeout","params","useMemo","jsx","LinkPicker","value","_default","exports","default"],"sources":["@wordpress/format-library/src/link/modal-screens/link-picker-screen.native.js"],"sourcesContent":["/**\n * External dependencies\n */\nimport { Keyboard } from 'react-native';\nimport { useNavigation, useRoute } from '@react-navigation/native';\n\n/**\n * WordPress dependencies\n */\nimport { useEffect, useMemo, useRef } 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 navigateToLinkTimeoutRef = useRef( null );\n\tconst navigateBackTimeoutRef = useRef( null );\n\n\tconst onLinkPicked = ( { url, title } ) => {\n\t\tKeyboard.dismiss();\n\t\tnavigateToLinkTimeoutRef.current = setTimeout( () => {\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\tnavigateBackTimeoutRef.current = setTimeout( () => {\n\t\t\tnavigation.goBack();\n\t\t}, 100 );\n\t};\n\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tclearTimeout( navigateToLinkTimeoutRef.current );\n\t\t\tclearTimeout( navigateBackTimeoutRef.current );\n\t\t};\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"],"mappings":";;;;;;;AAGA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAKA,IAAAE,QAAA,GAAAF,OAAA;AAEA,IAAAG,WAAA,GAAAH,OAAA;AAKA,IAAAI,QAAA,GAAAC,sBAAA,CAAAL,OAAA;AAA4C,IAAAM,WAAA,GAAAN,OAAA;AAhB5C;AACA;AACA;;AAIA;AACA;AACA;;AAKA;AACA;AACA;;AAGA,MAAMO,gBAAgB,GAAGA,CAAA,KAAM;EAC9B,MAAMC,UAAU,GAAG,IAAAC,qBAAa,EAAC,CAAC;EAClC,MAAMC,KAAK,GAAG,IAAAC,gBAAQ,EAAC,CAAC;EACxB,MAAMC,wBAAwB,GAAG,IAAAC,eAAM,EAAE,IAAK,CAAC;EAC/C,MAAMC,sBAAsB,GAAG,IAAAD,eAAM,EAAE,IAAK,CAAC;EAE7C,MAAME,YAAY,GAAGA,CAAE;IAAEC,GAAG;IAAEC;EAAM,CAAC,KAAM;IAC1CC,qBAAQ,CAACC,OAAO,CAAC,CAAC;IAClBP,wBAAwB,CAACQ,OAAO,GAAGC,UAAU,CAAE,MAAM;MACpDb,UAAU,CAACc,QAAQ,CAAEC,gBAAmB,CAACC,QAAQ,EAAE;QAClDC,UAAU,EAAET,GAAG;QACfU,IAAI,EAAET;MACP,CAAE,CAAC;IACJ,CAAC,EAAE,GAAI,CAAC;EACT,CAAC;EAED,MAAMU,QAAQ,GAAGA,CAAA,KAAM;IACtBT,qBAAQ,CAACC,OAAO,CAAC,CAAC;IAClBL,sBAAsB,CAACM,OAAO,GAAGC,UAAU,CAAE,MAAM;MAClDb,UAAU,CAACoB,MAAM,CAAC,CAAC;IACpB,CAAC,EAAE,GAAI,CAAC;EACT,CAAC;EAED,IAAAC,kBAAS,EAAE,MAAM;IAChB,OAAO,MAAM;MACZC,YAAY,CAAElB,wBAAwB,CAACQ,OAAQ,CAAC;MAChDU,YAAY,CAAEhB,sBAAsB,CAACM,OAAQ,CAAC;IAC/C,CAAC;EACF,CAAC,EAAE,EAAG,CAAC;EAEP,MAAM;IAAEK;EAAW,CAAC,GAAGf,KAAK,CAACqB,MAAM;EACnC,OAAO,IAAAC,gBAAO,EAAE,MAAM;IACrB,oBACC,IAAA1B,WAAA,CAAA2B,GAAA,EAAC9B,WAAA,CAAA+B,UAAU;MACVC,KAAK,EAAGV,UAAY;MACpBV,YAAY,EAAGA,YAAc;MAC7BY,QAAQ,EAAGA;IAAU,CACrB,CAAC;EAEJ,CAAC,EAAE,CAAEF,UAAU,CAAG,CAAC;AACpB,CAAC;AAAC,IAAAW,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEa/B,gBAAgB","ignoreList":[]}
|