dsql-admin/dsql-app/.local_dist/server/chunks/2378.js
2024-11-05 12:12:42 +01:00

1495 lines
70 KiB
JavaScript

"use strict";
exports.id = 2378;
exports.ids = [2378];
exports.modules = {
/***/ 2378:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
// EXPORTS
__webpack_require__.d(__webpack_exports__, {
"Z": () => (/* binding */ CreatePageContent)
});
// EXTERNAL MODULE: external "react/jsx-runtime"
var jsx_runtime_ = __webpack_require__(997);
// EXTERNAL MODULE: external "react"
var external_react_ = __webpack_require__(6689);
var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
// EXTERNAL MODULE: ./components/form/FormInput.jsx + 2 modules
var FormInput = __webpack_require__(7901);
// EXTERNAL MODULE: ./components/general/LoadingBlock.jsx
var LoadingBlock = __webpack_require__(5264);
// EXTERNAL MODULE: external "@tinymce/tinymce-react"
var tinymce_react_ = __webpack_require__(6451);
// EXTERNAL MODULE: ./components/general/ui/ButtonGroup.jsx
var ButtonGroup = __webpack_require__(5449);
// EXTERNAL MODULE: external "@mui/icons-material/ViewTimelineTwoTone"
var ViewTimelineTwoTone_ = __webpack_require__(5139);
var ViewTimelineTwoTone_default = /*#__PURE__*/__webpack_require__.n(ViewTimelineTwoTone_);
// EXTERNAL MODULE: external "@mui/icons-material/StyleTwoTone"
var StyleTwoTone_ = __webpack_require__(723);
var StyleTwoTone_default = /*#__PURE__*/__webpack_require__.n(StyleTwoTone_);
// EXTERNAL MODULE: external "@mui/icons-material/DifferenceTwoTone"
var DifferenceTwoTone_ = __webpack_require__(930);
var DifferenceTwoTone_default = /*#__PURE__*/__webpack_require__.n(DifferenceTwoTone_);
// EXTERNAL MODULE: external "@mui/icons-material/Close"
var Close_ = __webpack_require__(4173);
var Close_default = /*#__PURE__*/__webpack_require__.n(Close_);
// EXTERNAL MODULE: external "@mui/material"
var material_ = __webpack_require__(5692);
;// CONCATENATED MODULE: ./components/su/components/RichText/ElementStyleModalContent.jsx
// @ts-check
/**
* ==============================================================================
* Imports
* ==============================================================================
*/
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/**
* ==============================================================================
* Main Component { Functional }
* ==============================================================================
* @param {object} props - Server props
* @param {HTMLElement|null} props.targetElement
* @param {React.Dispatch<React.SetStateAction<boolean>>} props.setOpenStyleModal
*/ function ElementStyleModalContent({ targetElement , setOpenStyleModal , }) {
/**
* Get Contexts
*
* @abstract { React.useContext }
*/ ////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
/**
* Javascript Variables
*
* @abstract Non hook variables and functions
*/ if (!targetElement) {
return null;
}
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
/**
* React Hooks
*
* @abstract { useState, useEffect, useRef, etc ... }
*/ ////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
/**
* Function Return
*
* @description Main Function Return
*/ return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
className: "flex flex-col items-stretch p-6 max-w-lg",
children: [
/*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
className: "w-full justify-between",
children: [
/*#__PURE__*/ jsx_runtime_.jsx("span", {
className: "text-xl",
children: "Element Style"
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
className: "w-10 h-10 plain-text",
onClick: ()=>{
setOpenStyleModal(false);
},
children: /*#__PURE__*/ jsx_runtime_.jsx((Close_default()), {})
})
]
}),
/*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
className: "items-stretch p-2 bg-slate-100 rounded add-css-block",
children: [
/*#__PURE__*/ jsx_runtime_.jsx("input", {
type: "text",
placeholder: "CSS key"
}),
/*#__PURE__*/ jsx_runtime_.jsx("input", {
type: "text",
placeholder: "CSS Value",
onKeyDownCapture: (e)=>{
/** @type {HTMLInputElement} */ // @ts-ignore
const inputEl = e.target;
if (e.key?.match(/enter/i)) {
const firstChild = inputEl.closest(".add-css-block")?.children[0];
const secondChild = inputEl.closest(".add-css-block")?.children[1];
// @ts-ignore
const key = firstChild?.value;
// @ts-ignore
const value = secondChild?.value;
if (!key?.match(/./) || !value?.match(/./)) return;
targetElement.style[key] = value;
}
}
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
onClick: (e)=>{
/** @type {HTMLButtonElement} */ // @ts-ignore
const buttonEl = e.target;
const firstChild = buttonEl.closest(".add-css-block")?.children[0];
const secondChild = buttonEl.closest(".add-css-block")?.children[1];
// @ts-ignore
const key = firstChild?.value;
// @ts-ignore
const value = secondChild?.value;
if (!key?.match(/./) || !value?.match(/./)) return;
targetElement.style[key] = value;
},
children: "Add"
})
]
}),
/*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
className: "flex-wrap",
children: [
/*#__PURE__*/ jsx_runtime_.jsx("button", {
onClick: (e)=>{
const active = targetElement.removeAttribute("style");
},
className: "secondary grow",
children: "Reset"
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
onClick: (e)=>{
targetElement.style.display = "flex";
targetElement.style.alignItems = "center";
targetElement.style.gap = "10px";
},
className: "outlined black grow",
children: "Flex"
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
onClick: (e)=>{
targetElement.style.backgroundColor = "rgb(241 245 249)";
},
className: "outlined black grow",
children: "BG-Slate-100"
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
onClick: (e)=>{
targetElement.style.backgroundColor = "#F6F4F8";
},
className: "outlined black grow",
children: "BG-Main-light"
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
onClick: (e)=>{
targetElement.style.padding = "10px";
},
className: "outlined black grow",
children: "Padding-10px"
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
onClick: (e)=>{
targetElement.style.padding = "10px 20px";
},
className: "outlined black grow",
children: "Padding-10px-20px"
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
onClick: (e)=>{
targetElement.style.borderRadius = "5px";
},
className: "outlined black grow",
children: "Border-Radius-5px"
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
onClick: (e)=>{
targetElement.style.border = "1px solid rgb(241 245 249)";
},
className: "outlined black grow",
children: "Border-Slate-100"
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
onClick: (e)=>{
targetElement.style.border = "1px solid rgb(226 232 240)";
},
className: "outlined black grow",
children: "Border-Slate-200"
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
onClick: (e)=>{
targetElement.style.border = "1px solid rgb(203 213 225)";
},
className: "outlined black grow",
children: "Border-Slate-300"
})
]
}),
/*#__PURE__*/ jsx_runtime_.jsx("span", {
className: "font-semibold text-xl mt-4",
children: "Add class Name"
}),
/*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
className: "items-stretch p-2 bg-slate-100 rounded add-class-name-block",
children: [
/*#__PURE__*/ jsx_runtime_.jsx("input", {
type: "text",
placeholder: "Class Name",
onKeyDownCapture: (e)=>{
/** @type {HTMLInputElement} */ // @ts-ignore
const inputEl = e.target;
const firstChild = inputEl.closest(".add-class-name-block")?.children[0];
if (e.key?.match(/enter/i)) {
// @ts-ignore
const className = firstChild?.value;
if (!className?.match(/./)) return;
targetElement.classList.add(className);
}
}
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
onClick: (e)=>{
/** @type {HTMLButtonElement} */ // @ts-ignore
const buttonEl = e.target;
const firstChild = buttonEl.closest(".add-class-name-block")?.children[0];
// @ts-ignore
const className = firstChild?.value;
if (!className?.match(/./)) return;
targetElement.classList.add(className);
},
children: "Add"
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
onClick: (e)=>{
/** @type {HTMLButtonElement} */ // @ts-ignore
const buttonEl = e.target;
const firstChild = buttonEl.closest(".add-class-name-block")?.children[0];
// @ts-ignore
const className = firstChild?.value;
if (!className?.match(/./)) return;
targetElement.classList.remove(className);
},
className: "outlined",
children: "Remove"
})
]
}),
targetElement?.nodeName?.match(/^a$/i) ? /*#__PURE__*/ (0,jsx_runtime_.jsxs)((external_react_default()).Fragment, {
children: [
/*#__PURE__*/ jsx_runtime_.jsx("span", {
className: "font-semibold text-xl mt-4",
children: "Add URL"
}),
/*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
className: "items-stretch p-2 bg-slate-100 rounded href-block",
children: [
/*#__PURE__*/ jsx_runtime_.jsx("input", {
type: "text",
placeholder: "Class Name",
onKeyDownCapture: (e)=>{
/** @type {HTMLInputElement} */ // @ts-ignore
const inputEl = e.target;
const firstChild = inputEl.closest(".href-block")?.children[0];
if (e.key?.match(/enter/i)) {
// @ts-ignore
const url = firstChild?.value;
if (!url?.match(/./)) return;
// @ts-ignore
targetElement.href = url;
}
},
// @ts-ignore
defaultValue: targetElement?.href
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
onClick: (e)=>{
/** @type {HTMLInputElement} */ // @ts-ignore
const buttonEl = e.target;
const firstChild = buttonEl.closest(".href-block")?.children[0];
// @ts-ignore
const url = firstChild?.value;
if (!url?.match(/./)) return;
// @ts-ignore
targetElement.href = url;
},
children: "Add"
})
]
})
]
}) : /*#__PURE__*/ jsx_runtime_.jsx((external_react_default()).Fragment, {})
]
});
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
} //////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
;// CONCATENATED MODULE: ./components/su/components/RichText/fns.js
// @ts-check
/**
* Imports: Handle imports
*/ /**
* Duplicate Node Function
* ==============================================================================
* @description Description
*
* @param {object} params - An object containing the function parameters.
* @param {import("tinymce").Editor} params.editor
* @param {HTMLElement|null} params.targetElement
* @param {React.Dispatch<React.SetStateAction<HTMLElement | Node>>} params.setTargetElement
*/ function duplicateNode({ editor , targetElement , setTargetElement }) {
/**
* Initialize variables
*/ const editorWindow = editor.getWin();
// const currentSelectionTextNode = editorWindow.getSelection();
// const currentSelectionTextNode = targetElement;
if (!targetElement) return;
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
/**
* Handle function logic
*/ // const TARGET_ELEMENT = currentSelectionTextNode.anchorNode.parentElement;
// const TARGET_ELEMENT = targetElement;
/** @type {HTMLElement} */ // @ts-ignore
const newNode = targetElement.cloneNode(true);
if (newNode.nodeName.match(/html|document|body/i)) return;
targetElement.insertAdjacentElement("afterend", newNode);
targetElement.classList.remove("target-node");
setTargetElement(newNode);
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/**
* Duplicate Node Function
* ==============================================================================
* @description Description
*
* @param {object} params - An object containing the function parameters.
* @param {import("tinymce").Editor} params.editor
* @param {HTMLElement|null} params.targetElement
* @param {React.Dispatch<React.SetStateAction<HTMLElement | Node>>} params.setTargetElement
*/ function selectParent({ editor , targetElement , setTargetElement }) {
/**
* Initialize variables
*/ const editorWindow = editor.getWin();
// const currentNode = editorWindow.getSelection()?.anchorNode.parentElement;
const currentNode = targetElement;
if (!currentNode) return;
if (currentNode.nodeName.match(/html|document|body/i)) {
return;
}
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
/**
* Handle function logic
*/ /** @type {HTMLElement | null} */ // @ts-ignore
let parentNode = currentNode.parentElement;
if (!parentNode) {
setTargetElement(currentNode);
targetNode({
editor: editor,
node: currentNode,
setTargetElement
});
}
if (parentNode?.nodeName.match(/html|document|body/i)) {
setTargetElement(currentNode);
targetNode({
editor: editor,
node: currentNode,
setTargetElement
});
} else if (parentNode) {
setTargetElement(parentNode);
targetNode({
editor: editor,
node: parentNode,
setTargetElement
});
}
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/**
* Duplicate Node Function
* ==============================================================================
* @description Description
*
* @param {object} params - An object containing the function parameters.
* @param {import("tinymce").Editor} params.editor
* @param {HTMLElement|null} params.targetElement
* @param {React.Dispatch<React.SetStateAction<HTMLElement | Node>>} params.setTargetElement
*/ function selectChild({ editor , targetElement , setTargetElement }) {
/**
* Initialize variables
*/ const editorWindow = editor.getWin();
// const currentNode = editorWindow.getSelection()?.anchorNode.parentElement;
const currentNode = targetElement;
if (!currentNode) return;
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
/**
* Handle function logic
*/ /** @type {HTMLElement | null} */ // @ts-ignore
const childNode = currentNode.children[0];
if (!childNode) {
setTargetElement(currentNode);
targetNode({
editor: editor,
node: currentNode,
setTargetElement
});
} else {
setTargetElement(childNode);
targetNode({
editor: editor,
node: childNode,
setTargetElement
});
}
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/**
* Duplicate Node Function
* ==============================================================================
* @description Description
*
* @param {object} params - An object containing the function parameters.
* @param {HTMLElement|null} params.targetElement
* @param {boolean} [params.back]
*/ function moveElement({ targetElement , back }) {
/**
* Initialize variables
*/ if (!targetElement) return;
const next = targetElement.nextElementSibling;
const prev = targetElement.previousElementSibling;
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
/**
* Handle function logic
*/ if (!back && next) {
next.after(targetElement);
} else if (back && prev) {
prev.before(targetElement);
}
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/**
* Duplicate Node Function
* ==============================================================================
* @description Description
*
* @param {object} params - An object containing the function parameters.
* @param {import("tinymce").Editor} params.editor
* @param {HTMLElement|null} params.targetElement
* @param {React.Dispatch<React.SetStateAction<HTMLElement | Node>>} params.setTargetElement
*/ function selectNext({ editor , targetElement , setTargetElement }) {
/**
* Initialize variables
*/ const currentNode = targetElement;
if (!currentNode) return;
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
/**
* Handle function logic
*/ /** @type {HTMLElement | null} */ // @ts-ignore
const nextNode = currentNode.nextElementSibling;
if (!nextNode) {
setTargetElement(currentNode);
targetNode({
editor: editor,
node: currentNode,
setTargetElement
});
} else {
setTargetElement(nextNode);
targetNode({
editor: editor,
node: nextNode,
setTargetElement
});
}
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/**
* Duplicate Node Function
* ==============================================================================
* @description Description
*
* @param {object} params - An object containing the function parameters.
* @param {import("tinymce").Editor} params.editor
* @param {HTMLElement|null} params.targetElement
* @param {React.Dispatch<React.SetStateAction<HTMLElement | Node>>} params.setTargetElement
*/ function selectPrevious({ editor , targetElement , setTargetElement }) {
/**
* Initialize variables
*/ const currentNode = targetElement;
if (!currentNode) return;
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
/**
* Handle function logic
*/ /** @type {HTMLElement | null} */ // @ts-ignore
const previousNode = currentNode.previousElementSibling;
if (!previousNode) {
setTargetElement(currentNode);
targetNode({
editor: editor,
node: currentNode,
setTargetElement
});
} else {
setTargetElement(previousNode);
targetNode({
editor: editor,
node: previousNode,
setTargetElement
});
}
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/**
* Duplicate Node Function
* ==============================================================================
* @description Description
*
* @param {object} params - An object containing the function parameters.
* @param {import("tinymce").Editor} params.editor
* @param {HTMLElement|null} [params.node]
* @param {React.Dispatch<React.SetStateAction<HTMLElement | Node>>} [params.setTargetElement]
*/ function targetNode({ editor , node , setTargetElement }) {
/**
* Initialize variables
*/ const editorDocument = editor.getDoc();
editorDocument.querySelectorAll(".target-node").forEach((elt)=>{
elt.classList.remove("target-node");
});
const editorWindow = editor.getWin();
const currentNode = editorWindow.getSelection()?.anchorNode?.parentElement;
const targetElement = node ? node : currentNode ? currentNode : null;
if (!targetElement) return;
targetElement?.classList?.add("target-node");
if (setTargetElement) setTargetElement(targetElement);
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
}
// EXTERNAL MODULE: external "@mui/icons-material/HighlightAltTwoTone"
var HighlightAltTwoTone_ = __webpack_require__(328);
var HighlightAltTwoTone_default = /*#__PURE__*/__webpack_require__.n(HighlightAltTwoTone_);
// EXTERNAL MODULE: external "@mui/icons-material/AdsClickTwoTone"
var AdsClickTwoTone_ = __webpack_require__(371);
var AdsClickTwoTone_default = /*#__PURE__*/__webpack_require__.n(AdsClickTwoTone_);
// EXTERNAL MODULE: external "@mui/icons-material/DoDisturbAltTwoTone"
var DoDisturbAltTwoTone_ = __webpack_require__(9361);
var DoDisturbAltTwoTone_default = /*#__PURE__*/__webpack_require__.n(DoDisturbAltTwoTone_);
// EXTERNAL MODULE: ./functions/frontend/fetchApi.js
var fetchApi = __webpack_require__(6729);
;// CONCATENATED MODULE: ./components/su/components/RichText/HTMLSnippetsModalContent.jsx
// @ts-check
/**
* ==============================================================================
* Imports
* ==============================================================================
*/
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/**
* ==============================================================================
* Main Component { Functional }
* ==============================================================================
* @param {object} props - Server props
* @param {HTMLElement?} props.targetElement
* @param {React.Dispatch<React.SetStateAction<HTMLElement | Node>>} props.setTargetElement
* @param {import("tinymce").Editor} props.editor
* @param {React.Dispatch<React.SetStateAction<boolean>>} props.setOpenSnippetsModal
*/ function HTMLSnippetsModalContent({ targetElement , setTargetElement , editor , setOpenSnippetsModal , }) {
/**
* Get Contexts
*
* @abstract { React.useContext }
*/ ////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
/**
* Javascript Variables
*
* @abstract Non hook variables and functions
*/ ////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
/**
* React Hooks
*
* @abstract { useState, useEffect, useRef, etc ... }
*/ const [loading, setLoading] = external_react_default().useState(true);
const [snippets, setSnippets] = external_react_default().useState([]);
external_react_default().useEffect(()=>{
(0,fetchApi/* default */.Z)("/api/admin/docs/get-snippets", {
method: "post",
body: {}
}).then((res)=>{
if (res.success) {
setSnippets(res.result);
setLoading(false);
}
});
}, []);
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
/**
* Function Return
*
* @description Main Function Return
*/ return /*#__PURE__*/ (0,jsx_runtime_.jsxs)(material_.Paper, {
className: "m-auto p-6 flex flex-col max-w-xl w-full max-h-[90vh] overflow-y-auto relative",
children: [
/*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
className: "w-full justify-between",
children: [
/*#__PURE__*/ jsx_runtime_.jsx("span", {
className: "text-xl",
children: "Snippets"
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
className: "w-10 h-10 plain-text",
onClick: ()=>{
setOpenSnippetsModal(false);
},
children: /*#__PURE__*/ jsx_runtime_.jsx((Close_default()), {})
})
]
}),
/*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
className: "flex-wrap relative w-full min-h-[100px] items-start",
children: [
loading && /*#__PURE__*/ jsx_runtime_.jsx(LoadingBlock/* default */.Z, {}),
snippets && Array.isArray(snippets) && snippets[0] && snippets.map((snippet, index)=>{
return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
className: "flex flex-col w-full items-start p-4 border border-slate-200 border-solid rounded cursor-pointer hover:shadow-lg transition-all hover:bg-slate-100",
onClick: (e)=>{
if (targetElement) {
// const parser = new DOMParser();
// const parsedNode = parser.parseFromString(Object.values(snippet)[0], "text/html");
// const newElement = parsedNode.body.firstChild
const newElement = document.createElement("div");
newElement.innerHTML = Object.values(snippet)[0];
/** @type {any} */ const targetNewElement = newElement.firstChild;
if (targetNewElement) {
targetElement.appendChild(targetNewElement);
targetNode({
editor: editor,
node: targetNewElement,
setTargetElement: setTargetElement
});
}
setOpenSnippetsModal(false);
} else {
editor.insertContent(Object.values(snippet)[0], {});
setOpenSnippetsModal(false);
}
},
children: [
/*#__PURE__*/ jsx_runtime_.jsx("span", {
className: "font-semibold text-lg",
children: Object.keys(snippet)[0]
}),
/*#__PURE__*/ jsx_runtime_.jsx("div", {
className: "w-full block border border-slate-300 border-solid rounded-sm",
dangerouslySetInnerHTML: {
__html: Object.values(snippet)[0]
}
})
]
}, index);
})
]
})
]
});
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
} //////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
// EXTERNAL MODULE: external "@mui/icons-material/SkipNextTwoTone"
var SkipNextTwoTone_ = __webpack_require__(282);
var SkipNextTwoTone_default = /*#__PURE__*/__webpack_require__.n(SkipNextTwoTone_);
// EXTERNAL MODULE: external "@mui/icons-material/SkipPreviousTwoTone"
var SkipPreviousTwoTone_ = __webpack_require__(3729);
var SkipPreviousTwoTone_default = /*#__PURE__*/__webpack_require__.n(SkipPreviousTwoTone_);
// EXTERNAL MODULE: external "@mui/icons-material/DeleteTwoTone"
var DeleteTwoTone_ = __webpack_require__(6502);
var DeleteTwoTone_default = /*#__PURE__*/__webpack_require__.n(DeleteTwoTone_);
// EXTERNAL MODULE: external "@mui/icons-material/TextRotateVerticalTwoTone"
var TextRotateVerticalTwoTone_ = __webpack_require__(4864);
var TextRotateVerticalTwoTone_default = /*#__PURE__*/__webpack_require__.n(TextRotateVerticalTwoTone_);
// EXTERNAL MODULE: external "@mui/icons-material/TextRotateUpTwoTone"
var TextRotateUpTwoTone_ = __webpack_require__(1358);
var TextRotateUpTwoTone_default = /*#__PURE__*/__webpack_require__.n(TextRotateUpTwoTone_);
;// CONCATENATED MODULE: ./components/su/components/RichText/RichTextExtensionBlock.jsx
// @ts-check
/**
* ==============================================================================
* Imports
* ==============================================================================
*/
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/**
* ==============================================================================
* Main Component { Functional }
* ==============================================================================
* @param {object} props - Server props
* @param {React.MutableRefObject<import("tinymce").Editor>} props.editorRef
*/ function RichTextExtensionBlock({ editorRef }) {
/**
* Get Contexts
*
* @abstract { React.useContext }
*/ ////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
/**
* Javascript Variables
*
* @abstract Non hook variables and functions
*/ ////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
/**
* React Hooks
*
* @abstract { useState, useEffect, useRef, etc ... }
*/ /** @type {[targetElement:HTMLElement | null, setTargetElement: React.Dispatch<React.SetStateAction<HTMLElement | Node>>]} */ // @ts-ignore
const [targetElement, setTargetElement] = external_react_default().useState(null);
const [openStyleModal, setOpenStyleModal] = external_react_default().useState(false);
const [openSnippetsModal, setOpenSnippetsModal] = external_react_default().useState(false);
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
/**
* Function Return
*
* @description Main Function Return
*/ return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
className: "absolute top-[60px] z-50 -left-[38px] w-[40px] flex flex-col items-end",
style: {
boxShadow: "0 0 40px rgba(15, 23, 42, 0.2)"
},
children: [
/*#__PURE__*/ (0,jsx_runtime_.jsxs)(ButtonGroup/* default */.Z, {
column: true,
className: "gap-[1px]",
children: [
/*#__PURE__*/ jsx_runtime_.jsx("div", {
onClick: ()=>{
targetNode({
editor: editorRef.current,
setTargetElement
});
},
style: {
width: "40px",
height: "40px"
},
className: "button secondary",
children: /*#__PURE__*/ jsx_runtime_.jsx((AdsClickTwoTone_default()), {})
}),
/*#__PURE__*/ jsx_runtime_.jsx("div", {
onClick: ()=>{
moveElement({
targetElement: targetElement,
back: true
});
},
style: {
width: "40px",
height: "40px"
},
className: "button dark",
children: /*#__PURE__*/ jsx_runtime_.jsx((TextRotateUpTwoTone_default()), {})
}),
/*#__PURE__*/ jsx_runtime_.jsx("div", {
onClick: ()=>{
moveElement({
targetElement: targetElement
});
},
style: {
width: "40px",
height: "40px"
},
className: "button dark",
children: /*#__PURE__*/ jsx_runtime_.jsx((TextRotateVerticalTwoTone_default()), {})
}),
/*#__PURE__*/ jsx_runtime_.jsx("div", {
onClick: ()=>{
setOpenSnippetsModal(true);
},
style: {
width: "40px",
height: "40px"
},
className: "button",
children: /*#__PURE__*/ jsx_runtime_.jsx((ViewTimelineTwoTone_default()), {})
}),
/*#__PURE__*/ jsx_runtime_.jsx("div", {
onClick: ()=>{
setOpenStyleModal(true);
},
style: {
width: "40px",
height: "40px"
},
className: "button",
children: /*#__PURE__*/ jsx_runtime_.jsx((StyleTwoTone_default()), {})
}),
/*#__PURE__*/ jsx_runtime_.jsx("div", {
onClick: ()=>{
duplicateNode({
editor: editorRef.current,
targetElement,
setTargetElement
});
},
style: {
width: "40px",
height: "40px"
},
className: "button",
children: /*#__PURE__*/ jsx_runtime_.jsx((DifferenceTwoTone_default()), {})
}),
/*#__PURE__*/ jsx_runtime_.jsx("div", {
onClick: ()=>{
selectParent({
editor: editorRef.current,
targetElement,
setTargetElement
});
},
style: {
width: "40px",
height: "40px"
},
className: "button",
children: /*#__PURE__*/ jsx_runtime_.jsx((HighlightAltTwoTone_default()), {})
}),
/*#__PURE__*/ jsx_runtime_.jsx("div", {
onClick: ()=>{
selectChild({
editor: editorRef.current,
targetElement,
setTargetElement
});
},
style: {
width: "40px",
height: "40px"
},
className: "button",
children: /*#__PURE__*/ jsx_runtime_.jsx((HighlightAltTwoTone_default()), {
className: "rotate-180"
})
}),
/*#__PURE__*/ jsx_runtime_.jsx("div", {
onClick: ()=>{
selectPrevious({
editor: editorRef.current,
targetElement,
setTargetElement
});
},
style: {
width: "40px",
height: "40px"
},
className: "button",
children: /*#__PURE__*/ jsx_runtime_.jsx((SkipPreviousTwoTone_default()), {})
}),
/*#__PURE__*/ jsx_runtime_.jsx("div", {
onClick: ()=>{
selectNext({
editor: editorRef.current,
targetElement,
setTargetElement
});
},
style: {
width: "40px",
height: "40px"
},
className: "button",
children: /*#__PURE__*/ jsx_runtime_.jsx((SkipNextTwoTone_default()), {})
}),
/*#__PURE__*/ jsx_runtime_.jsx("div", {
onClick: ()=>{
if (targetElement) {
// @ts-ignore
const parentElement = targetElement.parentNode;
parentElement.removeChild(targetElement);
targetNode({
editor: editorRef.current,
node: parentElement,
setTargetElement
});
}
},
style: {
width: "40px",
height: "40px"
},
className: "button bg-red-500",
children: /*#__PURE__*/ jsx_runtime_.jsx((DeleteTwoTone_default()), {})
}),
/*#__PURE__*/ jsx_runtime_.jsx("div", {
onClick: ()=>{
const editorDocument = editorRef.current.getDoc();
editorDocument.querySelectorAll(".target-node").forEach((elt)=>{
elt.classList.remove("target-node");
});
// @ts-ignore
setTargetElement(null);
},
style: {
width: "40px",
height: "40px"
},
className: "button white",
children: /*#__PURE__*/ jsx_runtime_.jsx((DoDisturbAltTwoTone_default()), {
className: "rotate-180"
})
})
]
}),
/*#__PURE__*/ jsx_runtime_.jsx(material_.Drawer, {
open: openStyleModal,
onClose: ()=>{
setOpenStyleModal(false);
},
anchor: "right",
children: /*#__PURE__*/ jsx_runtime_.jsx(ElementStyleModalContent, {
targetElement: targetElement,
setOpenStyleModal: setOpenStyleModal
})
}),
/*#__PURE__*/ jsx_runtime_.jsx(material_.Modal, {
open: openSnippetsModal,
onClose: ()=>{
setOpenSnippetsModal(false);
},
children: /*#__PURE__*/ jsx_runtime_.jsx(HTMLSnippetsModalContent, {
targetElement: targetElement,
setTargetElement: setTargetElement,
editor: editorRef.current,
setOpenSnippetsModal: setOpenSnippetsModal
})
})
]
});
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
} //////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
;// CONCATENATED MODULE: ./components/su/components/RichText/DocsRichTextBlock.jsx
// @ts-check
/**
* ==============================================================================
* Imports
* ==============================================================================
*/
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
/**
* Main Component { Functional }
* ==============================================================================
* @param {object} props - Server props
* @param {import("@/package-shared/types").UserType} [props.user]
* @param {any} [props.blockObject]
* @param {string} [props.placeholder]
* @param {React.MutableRefObject<any>} [props.editorRef]
* @param {number} [props.height]
* @param {boolean} [props.extend]
*/ function DocsRichTextBlock({ user , blockObject , placeholder , editorRef , height , extend , }) {
/**
* Get Contexts
*
* @abstract { React.useContext }
*/ ////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
/**
* Javascript Variables
*
* @abstract Non hook variables and functions
*/ ////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
/**
* React Hooks
*
* @abstract { useState, useEffect, useRef, etc ... }
*/ const [loading, setLoading] = external_react_default().useState(false);
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
/**
* Function Return
*
* @description Main Function Return
*/ return /*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
className: "relative",
children: [
/*#__PURE__*/ jsx_runtime_.jsx(tinymce_react_.Editor, {
tinymceScriptSrc: "/tinymce/tinymce.min.js",
onInit: (evt, editor)=>{
if (extend) {
const editorBody = editor.getBody();
editorBody.style.padding = "40px";
editorBody.className = "RTE-DOCS";
}
if (editorRef) {
editorRef.current = editor;
}
},
initialValue: blockObject && blockObject["content"] ? blockObject["content"] : "",
init: {
height: height ? height : 400,
width: "100%",
relative_urls: false,
remove_script_host: false,
menubar: false,
plugins: extend ? [
"advlist",
"autolink",
"lists",
"link",
"image",
"charmap",
"anchor",
"searchreplace",
"visualblocks",
"code",
"fullscreen",
"insertdatetime",
"media",
"table",
"preview",
"help",
"wordcount",
"codesample",
] : [
"link"
],
toolbar: extend ? "undo redo | blocks | " + "bold italic forecolor | codesample link image | alignleft aligncenter " + "alignright alignjustify | bullist numlist outdent indent | " + "removeformat" : "undo redo | blocks | link",
content_style: "body { font-family:Helvetica,Arial,sans-serif; font-size:18px }",
placeholder: placeholder ? placeholder : "Type something ...",
content_css: extend ? "/styles/tiny.css" : undefined,
statusbar: extend ? true : false
}
}),
extend && editorRef && /*#__PURE__*/ jsx_runtime_.jsx(RichTextExtensionBlock, {
editorRef: editorRef
})
]
});
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
} //////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
// EXTERNAL MODULE: ./components/general/BackButton.jsx
var BackButton = __webpack_require__(1781);
// EXTERNAL MODULE: ./components/form/FormSelect.jsx
var FormSelect = __webpack_require__(4114);
// EXTERNAL MODULE: ./components/general/Breadcrumbs.jsx
var Breadcrumbs = __webpack_require__(424);
;// CONCATENATED MODULE: ./components/su/docs/CreatePageContent.jsx
// @ts-check
/**
* ==============================================================================
* Imports
* ==============================================================================
*/
/** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** @type {any} */ let timeout;
/**
* Main Component { Functional }
* ==============================================================================
* @param {Object} props - Server props
* @param {any} [props.data] - Page content available
* @param {import("@/package-shared/types").UserType} props.user
*/ function CreatePageContent({ data , user }) {
/**
* Get Contexts
*
* @abstract { React.useContext }
*/ ////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
/**
* Javascript Variables
*
* @abstract Non hook variables and functions
*/ const isUpdate = data?.title ? true : false;
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
/**
* React Hooks
*
* @abstract { useState, useEffect, useRef, etc ... }
*/ const [loading, setLoading] = external_react_default().useState(false);
const [pageLevel, setPageLevel] = external_react_default().useState(data?.level);
const [pageOrder, setPageOrder] = external_react_default().useState(data?.page_order);
/** @type {[ targetParentPage: any, setTargetParentPage: React.Dispatch<React.SetStateAction<any>> ]} */ // @ts-ignore
const [parentPages, setParentPages] = external_react_default().useState(null);
/** @type {[ targetParentPage: any, setTargetParentPage: React.Dispatch<React.SetStateAction<any>> ]} */ // @ts-ignore
const [targetParentPage, setTargetParentPage] = external_react_default().useState(null);
/** @type {React.MutableRefObject<import("tinymce").Editor|undefined>} */ const descEditorRef = external_react_default().useRef();
/** @type {React.MutableRefObject<import("tinymce").Editor|undefined>} */ const contentEditorRef = external_react_default().useRef();
external_react_default().useEffect(()=>{
if (parseInt(pageLevel) > 1) {
window.clearTimeout(timeout);
timeout = window.setTimeout(()=>{
(0,fetchApi/* default */.Z)("/api/admin/docs/grab-parent-pages", {
method: "post",
body: {
pagesLevel: parseInt(pageLevel) - 1,
currentPageId: data?.id
}
}).then((res)=>{
if (res.success && res.result && Array.isArray(res.result) && res.result[0]) {
setParentPages(res.result);
if (data.parent_id) {
const targetFilterPage = res.result.filter((/** @type {any} */ pg)=>pg.id == data.parent_id);
if (targetFilterPage[0]) {
setTargetParentPage(targetFilterPage[0]);
} else {
setTargetParentPage(res.result[0]);
}
} else {
setTargetParentPage(res.result[0]);
}
}
});
}, 500);
} else {
setParentPages(null);
setTargetParentPage(null);
}
}, [
pageLevel
]);
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
/**
* Function Return
*
* @abstract Main Function Return
*/ return /*#__PURE__*/ jsx_runtime_.jsx((external_react_default()).Fragment, {
children: /*#__PURE__*/ (0,jsx_runtime_.jsxs)("section", {
className: "items-start justify-start p-6",
children: [
/*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
className: "mb-1",
children: [
/*#__PURE__*/ jsx_runtime_.jsx(BackButton/* default */.Z, {}),
/*#__PURE__*/ jsx_runtime_.jsx("h2", {
className: "text-xl m-0",
children: isUpdate ? "Update page" : "Create a new Docs Page"
})
]
}),
/*#__PURE__*/ jsx_runtime_.jsx("div", {
className: "mb-4",
children: /*#__PURE__*/ jsx_runtime_.jsx(Breadcrumbs/* default */.Z, {
user: user
})
}),
/*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
className: "paper flex-col items-stretch gap-10 w-full relative",
children: [
loading && /*#__PURE__*/ jsx_runtime_.jsx(LoadingBlock/* default */.Z, {}),
/*#__PURE__*/ (0,jsx_runtime_.jsxs)("form", {
onSubmit: (e)=>{
e.preventDefault();
setLoading(true);
/** @type {HTMLFormElement} */ // @ts-ignore
const formEl = e.target;
/** @type {HTMLInputElement} */ // @ts-ignore
const titleInputEl = formEl["title"];
const editorDocument = contentEditorRef.current?.getDoc();
const descEditorDocument = descEditorRef.current?.getDoc();
editorDocument?.querySelectorAll(".target-node").forEach((tnode)=>tnode.classList.remove("target-node"));
/**
* ### Update URL
* @param {HTMLAnchorElement} anchor
*/ function updateUrl(anchor) {
const url = anchor.href;
if (url?.match(/\~/)) {
anchor.href = url.replace(/.*?\~\//, "/");
}
if (url?.match(/\.\.\//)) {
anchor.href = url.replace(/.*?\.\.\//, "/");
}
}
editorDocument?.querySelectorAll("a").forEach((anchor)=>{
updateUrl(anchor);
});
descEditorDocument?.querySelectorAll("a").forEach((anchor)=>{
updateUrl(anchor);
});
const description = descEditorRef.current?.getContent();
const content = contentEditorRef.current?.getBody().innerHTML;
const inner_text = contentEditorRef.current?.getBody().innerText;
const title = titleInputEl.value;
/** @type {any} */ let fetchObject = {
title,
description,
content,
text_content: inner_text,
level: pageLevel,
page_order: pageOrder
};
if (isUpdate) {
fetchObject.id = data.id;
}
if (targetParentPage?.id) {
fetchObject.parent_id = targetParentPage.id;
}
(0,fetchApi/* default */.Z)(`/api/admin/docs/${isUpdate ? "update-page" : "add-page"}`, {
method: "post",
body: fetchObject
}).then((res)=>{
if (res.success) {
// window.location.pathname = `/su/docs`;
window.location.reload();
} else {
alert("Operation Failed!");
setTimeout(()=>{
setLoading(false);
}, 1000);
}
});
},
className: "flex flex-col gap-4 w-full",
children: [
/*#__PURE__*/ jsx_runtime_.jsx(FormInput/* default */.Z, {
placeholder: "Enter a title",
fontSize: "30px",
name: "title",
defaultValue: isUpdate ? data.title : null
}),
/*#__PURE__*/ (0,jsx_runtime_.jsxs)("div", {
className: "card no-hover",
children: [
/*#__PURE__*/ jsx_runtime_.jsx(FormInput/* default */.Z, {
numberText: true,
placeholder: "Level",
defaultValue: isUpdate ? pageLevel : "1",
maxWidth: "140px",
minValue: 1,
maxValue: 4,
step: 1,
name: "page-level",
title: "Page Level",
setValue: setPageLevel
}),
/*#__PURE__*/ jsx_runtime_.jsx(FormInput/* default */.Z, {
numberText: true,
placeholder: "Level",
defaultValue: isUpdate ? pageOrder : "1",
maxWidth: "140px",
minValue: 1,
step: 1,
name: "page-order",
title: "Page Order",
setValue: setPageOrder
}),
parentPages && Array.isArray(parentPages) && /*#__PURE__*/ jsx_runtime_.jsx(FormSelect/* default */.Z, {
selectOptions: parentPages.map((pageObject)=>{
return {
title: pageObject.title,
payload: pageObject.id,
default: targetParentPage?.id == pageObject.id
};
}),
title: "Parent Page",
required: true,
onChangeHandler: (e)=>{
const targetPage = parentPages.filter((pg)=>pg.id == e.target.value);
if (targetPage[0]) {
setTargetParentPage(targetPage[0]);
} else {
window.alert("No Matching parent page!");
}
}
})
]
}),
/*#__PURE__*/ jsx_runtime_.jsx(DocsRichTextBlock, {
placeholder: "Describe this page briefly",
editorRef: descEditorRef,
blockObject: isUpdate ? {
content: data.description
} : null,
height: 200
}),
/*#__PURE__*/ jsx_runtime_.jsx(DocsRichTextBlock, {
placeholder: "Page Content",
editorRef: contentEditorRef,
blockObject: isUpdate ? {
content: data.content
} : null,
height: 600,
extend: true
}),
/*#__PURE__*/ jsx_runtime_.jsx("button", {
type: "submit",
children: isUpdate ? "Update Page" : "Add Page"
})
]
})
]
})
]
})
});
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
} /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */ /** ****************************************************************************** */
/***/ })
};
;