export function makeLink(ableName: string, property: string, ) { return `See API`; } export function makeOptionLink(ableName: string, option: string, property: string) { return `See API`; } export function makeArgType(param: { type: "array" | "text" | "radio" | "object" | "number" | "boolean" | "inline-radio"; description?: string; defaultValue: any; value?: any; category?: string; control?: Record; table?: Record; }) { return { control: param.type, ...(param.control || {}), table: { defaultValue: { summary: param.defaultValue }, category: param.category, ...(param.table || {}), }, description: param.description, value: "value" in param ? param.value : param.defaultValue, }; } export function makeArgs(argTypes: any) { return Object.keys(argTypes).reduce((prev, cur) => { prev[cur] = argTypes[cur].value; return prev; }, {} as Record); } export function convertPath(text: string, findName: string = "react-moveable", moduleName = findName) { let nextText = text.replace(new RegExp(`"[a-zA-Z0-9./_-]*${findName}[a-zA-Z0-9./_-]*"`, "g"), `"${moduleName}"`); nextText = nextText.replace(new RegExp(`'[a-zA-Z0-9./_-]*${findName}[a-zA-Z0-9./_-]*'`, "g"), `'${moduleName}'`); return nextText; } export function convertVanillaTemplate(text: string) { let previewText = text.replace(/\n^export[^\n]*$/mg, ""); previewText = previewText.replace(/\s*return grid;\n\}$/mg, ""); previewText = previewText.replace(/^[ ]{2}/mg, ""); return convertTemplate(previewText); } export function convertVueTemplate(text: string) { let previewText = text.replace("props:", "data:"); previewText = previewText.replace(/\[(\s*"([^"]+)",\s*)+\]/g, (...args) => { return args[0].replace("[", "{").replace("]", "}").replace(/"([^"]+)"/g, (_, name) => { return `${name}: ${name}`; }); }); return convertTemplate(previewText, /([a-zA-Z_0-9]+):\s([a-zA-Z_0-9]+),/g, true); } export function convertSvelteTemplate(text: string) { const previewText = text.replace(/export let ([a-zA-Z_0-9]+);/g, "const $1 = $1;"); return convertTemplate(previewText, /([a-zA-Z_0-9]+) = ([a-zA-Z_0-9]+);/g, true); } export function convertAngularTemplate(text: string) { const previewText = text.replace(/@Input\(\) ([a-zA-Z_0-9]+): any;/g, "$1 = $1;"); return convertTemplate(previewText, /([a-zA-Z_0-9]+) = ([a-zA-Z_0-9]+);/g, true); } export function convertReactTemplate(text: string) { const previewText = text.replace(/@\//g, ""); return convertTemplate(previewText); } export function convertTemplate(text: string, regex = /props\.([a-zA-Z0-9_]+)/g, includePrefix = false) { const previewText = text.replace(/App\([^)]*\)/g, "App()"); let result: RegExpExecArray | null; let index = 0; const strings: string[] = []; const values: string[] = []; // eslint-disable-next-line no-cond-assign while (result = regex.exec(previewText)) { const nextIndex = result.index + (includePrefix ? result[0].lastIndexOf(result[2]) : 0); strings.push(previewText.slice(index, nextIndex)); values.push(result[1]); index = nextIndex + (includePrefix ? result[2].length : result[0].length); } strings.push(previewText.slice(index)); return [strings, values]; }