/* * External dependencies */ import { speakToneIcon } from '@automattic/jetpack-ai-client'; import { useAnalytics } from '@automattic/jetpack-shared-extension-utils'; import { MenuItem, MenuGroup, ToolbarDropdownMenu, DropdownMenu, Icon, Button, Tooltip, } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; import { chevronRight } from '@wordpress/icons'; import React from 'react'; /** * Internal dependencies */ import './style.scss'; const PROMPT_TONES_LIST = [ 'formal', 'informal', 'optimistic', 'humorous', 'serious', 'skeptical', 'empathetic', 'confident', 'passionate', 'provocative', ] as const; export const DEFAULT_PROMPT_TONE = 'formal'; export const TONE_LABEL = __( 'Change tone', 'jetpack' ); export const PROMPT_TONES_MAP = { formal: { label: __( 'Formal', 'jetpack' ), emoji: '๐ŸŽฉ', }, informal: { label: __( 'Informal', 'jetpack' ), emoji: '๐Ÿ˜Š', }, optimistic: { label: __( 'Optimistic', 'jetpack' ), emoji: '๐Ÿ˜ƒ', }, humorous: { label: __( 'Humorous', 'jetpack' ), emoji: '๐Ÿ˜‚', }, serious: { label: __( 'Serious', 'jetpack' ), emoji: '๐Ÿ˜', }, skeptical: { label: __( 'Skeptical', 'jetpack' ), emoji: '๐Ÿคจ', }, empathetic: { label: __( 'Empathetic', 'jetpack' ), emoji: '๐Ÿ’—', }, confident: { label: __( 'Confident', 'jetpack' ), emoji: '๐Ÿ˜Ž', }, passionate: { label: __( 'Passionate', 'jetpack' ), emoji: 'โค๏ธ', }, provocative: { label: __( 'Provocative', 'jetpack' ), emoji: '๐Ÿ”ฅ', }, }; export type ToneProp = ( typeof PROMPT_TONES_LIST )[ number ]; type ToneToolbarDropdownMenuProps = { value?: ToneProp; onChange: ( value: ToneProp ) => void; label?: string; disabled?: boolean; }; const ToneMenuGroup = ( { value, onChange }: ToneToolbarDropdownMenuProps ) => ( { PROMPT_TONES_LIST.map( tone => { return ( onChange( tone ) } isSelected={ value === tone } > { `${ PROMPT_TONES_MAP[ tone ].emoji } ${ PROMPT_TONES_MAP[ tone ].label }` } ); } ) } ); export function ToneDropdownMenu( { label = TONE_LABEL, value = DEFAULT_PROMPT_TONE, onChange, disabled = false, }: ToneToolbarDropdownMenuProps ) { return (
{ label }
), disabled, } } > { ( { onClose } ) => ( { onChange( newTone ); onClose(); } } /> ) }
); } export default function ToneToolbarDropdownMenu( { value = DEFAULT_PROMPT_TONE, onChange, disabled = false, }: ToneToolbarDropdownMenuProps ) { const { tracks } = useAnalytics(); const toggleHandler = isOpen => { if ( isOpen ) { tracks.recordEvent( 'jetpack_ai_assistant_block_toolbar_menu_show', { tool: 'tone' } ); } }; return disabled ? ( ) : ( { () => } ); }