PluginProbe ʕ •ᴥ•ʔ
VK Blocks / trunk
VK Blocks vtrunk
1.123.0 1.122.0 1.121.0 1.120.0 1.119.2 1.119.1 1.119.0 1.118.7 1.82.0.0 1.82.0.1 1.83.0.0 1.83.0.1 1.84.0.0 1.84.0.1 1.85.0.2 1.85.0.3 1.85.1.0 1.85.1.1 1.86.0.0 1.86.0.1 1.86.1.0 1.87.0.0 1.87.0.1 1.88.0.1 1.88.0.2 1.89.0.0 1.9.2 1.90.0.0 1.90.0.1 1.90.1.1 1.91.0.0 1.91.1.1 1.92.0.0 1.92.0.1 1.92.1.0 1.92.1.1 1.93.0.0 trunk 1.93.0.1 0.1.1 1.93.1.0 0.10.3 1.93.1.1 0.11.0 1.94.0.0 0.12.6 1.94.0.1 0.15.1 1.94.1.0 0.16.2 1.94.2.1 0.17.6 1.94.2.2 0.2.2 1.95.0.3 0.22.4 1.95.0.4 0.26.7 1.96.2.0 0.3.2 1.96.2.1 0.31.0 1.97.0.1 0.35.5 1.97.0.2 0.37.5 1.99.0.0 0.38.8 1.99.0.1 0.39.4 0.4.7 0.41.0 0.42.0 0.44.13 0.45.2 0.46.1 0.47.0 0.48.0 0.49.8 0.5.2 0.50.3 0.51.0 0.52.2 0.53.2 0.54.0 0.55.0 0.56.2 0.56.3 0.57.6 0.58.10 0.59.0 0.6.0 0.60.1 0.61.2 0.7.1 0.8.2 1.0.16 1.10.0 1.100.0.0 1.100.0.1 1.102.0.0 1.102.0.1 1.103.0.0 1.104.0.0 1.104.0.1 1.105.1.0 1.105.1.1 1.106.0.0 1.106.0.1 1.107.0.0 1.107.0.1 1.107.0.2 1.108.0.0 1.108.0.1 1.109.0.0 1.109.0.1 1.11.4 1.110.0.0 1.110.0.1 1.111.0.0 1.111.0.1 1.111.0.2 1.112.0.0 1.112.0.1 1.113.0.0 1.113.0.1 1.114.0.0 1.114.0.1 1.114.2.0 1.114.2.1 1.115.0.0 1.115.0.1 1.115.1.0 1.115.1.1 1.115.2.0 1.115.2.1 1.116.0.0 1.116.0.1 1.116.1.0 1.116.1.1 1.116.2.0 1.117.0.0 1.117.0.1 1.117.1.0 1.118.2 1.118.5 1.12.0 1.13.2 1.14.1 1.15.1 1.16.11 1.17.0 1.18.6 1.19.0 1.19.1 1.2.3 1.20.7 1.21.0 1.22.4 1.23.0 1.24.5 1.25.1 1.26.2 1.27.7.2 1.28.0.1 1.29.2.0 1.3.9 1.30.0.1 1.31.0.1 1.32.0.2 1.33.2.1 1.36.1.5 1.37.0.0 1.39.2.1 1.4.6 1.40.0.1 1.40.1.0 1.40.1.1 1.41.0.0 1.41.0.1 1.41.2.2 1.41.2.3 1.43.0.0 1.43.0.1 1.43.0.2 1.44.0.0 1.44.0.1 1.45.0.0 1.45.0.1 1.46.0.0 1.46.0.1 1.47.0.0 1.47.0.1 1.47.1.0 1.48.0.0 1.48.0.1 1.48.0.2 1.48.1.0 1.48.1.1 1.5.0 1.50.0.0 1.50.0.1 1.51.0.0 1.51.0.1 1.52.0.0 1.52.0.1 1.53.0.0 1.53.0.1 1.54.0.0 1.54.0.1 1.55.0.0 1.55.0.1 1.56.0.0 1.56.0.1 1.57.0.0 1.57.0.2 1.57.0.3 1.57.0.4 1.57.0.5 1.57.1.0 1.57.1.1 1.57.1.2 1.58.0.0 1.58.0.1 1.59.0.0 1.59.0.1 1.6.0 1.60.0.0 1.60.0.1 1.63.0.0 1.63.0.1 1.64.0.0 1.64.0.1 1.64.1.0 1.64.1.2 1.67.0.0 1.67.0.1 1.68.0.0 1.68.0.1 1.69.0.0 1.69.0.1 1.69.1.1 1.69.1.2 1.7.1 1.70.0.0 1.70.0.1 1.71.0.0 1.71.0.1 1.72.0.0 1.72.1.0 1.72.1.1 1.73.0.0 1.73.0.1 1.74.0.0 1.74.0.1 1.75.0.0 1.75.1.0 1.75.1.1 1.76.0.0 1.76.0.1 1.76.1.0 1.76.1.1 1.76.2.0 1.76.2.1 1.77.0.0 1.77.0.1 1.78.0.0 1.78.0.1 1.79.0.0 1.79.0.1 1.79.0.2 1.79.0.3 1.79.1.0 1.79.1.1 1.8.2 1.80.1.0 1.80.1.1 1.80.1.2 1.81.0.1 1.81.0.2
vk-blocks / src / blocks / balloon / edit.js
vk-blocks / src / blocks / balloon Last commit date
deprecated 2 months ago block.json 1 month ago edit.js 2 weeks ago icon.svg 2 months ago index.js 2 months ago index.php 2 months ago save.js 2 weeks ago style.scss 1 month ago
edit.js
639 lines
1 import {
2 RichText,
3 InspectorControls,
4 MediaUpload,
5 InnerBlocks,
6 useBlockProps,
7 } from '@wordpress/block-editor';
8 import {
9 __experimentalToggleGroupControl as ToggleGroupControl,
10 __experimentalToggleGroupControlOption as ToggleGroupControlOption,
11 PanelBody,
12 Button,
13 SelectControl,
14 BaseControl,
15 ToggleControl,
16 } from '@wordpress/components';
17 import { __ } from '@wordpress/i18n';
18
19 /**
20 * Internal dependencies
21 */
22 import { isHexColor } from '@vkblocks/utils/is-hex-color';
23 import { AdvancedColorPalette } from '@vkblocks/components/advanced-color-palette';
24 import { sanitizeSlug } from '@vkblocks/utils/sanitizeSlug';
25 /*globals vk_blocks_params */
26
27 const defaultAvatar =
28 typeof img_path !== 'undefined' && !!img_path.full_path // eslint-disable-line no-undef
29 ? img_path.full_path // eslint-disable-line no-undef
30 : '';
31
32 export default function BalloonEdit(props) {
33 const { attributes, setAttributes } = props;
34 const {
35 content,
36 balloonName,
37 balloonType,
38 balloonBorder,
39 balloonFullWidth,
40 balloonIconDisplay,
41 balloonImageBorder,
42 balloonBorderColor,
43 balloonBgColor,
44 balloonAlign,
45 IconImage,
46 balloonImageType,
47 balloonAnimation,
48 } = attributes;
49
50 const blockMeta = vk_blocks_params.balloon_meta_lists;
51 let defautIconButtons;
52 if (blockMeta) {
53 defautIconButtons = Object.keys(blockMeta).map((index) => {
54 const defaultIcon = blockMeta[index];
55
56 let contentIcon = '';
57
58 if (defaultIcon.src) {
59 contentIcon = (
60 <div key={index}>
61 <Button
62 onClick={() => {
63 setAttributes({
64 IconImage: defaultIcon.src,
65 });
66 setAttributes({
67 balloonName: defaultIcon.name,
68 });
69 }}
70 className={'button button-large components-button'}
71 >
72 <img
73 className={'icon-image'}
74 src={defaultIcon.src}
75 alt={defaultIcon.name}
76 />
77 </Button>
78 </div>
79 );
80 }
81 return contentIcon;
82 });
83 }
84
85 if ('type-serif' === balloonType) {
86 setAttributes({ balloonType: 'type-speech' });
87 }
88
89 if (balloonImageType === null || balloonImageType === undefined) {
90 setAttributes({ balloonImageType: 'normal' });
91 }
92
93 if (balloonAnimation === null || balloonAnimation === undefined) {
94 setAttributes({ balloonAnimation: 'none' });
95 }
96
97 if (balloonBorder === null || balloonBorder === undefined) {
98 setAttributes({ balloonBorder: false });
99 }
100
101 if (balloonImageBorder === null || balloonImageBorder === undefined) {
102 setAttributes({ balloonImageBorder: false });
103 }
104
105 let BorderSetting;
106 let contentBorderClass = '';
107 let iconImageBorderClass = '';
108 let contentBackgroundClass = '';
109 let iconImageColorStyle = {};
110 let contentColorStyle = {};
111 let triangleBorderColorBeforeClass = '';
112 let triangleBorderColorAfterClass = '';
113 let triangleBorderColorBeforeStyle = {};
114 let triangleBorderColorAfterStyle = {};
115
116 // 後方互換 (カスタムカラー選択時 インラインcssをcontentとiconに分ける)
117 const colorStyle = {};
118 if (colorStyle) {
119 contentColorStyle = colorStyle;
120 iconImageColorStyle = colorStyle;
121 }
122 if ('background' in iconImageColorStyle) {
123 delete iconImageColorStyle.background;
124 }
125
126 //吹き出しに枠線を追加オン
127 if (balloonBorder === true) {
128 BorderSetting = (
129 <BaseControl>
130 <p className={'mb-1 block-prop-title'}>
131 {__('Border', 'vk-blocks')}{' '}
132 </p>
133 <ToggleControl
134 label={__('Add border to balloon', 'vk-blocks')}
135 checked={balloonBorder}
136 onChange={(checked) =>
137 setAttributes({ balloonBorder: checked })
138 }
139 />
140
141 <p className={'mb-1 block-prop-title'}>
142 {__('Image Border', 'vk-blocks')}
143 </p>
144 <ToggleControl
145 label={__('Add border to image', 'vk-blocks')}
146 className={'mb-1'}
147 checked={balloonImageBorder}
148 onChange={(checked) =>
149 setAttributes({ balloonImageBorder: checked })
150 }
151 />
152 <p>
153 {__(
154 '* You can change border width on Setting > VK Blocks',
155 'vk-blocks'
156 )}{' '}
157 </p>
158
159 <p className={'mb-1 block-prop-title'}>
160 {__('Border color of speech balloon', 'vk-blocks')}
161 </p>
162 <AdvancedColorPalette
163 enableAlpha={false}
164 schema={'balloonBorderColor'}
165 {...props}
166 />
167 </BaseControl>
168 );
169
170 contentBorderClass += 'vk_balloon_content-border-true';
171
172 if (balloonImageBorder === true) {
173 iconImageBorderClass += 'vk_balloon_icon_image-border-true';
174 } else {
175 iconImageBorderClass = '';
176 }
177
178 //iconImageBorderClass
179 //contentBorderClass
180 if (balloonBorderColor !== undefined) {
181 iconImageBorderClass += ` has-text-color`;
182 contentBorderClass += ` has-text-color`;
183 //カラーパレットの時
184 if (!isHexColor(balloonBorderColor)) {
185 iconImageBorderClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
186 contentBorderClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
187 }
188 }
189
190 //contentColorStyle
191 //iconImageColorStyle
192 //カスタム*パレット
193 if (isHexColor(balloonBorderColor) && !isHexColor(balloonBgColor)) {
194 contentColorStyle = {
195 borderColor: `${balloonBorderColor}`,
196 };
197 iconImageColorStyle = {
198 borderColor: `${balloonBorderColor}`,
199 };
200 //パレット*カスタム
201 } else if (
202 !isHexColor(balloonBorderColor) &&
203 isHexColor(balloonBgColor)
204 ) {
205 contentColorStyle = {
206 background: `${balloonBgColor}`,
207 };
208 //カスタム*カスタム
209 } else if (
210 isHexColor(balloonBorderColor) &&
211 isHexColor(balloonBgColor)
212 ) {
213 contentColorStyle = {
214 borderColor: `${balloonBorderColor}`,
215 background: `${balloonBgColor}`,
216 };
217 iconImageColorStyle = {
218 borderColor: `${balloonBorderColor}`,
219 };
220 }
221
222 // 吹き出しの�
223 �置 左
224 if (balloonAlign === 'position-left') {
225 // 吹き出しの矢印 Class
226 // カラーパレットの時
227 // 吹き出しの時
228 if ('type-speech' === balloonType) {
229 if (balloonBgColor !== undefined) {
230 triangleBorderColorBeforeClass += ` has-text-color`;
231 if (!isHexColor(balloonBgColor)) {
232 triangleBorderColorBeforeClass += ` has-${sanitizeSlug(balloonBgColor)}-color`;
233 }
234 }
235 if (balloonBorderColor !== undefined) {
236 triangleBorderColorAfterClass += ` has-text-color`;
237 if (!isHexColor(balloonBorderColor)) {
238 triangleBorderColorAfterClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
239 }
240 }
241 //もくもくの時
242 } else if ('type-think' === balloonType) {
243 if (balloonBorderColor !== undefined) {
244 triangleBorderColorBeforeClass += ` has-text-color`;
245 if (!isHexColor(balloonBorderColor)) {
246 triangleBorderColorBeforeClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
247 }
248 }
249 if (balloonBorderColor !== undefined) {
250 triangleBorderColorAfterClass += ` has-text-color`;
251 if (!isHexColor(balloonBorderColor)) {
252 triangleBorderColorAfterClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
253 }
254 }
255 }
256
257 //吹き出しの矢印 Style
258 //カスタムカラーの時
259 if (isHexColor(balloonBorderColor)) {
260 triangleBorderColorAfterStyle = {
261 borderColor: `transparent transparent transparent ${balloonBgColor}`,
262 };
263 }
264 if (isHexColor(balloonBgColor)) {
265 triangleBorderColorBeforeStyle = {
266 borderColor: `transparent ${balloonBgColor} transparent transparent`,
267 };
268 }
269
270 // 吹き出しの�
271 �置 右
272 } else if (balloonAlign === 'position-right') {
273 // 吹き出しの時
274 // カラーパレットの時
275 if ('type-speech' === balloonType) {
276 if (balloonBgColor !== undefined) {
277 triangleBorderColorBeforeClass += ` has-text-color`;
278 if (!isHexColor(balloonBgColor)) {
279 triangleBorderColorBeforeClass += ` has-${sanitizeSlug(balloonBgColor)}-color`;
280 }
281 }
282 if (balloonBorderColor !== undefined) {
283 triangleBorderColorAfterClass += ` has-text-color`;
284 if (!isHexColor(balloonBorderColor)) {
285 triangleBorderColorAfterClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
286 }
287 }
288 // もくもくの時
289 // カラーパレットの時
290 } else if ('type-think' === balloonType) {
291 if (balloonBorderColor !== undefined) {
292 triangleBorderColorBeforeClass += ` has-text-color`;
293 triangleBorderColorAfterClass += ` has-text-color`;
294 if (!isHexColor(balloonBorderColor)) {
295 triangleBorderColorBeforeClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
296 triangleBorderColorAfterClass += ` has-${sanitizeSlug(balloonBorderColor)}-color`;
297 }
298 }
299 }
300
301 //吹き出しの矢印 Style
302 //カスタムカラーの時
303 if (isHexColor(balloonBorderColor)) {
304 triangleBorderColorAfterStyle = {
305 borderColor: `transparent ${balloonBorderColor} transparent transparent`,
306 };
307 }
308 if (isHexColor(balloonBgColor)) {
309 triangleBorderColorBeforeStyle = {
310 borderColor: `transparent transparent transparent ${balloonBgColor}`,
311 };
312 }
313 }
314
315 //吹き出しに枠線を追加オフ
316 } else {
317 BorderSetting = (
318 <BaseControl>
319 <p className={'mb-1 block-prop-title'}>
320 {__('Border', 'vk-blocks')}
321 </p>
322 <ToggleControl
323 label={__('Add border to balloon', 'vk-blocks')}
324 checked={balloonBorder}
325 onChange={(checked) =>
326 setAttributes({ balloonBorder: checked })
327 }
328 />
329 </BaseControl>
330 );
331
332 iconImageBorderClass = '';
333
334 // 吹き出しの背景色 Style
335 if (balloonBgColor !== undefined) {
336 //カスタムカラーの時
337 if (isHexColor(balloonBgColor)) {
338 contentColorStyle = {
339 background: `${balloonBgColor}`,
340 };
341 }
342 }
343
344 if (balloonAlign === 'position-left') {
345 // 吹き出しの矢印 Class
346 // カラーパレットの時
347 // 吹き出しの時
348 if ('type-speech' === balloonType) {
349 if (balloonBgColor !== undefined) {
350 triangleBorderColorBeforeClass += ` has-text-color`;
351 if (!isHexColor(balloonBgColor)) {
352 triangleBorderColorBeforeClass += ` has-${sanitizeSlug(balloonBgColor)}-color`;
353 }
354 }
355 }
356
357 //吹き出しの矢印 Style
358 //カスタムカラーの時
359 if (isHexColor(balloonBorderColor)) {
360 triangleBorderColorAfterStyle = {
361 borderColor: `transparent transparent transparent ${balloonBgColor}`,
362 };
363 }
364 if (isHexColor(balloonBgColor)) {
365 triangleBorderColorBeforeStyle = {
366 borderColor: `transparent ${balloonBgColor} transparent transparent`,
367 };
368 }
369 } else if (balloonAlign === 'position-right') {
370 // 吹き出しの矢印 Class
371 // カラーパレットの時
372 // 吹き出しの時
373 if ('type-speech' === balloonType) {
374 if (balloonBgColor !== undefined) {
375 triangleBorderColorBeforeClass += ` has-text-color`;
376 if (!isHexColor(balloonBgColor)) {
377 triangleBorderColorBeforeClass += ` has-${sanitizeSlug(balloonBgColor)}-color`;
378 }
379 }
380 }
381
382 //吹き出しの矢印 Style
383 //カスタムカラーの時
384 if (isHexColor(balloonBgColor)) {
385 triangleBorderColorBeforeStyle = {
386 borderColor: `transparent transparent transparent ${balloonBgColor}`,
387 };
388 }
389 }
390 }
391
392 // 吹き出しの背景色 Class
393 if (balloonBgColor !== undefined) {
394 contentBackgroundClass += ` has-background-color`;
395 //カラーパレットの時
396 if (!isHexColor(balloonBgColor)) {
397 contentBackgroundClass += ` has-${sanitizeSlug(balloonBgColor)}-background-color`;
398 }
399 }
400
401 // 吹き出しの�
402 Class
403 if (!!balloonFullWidth) {
404 contentBorderClass += ` vk_balloon_content_fullwidth`;
405 }
406
407 const blockProps = useBlockProps({
408 className: `vk_balloon vk_balloon-${balloonAlign} vk_balloon-${balloonType} vk_balloon-animation-${balloonAnimation}`,
409 });
410
411 return (
412 <>
413 <InspectorControls>
414 <PanelBody title={__('Balloon setting', 'vk-blocks')}>
415 <p className={'mb-1 block-prop-title'}>
416 {__('Position', 'vk-blocks')}
417 </p>
418 <p className={'mb-1'}>
419 {__(
420 'Please specify the layout of the balloon.',
421 'vk-blocks'
422 )}{' '}
423 </p>
424 <ToggleGroupControl
425 value={balloonAlign}
426 onChange={(value) =>
427 setAttributes({ balloonAlign: value })
428 }
429 isBlock
430 >
431 <ToggleGroupControlOption
432 value="position-left"
433 label={__('Left', 'vk-blocks')}
434 />
435 <ToggleGroupControlOption
436 value="position-right"
437 label={__('Right', 'vk-blocks')}
438 />
439 </ToggleGroupControl>
440
441 <p className={'mb-1 block-prop-title'}>
442 {__('Type', 'vk-blocks')}
443 </p>
444 <p className={'mb-1'}>
445 {__(
446 'Please select the type of balloon.',
447 'vk-blocks'
448 )}{' '}
449 </p>
450 <ToggleGroupControl
451 value={balloonType}
452 onChange={(value) =>
453 setAttributes({ balloonType: value })
454 }
455 isBlock
456 >
457 <ToggleGroupControlOption
458 value="type-speech"
459 label={__('Speech', 'vk-blocks')}
460 />
461 <ToggleGroupControlOption
462 value="type-think"
463 label={__('Thinking', 'vk-blocks')}
464 />
465 </ToggleGroupControl>
466
467 <p className={'mb-1 block-prop-title'}>
468 {__('Image Style', 'vk-blocks')}
469 </p>
470 <ToggleGroupControl
471 value={balloonImageType}
472 onChange={(value) =>
473 setAttributes({ balloonImageType: value })
474 }
475 isBlock
476 >
477 <ToggleGroupControlOption
478 value="normal"
479 label={__('Normal', 'vk-blocks')}
480 />
481 <ToggleGroupControlOption
482 value="rounded"
483 label={__('Rounded', 'vk-blocks')}
484 />
485 <ToggleGroupControlOption
486 value="circle"
487 label={__('Circle', 'vk-blocks')}
488 />
489 </ToggleGroupControl>
490
491 <BaseControl>
492 <p className={'mb-1 block-prop-title'}>
493 {__('Width', 'vk-blocks')}
494 </p>
495 <ToggleControl
496 label={__('100%', 'vk-blocks')}
497 checked={balloonFullWidth}
498 onChange={(checked) =>
499 setAttributes({ balloonFullWidth: checked })
500 }
501 />
502 </BaseControl>
503
504 <BaseControl>
505 <p className={'mb-1 block-prop-title'}>icon display</p>
506 <ToggleControl
507 label={'display'}
508 checked={balloonIconDisplay}
509 onChange={(checked) =>
510 setAttributes({ balloonIconDisplay: checked })
511 }
512 />
513 </BaseControl>
514
515 {BorderSetting}
516
517 <p className={'mb-1 block-prop-title'}>
518 {__('Background color of speech balloon', 'vk-blocks')}
519 </p>
520 <AdvancedColorPalette
521 enableAlpha={false}
522 schema={'balloonBgColor'}
523 {...props}
524 />
525 </PanelBody>
526 <PanelBody title={__('Default Icon Setting', 'vk-blocks')}>
527 <div className="icon-image-list mb-2">
528 {defautIconButtons}
529 </div>
530 <div>
531 {__(
532 'You can register default icons from Settings > VK Blocks in Admin.',
533 'vk-blocks'
534 )}
535 </div>
536 </PanelBody>
537 <PanelBody title={__('Animation setting', 'vk-blocks')}>
538 <p className={'mb-1'}>
539 {__(
540 'Please select the type of animation.',
541 'vk-blocks'
542 )}{' '}
543 </p>
544 <SelectControl
545 value={balloonAnimation}
546 onChange={(value) =>
547 setAttributes({ balloonAnimation: value })
548 }
549 options={[
550 {
551 value: 'none',
552 label: __('None', 'vk-blocks'),
553 },
554 {
555 value: 'trembling',
556 label: __('Trembling', 'vk-blocks'),
557 },
558 {
559 value: 'trembling-x',
560 label: __('Trembling X', 'vk-blocks'),
561 },
562 {
563 value: 'pounding',
564 label: __('Pounding', 'vk-blocks'),
565 },
566 {
567 value: 'shaking',
568 label: __('Shaking', 'vk-blocks'),
569 },
570 ]}
571 />
572 </PanelBody>
573 </InspectorControls>
574 <div {...blockProps}>
575 {balloonIconDisplay ||
576 (balloonIconDisplay === 'undefined' && IconImage) ? (
577 <div className={`vk_balloon_icon`}>
578 <MediaUpload
579 onSelect={(value) =>
580 setAttributes({
581 IconImage: value.sizes.full.url,
582 })
583 }
584 type="image"
585 className={`vk_balloon_icon_image vk_balloon_icon_image-type-${balloonImageType} ${iconImageBorderClass}`}
586 value={IconImage}
587 render={({ open }) => (
588 <Button onClick={open} className="image-button">
589 <img
590 className={`vk_balloon_icon_image vk_balloon_icon_image-type-${balloonImageType} ${iconImageBorderClass}`}
591 style={iconImageColorStyle}
592 src={
593 IconImage
594 ? IconImage
595 : defaultAvatar
596 }
597 alt={__('Upload image', 'vk-blocks')}
598 />
599 </Button>
600 )}
601 />
602 <RichText
603 tagName="figcaption"
604 className={'vk_balloon_icon_name'}
605 onChange={(value) =>
606 setAttributes({ balloonName: value })
607 }
608 value={balloonName}
609 placeholder={__('Icon Name', 'vk-blocks')}
610 />
611 </div>
612 ) : (
613 ''
614 )}
615
616 <div className={`vk_balloon_content_outer`}>
617 <div
618 className={`vk_balloon_content ${contentBackgroundClass} ${contentBorderClass}`}
619 style={contentColorStyle}
620 >
621 <span
622 className={`vk_balloon_content_before ${triangleBorderColorBeforeClass}`}
623 style={triangleBorderColorBeforeStyle}
624 ></span>
625 <span
626 className={`vk_balloon_content_after ${triangleBorderColorAfterClass}`}
627 style={triangleBorderColorAfterStyle}
628 ></span>
629 <InnerBlocks
630 templateLock={false}
631 template={[['core/paragraph', { content }]]}
632 />
633 </div>
634 </div>
635 </div>
636 </>
637 );
638 }
639