getWebRoot() . 'js/zeneditor/tiptap-component.esm.js'; $jsFile = 'https://zui-dist.oop.cc/zeneditor/tiptap-component.esm.js'; return '$.getLib("' . $jsFile . '", {type: "module", root: false}, () => {document.body.dataset.loadedEditor = true;});'; } protected function created() { $uid = $this->prop('uid'); if(!$uid) $this->setProp('uid', uniqid()); $this->setDefaultProps(array('uploadUrl' => helper::createLink('file', 'ajaxUpload', 'uid=' . $this->prop('uid')))); } protected function build(): wg { $editor = new h ( setTag('tiptap-editor'), setClass('form-control', 'p-0'), $this->prop('size') === 'full' ? setStyle('height', '100%') : setClass('h-auto'), ); $props = $this->props->pick(array('createInput', 'uploadUrl', 'placeholder', 'fullscreenable', 'resizable', 'exposeEditor', 'size', 'hideMenubar', 'bubbleMenu', 'menubarMode', 'collaborative', 'hocuspocus', 'docName', 'username', 'userColor')); foreach($props as $key => $value) { if($value === true || (is_string($value) && !empty($value))) $editor->add(set(uncamelize($key), $value)); } $customProps = $this->getRestProps(); if(!isset($customProps['id'])) $customProps['id'] = $customProps['name']; if(!isset($customProps['class'])) $customProps['class'] = 'w-full'; $editor->add(set($customProps)); $editor->add($this->prop('value')); $editor->add($this->children()); return div ( setClass('editor-container p-px'), $props['size'] === 'full' ? setStyle('height', '100%') : setClass('h-auto'), $editor, textarea ( $this->prop('value'), set::rows(1), set::size($props['size']) ), input ( set::name('uid'), set::value($this->prop('uid')), setClass('hidden') ) ); } }