react-text-forge 0.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-text-forge.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/components/App.jsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n \"react-stack-bottom-frame\": function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React[\"react-stack-bottom-frame\"].bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { useState } from \"react\"\r\n\r\nexport default function App(){\r\n const [name, setName] = useState(\"Jhon\")\r\n\r\n return (\r\n <div>helloworl {name}</div>\r\n )\r\n}"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","self","source","owner","debugStack","debugTask","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","App","setName","useState"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
1
|
+
{"version":3,"file":"react-text-forge.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/components/utils/elements/CodeElement.jsx","../src/components/utils/CustomEditor.jsx","../src/components/utils/elements/DefaultElement.jsx","../src/components/utils/Leaf.jsx","../src/components/utils/elements/ListElement.jsx","../src/components/utils/elements/BlockquoteElement.jsx","../src/components/utils/form/BulletTypeSelector.jsx","../src/components/utils/form/NumeredTypeSelector.jsx","../src/images/addColumn--grey.svg","../src/images/addColumn.svg","../src/images/addRow--grey.svg","../src/images/addRow.svg","../src/images/bgColor.svg","../src/images/blockCode.svg","../src/images/blockquote.svg","../src/images/bold.svg","../src/images/bulletList.svg","../src/images/center.svg","../src/images/color.svg","../src/images/deleteColumn--grey.svg","../src/images/deleteColumn.svg","../src/images/deleteRow--grey.svg","../src/images/deleteRow.svg","../src/images/deleteTable--grey.svg","../src/images/deleteTable.svg","../src/images/fontFamily.svg","../src/images/href.svg","../src/images/image.svg","../src/images/indent--grey.svg","../src/images/indent.svg","../src/images/italic.svg","../src/images/left.svg","../src/images/numberedList.svg","../src/images/outdent--grey.svg","../src/images/outdent.svg","../src/images/redo--grey.svg","../src/images/redo.svg","../src/images/right.svg","../src/images/size.svg","../src/images/strikethrough.svg","../src/images/subscript.svg","../src/images/superscript.svg","../src/images/table.svg","../src/images/underline.svg","../src/images/undo--grey.svg","../src/images/undo.svg","../src/components/utils/imageImport.js","../src/components/utils/dropdown/BlockListDropdown.jsx","../src/components/utils/dropdown/ContainerDropdown.jsx","../src/components/utils/dropdown/FontSizeDropdown.jsx","../src/components/utils/dropdown/FontFamilyDropdown.jsx","../src/components/FormatButton.jsx","../src/components/utils/form/LinkForm.jsx","../src/components/utils/form/ColorPickerPopup.jsx","../src/components/utils/dropdown/BlockTypeDropdown.jsx","../src/components/utils/dropdown/LanguageDropdown.jsx","../src/components/utils/form/ImageForm.jsx","../src/components/utils/form/TableForm.jsx","../src/components/utils/dropdown/TableDropdown.jsx","../src/components/utils/form/HistoryForm.jsx","../src/components/useToolbar.jsx","../src/components/Toolbar.jsx","../src/components/ReactTextForge.jsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n \"react-stack-bottom-frame\": function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React[\"react-stack-bottom-frame\"].bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import React, { useRef } from 'react';\r\n\r\n/**\r\n * Permet de générer un bloc de code\r\n * \r\n * @param {object} props\r\n * @param {array} props.attributes - attribut permettant la fabrication de l'éléments\r\n * @param {object} props.element - élément courant\r\n * @param {JSX.Element} props.children - enfants de la citation\r\n * \r\n * @returns {JSX.Element}\r\n */\r\nconst CodeElement = ({ attributes, children, element }) => {\r\n const codeRef = useRef(null);\r\n const language = element.language || 'plaintext';\r\n\r\n return (\r\n <pre {...attributes}>\r\n <code ref={codeRef} className={`hljs ${language} language-${language}`}>\r\n {children}\r\n </code>\r\n </pre>\r\n );\r\n};\r\n\r\nexport default CodeElement;","import { Editor, Element, Node, Path, Range, Text, Transforms } from \"slate\";\r\n\r\n/**\r\n * Ce composant contient toutes les fonctions de traitement de texte\r\n * \r\n */\r\nconst CustomEditor = {\r\n /**\r\n * Permet de définir si le format défini est actif\r\n * @param {object} editor - éditeur de texte\r\n * @param {string} format - format défini (ex: gras, italique, etc...)\r\n * @returns {boolean}\r\n */\r\n isMarkActive(editor, format) {\r\n const marks = Editor.marks(editor);\r\n return marks ? marks[format] === true : false;\r\n },\r\n\r\n /**\r\n * Permet de gérer l'application et la désapplication du format défini\r\n * @param {object} editor - éditeur de texte\r\n * @param {string} format - format défini (ex: gras, italique, etc...)\r\n * @returns {void}\r\n */\r\n toggleMark(editor, format) {\r\n const isActive = CustomEditor.isMarkActive(editor, format);\r\n if (isActive) {\r\n Editor.removeMark(editor, format);\r\n } else {\r\n Editor.addMark(editor, format, true);\r\n // Désactiver l'autre format si nécessaire\r\n if (format === 'subscript') {\r\n Editor.removeMark(editor, 'superscript');\r\n } else if (format === 'superscript') {\r\n Editor.removeMark(editor, 'subscript');\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Permet de définir si le bloc défini est actif\r\n * @param {object} editor - éditeur de texte\r\n * @param {string} blockType - élément défini (ex: p, h1, h2...)\r\n * @returns {boolean}\r\n */\r\n isBlockActive(editor, blockType) {\r\n const [match] = Editor.nodes(editor, {\r\n match: n => n.type === blockType,\r\n });\r\n return !!match;\r\n },\r\n\r\n /**\r\n * Permet de définir si le bloc défini est dans une liste à puces (non-ordonnée ou numérotée)\r\n * @param {object} editor - éditeur de texte\r\n * @returns {boolean}\r\n */\r\n isSelectionInList(editor) {\r\n const [match] = Editor.nodes(editor, {\r\n match: n => n.type === 'bullet-list' || n.type === 'numbered-list',\r\n });\r\n return !!match;\r\n },\r\n\r\n /**\r\n * Permet de gérer l'application et la désapplication du bloc défini\r\n * @param {object} editor - éditeur de texte\r\n * @param {string} blockType - format défini (ex: gras, italique, etc...)\r\n * @param {string} bulletType - puces définies dans\r\n * @returns {void}\r\n */\r\n toggleBlock(editor, blockType, bulletType = null) {\r\n const isActive = CustomEditor.isBlockActive(editor, blockType);\r\n const isList = blockType === 'bullet-list' || blockType === 'numbered-list';\r\n const isHeading = blockType === 'h1' || blockType === 'h2';\r\n\r\n if (isHeading) {\r\n // Supprimer la marque fontSize si le bloc est un titre\r\n Editor.removeMark(editor, 'fontSize');\r\n }\r\n\r\n if (isList && CustomEditor.isSelectionInList(editor) && !bulletType) {\r\n // Unwrap the list if the selection is already in a list\r\n Transforms.unwrapNodes(editor, {\r\n match: n => isList && !Editor.isEditor(n) && Element.isElement(n) && (n.type === 'bullet-list' || n.type === 'numbered-list'),\r\n split: true,\r\n });\r\n Transforms.setNodes(editor, { type: 'paragraph' });\r\n return;\r\n }\r\n if (!bulletType) {\r\n Transforms.unwrapNodes(editor, {\r\n match: n => isList && !Editor.isEditor(n) && Element.isElement(n) && n.type === blockType,\r\n split: true,\r\n });\r\n\r\n const newProperties = {\r\n type: isActive ? 'paragraph' : isList ? 'list-item' : blockType,\r\n };\r\n\r\n Transforms.setNodes(editor, newProperties);\r\n\r\n if (!isActive && isList) {\r\n const block = { type: blockType, children: [] };\r\n Transforms.wrapNodes(editor, block);\r\n }\r\n } else {\r\n Transforms.setNodes(editor, { listStyleType: bulletType });\r\n const path = Editor.range(editor, editor.selection).anchor.path\r\n let newPath = path\r\n if (path.length === 3) {\r\n newPath = newPath.slice(0, 1)\r\n } else if (path.length === 4) {\r\n newPath = newPath.slice(0, 2)\r\n }\r\n Transforms.setNodes(editor, { type: blockType }, { at: newPath })\r\n }\r\n },\r\n\r\n /**\r\n * Permet de définir si le bloc défini possède un alignement\r\n * @param {object} editor - éditeur de texte\r\n * @param {string} align - alignement défini (ex: left, right ou center.)\r\n * @returns {boolean}\r\n */\r\n isAlignActive(editor, align) {\r\n const [match] = Editor.nodes(editor, {\r\n match: n => n.align === align,\r\n });\r\n return !!match;\r\n },\r\n\r\n /**\r\n * Permet de gérer l'alignement du bloc sélectionné\r\n * @param {object} editor - éditeur de texte\r\n * @param {string} alignement - alignement défini (ex: left, right ou center)\r\n * @returns {void}\r\n */\r\n toggleAlign(editor, align) {\r\n const isActive = CustomEditor.isAlignActive(editor, align);\r\n\r\n // Désactiver tous les alignements sur les nœuds d'éléments\r\n ['alignLeft', 'center', 'right'].forEach(alignType => {\r\n Transforms.unsetNodes(editor, { align: alignType });\r\n });\r\n\r\n if (!isActive) {\r\n // Appliquer le nouvel alignement aux nœuds d'éléments\r\n Transforms.setNodes(editor, { align: align });\r\n }\r\n },\r\n\r\n\r\n /**\r\n * Permet de définir si le bloc sélectionné peut être indenté\r\n * @param {object} editor - éditeur de texte\r\n * @param {string} mark - indentation sélectionné\r\n * @returns {boolean}\r\n */\r\n canIndent(editor, mark) {\r\n const [match] = Editor.nodes(editor, {\r\n match: n => n.type === 'list-item',\r\n });\r\n if (match) {\r\n const [, path] = match;\r\n if (mark === \"indent\") {\r\n // Check the length of the path to determine if the item is already nested\r\n if (path.length > 2) {\r\n return false;\r\n }\r\n return true;\r\n } else {\r\n if (path.length > 2) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n },\r\n\r\n /**\r\n * Permet de gérer l'indentation du bloc sélectionné\r\n * @param {object} editor - éditeur de texte\r\n * @returns {void}\r\n */\r\n handleIndent(editor) {\r\n const [match] = Editor.nodes(editor, {\r\n match: n => n.type === 'list-item',\r\n });\r\n if (match) {\r\n const [, path] = match;\r\n const parentListType = Editor.above(editor, {\r\n match: n => ['bullet-list', 'numbered-list'].includes(n.type),\r\n })[0].type;\r\n\r\n // Identation de la liste\r\n try {\r\n // On vérifie si l'élément est déjà dans une sous-liste\r\n const parentPath = Path.parent(Path.parent(path));\r\n const parentNode = Editor.node(editor, parentPath);\r\n\r\n if (Element.isElement(parentNode[0]) && parentNode[0].type === parentListType) {\r\n // Si c'est la cas, on fait rien\r\n return;\r\n }\r\n\r\n const newList = { type: parentListType, children: [] };\r\n\r\n // Insert the new list as a child of the current list item\r\n const newListPath = [path[0], path[1] + 1];\r\n Transforms.insertNodes(editor, newList, { at: newListPath });\r\n\r\n // Copy the current list item into the new list\r\n const listItem = { ...Editor.node(editor, path)[0] };\r\n const newPath = [path[0], path[1] + 1, 0];\r\n Transforms.insertNodes(editor, listItem, { at: newPath });\r\n\r\n // Remove the original list item\r\n Transforms.removeNodes(editor, { at: path });\r\n\r\n // Ensure the new list item is correctly nested\r\n Transforms.setNodes(editor, { type: 'list-item' }, { at: [path[0], path[1], 0] });\r\n } catch (error) {\r\n console.error(\"Error indenting list item:\", error);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Permet de gérer l'désindentation du bloc sélectionné\r\n * @param {object} editor - éditeur de texte\r\n * @returns {void}\r\n */\r\n handleOutdent(editor) {\r\n const [match] = Editor.nodes(editor, {\r\n match: n => n.type === 'list-item',\r\n });\r\n\r\n if (match) {\r\n const [, path] = match;\r\n const parentListType = Editor.above(editor, {\r\n match: n => ['bullet-list', 'numbered-list'].includes(n.type),\r\n })[0].type;\r\n\r\n try {\r\n // Check if the current list item is nested within another list\r\n const parentPath = Path.parent(path);\r\n const parentNode = Editor.node(editor, parentPath);\r\n\r\n if (Element.isElement(parentNode) && parentNode.type === parentListType) {\r\n Transforms.liftNodes(editor, { at: path });\r\n } else {\r\n Transforms.unwrapNodes(editor, {\r\n at: parentPath,\r\n match: n => Element.isElement(n) && n.type === parentListType,\r\n split: true,\r\n });\r\n }\r\n\r\n Transforms.setNodes(editor, { type: 'list-item' }, { at: path });\r\n } catch (error) {\r\n console.error(\"Error dedenting list item:\", error);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Permet de définir si le bloc sélectionné est un lien\r\n * @param {object} editor - éditeur de texte\r\n * @returns {boolean}\r\n */\r\n isLinkActive(editor) {\r\n const { selection } = editor;\r\n if (!selection) return false;\r\n\r\n const [link] = Editor.nodes(editor, {\r\n match: n => !Editor.isEditor(n) && Node.isNode(n) && n.type === 'link',\r\n });\r\n\r\n return !!link;\r\n },\r\n\r\n /**\r\n * Permet de ajouter ou mettre à jour un lien\r\n * @param {object} editor - éditeur de texte\r\n * @param {string} url - url défini\r\n * @param {string} openInNewTab - attribut pour définir si le lien ouvre dans un nouvel onglet\r\n * @returns {void}\r\n */\r\n updateLink(editor, url, openInNewTab) {\r\n const target = openInNewTab ? \"_blank\" : \"_self\";\r\n const rel = openInNewTab ? \"noopener noreferrer\" : \"\";\r\n\r\n if (CustomEditor.isLinkActive(editor)) {\r\n // Mettre à jour l'attribut href du lien existant\r\n Transforms.setNodes(\r\n editor,\r\n { href: url, target, rel },\r\n { match: n => n.type === 'link' }\r\n );\r\n } else {\r\n\r\n const { selection } = editor;\r\n if (!selection || Range.isCollapsed(selection)) return;\r\n\r\n // Créez un nœud de texte pour le lien\r\n const textNode = { text: url };\r\n\r\n if (!Range.isCollapsed(selection)) {\r\n // Si la sélection n'est pas vide, envelopper le texte sélectionné dans un lien\r\n Transforms.setNodes(\r\n editor,\r\n { type: 'link', href: url, target, rel },\r\n { match: n => Text.isText(n), split: true }\r\n );\r\n } else {\r\n // Si la sélection est vide, insérer un nouveau nœud de lien avec le texte\r\n Transforms.insertNodes(editor, {\r\n type: 'link',\r\n href: url,\r\n target,\r\n rel,\r\n children: [textNode],\r\n });\r\n }\r\n\r\n // Supprimez les paragraphes vides créés par l'insertion de liens\r\n Transforms.removeNodes(editor, {\r\n match: n => n.type === 'paragraph' && n.children.length === 0,\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Permet de supprimer le lien\r\n * @param {object} editor - éditeur de texte\r\n * @returns {void}\r\n */\r\n removeLink(editor) {\r\n if (editor.selection) {\r\n const { selection } = editor;\r\n const [linkNode, linkPath] = Editor.node(editor, selection);\r\n\r\n if (linkNode && linkNode.type === \"link\") {\r\n const text = linkNode.text; // Récupérer le texte du lien\r\n\r\n // Trouver le nœud parent\r\n const parentPath = Path.parent(linkPath);\r\n const parentNode = Node.get(editor, parentPath);\r\n\r\n // Insérer le texte dans le nœud parent\r\n Transforms.insertNodes(\r\n editor,\r\n { type: parentNode.type !== \"list-item\" ? parentNode.type : 'paragraph', text },\r\n { at: linkPath, match: n => Text.isText(n) }\r\n );\r\n\r\n // Supprimer le nœud de lien\r\n Transforms.removeNodes(editor, { at: linkPath });\r\n } else {\r\n console.warn(\"No link found at the current selection.\");\r\n }\r\n } else {\r\n console.warn(\"No selection found. Cannot remove link.\");\r\n }\r\n },\r\n\r\n /**\r\n * Permet de gérer la couleur de fond du bloc sélectionné\r\n * @param {object} editor - éditeur de texte\r\n * @param {string} coulor - couleur définie\r\n * @returns {void}\r\n */\r\n applyTextColor(editor, color) {\r\n const { selection } = editor;\r\n\r\n if (selection) {\r\n Editor.addMark(editor, 'color', color);\r\n }\r\n },\r\n\r\n /**\r\n * Permet de gérer la couleur de texte du bloc sélectionné\r\n * @param {object} editor - éditeur de texte\r\n * @param {string} coulor - couleur définie\r\n * @returns {void}\r\n */\r\n applyBackgroundTextColor(editor, color) {\r\n const { selection } = editor;\r\n\r\n if (selection) {\r\n Editor.addMark(editor, 'bgColor', color);\r\n }\r\n },\r\n\r\n /**\r\n * Permet de gérer la taille de police bloc sélectionné\r\n * @param {object} editor - éditeur de texte\r\n * @param {string} size - taille définie\r\n * @returns {void}\r\n */\r\n applyFontSize(editor, size) {\r\n const { selection } = editor;\r\n\r\n if (selection) {\r\n Editor.addMark(editor, 'fontSize', size);\r\n }\r\n },\r\n\r\n /**\r\n * Permet de gérer la police d'écriture bloc sélectionné\r\n * @param {object} editor - éditeur de texte\r\n * @param {string} fontFamily - police définie\r\n * @returns {void}\r\n */\r\n applyFontFamily(editor, fontFamily) {\r\n const { selection } = editor;\r\n\r\n if (selection) {\r\n Editor.addMark(editor, 'fontFamily', fontFamily);\r\n }\r\n },\r\n\r\n /**\r\n * Gère l'ajout, l'édition et la suppression d'un bloc de code\r\n * @param {object} editor - éditeur de texte\r\n * @param {string} language - langage défini (ex: cpp(C++), php, etc...)\r\n * @returns {void}\r\n */\r\n handleCode(editor, language) {\r\n const { selection } = editor;\r\n if (selection) {\r\n const [match] = Editor.nodes(editor, {\r\n match: n => n.type === 'paragraph',\r\n });\r\n if (match) {\r\n const [, path] = match;\r\n const text = match[0].children.map(child => child.text).join('');\r\n\r\n // Créez un nœud de code avec le texte sélectionné et le langage spécifié\r\n const codeNode = {\r\n type: 'code',\r\n language: language,\r\n children: [{ text }],\r\n };\r\n\r\n // Remplacez le texte sélectionné par le nœud de code\r\n Transforms.setNodes(editor, codeNode, { at: path });\r\n\r\n // Mettez à jour la sélection pour inclure le nouveau nœud de code\r\n Transforms.select(editor, path);\r\n } else {\r\n const [match] = Editor.nodes(editor, {\r\n match: n => n.type === 'code',\r\n });\r\n if (match) {\r\n const [, path] = match;\r\n\r\n if (language === \"init\") {\r\n const text = match[0].children.map(child => child.text).join('');\r\n\r\n // Créez un nœud de paragraphe avec le texte du bloc de code\r\n const paragraphNode = {\r\n type: 'paragraph',\r\n children: [{ text }],\r\n };\r\n\r\n // Remplacez le bloc de code par le nœud de paragraphe\r\n Transforms.setNodes(editor, paragraphNode, { at: path });\r\n\r\n // Supprimer l'attribut 'language' du nœud de paragraphe\r\n Transforms.unsetNodes(editor, 'language', { at: path });\r\n\r\n // Mettez à jour la sélection pour inclure le nouveau nœud de paragraphe\r\n Transforms.select(editor, path);\r\n } else {\r\n // Mettez à jour le langage du bloc de code\r\n Transforms.setNodes(editor, { language }, { at: path });\r\n\r\n // Mettez à jour la sélection pour inclure le bloc de code mis à jour\r\n Transforms.select(editor, path);\r\n }\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Permet de gérer les images\r\n * @param {object} editor - éditeur de texte\r\n * @param {string} url - url définie\r\n * @returns {void}\r\n */\r\n insertImage(editor, url) {\r\n const image = {\r\n type: 'image',\r\n url,\r\n children: [{ text: '' }],\r\n };\r\n const newParagraph = {\r\n type: 'paragraph',\r\n children: [{ text: '' }],\r\n }\r\n Transforms.insertNodes(editor, image);\r\n Transforms.insertNodes(editor, newParagraph);\r\n },\r\n\r\n /**\r\n * Permet de gérer l'upload d'un fichier\r\n * @param {Event} event\r\n * @param {object} editor - éditeur de texte\r\n * @returns {void}\r\n */\r\n handleFileChange(event, editor) {\r\n const file = event.target.files[0];\r\n if (file) {\r\n const file = event.target.files[0];\r\n if (file) {\r\n const img = new Image();\r\n const reader = new FileReader();\r\n\r\n reader.onload = (e) => {\r\n\r\n const fileType = file.type;\r\n if (fileType === 'image/svg+xml') {\r\n // Si c'est un SVG, insérez-le directement\r\n this.insertImage(editor, e.target.result);\r\n } else {\r\n img.src = e.target.result;\r\n img.onload = () => {\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d');\r\n\r\n // Définir la taille maximale de l'image\r\n const MAX_WIDTH = 800;\r\n const MAX_HEIGHT = 600;\r\n let width = img.width;\r\n let height = img.height;\r\n\r\n // Calculer les nouvelles dimensions tout en conservant le ratio\r\n if (width > height) {\r\n if (width > MAX_WIDTH) {\r\n height *= MAX_WIDTH / width;\r\n width = MAX_WIDTH;\r\n }\r\n } else {\r\n if (height > MAX_HEIGHT) {\r\n width *= MAX_HEIGHT / height;\r\n height = MAX_HEIGHT;\r\n }\r\n }\r\n\r\n canvas.width = width;\r\n canvas.height = height;\r\n\r\n // Dessiner l'image sur le canvas\r\n ctx.drawImage(img, 0, 0, width, height);\r\n\r\n // Convertir le canvas en URL de données\r\n const dataUrl = canvas.toDataURL('image/jpeg');\r\n this.insertImage(editor, dataUrl);\r\n };\r\n\r\n img.onerror = () => {\r\n console.error(\"Failed to load image.\");\r\n };\r\n }\r\n };\r\n\r\n reader.onerror = () => {\r\n console.error(\"Failed to read file.\");\r\n };\r\n\r\n reader.readAsDataURL(file);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Permet de créer un tableau\r\n * @param {object} editor - éditeur de texte\r\n * @param {number} rows - nombre de lignes\r\n * @param {number} columns - nombre de colonnes\r\n * @returns {void}\r\n */\r\n insertTable(editor, rows, columns) {\r\n const table = {\r\n type: 'table',\r\n children: Array.from({ length: rows }, () => ({\r\n type: 'table-row',\r\n children: Array.from({ length: columns }, () => ({\r\n type: 'table-cell',\r\n children: [{ text: '' }],\r\n })),\r\n })),\r\n };\r\n\r\n Transforms.insertNodes(editor, table);\r\n },\r\n\r\n /**\r\n * Permet de définir si l'élément sélectionné est dans un tableau\r\n * @param {object} editor - éditeur de texte\r\n * @returns {boolean}\r\n */\r\n isSelectionInTable(editor) {\r\n const [match] = Editor.nodes(editor, {\r\n match: n => n.type === 'table',\r\n });\r\n return !!match;\r\n },\r\n\r\n /**\r\n * Permet d'obtenir le tableau sélectionné\r\n * @param {object} editor - éditeur de texte\r\n * @returns {void}\r\n */\r\n getTableFromSelection(editor) {\r\n const [table] = Editor.nodes(editor, {\r\n match: n => n.type === 'table',\r\n });\r\n return table ? table[0] : null;\r\n },\r\n\r\n /**\r\n * Permet d'ajouter une ligne au tableau sélectionné\r\n * @param {object} editor - éditeur de texte\r\n * @returns {void}\r\n */\r\n addRow(editor) {\r\n const table = CustomEditor.getTableFromSelection(editor);\r\n if (table) {\r\n // Déterminez l'index de la ligne sélectionnée\r\n const cellPath = editor.selection?.anchor.path;\r\n const selectedRowIndex = cellPath[1];\r\n\r\n const newRow = {\r\n type: 'table-row',\r\n children: table.children[selectedRowIndex].children.map(cell => ({\r\n ...cell,\r\n children: [{ text: '' }],\r\n })),\r\n };\r\n // Calculer le chemin correct pour insérer la nouvelle ligne\r\n const path = [cellPath.slice(0,1), selectedRowIndex + 1];\r\n\r\n // Insérer la nouvelle ligne à la fin du tableau\r\n Transforms.insertNodes(editor, newRow, { at: path });\r\n }\r\n },\r\n\r\n /**\r\n * Permet d'ajouter une colonne au tableau sélectionné\r\n * @param {object} editor - éditeur de texte\r\n * @returns {void}\r\n */\r\n addColumn(editor) {\r\n const table = CustomEditor.getTableFromSelection(editor);\r\n if (table) {\r\n // Déterminez l'index de la colonne sélectionnée\r\n const cellPath = editor.selection?.anchor.path;\r\n const cell = Node.get(editor, cellPath);\r\n\r\n if (cell) {\r\n // Trouver l'index de la colonne dans la ligne sélectionnée\r\n const columnIndex = cellPath[cellPath.length - 2];\r\n\r\n\r\n if (columnIndex !== undefined) {\r\n // Parcourir chaque ligne du tableau\r\n table.children.forEach((row, currentRowIndex) => {\r\n const newCell = {\r\n type: 'table-cell',\r\n children: [{ text: '' }],\r\n };\r\n\r\n // Calculer le chemin correct pour insérer la nouvelle cellule\r\n const path = [...cellPath.slice(0, 1), currentRowIndex, columnIndex + 1];\r\n\r\n // Vérifiez si l'index est valide pour la ligne actuelle\r\n if (path[path.length - 1] <= row.children.length) {\r\n // Insérer la nouvelle cellule après la colonne sélectionnée\r\n Transforms.insertNodes(editor, newCell, { at: path });\r\n } else {\r\n console.warn(`Cannot insert at path ${path}. Row does not have enough cells.`);\r\n }\r\n });\r\n } else {\r\n console.error(\"Column index is undefined, unable to find the selected cell in the row.\");\r\n }\r\n } else {\r\n console.error(\"Selected cell not found.\");\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Permet de supprimer une ligne du tableau sélectionné\r\n * @param {object} editor - éditeur de texte\r\n * @returns {void}\r\n */\r\n deleteRow(editor) {\r\n const table = CustomEditor.getTableFromSelection(editor);\r\n if (table) {\r\n // Déterminez l'index de la ligne sélectionnée\r\n const cellPath = editor.selection?.anchor.path;\r\n const selectedRowIndex = cellPath[1];\r\n \r\n if (selectedRowIndex !== undefined) {\r\n // Calculer le chemin correct pour supprimer la ligne\r\n const path = [cellPath[0], selectedRowIndex];\r\n \r\n // Supprimer la ligne sélectionnée\r\n Transforms.removeNodes(editor, { at: path });\r\n } else {\r\n console.error(\"Selected row index is undefined.\");\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Permet de supprimer une colonne du tableau sélectionné\r\n * @param {object} editor - éditeur de texte\r\n * @returns {void}\r\n */\r\n deleteColumn(editor) {\r\n const table = CustomEditor.getTableFromSelection(editor);\r\n if (table) {\r\n // Déterminez l'index de la colonne sélectionnée\r\n const cellPath = editor.selection?.anchor.path;\r\n const cell = Node.get(editor, cellPath);\r\n\r\n // Trouver l'index de la colonne dans la ligne\r\n const rowIndex = cellPath[cellPath.length - 1];\r\n let columnIndex = -1;\r\n\r\n // Parcourir les cellules de la ligne pour trouver l'index correct\r\n table.children[rowIndex].children.forEach((rowCell, index) => {\r\n if (rowCell.children[0] === cell) {\r\n columnIndex = index;\r\n }\r\n });\r\n\r\n if (columnIndex !== -1) {\r\n // Parcourir chaque ligne du tableau\r\n table.children.forEach((row, currentRowIndex) => {\r\n // Vérifiez que la ligne a suffisamment de cellules\r\n if (row.children.length > columnIndex) {\r\n // Calculer le chemin correct pour supprimer la cellule\r\n const path = [cellPath[0], currentRowIndex, columnIndex];\r\n\r\n // Vérifiez que le chemin est valide avant de supprimer la cellule\r\n const node = Node.get(editor, path);\r\n if (node) {\r\n // Supprimer la cellule à l'index spécifié\r\n Transforms.removeNodes(editor, { at: path });\r\n } else {\r\n console.error(`Invalid path: ${path}`);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Permet de supprimer le tableau sélectionné\r\n * @param {object} editor - éditeur de texte\r\n * @returns {void}\r\n */\r\n deleteTable(editor) {\r\n const table = CustomEditor.getTableFromSelection(editor);\r\n if (table) {\r\n // Déterminez le chemin du tableau\r\n const tablePath = editor.selection?.anchor.path.slice(0, 1);\r\n \r\n if (tablePath.length > 0) {\r\n // Supprimer le tableau entier\r\n Transforms.removeNodes(editor, { at: tablePath });\r\n } else {\r\n console.error(\"Table path is invalid.\");\r\n }\r\n } else {\r\n console.error(\"No table selected.\");\r\n }\r\n }\r\n};\r\n\r\nexport default CustomEditor;\r\n","/**\r\n * Permet de générer un paragraphe (bloc par défaut)\r\n * \r\n * @param {object} props\r\n * @param {array} props.attributes - attribut permettant la fabrication de l'éléments\r\n * @param {object} props.element - élément courant\r\n * @param {JSX.Element} props.children - enfants de la citation\r\n * \r\n * @returns {JSX.Element}\r\n */\r\nconst DefaultElement = ({ attributes, children, element }) => {\r\n const style = { textAlign: element.align || 'left' };\r\n return <p style={style} {...attributes}>{children}</p>\r\n}\r\nexport default DefaultElement","import React from \"react\";\r\n\r\n/**\r\n * Cette fonction permet de créer les balises HTML en fonction du ou des formats appliqués\r\n *\r\n * @param {object} props\r\n * @param {object} attributes - Tous les attributs nécessaires à la génération du contenu\r\n * @param {object} children - Le contenu de la future balise\r\n * @param {object} leaf - Contient le format appliqué\r\n * @returns {JSX.Element}\r\n */\r\nconst Leaf = ({ attributes, children, leaf }) => {\r\n // Créez un tableau de balises HTML en fonction des marques actives\r\n let tags = [];\r\n\r\n if (leaf.bold) tags.push('strong');\r\n if (leaf.italic) tags.push('em');\r\n if (leaf.underline) tags.push('u');\r\n if (leaf.strikethrough) tags.push('del');\r\n if (leaf.subscript && !leaf.superscript) tags.push('sub');\r\n if (!leaf.subscript && leaf.superscript) tags.push('sup');\r\n if (leaf.bgColor) tags.push('mark')\r\n\r\n // Appliquer le style de couleur si défini\r\n const style = {\r\n color: leaf.color || undefined,\r\n fontSize: leaf.fontSize || undefined,\r\n backgroundColor: leaf.bgColor || undefined,\r\n fontFamily: leaf.fontFamily || undefined\r\n };\r\n\r\n /**\r\n * Permet de gérer le clic du lien\r\n * @param {Event} event\r\n */\r\n const handleLinkClick = (event) => {\r\n // Empêche la propagation de l'événement pour éviter les conflits\r\n event.stopPropagation();\r\n\r\n // Vous pouvez ajouter un comportement personnalisé ici si nécessaire\r\n // Assurez-vous que le comportement par défaut du lien est déclenché\r\n // Si vous avez besoin d'ouvrir le lien dans un nouvel onglet, vous pouvez utiliser window.open\r\n if (leaf.target === \"_blank\") {\r\n window.open(leaf.href, leaf.target, leaf.rel ? { rel: leaf.rel } : undefined);\r\n event.preventDefault(); // Empêche le comportement par défaut si vous utilisez window.open\r\n } else {\r\n // Redirige l'utilisateur à partir de la page courante\r\n window.location.href = leaf.href;\r\n }\r\n };\r\n\r\n if (leaf.href) {\r\n return (\r\n <a {...attributes} href={leaf.href} target={leaf.target || \"_self\"} rel={leaf.rel || \"noopener noreferrer\"} style={style} onClick={handleLinkClick}>\r\n {tags.length === 0 ? children : tags.reduceRight((acc, tag) => React.createElement(tag, { ...attributes }, acc), children)}\r\n </a>\r\n );\r\n }\r\n\r\n return tags.length === 0 ? (\r\n <span {...attributes} style={style}>\r\n {children}\r\n </span>\r\n ) : (\r\n tags.reduceRight((acc, tag) => React.createElement(tag, { ...attributes, style }, acc), children)\r\n );\r\n};\r\n\r\nexport default Leaf;\r\n","import React from 'react';\r\n\r\n/**\r\n * Permet de générer une liste\r\n * \r\n * @param {object} props\r\n * @param {array} props.attributes - attribut permettant la fabrication de l'éléments\r\n * @param {JSX.Element} props.children - enfants de la citation\r\n * @param {object} props.element - élément courant\r\n * \r\n * @returns {JSX.Element}\r\n */\r\nconst ListElement = ({ attributes, children, element }) => {\r\n const style = { \r\n textAlign: element.align || 'left',\r\n listStyleType: element.listStyleType || 'disc'\r\n };\r\n switch (element.type) {\r\n case 'bullet-list':\r\n return <ul style={style} {...attributes}>{children}</ul>;\r\n case 'numbered-list':\r\n return <ol style={style} {...attributes}>{children}</ol>;\r\n case 'list-item':\r\n return <li style={style} {...attributes}>{children}</li>;\r\n default:\r\n return <p style={style} {...attributes}>{children}</p>;\r\n }\r\n};\r\n\r\nexport default ListElement;\r\n","import React from 'react';\r\n\r\n/**\r\n * Permet de générer une citation\r\n * \r\n * @param {object} props\r\n * @param {array} props.attributes - attribut permettant la fabrication de l'éléments\r\n * @param {JSX.Element} props.children - enfants de la citation\r\n * \r\n * @returns {JSX.Element}\r\n */\r\nconst BlockquoteElement = ({ attributes, children }) => {\r\n return (\r\n <blockquote {...attributes} style={{ borderLeft: '4px solid #ccc', paddingLeft: '10px', color: '#666', margin: '20px 0' }}>\r\n {children}\r\n </blockquote>\r\n );\r\n};\r\n\r\nexport default BlockquoteElement;\r\n","import React from 'react';\r\n\r\n/**\r\n * Permet de générer une liste de puce pour les puces non-ordonnée\r\n * \r\n * @param {object} props\r\n * @param {function} props.onChange - permet de définir la nouvelle puce\r\n * @param {string} props.selectedType - puce sélectionnée\r\n * \r\n * @returns {JSX.Element}\r\n */\r\nconst BulletTypeSelector = ({ onChange, selectedType }) => {\r\n const bulletTypes = [\r\n { value: 'disc', label: 'Disque' },\r\n { value: 'circle', label: 'Cercle' },\r\n { value: 'square', label: 'Carré' },\r\n { value: \"'✔'\", label: 'Check' },\r\n { value: \"'✘'\", label: 'Croix' },\r\n { value: \"'➢'\", label: 'Petite flèche' },\r\n { value: \"'➔'\", label: 'Flèche épaisse' }\r\n ];\r\n\r\n return (\r\n <ul className='dropdown-menu'>\r\n {bulletTypes.map((type) => (\r\n <li \r\n key={type.value} \r\n value={type.value}\r\n onClick={() => onChange(type.value)}\r\n className={`${ (selectedType && type.value === selectedType) ? 'tool--active' : ''}`}\r\n >\r\n {type.label}\r\n </li>\r\n ))}\r\n </ul>\r\n );\r\n};\r\n\r\nexport default BulletTypeSelector;\r\n","import React from 'react';\r\n\r\n/**\r\n * Permet de générer une liste de puce pour les puces numérotées\r\n * \r\n * @param {object} props\r\n * @param {function} props.onChange - permet de définir la nouvelle puce\r\n * @param {string} props.selectedType - puce sélectionnée\r\n * \r\n * @returns {JSX.Element}\r\n */\r\nconst NumeredTypeSelector = ({ onChange, selectedType }) => {\r\n const numeredTypes = [\r\n { value: 'decimal', label: 'Décimal' },\r\n { value: 'upper-roman', label: 'Lettres Romaines majuscules' },\r\n { value: 'lower-roman', label: 'Lettres Romaines minuscules' },\r\n { value: 'upper-greek', label: 'Lettres Grecques majuscules' },\r\n { value: 'lower-greek', label: 'Lettres Grecques minuscules' },\r\n ];\r\n\r\n return (\r\n <ul className='dropdown-menu'>\r\n {numeredTypes.map((type) => (\r\n <li \r\n key={type.value} \r\n value={type.value}\r\n onClick={() => onChange(type.value)}\r\n className={`${ (selectedType && type.value === selectedType) ? 'tool--active' : ''}`}\r\n >\r\n {type.label}\r\n </li>\r\n ))}\r\n </ul>\r\n );\r\n};\r\n\r\nexport default NumeredTypeSelector;\r\n","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='Edit%20/%20Add_Column'%3e%3cpath%20id='Vector'%20d='M5%2017H8M8%2017H11M8%2017V14M8%2017V20M14%2021H15C16.1046%2021%2017%2020.1046%2017%2019V5C17%203.89543%2016.1046%203%2015%203H13C11.8954%203%2011%203.89543%2011%205V11'%20stroke='%23c0c0c0'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='Edit%20/%20Add_Column'%3e%3cpath%20id='Vector'%20d='M5%2017H8M8%2017H11M8%2017V14M8%2017V20M14%2021H15C16.1046%2021%2017%2020.1046%2017%2019V5C17%203.89543%2016.1046%203%2015%203H13C11.8954%203%2011%203.89543%2011%205V11'%20stroke='%23000000'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='Edit%20/%20Add_Row'%3e%3cpath%20id='Vector'%20d='M3%2014V15C3%2016.1046%203.89543%2017%205%2017L19%2017C20.1046%2017%2021%2016.1046%2021%2015L21%2013C21%2011.8954%2020.1046%2011%2019%2011H13M10%208H7M7%208H4M7%208V5M7%208V11'%20stroke='%23c0c0c0'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='Edit%20/%20Add_Row'%3e%3cpath%20id='Vector'%20d='M3%2014V15C3%2016.1046%203.89543%2017%205%2017L19%2017C20.1046%2017%2021%2016.1046%2021%2015L21%2013C21%2011.8954%2020.1046%2011%2019%2011H13M10%208H7M7%208H4M7%208V5M7%208V11'%20stroke='%23000000'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20fill='%23000000'%20d='M86.6%209.4C74.1-3.1%2053.9-3.1%2041.4%209.4s-12.5%2032.8%200%2045.3L122.7%20136%2030.6%20228.1c-37.5%2037.5-37.5%2098.3%200%20135.8L148.1%20481.4c37.5%2037.5%2098.3%2037.5%20135.8%200L474.3%20290.9c28.1-28.1%2028.1-73.7%200-101.8L322.9%2037.7c-28.1-28.1-73.7-28.1-101.8%200L168%2090.7%2086.6%209.4zM168%20181.3l49.4%2049.4c12.5%2012.5%2032.8%2012.5%2045.3%200s12.5-32.8%200-45.3L213.3%20136l53.1-53.1c3.1-3.1%208.2-3.1%2011.3%200L429.1%20234.3c3.1%203.1%203.1%208.2%200%2011.3L386.7%20288%2067.5%20288c1.4-5.4%204.2-10.4%208.4-14.6L168%20181.3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%3e%3cpath%20fill='%23000000'%20fill-rule='evenodd'%20d='M2%206a3%203%200%200%201%203-3h14a3%203%200%200%201%203%203v12a3%203%200%200%201-3%203H5a3%203%200%200%201-3-3V6zm5%201a1%201%200%200%200%200%202h5a1%201%200%201%200%200-2H7zm8%200a1%201%200%201%200%200%202h2a1%201%200%201%200%200-2h-2zm-8%204a1%201%200%201%200%200%202h1a1%201%200%201%200%200-2H7zm4%200a1%201%200%201%200%200%202h6a1%201%200%201%200%200-2h-6zm-4%204a1%201%200%201%200%200%202h5a1%201%200%201%200%200-2H7zm8%200a1%201%200%201%200%200%202h2a1%201%200%201%200%200-2h-2z'%20clip-rule='evenodd'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20448%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20fill='%23000000'%20d='M448%20296c0%2066.3-53.7%20120-120%20120l-8%200c-17.7%200-32-14.3-32-32s14.3-32%2032-32l8%200c30.9%200%2056-25.1%2056-56l0-8-64%200c-35.3%200-64-28.7-64-64l0-64c0-35.3%2028.7-64%2064-64l64%200c35.3%200%2064%2028.7%2064%2064l0%2032%200%2032%200%2072zm-256%200c0%2066.3-53.7%20120-120%20120l-8%200c-17.7%200-32-14.3-32-32s14.3-32%2032-32l8%200c30.9%200%2056-25.1%2056-56l0-8-64%200c-35.3%200-64-28.7-64-64l0-64c0-35.3%2028.7-64%2064-64l64%200c35.3%200%2064%2028.7%2064%2064l0%2032%200%2032%200%2072z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20384%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20d='M0%2064C0%2046.3%2014.3%2032%2032%2032l48%200%2016%200%20128%200c70.7%200%20128%2057.3%20128%20128c0%2031.3-11.3%2060.1-30%2082.3c37.1%2022.4%2062%2063.1%2062%20109.7c0%2070.7-57.3%20128-128%20128L96%20480l-16%200-48%200c-17.7%200-32-14.3-32-32s14.3-32%2032-32l16%200%200-160L48%2096%2032%2096C14.3%2096%200%2081.7%200%2064zM224%20224c35.3%200%2064-28.7%2064-64s-28.7-64-64-64L112%2096l0%20128%20112%200zM112%20288l0%20128%20144%200c35.3%200%2064-28.7%2064-64s-28.7-64-64-64l-32%200-112%200z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20d='M64%20144a48%2048%200%201%200%200-96%2048%2048%200%201%200%200%2096zM192%2064c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032l288%200c17.7%200%2032-14.3%2032-32s-14.3-32-32-32L192%2064zm0%20160c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032l288%200c17.7%200%2032-14.3%2032-32s-14.3-32-32-32l-288%200zm0%20160c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032l288%200c17.7%200%2032-14.3%2032-32s-14.3-32-32-32l-288%200zM64%20464a48%2048%200%201%200%200-96%2048%2048%200%201%200%200%2096zm48-208a48%2048%200%201%200%20-96%200%2048%2048%200%201%200%2096%200z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20448%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20d='M352%2064c0-17.7-14.3-32-32-32L128%2032c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032l192%200c17.7%200%2032-14.3%2032-32zm96%20128c0-17.7-14.3-32-32-32L32%20160c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032l384%200c17.7%200%2032-14.3%2032-32zM0%20448c0%2017.7%2014.3%2032%2032%2032l384%200c17.7%200%2032-14.3%2032-32s-14.3-32-32-32L32%20416c-17.7%200-32%2014.3-32%2032zM352%20320c0-17.7-14.3-32-32-32l-192%200c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032l192%200c17.7%200%2032-14.3%2032-32z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20fill='%23000000'%20d='M512%20256c0%20.9%200%201.8%200%202.7c-.4%2036.5-33.6%2061.3-70.1%2061.3L344%20320c-26.5%200-48%2021.5-48%2048c0%203.4%20.4%206.7%201%209.9c2.1%2010.2%206.5%2020%2010.8%2029.9c6.1%2013.8%2012.1%2027.5%2012.1%2042c0%2031.8-21.6%2060.7-53.4%2062c-3.5%20.1-7%20.2-10.6%20.2C114.6%20512%200%20397.4%200%20256S114.6%200%20256%200S512%20114.6%20512%20256zM128%20288a32%2032%200%201%200%20-64%200%2032%2032%200%201%200%2064%200zm0-96a32%2032%200%201%200%200-64%2032%2032%200%201%200%200%2064zM288%2096a32%2032%200%201%200%20-64%200%2032%2032%200%201%200%2064%200zm96%2096a32%2032%200%201%200%200-64%2032%2032%200%201%200%200%2064z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='Edit%20/%20Delete_Column'%3e%3cpath%20id='Vector'%20d='M10%2021H9C7.89543%2021%207%2020.1046%207%2019V5C7%203.89543%207.89543%203%209%203H11C12.1046%203%2013%203.89543%2013%205V11M19%2016H13'%20stroke='%23c0c0c0'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='Edit%20/%20Delete_Column'%3e%3cpath%20id='Vector'%20d='M10%2021H9C7.89543%2021%207%2020.1046%207%2019V5C7%203.89543%207.89543%203%209%203H11C12.1046%203%2013%203.89543%2013%205V11M19%2016H13'%20stroke='%23000000'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='Edit%20/%20Delete_Row'%3e%3cpath%20id='Vector'%20d='M14%2016H20M21%2010V9C21%207.89543%2020.1046%207%2019%207H5C3.89543%207%203%207.89543%203%209V11C3%2012.1046%203.89543%2013%205%2013H11'%20stroke='%23c0c0c0'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20width='800px'%20height='800px'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20id='Edit%20/%20Delete_Row'%3e%3cpath%20id='Vector'%20d='M14%2016H20M21%2010V9C21%207.89543%2020.1046%207%2019%207H5C3.89543%207%203%207.89543%203%209V11C3%2012.1046%203.89543%2013%205%2013H11'%20stroke='%23000000'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/g%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20fill='%23c0c0c0'%20width='800px'%20height='800px'%20viewBox='0%200%201920%201920'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M1800%201740c0%2033-26.88%2060-60%2060H180c-33.12%200-60-27-60-60V180c0-33.12%2026.88-60%2060-60h1560c33.12%200%2060%2026.88%2060%2060v1560ZM1740%200H180C80.76%200%200%2080.76%200%20180v1560c0%2099.24%2080.76%20180%20180%20180h1560c99.24%200%20180-80.76%20180-180V180c0-99.24-80.76-180-180-180Zm-235.08%20245.388L960%20790.308l-544.92-544.92-169.68%20169.68%20544.92%20544.92-544.92%20544.92%20169.68%20169.68L960%201129.668l544.92%20544.92%20169.68-169.68-544.92-544.92%20544.92-544.92-169.68-169.68Z'%20fill-rule='evenodd'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='utf-8'?%3e%3c!--%20Uploaded%20to:%20SVG%20Repo,%20www.svgrepo.com,%20Generator:%20SVG%20Repo%20Mixer%20Tools%20--%3e%3csvg%20fill='%23000000'%20width='800px'%20height='800px'%20viewBox='0%200%201920%201920'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M1800%201740c0%2033-26.88%2060-60%2060H180c-33.12%200-60-27-60-60V180c0-33.12%2026.88-60%2060-60h1560c33.12%200%2060%2026.88%2060%2060v1560ZM1740%200H180C80.76%200%200%2080.76%200%20180v1560c0%2099.24%2080.76%20180%20180%20180h1560c99.24%200%20180-80.76%20180-180V180c0-99.24-80.76-180-180-180Zm-235.08%20245.388L960%20790.308l-544.92-544.92-169.68%20169.68%20544.92%20544.92-544.92%20544.92%20169.68%20169.68L960%201129.668l544.92%20544.92%20169.68-169.68-544.92-544.92%20544.92-544.92-169.68-169.68Z'%20fill-rule='evenodd'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20448%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20fill='%23000000'%20d='M254%2052.8C249.3%2040.3%20237.3%2032%20224%2032s-25.3%208.3-30%2020.8L57.8%20416%2032%20416c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032l96%200c17.7%200%2032-14.3%2032-32s-14.3-32-32-32l-1.8%200%2018-48%20159.6%200%2018%2048-1.8%200c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032l96%200c17.7%200%2032-14.3%2032-32s-14.3-32-32-32l-25.8%200L254%2052.8zM279.8%20304l-111.6%200L224%20155.1%20279.8%20304z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20640%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20fill='%23000000'%20d='M579.8%20267.7c56.5-56.5%2056.5-148%200-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6%201.1c-14.4%2010.3-17.7%2030.3-7.4%2044.6s30.3%2017.7%2044.6%207.4l1.6-1.1c32.1-22.9%2076-19.3%20103.8%208.6c31.5%2031.5%2031.5%2082.5%200%20114L422.3%20334.8c-31.5%2031.5-82.5%2031.5-114%200c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4%206.9-34.4-7.4-44.6s-34.4-6.9-44.6%207.4l-1.1%201.6C206.5%20251.2%20213%20330%20263%20380c56.5%2056.5%20148%2056.5%20204.5%200L579.8%20267.7zM60.2%20244.3c-56.5%2056.5-56.5%20148%200%20204.5c50%2050%20128.8%2056.5%20186.3%2015.4l1.6-1.1c14.4-10.3%2017.7-30.3%207.4-44.6s-30.3-17.7-44.6-7.4l-1.6%201.1c-32.1%2022.9-76%2019.3-103.8-8.6C74%20372%2074%20321%20105.5%20289.5L217.7%20177.2c31.5-31.5%2082.5-31.5%20114%200c27.9%2027.9%2031.5%2071.8%208.6%20103.9l-1.1%201.6c-10.3%2014.4-6.9%2034.4%207.4%2044.6s34.4%206.9%2044.6-7.4l1.1-1.6C433.5%20260.8%20427%20182%20377%20132c-56.5-56.5-148-56.5-204.5%200L60.2%20244.3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20fill='%23000000'%20d='M0%2096C0%2060.7%2028.7%2032%2064%2032l384%200c35.3%200%2064%2028.7%2064%2064l0%20320c0%2035.3-28.7%2064-64%2064L64%20480c-35.3%200-64-28.7-64-64L0%2096zM323.8%20202.5c-4.5-6.6-11.9-10.5-19.8-10.5s-15.4%203.9-19.8%2010.5l-87%20127.6L170.7%20297c-4.6-5.7-11.5-9-18.7-9s-14.2%203.3-18.7%209l-64%2080c-5.8%207.2-6.9%2017.1-2.9%2025.4s12.4%2013.6%2021.6%2013.6l96%200%2032%200%20208%200c8.9%200%2017.1-4.9%2021.2-12.8s3.6-17.4-1.4-24.7l-120-176zM112%20192a48%2048%200%201%200%200-96%2048%2048%200%201%200%200%2096z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20448%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20fill='%23c0c0c0'%20d='M0%2064C0%2046.3%2014.3%2032%2032%2032l384%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032L32%2096C14.3%2096%200%2081.7%200%2064zM192%20192c0-17.7%2014.3-32%2032-32l192%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032l-192%200c-17.7%200-32-14.3-32-32zm32%2096l192%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032l-192%200c-17.7%200-32-14.3-32-32s14.3-32%2032-32zM0%20448c0-17.7%2014.3-32%2032-32l384%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032L32%20480c-17.7%200-32-14.3-32-32zM127.8%20268.6L25.8%20347.9C15.3%20356.1%200%20348.6%200%20335.3L0%20176.7c0-13.3%2015.3-20.8%2025.8-12.6l101.9%2079.3c8.2%206.4%208.2%2018.9%200%2025.3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20448%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20fill='%23000000'%20d='M0%2064C0%2046.3%2014.3%2032%2032%2032l384%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032L32%2096C14.3%2096%200%2081.7%200%2064zM192%20192c0-17.7%2014.3-32%2032-32l192%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032l-192%200c-17.7%200-32-14.3-32-32zm32%2096l192%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032l-192%200c-17.7%200-32-14.3-32-32s14.3-32%2032-32zM0%20448c0-17.7%2014.3-32%2032-32l384%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032L32%20480c-17.7%200-32-14.3-32-32zM127.8%20268.6L25.8%20347.9C15.3%20356.1%200%20348.6%200%20335.3L0%20176.7c0-13.3%2015.3-20.8%2025.8-12.6l101.9%2079.3c8.2%206.4%208.2%2018.9%200%2025.3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20384%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20d='M128%2064c0-17.7%2014.3-32%2032-32l192%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032l-58.7%200L160%20416l64%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032L32%20480c-17.7%200-32-14.3-32-32s14.3-32%2032-32l58.7%200L224%2096l-64%200c-17.7%200-32-14.3-32-32z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20448%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20d='M288%2064c0%2017.7-14.3%2032-32%2032L32%2096C14.3%2096%200%2081.7%200%2064S14.3%2032%2032%2032l224%200c17.7%200%2032%2014.3%2032%2032zm0%20256c0%2017.7-14.3%2032-32%2032L32%20352c-17.7%200-32-14.3-32-32s14.3-32%2032-32l224%200c17.7%200%2032%2014.3%2032%2032zM0%20192c0-17.7%2014.3-32%2032-32l384%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032L32%20224c-17.7%200-32-14.3-32-32zM448%20448c0%2017.7-14.3%2032-32%2032L32%20480c-17.7%200-32-14.3-32-32s14.3-32%2032-32l384%200c17.7%200%2032%2014.3%2032%2032z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20d='M24%2056c0-13.3%2010.7-24%2024-24l32%200c13.3%200%2024%2010.7%2024%2024l0%20120%2016%200c13.3%200%2024%2010.7%2024%2024s-10.7%2024-24%2024l-80%200c-13.3%200-24-10.7-24-24s10.7-24%2024-24l16%200%200-96-8%200C34.7%2080%2024%2069.3%2024%2056zM86.7%20341.2c-6.5-7.4-18.3-6.9-24%201.2L51.5%20357.9c-7.7%2010.8-22.7%2013.3-33.5%205.6s-13.3-22.7-5.6-33.5l11.1-15.6c23.7-33.2%2072.3-35.6%2099.2-4.9c21.3%2024.4%2020.8%2060.9-1.1%2084.7L86.8%20432l33.2%200c13.3%200%2024%2010.7%2024%2024s-10.7%2024-24%2024l-88%200c-9.5%200-18.2-5.6-22-14.4s-2.1-18.9%204.3-25.9l72-78c5.3-5.8%205.4-14.6%20.3-20.5zM224%2064l256%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032l-256%200c-17.7%200-32-14.3-32-32s14.3-32%2032-32zm0%20160l256%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032l-256%200c-17.7%200-32-14.3-32-32s14.3-32%2032-32zm0%20160l256%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032l-256%200c-17.7%200-32-14.3-32-32s14.3-32%2032-32z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20448%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20fill='%23c0c0c0'%20d='M0%2064C0%2046.3%2014.3%2032%2032%2032l384%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032L32%2096C14.3%2096%200%2081.7%200%2064zM192%20192c0-17.7%2014.3-32%2032-32l192%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032l-192%200c-17.7%200-32-14.3-32-32zm32%2096l192%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032l-192%200c-17.7%200-32-14.3-32-32s14.3-32%2032-32zM0%20448c0-17.7%2014.3-32%2032-32l384%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032L32%20480c-17.7%200-32-14.3-32-32zM.2%20268.6c-8.2-6.4-8.2-18.9%200-25.3l101.9-79.3c10.5-8.2%2025.8-.7%2025.8%2012.6l0%20158.6c0%2013.3-15.3%2020.8-25.8%2012.6L.2%20268.6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20448%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20fill='%23000000'%20d='M0%2064C0%2046.3%2014.3%2032%2032%2032l384%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032L32%2096C14.3%2096%200%2081.7%200%2064zM192%20192c0-17.7%2014.3-32%2032-32l192%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032l-192%200c-17.7%200-32-14.3-32-32zm32%2096l192%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032l-192%200c-17.7%200-32-14.3-32-32s14.3-32%2032-32zM0%20448c0-17.7%2014.3-32%2032-32l384%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032L32%20480c-17.7%200-32-14.3-32-32zM.2%20268.6c-8.2-6.4-8.2-18.9%200-25.3l101.9-79.3c10.5-8.2%2025.8-.7%2025.8%2012.6l0%20158.6c0%2013.3-15.3%2020.8-25.8%2012.6L.2%20268.6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3e%3csvg%20xmlns:dc='http://purl.org/dc/elements/1.1/'%20xmlns:cc='http://creativecommons.org/ns%23'%20xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23'%20xmlns:svg='http://www.w3.org/2000/svg'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'%20xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'%20inkscape:version='1.0%20(4035a4fb49,%202020-05-01)'%20sodipodi:docname='redo--grey.svg'%20id='svg856'%20version='1.1'%20viewBox='0%200%20512%20512'%3e%3cmetadata%20id='metadata862'%3e%3crdf:RDF%3e%3ccc:Work%20rdf:about=''%3e%3cdc:format%3eimage/svg+xml%3c/dc:format%3e%3cdc:type%20rdf:resource='http://purl.org/dc/dcmitype/StillImage'%20/%3e%3c/cc:Work%3e%3c/rdf:RDF%3e%3c/metadata%3e%3cdefs%20id='defs860'%20/%3e%3csodipodi:namedview%20inkscape:current-layer='svg856'%20inkscape:window-maximized='1'%20inkscape:window-y='-8'%20inkscape:window-x='-8'%20inkscape:cy='262.97976'%20inkscape:cx='209.07679'%20inkscape:zoom='0.71777344'%20showgrid='false'%20id='namedview858'%20inkscape:window-height='961'%20inkscape:window-width='1280'%20inkscape:pageshadow='2'%20inkscape:pageopacity='0'%20guidetolerance='10'%20gridtolerance='10'%20objecttolerance='10'%20borderopacity='1'%20bordercolor='%23666666'%20pagecolor='%23ffffff'%20/%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20id='path854'%20d='m%20447.525,224%20h%208.5%20c%2013.3,0%2024,-10.7%2024,-24%20V%2072%20c%200,-9.7%20-5.8,-18.5%20-14.8,-22.2%20-9,-3.7%20-19.3,-1.7%20-26.2,5.2%20l%20-41.6,41.6%20c%20-87.6,-86.5%20-228.7,-86.2%20-315.8,1%20-87.5,87.5%20-87.5,229.3%200,316.8%2087.5,87.5%20229.3,87.5%20316.8,0%2012.5,-12.5%2012.5,-32.8%200,-45.3%20-12.5,-12.5%20-32.8,-12.5%20-45.3,0%20-62.5,62.5%20-163.8,62.5%20-226.3,0%20-62.5,-62.5%20-62.5,-163.8%200,-226.3%2062.2,-62.2%20162.7,-62.5%20225.3,-1%20l%20-41.1,41.2%20c%20-6.9,6.9%20-8.9,17.2%20-5.2,26.2%203.7,9%2012.5,14.8%2022.2,14.8%20z'%20fill='%23c0c0c0'%20/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20d='M463.5%20224l8.5%200c13.3%200%2024-10.7%2024-24l0-128c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2%205.2L413.4%2096.6c-87.6-86.5-228.7-86.2-315.8%201c-87.5%2087.5-87.5%20229.3%200%20316.8s229.3%2087.5%20316.8%200c12.5-12.5%2012.5-32.8%200-45.3s-32.8-12.5-45.3%200c-62.5%2062.5-163.8%2062.5-226.3%200s-62.5-163.8%200-226.3c62.2-62.2%20162.7-62.5%20225.3-1L327%20183c-6.9%206.9-8.9%2017.2-5.2%2026.2s12.5%2014.8%2022.2%2014.8l119.5%200z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20448%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20d='M448%2064c0%2017.7-14.3%2032-32%2032L192%2096c-17.7%200-32-14.3-32-32s14.3-32%2032-32l224%200c17.7%200%2032%2014.3%2032%2032zm0%20256c0%2017.7-14.3%2032-32%2032l-224%200c-17.7%200-32-14.3-32-32s14.3-32%2032-32l224%200c17.7%200%2032%2014.3%2032%2032zM0%20192c0-17.7%2014.3-32%2032-32l384%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032L32%20224c-17.7%200-32-14.3-32-32zM448%20448c0%2017.7-14.3%2032-32%2032L32%20480c-17.7%200-32-14.3-32-32s14.3-32%2032-32l384%200c17.7%200%2032%2014.3%2032%2032z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20576%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20fill='%23000000'%20d='M64%20128l0-32%2064%200%200%20320-32%200c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032l128%200c17.7%200%2032-14.3%2032-32s-14.3-32-32-32l-32%200%200-320%2064%200%200%2032c0%2017.7%2014.3%2032%2032%2032s32-14.3%2032-32l0-48c0-26.5-21.5-48-48-48L160%2032%2048%2032C21.5%2032%200%2053.5%200%2080l0%2048c0%2017.7%2014.3%2032%2032%2032s32-14.3%2032-32zM502.6%2041.4c-12.5-12.5-32.8-12.5-45.3%200l-64%2064c-9.2%209.2-11.9%2022.9-6.9%2034.9s16.6%2019.8%2029.6%2019.8l32%200%200%20192-32%200c-12.9%200-24.6%207.8-29.6%2019.8s-2.2%2025.7%206.9%2034.9l64%2064c12.5%2012.5%2032.8%2012.5%2045.3%200l64-64c9.2-9.2%2011.9-22.9%206.9-34.9s-16.6-19.8-29.6-19.8l-32%200%200-192%2032%200c12.9%200%2024.6-7.8%2029.6-19.8s2.2-25.7-6.9-34.9l-64-64z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20d='M161.3%20144c3.2-17.2%2014-30.1%2033.7-38.6c21.1-9%2051.8-12.3%2088.6-6.5c11.9%201.9%2048.8%209.1%2060.1%2012c17.1%204.5%2034.6-5.6%2039.2-22.7s-5.6-34.6-22.7-39.2c-14.3-3.8-53.6-11.4-66.6-13.4c-44.7-7-88.3-4.2-123.7%2010.9c-36.5%2015.6-64.4%2044.8-71.8%2087.3c-.1%20.6-.2%201.1-.2%201.7c-2.8%2023.9%20.5%2045.6%2010.1%2064.6c4.5%209%2010.2%2016.9%2016.7%2023.9L32%20224c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032l448%200c17.7%200%2032-14.3%2032-32s-14.3-32-32-32l-209.9%200-.4-.1-1.1-.3c-36-10.8-65.2-19.6-85.2-33.1c-9.3-6.3-15-12.6-18.2-19.1c-3.1-6.1-5.2-14.6-3.8-27.4zM348.9%20337.2c2.7%206.5%204.4%2015.8%201.9%2030.1c-3%2017.6-13.8%2030.8-33.9%2039.4c-21.1%209-51.7%2012.3-88.5%206.5c-18-2.9-49.1-13.5-74.4-22.1c-5.6-1.9-11-3.7-15.9-5.4c-16.8-5.6-34.9%203.5-40.5%2020.3s3.5%2034.9%2020.3%2040.5c3.6%201.2%207.9%202.7%2012.7%204.3c0%200%200%200%200%200s0%200%200%200c24.9%208.5%2063.6%2021.7%2087.6%2025.6c0%200%200%200%200%200l.2%200c44.7%207%2088.3%204.2%20123.7-10.9c36.5-15.6%2064.4-44.8%2071.8-87.3c3.6-21%202.7-40.4-3.1-58.1l-75.7%200c7%205.6%2011.4%2011.2%2013.9%2017.2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20d='M32%2064C14.3%2064%200%2078.3%200%2096s14.3%2032%2032%2032l15.3%200%2089.6%20128L47.3%20384%2032%20384c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032l32%200c10.4%200%2020.2-5.1%2026.2-13.6L176%20311.8l85.8%20122.6c6%208.6%2015.8%2013.6%2026.2%2013.6l32%200c17.7%200%2032-14.3%2032-32s-14.3-32-32-32l-15.3%200L215.1%20256l89.6-128%2015.3%200c17.7%200%2032-14.3%2032-32s-14.3-32-32-32l-32%200c-10.4%200-20.2%205.1-26.2%2013.6L176%20200.2%2090.2%2077.6C84.2%2069.1%2074.4%2064%2064%2064L32%2064zM480%20320c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32%2016c-15.8%207.9-22.2%2027.1-14.3%2042.9C393%20361.5%20404.3%20368%20416%20368l0%2080c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032l32%200%2032%200c17.7%200%2032-14.3%2032-32s-14.3-32-32-32l0-128z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20d='M480%2032c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32%2016c-15.8%207.9-22.2%2027.1-14.3%2042.9C393%2073.5%20404.3%2080%20416%2080l0%2080c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032l32%200%2032%200c17.7%200%2032-14.3%2032-32s-14.3-32-32-32l0-128zM32%2064C14.3%2064%200%2078.3%200%2096s14.3%2032%2032%2032l15.3%200%2089.6%20128L47.3%20384%2032%20384c-17.7%200-32%2014.3-32%2032s14.3%2032%2032%2032l32%200c10.4%200%2020.2-5.1%2026.2-13.6L176%20311.8l85.8%20122.6c6%208.6%2015.8%2013.6%2026.2%2013.6l32%200c17.7%200%2032-14.3%2032-32s-14.3-32-32-32l-15.3%200L215.1%20256l89.6-128%2015.3%200c17.7%200%2032-14.3%2032-32s-14.3-32-32-32l-32%200c-10.4%200-20.2%205.1-26.2%2013.6L176%20200.2%2090.2%2077.6C84.2%2069.1%2074.4%2064%2064%2064L32%2064z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20fill='%23000000'%20d='M64%20256l0-96%20160%200%200%2096L64%20256zm0%2064l160%200%200%2096L64%20416l0-96zm224%2096l0-96%20160%200%200%2096-160%200zM448%20256l-160%200%200-96%20160%200%200%2096zM64%2032C28.7%2032%200%2060.7%200%2096L0%20416c0%2035.3%2028.7%2064%2064%2064l384%200c35.3%200%2064-28.7%2064-64l0-320c0-35.3-28.7-64-64-64L64%2032z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20448%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20d='M16%2064c0-17.7%2014.3-32%2032-32l96%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032l-16%200%200%20128c0%2053%2043%2096%2096%2096s96-43%2096-96l0-128-16%200c-17.7%200-32-14.3-32-32s14.3-32%2032-32l96%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032l-16%200%200%20128c0%2088.4-71.6%20160-160%20160s-160-71.6-160-160L64%2096%2048%2096C30.3%2096%2016%2081.7%2016%2064zM0%20448c0-17.7%2014.3-32%2032-32l384%200c17.7%200%2032%2014.3%2032%2032s-14.3%2032-32%2032L32%20480c-17.7%200-32-14.3-32-32z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20fill='%23c0c0c0'%20d='M48.5%20224L40%20224c-13.3%200-24-10.7-24-24L16%2072c0-9.7%205.8-18.5%2014.8-22.2s19.3-1.7%2026.2%205.2L98.6%2096.6c87.6-86.5%20228.7-86.2%20315.8%201c87.5%2087.5%2087.5%20229.3%200%20316.8s-229.3%2087.5-316.8%200c-12.5-12.5-12.5-32.8%200-45.3s32.8-12.5%2045.3%200c62.5%2062.5%20163.8%2062.5%20226.3%200s62.5-163.8%200-226.3c-62.2-62.2-162.7-62.5-225.3-1L185%20183c6.9%206.9%208.9%2017.2%205.2%2026.2s-12.5%2014.8-22.2%2014.8L48.5%20224z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'%3e%3c!--!Font%20Awesome%20Free%206.7.2%20by%20@fontawesome%20-%20https://fontawesome.com%20License%20-%20https://fontawesome.com/license/free%20Copyright%202025%20Fonticons,%20Inc.--%3e%3cpath%20d='M48.5%20224L40%20224c-13.3%200-24-10.7-24-24L16%2072c0-9.7%205.8-18.5%2014.8-22.2s19.3-1.7%2026.2%205.2L98.6%2096.6c87.6-86.5%20228.7-86.2%20315.8%201c87.5%2087.5%2087.5%20229.3%200%20316.8s-229.3%2087.5-316.8%200c-12.5-12.5-12.5-32.8%200-45.3s32.8-12.5%2045.3%200c62.5%2062.5%20163.8%2062.5%20226.3%200s62.5-163.8%200-226.3c-62.2-62.2-162.7-62.5-225.3-1L185%20183c6.9%206.9%208.9%2017.2%205.2%2026.2s-12.5%2014.8-22.2%2014.8L48.5%20224z'/%3e%3c/svg%3e\"","// src/imageImports.js\r\n\r\n// Importer toutes les images\r\nimport addColumnGrey from '../../images/addColumn--grey.svg';\r\nimport addColumn from '../../images/addColumn.svg';\r\nimport addRowGrey from '../../images/addRow--grey.svg';\r\nimport addRow from '../../images/addRow.svg';\r\nimport bgColor from '../../images/bgColor.svg';\r\nimport blockCode from '../../images/blockCode.svg';\r\nimport blockquote from '../../images/blockquote.svg';\r\nimport bold from '../../images/bold.svg';\r\nimport bulletList from '../../images/bulletList.svg';\r\nimport center from '../../images/center.svg';\r\nimport color from '../../images/color.svg';\r\nimport deleteColumnGrey from '../../images/deleteColumn--grey.svg';\r\nimport deleteColumn from '../../images/deleteColumn.svg';\r\nimport deleteRowGrey from '../../images/deleteRow--grey.svg';\r\nimport deleteRow from '../../images/deleteRow.svg';\r\nimport deleteTableGrey from '../../images/deleteTable--grey.svg';\r\nimport deleteTable from '../../images/deleteTable.svg';\r\nimport fontFamily from '../../images/fontFamily.svg';\r\nimport href from '../../images/href.svg';\r\nimport image from '../../images/image.svg';\r\nimport indentGrey from '../../images/indent--grey.svg';\r\nimport indent from '../../images/indent.svg';\r\nimport italic from '../../images/italic.svg';\r\nimport left from '../../images/left.svg';\r\nimport numberedList from '../../images/numberedList.svg';\r\nimport outdentGrey from '../../images/outdent--grey.svg';\r\nimport outdent from '../../images/outdent.svg';\r\nimport redoGrey from '../../images/redo--grey.svg';\r\nimport redo from '../../images/redo.svg';\r\nimport right from '../../images/right.svg';\r\nimport size from '../../images/size.svg';\r\nimport strikethrough from '../../images/strikethrough.svg';\r\nimport subscript from '../../images/subscript.svg';\r\nimport superscript from '../../images/superscript.svg';\r\nimport table from '../../images/table.svg';\r\nimport underline from '../../images/underline.svg';\r\nimport undoGrey from '../../images/undo--grey.svg';\r\nimport undo from '../../images/undo.svg';\r\n\r\n// Exporter les images sous forme d'objet\r\nconst images = {\r\n addColumnGrey,\r\n addColumn,\r\n addRowGrey,\r\n addRow,\r\n bgColor,\r\n blockCode,\r\n blockquote,\r\n bold,\r\n bulletList,\r\n center,\r\n color,\r\n deleteColumnGrey,\r\n deleteColumn,\r\n deleteRowGrey,\r\n deleteRow,\r\n deleteTableGrey,\r\n deleteTable,\r\n fontFamily,\r\n href,\r\n image,\r\n indentGrey,\r\n indent,\r\n italic,\r\n left,\r\n numberedList,\r\n outdentGrey,\r\n outdent,\r\n redoGrey,\r\n redo,\r\n right,\r\n size,\r\n strikethrough,\r\n subscript,\r\n superscript,\r\n table,\r\n underline,\r\n undoGrey,\r\n undo,\r\n};\r\nexport default images","import React, { useState } from 'react';\r\nimport CustomEditor from '../CustomEditor';\r\nimport BulletTypeSelector from '../form/BulletTypeSelector';\r\nimport NumeredTypeSelector from '../form/NumeredTypeSelector';\r\nimport images from '../imageImport';\r\n\r\n/**\r\n * Ce composant affiche le formulaire de changement de puces (liste non-ordonnée ou numérotée)\r\n * \r\n * @param {object} props\r\n * @param {string} props.editor - éditeur de texte\r\n * @param {string} props.format - format sélectionné\r\n * @param {string} props.isActive - État de la liste sélectionnée\r\n * @param {function} props.onMouseDown - Permet de définir l'élément comme une liste\r\n * \r\n * @returns {JSX.Element}\r\n */\r\nconst BlockListDropdown = ({ editor, format, isActive, onMouseDown }) => {\r\n\r\n const [showBulletOptions, setShowBulletOptions] = useState(false);\r\n\r\n /**\r\n * Ce composant permet de définir la puce sélectionée\r\n * \r\n * @param {string} bulletType - puce sélectionnée \r\n */\r\n const handleBulletTypeChange = (bulletType) => {\r\n CustomEditor.toggleBlock(editor, format === 'bulletList' ? 'bullet-list' : 'numbered-list', bulletType);\r\n setShowBulletOptions(false); // Fermer le menu après sélection\r\n };\r\n\r\n return (\r\n <>\r\n <button\r\n className={`tool tool--${isActive ? 'active' : 'inactive'}`}\r\n >\r\n <img\r\n onMouseDown={event => {\r\n event.preventDefault();\r\n onMouseDown(format);\r\n }}\r\n src={images[format]} alt={format}\r\n />\r\n <div\r\n className='tool tool--arrow'\r\n onClick={() => setShowBulletOptions(!showBulletOptions)}\r\n >\r\n {showBulletOptions ? \"↑\" : \"↓\"}\r\n </div>\r\n </button>\r\n {showBulletOptions && (\r\n format === \"bulletList\" ? (\r\n <BulletTypeSelector\r\n onChange={handleBulletTypeChange}\r\n />\r\n ) : (\r\n <NumeredTypeSelector\r\n onChange={handleBulletTypeChange}\r\n />\r\n )\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default BlockListDropdown;\r\n","import images from \"../imageImport\";\r\n\r\n/**\r\n * Ce composant permet d'afficher un menu déroulant en fonction de la fonctionnalité sélectionnée\r\n * \r\n * @param {object} props\r\n * @param {boolean} props.disabled - Active/désactive le bouton d'activation\r\n * @param {array} props.elements - Éléments à afficher\r\n * @param {string} props.elementSelected - Élément sélectionné\r\n * @param {string} props.format - format appliqué\r\n * @param {boolean} props.isOpen - État du formulaire (ouvert, fermé)\r\n * @param {func} props.setIsOpen - Change l'état du formulaire\r\n * @param {func} props.onClick - Appliquer le nouveau format\r\n * \r\n * @return {JSX.Element}\r\n */\r\nexport default function ContainerDropdown({ disabled = false, elements, elementSelected, format, isOpen, setIsOpen, onClick }) {\r\n \r\n /**\r\n * Permet de gérer l'affichage du formulaire\r\n * \r\n * return {void}\r\n */\r\n const toggleForm = () => {\r\n setIsOpen(!isOpen);\r\n }\r\n\r\n /**\r\n * Permet de sélectionner l'élément de la liste\r\n * \r\n * @param {string} element\r\n * \r\n * return {void}\r\n */\r\n const selectElement = (element) => {\r\n onClick(element)\r\n setIsOpen(false)\r\n }\r\n\r\n return (\r\n <div className=\"dropdown tool\">\r\n <button onClick={toggleForm} className=\"dropdown-toggle\" disabled={disabled}>\r\n <img src={images[format]} alt={format} />\r\n </button>\r\n {isOpen && (\r\n <ul className=\"dropdown-menu\">\r\n {elements.map((element, index) => (\r\n <li className={`${(elementSelected && element === elementSelected) ? 'tool--active' : ''}`} key={index} onClick={() => selectElement(element)}>\r\n {element}\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n )\r\n}","import React, { useState } from 'react';\r\nimport ContainerDropdown from './ContainerDropdown';\r\n\r\n/**\r\n * Ce composant affiche le formulaire de sélection de la taille de police\r\n * \r\n * @param {object} props \r\n * @param {boolean} props.disabled - État du bouton (actif/inactif)\r\n * @param {string} props.fontFamilySelected - taille sélectionnée\r\n * @param {func} props.onSelectFontFamily - Fonction permettant de changer la taille de police\r\n * \r\n * @returns {JSX.Element}\r\n */\r\nconst FontSizeDropdown = ({ disabled, sizeSelected, onSelectSize }) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const fontSizes = ['10px', '12px', '14px', '16px', '18px', '20px', '24px', '28px', '36px'];\r\n\r\n return (\r\n <ContainerDropdown\r\n disabled={disabled}\r\n elements={fontSizes}\r\n elementSelected={sizeSelected}\r\n format={\"size\"}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n onClick={onSelectSize}\r\n />\r\n );\r\n};\r\n\r\nexport default FontSizeDropdown;\r\n","import React, { useState } from 'react';\r\nimport ContainerDropdown from './ContainerDropdown';\r\n\r\n/**\r\n * Ce composant affiche le formulaire de sélection de la police d'écriture\r\n * \r\n * @param {object} props \r\n * @param {string} props.fontFamilySelected - police sélectionnée\r\n * @param {func} props.onSelectFontFamily - Fonction permettant de changer la police d'écriture\r\n * \r\n * @returns {JSX.Element}\r\n */\r\nconst FontFamilyDropdown = ({ fontFamilySelected, onSelectFontFamily }) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const fontFamilies = [\"Arial\", \"Arial Black\", \"Bookman\", \"Comic Sans MS\", \"Courier\", \"Courier New\", \"Garamond\", \"Georgia\", \"Helvetica\", \"Impact\", \"Palatino\", \"Times\", \"Times New Roman\", \"Trebuchet MS\", \"Verdana\"];\r\n\r\n return (\r\n <ContainerDropdown\r\n elements={fontFamilies}\r\n elementSelected={fontFamilySelected}\r\n format={\"fontFamily\"}\r\n isOpen={isOpen}\r\n setIsOpen={setIsOpen}\r\n onClick={onSelectFontFamily}\r\n />\r\n );\r\n};\r\n\r\nexport default FontFamilyDropdown;\r\n","import React, { useState } from 'react';\r\nimport CustomEditor from './utils/CustomEditor';\r\nimport BlockListDropdown from './utils/dropdown/BlockListDropdown';\r\nimport FontSizeDropdown from './utils/dropdown/FontSizeDropdown';\r\nimport FontFamilyDropdown from './utils/dropdown/FontFamilyDropdown';\r\nimport images from './utils/imageImport';\r\n\r\n/**\r\n * Ce composant permet d'afficher la liste des boutons de fonctionnalité\r\n * \r\n * @param {object} props \r\n * @param {string} activeBlock - Type de bloc actif\r\n * @param {object} editor - Éditeur de texte\r\n * @param {string} format - format de texte sélectionné\r\n * @param {bool} isActive - état du format (actif ou non)\r\n * @param {function} onMouseDown - Fonction déclenchée lors du clic de la souris \r\n * @returns {JSX.Element}\r\n */\r\nconst FormatButton = ({ activeBlock, editor, format, isActive, onMouseDown }) => {\r\n const [selectedFontFamily, setSelectedFontFamily] = useState('')\r\n const isHeading = activeBlock === 'h1' || activeBlock === 'h2';\r\n\r\n /**\r\n * Cette fonction permet d'appliquer la taille de texte\r\n * \r\n * @param {string} size | Taille de texte\r\n * @returns {void}\r\n */\r\n const handleFontSizeChange = (size) => {\r\n CustomEditor.applyFontSize(editor, size);\r\n };\r\n\r\n /**\r\n * Cette fonction permet d'appliquer le nouveau style d'écriture\r\n * \r\n * @param {string} fontFamily | Nouvelle police d'écriture\r\n * @returns {void}\r\n */\r\n const handleFontFamilyChange = (fontFamily) => {\r\n CustomEditor.applyFontFamily(editor, fontFamily);\r\n setSelectedFontFamily(fontFamily);\r\n };\r\n\r\n /**\r\n * Premier cas : Affiche les boutons d'indentation\r\n * Deuxième cas : Affiche le bouton de taille de police\r\n * Troisième cas : Affiche le bouton de police d'écriture\r\n * Quatrième cas : Affiche le bouton de sélection de puces\r\n * Cinquième cas : Les autres boutons disponibles\r\n * \r\n */\r\n return (\r\n (format === 'indent' || format === \"outdent\") ? (\r\n <div style={{ display: 'flex' }}>\r\n <button\r\n className='tool'\r\n onClick={() => format === 'indent' ? CustomEditor.handleIndent(editor) : CustomEditor.handleOutdent(editor)}\r\n disabled={!isActive}\r\n >\r\n <img src={isActive ? images[format] : images[format + \"Grey\"]} alt=\"Indentation\" />\r\n </button>\r\n </div>\r\n ) : format === 'fontSize' ? (\r\n <FontSizeDropdown sizeSelected={isActive} onSelectSize={handleFontSizeChange} disabled={isHeading} />\r\n ) : format === 'fontFamily' ? (\r\n <FontFamilyDropdown\r\n fontFamilySelected={selectedFontFamily}\r\n onSelectFontFamily={handleFontFamilyChange}\r\n />\r\n ) : (format === \"bulletList\" || format === 'numberedList') ? (\r\n <div className='dropdown' style={{ display: 'flex' }}>\r\n <BlockListDropdown\r\n editor={editor}\r\n format={format}\r\n isActive={isActive}\r\n onMouseDown={() => {\r\n format = format === 'bulletList' ? 'bullet-list' : 'numbered-list';\r\n CustomEditor.toggleBlock(editor, format);\r\n }}\r\n />\r\n </div>\r\n ) : (\r\n <button\r\n onMouseDown={event => {\r\n event.preventDefault();\r\n onMouseDown(format);\r\n }}\r\n className={`tool tool--${isActive ? 'active' : 'inactive'}`}\r\n >\r\n <img src={images[format]} alt={format} />\r\n </button>\r\n )\r\n );\r\n};\r\n\r\nexport default FormatButton;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport CustomEditor from \"../CustomEditor\";\r\n\r\n/**\r\n * Permet de générer le formulaire de sélection de couleur\r\n * \r\n * @param {object} props\r\n * @param {function} props.onClose - ferme le formulaire\r\n * @param {string} props.initialUrl - url déjà renseignée\r\n * @param {boolean} props.isOpenInNewTab - permet d'ouvrir le lien dans une nouvelle fenêtre ou l'onglet courant\r\n * \r\n * @returns {JSX.Element}\r\n */\r\nconst LinkForm = ({ editor, onClose, initialUrl = \"\", isOpenInNewTab }) => {\r\n const [url, setUrl] = useState(\"\");\r\n const [openInNewTab, setOpenInNewTab] = useState(false);\r\n\r\n /**\r\n * Permet d'appliquer l'url rensigné\r\n * @returns {void}\r\n */\r\n const handleUpdateLink = () => {\r\n if (url) {\r\n CustomEditor.updateLink(editor, url, openInNewTab);\r\n onClose();\r\n }\r\n };\r\n\r\n /**\r\n * Supprime l'url\r\n * @returns {void}\r\n */\r\n const handleRemoveLink = () => {\r\n CustomEditor.removeLink(editor);\r\n onClose();\r\n };\r\n\r\n useEffect(() => {\r\n setUrl(initialUrl);\r\n setOpenInNewTab(isOpenInNewTab)\r\n }, [initialUrl, isOpenInNewTab]);\r\n\r\n return (\r\n <div className=\"link-form\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"Enter URL\"\r\n value={url}\r\n onChange={(e) => setUrl(e.target.value)}\r\n />\r\n <label>\r\n <input\r\n type=\"checkbox\"\r\n checked={openInNewTab}\r\n onChange={() => setOpenInNewTab(!openInNewTab)}\r\n />\r\n Ouvrir dans un nouvel onglet\r\n </label>\r\n <div className=\"link-form-actions\">\r\n {initialUrl ? (\r\n <>\r\n <button onClick={handleUpdateLink}>Modifier</button>\r\n <button onClick={handleRemoveLink}>Supprimer</button>\r\n </>\r\n ) : (\r\n <button onClick={handleUpdateLink}>Valider</button>\r\n )}\r\n <button onClick={onClose}>Annuler</button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default LinkForm;\r\n","import { useEffect, useState } from \"react\";\r\nimport { SketchPicker } from \"react-color\";\r\n\r\n/**\r\n * Permet de générer le formulaire de sélection de couleur\r\n * \r\n * @param {object} props\r\n * @param {string} props.selectedColor - couleur sélectionnée\r\n * @param {function} props.onSelectColor - change le couleur\r\n * @param {function} props.onClose - Fermer le formulaire\r\n * \r\n * @returns {JSX.Element}\r\n */\r\nexport default function ColorPickerPopup({ selectedColor, onSelectColor, onClose }) {\r\n const [color, setColor] = useState('#ffffff');\r\n\r\n /**\r\n * Permet de définir la couleur sélectionnée\r\n * @param {string} color\r\n * @returns {void}\r\n */\r\n const handleChangeComplete = (color) => {\r\n setColor(color.hex);\r\n };\r\n\r\n /**\r\n * Permet d'appliquer la couleur sélectionnée\r\n * @returns {void}\r\n */\r\n const handleApplyColor = () => {\r\n if (color) {\r\n onSelectColor(color);\r\n onClose();\r\n }\r\n };\r\n\r\n /**\r\n * Annule et réinitialise la couleur\r\n * @returns {void}\r\n */\r\n const handleCancel = () => {\r\n onSelectColor('')\r\n onClose()\r\n }\r\n\r\n useEffect(() => {\r\n if (selectedColor) {\r\n setColor(selectedColor)\r\n }\r\n }, [selectedColor])\r\n\r\n return (\r\n <div className=\"color-picker-popup\">\r\n <SketchPicker color={color} onChangeComplete={handleChangeComplete} />\r\n <div className=\"color-picker-actions\">\r\n <button onClick={handleApplyColor} disabled={!color}>Appliquer</button>\r\n <button onClick={handleCancel}>Annuler</button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n","import React from 'react';\r\n\r\n/**\r\n * Ce composant affiche le formulaire de changement de type de bloc (paragraphe, titre ou sous-titre)\r\n * \r\n * @param {object} props\r\n * @param {string} props.activeBlock - type de bloc sélectionné\r\n * @param {function} props.onChange - Permet de changer le type de bloc\r\n * \r\n * @returns {JSX.Element}\r\n */\r\nconst BlockTypeDropdown = ({ activeBlock, onChange }) => {\r\n const blockTypes = [\r\n {\r\n type: 'paragraph',\r\n name: 'Paragraphe'\r\n }, {\r\n type: 'h1',\r\n name: 'Titre'\r\n }, {\r\n type: 'h2', \r\n name: 'Sous-titre'\r\n }\r\n ];\r\n\r\n /**\r\n * Permet de changer de type de bloc\r\n * \r\n * @param {Event} event\r\n * @return {JSX.Element} \r\n */\r\n const handleChange = (event) => {\r\n const selectedBlock = event.target.value;\r\n onChange(selectedBlock);\r\n };\r\n\r\n return (\r\n <select value={activeBlock} onChange={handleChange}>\r\n {blockTypes.map((block) => (\r\n <option key={block.type} value={block.type}>\r\n {block.name}\r\n </option>\r\n ))}\r\n </select>\r\n );\r\n};\r\n\r\nexport default BlockTypeDropdown;\r\n","import React, { useState } from 'react';\r\nimport CustomEditor from '../CustomEditor';\r\nimport images from '../imageImport';\r\n\r\n/**\r\n * Ce composant permet de gérer l'affichage du formulaire de sélection de langage de code\r\n * \r\n * @param {object} props\r\n * @param {object} props.editor | éditeur de texte\r\n * @param {string} props.selectedLanguage | langage sélectionné dans le bloc courant\r\n * @param {function} props.setSelectedLanguage | Modificateur du langage\r\n * @returns {JSX.Element}\r\n */\r\nconst LanguageDropdown = ({ editor, selectedLanguage, setSelectedLanguage }) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const languages = {\r\n cs: \"C#\",\r\n cpp: \"C++\",\r\n css: \"CSS\",\r\n diff: \"Diff\",\r\n html: \"HTML\",\r\n java: \"Java\",\r\n javascript: \"JavaScript\",\r\n php: \"PHP\",\r\n python: \"Python\",\r\n ruby: \"Ruby\",\r\n typescript: \"TypeScript\",\r\n xml: \"XML\",\r\n // Ajoutez d'autres langages supportés par highlight.js\r\n };\r\n\r\n /**\r\n * Permet d'afficher le formulaire\r\n * \r\n * @return {void}\r\n */\r\n const toggleForm = () => {\r\n setIsOpen(!isOpen);\r\n };\r\n\r\n /**\r\n * Permet de modifier le langage sélectionné\r\n * \r\n * @param {string} language | Langage sélectionné\r\n * @retruns {void}\r\n */\r\n const handleLanguageChange = (language) => {\r\n setSelectedLanguage(language);\r\n CustomEditor.handleCode(editor, language);\r\n setIsOpen(false); // Fermer le menu après sélection\r\n };\r\n\r\n return (\r\n <div className={`dropdown tool ${(selectedLanguage && selectedLanguage !== 'init' && selectedLanguage !== '') ? 'tool--active' : ''}`}>\r\n <button className='dropdown-toggle' onClick={toggleForm}>\r\n <img src={images.blockCode} alt=\"Language Selector\" />\r\n </button>\r\n {isOpen && (\r\n <ul className=\"dropdown-menu\">\r\n {selectedLanguage && (\r\n <li onClick={() => handleLanguageChange('init')}>Réinitialiser</li>\r\n )}\r\n {Object.keys(languages).map((lang) => (\r\n <li\r\n key={lang}\r\n onClick={() => handleLanguageChange(lang)}\r\n className={`${(selectedLanguage && lang === selectedLanguage) ? 'tool--active' : ''}`}\r\n style={{ cursor: 'pointer', padding: '5px 10px' }}\r\n >\r\n {languages[lang]}\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default LanguageDropdown;\r\n","import CustomEditor from \"../CustomEditor\";\r\nimport images from \"../imageImport\";\r\n\r\n/**\r\n * Permet de générer le formulaire d'insertion d'images\r\n * \r\n * @param {object} props\r\n * @param {object} props.editor - éditeur de texte\r\n * \r\n * @returns {JSX.Element}\r\n */\r\nconst ImageForm = ({editor}) => {\r\n return (\r\n <div className=\"tool image-upload-container\">\r\n <input\r\n id=\"file-input\"\r\n type=\"file\"\r\n accept=\"image/*\"\r\n onChange={(e) => CustomEditor.handleFileChange(e, editor)}\r\n className=\"hidden-file-input\"\r\n />\r\n <label htmlFor=\"file-input\" className=\"image-upload-label\">\r\n <img src={images.image} alt=\"Upload\" />\r\n </label>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ImageForm","import React, { useState } from 'react';\r\nimport CustomEditor from '../CustomEditor';\r\n\r\n/**\r\n * Permet de générer le formulaire de création de tableau\r\n * \r\n * @param {object} props\r\n * @param {function} props.onChange - permet de définir la nouvelle puce\r\n * @param {string} props.selectedType - puce sélectionnée\r\n * \r\n * @returns {JSX.Element}\r\n */\r\nconst TableForm = ({ editor, onClose }) => {\r\n const [hoveredRow, setHoveredRow] = useState(0);\r\n const [hoveredCol, setHoveredCol] = useState(0);\r\n\r\n /**\r\n * Permet de définir les cases survolées pour définir la dimension du tableau\r\n * @param {number} row - ligne\r\n * @param {number} col - colonne\r\n */\r\n const handleMouseEnter = (row, col) => {\r\n setHoveredRow(row);\r\n setHoveredCol(col);\r\n };\r\n\r\n /**\r\n * Permet de définir les cases sélectionnée pour définir la dimension du tableau final\r\n * @param {number} row - ligne\r\n * @param {number} col - colonne\r\n */\r\n const handleClick = (row, col) => {\r\n CustomEditor.insertTable(editor, row + 1, col + 1);\r\n onClose();\r\n };\r\n\r\n /**\r\n * Permet de retourner la grille avec les cases survolées ou non\r\n * @returns {JSX.Element}\r\n */\r\n const renderGrid = () => {\r\n const grid = [];\r\n for (let row = 0; row < 5; row++) {\r\n for (let col = 0; col < 5; col++) {\r\n const isHovered = row <= hoveredRow && col <= hoveredCol;\r\n grid.push(\r\n <div\r\n key={`${row}-${col}`}\r\n className={`grid-cell ${isHovered ? 'hovered' : ''}`}\r\n onMouseEnter={() => handleMouseEnter(row, col)}\r\n onClick={() => handleClick(row, col)}\r\n />\r\n );\r\n }\r\n }\r\n return grid;\r\n };\r\n\r\n\r\n return (\r\n <div className=\"dropdown-menu table-grid-form\">\r\n <div className=\"grid-container\">\r\n {renderGrid()}\r\n </div>\r\n <div className=\"table-size-indicator\">\r\n Tableau de {hoveredRow + 1} lignes x {hoveredCol + 1} colonnes\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default TableForm;\r\n","import { useState } from \"react\";\r\nimport CustomEditor from \"../CustomEditor\";\r\nimport TableForm from \"../form/TableForm\";\r\nimport images from \"../imageImport\";\r\n\r\n/**\r\n * Ce composant permet de gérer l'affichage du formulaire de création de tableau\r\n * \r\n * @param {object} props\r\n * @param {object} props.editor | éditeur de texte\r\n * \r\n * @returns {JSX.Element}\r\n */\r\nconst TableDropdown = ({ editor }) => {\r\n const isTableSelected = CustomEditor.isSelectionInTable(editor);\r\n const [showTableForm, setShowTableForm] = useState(false);\r\n\r\n /**\r\n * Permet de gérer l'affichage du formulaire\r\n */\r\n const toggleTableForm = () => {\r\n setShowTableForm(!showTableForm);\r\n };\r\n\r\n const buttons = [\r\n { name: \"deleteTable\", alt: \"Supprimer le tableau\", onClick: CustomEditor.deleteTable },\r\n { name: \"addRow\", alt: \"Ajouter une ligne\", onClick: CustomEditor.addRow },\r\n { name: \"addColumn\", alt: \"Ajouter une colonne\", onClick: CustomEditor.addColumn },\r\n { name: \"deleteRow\", alt: \"Supprimer une ligne\", onClick: CustomEditor.deleteRow },\r\n { name: \"deleteColumn\", alt: \"Supprimer une colonne\", onClick: CustomEditor.deleteColumn }\r\n ]\r\n\r\n return (\r\n <>\r\n <div className=\"dropdown tool\">\r\n <button onClick={toggleTableForm} className=\"dropdown-toggle\">\r\n <img src={images.blockCode} alt=\"Tableau\" />\r\n </button>\r\n {showTableForm && (\r\n <TableForm\r\n editor={editor}\r\n onClose={toggleTableForm}\r\n />\r\n )}\r\n </div>\r\n {buttons.map((button, index) => (\r\n <button\r\n key={index}\r\n className='tool'\r\n onClick={() => button.onClick(editor)}\r\n disabled={!isTableSelected}\r\n >\r\n <img src={isTableSelected ? images[button.name] : images[button.name + \"Grey\"]} alt={button.name} />\r\n </button>\r\n ))}\r\n </>\r\n )\r\n}\r\n\r\nexport default TableDropdown","import images from \"../imageImport\";\r\n\r\n/**\r\n * Ce composant permet d'afficher les boutons de gestion de l'historique\r\n * \r\n * @param {object} props\r\n * @param {object} props.editor | Éditeur courant\r\n * @returns {JSX.Element}\r\n */\r\nexport default function HistoryForm({editor}) {\r\n return (\r\n <>\r\n <button\r\n className={`tool`}\r\n onMouseDown={event => {\r\n event.preventDefault();\r\n editor.undo();\r\n }}\r\n >\r\n <img src={editor.history.undos.length === 0 ? images.undoGrey : images.undo} alt=\"Annuler\" />\r\n </button>\r\n <button\r\n className={`tool`}\r\n onMouseDown={event => {\r\n event.preventDefault();\r\n editor.redo();\r\n }}\r\n >\r\n <img src={editor.history.redos.length === 0 ? images.redoGrey : images.redo} alt=\"Rétablir\" />\r\n </button>\r\n </>\r\n )\r\n}","import { Editor } from \"slate\";\r\nimport CustomEditor from \"./utils/CustomEditor\";\r\nimport { useState } from \"react\";\r\n\r\n/**\r\n * Ce hook permet d'implémenter toutes les variables et fonction nécessaires à la barre d'outils\r\n * \r\n * @param {object} editor | éditeur de texte\r\n * \r\n * @returns {object} | Liste composée de toutes les variables et fonctions\r\n */\r\nexport default function useToolbar(editor) {\r\n const [selectedLink, setSelectedLink] = useState(\"\");\r\n const [colorMode, setColorMode] = useState(\"\");\r\n const [openInNewTab, setOpenInNewTab] = useState(false);\r\n const [selectedColor, setSelectedColor] = useState(\"\");\r\n const [selectedBackgroundColor, setSelectedBackgroundColor] = useState(\"\");\r\n\r\n const [activeBlock, setActiveBlock] = useState('paragraph');\r\n const [showColorPicker, setShowColorPicker] = useState(false);\r\n const [selectedLanguage, setSelectedLanguage] = useState('');\r\n const [showLinkForm, setShowLinkForm] = useState(false);\r\n\r\n /**\r\n * Permet de gérer l'affichage du fomulaire d'implémentation de lien\r\n * \r\n * @returns {void}\r\n */\r\n const toggleLinkForm = () => {\r\n setShowLinkForm(!showLinkForm);\r\n };\r\n\r\n /**\r\n * Permet de gérer l'affichage du fomulaire de sélection de couleur\r\n * \r\n * @returns {void}\r\n */\r\n const toggleColorPicker = () => {\r\n setShowColorPicker(!showColorPicker);\r\n };\r\n\r\n /**\r\n * Permet de changer la couleur du texte sélectionné\r\n * \r\n * @param {string} color\r\n * @returns {void}\r\n */\r\n const handleColorChange = (color) => {\r\n CustomEditor.applyTextColor(editor, color);\r\n toggleColorPicker();\r\n };\r\n\r\n /**\r\n * Permet de changer la couleur d'arrière plan du texte sélectionné\r\n * \r\n * @param {string} color\r\n * @returns {void}\r\n */\r\n const handleBackgroundColorChange = (color) => {\r\n CustomEditor.applyBackgroundTextColor(editor, color);\r\n toggleColorPicker();\r\n };\r\n\r\n /**\r\n * Permet de changer le type du bloc sélectionné\r\n * Exemple : paragraphe -> h1\r\n * \r\n * @param {string} blockType\r\n * @returns {void}\r\n */\r\n const handleBlockTypeChange = (blockType) => {\r\n CustomEditor.toggleBlock(editor, blockType);\r\n setActiveBlock(blockType);\r\n };\r\n\r\n /**\r\n * Cette fonction permet de détecter le langage définit dans le bloc de code\r\n * \r\n * @returns {string|null}\r\n */\r\n const detectCurrentLanguage = () => {\r\n const { selection } = editor;\r\n if (selection) {\r\n const [codeBlock] = Editor.nodes(editor, {\r\n match: n => n.type === 'code',\r\n });\r\n if (codeBlock) {\r\n setSelectedLanguage(codeBlock[0].language);\r\n } else {\r\n setSelectedLanguage(null);\r\n }\r\n }\r\n };\r\n\r\n return {\r\n activeBlock,\r\n colorMode,\r\n setColorMode,\r\n openInNewTab,\r\n setOpenInNewTab,\r\n selectedBackgroundColor,\r\n setSelectedBackgroundColor,\r\n selectedColor,\r\n setSelectedColor,\r\n selectedLanguage,\r\n setSelectedLanguage,\r\n selectedLink,\r\n setSelectedLink,\r\n showColorPicker,\r\n showLinkForm,\r\n setShowLinkForm,\r\n // Fonctions utiles\r\n detectCurrentLanguage,\r\n toggleLinkForm,\r\n toggleColorPicker,\r\n handleColorChange,\r\n handleBackgroundColorChange,\r\n handleBlockTypeChange,\r\n }\r\n}","import React, { useEffect } from 'react';\r\nimport FormatButton from './FormatButton';\r\nimport CustomEditor from './utils/CustomEditor';\r\nimport \"../styles/ToolBar.sass\"\r\nimport LinkForm from './utils/form/LinkForm';\r\nimport { Editor } from 'slate';\r\nimport ColorPickerPopup from './utils/form/ColorPickerPopup';\r\nimport BlockTypeDropdown from './utils/dropdown/BlockTypeDropdown';\r\nimport LanguageDropdown from './utils/dropdown/LanguageDropdown';\r\nimport ImageForm from './utils/form/ImageForm';\r\nimport TableDropdown from './utils/dropdown/TableDropdown';\r\nimport HistoryForm from './utils/form/HistoryForm';\r\nimport useToolbar from './useToolbar';\r\n\r\n/**\r\n * Ce composant permet d'afficher la barre d'outils\r\n * \r\n * @param {object} props\r\n * @param {object} props.editor - éditeur de texte\r\n * @param {object} props.activeMarks - Toutes les options (actifs ou non)\r\n * \r\n * @returns {JSX.Element }\r\n */\r\nconst Toolbar = ({ editor, activeMarks }) => {\r\n const {\r\n activeBlock,\r\n colorMode,\r\n setColorMode,\r\n openInNewTab,\r\n setOpenInNewTab,\r\n selectedBackgroundColor,\r\n setSelectedBackgroundColor,\r\n selectedColor,\r\n setSelectedColor,\r\n selectedLanguage,\r\n setSelectedLanguage,\r\n selectedLink,\r\n setSelectedLink,\r\n showColorPicker,\r\n showLinkForm,\r\n setShowLinkForm,\r\n detectCurrentLanguage,\r\n toggleLinkForm,\r\n toggleColorPicker,\r\n handleColorChange,\r\n handleBackgroundColorChange,\r\n handleBlockTypeChange,\r\n } = useToolbar(editor)\r\n\r\n const alignList = ['left', 'center', 'right'];\r\n\r\n useEffect(() => {\r\n detectCurrentLanguage();\r\n const { selection } = editor;\r\n if (selection) {\r\n const [link] = Editor.nodes(editor, {\r\n match: n => n.type === 'link',\r\n });\r\n if (link) {\r\n setOpenInNewTab(link[0].target === \"_blank\");\r\n setSelectedLink(link[0].href);\r\n } else {\r\n setOpenInNewTab(false);\r\n setSelectedLink(\"\");\r\n }\r\n }\r\n }, [editor.selection]);\r\n\r\n return (\r\n <div className='toolbar'>\r\n <BlockTypeDropdown\r\n activeBlock={activeBlock}\r\n onChange={handleBlockTypeChange}\r\n />\r\n {Object.keys(activeMarks).map((format, index) => (\r\n <div key={index} style={{ display: 'flex' }}>\r\n <FormatButton\r\n activeBlock={activeBlock}\r\n editor={editor}\r\n format={format}\r\n isActive={activeMarks[format]}\r\n onMouseDown={() => {\r\n if (alignList.includes(format)) {\r\n CustomEditor.toggleAlign(editor, format);\r\n } else if (format === \"href\") {\r\n toggleLinkForm();\r\n } else if (format === \"color\") {\r\n setSelectedColor(activeMarks[format]);\r\n setColorMode('color');\r\n toggleColorPicker();\r\n } else if (format === \"bgColor\") {\r\n setSelectedBackgroundColor(activeMarks[format]);\r\n setColorMode('bgColor');\r\n toggleColorPicker();\r\n } else {\r\n CustomEditor.toggleMark(editor, format);\r\n }\r\n }}\r\n />\r\n </div>\r\n ))}\r\n <TableDropdown editor={editor} />\r\n <ImageForm editor={editor} />\r\n <LanguageDropdown\r\n editor={editor}\r\n selectedLanguage={selectedLanguage}\r\n setSelectedLanguage={setSelectedLanguage}\r\n />\r\n <HistoryForm editor={editor} />\r\n {showLinkForm && (\r\n <LinkForm\r\n editor={editor}\r\n onClose={() => setShowLinkForm(false)}\r\n initialUrl={selectedLink}\r\n isOpenInNewTab={openInNewTab}\r\n />\r\n )}\r\n {showColorPicker && (\r\n <ColorPickerPopup\r\n selectedColor={colorMode === \"color\" ? selectedColor : selectedBackgroundColor }\r\n onSelectColor={colorMode === \"color\" ? handleColorChange : handleBackgroundColorChange }\r\n onClose={colorMode === \"color\" ? toggleColorPicker : toggleColorPicker }\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Toolbar;\r\n","import React, { useCallback, useMemo, useState } from \"react\";\r\nimport { createEditor, Editor, Transforms, Element as SlateElement, Path } from \"slate\";\r\nimport { Editable, Slate, withReact } from \"slate-react\";\r\nimport { withHistory } from 'slate-history';\r\n\r\nimport CodeElement from \"./utils/elements/CodeElement\";\r\nimport CustomEditor from \"./utils/CustomEditor\";\r\nimport DefaultElement from \"./utils/elements/DefaultElement\";\r\nimport Leaf from \"./utils/Leaf\";\r\nimport ListElement from \"./utils/elements/ListElement\";\r\nimport BlockquoteElement from \"./utils/elements/BlockquoteElement\";\r\nimport Toolbar from \"./Toolbar\";\r\nimport \"../styles/ReactTextForge.sass\";\r\n\r\n/**\r\n * Ce composant permet d'afficher l'éditeur de texte\r\n * \r\n * @param {object} props\r\n * @param {object} props.value - contenu textuel\r\n * @param {function} props.setValue - change l'état du contenu\r\n * \r\n * @returns {JSX.Element }\r\n */\r\nconst ReactTextForge = ({value, setValue}) => {\r\n const [editor] = useState(() => withHistory(withReact(createEditor())));\r\n const [activeMarks, setActiveMarks] = useState({\r\n bold: false,\r\n underline: false,\r\n italic: false,\r\n strikethrough: false,\r\n subscript: false,\r\n superscript: false,\r\n blockquote: false,\r\n color: '',\r\n bgColor: '',\r\n fontSize: '',\r\n fontFamily: '',\r\n href: '',\r\n bulletList: false,\r\n numberedList: false,\r\n left: false,\r\n center: false,\r\n right: false,\r\n indent: false,\r\n outdent: false\r\n });\r\n\r\n const initialValue = useMemo(\r\n () => JSON.parse(localStorage.getItem('content')) || [\r\n {\r\n type: 'paragraph',\r\n children: [{ text: 'Un exemple de paragraphe.' }],\r\n },\r\n ],\r\n []\r\n );\r\n\r\n /**\r\n * Permet de retourner l'élément en fonction du type de bloc\r\n * @param {object} props\r\n * @returns {JSX.Element}\r\n */\r\n const renderElement = useCallback(props => {\r\n switch (props.element.type) {\r\n case 'code':\r\n return <CodeElement {...props} />;\r\n case 'bullet-list':\r\n case 'numbered-list':\r\n case 'list-item':\r\n return <ListElement {...props} />;\r\n case 'h1':\r\n return <h1 {...props.attributes}>{props.children}</h1>;\r\n case 'h2':\r\n return <h2 {...props.attributes}>{props.children}</h2>;\r\n case 'blockquote':\r\n return <BlockquoteElement {...props} />;\r\n case 'image':\r\n return <img src={props.element.url} alt=\"\" {...props.attributes} />;\r\n case 'table':\r\n return <table><tbody>{props.children}</tbody></table>;\r\n case 'table-row':\r\n return <tr>{props.children}</tr>;\r\n case 'table-cell':\r\n return <td>{props.children}</td>;\r\n default:\r\n return <DefaultElement {...props} />;\r\n }\r\n }, []);\r\n\r\n /**\r\n * Permet de retourner l'élément en fonction du format appliqué\r\n * @param {object} props\r\n * @returns {JSX.Element}\r\n */\r\n const renderLeaf = useCallback(props => {\r\n return <Leaf {...props} />;\r\n }, []);\r\n\r\n /**\r\n * Permet de définir les formats et bloc appliqué en fonction de l'élément sélectionné\r\n * @param {object} props\r\n * @returns {JSX.Element}\r\n */\r\n const handleChange = useCallback(() => {\r\n const marks = Editor.marks(editor);\r\n const isListActive = CustomEditor.isSelectionInList(editor);\r\n setActiveMarks((prevMarks) => {\r\n const newMarks = {};\r\n\r\n // Mettre à jour les marques\r\n for (const key in prevMarks) {\r\n if (key === 'bulletList' || key === 'numberedList') {\r\n const mark = key === 'bulletList' ? 'bullet-list' : key === 'numberedList' ? 'numbered-list' : ''\r\n newMarks[key] = isListActive && CustomEditor.isBlockActive(editor, mark);\r\n } else if (key === 'left' || key === 'center' || key === 'right') {\r\n newMarks[key] = CustomEditor.isAlignActive(editor, key);\r\n } else if (key === 'indent' || key === 'outdent') {\r\n newMarks[key] = CustomEditor.canIndent(editor, key)\r\n } else if (key === 'href') {\r\n const isLinkActive = CustomEditor.isLinkActive(editor);\r\n let linkHref = '';\r\n\r\n if (isLinkActive) {\r\n const linkNodes = Editor.nodes(editor, {\r\n match: n => n.type === 'link',\r\n mode: 'highest', // Utilisez 'highest' pour obtenir le nœud le plus spécifique\r\n });\r\n\r\n for (const [node] of linkNodes) {\r\n if (node && node.href) {\r\n linkHref = node.href;\r\n break; // Sortir de la boucle dès que l'URL est trouvée\r\n }\r\n }\r\n\r\n if (!linkHref) {\r\n console.error('No link node with URL property found');\r\n }\r\n }\r\n\r\n newMarks[key] = linkHref; // Mettre à jour href\r\n } else if (key === 'color') {\r\n newMarks[key] = marks?.color || null; // Mettre à jour la couleur\r\n } else if (key === 'fontSize') {\r\n newMarks[key] = marks?.fontSize || null; // Mettre à jour la couleur\r\n } else {\r\n newMarks[key] = marks?.[key] === true;\r\n }\r\n }\r\n\r\n return newMarks;\r\n });\r\n }, [editor]);\r\n\r\n /**\r\n * Permet de gérer l'indetation\r\n * @param {object} props\r\n * @returns {JSX.Element}\r\n */\r\n const handleTabKey = (event) => {\r\n if (event.shiftKey && CustomEditor.canIndent(editor, 'outdent')) {\r\n event.preventDefault();\r\n CustomEditor.handleOutdent(editor)\r\n } else if (CustomEditor.canIndent(editor, 'indent')) {\r\n event.preventDefault();\r\n CustomEditor.handleIndent(editor)\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"react-text-forge\">\r\n <Slate\r\n editor={editor}\r\n initialValue={initialValue}\r\n value={value}\r\n onChange={content => {\r\n handleChange();\r\n const isAstChange = editor.operations.some(\r\n op => 'set_selection' !== op.type\r\n );\r\n if (isAstChange) {\r\n const jsonContent = JSON.stringify(content);\r\n setValue(content)\r\n localStorage.setItem('content', jsonContent);\r\n }\r\n }}\r\n >\r\n <Toolbar editor={editor} activeMarks={activeMarks} />\r\n <Editable\r\n className=\"editor\"\r\n renderElement={renderElement}\r\n renderLeaf={renderLeaf}\r\n onKeyDown={event => {\r\n if (event.key === 'Tab') {\r\n handleTabKey(event);\r\n return;\r\n }\r\n\r\n if (!event.ctrlKey) {\r\n return;\r\n }\r\n\r\n switch (event.key) {\r\n case '=': {\r\n event.preventDefault();\r\n CustomEditor.toggleBlock(editor, 'code');\r\n break;\r\n }\r\n\r\n case 'b': {\r\n event.preventDefault();\r\n CustomEditor.toggleMark(editor, 'bold');\r\n break;\r\n }\r\n\r\n case 'i': {\r\n event.preventDefault();\r\n CustomEditor.toggleMark(editor, 'italic');\r\n break;\r\n }\r\n\r\n case 'u': {\r\n event.preventDefault();\r\n CustomEditor.toggleMark(editor, 'underline');\r\n break;\r\n }\r\n\r\n case 's': {\r\n event.preventDefault();\r\n CustomEditor.toggleMark(editor, 'strikethrough');\r\n break;\r\n }\r\n\r\n case 'sub': {\r\n event.preventDefault();\r\n CustomEditor.toggleMark(editor, 'subscript');\r\n break;\r\n }\r\n\r\n case 'sup': {\r\n event.preventDefault();\r\n CustomEditor.toggleMark(editor, 'superscript');\r\n break;\r\n }\r\n\r\n case 'l': {\r\n event.preventDefault();\r\n CustomEditor.toggleBlock(editor, 'bulletList');\r\n break;\r\n }\r\n\r\n case 'n': {\r\n event.preventDefault();\r\n CustomEditor.toggleBlock(editor, 'numberedList');\r\n break;\r\n }\r\n\r\n case 'left': {\r\n event.preventDefault();\r\n CustomEditor.toggleMark(editor, 'left');\r\n break;\r\n }\r\n\r\n case 'center': {\r\n event.preventDefault();\r\n CustomEditor.toggleMark(editor, 'center');\r\n break;\r\n }\r\n\r\n case 'right': {\r\n event.preventDefault();\r\n CustomEditor.toggleMark(editor, 'right');\r\n break;\r\n }\r\n }\r\n }}\r\n />\r\n </Slate>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ReactTextForge;\r\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","self","source","owner","debugStack","debugTask","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","CodeElement","attributes","element","codeRef","useRef","language","jsx","CustomEditor","editor","format","marks","Editor","blockType","match","n","bulletType","isActive","isList","Transforms","Element","path","newPath","newProperties","block","align","alignType","mark","parentListType","parentPath","Path","parentNode","newList","newListPath","listItem","error","selection","link","Node","url","openInNewTab","target","rel","Range","textNode","Text","linkNode","linkPath","text","color","size","fontFamily","child","codeNode","paragraphNode","image","newParagraph","event","file","img","reader","e","canvas","ctx","MAX_WIDTH","MAX_HEIGHT","width","height","dataUrl","rows","columns","table","cellPath","_a","selectedRowIndex","newRow","cell","columnIndex","row","currentRowIndex","newCell","rowIndex","rowCell","index","tablePath","DefaultElement","style","Leaf","leaf","tags","handleLinkClick","acc","tag","ListElement","BlockquoteElement","BulletTypeSelector","onChange","selectedType","bulletTypes","NumeredTypeSelector","numeredTypes","addColumnGrey","addColumn","addRowGrey","addRow","bgColor","blockCode","blockquote","bold","bulletList","center","deleteColumnGrey","deleteColumn","deleteRowGrey","deleteRow","deleteTableGrey","deleteTable","href","indentGrey","indent","italic","left","numberedList","outdentGrey","outdent","redoGrey","redo","right","strikethrough","subscript","superscript","underline","undoGrey","undo","images","BlockListDropdown","onMouseDown","showBulletOptions","setShowBulletOptions","useState","handleBulletTypeChange","jsxs","Fragment","ContainerDropdown","disabled","elements","elementSelected","isOpen","setIsOpen","onClick","toggleForm","selectElement","FontSizeDropdown","sizeSelected","onSelectSize","fontSizes","FontFamilyDropdown","fontFamilySelected","onSelectFontFamily","fontFamilies","FormatButton","activeBlock","selectedFontFamily","setSelectedFontFamily","isHeading","handleFontSizeChange","handleFontFamilyChange","LinkForm","onClose","initialUrl","isOpenInNewTab","setUrl","setOpenInNewTab","handleUpdateLink","handleRemoveLink","useEffect","ColorPickerPopup","selectedColor","onSelectColor","setColor","handleChangeComplete","handleApplyColor","handleCancel","SketchPicker","BlockTypeDropdown","blockTypes","handleChange","selectedBlock","LanguageDropdown","selectedLanguage","setSelectedLanguage","languages","handleLanguageChange","lang","ImageForm","TableForm","hoveredRow","setHoveredRow","hoveredCol","setHoveredCol","handleMouseEnter","col","handleClick","renderGrid","grid","isHovered","TableDropdown","isTableSelected","showTableForm","setShowTableForm","toggleTableForm","buttons","button","HistoryForm","useToolbar","selectedLink","setSelectedLink","colorMode","setColorMode","setSelectedColor","selectedBackgroundColor","setSelectedBackgroundColor","setActiveBlock","showColorPicker","setShowColorPicker","showLinkForm","setShowLinkForm","toggleLinkForm","toggleColorPicker","codeBlock","Toolbar","activeMarks","detectCurrentLanguage","handleColorChange","handleBackgroundColorChange","handleBlockTypeChange","alignList","ReactTextForge","setValue","withHistory","withReact","createEditor","setActiveMarks","initialValue","useMemo","renderElement","useCallback","renderLeaf","isListActive","prevMarks","newMarks","isLinkActive","linkHref","linkNodes","handleTabKey","Slate","content","op","jsonContent","Editable"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|