diff --git a/guns-front-project/.env b/guns-front-project/.env
new file mode 100644
index 00000000..ddbf9148
--- /dev/null
+++ b/guns-front-project/.env
@@ -0,0 +1,2 @@
+# 项目启动后,左上角项目名称
+VITE_APP_NAME=Guns Tech.
diff --git a/guns-front-project/.env.development b/guns-front-project/.env.development
new file mode 100644
index 00000000..5e5db281
--- /dev/null
+++ b/guns-front-project/.env.development
@@ -0,0 +1,14 @@
+# API请求的前缀,走这个前缀的会被转发到后台
+VITE_API_PREFIX=/api
+
+# 后台接口的地址,这个地址只有在开发环境用,上线后用nginx转发
+VITE_API_URL=http://localhost:8080
+
+# sso单点服务器的地址,上线后需要改为线上的单点服务地址
+VITE_APP_SSO_HOST=http://localhost:8888
+
+# sso单点客户端id,上线后需要改为线上的客户端id
+VITE_APP_SSO_ID=1187303628294164583
+
+# oauth2服务端地址,用在点击首页的第三方登录logo
+VITE_APP_BACKEND_HOST=http://localhost:8080
diff --git a/guns-front-project/.env.production b/guns-front-project/.env.production
new file mode 100644
index 00000000..a5568870
--- /dev/null
+++ b/guns-front-project/.env.production
@@ -0,0 +1,14 @@
+# API请求的前缀,走这个前缀的会被转发到后台,打包到tomcat这里要改为/
+VITE_API_PREFIX=/api
+
+# 后台接口的地址,这个地址只有在开发环境用,上线后用nginx转发
+VITE_API_URL=https://vue3.javaguns.com/api
+
+# sso单点服务器的地址,上线后需要改为线上的单点服务地址
+VITE_APP_SSO_HOST=http://localhost:8888
+
+# sso单点客户端id,上线后需要改为线上的客户端id
+VITE_APP_SSO_ID=1187303628294164583
+
+# oauth2服务端地址,用在点击首页的第三方登录logo
+VITE_APP_BACKEND_HOST=http://www.javaguns.com/api
diff --git a/guns-front-project/.eslintignore b/guns-front-project/.eslintignore
new file mode 100644
index 00000000..46b14266
--- /dev/null
+++ b/guns-front-project/.eslintignore
@@ -0,0 +1,4 @@
+public
+src/assets
+dist
+node_modules
diff --git a/guns-front-project/.eslintrc.cjs b/guns-front-project/.eslintrc.cjs
new file mode 100644
index 00000000..e1d1daa0
--- /dev/null
+++ b/guns-front-project/.eslintrc.cjs
@@ -0,0 +1,55 @@
+/* eslint-env node */
+require('@rushstack/eslint-patch/modern-module-resolution')
+
+module.exports = {
+ root: true,
+ env: {
+ browser: true,
+ node: true,
+ es6: true,
+ 'vue/setup-compiler-macros': true
+ },
+ parser: 'vue-eslint-parser',
+ extends: ['plugin:vue/vue3-recommended', 'eslint:recommended'],
+ parserOptions: {
+ ecmaVersion: 2020,
+ sourceType: 'module'
+ },
+ rules: {
+ 'vue/script-setup-uses-vars': 'error',
+ 'vue/custom-event-name-casing': 'off',
+ 'no-use-before-define': 'off',
+ 'no-unused-vars': [
+ 'error',
+ {
+ argsIgnorePattern: '^_',
+ varsIgnorePattern: '^_'
+ }
+ ],
+ 'space-before-function-paren': 'off',
+ 'vue/attributes-order': 'off',
+ 'vue/one-component-per-file': 'off',
+ 'vue/html-closing-bracket-newline': 'off',
+ 'vue/max-attributes-per-line': 'off',
+ 'vue/multiline-html-element-content-newline': 'off',
+ 'vue/singleline-html-element-content-newline': 'off',
+ 'vue/attribute-hyphenation': 'off',
+ 'vue/require-default-prop': 'off',
+ 'vue/html-self-closing': [
+ 'error',
+ {
+ html: {
+ void: 'always',
+ normal: 'never',
+ component: 'always'
+ },
+ svg: 'always',
+ math: 'always'
+ }
+ ],
+ 'vue/v-on-event-hyphenation': 'off',
+ 'vue/multi-word-component-names': 'off',
+ // 允许props修改
+ 'vue/no-mutating-props': 0
+ }
+}
diff --git a/guns-front-project/.gitignore b/guns-front-project/.gitignore
new file mode 100644
index 00000000..39fcede8
--- /dev/null
+++ b/guns-front-project/.gitignore
@@ -0,0 +1,32 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+# local env files
+.env.local
+.env.*.local
+
+node_modules
+.DS_Store
+dist
+dist-ssr
+coverage
+*.local
+
+/cypress/videos/
+/cypress/screenshots/
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/guns-front-project/.prettierignore b/guns-front-project/.prettierignore
new file mode 100644
index 00000000..f7e39e60
--- /dev/null
+++ b/guns-front-project/.prettierignore
@@ -0,0 +1,9 @@
+/dist/*
+.local
+.output.js
+/node_modules/**
+
+**/*.svg
+**/*.sh
+
+/public/*
diff --git a/guns-front-project/.prettierrc.json b/guns-front-project/.prettierrc.json
new file mode 100644
index 00000000..4a788134
--- /dev/null
+++ b/guns-front-project/.prettierrc.json
@@ -0,0 +1,20 @@
+{
+ "arrowParens": "avoid",
+ "bracketSpacing": true,
+ "embeddedLanguageFormatting": "auto",
+ "htmlWhitespaceSensitivity": "css",
+ "insertPragma": false,
+ "jsxBracketSameLine": false,
+ "jsxSingleQuote": true,
+ "printWidth": 140,
+ "proseWrap": "preserve",
+ "quoteProps": "as-needed",
+ "requirePragma": false,
+ "semi": true,
+ "singleQuote": true,
+ "tabWidth": 2,
+ "trailingComma": "none",
+ "useTabs": false,
+ "vueIndentScriptAndStyle": false,
+ "endOfLine": "auto"
+}
\ No newline at end of file
diff --git a/guns-front-project/index.html b/guns-front-project/index.html
new file mode 100644
index 00000000..b77791c2
--- /dev/null
+++ b/guns-front-project/index.html
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+ Guns Tech.
+
+
+
+
+
+
+
diff --git a/guns-front-project/jsconfig.json b/guns-front-project/jsconfig.json
new file mode 100644
index 00000000..23ca54d2
--- /dev/null
+++ b/guns-front-project/jsconfig.json
@@ -0,0 +1,14 @@
+{
+ "compilerOptions": {
+ "target": "esnext",
+ "module": "esnext",
+ "moduleResolution": "node",
+ "jsx": "preserve",
+ "baseUrl": "./",
+ "lib": ["esnext", "dom"],
+ "paths": {
+ "@/*": ["src/*"]
+ }
+ },
+ "exclude": ["node_modules", "dist"]
+}
diff --git a/guns-front-project/package.json b/guns-front-project/package.json
new file mode 100644
index 00000000..dd65f15d
--- /dev/null
+++ b/guns-front-project/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "new-project",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "dev": "vite",
+ "build": "node --max_old_space_size=8096 ./node_modules/vite/bin/vite.js build",
+ "preview": "vite preview",
+ "test:unit": "vitest",
+ "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore",
+ "format": "prettier --write src/"
+ },
+ "dependencies": {
+ "@ant-design/icons-vue": "^7.0.1",
+ "ant-design-vue": "^3.2.17",
+ "axios": "^1.6.0",
+ "cropperjs": "^1.5.12",
+ "dayjs": "^1.11.10",
+ "echarts": "^5.4.2",
+ "jsencrypt": "^3.3.2",
+ "less": "^4.2.0",
+ "lodash-es": "^4.17.21",
+ "nprogress": "^0.2.0",
+ "pinia": "^2.1.7",
+ "tinymce": "^5.10.7",
+ "vue": "^3.3.4",
+ "vue-clipboard3": "^2.0.0",
+ "vue-echarts": "^6.5.4",
+ "vue-i18n": "^9.1.9",
+ "vue-router": "^4.2.5",
+ "vuedraggable": "^4.1.0",
+ "vxe-table": "^4.4.2",
+ "xe-utils": "^3.5.14",
+ "xlsx": "^0.18.5"
+ },
+ "devDependencies": {
+ "@rushstack/eslint-patch": "^1.3.3",
+ "@vitejs/plugin-legacy": "^4.0.2",
+ "@vitejs/plugin-vue": "^4.4.0",
+ "@vitejs/plugin-vue-jsx": "^3.0.2",
+ "@vue/eslint-config-prettier": "^8.0.0",
+ "@vue/test-utils": "^2.4.1",
+ "consola": "3.2.0",
+ "eslint": "^8.49.0",
+ "eslint-plugin-vue": "^9.17.0",
+ "jsdom": "^22.1.0",
+ "prettier": "^3.0.3",
+ "terser": "^5.16.9",
+ "unplugin-vue-components": "^0.24.1",
+ "vite": "^4.4.11",
+ "vite-plugin-compression": "^0.5.1",
+ "vite-plugin-style-import": "^2.0.0",
+ "vitest": "^0.34.6",
+ "vue-eslint-parser": "^9.1.1"
+ }
+}
diff --git a/guns-front-project/postcss.config.js b/guns-front-project/postcss.config.js
new file mode 100644
index 00000000..fa4aabca
--- /dev/null
+++ b/guns-front-project/postcss.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ plugins: {}
+};
diff --git a/guns-front-project/prettier.config.js b/guns-front-project/prettier.config.js
new file mode 100644
index 00000000..2768cc48
--- /dev/null
+++ b/guns-front-project/prettier.config.js
@@ -0,0 +1,20 @@
+module.exports = {
+ arrowParens: 'always',
+ bracketSpacing: true,
+ embeddedLanguageFormatting: 'auto',
+ htmlWhitespaceSensitivity: 'css',
+ insertPragma: false,
+ jsxBracketSameLine: false,
+ jsxSingleQuote: true,
+ printWidth: 140,
+ proseWrap: 'preserve',
+ quoteProps: 'as-needed',
+ requirePragma: false,
+ semi: true,
+ singleQuote: true,
+ tabWidth: 2,
+ trailingComma: 'none',
+ useTabs: false,
+ vueIndentScriptAndStyle: true,
+ endOfLine: 'auto'
+};
diff --git a/guns-front-project/public/favicon.ico b/guns-front-project/public/favicon.ico
new file mode 100644
index 00000000..832ffa21
Binary files /dev/null and b/guns-front-project/public/favicon.ico differ
diff --git a/guns-front-project/public/tinymce/langs/zh_CN.js b/guns-front-project/public/tinymce/langs/zh_CN.js
new file mode 100644
index 00000000..2a784f57
--- /dev/null
+++ b/guns-front-project/public/tinymce/langs/zh_CN.js
@@ -0,0 +1,462 @@
+tinymce.addI18n('zh_CN',{
+"Redo": "\u91cd\u505a",
+"Undo": "\u64a4\u9500",
+"Cut": "\u526a\u5207",
+"Copy": "\u590d\u5236",
+"Paste": "\u7c98\u8d34",
+"Select all": "\u5168\u9009",
+"New document": "\u65b0\u6587\u4ef6",
+"Ok": "\u786e\u5b9a",
+"Cancel": "\u53d6\u6d88",
+"Visual aids": "\u7f51\u683c\u7ebf",
+"Bold": "\u7c97\u4f53",
+"Italic": "\u659c\u4f53",
+"Underline": "\u4e0b\u5212\u7ebf",
+"Strikethrough": "\u5220\u9664\u7ebf",
+"Superscript": "\u4e0a\u6807",
+"Subscript": "\u4e0b\u6807",
+"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
+"Align left": "\u5de6\u8fb9\u5bf9\u9f50",
+"Align center": "\u4e2d\u95f4\u5bf9\u9f50",
+"Align right": "\u53f3\u8fb9\u5bf9\u9f50",
+"Justify": "\u4e24\u7aef\u5bf9\u9f50",
+"Bullet list": "\u9879\u76ee\u7b26\u53f7",
+"Numbered list": "\u7f16\u53f7\u5217\u8868",
+"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb",
+"Increase indent": "\u589e\u52a0\u7f29\u8fdb",
+"Close": "\u5173\u95ed",
+"Formats": "\u683c\u5f0f",
+"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u7b49\u5feb\u6377\u952e\u3002",
+"Headers": "\u6807\u9898",
+"Header 1": "\u6807\u98981",
+"Header 2": "\u6807\u98982",
+"Header 3": "\u6807\u98983",
+"Header 4": "\u6807\u98984",
+"Header 5": "\u6807\u98985",
+"Header 6": "\u6807\u98986",
+"Headings": "\u6807\u9898",
+"Heading 1": "\u6807\u98981",
+"Heading 2": "\u6807\u98982",
+"Heading 3": "\u6807\u98983",
+"Heading 4": "\u6807\u98984",
+"Heading 5": "\u6807\u98985",
+"Heading 6": "\u6807\u98986",
+"Preformatted": "\u9884\u5148\u683c\u5f0f\u5316\u7684",
+"Div": "Div",
+"Pre": "Pre",
+"Code": "\u4ee3\u7801",
+"Paragraph": "\u6bb5\u843d",
+"Blockquote": "\u5f15\u6587\u533a\u5757",
+"Inline": "\u6587\u672c",
+"Blocks": "\u57fa\u5757",
+"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002",
+"Fonts": "\u5b57\u4f53",
+"Font Sizes": "\u5b57\u53f7",
+"Class": "\u7c7b\u578b",
+"Browse for an image": "\u6d4f\u89c8\u56fe\u50cf",
+"OR": "\u6216",
+"Drop an image here": "\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64",
+"Upload": "\u4e0a\u4f20",
+"Block": "\u5757",
+"Align": "\u5bf9\u9f50",
+"Default": "\u9ed8\u8ba4",
+"Circle": "\u7a7a\u5fc3\u5706",
+"Disc": "\u5b9e\u5fc3\u5706",
+"Square": "\u65b9\u5757",
+"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd",
+"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd",
+"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd",
+"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd",
+"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",
+"Anchor...": "\u951a\u70b9...",
+"Name": "\u540d\u79f0",
+"Id": "\u6807\u8bc6\u7b26",
+"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002",
+"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f",
+"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f",
+"Special character...": "\u7279\u6b8a\u5b57\u7b26...",
+"Source code": "\u6e90\u4ee3\u7801",
+"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b",
+"Language": "\u8bed\u8a00",
+"Code sample...": "\u793a\u4f8b\u4ee3\u7801...",
+"Color Picker": "\u9009\u8272\u5668",
+"R": "R",
+"G": "G",
+"B": "B",
+"Left to right": "\u4ece\u5de6\u5230\u53f3",
+"Right to left": "\u4ece\u53f3\u5230\u5de6",
+"Emoticons": "\u8868\u60c5",
+"Emoticons...": "\u8868\u60c5\u7b26\u53f7...",
+"Metadata and Document Properties": "\u5143\u6570\u636e\u548c\u6587\u6863\u5c5e\u6027",
+"Title": "\u6807\u9898",
+"Keywords": "\u5173\u952e\u8bcd",
+"Description": "\u63cf\u8ff0",
+"Robots": "\u673a\u5668\u4eba",
+"Author": "\u4f5c\u8005",
+"Encoding": "\u7f16\u7801",
+"Fullscreen": "\u5168\u5c4f",
+"Action": "\u64cd\u4f5c",
+"Shortcut": "\u5feb\u6377\u952e",
+"Help": "\u5e2e\u52a9",
+"Address": "\u5730\u5740",
+"Focus to menubar": "\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f",
+"Focus to toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f",
+"Focus to element path": "\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84",
+"Focus to contextual toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355",
+"Insert link (if link plugin activated)": "\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
+"Save (if save plugin activated)": "\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
+"Find (if searchreplace plugin activated)": "\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
+"Plugins installed ({0}):": "\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):",
+"Premium plugins:": "\u4f18\u79c0\u63d2\u4ef6\uff1a",
+"Learn more...": "\u4e86\u89e3\u66f4\u591a...",
+"You are using {0}": "\u4f60\u6b63\u5728\u4f7f\u7528 {0}",
+"Plugins": "\u63d2\u4ef6",
+"Handy Shortcuts": "\u5feb\u6377\u952e",
+"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf",
+"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247",
+"Alternative description": "\u66ff\u4ee3\u63cf\u8ff0",
+"Accessibility": "\u8f85\u52a9\u529f\u80fd",
+"Image is decorative": "\u56fe\u50cf\u662f\u88c5\u9970\u6027\u7684",
+"Source": "\u5730\u5740",
+"Dimensions": "\u5927\u5c0f",
+"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4",
+"General": "\u666e\u901a",
+"Advanced": "\u9ad8\u7ea7",
+"Style": "\u6837\u5f0f",
+"Vertical space": "\u5782\u76f4\u8fb9\u8ddd",
+"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd",
+"Border": "\u8fb9\u6846",
+"Insert image": "\u63d2\u5165\u56fe\u7247",
+"Image...": "\u56fe\u7247...",
+"Image list": "\u56fe\u7247\u5217\u8868",
+"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c",
+"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c",
+"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c",
+"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c",
+"Edit image": "\u7f16\u8f91\u56fe\u7247",
+"Image options": "\u56fe\u7247\u9009\u9879",
+"Zoom in": "\u653e\u5927",
+"Zoom out": "\u7f29\u5c0f",
+"Crop": "\u88c1\u526a",
+"Resize": "\u8c03\u6574\u5927\u5c0f",
+"Orientation": "\u65b9\u5411",
+"Brightness": "\u4eae\u5ea6",
+"Sharpen": "\u9510\u5316",
+"Contrast": "\u5bf9\u6bd4\u5ea6",
+"Color levels": "\u989c\u8272\u5c42\u6b21",
+"Gamma": "\u4f3d\u9a6c\u503c",
+"Invert": "\u53cd\u8f6c",
+"Apply": "\u5e94\u7528",
+"Back": "\u540e\u9000",
+"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4",
+"Date\/time": "\u65e5\u671f\/\u65f6\u95f4",
+"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
+"Text to display": "\u663e\u793a\u6587\u5b57",
+"Url": "\u5730\u5740",
+"Open link in...": "\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...",
+"Current window": "\u5f53\u524d\u7a97\u53e3",
+"None": "\u65e0",
+"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00",
+"Open link": "\u6253\u5f00\u94fe\u63a5",
+"Remove link": "\u5220\u9664\u94fe\u63a5",
+"Anchors": "\u951a\u70b9",
+"Link...": "\u94fe\u63a5...",
+"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5",
+"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f",
+"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f",
+"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\u3002\u60a8\u60f3\u6dfb\u52a0\u6240\u9700\u7684 https:\/\/ \u524d\u7f00\u5417\uff1f",
+"Link list": "\u94fe\u63a5\u5217\u8868",
+"Insert video": "\u63d2\u5165\u89c6\u9891",
+"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891",
+"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53",
+"Alternative source": "\u955c\u50cf",
+"Alternative source URL": "\u66ff\u4ee3\u6765\u6e90\u7f51\u5740",
+"Media poster (Image URL)": "\u5c01\u9762(\u56fe\u7247\u5730\u5740)",
+"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:",
+"Embed": "\u5185\u5d4c",
+"Media...": "\u591a\u5a92\u4f53...",
+"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c",
+"Page break": "\u5206\u9875\u7b26",
+"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c",
+"Preview": "\u9884\u89c8",
+"Print...": "\u6253\u5370...",
+"Save": "\u4fdd\u5b58",
+"Find": "\u67e5\u627e",
+"Replace with": "\u66ff\u6362\u4e3a",
+"Replace": "\u66ff\u6362",
+"Replace all": "\u5168\u90e8\u66ff\u6362",
+"Previous": "\u4e0a\u4e00\u4e2a",
+"Next": "\u4e0b\u4e00\u4e2a",
+"Find and Replace": "\u67e5\u627e\u548c\u66ff\u6362",
+"Find and replace...": "\u67e5\u627e\u5e76\u66ff\u6362...",
+"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.",
+"Match case": "\u533a\u5206\u5927\u5c0f\u5199",
+"Find whole words only": "\u5168\u5b57\u5339\u914d",
+"Find in selection": "\u5728\u9009\u533a\u4e2d\u67e5\u627e",
+"Spellcheck": "\u62fc\u5199\u68c0\u67e5",
+"Spellcheck Language": "\u62fc\u5199\u68c0\u67e5\u8bed\u8a00",
+"No misspellings found.": "\u6ca1\u6709\u53d1\u73b0\u62fc\u5199\u9519\u8bef",
+"Ignore": "\u5ffd\u7565",
+"Ignore all": "\u5168\u90e8\u5ffd\u7565",
+"Finish": "\u5b8c\u6210",
+"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178",
+"Insert table": "\u63d2\u5165\u8868\u683c",
+"Table properties": "\u8868\u683c\u5c5e\u6027",
+"Delete table": "\u5220\u9664\u8868\u683c",
+"Cell": "\u5355\u5143\u683c",
+"Row": "\u884c",
+"Column": "\u5217",
+"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027",
+"Merge cells": "\u5408\u5e76\u5355\u5143\u683c",
+"Split cell": "\u62c6\u5206\u5355\u5143\u683c",
+"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165",
+"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165",
+"Delete row": "\u5220\u9664\u884c",
+"Row properties": "\u884c\u5c5e\u6027",
+"Cut row": "\u526a\u5207\u884c",
+"Copy row": "\u590d\u5236\u884c",
+"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9",
+"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9",
+"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165",
+"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165",
+"Delete column": "\u5220\u9664\u5217",
+"Cols": "\u5217",
+"Rows": "\u884c",
+"Width": "\u5bbd",
+"Height": "\u9ad8",
+"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd",
+"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd",
+"Caption": "\u6807\u9898",
+"Show caption": "\u663e\u793a\u6807\u9898",
+"Left": "\u5de6\u5bf9\u9f50",
+"Center": "\u5c45\u4e2d",
+"Right": "\u53f3\u5bf9\u9f50",
+"Cell type": "\u5355\u5143\u683c\u7c7b\u578b",
+"Scope": "\u8303\u56f4",
+"Alignment": "\u5bf9\u9f50\u65b9\u5f0f",
+"H Align": "\u6c34\u5e73\u5bf9\u9f50",
+"V Align": "\u5782\u76f4\u5bf9\u9f50",
+"Top": "\u9876\u90e8\u5bf9\u9f50",
+"Middle": "\u5782\u76f4\u5c45\u4e2d",
+"Bottom": "\u5e95\u90e8\u5bf9\u9f50",
+"Header cell": "\u8868\u5934\u5355\u5143\u683c",
+"Row group": "\u884c\u7ec4",
+"Column group": "\u5217\u7ec4",
+"Row type": "\u884c\u7c7b\u578b",
+"Header": "\u8868\u5934",
+"Body": "\u8868\u4f53",
+"Footer": "\u8868\u5c3e",
+"Border color": "\u8fb9\u6846\u989c\u8272",
+"Insert template...": "\u63d2\u5165\u6a21\u677f...",
+"Templates": "\u6a21\u677f",
+"Template": "\u6a21\u677f",
+"Text color": "\u6587\u5b57\u989c\u8272",
+"Background color": "\u80cc\u666f\u8272",
+"Custom...": "\u81ea\u5b9a\u4e49...",
+"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272",
+"No color": "\u65e0",
+"Remove color": "\u79fb\u9664\u989c\u8272",
+"Table of Contents": "\u5185\u5bb9\u5217\u8868",
+"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846",
+"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26",
+"Word count": "\u5b57\u6570",
+"Count": "\u8ba1\u6570",
+"Document": "\u6587\u6863",
+"Selection": "\u9009\u62e9",
+"Words": "\u5355\u8bcd",
+"Words: {0}": "\u5b57\u6570\uff1a{0}",
+"{0} words": "{0} \u5b57",
+"File": "\u6587\u4ef6",
+"Edit": "\u7f16\u8f91",
+"Insert": "\u63d2\u5165",
+"View": "\u89c6\u56fe",
+"Format": "\u683c\u5f0f",
+"Table": "\u8868\u683c",
+"Tools": "\u5de5\u5177",
+"Powered by {0}": "\u7531{0}\u9a71\u52a8",
+"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9",
+"Image title": "\u56fe\u7247\u6807\u9898",
+"Border width": "\u8fb9\u6846\u5bbd\u5ea6",
+"Border style": "\u8fb9\u6846\u6837\u5f0f",
+"Error": "\u9519\u8bef",
+"Warn": "\u8b66\u544a",
+"Valid": "\u6709\u6548",
+"To open the popup, press Shift+Enter": "\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846",
+"Rich Text Area. Press ALT-0 for help.": "\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002",
+"System Font": "\u7cfb\u7edf\u5b57\u4f53",
+"Failed to upload image: {0}": "\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}",
+"Failed to load plugin: {0} from url {1}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}",
+"Failed to load plugin url: {0}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}",
+"Failed to initialize plugin: {0}": "\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}",
+"example": "\u793a\u4f8b",
+"Search": "\u641c\u7d22",
+"All": "\u5168\u90e8",
+"Currency": "\u8d27\u5e01",
+"Text": "\u6587\u5b57",
+"Quotations": "\u5f15\u7528",
+"Mathematical": "\u6570\u5b66",
+"Extended Latin": "\u62c9\u4e01\u8bed\u6269\u5145",
+"Symbols": "\u7b26\u53f7",
+"Arrows": "\u7bad\u5934",
+"User Defined": "\u81ea\u5b9a\u4e49",
+"dollar sign": "\u7f8e\u5143\u7b26\u53f7",
+"currency sign": "\u8d27\u5e01\u7b26\u53f7",
+"euro-currency sign": "\u6b27\u5143\u7b26\u53f7",
+"colon sign": "\u5192\u53f7",
+"cruzeiro sign": "\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7",
+"french franc sign": "\u6cd5\u90ce\u7b26\u53f7",
+"lira sign": "\u91cc\u62c9\u7b26\u53f7",
+"mill sign": "\u5bc6\u5c14\u7b26\u53f7",
+"naira sign": "\u5948\u62c9\u7b26\u53f7",
+"peseta sign": "\u6bd4\u585e\u5854\u7b26\u53f7",
+"rupee sign": "\u5362\u6bd4\u7b26\u53f7",
+"won sign": "\u97e9\u5143\u7b26\u53f7",
+"new sheqel sign": "\u65b0\u8c22\u514b\u5c14\u7b26\u53f7",
+"dong sign": "\u8d8a\u5357\u76fe\u7b26\u53f7",
+"kip sign": "\u8001\u631d\u57fa\u666e\u7b26\u53f7",
+"tugrik sign": "\u56fe\u683c\u91cc\u514b\u7b26\u53f7",
+"drachma sign": "\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7",
+"german penny symbol": "\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7",
+"peso sign": "\u6bd4\u7d22\u7b26\u53f7",
+"guarani sign": "\u74dc\u62c9\u5c3c\u7b26\u53f7",
+"austral sign": "\u6fb3\u5143\u7b26\u53f7",
+"hryvnia sign": "\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7",
+"cedi sign": "\u585e\u5730\u7b26\u53f7",
+"livre tournois sign": "\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7",
+"spesmilo sign": "spesmilo\u7b26\u53f7",
+"tenge sign": "\u575a\u6208\u7b26\u53f7",
+"indian rupee sign": "\u5370\u5ea6\u5362\u6bd4",
+"turkish lira sign": "\u571f\u8033\u5176\u91cc\u62c9",
+"nordic mark sign": "\u5317\u6b27\u9a6c\u514b",
+"manat sign": "\u9a6c\u7eb3\u7279\u7b26\u53f7",
+"ruble sign": "\u5362\u5e03\u7b26\u53f7",
+"yen character": "\u65e5\u5143\u5b57\u6837",
+"yuan character": "\u4eba\u6c11\u5e01\u5143\u5b57\u6837",
+"yuan character, in hong kong and taiwan": "\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09",
+"yen\/yuan character variant one": "\u5143\u5b57\u6837\uff08\u5927\u5199\uff09",
+"Loading emoticons...": "\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7...",
+"Could not load emoticons": "\u4e0d\u80fd\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7",
+"People": "\u4eba\u7c7b",
+"Animals and Nature": "\u52a8\u7269\u548c\u81ea\u7136",
+"Food and Drink": "\u98df\u7269\u548c\u996e\u54c1",
+"Activity": "\u6d3b\u52a8",
+"Travel and Places": "\u65c5\u6e38\u548c\u5730\u70b9",
+"Objects": "\u7269\u4ef6",
+"Flags": "\u65d7\u5e1c",
+"Characters": "\u5b57\u7b26",
+"Characters (no spaces)": "\u5b57\u7b26(\u65e0\u7a7a\u683c)",
+"{0} characters": "{0} \u4e2a\u5b57\u7b26",
+"Error: Form submit field collision.": "\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002",
+"Error: No form element found.": "\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002",
+"Update": "\u66f4\u65b0",
+"Color swatch": "\u989c\u8272\u6837\u672c",
+"Turquoise": "\u9752\u7eff\u8272",
+"Green": "\u7eff\u8272",
+"Blue": "\u84dd\u8272",
+"Purple": "\u7d2b\u8272",
+"Navy Blue": "\u6d77\u519b\u84dd",
+"Dark Turquoise": "\u6df1\u84dd\u7eff\u8272",
+"Dark Green": "\u6df1\u7eff\u8272",
+"Medium Blue": "\u4e2d\u84dd\u8272",
+"Medium Purple": "\u4e2d\u7d2b\u8272",
+"Midnight Blue": "\u6df1\u84dd\u8272",
+"Yellow": "\u9ec4\u8272",
+"Orange": "\u6a59\u8272",
+"Red": "\u7ea2\u8272",
+"Light Gray": "\u6d45\u7070\u8272",
+"Gray": "\u7070\u8272",
+"Dark Yellow": "\u6697\u9ec4\u8272",
+"Dark Orange": "\u6df1\u6a59\u8272",
+"Dark Red": "\u6df1\u7ea2\u8272",
+"Medium Gray": "\u4e2d\u7070\u8272",
+"Dark Gray": "\u6df1\u7070\u8272",
+"Light Green": "\u6d45\u7eff\u8272",
+"Light Yellow": "\u6d45\u9ec4\u8272",
+"Light Red": "\u6d45\u7ea2\u8272",
+"Light Purple": "\u6d45\u7d2b\u8272",
+"Light Blue": "\u6d45\u84dd\u8272",
+"Dark Purple": "\u6df1\u7d2b\u8272",
+"Dark Blue": "\u6df1\u84dd\u8272",
+"Black": "\u9ed1\u8272",
+"White": "\u767d\u8272",
+"Switch to or from fullscreen mode": "\u5207\u6362\u5168\u5c4f\u6a21\u5f0f",
+"Open help dialog": "\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846",
+"history": "\u5386\u53f2",
+"styles": "\u6837\u5f0f",
+"formatting": "\u683c\u5f0f\u5316",
+"alignment": "\u5bf9\u9f50",
+"indentation": "\u7f29\u8fdb",
+"Font": "\u5b57\u4f53",
+"Size": "\u5b57\u53f7",
+"More...": "\u66f4\u591a...",
+"Select...": "\u9009\u62e9...",
+"Preferences": "\u9996\u9009\u9879",
+"Yes": "\u662f",
+"No": "\u5426",
+"Keyboard Navigation": "\u952e\u76d8\u6307\u5f15",
+"Version": "\u7248\u672c",
+"Code view": "\u4ee3\u7801\u89c6\u56fe",
+"Open popup menu for split buttons": "\u6253\u5f00\u5f39\u51fa\u5f0f\u83dc\u5355\uff0c\u7528\u4e8e\u62c6\u5206\u6309\u94ae",
+"List Properties": "\u5217\u8868\u5c5e\u6027",
+"List properties...": "\u6807\u9898\u5b57\u4f53\u5c5e\u6027",
+"Start list at number": "\u4ee5\u6570\u5b57\u5f00\u59cb\u5217\u8868",
+"Line height": "\u884c\u9ad8",
+"comments": "\u5907\u6ce8",
+"Format Painter": "\u683c\u5f0f\u5237",
+"Insert\/edit iframe": "\u63d2\u5165\/\u7f16\u8f91\u6846\u67b6",
+"Capitalization": "\u5927\u5199",
+"lowercase": "\u5c0f\u5199",
+"UPPERCASE": "\u5927\u5199",
+"Title Case": "\u9996\u5b57\u6bcd\u5927\u5199",
+"permanent pen": "\u8bb0\u53f7\u7b14",
+"Permanent Pen Properties": "\u6c38\u4e45\u7b14\u5c5e\u6027",
+"Permanent pen properties...": "\u6c38\u4e45\u7b14\u5c5e\u6027...",
+"case change": "\u6848\u4f8b\u66f4\u6539",
+"page embed": "\u9875\u9762\u5d4c\u5165",
+"Advanced sort...": "\u9ad8\u7ea7\u6392\u5e8f...",
+"Advanced Sort": "\u9ad8\u7ea7\u6392\u5e8f",
+"Sort table by column ascending": "\u6309\u5217\u5347\u5e8f\u8868",
+"Sort table by column descending": "\u6309\u5217\u964d\u5e8f\u8868",
+"Sort": "\u6392\u5e8f",
+"Order": "\u6392\u5e8f",
+"Sort by": "\u6392\u5e8f\u65b9\u5f0f",
+"Ascending": "\u5347\u5e8f",
+"Descending": "\u964d\u5e8f",
+"Column {0}": "\u5217{0}",
+"Row {0}": "\u884c{0}",
+"Spellcheck...": "\u62fc\u5199\u68c0\u67e5...",
+"Misspelled word": "\u62fc\u5199\u9519\u8bef\u7684\u5355\u8bcd",
+"Suggestions": "\u5efa\u8bae",
+"Change": "\u66f4\u6539",
+"Finding word suggestions": "\u67e5\u627e\u5355\u8bcd\u5efa\u8bae",
+"Success": "\u6210\u529f",
+"Repair": "\u4fee\u590d",
+"Issue {0} of {1}": "\u5171\u8ba1{1}\u95ee\u9898{0}",
+"Images must be marked as decorative or have an alternative text description": "\u56fe\u50cf\u5fc5\u987b\u6807\u8bb0\u4e3a\u88c5\u9970\u6027\u6216\u5177\u6709\u66ff\u4ee3\u6587\u672c\u63cf\u8ff0",
+"Images must have an alternative text description. Decorative images are not allowed.": "\u56fe\u50cf\u5fc5\u987b\u5177\u6709\u66ff\u4ee3\u6587\u672c\u63cf\u8ff0\u3002\u4e0d\u5141\u8bb8\u4f7f\u7528\u88c5\u9970\u56fe\u50cf\u3002",
+"Or provide alternative text:": "\u6216\u63d0\u4f9b\u5907\u9009\u6587\u672c\uff1a",
+"Make image decorative:": "\u4f7f\u56fe\u50cf\u88c5\u9970\uff1a",
+"ID attribute must be unique": "ID \u5c5e\u6027\u5fc5\u987b\u662f\u552f\u4e00\u7684",
+"Make ID unique": "\u4f7f ID \u72ec\u4e00\u65e0\u4e8c",
+"Keep this ID and remove all others": "\u4fdd\u7559\u6b64 ID \u5e76\u5220\u9664\u6240\u6709\u5176\u4ed6",
+"Remove this ID": "\u5220\u9664\u6b64 ID",
+"Remove all IDs": "\u6e05\u9664\u5168\u90e8IDs",
+"Checklist": "\u6e05\u5355",
+"Anchor": "\u951a\u70b9",
+"Special character": "\u7279\u6b8a\u7b26\u53f7",
+"Code sample": "\u4ee3\u7801\u793a\u4f8b",
+"Color": "\u989c\u8272",
+"Document properties": "\u6587\u6863\u5c5e\u6027",
+"Image description": "\u56fe\u7247\u63cf\u8ff0",
+"Image": "\u56fe\u7247",
+"Insert link": "\u63d2\u5165\u94fe\u63a5",
+"Target": "\u6253\u5f00\u65b9\u5f0f",
+"Link": "\u94fe\u63a5",
+"Poster": "\u5c01\u9762",
+"Media": "\u5a92\u4f53",
+"Print": "\u6253\u5370",
+"Prev": "\u4e0a\u4e00\u4e2a",
+"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362",
+"Whole words": "\u5168\u5b57\u5339\u914d",
+"Insert template": "\u63d2\u5165\u6a21\u677f"
+});
\ No newline at end of file
diff --git a/guns-front-project/public/tinymce/langs/zh_TW.js b/guns-front-project/public/tinymce/langs/zh_TW.js
new file mode 100644
index 00000000..1987486c
--- /dev/null
+++ b/guns-front-project/public/tinymce/langs/zh_TW.js
@@ -0,0 +1,419 @@
+tinymce.addI18n('zh_TW',{
+"Redo": "\u91cd\u505a",
+"Undo": "\u64a4\u92b7",
+"Cut": "\u526a\u4e0b",
+"Copy": "\u8907\u88fd",
+"Paste": "\u8cbc\u4e0a",
+"Select all": "\u5168\u9078",
+"New document": "\u65b0\u6587\u4ef6",
+"Ok": "\u78ba\u5b9a",
+"Cancel": "\u53d6\u6d88",
+"Visual aids": "\u5c0f\u5e6b\u624b",
+"Bold": "\u7c97\u9ad4",
+"Italic": "\u659c\u9ad4",
+"Underline": "\u4e0b\u5283\u7dda",
+"Strikethrough": "\u522a\u9664\u7dda",
+"Superscript": "\u4e0a\u6a19",
+"Subscript": "\u4e0b\u6a19",
+"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
+"Align left": "\u5de6\u908a\u5c0d\u9f4a",
+"Align center": "\u4e2d\u9593\u5c0d\u9f4a",
+"Align right": "\u53f3\u908a\u5c0d\u9f4a",
+"Justify": "\u5de6\u53f3\u5c0d\u9f4a",
+"Bullet list": "\u9805\u76ee\u6e05\u55ae",
+"Numbered list": "\u6578\u5b57\u6e05\u55ae",
+"Decrease indent": "\u6e1b\u5c11\u7e2e\u6392",
+"Increase indent": "\u589e\u52a0\u7e2e\u6392",
+"Close": "\u95dc\u9589",
+"Formats": "\u683c\u5f0f",
+"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u5b58\u53d6\u526a\u8cbc\u7c3f\uff0c\u53ef\u4ee5\u4f7f\u7528\u5feb\u901f\u9375 Ctrl + X\/C\/V \u4ee3\u66ff\u526a\u4e0b\u3001\u8907\u88fd\u8207\u8cbc\u4e0a\u3002",
+"Headers": "\u6a19\u984c",
+"Header 1": "\u6a19\u984c 1",
+"Header 2": "\u6a19\u984c 2",
+"Header 3": "\u6a19\u984c 3",
+"Header 4": "\u6a19\u984c 4",
+"Header 5": "\u6a19\u984c 5",
+"Header 6": "\u6a19\u984c 6",
+"Headings": "\u6a19\u984c",
+"Heading 1": "\u6a19\u984c1",
+"Heading 2": "\u6a19\u984c2",
+"Heading 3": "\u6a19\u984c3",
+"Heading 4": "\u6a19\u984c4",
+"Heading 5": "\u6a19\u984c5",
+"Heading 6": "\u6a19\u984c6",
+"Preformatted": "\u9810\u5148\u683c\u5f0f\u5316\u7684",
+"Div": "Div",
+"Pre": "Pre",
+"Code": "\u4ee3\u78bc",
+"Paragraph": "\u6bb5\u843d",
+"Blockquote": "\u5f15\u6587\u5340\u584a",
+"Inline": "\u5167\u806f",
+"Blocks": "\u57fa\u584a",
+"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u76ee\u524d\u5c07\u4ee5\u7d14\u6587\u5b57\u7684\u6a21\u5f0f\u8cbc\u4e0a\uff0c\u60a8\u53ef\u4ee5\u518d\u9ede\u9078\u4e00\u6b21\u53d6\u6d88\u3002",
+"Fonts": "\u5b57\u578b",
+"Font Sizes": "\u5b57\u578b\u5927\u5c0f",
+"Class": "\u985e\u578b",
+"Browse for an image": "\u5f9e\u5716\u7247\u4e2d\u700f\u89bd",
+"OR": "\u6216",
+"Drop an image here": "\u62d6\u66f3\u5716\u7247\u81f3\u6b64",
+"Upload": "\u4e0a\u50b3",
+"Block": "\u5340\u584a",
+"Align": "\u5c0d\u9f4a",
+"Default": "\u9810\u8a2d",
+"Circle": "\u7a7a\u5fc3\u5713",
+"Disc": "\u5be6\u5fc3\u5713",
+"Square": "\u6b63\u65b9\u5f62",
+"Lower Alpha": "\u5c0f\u5beb\u82f1\u6587\u5b57\u6bcd",
+"Lower Greek": "\u5e0c\u81d8\u5b57\u6bcd",
+"Lower Roman": "\u5c0f\u5beb\u7f85\u99ac\u6578\u5b57",
+"Upper Alpha": "\u5927\u5beb\u82f1\u6587\u5b57\u6bcd",
+"Upper Roman": "\u5927\u5beb\u7f85\u99ac\u6578\u5b57",
+"Anchor...": "\u9328\u9ede...",
+"Name": "\u540d\u7a31",
+"Id": "Id",
+"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id\u61c9\u4ee5\u5b57\u6bcd\u958b\u982d\uff0c\u5f8c\u9762\u63a5\u8457\u5b57\u6bcd\uff0c\u6578\u5b57\uff0c\u7834\u6298\u865f\uff0c\u9ede\u6578\uff0c\u5192\u865f\u6216\u4e0b\u5283\u7dda\u3002",
+"You have unsaved changes are you sure you want to navigate away?": "\u7de8\u8f2f\u5c1a\u672a\u88ab\u5132\u5b58\uff0c\u4f60\u78ba\u5b9a\u8981\u96e2\u958b\uff1f",
+"Restore last draft": "\u8f09\u5165\u4e0a\u4e00\u6b21\u7de8\u8f2f\u7684\u8349\u7a3f",
+"Special character...": "\u7279\u6b8a\u5b57\u5143......",
+"Source code": "\u539f\u59cb\u78bc",
+"Insert\/Edit code sample": "\u63d2\u5165\/\u7de8\u8f2f \u7a0b\u5f0f\u78bc\u7bc4\u4f8b",
+"Language": "\u8a9e\u8a00",
+"Code sample...": "\u7a0b\u5f0f\u78bc\u7bc4\u4f8b...",
+"Color Picker": "\u9078\u8272\u5668",
+"R": "\u7d05",
+"G": "\u7da0",
+"B": "\u85cd",
+"Left to right": "\u5f9e\u5de6\u5230\u53f3",
+"Right to left": "\u5f9e\u53f3\u5230\u5de6",
+"Emoticons...": "\u8868\u60c5\u7b26\u865f\u2026",
+"Metadata and Document Properties": "\u5f8c\u8a2d\u8cc7\u6599\u8207\u6587\u4ef6\u5c6c\u6027",
+"Title": "\u6a19\u984c",
+"Keywords": "\u95dc\u9375\u5b57",
+"Description": "\u63cf\u8ff0",
+"Robots": "\u6a5f\u5668\u4eba",
+"Author": "\u4f5c\u8005",
+"Encoding": "\u7de8\u78bc",
+"Fullscreen": "\u5168\u87a2\u5e55",
+"Action": "\u52d5\u4f5c",
+"Shortcut": "\u5feb\u901f\u9375",
+"Help": "\u5e6b\u52a9",
+"Address": "\u5730\u5740",
+"Focus to menubar": "\u8df3\u81f3\u9078\u55ae\u5217",
+"Focus to toolbar": "\u8df3\u81f3\u5de5\u5177\u5217",
+"Focus to element path": "\u8df3\u81f3HTML\u5143\u7d20\u5217",
+"Focus to contextual toolbar": "\u8df3\u81f3\u5feb\u6377\u9078\u55ae",
+"Insert link (if link plugin activated)": "\u65b0\u589e\u6377\u5f91 (\u6377\u5f91\u5916\u639b\u555f\u7528\u6642)",
+"Save (if save plugin activated)": "\u5132\u5b58 (\u5132\u5b58\u5916\u639b\u555f\u7528\u6642)",
+"Find (if searchreplace plugin activated)": "\u5c0b\u627e (\u5c0b\u627e\u53d6\u4ee3\u5916\u639b\u555f\u7528\u6642)",
+"Plugins installed ({0}):": "({0}) \u500b\u5916\u639b\u5df2\u5b89\u88dd\uff1a",
+"Premium plugins:": "\u52a0\u503c\u5916\u639b\uff1a",
+"Learn more...": "\u4e86\u89e3\u66f4\u591a...",
+"You are using {0}": "\u60a8\u6b63\u5728\u4f7f\u7528 {0}",
+"Plugins": "\u5916\u639b",
+"Handy Shortcuts": "\u5feb\u901f\u9375",
+"Horizontal line": "\u6c34\u5e73\u7dda",
+"Insert\/edit image": "\u63d2\u5165\/\u7de8\u8f2f \u5716\u7247",
+"Image description": "\u5716\u7247\u63cf\u8ff0",
+"Source": "\u5716\u7247\u7db2\u5740",
+"Dimensions": "\u5c3a\u5bf8",
+"Constrain proportions": "\u7b49\u6bd4\u4f8b\u7e2e\u653e",
+"General": "\u4e00\u822c",
+"Advanced": "\u9032\u968e",
+"Style": "\u6a23\u5f0f",
+"Vertical space": "\u9ad8\u5ea6",
+"Horizontal space": "\u5bec\u5ea6",
+"Border": "\u908a\u6846",
+"Insert image": "\u63d2\u5165\u5716\u7247",
+"Image...": "\u5716\u7247......",
+"Image list": "\u5716\u7247\u6e05\u55ae",
+"Rotate counterclockwise": "\u9006\u6642\u91dd\u65cb\u8f49",
+"Rotate clockwise": "\u9806\u6642\u91dd\u65cb\u8f49",
+"Flip vertically": "\u5782\u76f4\u7ffb\u8f49",
+"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f49",
+"Edit image": "\u7de8\u8f2f\u5716\u7247",
+"Image options": "\u5716\u7247\u9078\u9805",
+"Zoom in": "\u653e\u5927",
+"Zoom out": "\u7e2e\u5c0f",
+"Crop": "\u88c1\u526a",
+"Resize": "\u8abf\u6574\u5927\u5c0f",
+"Orientation": "\u65b9\u5411",
+"Brightness": "\u4eae\u5ea6",
+"Sharpen": "\u92b3\u5316",
+"Contrast": "\u5c0d\u6bd4",
+"Color levels": "\u984f\u8272\u5c64\u6b21",
+"Gamma": "\u4f3d\u99ac\u503c",
+"Invert": "\u53cd\u8f49",
+"Apply": "\u61c9\u7528",
+"Back": "\u5f8c\u9000",
+"Insert date\/time": "\u63d2\u5165 \u65e5\u671f\/\u6642\u9593",
+"Date\/time": "\u65e5\u671f\/\u6642\u9593",
+"Insert\/Edit Link": "\u63d2\u5165\/\u7de8\u8f2f\u9023\u7d50",
+"Insert\/edit link": "\u63d2\u5165\/\u7de8\u8f2f\u9023\u7d50",
+"Text to display": "\u986f\u793a\u6587\u5b57",
+"Url": "\u7db2\u5740",
+"Open link in...": "\u958b\u555f\u9023\u7d50\u65bc...",
+"Current window": "\u76ee\u524d\u8996\u7a97",
+"None": "\u7121",
+"New window": "\u53e6\u958b\u8996\u7a97",
+"Remove link": "\u79fb\u9664\u9023\u7d50",
+"Anchors": "\u52a0\u5165\u9328\u9ede",
+"Link...": "\u9023\u7d50...",
+"Paste or type a link": "\u8cbc\u4e0a\u6216\u8f38\u5165\u9023\u7d50",
+"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5beb\u7684URL\u70ba\u96fb\u5b50\u90f5\u4ef6\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7db4\u55ce\uff1f",
+"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5beb\u7684URL\u5c6c\u65bc\u5916\u90e8\u93c8\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7db4\u55ce\uff1f",
+"Link list": "\u9023\u7d50\u6e05\u55ae",
+"Insert video": "\u63d2\u5165\u5f71\u97f3",
+"Insert\/edit video": "\u63d2\u4ef6\/\u7de8\u8f2f \u5f71\u97f3",
+"Insert\/edit media": "\u63d2\u5165\/\u7de8\u8f2f \u5a92\u9ad4",
+"Alternative source": "\u66ff\u4ee3\u5f71\u97f3",
+"Alternative source URL": "\u66ff\u4ee3\u4f86\u6e90URL",
+"Media poster (Image URL)": "\u5a92\u9ad4\u6d77\u5831\uff08\u5f71\u50cfImage URL\uff09",
+"Paste your embed code below:": "\u8acb\u5c07\u60a8\u7684\u5d4c\u5165\u5f0f\u7a0b\u5f0f\u78bc\u8cbc\u5728\u4e0b\u9762:",
+"Embed": "\u5d4c\u5165\u78bc",
+"Media...": "\u5a92\u9ad4...",
+"Nonbreaking space": "\u4e0d\u5206\u884c\u7684\u7a7a\u683c",
+"Page break": "\u5206\u9801",
+"Paste as text": "\u4ee5\u7d14\u6587\u5b57\u8cbc\u4e0a",
+"Preview": "\u9810\u89bd",
+"Print...": "\u5217\u5370...",
+"Save": "\u5132\u5b58",
+"Find": "\u641c\u5c0b",
+"Replace with": "\u66f4\u63db",
+"Replace": "\u66ff\u63db",
+"Replace all": "\u66ff\u63db\u5168\u90e8",
+"Previous": "\u4e0a\u4e00\u500b",
+"Next": "\u4e0b\u4e00\u500b",
+"Find and replace...": "\u5c0b\u627e\u53ca\u53d6\u4ee3...",
+"Could not find the specified string.": "\u7121\u6cd5\u67e5\u8a62\u5230\u6b64\u7279\u5b9a\u5b57\u4e32",
+"Match case": "\u76f8\u5339\u914d\u6848\u4ef6",
+"Find whole words only": "\u50c5\u627e\u51fa\u5b8c\u6574\u5b57\u532f",
+"Spell check": "\u62fc\u5beb\u6aa2\u67e5",
+"Ignore": "\u5ffd\u7565",
+"Ignore all": "\u5ffd\u7565\u6240\u6709",
+"Finish": "\u5b8c\u6210",
+"Add to Dictionary": "\u52a0\u5165\u5b57\u5178\u4e2d",
+"Insert table": "\u63d2\u5165\u8868\u683c",
+"Table properties": "\u8868\u683c\u5c6c\u6027",
+"Delete table": "\u522a\u9664\u8868\u683c",
+"Cell": "\u5132\u5b58\u683c",
+"Row": "\u5217",
+"Column": "\u884c",
+"Cell properties": "\u5132\u5b58\u683c\u5c6c\u6027",
+"Merge cells": "\u5408\u4f75\u5132\u5b58\u683c",
+"Split cell": "\u5206\u5272\u5132\u5b58\u683c",
+"Insert row before": "\u63d2\u5165\u5217\u5728...\u4e4b\u524d",
+"Insert row after": "\u63d2\u5165\u5217\u5728...\u4e4b\u5f8c",
+"Delete row": "\u522a\u9664\u5217",
+"Row properties": "\u5217\u5c6c\u6027",
+"Cut row": "\u526a\u4e0b\u5217",
+"Copy row": "\u8907\u88fd\u5217",
+"Paste row before": "\u8cbc\u4e0a\u5217\u5728...\u4e4b\u524d",
+"Paste row after": "\u8cbc\u4e0a\u5217\u5728...\u4e4b\u5f8c",
+"Insert column before": "\u63d2\u5165\u6b04\u4f4d\u5728...\u4e4b\u524d",
+"Insert column after": "\u63d2\u5165\u6b04\u4f4d\u5728...\u4e4b\u5f8c",
+"Delete column": "\u522a\u9664\u884c",
+"Cols": "\u6b04\u4f4d\u6bb5",
+"Rows": "\u5217",
+"Width": "\u5bec\u5ea6",
+"Height": "\u9ad8\u5ea6",
+"Cell spacing": "\u5132\u5b58\u683c\u5f97\u9593\u8ddd",
+"Cell padding": "\u5132\u5b58\u683c\u7684\u908a\u8ddd",
+"Show caption": "\u986f\u793a\u6a19\u984c",
+"Left": "\u5de6\u908a",
+"Center": "\u4e2d\u9593",
+"Right": "\u53f3\u908a",
+"Cell type": "\u5132\u5b58\u683c\u7684\u985e\u578b",
+"Scope": "\u7bc4\u570d",
+"Alignment": "\u5c0d\u9f4a",
+"H Align": "\u6c34\u5e73\u4f4d\u7f6e",
+"V Align": "\u5782\u76f4\u4f4d\u7f6e",
+"Top": "\u7f6e\u9802",
+"Middle": "\u7f6e\u4e2d",
+"Bottom": "\u7f6e\u5e95",
+"Header cell": "\u6a19\u982d\u5132\u5b58\u683c",
+"Row group": "\u5217\u7fa4\u7d44",
+"Column group": "\u6b04\u4f4d\u7fa4\u7d44",
+"Row type": "\u884c\u7684\u985e\u578b",
+"Header": "\u6a19\u982d",
+"Body": "\u4e3b\u9ad4",
+"Footer": "\u9801\u5c3e",
+"Border color": "\u908a\u6846\u984f\u8272",
+"Insert template...": "\u63d2\u5165\u6a23\u7248...",
+"Templates": "\u6a23\u7248",
+"Template": "\u6a23\u677f",
+"Text color": "\u6587\u5b57\u984f\u8272",
+"Background color": "\u80cc\u666f\u984f\u8272",
+"Custom...": "\u81ea\u8a02",
+"Custom color": "\u81ea\u8a02\u984f\u8272",
+"No color": "No color",
+"Remove color": "\u79fb\u9664\u984f\u8272",
+"Table of Contents": "\u76ee\u9304",
+"Show blocks": "\u986f\u793a\u5340\u584a\u8cc7\u8a0a",
+"Show invisible characters": "\u986f\u793a\u96b1\u85cf\u5b57\u5143",
+"Word count": "\u8a08\u7b97\u5b57\u6578",
+"Count": "\u8a08\u7b97",
+"Document": "\u6587\u4ef6",
+"Selection": "\u9078\u9805",
+"Words": "\u5b57\u6578",
+"Words: {0}": "\u5b57\u6578\uff1a{0}",
+"{0} words": "{0} \u5b57\u5143",
+"File": "\u6a94\u6848",
+"Edit": "\u7de8\u8f2f",
+"Insert": "\u63d2\u5165",
+"View": "\u6aa2\u8996",
+"Format": "\u683c\u5f0f",
+"Table": "\u8868\u683c",
+"Tools": "\u5de5\u5177",
+"Powered by {0}": "\u7531 {0} \u63d0\u4f9b",
+"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u8c50\u5bcc\u7684\u6587\u672c\u5340\u57df\u3002\u6309ALT-F9\u524d\u5f80\u4e3b\u9078\u55ae\u3002\u6309ALT-F10\u547c\u53eb\u5de5\u5177\u6b04\u3002\u6309ALT-0\u5c0b\u6c42\u5e6b\u52a9",
+"Image title": "\u5716\u7247\u6a19\u984c",
+"Border width": "\u6846\u7dda\u5bec\u5ea6",
+"Border style": "\u6846\u7dda\u6a23\u5f0f",
+"Error": "\u932f\u8aa4",
+"Warn": "\u8b66\u544a",
+"Valid": "\u6709\u6548",
+"To open the popup, press Shift+Enter": "\u8981\u958b\u555f\u5f48\u51fa\u8996\u7a97\uff0c\u8acb\u6309Shift+Enter",
+"Rich Text Area. Press ALT-0 for help.": "\u5bcc\u6587\u672c\u5340\u57df\u3002\u8acb\u6309ALT-0\u5c0b\u6c42\u5354\u52a9\u3002",
+"System Font": "\u7cfb\u7d71\u5b57\u578b",
+"Failed to upload image: {0}": "\u7121\u6cd5\u4e0a\u50b3\u5f71\u50cf\uff1a{0}",
+"Failed to load plugin: {0} from url {1}": "\u7121\u6cd5\u4e0a\u50b3\u63d2\u4ef6\uff1a{0}\u81eaurl{1}",
+"Failed to load plugin url: {0}": "\u7121\u6cd5\u4e0a\u50b3\u63d2\u4ef6\uff1a{0}",
+"Failed to initialize plugin: {0}": "\u7121\u6cd5\u555f\u52d5\u63d2\u4ef6\uff1a{0}",
+"example": "\u7bc4\u4f8b",
+"Search": "\u641c\u7d22",
+"All": "\u5168\u90e8",
+"Currency": "\u8ca8\u5e63",
+"Text": "\u6587\u672c",
+"Quotations": "\u5f15\u7528",
+"Mathematical": "\u6578\u5b78",
+"Extended Latin": "\u62c9\u4e01\u5b57\u6bcd\u64f4\u5145",
+"Symbols": "\u7b26\u865f",
+"Arrows": "\u7bad\u982d",
+"User Defined": "\u4f7f\u7528\u8005\u5df2\u5b9a\u7fa9",
+"dollar sign": "\u7f8e\u5143\u7b26\u865f",
+"currency sign": "\u8ca8\u5e63\u7b26\u865f",
+"euro-currency sign": "\u6b50\u5143\u7b26\u865f",
+"colon sign": "\u79d1\u6717\u7b26\u865f",
+"cruzeiro sign": "\u514b\u9b6f\u8cfd\u7f85\u7b26\u865f",
+"french franc sign": "\u6cd5\u6717\u7b26\u865f",
+"lira sign": "\u91cc\u62c9\u7b26\u865f",
+"mill sign": "\u6587\u7b26\u865f",
+"naira sign": "\u5948\u62c9\u7b26\u865f",
+"peseta sign": "\u6bd4\u585e\u5854\u7b26\u865f",
+"rupee sign": "\u76e7\u6bd4\u7b26\u865f",
+"won sign": "\u97d3\u571c\u7b26\u865f",
+"new sheqel sign": "\u65b0\u8b1d\u514b\u723e\u7b26\u865f",
+"dong sign": "\u8d8a\u5357\u76fe\u7b26\u865f",
+"kip sign": "\u8001\u64be\u5e63\u7b26\u865f",
+"tugrik sign": "\u8499\u53e4\u5e63\u7b26\u865f",
+"drachma sign": "\u5fb7\u514b\u62c9\u99ac\u7b26\u865f",
+"german penny symbol": "\u5fb7\u570b\u5206\u7b26\u865f",
+"peso sign": "\u62ab\u7d22\u7b26\u865f",
+"guarani sign": "\u5df4\u62c9\u572d\u5e63\u7b26\u865f",
+"austral sign": "\u963f\u6839\u5ef7\u5e63\u7b26\u865f",
+"hryvnia sign": "\u70cf\u514b\u862d\u5e63\u7b26\u865f",
+"cedi sign": "\u8fe6\u7d0d\u5e63\u7b26\u865f",
+"livre tournois sign": "\u91cc\u5f17\u723e\u7b26\u865f",
+"spesmilo sign": "\u570b\u969b\u5e63\u7b26\u865f",
+"tenge sign": "\u54c8\u85a9\u514b\u5e63\u7b26\u865f",
+"indian rupee sign": "\u5370\u5ea6\u76e7\u6bd4\u7b26\u865f",
+"turkish lira sign": "\u571f\u8033\u5176\u91cc\u62c9\u7b26\u865f",
+"nordic mark sign": "\u5317\u6b50\u99ac\u514b\u7b26\u865f",
+"manat sign": "\u4e9e\u585e\u62dc\u7136\u5e63\u7b26\u865f",
+"ruble sign": "\u76e7\u5e03\u7b26\u865f",
+"yen character": "\u65e5\u5713\u7b26\u865f",
+"yuan character": "\u4eba\u6c11\u5e63\u7b26\u865f",
+"yuan character, in hong kong and taiwan": "\u6e2f\u5143\u8207\u53f0\u5e63\u7b26\u865f",
+"yen\/yuan character variant one": "\u65e5\u5713\/\u4eba\u6c11\u5e63\u7b26\u865f\u8b8a\u5316\u578b",
+"Loading emoticons...": "\u8f09\u5165\u8868\u60c5\u7b26\u865f\u2026",
+"Could not load emoticons": "\u7121\u6cd5\u8f09\u5165\u8868\u60c5\u7b26\u865f",
+"People": "\u4eba",
+"Animals and Nature": "\u52d5\u7269\u8207\u81ea\u7136",
+"Food and Drink": "\u98f2\u98df",
+"Activity": "\u6d3b\u52d5",
+"Travel and Places": "\u65c5\u884c\u8207\u5730\u9ede",
+"Objects": "\u7269\u4ef6",
+"Flags": "\u65d7\u6a19",
+"Characters": "\u5b57\u5143",
+"Characters (no spaces)": "\u5b57\u5143\uff08\u7121\u7a7a\u683c\uff09",
+"{0} characters": "{0}\u5b57\u5143",
+"Error: Form submit field collision.": "\u932f\u8aa4\uff1a\u8868\u683c\u905e\u4ea4\u6b04\u4f4d\u885d\u7a81\u3002",
+"Error: No form element found.": "\u932f\u8aa4\uff1a\u627e\u4e0d\u5230\u8868\u683c\u5143\u7d20\u3002",
+"Update": "\u66f4\u65b0",
+"Color swatch": "\u8272\u5f69\u6a23\u672c",
+"Turquoise": "\u571f\u8033\u5176\u85cd",
+"Green": "\u7da0\u8272",
+"Blue": "\u85cd\u8272",
+"Purple": "\u7d2b\u8272",
+"Navy Blue": "\u6df1\u85cd\u8272",
+"Dark Turquoise": "\u6df1\u571f\u8033\u5176\u85cd",
+"Dark Green": "\u6df1\u7da0\u8272",
+"Medium Blue": "\u4e2d\u85cd\u8272",
+"Medium Purple": "\u4e2d\u7d2b\u8272",
+"Midnight Blue": "\u9ed1\u85cd\u8272",
+"Yellow": "\u9ec3\u8272",
+"Orange": "\u6a59\u8272",
+"Red": "\u7d05\u8272",
+"Light Gray": "\u6dfa\u7070\u8272",
+"Gray": "\u7070\u8272",
+"Dark Yellow": "\u6df1\u9ec3\u8272",
+"Dark Orange": "\u6df1\u6a59\u8272",
+"Dark Red": "\u6697\u7d05\u8272",
+"Medium Gray": "\u4e2d\u7070\u8272",
+"Dark Gray": "\u6df1\u7070\u8272",
+"Light Green": "\u6de1\u7da0\u8272",
+"Light Yellow": "\u6dfa\u9ec3\u8272",
+"Light Red": "\u6dfa\u7d05\u8272",
+"Light Purple": "\u6dfa\u7d2b\u8272",
+"Light Blue": "\u6dfa\u85cd\u8272",
+"Dark Purple": "\u6df1\u7d2b\u8272",
+"Dark Blue": "\u6df1\u85cd\u8272",
+"Black": "\u9ed1\u8272",
+"White": "\u767d\u8272",
+"Switch to or from fullscreen mode": "\u8f49\u63db\u81ea\/\u81f3\u5168\u87a2\u5e55\u6a21\u5f0f",
+"Open help dialog": "\u958b\u555f\u5354\u52a9\u5c0d\u8a71",
+"history": "\u6b77\u53f2",
+"styles": "\u6a23\u5f0f",
+"formatting": "\u683c\u5f0f",
+"alignment": "\u5c0d\u9f4a",
+"indentation": "\u7e2e\u6392",
+"permanent pen": "\u6c38\u4e45\u6027\u7b46",
+"comments": "\u8a3b\u89e3",
+"Format Painter": "\u8907\u88fd\u683c\u5f0f",
+"Insert\/edit iframe": "\u63d2\u5165\/\u7de8\u8f2fiframe",
+"Capitalization": "\u5927\u5beb",
+"lowercase": "\u5c0f\u5beb",
+"UPPERCASE": "\u5927\u5beb",
+"Title Case": "\u5b57\u9996\u5927\u5beb",
+"Permanent Pen Properties": "\u6c38\u4e45\u6a19\u8a18\u5c6c\u6027",
+"Permanent pen properties...": "\u6c38\u4e45\u6a19\u8a18\u5c6c\u6027......",
+"Font": "\u5b57\u578b",
+"Size": "\u5b57\u5f62\u5927\u5c0f",
+"More...": "\u66f4\u591a\u8cc7\u8a0a......",
+"Spellcheck Language": "\u62fc\u5beb\u8a9e\u8a00",
+"Select...": "\u9078\u64c7......",
+"Preferences": "\u9996\u9078\u9805",
+"Yes": "\u662f",
+"No": "\u5426",
+"Keyboard Navigation": "\u9375\u76e4\u5c0e\u822a",
+"Version": "\u7248\u672c",
+"Anchor": "\u52a0\u5165\u9328\u9ede",
+"Special character": "\u7279\u6b8a\u5b57\u5143",
+"Code sample": "\u7a0b\u5f0f\u78bc\u7bc4\u4f8b",
+"Color": "\u984f\u8272",
+"Emoticons": "\u8868\u60c5",
+"Document properties": "\u6587\u4ef6\u7684\u5c6c\u6027",
+"Image": "\u5716\u7247",
+"Insert link": "\u63d2\u5165\u9023\u7d50",
+"Target": "\u958b\u555f\u65b9\u5f0f",
+"Link": "\u9023\u7d50",
+"Poster": "\u9810\u89bd\u5716\u7247",
+"Media": "\u5a92\u9ad4",
+"Print": "\u5217\u5370",
+"Prev": "\u4e0a\u4e00\u500b",
+"Find and replace": "\u5c0b\u627e\u53ca\u53d6\u4ee3",
+"Whole words": "\u6574\u500b\u55ae\u5b57",
+"Spellcheck": "\u62fc\u5b57\u6aa2\u67e5",
+"Caption": "\u8868\u683c\u6a19\u984c",
+"Insert template": "\u63d2\u5165\u6a23\u7248"
+});
\ No newline at end of file
diff --git a/guns-front-project/public/tinymce/skins/content/dark/content.css b/guns-front-project/public/tinymce/skins/content/dark/content.css
new file mode 100644
index 00000000..bae7923f
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/content/dark/content.css
@@ -0,0 +1,72 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+body {
+ background-color: #2f3742;
+ color: #dfe0e4;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+ line-height: 1.4;
+ margin: 1rem;
+}
+a {
+ color: #4099ff;
+}
+table {
+ border-collapse: collapse;
+}
+/* Apply a default padding if legacy cellpadding attribute is missing */
+table:not([cellpadding]) th,
+table:not([cellpadding]) td {
+ padding: 0.4rem;
+}
+/* Set default table styles if a table has a positive border attribute
+ and no inline css */
+table[border]:not([border="0"]):not([style*="border-width"]) th,
+table[border]:not([border="0"]):not([style*="border-width"]) td {
+ border-width: 1px;
+}
+/* Set default table styles if a table has a positive border attribute
+ and no inline css */
+table[border]:not([border="0"]):not([style*="border-style"]) th,
+table[border]:not([border="0"]):not([style*="border-style"]) td {
+ border-style: solid;
+}
+/* Set default table styles if a table has a positive border attribute
+ and no inline css */
+table[border]:not([border="0"]):not([style*="border-color"]) th,
+table[border]:not([border="0"]):not([style*="border-color"]) td {
+ border-color: #6d737b;
+}
+figure {
+ display: table;
+ margin: 1rem auto;
+}
+figure figcaption {
+ color: #8a8f97;
+ display: block;
+ margin-top: 0.25rem;
+ text-align: center;
+}
+hr {
+ border-color: #6d737b;
+ border-style: solid;
+ border-width: 1px 0 0 0;
+}
+code {
+ background-color: #6d737b;
+ border-radius: 3px;
+ padding: 0.1rem 0.2rem;
+}
+.mce-content-body:not([dir=rtl]) blockquote {
+ border-left: 2px solid #6d737b;
+ margin-left: 1.5rem;
+ padding-left: 1rem;
+}
+.mce-content-body[dir=rtl] blockquote {
+ border-right: 2px solid #6d737b;
+ margin-right: 1.5rem;
+ padding-right: 1rem;
+}
diff --git a/guns-front-project/public/tinymce/skins/content/dark/content.min.css b/guns-front-project/public/tinymce/skins/content/dark/content.min.css
new file mode 100644
index 00000000..07d40c26
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/content/dark/content.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+body{background-color:#2f3742;color:#dfe0e4;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}
diff --git a/guns-front-project/public/tinymce/skins/content/default/content.css b/guns-front-project/public/tinymce/skins/content/default/content.css
new file mode 100644
index 00000000..dd6a5c1c
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/content/default/content.css
@@ -0,0 +1,67 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+body {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+ line-height: 1.4;
+ margin: 1rem;
+}
+table {
+ border-collapse: collapse;
+}
+/* Apply a default padding if legacy cellpadding attribute is missing */
+table:not([cellpadding]) th,
+table:not([cellpadding]) td {
+ padding: 0.4rem;
+}
+/* Set default table styles if a table has a positive border attribute
+ and no inline css */
+table[border]:not([border="0"]):not([style*="border-width"]) th,
+table[border]:not([border="0"]):not([style*="border-width"]) td {
+ border-width: 1px;
+}
+/* Set default table styles if a table has a positive border attribute
+ and no inline css */
+table[border]:not([border="0"]):not([style*="border-style"]) th,
+table[border]:not([border="0"]):not([style*="border-style"]) td {
+ border-style: solid;
+}
+/* Set default table styles if a table has a positive border attribute
+ and no inline css */
+table[border]:not([border="0"]):not([style*="border-color"]) th,
+table[border]:not([border="0"]):not([style*="border-color"]) td {
+ border-color: #ccc;
+}
+figure {
+ display: table;
+ margin: 1rem auto;
+}
+figure figcaption {
+ color: #999;
+ display: block;
+ margin-top: 0.25rem;
+ text-align: center;
+}
+hr {
+ border-color: #ccc;
+ border-style: solid;
+ border-width: 1px 0 0 0;
+}
+code {
+ background-color: #e8e8e8;
+ border-radius: 3px;
+ padding: 0.1rem 0.2rem;
+}
+.mce-content-body:not([dir=rtl]) blockquote {
+ border-left: 2px solid #ccc;
+ margin-left: 1.5rem;
+ padding-left: 1rem;
+}
+.mce-content-body[dir=rtl] blockquote {
+ border-right: 2px solid #ccc;
+ margin-right: 1.5rem;
+ padding-right: 1rem;
+}
diff --git a/guns-front-project/public/tinymce/skins/content/default/content.min.css b/guns-front-project/public/tinymce/skins/content/default/content.min.css
new file mode 100644
index 00000000..29cd987e
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/content/default/content.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
diff --git a/guns-front-project/public/tinymce/skins/content/document/content.css b/guns-front-project/public/tinymce/skins/content/document/content.css
new file mode 100644
index 00000000..75f637a1
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/content/document/content.css
@@ -0,0 +1,72 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+@media screen {
+ html {
+ background: #f4f4f4;
+ min-height: 100%;
+ }
+}
+body {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+}
+@media screen {
+ body {
+ background-color: #fff;
+ box-shadow: 0 0 4px rgba(0, 0, 0, 0.15);
+ box-sizing: border-box;
+ margin: 1rem auto 0;
+ max-width: 820px;
+ min-height: calc(100vh - 1rem);
+ padding: 4rem 6rem 6rem 6rem;
+ }
+}
+table {
+ border-collapse: collapse;
+}
+/* Apply a default padding if legacy cellpadding attribute is missing */
+table:not([cellpadding]) th,
+table:not([cellpadding]) td {
+ padding: 0.4rem;
+}
+/* Set default table styles if a table has a positive border attribute
+ and no inline css */
+table[border]:not([border="0"]):not([style*="border-width"]) th,
+table[border]:not([border="0"]):not([style*="border-width"]) td {
+ border-width: 1px;
+}
+/* Set default table styles if a table has a positive border attribute
+ and no inline css */
+table[border]:not([border="0"]):not([style*="border-style"]) th,
+table[border]:not([border="0"]):not([style*="border-style"]) td {
+ border-style: solid;
+}
+/* Set default table styles if a table has a positive border attribute
+ and no inline css */
+table[border]:not([border="0"]):not([style*="border-color"]) th,
+table[border]:not([border="0"]):not([style*="border-color"]) td {
+ border-color: #ccc;
+}
+figure figcaption {
+ color: #999;
+ margin-top: 0.25rem;
+ text-align: center;
+}
+hr {
+ border-color: #ccc;
+ border-style: solid;
+ border-width: 1px 0 0 0;
+}
+.mce-content-body:not([dir=rtl]) blockquote {
+ border-left: 2px solid #ccc;
+ margin-left: 1.5rem;
+ padding-left: 1rem;
+}
+.mce-content-body[dir=rtl] blockquote {
+ border-right: 2px solid #ccc;
+ margin-right: 1.5rem;
+ padding-right: 1rem;
+}
diff --git a/guns-front-project/public/tinymce/skins/content/document/content.min.css b/guns-front-project/public/tinymce/skins/content/document/content.min.css
new file mode 100644
index 00000000..a1feef4c
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/content/document/content.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+@media screen{html{background:#f4f4f4;min-height:100%}}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif}@media screen{body{background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.15);box-sizing:border-box;margin:1rem auto 0;max-width:820px;min-height:calc(100vh - 1rem);padding:4rem 6rem 6rem 6rem}}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure figcaption{color:#999;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
diff --git a/guns-front-project/public/tinymce/skins/content/writer/content.css b/guns-front-project/public/tinymce/skins/content/writer/content.css
new file mode 100644
index 00000000..ceee3599
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/content/writer/content.css
@@ -0,0 +1,68 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+body {
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
+ line-height: 1.4;
+ margin: 1rem auto;
+ max-width: 900px;
+}
+table {
+ border-collapse: collapse;
+}
+/* Apply a default padding if legacy cellpadding attribute is missing */
+table:not([cellpadding]) th,
+table:not([cellpadding]) td {
+ padding: 0.4rem;
+}
+/* Set default table styles if a table has a positive border attribute
+ and no inline css */
+table[border]:not([border="0"]):not([style*="border-width"]) th,
+table[border]:not([border="0"]):not([style*="border-width"]) td {
+ border-width: 1px;
+}
+/* Set default table styles if a table has a positive border attribute
+ and no inline css */
+table[border]:not([border="0"]):not([style*="border-style"]) th,
+table[border]:not([border="0"]):not([style*="border-style"]) td {
+ border-style: solid;
+}
+/* Set default table styles if a table has a positive border attribute
+ and no inline css */
+table[border]:not([border="0"]):not([style*="border-color"]) th,
+table[border]:not([border="0"]):not([style*="border-color"]) td {
+ border-color: #ccc;
+}
+figure {
+ display: table;
+ margin: 1rem auto;
+}
+figure figcaption {
+ color: #999;
+ display: block;
+ margin-top: 0.25rem;
+ text-align: center;
+}
+hr {
+ border-color: #ccc;
+ border-style: solid;
+ border-width: 1px 0 0 0;
+}
+code {
+ background-color: #e8e8e8;
+ border-radius: 3px;
+ padding: 0.1rem 0.2rem;
+}
+.mce-content-body:not([dir=rtl]) blockquote {
+ border-left: 2px solid #ccc;
+ margin-left: 1.5rem;
+ padding-left: 1rem;
+}
+.mce-content-body[dir=rtl] blockquote {
+ border-right: 2px solid #ccc;
+ margin-right: 1.5rem;
+ padding-right: 1rem;
+}
diff --git a/guns-front-project/public/tinymce/skins/content/writer/content.min.css b/guns-front-project/public/tinymce/skins/content/writer/content.min.css
new file mode 100644
index 00000000..0d8f5d34
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/content/writer/content.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem auto;max-width:900px}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.css b/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.css
new file mode 100644
index 00000000..9c0e3a8f
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.css
@@ -0,0 +1,714 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.mce-content-body .mce-item-anchor {
+ background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
+ cursor: default;
+ display: inline-block;
+ height: 12px !important;
+ padding: 0 2px;
+ -webkit-user-modify: read-only;
+ -moz-user-modify: read-only;
+ -webkit-user-select: all;
+ -moz-user-select: all;
+ -ms-user-select: all;
+ user-select: all;
+ width: 8px !important;
+}
+.mce-content-body .mce-item-anchor[data-mce-selected] {
+ outline-offset: 1px;
+}
+.tox-comments-visible .tox-comment {
+ background-color: #fff0b7;
+}
+.tox-comments-visible .tox-comment--active {
+ background-color: #ffe168;
+}
+.tox-checklist > li:not(.tox-checklist--hidden) {
+ list-style: none;
+ margin: 0.25em 0;
+}
+.tox-checklist > li:not(.tox-checklist--hidden)::before {
+ content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
+ cursor: pointer;
+ height: 1em;
+ margin-left: -1.5em;
+ margin-top: 0.125em;
+ position: absolute;
+ width: 1em;
+}
+.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {
+ content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
+}
+[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {
+ margin-left: 0;
+ margin-right: -1.5em;
+}
+/* stylelint-disable */
+/* http://prismjs.com/ */
+/**
+ * Dracula Theme originally by Zeno Rocha [@zenorocha]
+ * https://draculatheme.com/
+ *
+ * Ported for PrismJS by Albert Vallverdu [@byverdu]
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+ color: #f8f8f2;
+ background: none;
+ text-shadow: 0 1px rgba(0, 0, 0, 0.3);
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+ -moz-tab-size: 4;
+ tab-size: 4;
+ -webkit-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: 0.5em 0;
+ overflow: auto;
+ border-radius: 0.3em;
+}
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+ background: #282a36;
+}
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+ padding: 0.1em;
+ border-radius: 0.3em;
+ white-space: normal;
+}
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: #6272a4;
+}
+.token.punctuation {
+ color: #f8f8f2;
+}
+.namespace {
+ opacity: 0.7;
+}
+.token.property,
+.token.tag,
+.token.constant,
+.token.symbol,
+.token.deleted {
+ color: #ff79c6;
+}
+.token.boolean,
+.token.number {
+ color: #bd93f9;
+}
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+ color: #50fa7b;
+}
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string,
+.token.variable {
+ color: #f8f8f2;
+}
+.token.atrule,
+.token.attr-value,
+.token.function,
+.token.class-name {
+ color: #f1fa8c;
+}
+.token.keyword {
+ color: #8be9fd;
+}
+.token.regex,
+.token.important {
+ color: #ffb86c;
+}
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+.token.italic {
+ font-style: italic;
+}
+.token.entity {
+ cursor: help;
+}
+/* stylelint-enable */
+.mce-content-body {
+ overflow-wrap: break-word;
+ word-wrap: break-word;
+}
+.mce-content-body .mce-visual-caret {
+ background-color: black;
+ background-color: currentColor;
+ position: absolute;
+}
+.mce-content-body .mce-visual-caret-hidden {
+ display: none;
+}
+.mce-content-body *[data-mce-caret] {
+ left: -1000px;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ right: auto;
+ top: 0;
+}
+.mce-content-body .mce-offscreen-selection {
+ left: -2000000px;
+ max-width: 1000000px;
+ position: absolute;
+}
+.mce-content-body *[contentEditable=false] {
+ cursor: default;
+}
+.mce-content-body *[contentEditable=true] {
+ cursor: text;
+}
+.tox-cursor-format-painter {
+ cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default;
+}
+.mce-content-body figure.align-left {
+ float: left;
+}
+.mce-content-body figure.align-right {
+ float: right;
+}
+.mce-content-body figure.image.align-center {
+ display: table;
+ margin-left: auto;
+ margin-right: auto;
+}
+.mce-preview-object {
+ border: 1px solid gray;
+ display: inline-block;
+ line-height: 0;
+ margin: 0 2px 0 2px;
+ position: relative;
+}
+.mce-preview-object .mce-shim {
+ background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.mce-preview-object[data-mce-selected="2"] .mce-shim {
+ display: none;
+}
+.mce-object {
+ background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
+ border: 1px dashed #aaa;
+}
+.mce-pagebreak {
+ border: 1px dashed #aaa;
+ cursor: default;
+ display: block;
+ height: 5px;
+ margin-top: 15px;
+ page-break-before: always;
+ width: 100%;
+}
+@media print {
+ .mce-pagebreak {
+ border: 0;
+ }
+}
+.tiny-pageembed .mce-shim {
+ background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.tiny-pageembed[data-mce-selected="2"] .mce-shim {
+ display: none;
+}
+.tiny-pageembed {
+ display: inline-block;
+ position: relative;
+}
+.tiny-pageembed--21by9,
+.tiny-pageembed--16by9,
+.tiny-pageembed--4by3,
+.tiny-pageembed--1by1 {
+ display: block;
+ overflow: hidden;
+ padding: 0;
+ position: relative;
+ width: 100%;
+}
+.tiny-pageembed--21by9 {
+ padding-top: 42.857143%;
+}
+.tiny-pageembed--16by9 {
+ padding-top: 56.25%;
+}
+.tiny-pageembed--4by3 {
+ padding-top: 75%;
+}
+.tiny-pageembed--1by1 {
+ padding-top: 100%;
+}
+.tiny-pageembed--21by9 iframe,
+.tiny-pageembed--16by9 iframe,
+.tiny-pageembed--4by3 iframe,
+.tiny-pageembed--1by1 iframe {
+ border: 0;
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.mce-content-body[data-mce-placeholder] {
+ position: relative;
+}
+.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {
+ color: rgba(34, 47, 62, 0.7);
+ content: attr(data-mce-placeholder);
+ position: absolute;
+}
+.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {
+ left: 1px;
+}
+.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {
+ right: 1px;
+}
+.mce-content-body div.mce-resizehandle {
+ background-color: #4099ff;
+ border-color: #4099ff;
+ border-style: solid;
+ border-width: 1px;
+ box-sizing: border-box;
+ height: 10px;
+ position: absolute;
+ width: 10px;
+ z-index: 1298;
+}
+.mce-content-body div.mce-resizehandle:hover {
+ background-color: #4099ff;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(1) {
+ cursor: nwse-resize;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(2) {
+ cursor: nesw-resize;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(3) {
+ cursor: nwse-resize;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(4) {
+ cursor: nesw-resize;
+}
+.mce-content-body .mce-resize-backdrop {
+ z-index: 10000;
+}
+.mce-content-body .mce-clonedresizable {
+ cursor: default;
+ opacity: 0.5;
+ outline: 1px dashed black;
+ position: absolute;
+ z-index: 10001;
+}
+.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,
+.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {
+ border: 0;
+}
+.mce-content-body .mce-resize-helper {
+ background: #555;
+ background: rgba(0, 0, 0, 0.75);
+ border: 1px;
+ border-radius: 3px;
+ color: white;
+ display: none;
+ font-family: sans-serif;
+ font-size: 12px;
+ line-height: 14px;
+ margin: 5px 10px;
+ padding: 5px;
+ position: absolute;
+ white-space: nowrap;
+ z-index: 10002;
+}
+.tox-rtc-user-selection {
+ position: relative;
+}
+.tox-rtc-user-cursor {
+ bottom: 0;
+ cursor: default;
+ position: absolute;
+ top: 0;
+ width: 2px;
+}
+.tox-rtc-user-cursor::before {
+ background-color: inherit;
+ border-radius: 50%;
+ content: '';
+ display: block;
+ height: 8px;
+ position: absolute;
+ right: -3px;
+ top: -3px;
+ width: 8px;
+}
+.tox-rtc-user-cursor:hover::after {
+ background-color: inherit;
+ border-radius: 100px;
+ box-sizing: border-box;
+ color: #fff;
+ content: attr(data-user);
+ display: block;
+ font-size: 12px;
+ font-weight: bold;
+ left: -5px;
+ min-height: 8px;
+ min-width: 8px;
+ padding: 0 12px;
+ position: absolute;
+ top: -11px;
+ white-space: nowrap;
+ z-index: 1000;
+}
+.tox-rtc-user-selection--1 .tox-rtc-user-cursor {
+ background-color: #2dc26b;
+}
+.tox-rtc-user-selection--2 .tox-rtc-user-cursor {
+ background-color: #e03e2d;
+}
+.tox-rtc-user-selection--3 .tox-rtc-user-cursor {
+ background-color: #f1c40f;
+}
+.tox-rtc-user-selection--4 .tox-rtc-user-cursor {
+ background-color: #3598db;
+}
+.tox-rtc-user-selection--5 .tox-rtc-user-cursor {
+ background-color: #b96ad9;
+}
+.tox-rtc-user-selection--6 .tox-rtc-user-cursor {
+ background-color: #e67e23;
+}
+.tox-rtc-user-selection--7 .tox-rtc-user-cursor {
+ background-color: #aaa69d;
+}
+.tox-rtc-user-selection--8 .tox-rtc-user-cursor {
+ background-color: #f368e0;
+}
+.tox-rtc-remote-image {
+ background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;
+ border: 1px solid #ccc;
+ min-height: 240px;
+ min-width: 320px;
+}
+.mce-match-marker {
+ background: #aaa;
+ color: #fff;
+}
+.mce-match-marker-selected {
+ background: #39f;
+ color: #fff;
+}
+.mce-match-marker-selected::-moz-selection {
+ background: #39f;
+ color: #fff;
+}
+.mce-match-marker-selected::selection {
+ background: #39f;
+ color: #fff;
+}
+.mce-content-body img[data-mce-selected],
+.mce-content-body video[data-mce-selected],
+.mce-content-body audio[data-mce-selected],
+.mce-content-body object[data-mce-selected],
+.mce-content-body embed[data-mce-selected],
+.mce-content-body table[data-mce-selected] {
+ outline: 3px solid #4099ff;
+}
+.mce-content-body hr[data-mce-selected] {
+ outline: 3px solid #4099ff;
+ outline-offset: 1px;
+}
+.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {
+ outline: 3px solid #4099ff;
+}
+.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {
+ outline: 3px solid #4099ff;
+}
+.mce-content-body *[contentEditable=false][data-mce-selected] {
+ cursor: not-allowed;
+ outline: 3px solid #4099ff;
+}
+.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,
+.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {
+ outline: none;
+}
+.mce-content-body *[data-mce-selected="inline-boundary"] {
+ background-color: #4099ff;
+}
+.mce-content-body .mce-edit-focus {
+ outline: 3px solid #4099ff;
+}
+.mce-content-body td[data-mce-selected],
+.mce-content-body th[data-mce-selected] {
+ position: relative;
+}
+.mce-content-body td[data-mce-selected]::-moz-selection,
+.mce-content-body th[data-mce-selected]::-moz-selection {
+ background: none;
+}
+.mce-content-body td[data-mce-selected]::selection,
+.mce-content-body th[data-mce-selected]::selection {
+ background: none;
+}
+.mce-content-body td[data-mce-selected] *,
+.mce-content-body th[data-mce-selected] * {
+ outline: none;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.mce-content-body td[data-mce-selected]::after,
+.mce-content-body th[data-mce-selected]::after {
+ background-color: rgba(180, 215, 255, 0.7);
+ border: 1px solid transparent;
+ bottom: -1px;
+ content: '';
+ left: -1px;
+ mix-blend-mode: lighten;
+ position: absolute;
+ right: -1px;
+ top: -1px;
+}
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
+ .mce-content-body td[data-mce-selected]::after,
+ .mce-content-body th[data-mce-selected]::after {
+ border-color: rgba(0, 84, 180, 0.7);
+ }
+}
+.mce-content-body img::-moz-selection {
+ background: none;
+}
+.mce-content-body img::selection {
+ background: none;
+}
+.ephox-snooker-resizer-bar {
+ background-color: #4099ff;
+ opacity: 0;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.ephox-snooker-resizer-cols {
+ cursor: col-resize;
+}
+.ephox-snooker-resizer-rows {
+ cursor: row-resize;
+}
+.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {
+ opacity: 1;
+}
+.mce-spellchecker-word {
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
+ background-position: 0 calc(100% + 1px);
+ background-repeat: repeat-x;
+ background-size: auto 6px;
+ cursor: default;
+ height: 2rem;
+}
+.mce-spellchecker-grammar {
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
+ background-position: 0 calc(100% + 1px);
+ background-repeat: repeat-x;
+ background-size: auto 6px;
+ cursor: default;
+}
+.mce-toc {
+ border: 1px solid gray;
+}
+.mce-toc h2 {
+ margin: 4px;
+}
+.mce-toc li {
+ list-style-type: none;
+}
+table[style*="border-width: 0px"],
+.mce-item-table:not([border]),
+.mce-item-table[border="0"],
+table[style*="border-width: 0px"] td,
+.mce-item-table:not([border]) td,
+.mce-item-table[border="0"] td,
+table[style*="border-width: 0px"] th,
+.mce-item-table:not([border]) th,
+.mce-item-table[border="0"] th,
+table[style*="border-width: 0px"] caption,
+.mce-item-table:not([border]) caption,
+.mce-item-table[border="0"] caption {
+ border: 1px dashed #bbb;
+}
+.mce-visualblocks p,
+.mce-visualblocks h1,
+.mce-visualblocks h2,
+.mce-visualblocks h3,
+.mce-visualblocks h4,
+.mce-visualblocks h5,
+.mce-visualblocks h6,
+.mce-visualblocks div:not([data-mce-bogus]),
+.mce-visualblocks section,
+.mce-visualblocks article,
+.mce-visualblocks blockquote,
+.mce-visualblocks address,
+.mce-visualblocks pre,
+.mce-visualblocks figure,
+.mce-visualblocks figcaption,
+.mce-visualblocks hgroup,
+.mce-visualblocks aside,
+.mce-visualblocks ul,
+.mce-visualblocks ol,
+.mce-visualblocks dl {
+ background-repeat: no-repeat;
+ border: 1px dashed #bbb;
+ margin-left: 3px;
+ padding-top: 10px;
+}
+.mce-visualblocks p {
+ background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
+}
+.mce-visualblocks h1 {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
+}
+.mce-visualblocks h2 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
+}
+.mce-visualblocks h3 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
+}
+.mce-visualblocks h4 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
+}
+.mce-visualblocks h5 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
+}
+.mce-visualblocks h6 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
+}
+.mce-visualblocks div:not([data-mce-bogus]) {
+ background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
+}
+.mce-visualblocks section {
+ background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
+}
+.mce-visualblocks article {
+ background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
+}
+.mce-visualblocks blockquote {
+ background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
+}
+.mce-visualblocks address {
+ background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
+}
+.mce-visualblocks pre {
+ background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
+}
+.mce-visualblocks figure {
+ background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
+}
+.mce-visualblocks figcaption {
+ border: 1px dashed #bbb;
+}
+.mce-visualblocks hgroup {
+ background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
+}
+.mce-visualblocks aside {
+ background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
+}
+.mce-visualblocks ul {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);
+}
+.mce-visualblocks ol {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
+}
+.mce-visualblocks dl {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
+}
+.mce-visualblocks:not([dir=rtl]) p,
+.mce-visualblocks:not([dir=rtl]) h1,
+.mce-visualblocks:not([dir=rtl]) h2,
+.mce-visualblocks:not([dir=rtl]) h3,
+.mce-visualblocks:not([dir=rtl]) h4,
+.mce-visualblocks:not([dir=rtl]) h5,
+.mce-visualblocks:not([dir=rtl]) h6,
+.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),
+.mce-visualblocks:not([dir=rtl]) section,
+.mce-visualblocks:not([dir=rtl]) article,
+.mce-visualblocks:not([dir=rtl]) blockquote,
+.mce-visualblocks:not([dir=rtl]) address,
+.mce-visualblocks:not([dir=rtl]) pre,
+.mce-visualblocks:not([dir=rtl]) figure,
+.mce-visualblocks:not([dir=rtl]) figcaption,
+.mce-visualblocks:not([dir=rtl]) hgroup,
+.mce-visualblocks:not([dir=rtl]) aside,
+.mce-visualblocks:not([dir=rtl]) ul,
+.mce-visualblocks:not([dir=rtl]) ol,
+.mce-visualblocks:not([dir=rtl]) dl {
+ margin-left: 3px;
+}
+.mce-visualblocks[dir=rtl] p,
+.mce-visualblocks[dir=rtl] h1,
+.mce-visualblocks[dir=rtl] h2,
+.mce-visualblocks[dir=rtl] h3,
+.mce-visualblocks[dir=rtl] h4,
+.mce-visualblocks[dir=rtl] h5,
+.mce-visualblocks[dir=rtl] h6,
+.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),
+.mce-visualblocks[dir=rtl] section,
+.mce-visualblocks[dir=rtl] article,
+.mce-visualblocks[dir=rtl] blockquote,
+.mce-visualblocks[dir=rtl] address,
+.mce-visualblocks[dir=rtl] pre,
+.mce-visualblocks[dir=rtl] figure,
+.mce-visualblocks[dir=rtl] figcaption,
+.mce-visualblocks[dir=rtl] hgroup,
+.mce-visualblocks[dir=rtl] aside,
+.mce-visualblocks[dir=rtl] ul,
+.mce-visualblocks[dir=rtl] ol,
+.mce-visualblocks[dir=rtl] dl {
+ background-position-x: right;
+ margin-right: 3px;
+}
+.mce-nbsp,
+.mce-shy {
+ background: #aaa;
+}
+.mce-shy::after {
+ content: '-';
+}
+body {
+ font-family: sans-serif;
+}
+table {
+ border-collapse: collapse;
+}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.inline.css b/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.inline.css
new file mode 100644
index 00000000..8e7521d9
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.inline.css
@@ -0,0 +1,726 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.mce-content-body .mce-item-anchor {
+ background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
+ cursor: default;
+ display: inline-block;
+ height: 12px !important;
+ padding: 0 2px;
+ -webkit-user-modify: read-only;
+ -moz-user-modify: read-only;
+ -webkit-user-select: all;
+ -moz-user-select: all;
+ -ms-user-select: all;
+ user-select: all;
+ width: 8px !important;
+}
+.mce-content-body .mce-item-anchor[data-mce-selected] {
+ outline-offset: 1px;
+}
+.tox-comments-visible .tox-comment {
+ background-color: #fff0b7;
+}
+.tox-comments-visible .tox-comment--active {
+ background-color: #ffe168;
+}
+.tox-checklist > li:not(.tox-checklist--hidden) {
+ list-style: none;
+ margin: 0.25em 0;
+}
+.tox-checklist > li:not(.tox-checklist--hidden)::before {
+ content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
+ cursor: pointer;
+ height: 1em;
+ margin-left: -1.5em;
+ margin-top: 0.125em;
+ position: absolute;
+ width: 1em;
+}
+.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {
+ content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
+}
+[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {
+ margin-left: 0;
+ margin-right: -1.5em;
+}
+/* stylelint-disable */
+/* http://prismjs.com/ */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+ color: black;
+ background: none;
+ text-shadow: 0 1px white;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ font-size: 1em;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+ -moz-tab-size: 4;
+ tab-size: 4;
+ -webkit-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+@media print {
+ code[class*="language-"],
+ pre[class*="language-"] {
+ text-shadow: none;
+ }
+}
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: 0.5em 0;
+ overflow: auto;
+}
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+ background: #f5f2f0;
+}
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+ padding: 0.1em;
+ border-radius: 0.3em;
+ white-space: normal;
+}
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: slategray;
+}
+.token.punctuation {
+ color: #999;
+}
+.namespace {
+ opacity: 0.7;
+}
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+ color: #905;
+}
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+ color: #690;
+}
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+ color: #9a6e3a;
+ background: hsla(0, 0%, 100%, 0.5);
+}
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+ color: #07a;
+}
+.token.function,
+.token.class-name {
+ color: #DD4A68;
+}
+.token.regex,
+.token.important,
+.token.variable {
+ color: #e90;
+}
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+.token.italic {
+ font-style: italic;
+}
+.token.entity {
+ cursor: help;
+}
+/* stylelint-enable */
+.mce-content-body {
+ overflow-wrap: break-word;
+ word-wrap: break-word;
+}
+.mce-content-body .mce-visual-caret {
+ background-color: black;
+ background-color: currentColor;
+ position: absolute;
+}
+.mce-content-body .mce-visual-caret-hidden {
+ display: none;
+}
+.mce-content-body *[data-mce-caret] {
+ left: -1000px;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ right: auto;
+ top: 0;
+}
+.mce-content-body .mce-offscreen-selection {
+ left: -2000000px;
+ max-width: 1000000px;
+ position: absolute;
+}
+.mce-content-body *[contentEditable=false] {
+ cursor: default;
+}
+.mce-content-body *[contentEditable=true] {
+ cursor: text;
+}
+.tox-cursor-format-painter {
+ cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default;
+}
+.mce-content-body figure.align-left {
+ float: left;
+}
+.mce-content-body figure.align-right {
+ float: right;
+}
+.mce-content-body figure.image.align-center {
+ display: table;
+ margin-left: auto;
+ margin-right: auto;
+}
+.mce-preview-object {
+ border: 1px solid gray;
+ display: inline-block;
+ line-height: 0;
+ margin: 0 2px 0 2px;
+ position: relative;
+}
+.mce-preview-object .mce-shim {
+ background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.mce-preview-object[data-mce-selected="2"] .mce-shim {
+ display: none;
+}
+.mce-object {
+ background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
+ border: 1px dashed #aaa;
+}
+.mce-pagebreak {
+ border: 1px dashed #aaa;
+ cursor: default;
+ display: block;
+ height: 5px;
+ margin-top: 15px;
+ page-break-before: always;
+ width: 100%;
+}
+@media print {
+ .mce-pagebreak {
+ border: 0;
+ }
+}
+.tiny-pageembed .mce-shim {
+ background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.tiny-pageembed[data-mce-selected="2"] .mce-shim {
+ display: none;
+}
+.tiny-pageembed {
+ display: inline-block;
+ position: relative;
+}
+.tiny-pageembed--21by9,
+.tiny-pageembed--16by9,
+.tiny-pageembed--4by3,
+.tiny-pageembed--1by1 {
+ display: block;
+ overflow: hidden;
+ padding: 0;
+ position: relative;
+ width: 100%;
+}
+.tiny-pageembed--21by9 {
+ padding-top: 42.857143%;
+}
+.tiny-pageembed--16by9 {
+ padding-top: 56.25%;
+}
+.tiny-pageembed--4by3 {
+ padding-top: 75%;
+}
+.tiny-pageembed--1by1 {
+ padding-top: 100%;
+}
+.tiny-pageembed--21by9 iframe,
+.tiny-pageembed--16by9 iframe,
+.tiny-pageembed--4by3 iframe,
+.tiny-pageembed--1by1 iframe {
+ border: 0;
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.mce-content-body[data-mce-placeholder] {
+ position: relative;
+}
+.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {
+ color: rgba(34, 47, 62, 0.7);
+ content: attr(data-mce-placeholder);
+ position: absolute;
+}
+.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {
+ left: 1px;
+}
+.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {
+ right: 1px;
+}
+.mce-content-body div.mce-resizehandle {
+ background-color: #4099ff;
+ border-color: #4099ff;
+ border-style: solid;
+ border-width: 1px;
+ box-sizing: border-box;
+ height: 10px;
+ position: absolute;
+ width: 10px;
+ z-index: 1298;
+}
+.mce-content-body div.mce-resizehandle:hover {
+ background-color: #4099ff;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(1) {
+ cursor: nwse-resize;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(2) {
+ cursor: nesw-resize;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(3) {
+ cursor: nwse-resize;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(4) {
+ cursor: nesw-resize;
+}
+.mce-content-body .mce-resize-backdrop {
+ z-index: 10000;
+}
+.mce-content-body .mce-clonedresizable {
+ cursor: default;
+ opacity: 0.5;
+ outline: 1px dashed black;
+ position: absolute;
+ z-index: 10001;
+}
+.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,
+.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {
+ border: 0;
+}
+.mce-content-body .mce-resize-helper {
+ background: #555;
+ background: rgba(0, 0, 0, 0.75);
+ border: 1px;
+ border-radius: 3px;
+ color: white;
+ display: none;
+ font-family: sans-serif;
+ font-size: 12px;
+ line-height: 14px;
+ margin: 5px 10px;
+ padding: 5px;
+ position: absolute;
+ white-space: nowrap;
+ z-index: 10002;
+}
+.tox-rtc-user-selection {
+ position: relative;
+}
+.tox-rtc-user-cursor {
+ bottom: 0;
+ cursor: default;
+ position: absolute;
+ top: 0;
+ width: 2px;
+}
+.tox-rtc-user-cursor::before {
+ background-color: inherit;
+ border-radius: 50%;
+ content: '';
+ display: block;
+ height: 8px;
+ position: absolute;
+ right: -3px;
+ top: -3px;
+ width: 8px;
+}
+.tox-rtc-user-cursor:hover::after {
+ background-color: inherit;
+ border-radius: 100px;
+ box-sizing: border-box;
+ color: #fff;
+ content: attr(data-user);
+ display: block;
+ font-size: 12px;
+ font-weight: bold;
+ left: -5px;
+ min-height: 8px;
+ min-width: 8px;
+ padding: 0 12px;
+ position: absolute;
+ top: -11px;
+ white-space: nowrap;
+ z-index: 1000;
+}
+.tox-rtc-user-selection--1 .tox-rtc-user-cursor {
+ background-color: #2dc26b;
+}
+.tox-rtc-user-selection--2 .tox-rtc-user-cursor {
+ background-color: #e03e2d;
+}
+.tox-rtc-user-selection--3 .tox-rtc-user-cursor {
+ background-color: #f1c40f;
+}
+.tox-rtc-user-selection--4 .tox-rtc-user-cursor {
+ background-color: #3598db;
+}
+.tox-rtc-user-selection--5 .tox-rtc-user-cursor {
+ background-color: #b96ad9;
+}
+.tox-rtc-user-selection--6 .tox-rtc-user-cursor {
+ background-color: #e67e23;
+}
+.tox-rtc-user-selection--7 .tox-rtc-user-cursor {
+ background-color: #aaa69d;
+}
+.tox-rtc-user-selection--8 .tox-rtc-user-cursor {
+ background-color: #f368e0;
+}
+.tox-rtc-remote-image {
+ background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;
+ border: 1px solid #ccc;
+ min-height: 240px;
+ min-width: 320px;
+}
+.mce-match-marker {
+ background: #aaa;
+ color: #fff;
+}
+.mce-match-marker-selected {
+ background: #39f;
+ color: #fff;
+}
+.mce-match-marker-selected::-moz-selection {
+ background: #39f;
+ color: #fff;
+}
+.mce-match-marker-selected::selection {
+ background: #39f;
+ color: #fff;
+}
+.mce-content-body img[data-mce-selected],
+.mce-content-body video[data-mce-selected],
+.mce-content-body audio[data-mce-selected],
+.mce-content-body object[data-mce-selected],
+.mce-content-body embed[data-mce-selected],
+.mce-content-body table[data-mce-selected] {
+ outline: 3px solid #b4d7ff;
+}
+.mce-content-body hr[data-mce-selected] {
+ outline: 3px solid #b4d7ff;
+ outline-offset: 1px;
+}
+.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {
+ outline: 3px solid #b4d7ff;
+}
+.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {
+ outline: 3px solid #b4d7ff;
+}
+.mce-content-body *[contentEditable=false][data-mce-selected] {
+ cursor: not-allowed;
+ outline: 3px solid #b4d7ff;
+}
+.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,
+.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {
+ outline: none;
+}
+.mce-content-body *[data-mce-selected="inline-boundary"] {
+ background-color: #b4d7ff;
+}
+.mce-content-body .mce-edit-focus {
+ outline: 3px solid #b4d7ff;
+}
+.mce-content-body td[data-mce-selected],
+.mce-content-body th[data-mce-selected] {
+ position: relative;
+}
+.mce-content-body td[data-mce-selected]::-moz-selection,
+.mce-content-body th[data-mce-selected]::-moz-selection {
+ background: none;
+}
+.mce-content-body td[data-mce-selected]::selection,
+.mce-content-body th[data-mce-selected]::selection {
+ background: none;
+}
+.mce-content-body td[data-mce-selected] *,
+.mce-content-body th[data-mce-selected] * {
+ outline: none;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.mce-content-body td[data-mce-selected]::after,
+.mce-content-body th[data-mce-selected]::after {
+ background-color: rgba(180, 215, 255, 0.7);
+ border: 1px solid rgba(180, 215, 255, 0.7);
+ bottom: -1px;
+ content: '';
+ left: -1px;
+ mix-blend-mode: multiply;
+ position: absolute;
+ right: -1px;
+ top: -1px;
+}
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
+ .mce-content-body td[data-mce-selected]::after,
+ .mce-content-body th[data-mce-selected]::after {
+ border-color: rgba(0, 84, 180, 0.7);
+ }
+}
+.mce-content-body img::-moz-selection {
+ background: none;
+}
+.mce-content-body img::selection {
+ background: none;
+}
+.ephox-snooker-resizer-bar {
+ background-color: #b4d7ff;
+ opacity: 0;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.ephox-snooker-resizer-cols {
+ cursor: col-resize;
+}
+.ephox-snooker-resizer-rows {
+ cursor: row-resize;
+}
+.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {
+ opacity: 1;
+}
+.mce-spellchecker-word {
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
+ background-position: 0 calc(100% + 1px);
+ background-repeat: repeat-x;
+ background-size: auto 6px;
+ cursor: default;
+ height: 2rem;
+}
+.mce-spellchecker-grammar {
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
+ background-position: 0 calc(100% + 1px);
+ background-repeat: repeat-x;
+ background-size: auto 6px;
+ cursor: default;
+}
+.mce-toc {
+ border: 1px solid gray;
+}
+.mce-toc h2 {
+ margin: 4px;
+}
+.mce-toc li {
+ list-style-type: none;
+}
+table[style*="border-width: 0px"],
+.mce-item-table:not([border]),
+.mce-item-table[border="0"],
+table[style*="border-width: 0px"] td,
+.mce-item-table:not([border]) td,
+.mce-item-table[border="0"] td,
+table[style*="border-width: 0px"] th,
+.mce-item-table:not([border]) th,
+.mce-item-table[border="0"] th,
+table[style*="border-width: 0px"] caption,
+.mce-item-table:not([border]) caption,
+.mce-item-table[border="0"] caption {
+ border: 1px dashed #bbb;
+}
+.mce-visualblocks p,
+.mce-visualblocks h1,
+.mce-visualblocks h2,
+.mce-visualblocks h3,
+.mce-visualblocks h4,
+.mce-visualblocks h5,
+.mce-visualblocks h6,
+.mce-visualblocks div:not([data-mce-bogus]),
+.mce-visualblocks section,
+.mce-visualblocks article,
+.mce-visualblocks blockquote,
+.mce-visualblocks address,
+.mce-visualblocks pre,
+.mce-visualblocks figure,
+.mce-visualblocks figcaption,
+.mce-visualblocks hgroup,
+.mce-visualblocks aside,
+.mce-visualblocks ul,
+.mce-visualblocks ol,
+.mce-visualblocks dl {
+ background-repeat: no-repeat;
+ border: 1px dashed #bbb;
+ margin-left: 3px;
+ padding-top: 10px;
+}
+.mce-visualblocks p {
+ background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
+}
+.mce-visualblocks h1 {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
+}
+.mce-visualblocks h2 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
+}
+.mce-visualblocks h3 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
+}
+.mce-visualblocks h4 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
+}
+.mce-visualblocks h5 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
+}
+.mce-visualblocks h6 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
+}
+.mce-visualblocks div:not([data-mce-bogus]) {
+ background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
+}
+.mce-visualblocks section {
+ background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
+}
+.mce-visualblocks article {
+ background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
+}
+.mce-visualblocks blockquote {
+ background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
+}
+.mce-visualblocks address {
+ background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
+}
+.mce-visualblocks pre {
+ background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
+}
+.mce-visualblocks figure {
+ background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
+}
+.mce-visualblocks figcaption {
+ border: 1px dashed #bbb;
+}
+.mce-visualblocks hgroup {
+ background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
+}
+.mce-visualblocks aside {
+ background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
+}
+.mce-visualblocks ul {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);
+}
+.mce-visualblocks ol {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
+}
+.mce-visualblocks dl {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
+}
+.mce-visualblocks:not([dir=rtl]) p,
+.mce-visualblocks:not([dir=rtl]) h1,
+.mce-visualblocks:not([dir=rtl]) h2,
+.mce-visualblocks:not([dir=rtl]) h3,
+.mce-visualblocks:not([dir=rtl]) h4,
+.mce-visualblocks:not([dir=rtl]) h5,
+.mce-visualblocks:not([dir=rtl]) h6,
+.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),
+.mce-visualblocks:not([dir=rtl]) section,
+.mce-visualblocks:not([dir=rtl]) article,
+.mce-visualblocks:not([dir=rtl]) blockquote,
+.mce-visualblocks:not([dir=rtl]) address,
+.mce-visualblocks:not([dir=rtl]) pre,
+.mce-visualblocks:not([dir=rtl]) figure,
+.mce-visualblocks:not([dir=rtl]) figcaption,
+.mce-visualblocks:not([dir=rtl]) hgroup,
+.mce-visualblocks:not([dir=rtl]) aside,
+.mce-visualblocks:not([dir=rtl]) ul,
+.mce-visualblocks:not([dir=rtl]) ol,
+.mce-visualblocks:not([dir=rtl]) dl {
+ margin-left: 3px;
+}
+.mce-visualblocks[dir=rtl] p,
+.mce-visualblocks[dir=rtl] h1,
+.mce-visualblocks[dir=rtl] h2,
+.mce-visualblocks[dir=rtl] h3,
+.mce-visualblocks[dir=rtl] h4,
+.mce-visualblocks[dir=rtl] h5,
+.mce-visualblocks[dir=rtl] h6,
+.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),
+.mce-visualblocks[dir=rtl] section,
+.mce-visualblocks[dir=rtl] article,
+.mce-visualblocks[dir=rtl] blockquote,
+.mce-visualblocks[dir=rtl] address,
+.mce-visualblocks[dir=rtl] pre,
+.mce-visualblocks[dir=rtl] figure,
+.mce-visualblocks[dir=rtl] figcaption,
+.mce-visualblocks[dir=rtl] hgroup,
+.mce-visualblocks[dir=rtl] aside,
+.mce-visualblocks[dir=rtl] ul,
+.mce-visualblocks[dir=rtl] ol,
+.mce-visualblocks[dir=rtl] dl {
+ background-position-x: right;
+ margin-right: 3px;
+}
+.mce-nbsp,
+.mce-shy {
+ background: #aaa;
+}
+.mce-shy::after {
+ content: '-';
+}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.inline.min.css b/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.inline.min.css
new file mode 100644
index 00000000..b4ab9a3a
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.inline.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment{background-color:#fff0b7}.tox-comments-visible .tox-comment--active{background-color:#ffe168}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img::-moz-selection{background:0 0}.mce-content-body img::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.min.css b/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.min.css
new file mode 100644
index 00000000..e27b8a02
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment{background-color:#fff0b7}.tox-comments-visible .tox-comment--active{background-color:#ffe168}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#282a36}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#6272a4}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#ff79c6}.token.boolean,.token.number{color:#bd93f9}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#50fa7b}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#f1fa8c}.token.keyword{color:#8be9fd}.token.important,.token.regex{color:#ffb86c}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #4099ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #4099ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #4099ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #4099ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #4099ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#4099ff}.mce-content-body .mce-edit-focus{outline:3px solid #4099ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid transparent;bottom:-1px;content:'';left:-1px;mix-blend-mode:lighten;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img::-moz-selection{background:0 0}.mce-content-body img::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#4099ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}body{font-family:sans-serif}table{border-collapse:collapse}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.mobile.css b/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.mobile.css
new file mode 100644
index 00000000..4bdb8bab
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.mobile.css
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection {
+ /* Note: this file is used inside the content, so isn't part of theming */
+ background-color: green;
+ display: inline-block;
+ opacity: 0.5;
+ position: absolute;
+}
+body {
+ -webkit-text-size-adjust: none;
+}
+body img {
+ /* this is related to the content margin */
+ max-width: 96vw;
+}
+body table img {
+ max-width: 95%;
+}
+body {
+ font-family: sans-serif;
+}
+table {
+ border-collapse: collapse;
+}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.mobile.min.css b/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.mobile.min.css
new file mode 100644
index 00000000..35f7dc08
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide-dark/content.mobile.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff b/guns-front-project/public/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff
new file mode 100644
index 00000000..1e3be038
Binary files /dev/null and b/guns-front-project/public/tinymce/skins/ui/oxide-dark/fonts/tinymce-mobile.woff differ
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.css b/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.css
new file mode 100644
index 00000000..d34b9c1a
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.css
@@ -0,0 +1,3047 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tox {
+ box-shadow: none;
+ box-sizing: content-box;
+ color: #2A3746;
+ cursor: auto;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ font-size: 16px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: normal;
+ -webkit-tap-highlight-color: transparent;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ vertical-align: initial;
+ white-space: normal;
+}
+.tox *:not(svg):not(rect) {
+ box-sizing: inherit;
+ color: inherit;
+ cursor: inherit;
+ direction: inherit;
+ font-family: inherit;
+ font-size: inherit;
+ font-style: inherit;
+ font-weight: inherit;
+ line-height: inherit;
+ -webkit-tap-highlight-color: inherit;
+ text-align: inherit;
+ text-decoration: inherit;
+ text-shadow: inherit;
+ text-transform: inherit;
+ vertical-align: inherit;
+ white-space: inherit;
+}
+.tox *:not(svg):not(rect) {
+ /* stylelint-disable-line no-duplicate-selectors */
+ background: transparent;
+ border: 0;
+ box-shadow: none;
+ float: none;
+ height: auto;
+ margin: 0;
+ max-width: none;
+ outline: 0;
+ padding: 0;
+ position: static;
+ width: auto;
+}
+.tox:not([dir=rtl]) {
+ direction: ltr;
+ text-align: left;
+}
+.tox[dir=rtl] {
+ direction: rtl;
+ text-align: right;
+}
+.tox-tinymce {
+ border: 1px solid #000000;
+ border-radius: 0;
+ box-shadow: none;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ overflow: hidden;
+ position: relative;
+ visibility: inherit !important;
+}
+.tox-tinymce-inline {
+ border: none;
+ box-shadow: none;
+}
+.tox-tinymce-inline .tox-editor-header {
+ background-color: transparent;
+ border: 1px solid #000000;
+ border-radius: 0;
+ box-shadow: none;
+}
+.tox-tinymce-aux {
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ z-index: 1300;
+}
+.tox-tinymce *:focus,
+.tox-tinymce-aux *:focus {
+ outline: none;
+}
+button::-moz-focus-inner {
+ border: 0;
+}
+.tox[dir=rtl] .tox-icon--flip svg {
+ transform: rotateY(180deg);
+}
+.tox .accessibility-issue__header {
+ align-items: center;
+ display: flex;
+ margin-bottom: 4px;
+}
+.tox .accessibility-issue__description {
+ align-items: stretch;
+ border: 1px solid #000000;
+ border-radius: 3px;
+ display: flex;
+ justify-content: space-between;
+}
+.tox .accessibility-issue__description > div {
+ padding-bottom: 4px;
+}
+.tox .accessibility-issue__description > div > div {
+ align-items: center;
+ display: flex;
+ margin-bottom: 4px;
+}
+.tox .accessibility-issue__description > *:last-child:not(:only-child) {
+ border-color: #000000;
+ border-style: solid;
+}
+.tox .accessibility-issue__repair {
+ margin-top: 16px;
+}
+.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description {
+ background-color: rgba(32, 122, 183, 0.5);
+ border-color: #207ab7;
+ color: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description > *:last-child {
+ border-color: #207ab7;
+}
+.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2 {
+ color: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg {
+ fill: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue--info a .tox-icon {
+ color: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description {
+ background-color: rgba(255, 165, 0, 0.5);
+ border-color: rgba(255, 165, 0, 0.8);
+ color: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description > *:last-child {
+ border-color: rgba(255, 165, 0, 0.8);
+}
+.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2 {
+ color: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg {
+ fill: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue--warn a .tox-icon {
+ color: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description {
+ background-color: rgba(204, 0, 0, 0.5);
+ border-color: rgba(204, 0, 0, 0.8);
+ color: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description > *:last-child {
+ border-color: rgba(204, 0, 0, 0.8);
+}
+.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2 {
+ color: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg {
+ fill: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue--error a .tox-icon {
+ color: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description {
+ background-color: rgba(120, 171, 70, 0.5);
+ border-color: rgba(120, 171, 70, 0.8);
+ color: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description > *:last-child {
+ border-color: rgba(120, 171, 70, 0.8);
+}
+.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2 {
+ color: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg {
+ fill: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue--success a .tox-icon {
+ color: #fff;
+}
+.tox .tox-dialog__body-content .accessibility-issue__header h1,
+.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2 {
+ margin-top: 0;
+}
+.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button {
+ margin-left: 4px;
+}
+.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {
+ margin-left: auto;
+}
+.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description {
+ padding: 4px 4px 4px 8px;
+}
+.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description > *:last-child {
+ border-left-width: 1px;
+ padding-left: 4px;
+}
+.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button {
+ margin-right: 4px;
+}
+.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {
+ margin-right: auto;
+}
+.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description {
+ padding: 4px 8px 4px 4px;
+}
+.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description > *:last-child {
+ border-right-width: 1px;
+ padding-right: 4px;
+}
+.tox .tox-anchorbar {
+ display: flex;
+ flex: 0 0 auto;
+}
+.tox .tox-bar {
+ display: flex;
+ flex: 0 0 auto;
+}
+.tox .tox-button {
+ background-color: #207ab7;
+ background-image: none;
+ background-position: 0 0;
+ background-repeat: repeat;
+ border-color: #207ab7;
+ border-radius: 3px;
+ border-style: solid;
+ border-width: 1px;
+ box-shadow: none;
+ box-sizing: border-box;
+ color: #fff;
+ cursor: pointer;
+ display: inline-block;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: bold;
+ letter-spacing: normal;
+ line-height: 24px;
+ margin: 0;
+ outline: none;
+ padding: 4px 16px;
+ text-align: center;
+ text-decoration: none;
+ text-transform: none;
+ white-space: nowrap;
+}
+.tox .tox-button[disabled] {
+ background-color: #207ab7;
+ background-image: none;
+ border-color: #207ab7;
+ box-shadow: none;
+ color: rgba(255, 255, 255, 0.5);
+ cursor: not-allowed;
+}
+.tox .tox-button:focus:not(:disabled) {
+ background-color: #1c6ca1;
+ background-image: none;
+ border-color: #1c6ca1;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-button:hover:not(:disabled) {
+ background-color: #1c6ca1;
+ background-image: none;
+ border-color: #1c6ca1;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-button:active:not(:disabled) {
+ background-color: #185d8c;
+ background-image: none;
+ border-color: #185d8c;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-button--secondary {
+ background-color: #3d546f;
+ background-image: none;
+ background-position: 0 0;
+ background-repeat: repeat;
+ border-color: #3d546f;
+ border-radius: 3px;
+ border-style: solid;
+ border-width: 1px;
+ box-shadow: none;
+ color: #fff;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: bold;
+ letter-spacing: normal;
+ outline: none;
+ padding: 4px 16px;
+ text-decoration: none;
+ text-transform: none;
+}
+.tox .tox-button--secondary[disabled] {
+ background-color: #3d546f;
+ background-image: none;
+ border-color: #3d546f;
+ box-shadow: none;
+ color: rgba(255, 255, 255, 0.5);
+}
+.tox .tox-button--secondary:focus:not(:disabled) {
+ background-color: #34485f;
+ background-image: none;
+ border-color: #34485f;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-button--secondary:hover:not(:disabled) {
+ background-color: #34485f;
+ background-image: none;
+ border-color: #34485f;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-button--secondary:active:not(:disabled) {
+ background-color: #2b3b4e;
+ background-image: none;
+ border-color: #2b3b4e;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-button--icon,
+.tox .tox-button.tox-button--icon,
+.tox .tox-button.tox-button--secondary.tox-button--icon {
+ padding: 4px;
+}
+.tox .tox-button--icon .tox-icon svg,
+.tox .tox-button.tox-button--icon .tox-icon svg,
+.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg {
+ display: block;
+ fill: currentColor;
+}
+.tox .tox-button-link {
+ background: 0;
+ border: none;
+ box-sizing: border-box;
+ cursor: pointer;
+ display: inline-block;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ font-size: 16px;
+ font-weight: normal;
+ line-height: 1.3;
+ margin: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+.tox .tox-button-link--sm {
+ font-size: 14px;
+}
+.tox .tox-button--naked {
+ background-color: transparent;
+ border-color: transparent;
+ box-shadow: unset;
+ color: #fff;
+}
+.tox .tox-button--naked[disabled] {
+ background-color: #3d546f;
+ border-color: #3d546f;
+ box-shadow: none;
+ color: rgba(255, 255, 255, 0.5);
+}
+.tox .tox-button--naked:hover:not(:disabled) {
+ background-color: #34485f;
+ border-color: #34485f;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-button--naked:focus:not(:disabled) {
+ background-color: #34485f;
+ border-color: #34485f;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-button--naked:active:not(:disabled) {
+ background-color: #2b3b4e;
+ border-color: #2b3b4e;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-button--naked .tox-icon svg {
+ fill: currentColor;
+}
+.tox .tox-button--naked.tox-button--icon:hover:not(:disabled) {
+ color: #fff;
+}
+.tox .tox-checkbox {
+ align-items: center;
+ border-radius: 3px;
+ cursor: pointer;
+ display: flex;
+ height: 36px;
+ min-width: 36px;
+}
+.tox .tox-checkbox__input {
+ /* Hide from view but visible to screen readers */
+ height: 1px;
+ overflow: hidden;
+ position: absolute;
+ top: auto;
+ width: 1px;
+}
+.tox .tox-checkbox__icons {
+ align-items: center;
+ border-radius: 3px;
+ box-shadow: 0 0 0 2px transparent;
+ box-sizing: content-box;
+ display: flex;
+ height: 24px;
+ justify-content: center;
+ padding: calc(4px - 1px);
+ width: 24px;
+}
+.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {
+ display: block;
+ fill: rgba(255, 255, 255, 0.2);
+}
+.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {
+ display: none;
+ fill: #207ab7;
+}
+.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg {
+ display: none;
+ fill: #207ab7;
+}
+.tox .tox-checkbox--disabled {
+ color: rgba(255, 255, 255, 0.5);
+ cursor: not-allowed;
+}
+.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg {
+ fill: rgba(255, 255, 255, 0.5);
+}
+.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {
+ fill: rgba(255, 255, 255, 0.5);
+}
+.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {
+ fill: rgba(255, 255, 255, 0.5);
+}
+.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {
+ display: none;
+}
+.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg {
+ display: block;
+}
+.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {
+ display: none;
+}
+.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {
+ display: block;
+}
+.tox input.tox-checkbox__input:focus + .tox-checkbox__icons {
+ border-radius: 3px;
+ box-shadow: inset 0 0 0 1px #207ab7;
+ padding: calc(4px - 1px);
+}
+.tox:not([dir=rtl]) .tox-checkbox__label {
+ margin-left: 4px;
+}
+.tox:not([dir=rtl]) .tox-checkbox__input {
+ left: -10000px;
+}
+.tox:not([dir=rtl]) .tox-bar .tox-checkbox {
+ margin-left: 4px;
+}
+.tox[dir=rtl] .tox-checkbox__label {
+ margin-right: 4px;
+}
+.tox[dir=rtl] .tox-checkbox__input {
+ right: -10000px;
+}
+.tox[dir=rtl] .tox-bar .tox-checkbox {
+ margin-right: 4px;
+}
+.tox {
+ /* stylelint-disable-next-line no-descending-specificity */
+}
+.tox .tox-collection--toolbar .tox-collection__group {
+ display: flex;
+ padding: 0;
+}
+.tox .tox-collection--grid .tox-collection__group {
+ display: flex;
+ flex-wrap: wrap;
+ max-height: 208px;
+ overflow-x: hidden;
+ overflow-y: auto;
+ padding: 0;
+}
+.tox .tox-collection--list .tox-collection__group {
+ border-bottom-width: 0;
+ border-color: #1a1a1a;
+ border-left-width: 0;
+ border-right-width: 0;
+ border-style: solid;
+ border-top-width: 1px;
+ padding: 4px 0;
+}
+.tox .tox-collection--list .tox-collection__group:first-child {
+ border-top-width: 0;
+}
+.tox .tox-collection__group-heading {
+ background-color: #333333;
+ color: #fff;
+ cursor: default;
+ font-size: 12px;
+ font-style: normal;
+ font-weight: normal;
+ margin-bottom: 4px;
+ margin-top: -4px;
+ padding: 4px 8px;
+ text-transform: none;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.tox .tox-collection__item {
+ align-items: center;
+ color: #fff;
+ cursor: pointer;
+ display: flex;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.tox .tox-collection--list .tox-collection__item {
+ padding: 4px 8px;
+}
+.tox .tox-collection--toolbar .tox-collection__item {
+ border-radius: 3px;
+ padding: 4px;
+}
+.tox .tox-collection--grid .tox-collection__item {
+ border-radius: 3px;
+ padding: 4px;
+}
+.tox .tox-collection--list .tox-collection__item--enabled {
+ background-color: #2b3b4e;
+ color: #fff;
+}
+.tox .tox-collection--list .tox-collection__item--active {
+ background-color: #4a5562;
+}
+.tox .tox-collection--toolbar .tox-collection__item--enabled {
+ background-color: #757d87;
+ color: #fff;
+}
+.tox .tox-collection--toolbar .tox-collection__item--active {
+ background-color: #4a5562;
+}
+.tox .tox-collection--grid .tox-collection__item--enabled {
+ background-color: #757d87;
+ color: #fff;
+}
+.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled) {
+ background-color: #4a5562;
+ color: #fff;
+}
+.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) {
+ color: #fff;
+}
+.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled) {
+ color: #fff;
+}
+.tox .tox-collection__item-icon,
+.tox .tox-collection__item-checkmark {
+ align-items: center;
+ display: flex;
+ height: 24px;
+ justify-content: center;
+ width: 24px;
+}
+.tox .tox-collection__item-icon svg,
+.tox .tox-collection__item-checkmark svg {
+ fill: currentColor;
+}
+.tox .tox-collection--toolbar-lg .tox-collection__item-icon {
+ height: 48px;
+ width: 48px;
+}
+.tox .tox-collection__item-label {
+ color: currentColor;
+ display: inline-block;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 24px;
+ text-transform: none;
+ word-break: break-all;
+}
+.tox .tox-collection__item-accessory {
+ color: rgba(255, 255, 255, 0.5);
+ display: inline-block;
+ font-size: 14px;
+ height: 24px;
+ line-height: 24px;
+ text-transform: none;
+}
+.tox .tox-collection__item-caret {
+ align-items: center;
+ display: flex;
+ min-height: 24px;
+}
+.tox .tox-collection__item-caret::after {
+ content: '';
+ font-size: 0;
+ min-height: inherit;
+}
+.tox .tox-collection__item-caret svg {
+ fill: #fff;
+}
+.tox .tox-collection__item--state-disabled {
+ background-color: transparent;
+ color: rgba(255, 255, 255, 0.5);
+ cursor: not-allowed;
+}
+.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg {
+ fill: rgba(255, 255, 255, 0.5);
+}
+.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg {
+ display: none;
+}
+.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory + .tox-collection__item-checkmark {
+ display: none;
+}
+.tox .tox-collection--horizontal {
+ background-color: #2b3b4e;
+ border: 1px solid #1a1a1a;
+ border-radius: 3px;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ display: flex;
+ flex: 0 0 auto;
+ flex-shrink: 0;
+ flex-wrap: nowrap;
+ margin-bottom: 0;
+ overflow-x: auto;
+ padding: 0;
+}
+.tox .tox-collection--horizontal .tox-collection__group {
+ align-items: center;
+ display: flex;
+ flex-wrap: nowrap;
+ margin: 0;
+ padding: 0 4px;
+}
+.tox .tox-collection--horizontal .tox-collection__item {
+ height: 34px;
+ margin: 2px 0 3px 0;
+ padding: 0 4px;
+}
+.tox .tox-collection--horizontal .tox-collection__item-label {
+ white-space: nowrap;
+}
+.tox .tox-collection--horizontal .tox-collection__item-caret {
+ margin-left: 4px;
+}
+.tox .tox-collection__item-container {
+ display: flex;
+}
+.tox .tox-collection__item-container--row {
+ align-items: center;
+ flex: 1 1 auto;
+ flex-direction: row;
+}
+.tox .tox-collection__item-container--row.tox-collection__item-container--align-left {
+ margin-right: auto;
+}
+.tox .tox-collection__item-container--row.tox-collection__item-container--align-right {
+ justify-content: flex-end;
+ margin-left: auto;
+}
+.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top {
+ align-items: flex-start;
+ margin-bottom: auto;
+}
+.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle {
+ align-items: center;
+}
+.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom {
+ align-items: flex-end;
+ margin-top: auto;
+}
+.tox .tox-collection__item-container--column {
+ -ms-grid-row-align: center;
+ align-self: center;
+ flex: 1 1 auto;
+ flex-direction: column;
+}
+.tox .tox-collection__item-container--column.tox-collection__item-container--align-left {
+ align-items: flex-start;
+}
+.tox .tox-collection__item-container--column.tox-collection__item-container--align-right {
+ align-items: flex-end;
+}
+.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top {
+ align-self: flex-start;
+}
+.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle {
+ -ms-grid-row-align: center;
+ align-self: center;
+}
+.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom {
+ align-self: flex-end;
+}
+.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {
+ border-right: 1px solid #000000;
+}
+.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > *:not(:first-child) {
+ margin-left: 8px;
+}
+.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {
+ margin-left: 4px;
+}
+.tox:not([dir=rtl]) .tox-collection__item-accessory {
+ margin-left: 16px;
+ text-align: right;
+}
+.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret {
+ margin-left: 16px;
+}
+.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {
+ border-left: 1px solid #000000;
+}
+.tox[dir=rtl] .tox-collection--list .tox-collection__item > *:not(:first-child) {
+ margin-right: 8px;
+}
+.tox[dir=rtl] .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {
+ margin-right: 4px;
+}
+.tox[dir=rtl] .tox-collection__item-accessory {
+ margin-right: 16px;
+ text-align: left;
+}
+.tox[dir=rtl] .tox-collection .tox-collection__item-caret {
+ margin-right: 16px;
+ transform: rotateY(180deg);
+}
+.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret {
+ margin-right: 4px;
+}
+.tox .tox-color-picker-container {
+ display: flex;
+ flex-direction: row;
+ height: 225px;
+ margin: 0;
+}
+.tox .tox-sv-palette {
+ box-sizing: border-box;
+ display: flex;
+ height: 100%;
+}
+.tox .tox-sv-palette-spectrum {
+ height: 100%;
+}
+.tox .tox-sv-palette,
+.tox .tox-sv-palette-spectrum {
+ width: 225px;
+}
+.tox .tox-sv-palette-thumb {
+ background: none;
+ border: 1px solid black;
+ border-radius: 50%;
+ box-sizing: content-box;
+ height: 12px;
+ position: absolute;
+ width: 12px;
+}
+.tox .tox-sv-palette-inner-thumb {
+ border: 1px solid white;
+ border-radius: 50%;
+ height: 10px;
+ position: absolute;
+ width: 10px;
+}
+.tox .tox-hue-slider {
+ box-sizing: border-box;
+ height: 100%;
+ width: 25px;
+}
+.tox .tox-hue-slider-spectrum {
+ background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00);
+ height: 100%;
+ width: 100%;
+}
+.tox .tox-hue-slider,
+.tox .tox-hue-slider-spectrum {
+ width: 20px;
+}
+.tox .tox-hue-slider-thumb {
+ background: white;
+ border: 1px solid black;
+ box-sizing: content-box;
+ height: 4px;
+ width: 100%;
+}
+.tox .tox-rgb-form {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+}
+.tox .tox-rgb-form div {
+ align-items: center;
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 5px;
+ width: inherit;
+}
+.tox .tox-rgb-form input {
+ width: 6em;
+}
+.tox .tox-rgb-form input.tox-invalid {
+ /* Need !important to override Chrome's focus styling unfortunately */
+ border: 1px solid red !important;
+}
+.tox .tox-rgb-form .tox-rgba-preview {
+ border: 1px solid black;
+ flex-grow: 2;
+ margin-bottom: 0;
+}
+.tox:not([dir=rtl]) .tox-sv-palette {
+ margin-right: 15px;
+}
+.tox:not([dir=rtl]) .tox-hue-slider {
+ margin-right: 15px;
+}
+.tox:not([dir=rtl]) .tox-hue-slider-thumb {
+ margin-left: -1px;
+}
+.tox:not([dir=rtl]) .tox-rgb-form label {
+ margin-right: 0.5em;
+}
+.tox[dir=rtl] .tox-sv-palette {
+ margin-left: 15px;
+}
+.tox[dir=rtl] .tox-hue-slider {
+ margin-left: 15px;
+}
+.tox[dir=rtl] .tox-hue-slider-thumb {
+ margin-right: -1px;
+}
+.tox[dir=rtl] .tox-rgb-form label {
+ margin-left: 0.5em;
+}
+.tox .tox-toolbar .tox-swatches,
+.tox .tox-toolbar__primary .tox-swatches,
+.tox .tox-toolbar__overflow .tox-swatches {
+ margin: 2px 0 3px 4px;
+}
+.tox .tox-collection--list .tox-collection__group .tox-swatches-menu {
+ border: 0;
+ margin: -4px 0;
+}
+.tox .tox-swatches__row {
+ display: flex;
+}
+.tox .tox-swatch {
+ height: 30px;
+ transition: transform 0.15s, box-shadow 0.15s;
+ width: 30px;
+}
+.tox .tox-swatch:hover,
+.tox .tox-swatch:focus {
+ box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset;
+ transform: scale(0.8);
+}
+.tox .tox-swatch--remove {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+}
+.tox .tox-swatch--remove svg path {
+ stroke: #e74c3c;
+}
+.tox .tox-swatches__picker-btn {
+ align-items: center;
+ background-color: transparent;
+ border: 0;
+ cursor: pointer;
+ display: flex;
+ height: 30px;
+ justify-content: center;
+ outline: none;
+ padding: 0;
+ width: 30px;
+}
+.tox .tox-swatches__picker-btn svg {
+ height: 24px;
+ width: 24px;
+}
+.tox .tox-swatches__picker-btn:hover {
+ background: #4a5562;
+}
+.tox:not([dir=rtl]) .tox-swatches__picker-btn {
+ margin-left: auto;
+}
+.tox[dir=rtl] .tox-swatches__picker-btn {
+ margin-right: auto;
+}
+.tox .tox-comment-thread {
+ background: #2b3b4e;
+ position: relative;
+}
+.tox .tox-comment-thread > *:not(:first-child) {
+ margin-top: 8px;
+}
+.tox .tox-comment {
+ background: #2b3b4e;
+ border: 1px solid #000000;
+ border-radius: 3px;
+ box-shadow: 0 4px 8px 0 rgba(42, 55, 70, 0.1);
+ padding: 8px 8px 16px 8px;
+ position: relative;
+}
+.tox .tox-comment__header {
+ align-items: center;
+ color: #fff;
+ display: flex;
+ justify-content: space-between;
+}
+.tox .tox-comment__date {
+ color: rgba(255, 255, 255, 0.5);
+ font-size: 12px;
+}
+.tox .tox-comment__body {
+ color: #fff;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1.3;
+ margin-top: 8px;
+ position: relative;
+ text-transform: initial;
+}
+.tox .tox-comment__body textarea {
+ resize: none;
+ white-space: normal;
+ width: 100%;
+}
+.tox .tox-comment__expander {
+ padding-top: 8px;
+}
+.tox .tox-comment__expander p {
+ color: rgba(255, 255, 255, 0.5);
+ font-size: 14px;
+ font-style: normal;
+}
+.tox .tox-comment__body p {
+ margin: 0;
+}
+.tox .tox-comment__buttonspacing {
+ padding-top: 16px;
+ text-align: center;
+}
+.tox .tox-comment-thread__overlay::after {
+ background: #2b3b4e;
+ bottom: 0;
+ content: "";
+ display: flex;
+ left: 0;
+ opacity: 0.9;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 5;
+}
+.tox .tox-comment__reply {
+ display: flex;
+ flex-shrink: 0;
+ flex-wrap: wrap;
+ justify-content: flex-end;
+ margin-top: 8px;
+}
+.tox .tox-comment__reply > *:first-child {
+ margin-bottom: 8px;
+ width: 100%;
+}
+.tox .tox-comment__edit {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-end;
+ margin-top: 16px;
+}
+.tox .tox-comment__gradient::after {
+ background: linear-gradient(rgba(43, 59, 78, 0), #2b3b4e);
+ bottom: 0;
+ content: "";
+ display: block;
+ height: 5em;
+ margin-top: -40px;
+ position: absolute;
+ width: 100%;
+}
+.tox .tox-comment__overlay {
+ background: #2b3b4e;
+ bottom: 0;
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+ left: 0;
+ opacity: 0.9;
+ position: absolute;
+ right: 0;
+ text-align: center;
+ top: 0;
+ z-index: 5;
+}
+.tox .tox-comment__loading-text {
+ align-items: center;
+ color: #fff;
+ display: flex;
+ flex-direction: column;
+ position: relative;
+}
+.tox .tox-comment__loading-text > div {
+ padding-bottom: 16px;
+}
+.tox .tox-comment__overlaytext {
+ bottom: 0;
+ flex-direction: column;
+ font-size: 14px;
+ left: 0;
+ padding: 1em;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 10;
+}
+.tox .tox-comment__overlaytext p {
+ background-color: #2b3b4e;
+ box-shadow: 0 0 8px 8px #2b3b4e;
+ color: #fff;
+ text-align: center;
+}
+.tox .tox-comment__overlaytext div:nth-of-type(2) {
+ font-size: 0.8em;
+}
+.tox .tox-comment__busy-spinner {
+ align-items: center;
+ background-color: #2b3b4e;
+ bottom: 0;
+ display: flex;
+ justify-content: center;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 20;
+}
+.tox .tox-comment__scroll {
+ display: flex;
+ flex-direction: column;
+ flex-shrink: 1;
+ overflow: auto;
+}
+.tox .tox-conversations {
+ margin: 8px;
+}
+.tox:not([dir=rtl]) .tox-comment__edit {
+ margin-left: 8px;
+}
+.tox:not([dir=rtl]) .tox-comment__buttonspacing > *:last-child,
+.tox:not([dir=rtl]) .tox-comment__edit > *:last-child,
+.tox:not([dir=rtl]) .tox-comment__reply > *:last-child {
+ margin-left: 8px;
+}
+.tox[dir=rtl] .tox-comment__edit {
+ margin-right: 8px;
+}
+.tox[dir=rtl] .tox-comment__buttonspacing > *:last-child,
+.tox[dir=rtl] .tox-comment__edit > *:last-child,
+.tox[dir=rtl] .tox-comment__reply > *:last-child {
+ margin-right: 8px;
+}
+.tox .tox-user {
+ align-items: center;
+ display: flex;
+}
+.tox .tox-user__avatar svg {
+ fill: rgba(255, 255, 255, 0.5);
+}
+.tox .tox-user__name {
+ color: rgba(255, 255, 255, 0.5);
+ font-size: 12px;
+ font-style: normal;
+ font-weight: bold;
+ text-transform: uppercase;
+}
+.tox:not([dir=rtl]) .tox-user__avatar svg {
+ margin-right: 8px;
+}
+.tox:not([dir=rtl]) .tox-user__avatar + .tox-user__name {
+ margin-left: 8px;
+}
+.tox[dir=rtl] .tox-user__avatar svg {
+ margin-left: 8px;
+}
+.tox[dir=rtl] .tox-user__avatar + .tox-user__name {
+ margin-right: 8px;
+}
+.tox .tox-dialog-wrap {
+ align-items: center;
+ bottom: 0;
+ display: flex;
+ justify-content: center;
+ left: 0;
+ position: fixed;
+ right: 0;
+ top: 0;
+ z-index: 1100;
+}
+.tox .tox-dialog-wrap__backdrop {
+ background-color: rgba(34, 47, 62, 0.75);
+ bottom: 0;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 1;
+}
+.tox .tox-dialog-wrap__backdrop--opaque {
+ background-color: #222f3e;
+}
+.tox .tox-dialog {
+ background-color: #2b3b4e;
+ border-color: #000000;
+ border-radius: 3px;
+ border-style: solid;
+ border-width: 1px;
+ box-shadow: 0 16px 16px -10px rgba(42, 55, 70, 0.15), 0 0 40px 1px rgba(42, 55, 70, 0.15);
+ display: flex;
+ flex-direction: column;
+ max-height: 100%;
+ max-width: 480px;
+ overflow: hidden;
+ position: relative;
+ width: 95vw;
+ z-index: 2;
+}
+@media only screen and (max-width:767px) {
+ body:not(.tox-force-desktop) .tox .tox-dialog {
+ align-self: flex-start;
+ margin: 8px auto;
+ width: calc(100vw - 16px);
+ }
+}
+.tox .tox-dialog-inline {
+ z-index: 1100;
+}
+.tox .tox-dialog__header {
+ align-items: center;
+ background-color: #2b3b4e;
+ border-bottom: none;
+ color: #fff;
+ display: flex;
+ font-size: 16px;
+ justify-content: space-between;
+ padding: 8px 16px 0 16px;
+ position: relative;
+}
+.tox .tox-dialog__header .tox-button {
+ z-index: 1;
+}
+.tox .tox-dialog__draghandle {
+ cursor: grab;
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.tox .tox-dialog__draghandle:active {
+ cursor: grabbing;
+}
+.tox .tox-dialog__dismiss {
+ margin-left: auto;
+}
+.tox .tox-dialog__title {
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ font-size: 20px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1.3;
+ margin: 0;
+ text-transform: none;
+}
+.tox .tox-dialog__body {
+ color: #fff;
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+ font-size: 16px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1.3;
+ min-width: 0;
+ text-align: left;
+ text-transform: none;
+}
+@media only screen and (max-width:767px) {
+ body:not(.tox-force-desktop) .tox .tox-dialog__body {
+ flex-direction: column;
+ }
+}
+.tox .tox-dialog__body-nav {
+ align-items: flex-start;
+ display: flex;
+ flex-direction: column;
+ padding: 16px 16px;
+}
+@media only screen and (max-width:767px) {
+ body:not(.tox-force-desktop) .tox .tox-dialog__body-nav {
+ flex-direction: row;
+ -webkit-overflow-scrolling: touch;
+ overflow-x: auto;
+ padding-bottom: 0;
+ }
+}
+.tox .tox-dialog__body-nav-item {
+ border-bottom: 2px solid transparent;
+ color: rgba(255, 255, 255, 0.5);
+ display: inline-block;
+ font-size: 14px;
+ line-height: 1.3;
+ margin-bottom: 8px;
+ text-decoration: none;
+ white-space: nowrap;
+}
+.tox .tox-dialog__body-nav-item:focus {
+ background-color: rgba(32, 122, 183, 0.1);
+}
+.tox .tox-dialog__body-nav-item--active {
+ border-bottom: 2px solid #207ab7;
+ color: #207ab7;
+}
+.tox .tox-dialog__body-content {
+ box-sizing: border-box;
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ -ms-flex-preferred-size: auto;
+ max-height: 650px;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ padding: 16px 16px;
+}
+.tox .tox-dialog__body-content > * {
+ margin-bottom: 0;
+ margin-top: 16px;
+}
+.tox .tox-dialog__body-content > *:first-child {
+ margin-top: 0;
+}
+.tox .tox-dialog__body-content > *:last-child {
+ margin-bottom: 0;
+}
+.tox .tox-dialog__body-content > *:only-child {
+ margin-bottom: 0;
+ margin-top: 0;
+}
+.tox .tox-dialog__body-content a {
+ color: #207ab7;
+ cursor: pointer;
+ text-decoration: none;
+}
+.tox .tox-dialog__body-content a:hover,
+.tox .tox-dialog__body-content a:focus {
+ color: #185d8c;
+ text-decoration: none;
+}
+.tox .tox-dialog__body-content a:active {
+ color: #185d8c;
+ text-decoration: none;
+}
+.tox .tox-dialog__body-content svg {
+ fill: #fff;
+}
+.tox .tox-dialog__body-content ul {
+ display: block;
+ list-style-type: disc;
+ margin-bottom: 16px;
+ -webkit-margin-end: 0;
+ margin-inline-end: 0;
+ -webkit-margin-start: 0;
+ margin-inline-start: 0;
+ -webkit-padding-start: 2.5rem;
+ padding-inline-start: 2.5rem;
+}
+.tox .tox-dialog__body-content .tox-form__group h1 {
+ color: #fff;
+ font-size: 20px;
+ font-style: normal;
+ font-weight: bold;
+ letter-spacing: normal;
+ margin-bottom: 16px;
+ margin-top: 2rem;
+ text-transform: none;
+}
+.tox .tox-dialog__body-content .tox-form__group h2 {
+ color: #fff;
+ font-size: 16px;
+ font-style: normal;
+ font-weight: bold;
+ letter-spacing: normal;
+ margin-bottom: 16px;
+ margin-top: 2rem;
+ text-transform: none;
+}
+.tox .tox-dialog__body-content .tox-form__group p {
+ margin-bottom: 16px;
+}
+.tox .tox-dialog__body-content .tox-form__group h1:first-child,
+.tox .tox-dialog__body-content .tox-form__group h2:first-child,
+.tox .tox-dialog__body-content .tox-form__group p:first-child {
+ margin-top: 0;
+}
+.tox .tox-dialog__body-content .tox-form__group h1:last-child,
+.tox .tox-dialog__body-content .tox-form__group h2:last-child,
+.tox .tox-dialog__body-content .tox-form__group p:last-child {
+ margin-bottom: 0;
+}
+.tox .tox-dialog__body-content .tox-form__group h1:only-child,
+.tox .tox-dialog__body-content .tox-form__group h2:only-child,
+.tox .tox-dialog__body-content .tox-form__group p:only-child {
+ margin-bottom: 0;
+ margin-top: 0;
+}
+.tox .tox-dialog--width-lg {
+ height: 650px;
+ max-width: 1200px;
+}
+.tox .tox-dialog--width-md {
+ max-width: 800px;
+}
+.tox .tox-dialog--width-md .tox-dialog__body-content {
+ overflow: auto;
+}
+.tox .tox-dialog__body-content--centered {
+ text-align: center;
+}
+.tox .tox-dialog__footer {
+ align-items: center;
+ background-color: #2b3b4e;
+ border-top: 1px solid #000000;
+ display: flex;
+ justify-content: space-between;
+ padding: 8px 16px;
+}
+.tox .tox-dialog__footer-start,
+.tox .tox-dialog__footer-end {
+ display: flex;
+}
+.tox .tox-dialog__busy-spinner {
+ align-items: center;
+ background-color: rgba(34, 47, 62, 0.75);
+ bottom: 0;
+ display: flex;
+ justify-content: center;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 3;
+}
+.tox .tox-dialog__table {
+ border-collapse: collapse;
+ width: 100%;
+}
+.tox .tox-dialog__table thead th {
+ font-weight: bold;
+ padding-bottom: 8px;
+}
+.tox .tox-dialog__table tbody tr {
+ border-bottom: 1px solid #000000;
+}
+.tox .tox-dialog__table tbody tr:last-child {
+ border-bottom: none;
+}
+.tox .tox-dialog__table td {
+ padding-bottom: 8px;
+ padding-top: 8px;
+}
+.tox .tox-dialog__popups {
+ position: absolute;
+ width: 100%;
+ z-index: 1100;
+}
+.tox .tox-dialog__body-iframe {
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-dialog__body-iframe .tox-navobj {
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2) {
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+ height: 100%;
+}
+.tox .tox-dialog-dock-fadeout {
+ opacity: 0;
+ visibility: hidden;
+}
+.tox .tox-dialog-dock-fadein {
+ opacity: 1;
+ visibility: visible;
+}
+.tox .tox-dialog-dock-transition {
+ transition: visibility 0s linear 0.3s, opacity 0.3s ease;
+}
+.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein {
+ transition-delay: 0s;
+}
+.tox.tox-platform-ie {
+ /* IE11 CSS styles go here */
+}
+.tox.tox-platform-ie .tox-dialog-wrap {
+ position: -ms-device-fixed;
+}
+@media only screen and (max-width:767px) {
+ body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav {
+ margin-right: 0;
+ }
+}
+@media only screen and (max-width:767px) {
+ body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child) {
+ margin-left: 8px;
+ }
+}
+.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start > *,
+.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end > * {
+ margin-left: 8px;
+}
+.tox[dir=rtl] .tox-dialog__body {
+ text-align: right;
+}
+@media only screen and (max-width:767px) {
+ body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav {
+ margin-left: 0;
+ }
+}
+@media only screen and (max-width:767px) {
+ body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child) {
+ margin-right: 8px;
+ }
+}
+.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start > *,
+.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end > * {
+ margin-right: 8px;
+}
+body.tox-dialog__disable-scroll {
+ overflow: hidden;
+}
+.tox .tox-dropzone-container {
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-dropzone {
+ align-items: center;
+ background: #fff;
+ border: 2px dashed #000000;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+ justify-content: center;
+ min-height: 100px;
+ padding: 10px;
+}
+.tox .tox-dropzone p {
+ color: rgba(255, 255, 255, 0.5);
+ margin: 0 0 16px 0;
+}
+.tox .tox-edit-area {
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+ overflow: hidden;
+ position: relative;
+}
+.tox .tox-edit-area__iframe {
+ background-color: #fff;
+ border: 0;
+ box-sizing: border-box;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+ height: 100%;
+ position: absolute;
+ width: 100%;
+}
+.tox.tox-inline-edit-area {
+ border: 1px dotted #000000;
+}
+.tox .tox-editor-container {
+ display: flex;
+ flex: 1 1 auto;
+ flex-direction: column;
+ overflow: hidden;
+}
+.tox .tox-editor-header {
+ z-index: 1;
+}
+.tox:not(.tox-tinymce-inline) .tox-editor-header {
+ box-shadow: none;
+ transition: box-shadow 0.5s;
+}
+.tox.tox-tinymce--toolbar-bottom .tox-editor-header,
+.tox.tox-tinymce-inline .tox-editor-header {
+ margin-bottom: -1px;
+}
+.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header {
+ background-color: transparent;
+ box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25);
+}
+.tox-editor-dock-fadeout {
+ opacity: 0;
+ visibility: hidden;
+}
+.tox-editor-dock-fadein {
+ opacity: 1;
+ visibility: visible;
+}
+.tox-editor-dock-transition {
+ transition: visibility 0s linear 0.25s, opacity 0.25s ease;
+}
+.tox-editor-dock-transition.tox-editor-dock-fadein {
+ transition-delay: 0s;
+}
+.tox .tox-control-wrap {
+ flex: 1;
+ position: relative;
+}
+.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,
+.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,
+.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid {
+ display: none;
+}
+.tox .tox-control-wrap svg {
+ display: block;
+}
+.tox .tox-control-wrap__status-icon-wrap {
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+}
+.tox .tox-control-wrap__status-icon-invalid svg {
+ fill: #c00;
+}
+.tox .tox-control-wrap__status-icon-unknown svg {
+ fill: orange;
+}
+.tox .tox-control-wrap__status-icon-valid svg {
+ fill: green;
+}
+.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,
+.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,
+.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield {
+ padding-right: 32px;
+}
+.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap {
+ right: 4px;
+}
+.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,
+.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,
+.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield {
+ padding-left: 32px;
+}
+.tox[dir=rtl] .tox-control-wrap__status-icon-wrap {
+ left: 4px;
+}
+.tox .tox-autocompleter {
+ max-width: 25em;
+}
+.tox .tox-autocompleter .tox-menu {
+ max-width: 25em;
+}
+.tox .tox-autocompleter .tox-autocompleter-highlight {
+ font-weight: bold;
+}
+.tox .tox-color-input {
+ display: flex;
+ position: relative;
+ z-index: 1;
+}
+.tox .tox-color-input .tox-textfield {
+ z-index: -1;
+}
+.tox .tox-color-input span {
+ border-color: rgba(42, 55, 70, 0.2);
+ border-radius: 3px;
+ border-style: solid;
+ border-width: 1px;
+ box-shadow: none;
+ box-sizing: border-box;
+ height: 24px;
+ position: absolute;
+ top: 6px;
+ width: 24px;
+}
+.tox .tox-color-input span:hover:not([aria-disabled=true]),
+.tox .tox-color-input span:focus:not([aria-disabled=true]) {
+ border-color: #207ab7;
+ cursor: pointer;
+}
+.tox .tox-color-input span::before {
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.25) 25%, transparent 25%), linear-gradient(-45deg, rgba(255, 255, 255, 0.25) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(255, 255, 255, 0.25) 75%), linear-gradient(-45deg, transparent 75%, rgba(255, 255, 255, 0.25) 75%);
+ background-position: 0 0, 0 6px, 6px -6px, -6px 0;
+ background-size: 12px 12px;
+ border: 1px solid #2b3b4e;
+ border-radius: 3px;
+ box-sizing: border-box;
+ content: '';
+ height: 24px;
+ left: -1px;
+ position: absolute;
+ top: -1px;
+ width: 24px;
+ z-index: -1;
+}
+.tox .tox-color-input span[aria-disabled=true] {
+ cursor: not-allowed;
+}
+.tox:not([dir=rtl]) .tox-color-input {
+ /* stylelint-disable-next-line no-descending-specificity */
+}
+.tox:not([dir=rtl]) .tox-color-input .tox-textfield {
+ padding-left: 36px;
+}
+.tox:not([dir=rtl]) .tox-color-input span {
+ left: 6px;
+}
+.tox[dir="rtl"] .tox-color-input {
+ /* stylelint-disable-next-line no-descending-specificity */
+}
+.tox[dir="rtl"] .tox-color-input .tox-textfield {
+ padding-right: 36px;
+}
+.tox[dir="rtl"] .tox-color-input span {
+ right: 6px;
+}
+.tox .tox-label,
+.tox .tox-toolbar-label {
+ color: rgba(255, 255, 255, 0.5);
+ display: block;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1.3;
+ padding: 0 8px 0 0;
+ text-transform: none;
+ white-space: nowrap;
+}
+.tox .tox-toolbar-label {
+ padding: 0 8px;
+}
+.tox[dir=rtl] .tox-label {
+ padding: 0 0 0 8px;
+}
+.tox .tox-form {
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-form__group {
+ box-sizing: border-box;
+ margin-bottom: 4px;
+}
+.tox .tox-form-group--maximize {
+ flex: 1;
+}
+.tox .tox-form__group--error {
+ color: #c00;
+}
+.tox .tox-form__group--collection {
+ display: flex;
+}
+.tox .tox-form__grid {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ justify-content: space-between;
+}
+.tox .tox-form__grid--2col > .tox-form__group {
+ width: calc(50% - (8px / 2));
+}
+.tox .tox-form__grid--3col > .tox-form__group {
+ width: calc(100% / 3 - (8px / 2));
+}
+.tox .tox-form__grid--4col > .tox-form__group {
+ width: calc(25% - (8px / 2));
+}
+.tox .tox-form__controls-h-stack {
+ align-items: center;
+ display: flex;
+}
+.tox .tox-form__group--inline {
+ align-items: center;
+ display: flex;
+}
+.tox .tox-form__group--stretched {
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-form__group--stretched .tox-textarea {
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-form__group--stretched .tox-navobj {
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-form__group--stretched .tox-navobj :nth-child(2) {
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+ height: 100%;
+}
+.tox:not([dir=rtl]) .tox-form__controls-h-stack > *:not(:first-child) {
+ margin-left: 4px;
+}
+.tox[dir=rtl] .tox-form__controls-h-stack > *:not(:first-child) {
+ margin-right: 4px;
+}
+.tox .tox-lock.tox-locked .tox-lock-icon__unlock,
+.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock {
+ display: none;
+}
+.tox .tox-textfield,
+.tox .tox-toolbar-textfield,
+.tox .tox-listboxfield .tox-listbox--select,
+.tox .tox-textarea {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background-color: #2b3b4e;
+ border-color: #000000;
+ border-radius: 3px;
+ border-style: solid;
+ border-width: 1px;
+ box-shadow: none;
+ box-sizing: border-box;
+ color: #fff;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ font-size: 16px;
+ line-height: 24px;
+ margin: 0;
+ min-height: 34px;
+ outline: none;
+ padding: 5px 4.75px;
+ resize: none;
+ width: 100%;
+}
+.tox .tox-textfield[disabled],
+.tox .tox-textarea[disabled] {
+ background-color: #222f3e;
+ color: rgba(255, 255, 255, 0.85);
+ cursor: not-allowed;
+}
+.tox .tox-textfield:focus,
+.tox .tox-listboxfield .tox-listbox--select:focus,
+.tox .tox-textarea:focus {
+ background-color: #2b3b4e;
+ border-color: #207ab7;
+ box-shadow: none;
+ outline: none;
+}
+.tox .tox-toolbar-textfield {
+ border-width: 0;
+ margin-bottom: 3px;
+ margin-top: 2px;
+ max-width: 250px;
+}
+.tox .tox-naked-btn {
+ background-color: transparent;
+ border: 0;
+ border-color: transparent;
+ box-shadow: unset;
+ color: #207ab7;
+ cursor: pointer;
+ display: block;
+ margin: 0;
+ padding: 0;
+}
+.tox .tox-naked-btn svg {
+ display: block;
+ fill: #fff;
+}
+.tox:not([dir=rtl]) .tox-toolbar-textfield + * {
+ margin-left: 4px;
+}
+.tox[dir=rtl] .tox-toolbar-textfield + * {
+ margin-right: 4px;
+}
+.tox .tox-listboxfield {
+ cursor: pointer;
+ position: relative;
+}
+.tox .tox-listboxfield .tox-listbox--select[disabled] {
+ background-color: #19232e;
+ color: rgba(255, 255, 255, 0.85);
+ cursor: not-allowed;
+}
+.tox .tox-listbox__select-label {
+ cursor: default;
+ flex: 1;
+ margin: 0 4px;
+}
+.tox .tox-listbox__select-chevron {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ width: 16px;
+}
+.tox .tox-listbox__select-chevron svg {
+ fill: #fff;
+}
+.tox .tox-listboxfield .tox-listbox--select {
+ align-items: center;
+ display: flex;
+}
+.tox:not([dir=rtl]) .tox-listboxfield svg {
+ right: 8px;
+}
+.tox[dir=rtl] .tox-listboxfield svg {
+ left: 8px;
+}
+.tox .tox-selectfield {
+ cursor: pointer;
+ position: relative;
+}
+.tox .tox-selectfield select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background-color: #2b3b4e;
+ border-color: #000000;
+ border-radius: 3px;
+ border-style: solid;
+ border-width: 1px;
+ box-shadow: none;
+ box-sizing: border-box;
+ color: #fff;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ font-size: 16px;
+ line-height: 24px;
+ margin: 0;
+ min-height: 34px;
+ outline: none;
+ padding: 5px 4.75px;
+ resize: none;
+ width: 100%;
+}
+.tox .tox-selectfield select[disabled] {
+ background-color: #19232e;
+ color: rgba(255, 255, 255, 0.85);
+ cursor: not-allowed;
+}
+.tox .tox-selectfield select::-ms-expand {
+ display: none;
+}
+.tox .tox-selectfield select:focus {
+ background-color: #2b3b4e;
+ border-color: #207ab7;
+ box-shadow: none;
+ outline: none;
+}
+.tox .tox-selectfield svg {
+ pointer-events: none;
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+}
+.tox:not([dir=rtl]) .tox-selectfield select[size="0"],
+.tox:not([dir=rtl]) .tox-selectfield select[size="1"] {
+ padding-right: 24px;
+}
+.tox:not([dir=rtl]) .tox-selectfield svg {
+ right: 8px;
+}
+.tox[dir=rtl] .tox-selectfield select[size="0"],
+.tox[dir=rtl] .tox-selectfield select[size="1"] {
+ padding-left: 24px;
+}
+.tox[dir=rtl] .tox-selectfield svg {
+ left: 8px;
+}
+.tox .tox-textarea {
+ -webkit-appearance: textarea;
+ -moz-appearance: textarea;
+ appearance: textarea;
+ white-space: pre-wrap;
+}
+.tox-fullscreen {
+ border: 0;
+ height: 100%;
+ margin: 0;
+ overflow: hidden;
+ -ms-scroll-chaining: none;
+ overscroll-behavior: none;
+ padding: 0;
+ touch-action: pinch-zoom;
+ width: 100%;
+}
+.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
+ display: none;
+}
+.tox.tox-tinymce.tox-fullscreen,
+.tox-shadowhost.tox-fullscreen {
+ left: 0;
+ position: fixed;
+ top: 0;
+ z-index: 1200;
+}
+.tox.tox-tinymce.tox-fullscreen {
+ background-color: transparent;
+}
+.tox-fullscreen .tox.tox-tinymce-aux,
+.tox-fullscreen ~ .tox.tox-tinymce-aux {
+ z-index: 1201;
+}
+.tox .tox-help__more-link {
+ list-style: none;
+ margin-top: 1em;
+}
+.tox .tox-image-tools {
+ width: 100%;
+}
+.tox .tox-image-tools__toolbar {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+}
+.tox .tox-image-tools__image {
+ background-color: #666;
+ height: 380px;
+ overflow: auto;
+ position: relative;
+ width: 100%;
+}
+.tox .tox-image-tools__image,
+.tox .tox-image-tools__image + .tox-image-tools__toolbar {
+ margin-top: 8px;
+}
+.tox .tox-image-tools__image-bg {
+ background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==);
+}
+.tox .tox-image-tools__toolbar > .tox-spacer {
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-croprect-block {
+ background: black;
+ filter: alpha(opacity=50);
+ opacity: 0.5;
+ position: absolute;
+ zoom: 1;
+}
+.tox .tox-croprect-handle {
+ border: 2px solid white;
+ height: 20px;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 20px;
+}
+.tox .tox-croprect-handle-move {
+ border: 0;
+ cursor: move;
+ position: absolute;
+}
+.tox .tox-croprect-handle-nw {
+ border-width: 2px 0 0 2px;
+ cursor: nw-resize;
+ left: 100px;
+ margin: -2px 0 0 -2px;
+ top: 100px;
+}
+.tox .tox-croprect-handle-ne {
+ border-width: 2px 2px 0 0;
+ cursor: ne-resize;
+ left: 200px;
+ margin: -2px 0 0 -20px;
+ top: 100px;
+}
+.tox .tox-croprect-handle-sw {
+ border-width: 0 0 2px 2px;
+ cursor: sw-resize;
+ left: 100px;
+ margin: -20px 2px 0 -2px;
+ top: 200px;
+}
+.tox .tox-croprect-handle-se {
+ border-width: 0 2px 2px 0;
+ cursor: se-resize;
+ left: 200px;
+ margin: -20px 0 0 -20px;
+ top: 200px;
+}
+.tox:not([dir=rtl]) .tox-image-tools__toolbar > .tox-slider:not(:first-of-type) {
+ margin-left: 8px;
+}
+.tox:not([dir=rtl]) .tox-image-tools__toolbar > .tox-button + .tox-slider {
+ margin-left: 32px;
+}
+.tox:not([dir=rtl]) .tox-image-tools__toolbar > .tox-slider + .tox-button {
+ margin-left: 32px;
+}
+.tox[dir=rtl] .tox-image-tools__toolbar > .tox-slider:not(:first-of-type) {
+ margin-right: 8px;
+}
+.tox[dir=rtl] .tox-image-tools__toolbar > .tox-button + .tox-slider {
+ margin-right: 32px;
+}
+.tox[dir=rtl] .tox-image-tools__toolbar > .tox-slider + .tox-button {
+ margin-right: 32px;
+}
+.tox .tox-insert-table-picker {
+ display: flex;
+ flex-wrap: wrap;
+ width: 170px;
+}
+.tox .tox-insert-table-picker > div {
+ border-color: #000000;
+ border-style: solid;
+ border-width: 0 1px 1px 0;
+ box-sizing: border-box;
+ height: 17px;
+ width: 17px;
+}
+.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker {
+ margin: -4px 0;
+}
+.tox .tox-insert-table-picker .tox-insert-table-picker__selected {
+ background-color: rgba(32, 122, 183, 0.5);
+ border-color: rgba(32, 122, 183, 0.5);
+}
+.tox .tox-insert-table-picker__label {
+ color: #fff;
+ display: block;
+ font-size: 14px;
+ padding: 4px;
+ text-align: center;
+ width: 100%;
+}
+.tox:not([dir=rtl]) {
+ /* stylelint-disable-next-line no-descending-specificity */
+}
+.tox:not([dir=rtl]) .tox-insert-table-picker > div:nth-child(10n) {
+ border-right: 0;
+}
+.tox[dir=rtl] {
+ /* stylelint-disable-next-line no-descending-specificity */
+}
+.tox[dir=rtl] .tox-insert-table-picker > div:nth-child(10n+1) {
+ border-right: 0;
+}
+.tox {
+ /* stylelint-disable */
+ /* stylelint-enable */
+}
+.tox .tox-menu {
+ background-color: #2b3b4e;
+ border: 1px solid #000000;
+ border-radius: 3px;
+ box-shadow: 0 4px 8px 0 rgba(42, 55, 70, 0.1);
+ display: inline-block;
+ overflow: hidden;
+ vertical-align: top;
+ z-index: 1150;
+}
+.tox .tox-menu.tox-collection.tox-collection--list {
+ padding: 0;
+}
+.tox .tox-menu.tox-collection.tox-collection--toolbar {
+ padding: 4px;
+}
+.tox .tox-menu.tox-collection.tox-collection--grid {
+ padding: 4px;
+}
+.tox .tox-menu__label h1,
+.tox .tox-menu__label h2,
+.tox .tox-menu__label h3,
+.tox .tox-menu__label h4,
+.tox .tox-menu__label h5,
+.tox .tox-menu__label h6,
+.tox .tox-menu__label p,
+.tox .tox-menu__label blockquote,
+.tox .tox-menu__label code {
+ margin: 0;
+}
+.tox .tox-menubar {
+ background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;
+ background-color: #222f3e;
+ display: flex;
+ flex: 0 0 auto;
+ flex-shrink: 0;
+ flex-wrap: wrap;
+ padding: 0 4px 0 4px;
+}
+.tox.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar {
+ border-top: 1px solid #000000;
+}
+/* Deprecated. Remove in next major release */
+.tox .tox-mbtn {
+ align-items: center;
+ background: transparent;
+ border: 0;
+ border-radius: 3px;
+ box-shadow: none;
+ color: #fff;
+ display: flex;
+ flex: 0 0 auto;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ height: 34px;
+ justify-content: center;
+ margin: 2px 0 3px 0;
+ outline: none;
+ overflow: hidden;
+ padding: 0 4px;
+ text-transform: none;
+ width: auto;
+}
+.tox .tox-mbtn[disabled] {
+ background-color: transparent;
+ border: 0;
+ box-shadow: none;
+ color: rgba(255, 255, 255, 0.5);
+ cursor: not-allowed;
+}
+.tox .tox-mbtn:focus:not(:disabled) {
+ background: #4a5562;
+ border: 0;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-mbtn--active {
+ background: #757d87;
+ border: 0;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active) {
+ background: #4a5562;
+ border: 0;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-mbtn__select-label {
+ cursor: default;
+ font-weight: normal;
+ margin: 0 4px;
+}
+.tox .tox-mbtn[disabled] .tox-mbtn__select-label {
+ cursor: not-allowed;
+}
+.tox .tox-mbtn__select-chevron {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ width: 16px;
+ display: none;
+}
+.tox .tox-notification {
+ border-radius: 3px;
+ border-style: solid;
+ border-width: 1px;
+ box-shadow: none;
+ box-sizing: border-box;
+ display: -ms-grid;
+ display: grid;
+ font-size: 14px;
+ font-weight: normal;
+ -ms-grid-columns: minmax(40px, 1fr) auto minmax(40px, 1fr);
+ grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr);
+ margin-top: 4px;
+ opacity: 0;
+ padding: 4px;
+ transition: transform 100ms ease-in, opacity 150ms ease-in;
+}
+.tox .tox-notification p {
+ font-size: 14px;
+ font-weight: normal;
+}
+.tox .tox-notification a {
+ cursor: pointer;
+ text-decoration: underline;
+}
+.tox .tox-notification--in {
+ opacity: 1;
+}
+.tox .tox-notification--success {
+ background-color: #e4eeda;
+ border-color: #d7e6c8;
+ color: #fff;
+}
+.tox .tox-notification--success p {
+ color: #fff;
+}
+.tox .tox-notification--success a {
+ color: #547831;
+}
+.tox .tox-notification--success svg {
+ fill: #fff;
+}
+.tox .tox-notification--error {
+ background-color: #f8dede;
+ border-color: #f2bfbf;
+ color: #fff;
+}
+.tox .tox-notification--error p {
+ color: #fff;
+}
+.tox .tox-notification--error a {
+ color: #c00;
+}
+.tox .tox-notification--error svg {
+ fill: #fff;
+}
+.tox .tox-notification--warn,
+.tox .tox-notification--warning {
+ background-color: #fffaea;
+ border-color: #ffe89d;
+ color: #fff;
+}
+.tox .tox-notification--warn p,
+.tox .tox-notification--warning p {
+ color: #fff;
+}
+.tox .tox-notification--warn a,
+.tox .tox-notification--warning a {
+ color: #fff;
+}
+.tox .tox-notification--warn svg,
+.tox .tox-notification--warning svg {
+ fill: #fff;
+}
+.tox .tox-notification--info {
+ background-color: #d9edf7;
+ border-color: #779ecb;
+ color: #fff;
+}
+.tox .tox-notification--info p {
+ color: #fff;
+}
+.tox .tox-notification--info a {
+ color: #fff;
+}
+.tox .tox-notification--info svg {
+ fill: #fff;
+}
+.tox .tox-notification__body {
+ -ms-grid-row-align: center;
+ align-self: center;
+ color: #fff;
+ font-size: 14px;
+ -ms-grid-column-span: 1;
+ grid-column-end: 3;
+ -ms-grid-column: 2;
+ grid-column-start: 2;
+ -ms-grid-row-span: 1;
+ grid-row-end: 2;
+ -ms-grid-row: 1;
+ grid-row-start: 1;
+ text-align: center;
+ white-space: normal;
+ word-break: break-all;
+ word-break: break-word;
+}
+.tox .tox-notification__body > * {
+ margin: 0;
+}
+.tox .tox-notification__body > * + * {
+ margin-top: 1rem;
+}
+.tox .tox-notification__icon {
+ -ms-grid-row-align: center;
+ align-self: center;
+ -ms-grid-column-span: 1;
+ grid-column-end: 2;
+ -ms-grid-column: 1;
+ grid-column-start: 1;
+ -ms-grid-row-span: 1;
+ grid-row-end: 2;
+ -ms-grid-row: 1;
+ grid-row-start: 1;
+ -ms-grid-column-align: end;
+ justify-self: end;
+}
+.tox .tox-notification__icon svg {
+ display: block;
+}
+.tox .tox-notification__dismiss {
+ -ms-grid-row-align: start;
+ align-self: start;
+ -ms-grid-column-span: 1;
+ grid-column-end: 4;
+ -ms-grid-column: 3;
+ grid-column-start: 3;
+ -ms-grid-row-span: 1;
+ grid-row-end: 2;
+ -ms-grid-row: 1;
+ grid-row-start: 1;
+ -ms-grid-column-align: end;
+ justify-self: end;
+}
+.tox .tox-notification .tox-progress-bar {
+ -ms-grid-column-span: 3;
+ grid-column-end: 4;
+ -ms-grid-column: 1;
+ grid-column-start: 1;
+ -ms-grid-row-span: 1;
+ grid-row-end: 3;
+ -ms-grid-row: 2;
+ grid-row-start: 2;
+ -ms-grid-column-align: center;
+ justify-self: center;
+}
+.tox .tox-pop {
+ display: inline-block;
+ position: relative;
+}
+.tox .tox-pop--resizing {
+ transition: width 0.1s ease;
+}
+.tox .tox-pop--resizing .tox-toolbar,
+.tox .tox-pop--resizing .tox-toolbar__group {
+ flex-wrap: nowrap;
+}
+.tox .tox-pop--transition {
+ transition: 0.15s ease;
+ transition-property: left, right, top, bottom;
+}
+.tox .tox-pop--transition::before,
+.tox .tox-pop--transition::after {
+ transition: all 0.15s, visibility 0s, opacity 0.075s ease 0.075s;
+}
+.tox .tox-pop__dialog {
+ background-color: #222f3e;
+ border: 1px solid #000000;
+ border-radius: 3px;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ min-width: 0;
+ overflow: hidden;
+}
+.tox .tox-pop__dialog > *:not(.tox-toolbar) {
+ margin: 4px 4px 4px 8px;
+}
+.tox .tox-pop__dialog .tox-toolbar {
+ background-color: transparent;
+ margin-bottom: -1px;
+}
+.tox .tox-pop::before,
+.tox .tox-pop::after {
+ border-style: solid;
+ content: '';
+ display: block;
+ height: 0;
+ opacity: 1;
+ position: absolute;
+ width: 0;
+}
+.tox .tox-pop.tox-pop--inset::before,
+.tox .tox-pop.tox-pop--inset::after {
+ opacity: 0;
+ transition: all 0s 0.15s, visibility 0s, opacity 0.075s ease;
+}
+.tox .tox-pop.tox-pop--bottom::before,
+.tox .tox-pop.tox-pop--bottom::after {
+ left: 50%;
+ top: 100%;
+}
+.tox .tox-pop.tox-pop--bottom::after {
+ border-color: #222f3e transparent transparent transparent;
+ border-width: 8px;
+ margin-left: -8px;
+ margin-top: -1px;
+}
+.tox .tox-pop.tox-pop--bottom::before {
+ border-color: #000000 transparent transparent transparent;
+ border-width: 9px;
+ margin-left: -9px;
+}
+.tox .tox-pop.tox-pop--top::before,
+.tox .tox-pop.tox-pop--top::after {
+ left: 50%;
+ top: 0;
+ transform: translateY(-100%);
+}
+.tox .tox-pop.tox-pop--top::after {
+ border-color: transparent transparent #222f3e transparent;
+ border-width: 8px;
+ margin-left: -8px;
+ margin-top: 1px;
+}
+.tox .tox-pop.tox-pop--top::before {
+ border-color: transparent transparent #000000 transparent;
+ border-width: 9px;
+ margin-left: -9px;
+}
+.tox .tox-pop.tox-pop--left::before,
+.tox .tox-pop.tox-pop--left::after {
+ left: 0;
+ top: calc(50% - 1px);
+ transform: translateY(-50%);
+}
+.tox .tox-pop.tox-pop--left::after {
+ border-color: transparent #222f3e transparent transparent;
+ border-width: 8px;
+ margin-left: -15px;
+}
+.tox .tox-pop.tox-pop--left::before {
+ border-color: transparent #000000 transparent transparent;
+ border-width: 10px;
+ margin-left: -19px;
+}
+.tox .tox-pop.tox-pop--right::before,
+.tox .tox-pop.tox-pop--right::after {
+ left: 100%;
+ top: calc(50% + 1px);
+ transform: translateY(-50%);
+}
+.tox .tox-pop.tox-pop--right::after {
+ border-color: transparent transparent transparent #222f3e;
+ border-width: 8px;
+ margin-left: -1px;
+}
+.tox .tox-pop.tox-pop--right::before {
+ border-color: transparent transparent transparent #000000;
+ border-width: 10px;
+ margin-left: -1px;
+}
+.tox .tox-pop.tox-pop--align-left::before,
+.tox .tox-pop.tox-pop--align-left::after {
+ left: 20px;
+}
+.tox .tox-pop.tox-pop--align-right::before,
+.tox .tox-pop.tox-pop--align-right::after {
+ left: calc(100% - 20px);
+}
+.tox .tox-sidebar-wrap {
+ display: flex;
+ flex-direction: row;
+ flex-grow: 1;
+ -ms-flex-preferred-size: 0;
+ min-height: 0;
+}
+.tox .tox-sidebar {
+ background-color: #222f3e;
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-end;
+}
+.tox .tox-sidebar__slider {
+ display: flex;
+ overflow: hidden;
+}
+.tox .tox-sidebar__pane-container {
+ display: flex;
+}
+.tox .tox-sidebar__pane {
+ display: flex;
+}
+.tox .tox-sidebar--sliding-closed {
+ opacity: 0;
+}
+.tox .tox-sidebar--sliding-open {
+ opacity: 1;
+}
+.tox .tox-sidebar--sliding-growing,
+.tox .tox-sidebar--sliding-shrinking {
+ transition: width 0.5s ease, opacity 0.5s ease;
+}
+.tox .tox-selector {
+ background-color: #4099ff;
+ border-color: #4099ff;
+ border-style: solid;
+ border-width: 1px;
+ box-sizing: border-box;
+ display: inline-block;
+ height: 10px;
+ position: absolute;
+ width: 10px;
+}
+.tox.tox-platform-touch .tox-selector {
+ height: 12px;
+ width: 12px;
+}
+.tox .tox-slider {
+ align-items: center;
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+ height: 24px;
+ justify-content: center;
+ position: relative;
+}
+.tox .tox-slider__rail {
+ background-color: transparent;
+ border: 1px solid #000000;
+ border-radius: 3px;
+ height: 10px;
+ min-width: 120px;
+ width: 100%;
+}
+.tox .tox-slider__handle {
+ background-color: #207ab7;
+ border: 2px solid #185d8c;
+ border-radius: 3px;
+ box-shadow: none;
+ height: 24px;
+ left: 50%;
+ position: absolute;
+ top: 50%;
+ transform: translateX(-50%) translateY(-50%);
+ width: 14px;
+}
+.tox .tox-source-code {
+ overflow: auto;
+}
+.tox .tox-spinner {
+ display: flex;
+}
+.tox .tox-spinner > div {
+ animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both;
+ background-color: rgba(255, 255, 255, 0.5);
+ border-radius: 100%;
+ height: 8px;
+ width: 8px;
+}
+.tox .tox-spinner > div:nth-child(1) {
+ animation-delay: -0.32s;
+}
+.tox .tox-spinner > div:nth-child(2) {
+ animation-delay: -0.16s;
+}
+@keyframes tam-bouncing-dots {
+ 0%,
+ 80%,
+ 100% {
+ transform: scale(0);
+ }
+ 40% {
+ transform: scale(1);
+ }
+}
+.tox:not([dir=rtl]) .tox-spinner > div:not(:first-child) {
+ margin-left: 4px;
+}
+.tox[dir=rtl] .tox-spinner > div:not(:first-child) {
+ margin-right: 4px;
+}
+.tox .tox-statusbar {
+ align-items: center;
+ background-color: #222f3e;
+ border-top: 1px solid #000000;
+ color: #fff;
+ display: flex;
+ flex: 0 0 auto;
+ font-size: 12px;
+ font-weight: normal;
+ height: 18px;
+ overflow: hidden;
+ padding: 0 8px;
+ position: relative;
+ text-transform: uppercase;
+}
+.tox .tox-statusbar__text-container {
+ display: flex;
+ flex: 1 1 auto;
+ justify-content: flex-end;
+ overflow: hidden;
+}
+.tox .tox-statusbar__path {
+ display: flex;
+ flex: 1 1 auto;
+ margin-right: auto;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.tox .tox-statusbar__path > * {
+ display: inline;
+ white-space: nowrap;
+}
+.tox .tox-statusbar__wordcount {
+ flex: 0 0 auto;
+ margin-left: 1ch;
+}
+.tox .tox-statusbar a,
+.tox .tox-statusbar__path-item,
+.tox .tox-statusbar__wordcount {
+ color: #fff;
+ text-decoration: none;
+}
+.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),
+.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),
+.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]),
+.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),
+.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),
+.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) {
+ cursor: pointer;
+ text-decoration: underline;
+}
+.tox .tox-statusbar__resize-handle {
+ align-items: flex-end;
+ align-self: stretch;
+ cursor: nwse-resize;
+ display: flex;
+ flex: 0 0 auto;
+ justify-content: flex-end;
+ margin-left: auto;
+ margin-right: -8px;
+ padding-left: 1ch;
+}
+.tox .tox-statusbar__resize-handle svg {
+ display: block;
+ fill: #fff;
+}
+.tox .tox-statusbar__resize-handle:focus svg {
+ background-color: #4a5562;
+ border-radius: 1px;
+ box-shadow: 0 0 0 2px #4a5562;
+}
+.tox:not([dir=rtl]) .tox-statusbar__path > * {
+ margin-right: 4px;
+}
+.tox:not([dir=rtl]) .tox-statusbar__branding {
+ margin-left: 1ch;
+}
+.tox[dir=rtl] .tox-statusbar {
+ flex-direction: row-reverse;
+}
+.tox[dir=rtl] .tox-statusbar__path > * {
+ margin-left: 4px;
+}
+.tox .tox-throbber {
+ z-index: 1299;
+}
+.tox .tox-throbber__busy-spinner {
+ align-items: center;
+ background-color: rgba(34, 47, 62, 0.6);
+ bottom: 0;
+ display: flex;
+ justify-content: center;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+.tox .tox-tbtn {
+ align-items: center;
+ background: transparent;
+ border: 0;
+ border-radius: 3px;
+ box-shadow: none;
+ color: #fff;
+ display: flex;
+ flex: 0 0 auto;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ height: 34px;
+ justify-content: center;
+ margin: 2px 0 3px 0;
+ outline: none;
+ overflow: hidden;
+ padding: 0;
+ text-transform: none;
+ width: 34px;
+}
+.tox .tox-tbtn svg {
+ display: block;
+ fill: #fff;
+}
+.tox .tox-tbtn.tox-tbtn-more {
+ padding-left: 5px;
+ padding-right: 5px;
+ width: inherit;
+}
+.tox .tox-tbtn:focus {
+ background: #4a5562;
+ border: 0;
+ box-shadow: none;
+}
+.tox .tox-tbtn:hover {
+ background: #4a5562;
+ border: 0;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-tbtn:hover svg {
+ fill: #fff;
+}
+.tox .tox-tbtn:active {
+ background: #757d87;
+ border: 0;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-tbtn:active svg {
+ fill: #fff;
+}
+.tox .tox-tbtn--disabled,
+.tox .tox-tbtn--disabled:hover,
+.tox .tox-tbtn:disabled,
+.tox .tox-tbtn:disabled:hover {
+ background: transparent;
+ border: 0;
+ box-shadow: none;
+ color: rgba(255, 255, 255, 0.5);
+ cursor: not-allowed;
+}
+.tox .tox-tbtn--disabled svg,
+.tox .tox-tbtn--disabled:hover svg,
+.tox .tox-tbtn:disabled svg,
+.tox .tox-tbtn:disabled:hover svg {
+ /* stylelint-disable-line no-descending-specificity */
+ fill: rgba(255, 255, 255, 0.5);
+}
+.tox .tox-tbtn--enabled,
+.tox .tox-tbtn--enabled:hover {
+ background: #757d87;
+ border: 0;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-tbtn--enabled > *,
+.tox .tox-tbtn--enabled:hover > * {
+ transform: none;
+}
+.tox .tox-tbtn--enabled svg,
+.tox .tox-tbtn--enabled:hover svg {
+ /* stylelint-disable-line no-descending-specificity */
+ fill: #fff;
+}
+.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) {
+ color: #fff;
+}
+.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg {
+ fill: #fff;
+}
+.tox .tox-tbtn:active > * {
+ transform: none;
+}
+.tox .tox-tbtn--md {
+ height: 51px;
+ width: 51px;
+}
+.tox .tox-tbtn--lg {
+ flex-direction: column;
+ height: 68px;
+ width: 68px;
+}
+.tox .tox-tbtn--return {
+ -ms-grid-row-align: stretch;
+ align-self: stretch;
+ height: unset;
+ width: 16px;
+}
+.tox .tox-tbtn--labeled {
+ padding: 0 4px;
+ width: unset;
+}
+.tox .tox-tbtn__vlabel {
+ display: block;
+ font-size: 10px;
+ font-weight: normal;
+ letter-spacing: -0.025em;
+ margin-bottom: 4px;
+ white-space: nowrap;
+}
+.tox .tox-tbtn--select {
+ margin: 2px 0 3px 0;
+ padding: 0 4px;
+ width: auto;
+}
+.tox .tox-tbtn__select-label {
+ cursor: default;
+ font-weight: normal;
+ margin: 0 4px;
+}
+.tox .tox-tbtn__select-chevron {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ width: 16px;
+}
+.tox .tox-tbtn__select-chevron svg {
+ fill: rgba(255, 255, 255, 0.5);
+}
+.tox .tox-tbtn--bespoke .tox-tbtn__select-label {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ width: 7em;
+}
+.tox .tox-split-button {
+ border: 0;
+ border-radius: 3px;
+ box-sizing: border-box;
+ display: flex;
+ margin: 2px 0 3px 0;
+ overflow: hidden;
+}
+.tox .tox-split-button:hover {
+ box-shadow: 0 0 0 1px #4a5562 inset;
+}
+.tox .tox-split-button:focus {
+ background: #4a5562;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-split-button > * {
+ border-radius: 0;
+}
+.tox .tox-split-button__chevron {
+ width: 16px;
+}
+.tox .tox-split-button__chevron svg {
+ fill: rgba(255, 255, 255, 0.5);
+}
+.tox .tox-split-button .tox-tbtn {
+ margin: 0;
+}
+.tox.tox-platform-touch .tox-split-button .tox-tbtn:first-child {
+ width: 30px;
+}
+.tox.tox-platform-touch .tox-split-button__chevron {
+ width: 20px;
+}
+.tox .tox-split-button.tox-tbtn--disabled:hover,
+.tox .tox-split-button.tox-tbtn--disabled:focus,
+.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,
+.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus {
+ background: transparent;
+ box-shadow: none;
+ color: rgba(255, 255, 255, 0.5);
+}
+.tox .tox-toolbar-overlord {
+ background-color: #222f3e;
+}
+.tox .tox-toolbar,
+.tox .tox-toolbar__primary,
+.tox .tox-toolbar__overflow {
+ background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;
+ background-color: #222f3e;
+ display: flex;
+ flex: 0 0 auto;
+ flex-shrink: 0;
+ flex-wrap: wrap;
+ padding: 0 0;
+}
+.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed {
+ height: 0;
+ opacity: 0;
+ padding-bottom: 0;
+ padding-top: 0;
+ visibility: hidden;
+}
+.tox .tox-toolbar__overflow--growing {
+ transition: height 0.3s ease, opacity 0.2s linear 0.1s;
+}
+.tox .tox-toolbar__overflow--shrinking {
+ transition: opacity 0.3s ease, height 0.2s linear 0.1s, visibility 0s linear 0.3s;
+}
+.tox .tox-menubar + .tox-toolbar,
+.tox .tox-menubar + .tox-toolbar-overlord .tox-toolbar__primary {
+ border-top: 1px solid #000000;
+ margin-top: -1px;
+}
+.tox .tox-toolbar--scrolling {
+ flex-wrap: nowrap;
+ overflow-x: auto;
+}
+.tox .tox-pop .tox-toolbar {
+ border-width: 0;
+}
+.tox .tox-toolbar--no-divider {
+ background-image: none;
+}
+.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child,
+.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary {
+ border-top: 1px solid #000000;
+}
+.tox.tox-tinymce-aux .tox-toolbar__overflow {
+ background-color: #222f3e;
+ border: 1px solid #000000;
+ border-radius: 3px;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+}
+.tox .tox-toolbar__group {
+ align-items: center;
+ display: flex;
+ flex-wrap: wrap;
+ margin: 0 0;
+ padding: 0 4px 0 4px;
+}
+.tox .tox-toolbar__group--pull-right {
+ margin-left: auto;
+}
+.tox .tox-toolbar--scrolling .tox-toolbar__group {
+ flex-shrink: 0;
+ flex-wrap: nowrap;
+}
+.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) {
+ border-right: 1px solid #000000;
+}
+.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) {
+ border-left: 1px solid #000000;
+}
+.tox .tox-tooltip {
+ display: inline-block;
+ padding: 8px;
+ position: relative;
+}
+.tox .tox-tooltip__body {
+ background-color: #3d546f;
+ border-radius: 3px;
+ box-shadow: 0 2px 4px rgba(42, 55, 70, 0.3);
+ color: rgba(255, 255, 255, 0.75);
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ padding: 4px 8px;
+ text-transform: none;
+}
+.tox .tox-tooltip__arrow {
+ position: absolute;
+}
+.tox .tox-tooltip--down .tox-tooltip__arrow {
+ border-left: 8px solid transparent;
+ border-right: 8px solid transparent;
+ border-top: 8px solid #3d546f;
+ bottom: 0;
+ left: 50%;
+ position: absolute;
+ transform: translateX(-50%);
+}
+.tox .tox-tooltip--up .tox-tooltip__arrow {
+ border-bottom: 8px solid #3d546f;
+ border-left: 8px solid transparent;
+ border-right: 8px solid transparent;
+ left: 50%;
+ position: absolute;
+ top: 0;
+ transform: translateX(-50%);
+}
+.tox .tox-tooltip--right .tox-tooltip__arrow {
+ border-bottom: 8px solid transparent;
+ border-left: 8px solid #3d546f;
+ border-top: 8px solid transparent;
+ position: absolute;
+ right: 0;
+ top: 50%;
+ transform: translateY(-50%);
+}
+.tox .tox-tooltip--left .tox-tooltip__arrow {
+ border-bottom: 8px solid transparent;
+ border-right: 8px solid #3d546f;
+ border-top: 8px solid transparent;
+ left: 0;
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+}
+.tox .tox-well {
+ border: 1px solid #000000;
+ border-radius: 3px;
+ padding: 8px;
+ width: 100%;
+}
+.tox .tox-well > *:first-child {
+ margin-top: 0;
+}
+.tox .tox-well > *:last-child {
+ margin-bottom: 0;
+}
+.tox .tox-well > *:only-child {
+ margin: 0;
+}
+.tox .tox-custom-editor {
+ border: 1px solid #000000;
+ border-radius: 3px;
+ display: flex;
+ flex: 1;
+ position: relative;
+}
+/* stylelint-disable */
+.tox {
+ /* stylelint-enable */
+}
+.tox .tox-dialog-loading::before {
+ background-color: rgba(0, 0, 0, 0.5);
+ content: "";
+ height: 100%;
+ position: absolute;
+ width: 100%;
+ z-index: 1000;
+}
+.tox .tox-tab {
+ cursor: pointer;
+}
+.tox .tox-dialog__content-js {
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-dialog__body-content .tox-collection {
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-image-tools-edit-panel {
+ height: 60px;
+}
+.tox .tox-image-tools__sidebar {
+ height: 60px;
+}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.min.css b/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.min.css
new file mode 100644
index 00000000..e71f6f01
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tox{box-shadow:none;box-sizing:content-box;color:#2a3746;cursor:auto;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce{border:1px solid #000;border-radius:0;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;overflow:hidden;position:relative;visibility:inherit!important}.tox-tinymce-inline{border:none;box-shadow:none}.tox-tinymce-inline .tox-editor-header{background-color:transparent;border:1px solid #000;border-radius:0;box-shadow:none}.tox-tinymce-aux{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;z-index:1300}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description{align-items:stretch;border:1px solid #000;border-radius:3px;display:flex;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>:last-child:not(:only-child){border-color:#000;border-style:solid}.tox .accessibility-issue__repair{margin-top:16px}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:rgba(32,122,183,.5);border-color:#207ab7;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description>:last-child{border-color:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a .tox-icon{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:rgba(255,165,0,.5);border-color:rgba(255,165,0,.8);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description>:last-child{border-color:rgba(255,165,0,.8)}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn a .tox-icon{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:rgba(204,0,0,.5);border-color:rgba(204,0,0,.8);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description>:last-child{border-color:rgba(204,0,0,.8)}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue--error a .tox-icon{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.5);border-color:rgba(120,171,70,.8);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{border-color:rgba(120,171,70,.8)}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue--success a .tox-icon{color:#fff}.tox .tox-dialog__body-content .accessibility-issue__header h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:4px 4px 4px 8px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description>:last-child{border-left-width:1px;padding-left:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description>:last-child{border-right-width:1px;padding-right:4px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{background-color:#207ab7;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#207ab7;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;line-height:24px;margin:0;outline:0;padding:4px 16px;text-align:center;text-decoration:none;text-transform:none;white-space:nowrap}.tox .tox-button[disabled]{background-color:#207ab7;background-image:none;border-color:#207ab7;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:hover:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:active:not(:disabled){background-color:#185d8c;background-image:none;border-color:#185d8c;box-shadow:none;color:#fff}.tox .tox-button--secondary{background-color:#3d546f;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#3d546f;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;color:#fff;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:#3d546f;background-image:none;border-color:#3d546f;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-button--secondary:focus:not(:disabled){background-color:#34485f;background-image:none;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--secondary:hover:not(:disabled){background-color:#34485f;background-image:none;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--secondary:active:not(:disabled){background-color:#2b3b4e;background-image:none;border-color:#2b3b4e;box-shadow:none;color:#fff}.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding:4px}.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display:block;fill:currentColor}.tox .tox-button-link{background:0;border:none;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;white-space:nowrap}.tox .tox-button-link--sm{font-size:14px}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:#fff}.tox .tox-button--naked[disabled]{background-color:#3d546f;border-color:#3d546f;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-button--naked:hover:not(:disabled){background-color:#34485f;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--naked:focus:not(:disabled){background-color:#34485f;border-color:#34485f;box-shadow:none;color:#fff}.tox .tox-button--naked:active:not(:disabled){background-color:#2b3b4e;border-color:#2b3b4e;box-shadow:none;color:#fff}.tox .tox-button--naked .tox-icon svg{fill:currentColor}.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color:#fff}.tox .tox-checkbox{align-items:center;border-radius:3px;cursor:pointer;display:flex;height:36px;min-width:36px}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{align-items:center;border-radius:3px;box-shadow:0 0 0 2px transparent;box-sizing:content-box;display:flex;height:24px;justify-content:center;padding:calc(4px - 1px);width:24px}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:rgba(255,255,255,.2)}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:#207ab7}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:#207ab7}.tox .tox-checkbox--disabled{color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:rgba(255,255,255,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:rgba(255,255,255,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:rgba(255,255,255,.5)}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{border-radius:3px;box-shadow:inset 0 0 0 1px #207ab7;padding:calc(4px - 1px)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:4px}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:4px}.tox[dir=rtl] .tox-checkbox__label{margin-right:4px}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:4px}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#1a1a1a;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#333;color:#fff;cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;color:#fff;cursor:pointer;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled{background-color:#2b3b4e;color:#fff}.tox .tox-collection--list .tox-collection__item--active{background-color:#4a5562}.tox .tox-collection--toolbar .tox-collection__item--enabled{background-color:#757d87;color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active{background-color:#4a5562}.tox .tox-collection--grid .tox-collection__item--enabled{background-color:#757d87;color:#fff}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#4a5562;color:#fff}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#fff}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;-ms-flex-preferred-size:auto;font-size:14px;font-style:normal;font-weight:400;line-height:24px;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:rgba(255,255,255,.5);display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:#fff}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(255,255,255,.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#2b3b4e;border:1px solid #1a1a1a;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:34px;margin:2px 0 3px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{-ms-grid-row-align:center;align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{-ms-grid-row-align:center;align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid #000}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid #000}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:2px 0 3px 4px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px 0}.tox .tox-swatches__row{display:flex}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#4a5562}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment-thread{background:#2b3b4e;position:relative}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment{background:#2b3b4e;border:1px solid #000;border-radius:3px;box-shadow:0 4px 8px 0 rgba(42,55,70,.1);padding:8px 8px 16px 8px;position:relative}.tox .tox-comment__header{align-items:center;color:#fff;display:flex;justify-content:space-between}.tox .tox-comment__date{color:rgba(255,255,255,.5);font-size:12px}.tox .tox-comment__body{color:#fff;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(255,255,255,.5);font-size:14px;font-style:normal}.tox .tox-comment__body p{margin:0}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-comment-thread__overlay::after{background:#2b3b4e;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:16px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(43,59,78,0),#2b3b4e);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#2b3b4e;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__loading-text{align-items:center;color:#fff;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#2b3b4e;box-shadow:0 0 8px 8px #2b3b4e;color:#fff;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__busy-spinner{align-items:center;background-color:#2b3b4e;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto}.tox .tox-conversations{margin:8px}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(255,255,255,.5)}.tox .tox-user__name{color:rgba(255,255,255,.5);font-size:12px;font-style:normal;font-weight:700;text-transform:uppercase}.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(34,47,62,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#222f3e}.tox .tox-dialog{background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:0 16px 16px -10px rgba(42,55,70,.15),0 0 40px 1px rgba(42,55,70,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#2b3b4e;border-bottom:none;color:#fff;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#fff;display:flex;flex:1;-ms-flex-preferred-size:auto;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;padding:16px 16px}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(255,255,255,.5);display:inline-block;font-size:14px;line-height:1.3;margin-bottom:8px;text-decoration:none;white-space:nowrap}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(32,122,183,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #207ab7;color:#207ab7}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto;max-height:650px;overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#207ab7;cursor:pointer;text-decoration:none}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#185d8c;text-decoration:none}.tox .tox-dialog__body-content a:active{color:#185d8c;text-decoration:none}.tox .tox-dialog__body-content svg{fill:#fff}.tox .tox-dialog__body-content ul{display:block;list-style-type:disc;margin-bottom:16px;-webkit-margin-end:0;margin-inline-end:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-padding-start:2.5rem;padding-inline-start:2.5rem}.tox .tox-dialog__body-content .tox-form__group h1{color:#fff;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#fff;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#2b3b4e;border-top:1px solid #000;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(34,47,62,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #000}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}.tox.tox-platform-ie .tox-dialog-wrap{position:-ms-device-fixed}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #000;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(255,255,255,.5);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;-ms-flex-preferred-size:auto;overflow:hidden;position:relative}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;-ms-flex-preferred-size:auto;height:100%;position:absolute;width:100%}.tox.tox-inline-edit-area{border:1px dotted #000}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{z-index:1}.tox:not(.tox-tinymce-inline) .tox-editor-header{box-shadow:none;transition:box-shadow .5s}.tox.tox-tinymce--toolbar-bottom .tox-editor-header,.tox.tox-tinymce-inline .tox-editor-header{margin-bottom:-1px}.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:transparent;box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(42,55,70,.2);border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#207ab7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(255,255,255,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(255,255,255,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #2b3b4e;border-radius:3px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(255,255,255,.5);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-textarea{flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textfield,.tox .tox-toolbar-textfield{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled]{background-color:#222f3e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea:focus,.tox .tox-textfield:focus{background-color:#2b3b4e;border-color:#207ab7;box-shadow:none;outline:0}.tox .tox-toolbar-textfield{border-width:0;margin-bottom:3px;margin-top:2px;max-width:250px}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#207ab7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#fff}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#fff}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#2b3b4e;border-color:#207ab7;box-shadow:none;outline:0}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea{-webkit-appearance:textarea;-moz-appearance:textarea;appearance:textarea;white-space:pre-wrap}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-image-tools{width:100%}.tox .tox-image-tools__toolbar{align-items:center;display:flex;justify-content:center}.tox .tox-image-tools__image{background-color:#666;height:380px;overflow:auto;position:relative;width:100%}.tox .tox-image-tools__image,.tox .tox-image-tools__image+.tox-image-tools__toolbar{margin-top:8px}.tox .tox-image-tools__image-bg{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools__toolbar>.tox-spacer{flex:1;-ms-flex-preferred-size:auto}.tox .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-left:8px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-left:32px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-left:32px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-right:8px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-right:32px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-right:32px}.tox .tox-insert-table-picker{display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:#000;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px 0}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(32,122,183,.5);border-color:rgba(32,122,183,.5)}.tox .tox-insert-table-picker__label{color:#fff;display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox .tox-menu{background-color:#2b3b4e;border:1px solid #000;border-radius:3px;box-shadow:0 4px 8px 0 rgba(42,55,70,.1);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:4px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:4px}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;background-color:#222f3e;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 4px 0 4px}.tox.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar{border-top:1px solid #000}.tox .tox-mbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:transparent;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn--active{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:-ms-grid;display:grid;font-size:14px;font-weight:400;-ms-grid-columns:minmax(40px,1fr) auto minmax(40px,1fr);grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification a{cursor:pointer;text-decoration:underline}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#e4eeda;border-color:#d7e6c8;color:#fff}.tox .tox-notification--success p{color:#fff}.tox .tox-notification--success a{color:#547831}.tox .tox-notification--success svg{fill:#fff}.tox .tox-notification--error{background-color:#f8dede;border-color:#f2bfbf;color:#fff}.tox .tox-notification--error p{color:#fff}.tox .tox-notification--error a{color:#c00}.tox .tox-notification--error svg{fill:#fff}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#fffaea;border-color:#ffe89d;color:#fff}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#fff}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#fff}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#fff}.tox .tox-notification--info{background-color:#d9edf7;border-color:#779ecb;color:#fff}.tox .tox-notification--info p{color:#fff}.tox .tox-notification--info a{color:#fff}.tox .tox-notification--info svg{fill:#fff}.tox .tox-notification__body{-ms-grid-row-align:center;align-self:center;color:#fff;font-size:14px;-ms-grid-column-span:1;grid-column-end:3;-ms-grid-column:2;grid-column-start:2;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{-ms-grid-row-align:center;align-self:center;-ms-grid-column-span:1;grid-column-end:2;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{-ms-grid-row-align:start;align-self:start;-ms-grid-column-span:1;grid-column-end:4;-ms-grid-column:3;grid-column-start:3;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification .tox-progress-bar{-ms-grid-column-span:3;grid-column-end:4;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:3;-ms-grid-row:2;grid-row-start:2;-ms-grid-column-align:center;justify-self:center}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#222f3e;border:1px solid #000;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#222f3e transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#000 transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #222f3e transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #000 transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #222f3e transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #000 transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #222f3e;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #000;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;-ms-flex-preferred-size:0;min-height:0}.tox .tox-sidebar{background-color:#222f3e;display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-slider{align-items:center;display:flex;flex:1;-ms-flex-preferred-size:auto;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #000;border-radius:3px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#207ab7;border:2px solid #185d8c;border-radius:3px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(255,255,255,.5);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:nth-child(1){animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-statusbar{align-items:center;background-color:#222f3e;border-top:1px solid #000;color:#fff;display:flex;flex:0 0 auto;font-size:12px;font-weight:400;height:18px;overflow:hidden;padding:0 8px;position:relative;text-transform:uppercase}.tox .tox-statusbar__text-container{display:flex;flex:1 1 auto;justify-content:flex-end;overflow:hidden}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:#fff;text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){cursor:pointer;text-decoration:underline}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;cursor:nwse-resize;display:flex;flex:0 0 auto;justify-content:flex-end;margin-left:auto;margin-right:-8px;padding-left:1ch}.tox .tox-statusbar__resize-handle svg{display:block;fill:#fff}.tox .tox-statusbar__resize-handle:focus svg{background-color:#4a5562;border-radius:1px;box-shadow:0 0 0 2px #4a5562}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:1ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(34,47,62,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-tbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0;text-transform:none;width:34px}.tox .tox-tbtn svg{display:block;fill:#fff}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#4a5562;border:0;box-shadow:none}.tox .tox-tbtn:hover{background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:hover svg{fill:#fff}.tox .tox-tbtn:active{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:active svg{fill:#fff}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(255,255,255,.5)}.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:hover{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:hover svg{fill:#fff}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#fff}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#fff}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:51px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:68px;width:68px}.tox .tox-tbtn--return{-ms-grid-row-align:stretch;align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tbtn--select{margin:2px 0 3px 0;padding:0 4px;width:auto}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(255,255,255,.5)}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-split-button{border:0;border-radius:3px;box-sizing:border-box;display:flex;margin:2px 0 3px 0;overflow:hidden}.tox .tox-split-button:hover{box-shadow:0 0 0 1px #4a5562 inset}.tox .tox-split-button:focus{background:#4a5562;box-shadow:none;color:#fff}.tox .tox-split-button>*{border-radius:0}.tox .tox-split-button__chevron{width:16px}.tox .tox-split-button__chevron svg{fill:rgba(255,255,255,.5)}.tox .tox-split-button .tox-tbtn{margin:0}.tox.tox-platform-touch .tox-split-button .tox-tbtn:first-child{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{background:0 0;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-toolbar-overlord{background-color:#222f3e}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;background-color:#222f3e;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord .tox-toolbar__primary{border-top:1px solid #000;margin-top:-1px}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary,.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child{border-top:1px solid #000}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#222f3e;border:1px solid #000;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15)}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 4px 0 4px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid #000}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid #000}.tox .tox-tooltip{display:inline-block;padding:8px;position:relative}.tox .tox-tooltip__body{background-color:#3d546f;border-radius:3px;box-shadow:0 2px 4px rgba(42,55,70,.3);color:rgba(255,255,255,.75);font-size:14px;font-style:normal;font-weight:400;padding:4px 8px;text-transform:none}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #3d546f;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #3d546f;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #3d546f;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #3d546f;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-well{border:1px solid #000;border-radius:3px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #000;border-radius:3px;display:flex;flex:1;position:relative}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-image-tools-edit-panel{height:60px}.tox .tox-image-tools__sidebar{height:60px}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.mobile.css b/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.mobile.css
new file mode 100644
index 00000000..875721a2
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.mobile.css
@@ -0,0 +1,673 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+/* RESET all the things! */
+.tinymce-mobile-outer-container {
+ all: initial;
+ display: block;
+}
+.tinymce-mobile-outer-container * {
+ border: 0;
+ box-sizing: initial;
+ cursor: inherit;
+ float: none;
+ line-height: 1;
+ margin: 0;
+ outline: 0;
+ padding: 0;
+ -webkit-tap-highlight-color: transparent;
+ /* TBIO-3691, stop the gray flicker on touch. */
+ text-shadow: none;
+ white-space: nowrap;
+}
+.tinymce-mobile-icon-arrow-back::before {
+ content: "\e5cd";
+}
+.tinymce-mobile-icon-image::before {
+ content: "\e412";
+}
+.tinymce-mobile-icon-cancel-circle::before {
+ content: "\e5c9";
+}
+.tinymce-mobile-icon-full-dot::before {
+ content: "\e061";
+}
+.tinymce-mobile-icon-align-center::before {
+ content: "\e234";
+}
+.tinymce-mobile-icon-align-left::before {
+ content: "\e236";
+}
+.tinymce-mobile-icon-align-right::before {
+ content: "\e237";
+}
+.tinymce-mobile-icon-bold::before {
+ content: "\e238";
+}
+.tinymce-mobile-icon-italic::before {
+ content: "\e23f";
+}
+.tinymce-mobile-icon-unordered-list::before {
+ content: "\e241";
+}
+.tinymce-mobile-icon-ordered-list::before {
+ content: "\e242";
+}
+.tinymce-mobile-icon-font-size::before {
+ content: "\e245";
+}
+.tinymce-mobile-icon-underline::before {
+ content: "\e249";
+}
+.tinymce-mobile-icon-link::before {
+ content: "\e157";
+}
+.tinymce-mobile-icon-unlink::before {
+ content: "\eca2";
+}
+.tinymce-mobile-icon-color::before {
+ content: "\e891";
+}
+.tinymce-mobile-icon-previous::before {
+ content: "\e314";
+}
+.tinymce-mobile-icon-next::before {
+ content: "\e315";
+}
+.tinymce-mobile-icon-large-font::before,
+.tinymce-mobile-icon-style-formats::before {
+ content: "\e264";
+}
+.tinymce-mobile-icon-undo::before {
+ content: "\e166";
+}
+.tinymce-mobile-icon-redo::before {
+ content: "\e15a";
+}
+.tinymce-mobile-icon-removeformat::before {
+ content: "\e239";
+}
+.tinymce-mobile-icon-small-font::before {
+ content: "\e906";
+}
+.tinymce-mobile-icon-readonly-back::before,
+.tinymce-mobile-format-matches::after {
+ content: "\e5ca";
+}
+.tinymce-mobile-icon-small-heading::before {
+ content: "small";
+}
+.tinymce-mobile-icon-large-heading::before {
+ content: "large";
+}
+.tinymce-mobile-icon-small-heading::before,
+.tinymce-mobile-icon-large-heading::before {
+ font-family: sans-serif;
+ font-size: 80%;
+}
+.tinymce-mobile-mask-edit-icon::before {
+ content: "\e254";
+}
+.tinymce-mobile-icon-back::before {
+ content: "\e5c4";
+}
+.tinymce-mobile-icon-heading::before {
+ /* TODO: Translate */
+ content: "Headings";
+ font-family: sans-serif;
+ font-size: 80%;
+ font-weight: bold;
+}
+.tinymce-mobile-icon-h1::before {
+ content: "H1";
+ font-weight: bold;
+}
+.tinymce-mobile-icon-h2::before {
+ content: "H2";
+ font-weight: bold;
+}
+.tinymce-mobile-icon-h3::before {
+ content: "H3";
+ font-weight: bold;
+}
+.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ background: rgba(51, 51, 51, 0.5);
+ height: 100%;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container {
+ align-items: center;
+ border-radius: 50%;
+ display: flex;
+ flex-direction: column;
+ font-family: sans-serif;
+ font-size: 1em;
+ justify-content: space-between;
+}
+.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ border-radius: 50%;
+ height: 2.1em;
+ width: 2.1em;
+}
+.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ flex-direction: column;
+ font-size: 1em;
+}
+@media only screen and (min-device-width:700px) {
+ .tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section {
+ font-size: 1.2em;
+ }
+}
+.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ border-radius: 50%;
+ height: 2.1em;
+ width: 2.1em;
+ background-color: white;
+ color: #207ab7;
+}
+.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before {
+ content: "\e900";
+ font-family: 'tinymce-mobile', sans-serif;
+}
+.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon {
+ z-index: 2;
+}
+.tinymce-mobile-android-container.tinymce-mobile-android-maximized {
+ background: #ffffff;
+ border: none;
+ bottom: 0;
+ display: flex;
+ flex-direction: column;
+ left: 0;
+ position: fixed;
+ right: 0;
+ top: 0;
+}
+.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized) {
+ position: relative;
+}
+.tinymce-mobile-android-container .tinymce-mobile-editor-socket {
+ display: flex;
+ flex-grow: 1;
+}
+.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe {
+ display: flex !important;
+ flex-grow: 1;
+ height: auto !important;
+}
+.tinymce-mobile-android-scroll-reload {
+ overflow: hidden;
+}
+:not(.tinymce-mobile-readonly-mode) > .tinymce-mobile-android-selection-context-toolbar {
+ margin-top: 23px;
+}
+.tinymce-mobile-toolstrip {
+ background: #fff;
+ display: flex;
+ flex: 0 0 auto;
+ z-index: 1;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar {
+ align-items: center;
+ background-color: #fff;
+ border-bottom: 1px solid #cccccc;
+ display: flex;
+ flex: 1;
+ height: 2.5em;
+ width: 100%;
+ /* Make it no larger than the toolstrip, so that it needs to scroll */
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group {
+ align-items: center;
+ display: flex;
+ height: 100%;
+ flex-shrink: 1;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group > div {
+ align-items: center;
+ display: flex;
+ height: 100%;
+ flex: 1;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container {
+ background: #f44336;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group {
+ flex-grow: 1;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item {
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button {
+ align-items: center;
+ display: flex;
+ height: 80%;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected {
+ background: #c8cbcf;
+ color: #cccccc;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type {
+ background: #207ab7;
+ color: #eceff1;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar {
+ /* Note, this file is imported inside .tinymce-mobile-context-toolbar, so that prefix is on everything here. */
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group {
+ align-items: center;
+ display: flex;
+ height: 100%;
+ flex: 1;
+ padding-bottom: 0.4em;
+ padding-top: 0.4em;
+ /* Make any buttons appearing on the left and right display in the centre (e.g. color edges) */
+ /* For widgets like the colour picker, use the whole height */
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog {
+ display: flex;
+ min-height: 1.5em;
+ overflow: hidden;
+ padding-left: 0;
+ padding-right: 0;
+ position: relative;
+ width: 100%;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain {
+ display: flex;
+ height: 100%;
+ transition: left cubic-bezier(0.4, 0, 1, 1) 0.15s;
+ width: 100%;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen {
+ display: flex;
+ flex: 0 0 auto;
+ justify-content: space-between;
+ width: 100%;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input {
+ font-family: Sans-serif;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container {
+ display: flex;
+ flex-grow: 1;
+ position: relative;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x {
+ -ms-grid-row-align: center;
+ align-self: center;
+ background: inherit;
+ border: none;
+ border-radius: 50%;
+ color: #888;
+ font-size: 0.6em;
+ font-weight: bold;
+ height: 100%;
+ padding-right: 2px;
+ position: absolute;
+ right: 0;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x {
+ display: none;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous,
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next {
+ align-items: center;
+ display: flex;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before,
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before {
+ align-items: center;
+ display: flex;
+ font-weight: bold;
+ height: 100%;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before,
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before {
+ visibility: hidden;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item {
+ color: #cccccc;
+ font-size: 10px;
+ line-height: 10px;
+ margin: 0 2px;
+ padding-top: 3px;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active {
+ color: #c8cbcf;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before {
+ margin-left: 0.5em;
+ margin-right: 0.9em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before {
+ margin-left: 0.9em;
+ margin-right: 0.5em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider {
+ display: flex;
+ flex: 1;
+ margin-left: 0;
+ margin-right: 0;
+ padding: 0.28em 0;
+ position: relative;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container {
+ align-items: center;
+ display: flex;
+ flex-grow: 1;
+ height: 100%;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line {
+ background: #cccccc;
+ display: flex;
+ flex: 1;
+ height: 0.2em;
+ margin-bottom: 0.3em;
+ margin-top: 0.3em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container {
+ padding-left: 2em;
+ padding-right: 2em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container {
+ align-items: center;
+ display: flex;
+ flex-grow: 1;
+ height: 100%;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient {
+ background: linear-gradient(to right, hsl(0, 100%, 50%) 0%, hsl(60, 100%, 50%) 17%, hsl(120, 100%, 50%) 33%, hsl(180, 100%, 50%) 50%, hsl(240, 100%, 50%) 67%, hsl(300, 100%, 50%) 83%, hsl(0, 100%, 50%) 100%);
+ display: flex;
+ flex: 1;
+ height: 0.2em;
+ margin-bottom: 0.3em;
+ margin-top: 0.3em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black {
+ /* Not part of theming */
+ background: black;
+ height: 0.2em;
+ margin-bottom: 0.3em;
+ margin-top: 0.3em;
+ width: 1.2em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white {
+ /* Not part of theming */
+ background: white;
+ height: 0.2em;
+ margin-bottom: 0.3em;
+ margin-top: 0.3em;
+ width: 1.2em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb {
+ /* vertically centering trick (margin: auto, top: 0, bottom: 0). On iOS and Safari, if you leave
+ * out these values, then it shows the thumb at the top of the spectrum. This is probably because it is
+ * absolutely positioned with only a left value, and not a top. Note, on Chrome it seems to be fine without
+ * this approach.
+ */
+ align-items: center;
+ background-clip: padding-box;
+ background-color: #455a64;
+ border: 0.5em solid rgba(136, 136, 136, 0);
+ border-radius: 3em;
+ bottom: 0;
+ color: #fff;
+ display: flex;
+ height: 0.5em;
+ justify-content: center;
+ left: -10px;
+ margin: auto;
+ position: absolute;
+ top: 0;
+ transition: border 120ms cubic-bezier(0.39, 0.58, 0.57, 1);
+ width: 0.5em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active {
+ border: 0.5em solid rgba(136, 136, 136, 0.39);
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group > div {
+ align-items: center;
+ display: flex;
+ height: 100%;
+ flex: 1;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper {
+ flex-direction: column;
+ justify-content: center;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item {
+ align-items: center;
+ display: flex;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog) {
+ height: 100%;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container {
+ display: flex;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input {
+ background: #ffffff;
+ border: none;
+ border-radius: 0;
+ color: #455a64;
+ flex-grow: 1;
+ font-size: 0.85em;
+ padding-bottom: 0.1em;
+ padding-left: 5px;
+ padding-top: 0.1em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder {
+ /* WebKit, Blink, Edge */
+ color: #888;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder {
+ /* WebKit, Blink, Edge */
+ color: #888;
+}
+/* dropup */
+.tinymce-mobile-dropup {
+ background: white;
+ display: flex;
+ overflow: hidden;
+ width: 100%;
+}
+.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking {
+ transition: height 0.3s ease-out;
+}
+.tinymce-mobile-dropup.tinymce-mobile-dropup-growing {
+ transition: height 0.3s ease-in;
+}
+.tinymce-mobile-dropup.tinymce-mobile-dropup-closed {
+ flex-grow: 0;
+}
+.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing) {
+ flex-grow: 1;
+}
+/* TODO min-height for device size and orientation */
+.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {
+ min-height: 200px;
+}
+@media only screen and (orientation: landscape) {
+ .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {
+ min-height: 200px;
+ }
+}
+@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) {
+ .tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {
+ min-height: 150px;
+ }
+}
+/* styles menu */
+.tinymce-mobile-styles-menu {
+ font-family: sans-serif;
+ outline: 4px solid black;
+ overflow: hidden;
+ position: relative;
+ width: 100%;
+}
+.tinymce-mobile-styles-menu [role="menu"] {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ position: absolute;
+ width: 100%;
+}
+.tinymce-mobile-styles-menu [role="menu"].transitioning {
+ transition: transform 0.5s ease-in-out;
+}
+.tinymce-mobile-styles-menu .tinymce-mobile-styles-item {
+ border-bottom: 1px solid #ddd;
+ color: #455a64;
+ cursor: pointer;
+ display: flex;
+ padding: 1em 1em;
+ position: relative;
+}
+.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before {
+ color: #455a64;
+ content: "\e314";
+ font-family: 'tinymce-mobile', sans-serif;
+}
+.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after {
+ color: #455a64;
+ content: "\e315";
+ font-family: 'tinymce-mobile', sans-serif;
+ padding-left: 1em;
+ padding-right: 1em;
+ position: absolute;
+ right: 0;
+}
+.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after {
+ font-family: 'tinymce-mobile', sans-serif;
+ padding-left: 1em;
+ padding-right: 1em;
+ position: absolute;
+ right: 0;
+}
+.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator,
+.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser {
+ align-items: center;
+ background: #fff;
+ border-top: #455a64;
+ color: #455a64;
+ display: flex;
+ min-height: 2.5em;
+ padding-left: 1em;
+ padding-right: 1em;
+}
+.tinymce-mobile-styles-menu [data-transitioning-destination="before"][data-transitioning-state],
+.tinymce-mobile-styles-menu [data-transitioning-state="before"] {
+ transform: translate(-100%);
+}
+.tinymce-mobile-styles-menu [data-transitioning-destination="current"][data-transitioning-state],
+.tinymce-mobile-styles-menu [data-transitioning-state="current"] {
+ transform: translate(0%);
+}
+.tinymce-mobile-styles-menu [data-transitioning-destination="after"][data-transitioning-state],
+.tinymce-mobile-styles-menu [data-transitioning-state="after"] {
+ transform: translate(100%);
+}
+@font-face {
+ font-family: 'tinymce-mobile';
+ font-style: normal;
+ font-weight: normal;
+ src: url('fonts/tinymce-mobile.woff?8x92w3') format('woff');
+}
+@media (min-device-width: 700px) {
+ .tinymce-mobile-outer-container,
+ .tinymce-mobile-outer-container input {
+ font-size: 25px;
+ }
+}
+@media (max-device-width: 700px) {
+ .tinymce-mobile-outer-container,
+ .tinymce-mobile-outer-container input {
+ font-size: 18px;
+ }
+}
+.tinymce-mobile-icon {
+ font-family: 'tinymce-mobile', sans-serif;
+}
+.mixin-flex-and-centre {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+}
+.mixin-flex-bar {
+ align-items: center;
+ display: flex;
+ height: 100%;
+}
+.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe {
+ background-color: #fff;
+ width: 100%;
+}
+.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {
+ /* Note, on the iPod touch in landscape, this isn't visible when the navbar appears */
+ background-color: #207ab7;
+ border-radius: 50%;
+ bottom: 1em;
+ color: white;
+ font-size: 1em;
+ height: 2.1em;
+ position: fixed;
+ right: 2em;
+ width: 2.1em;
+ align-items: center;
+ display: flex;
+ justify-content: center;
+}
+@media only screen and (min-device-width:700px) {
+ .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {
+ font-size: 1.2em;
+ }
+}
+.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket {
+ height: 300px;
+ overflow: hidden;
+}
+.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe {
+ height: 100%;
+}
+.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip {
+ display: none;
+}
+/*
+ Note, that if you don't include this (::-webkit-file-upload-button), the toolbar width gets
+ increased and the whole body becomes scrollable. It's important!
+ */
+input[type="file"]::-webkit-file-upload-button {
+ display: none;
+}
+@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) {
+ .tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {
+ bottom: 50%;
+ }
+}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.mobile.min.css b/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.mobile.min.css
new file mode 100644
index 00000000..3a45cacf
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.mobile.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tinymce-mobile-outer-container{all:initial;display:block}.tinymce-mobile-outer-container *{border:0;box-sizing:initial;cursor:inherit;float:none;line-height:1;margin:0;outline:0;padding:0;-webkit-tap-highlight-color:transparent;text-shadow:none;white-space:nowrap}.tinymce-mobile-icon-arrow-back::before{content:"\e5cd"}.tinymce-mobile-icon-image::before{content:"\e412"}.tinymce-mobile-icon-cancel-circle::before{content:"\e5c9"}.tinymce-mobile-icon-full-dot::before{content:"\e061"}.tinymce-mobile-icon-align-center::before{content:"\e234"}.tinymce-mobile-icon-align-left::before{content:"\e236"}.tinymce-mobile-icon-align-right::before{content:"\e237"}.tinymce-mobile-icon-bold::before{content:"\e238"}.tinymce-mobile-icon-italic::before{content:"\e23f"}.tinymce-mobile-icon-unordered-list::before{content:"\e241"}.tinymce-mobile-icon-ordered-list::before{content:"\e242"}.tinymce-mobile-icon-font-size::before{content:"\e245"}.tinymce-mobile-icon-underline::before{content:"\e249"}.tinymce-mobile-icon-link::before{content:"\e157"}.tinymce-mobile-icon-unlink::before{content:"\eca2"}.tinymce-mobile-icon-color::before{content:"\e891"}.tinymce-mobile-icon-previous::before{content:"\e314"}.tinymce-mobile-icon-next::before{content:"\e315"}.tinymce-mobile-icon-large-font::before,.tinymce-mobile-icon-style-formats::before{content:"\e264"}.tinymce-mobile-icon-undo::before{content:"\e166"}.tinymce-mobile-icon-redo::before{content:"\e15a"}.tinymce-mobile-icon-removeformat::before{content:"\e239"}.tinymce-mobile-icon-small-font::before{content:"\e906"}.tinymce-mobile-format-matches::after,.tinymce-mobile-icon-readonly-back::before{content:"\e5ca"}.tinymce-mobile-icon-small-heading::before{content:"small"}.tinymce-mobile-icon-large-heading::before{content:"large"}.tinymce-mobile-icon-large-heading::before,.tinymce-mobile-icon-small-heading::before{font-family:sans-serif;font-size:80%}.tinymce-mobile-mask-edit-icon::before{content:"\e254"}.tinymce-mobile-icon-back::before{content:"\e5c4"}.tinymce-mobile-icon-heading::before{content:"Headings";font-family:sans-serif;font-size:80%;font-weight:700}.tinymce-mobile-icon-h1::before{content:"H1";font-weight:700}.tinymce-mobile-icon-h2::before{content:"H2";font-weight:700}.tinymce-mobile-icon-h3::before{content:"H3";font-weight:700}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask{align-items:center;display:flex;justify-content:center;background:rgba(51,51,51,.5);height:100%;position:absolute;top:0;width:100%}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container{align-items:center;border-radius:50%;display:flex;flex-direction:column;font-family:sans-serif;font-size:1em;justify-content:space-between}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item{align-items:center;display:flex;justify-content:center;border-radius:50%;height:2.1em;width:2.1em}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{align-items:center;display:flex;justify-content:center;flex-direction:column;font-size:1em}@media only screen and (min-device-width:700px){.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{font-size:1.2em}}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon{align-items:center;display:flex;justify-content:center;border-radius:50%;height:2.1em;width:2.1em;background-color:#fff;color:#207ab7}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before{content:"\e900";font-family:tinymce-mobile,sans-serif}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon{z-index:2}.tinymce-mobile-android-container.tinymce-mobile-android-maximized{background:#fff;border:none;bottom:0;display:flex;flex-direction:column;left:0;position:fixed;right:0;top:0}.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized){position:relative}.tinymce-mobile-android-container .tinymce-mobile-editor-socket{display:flex;flex-grow:1}.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe{display:flex!important;flex-grow:1;height:auto!important}.tinymce-mobile-android-scroll-reload{overflow:hidden}:not(.tinymce-mobile-readonly-mode)>.tinymce-mobile-android-selection-context-toolbar{margin-top:23px}.tinymce-mobile-toolstrip{background:#fff;display:flex;flex:0 0 auto;z-index:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar{align-items:center;background-color:#fff;border-bottom:1px solid #ccc;display:flex;flex:1;height:2.5em;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group{align-items:center;display:flex;height:100%;flex-shrink:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group>div{align-items:center;display:flex;height:100%;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container{background:#f44336}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group{flex-grow:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button{align-items:center;display:flex;height:80%;margin-left:2px;margin-right:2px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected{background:#c8cbcf;color:#ccc}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type{background:#207ab7;color:#eceff1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group{align-items:center;display:flex;height:100%;flex:1;padding-bottom:.4em;padding-top:.4em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog{display:flex;min-height:1.5em;overflow:hidden;padding-left:0;padding-right:0;position:relative;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain{display:flex;height:100%;transition:left cubic-bezier(.4,0,1,1) .15s;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen{display:flex;flex:0 0 auto;justify-content:space-between;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input{font-family:Sans-serif}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container{display:flex;flex-grow:1;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x{-ms-grid-row-align:center;align-self:center;background:inherit;border:none;border-radius:50%;color:#888;font-size:.6em;font-weight:700;height:100%;padding-right:2px;position:absolute;right:0}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x{display:none}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous{align-items:center;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before{align-items:center;display:flex;font-weight:700;height:100%;padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before{visibility:hidden}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item{color:#ccc;font-size:10px;line-height:10px;margin:0 2px;padding-top:3px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active{color:#c8cbcf}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before{margin-left:.5em;margin-right:.9em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before{margin-left:.9em;margin-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider{display:flex;flex:1;margin-left:0;margin-right:0;padding:.28em 0;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container{align-items:center;display:flex;flex-grow:1;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line{background:#ccc;display:flex;flex:1;height:.2em;margin-bottom:.3em;margin-top:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container{padding-left:2em;padding-right:2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container{align-items:center;display:flex;flex-grow:1;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient{background:linear-gradient(to right,red 0,#feff00 17%,#0f0 33%,#00feff 50%,#00f 67%,#ff00fe 83%,red 100%);display:flex;flex:1;height:.2em;margin-bottom:.3em;margin-top:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black{background:#000;height:.2em;margin-bottom:.3em;margin-top:.3em;width:1.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white{background:#fff;height:.2em;margin-bottom:.3em;margin-top:.3em;width:1.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb{align-items:center;background-clip:padding-box;background-color:#455a64;border:.5em solid rgba(136,136,136,0);border-radius:3em;bottom:0;color:#fff;display:flex;height:.5em;justify-content:center;left:-10px;margin:auto;position:absolute;top:0;transition:border 120ms cubic-bezier(.39,.58,.57,1);width:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active{border:.5em solid rgba(136,136,136,.39)}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group>div{align-items:center;display:flex;height:100%;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper{flex-direction:column;justify-content:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{align-items:center;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog){height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container{display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input{background:#fff;border:none;border-radius:0;color:#455a64;flex-grow:1;font-size:.85em;padding-bottom:.1em;padding-left:5px;padding-top:.1em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder{color:#888}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder{color:#888}.tinymce-mobile-dropup{background:#fff;display:flex;overflow:hidden;width:100%}.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking{transition:height .3s ease-out}.tinymce-mobile-dropup.tinymce-mobile-dropup-growing{transition:height .3s ease-in}.tinymce-mobile-dropup.tinymce-mobile-dropup-closed{flex-grow:0}.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing){flex-grow:1}.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}@media only screen and (orientation:landscape){.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}}@media only screen and (min-device-width :320px) and (max-device-width :568px) and (orientation :landscape){.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:150px}}.tinymce-mobile-styles-menu{font-family:sans-serif;outline:4px solid #000;overflow:hidden;position:relative;width:100%}.tinymce-mobile-styles-menu [role=menu]{display:flex;flex-direction:column;height:100%;position:absolute;width:100%}.tinymce-mobile-styles-menu [role=menu].transitioning{transition:transform .5s ease-in-out}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item{border-bottom:1px solid #ddd;color:#455a64;cursor:pointer;display:flex;padding:1em 1em;position:relative}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before{color:#455a64;content:"\e314";font-family:tinymce-mobile,sans-serif}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after{color:#455a64;content:"\e315";font-family:tinymce-mobile,sans-serif;padding-left:1em;padding-right:1em;position:absolute;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after{font-family:tinymce-mobile,sans-serif;padding-left:1em;padding-right:1em;position:absolute;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser,.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator{align-items:center;background:#fff;border-top:#455a64;color:#455a64;display:flex;min-height:2.5em;padding-left:1em;padding-right:1em}.tinymce-mobile-styles-menu [data-transitioning-destination=before][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=before]{transform:translate(-100%)}.tinymce-mobile-styles-menu [data-transitioning-destination=current][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=current]{transform:translate(0)}.tinymce-mobile-styles-menu [data-transitioning-destination=after][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=after]{transform:translate(100%)}@font-face{font-family:tinymce-mobile;font-style:normal;font-weight:400;src:url(fonts/tinymce-mobile.woff?8x92w3) format('woff')}@media (min-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:25px}}@media (max-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:18px}}.tinymce-mobile-icon{font-family:tinymce-mobile,sans-serif}.mixin-flex-and-centre{align-items:center;display:flex;justify-content:center}.mixin-flex-bar{align-items:center;display:flex;height:100%}.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe{background-color:#fff;width:100%}.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{background-color:#207ab7;border-radius:50%;bottom:1em;color:#fff;font-size:1em;height:2.1em;position:fixed;right:2em;width:2.1em;align-items:center;display:flex;justify-content:center}@media only screen and (min-device-width:700px){.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{font-size:1.2em}}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket{height:300px;overflow:hidden}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe{height:100%}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip{display:none}input[type=file]::-webkit-file-upload-button{display:none}@media only screen and (min-device-width :320px) and (max-device-width :568px) and (orientation :landscape){.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{bottom:50%}}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.css b/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.css
new file mode 100644
index 00000000..d2adc4db
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.css
@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+body.tox-dialog__disable-scroll {
+ overflow: hidden;
+}
+.tox-fullscreen {
+ border: 0;
+ height: 100%;
+ margin: 0;
+ overflow: hidden;
+ -ms-scroll-chaining: none;
+ overscroll-behavior: none;
+ padding: 0;
+ touch-action: pinch-zoom;
+ width: 100%;
+}
+.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
+ display: none;
+}
+.tox.tox-tinymce.tox-fullscreen,
+.tox-shadowhost.tox-fullscreen {
+ left: 0;
+ position: fixed;
+ top: 0;
+ z-index: 1200;
+}
+.tox.tox-tinymce.tox-fullscreen {
+ background-color: transparent;
+}
+.tox-fullscreen .tox.tox-tinymce-aux,
+.tox-fullscreen ~ .tox.tox-tinymce-aux {
+ z-index: 1201;
+}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css b/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css
new file mode 100644
index 00000000..a0893b91
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide/content.css b/guns-front-project/public/tinymce/skins/ui/oxide/content.css
new file mode 100644
index 00000000..2ac0ccaf
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide/content.css
@@ -0,0 +1,732 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.mce-content-body .mce-item-anchor {
+ background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
+ cursor: default;
+ display: inline-block;
+ height: 12px !important;
+ padding: 0 2px;
+ -webkit-user-modify: read-only;
+ -moz-user-modify: read-only;
+ -webkit-user-select: all;
+ -moz-user-select: all;
+ -ms-user-select: all;
+ user-select: all;
+ width: 8px !important;
+}
+.mce-content-body .mce-item-anchor[data-mce-selected] {
+ outline-offset: 1px;
+}
+.tox-comments-visible .tox-comment {
+ background-color: #fff0b7;
+}
+.tox-comments-visible .tox-comment--active {
+ background-color: #ffe168;
+}
+.tox-checklist > li:not(.tox-checklist--hidden) {
+ list-style: none;
+ margin: 0.25em 0;
+}
+.tox-checklist > li:not(.tox-checklist--hidden)::before {
+ content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
+ cursor: pointer;
+ height: 1em;
+ margin-left: -1.5em;
+ margin-top: 0.125em;
+ position: absolute;
+ width: 1em;
+}
+.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {
+ content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
+}
+[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {
+ margin-left: 0;
+ margin-right: -1.5em;
+}
+/* stylelint-disable */
+/* http://prismjs.com/ */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+ color: black;
+ background: none;
+ text-shadow: 0 1px white;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ font-size: 1em;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+ -moz-tab-size: 4;
+ tab-size: 4;
+ -webkit-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+@media print {
+ code[class*="language-"],
+ pre[class*="language-"] {
+ text-shadow: none;
+ }
+}
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: 0.5em 0;
+ overflow: auto;
+}
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+ background: #f5f2f0;
+}
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+ padding: 0.1em;
+ border-radius: 0.3em;
+ white-space: normal;
+}
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: slategray;
+}
+.token.punctuation {
+ color: #999;
+}
+.namespace {
+ opacity: 0.7;
+}
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+ color: #905;
+}
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+ color: #690;
+}
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+ color: #9a6e3a;
+ background: hsla(0, 0%, 100%, 0.5);
+}
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+ color: #07a;
+}
+.token.function,
+.token.class-name {
+ color: #DD4A68;
+}
+.token.regex,
+.token.important,
+.token.variable {
+ color: #e90;
+}
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+.token.italic {
+ font-style: italic;
+}
+.token.entity {
+ cursor: help;
+}
+/* stylelint-enable */
+.mce-content-body {
+ overflow-wrap: break-word;
+ word-wrap: break-word;
+}
+.mce-content-body .mce-visual-caret {
+ background-color: black;
+ background-color: currentColor;
+ position: absolute;
+}
+.mce-content-body .mce-visual-caret-hidden {
+ display: none;
+}
+.mce-content-body *[data-mce-caret] {
+ left: -1000px;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ right: auto;
+ top: 0;
+}
+.mce-content-body .mce-offscreen-selection {
+ left: -2000000px;
+ max-width: 1000000px;
+ position: absolute;
+}
+.mce-content-body *[contentEditable=false] {
+ cursor: default;
+}
+.mce-content-body *[contentEditable=true] {
+ cursor: text;
+}
+.tox-cursor-format-painter {
+ cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default;
+}
+.mce-content-body figure.align-left {
+ float: left;
+}
+.mce-content-body figure.align-right {
+ float: right;
+}
+.mce-content-body figure.image.align-center {
+ display: table;
+ margin-left: auto;
+ margin-right: auto;
+}
+.mce-preview-object {
+ border: 1px solid gray;
+ display: inline-block;
+ line-height: 0;
+ margin: 0 2px 0 2px;
+ position: relative;
+}
+.mce-preview-object .mce-shim {
+ background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.mce-preview-object[data-mce-selected="2"] .mce-shim {
+ display: none;
+}
+.mce-object {
+ background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
+ border: 1px dashed #aaa;
+}
+.mce-pagebreak {
+ border: 1px dashed #aaa;
+ cursor: default;
+ display: block;
+ height: 5px;
+ margin-top: 15px;
+ page-break-before: always;
+ width: 100%;
+}
+@media print {
+ .mce-pagebreak {
+ border: 0;
+ }
+}
+.tiny-pageembed .mce-shim {
+ background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.tiny-pageembed[data-mce-selected="2"] .mce-shim {
+ display: none;
+}
+.tiny-pageembed {
+ display: inline-block;
+ position: relative;
+}
+.tiny-pageembed--21by9,
+.tiny-pageembed--16by9,
+.tiny-pageembed--4by3,
+.tiny-pageembed--1by1 {
+ display: block;
+ overflow: hidden;
+ padding: 0;
+ position: relative;
+ width: 100%;
+}
+.tiny-pageembed--21by9 {
+ padding-top: 42.857143%;
+}
+.tiny-pageembed--16by9 {
+ padding-top: 56.25%;
+}
+.tiny-pageembed--4by3 {
+ padding-top: 75%;
+}
+.tiny-pageembed--1by1 {
+ padding-top: 100%;
+}
+.tiny-pageembed--21by9 iframe,
+.tiny-pageembed--16by9 iframe,
+.tiny-pageembed--4by3 iframe,
+.tiny-pageembed--1by1 iframe {
+ border: 0;
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.mce-content-body[data-mce-placeholder] {
+ position: relative;
+}
+.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {
+ color: rgba(34, 47, 62, 0.7);
+ content: attr(data-mce-placeholder);
+ position: absolute;
+}
+.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {
+ left: 1px;
+}
+.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {
+ right: 1px;
+}
+.mce-content-body div.mce-resizehandle {
+ background-color: #4099ff;
+ border-color: #4099ff;
+ border-style: solid;
+ border-width: 1px;
+ box-sizing: border-box;
+ height: 10px;
+ position: absolute;
+ width: 10px;
+ z-index: 1298;
+}
+.mce-content-body div.mce-resizehandle:hover {
+ background-color: #4099ff;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(1) {
+ cursor: nwse-resize;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(2) {
+ cursor: nesw-resize;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(3) {
+ cursor: nwse-resize;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(4) {
+ cursor: nesw-resize;
+}
+.mce-content-body .mce-resize-backdrop {
+ z-index: 10000;
+}
+.mce-content-body .mce-clonedresizable {
+ cursor: default;
+ opacity: 0.5;
+ outline: 1px dashed black;
+ position: absolute;
+ z-index: 10001;
+}
+.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,
+.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {
+ border: 0;
+}
+.mce-content-body .mce-resize-helper {
+ background: #555;
+ background: rgba(0, 0, 0, 0.75);
+ border: 1px;
+ border-radius: 3px;
+ color: white;
+ display: none;
+ font-family: sans-serif;
+ font-size: 12px;
+ line-height: 14px;
+ margin: 5px 10px;
+ padding: 5px;
+ position: absolute;
+ white-space: nowrap;
+ z-index: 10002;
+}
+.tox-rtc-user-selection {
+ position: relative;
+}
+.tox-rtc-user-cursor {
+ bottom: 0;
+ cursor: default;
+ position: absolute;
+ top: 0;
+ width: 2px;
+}
+.tox-rtc-user-cursor::before {
+ background-color: inherit;
+ border-radius: 50%;
+ content: '';
+ display: block;
+ height: 8px;
+ position: absolute;
+ right: -3px;
+ top: -3px;
+ width: 8px;
+}
+.tox-rtc-user-cursor:hover::after {
+ background-color: inherit;
+ border-radius: 100px;
+ box-sizing: border-box;
+ color: #fff;
+ content: attr(data-user);
+ display: block;
+ font-size: 12px;
+ font-weight: bold;
+ left: -5px;
+ min-height: 8px;
+ min-width: 8px;
+ padding: 0 12px;
+ position: absolute;
+ top: -11px;
+ white-space: nowrap;
+ z-index: 1000;
+}
+.tox-rtc-user-selection--1 .tox-rtc-user-cursor {
+ background-color: #2dc26b;
+}
+.tox-rtc-user-selection--2 .tox-rtc-user-cursor {
+ background-color: #e03e2d;
+}
+.tox-rtc-user-selection--3 .tox-rtc-user-cursor {
+ background-color: #f1c40f;
+}
+.tox-rtc-user-selection--4 .tox-rtc-user-cursor {
+ background-color: #3598db;
+}
+.tox-rtc-user-selection--5 .tox-rtc-user-cursor {
+ background-color: #b96ad9;
+}
+.tox-rtc-user-selection--6 .tox-rtc-user-cursor {
+ background-color: #e67e23;
+}
+.tox-rtc-user-selection--7 .tox-rtc-user-cursor {
+ background-color: #aaa69d;
+}
+.tox-rtc-user-selection--8 .tox-rtc-user-cursor {
+ background-color: #f368e0;
+}
+.tox-rtc-remote-image {
+ background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;
+ border: 1px solid #ccc;
+ min-height: 240px;
+ min-width: 320px;
+}
+.mce-match-marker {
+ background: #aaa;
+ color: #fff;
+}
+.mce-match-marker-selected {
+ background: #39f;
+ color: #fff;
+}
+.mce-match-marker-selected::-moz-selection {
+ background: #39f;
+ color: #fff;
+}
+.mce-match-marker-selected::selection {
+ background: #39f;
+ color: #fff;
+}
+.mce-content-body img[data-mce-selected],
+.mce-content-body video[data-mce-selected],
+.mce-content-body audio[data-mce-selected],
+.mce-content-body object[data-mce-selected],
+.mce-content-body embed[data-mce-selected],
+.mce-content-body table[data-mce-selected] {
+ outline: 3px solid #b4d7ff;
+}
+.mce-content-body hr[data-mce-selected] {
+ outline: 3px solid #b4d7ff;
+ outline-offset: 1px;
+}
+.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {
+ outline: 3px solid #b4d7ff;
+}
+.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {
+ outline: 3px solid #b4d7ff;
+}
+.mce-content-body *[contentEditable=false][data-mce-selected] {
+ cursor: not-allowed;
+ outline: 3px solid #b4d7ff;
+}
+.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,
+.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {
+ outline: none;
+}
+.mce-content-body *[data-mce-selected="inline-boundary"] {
+ background-color: #b4d7ff;
+}
+.mce-content-body .mce-edit-focus {
+ outline: 3px solid #b4d7ff;
+}
+.mce-content-body td[data-mce-selected],
+.mce-content-body th[data-mce-selected] {
+ position: relative;
+}
+.mce-content-body td[data-mce-selected]::-moz-selection,
+.mce-content-body th[data-mce-selected]::-moz-selection {
+ background: none;
+}
+.mce-content-body td[data-mce-selected]::selection,
+.mce-content-body th[data-mce-selected]::selection {
+ background: none;
+}
+.mce-content-body td[data-mce-selected] *,
+.mce-content-body th[data-mce-selected] * {
+ outline: none;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.mce-content-body td[data-mce-selected]::after,
+.mce-content-body th[data-mce-selected]::after {
+ background-color: rgba(180, 215, 255, 0.7);
+ border: 1px solid rgba(180, 215, 255, 0.7);
+ bottom: -1px;
+ content: '';
+ left: -1px;
+ mix-blend-mode: multiply;
+ position: absolute;
+ right: -1px;
+ top: -1px;
+}
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
+ .mce-content-body td[data-mce-selected]::after,
+ .mce-content-body th[data-mce-selected]::after {
+ border-color: rgba(0, 84, 180, 0.7);
+ }
+}
+.mce-content-body img::-moz-selection {
+ background: none;
+}
+.mce-content-body img::selection {
+ background: none;
+}
+.ephox-snooker-resizer-bar {
+ background-color: #b4d7ff;
+ opacity: 0;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.ephox-snooker-resizer-cols {
+ cursor: col-resize;
+}
+.ephox-snooker-resizer-rows {
+ cursor: row-resize;
+}
+.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {
+ opacity: 1;
+}
+.mce-spellchecker-word {
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
+ background-position: 0 calc(100% + 1px);
+ background-repeat: repeat-x;
+ background-size: auto 6px;
+ cursor: default;
+ height: 2rem;
+}
+.mce-spellchecker-grammar {
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
+ background-position: 0 calc(100% + 1px);
+ background-repeat: repeat-x;
+ background-size: auto 6px;
+ cursor: default;
+}
+.mce-toc {
+ border: 1px solid gray;
+}
+.mce-toc h2 {
+ margin: 4px;
+}
+.mce-toc li {
+ list-style-type: none;
+}
+table[style*="border-width: 0px"],
+.mce-item-table:not([border]),
+.mce-item-table[border="0"],
+table[style*="border-width: 0px"] td,
+.mce-item-table:not([border]) td,
+.mce-item-table[border="0"] td,
+table[style*="border-width: 0px"] th,
+.mce-item-table:not([border]) th,
+.mce-item-table[border="0"] th,
+table[style*="border-width: 0px"] caption,
+.mce-item-table:not([border]) caption,
+.mce-item-table[border="0"] caption {
+ border: 1px dashed #bbb;
+}
+.mce-visualblocks p,
+.mce-visualblocks h1,
+.mce-visualblocks h2,
+.mce-visualblocks h3,
+.mce-visualblocks h4,
+.mce-visualblocks h5,
+.mce-visualblocks h6,
+.mce-visualblocks div:not([data-mce-bogus]),
+.mce-visualblocks section,
+.mce-visualblocks article,
+.mce-visualblocks blockquote,
+.mce-visualblocks address,
+.mce-visualblocks pre,
+.mce-visualblocks figure,
+.mce-visualblocks figcaption,
+.mce-visualblocks hgroup,
+.mce-visualblocks aside,
+.mce-visualblocks ul,
+.mce-visualblocks ol,
+.mce-visualblocks dl {
+ background-repeat: no-repeat;
+ border: 1px dashed #bbb;
+ margin-left: 3px;
+ padding-top: 10px;
+}
+.mce-visualblocks p {
+ background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
+}
+.mce-visualblocks h1 {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
+}
+.mce-visualblocks h2 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
+}
+.mce-visualblocks h3 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
+}
+.mce-visualblocks h4 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
+}
+.mce-visualblocks h5 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
+}
+.mce-visualblocks h6 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
+}
+.mce-visualblocks div:not([data-mce-bogus]) {
+ background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
+}
+.mce-visualblocks section {
+ background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
+}
+.mce-visualblocks article {
+ background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
+}
+.mce-visualblocks blockquote {
+ background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
+}
+.mce-visualblocks address {
+ background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
+}
+.mce-visualblocks pre {
+ background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
+}
+.mce-visualblocks figure {
+ background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
+}
+.mce-visualblocks figcaption {
+ border: 1px dashed #bbb;
+}
+.mce-visualblocks hgroup {
+ background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
+}
+.mce-visualblocks aside {
+ background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
+}
+.mce-visualblocks ul {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);
+}
+.mce-visualblocks ol {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
+}
+.mce-visualblocks dl {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
+}
+.mce-visualblocks:not([dir=rtl]) p,
+.mce-visualblocks:not([dir=rtl]) h1,
+.mce-visualblocks:not([dir=rtl]) h2,
+.mce-visualblocks:not([dir=rtl]) h3,
+.mce-visualblocks:not([dir=rtl]) h4,
+.mce-visualblocks:not([dir=rtl]) h5,
+.mce-visualblocks:not([dir=rtl]) h6,
+.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),
+.mce-visualblocks:not([dir=rtl]) section,
+.mce-visualblocks:not([dir=rtl]) article,
+.mce-visualblocks:not([dir=rtl]) blockquote,
+.mce-visualblocks:not([dir=rtl]) address,
+.mce-visualblocks:not([dir=rtl]) pre,
+.mce-visualblocks:not([dir=rtl]) figure,
+.mce-visualblocks:not([dir=rtl]) figcaption,
+.mce-visualblocks:not([dir=rtl]) hgroup,
+.mce-visualblocks:not([dir=rtl]) aside,
+.mce-visualblocks:not([dir=rtl]) ul,
+.mce-visualblocks:not([dir=rtl]) ol,
+.mce-visualblocks:not([dir=rtl]) dl {
+ margin-left: 3px;
+}
+.mce-visualblocks[dir=rtl] p,
+.mce-visualblocks[dir=rtl] h1,
+.mce-visualblocks[dir=rtl] h2,
+.mce-visualblocks[dir=rtl] h3,
+.mce-visualblocks[dir=rtl] h4,
+.mce-visualblocks[dir=rtl] h5,
+.mce-visualblocks[dir=rtl] h6,
+.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),
+.mce-visualblocks[dir=rtl] section,
+.mce-visualblocks[dir=rtl] article,
+.mce-visualblocks[dir=rtl] blockquote,
+.mce-visualblocks[dir=rtl] address,
+.mce-visualblocks[dir=rtl] pre,
+.mce-visualblocks[dir=rtl] figure,
+.mce-visualblocks[dir=rtl] figcaption,
+.mce-visualblocks[dir=rtl] hgroup,
+.mce-visualblocks[dir=rtl] aside,
+.mce-visualblocks[dir=rtl] ul,
+.mce-visualblocks[dir=rtl] ol,
+.mce-visualblocks[dir=rtl] dl {
+ background-position-x: right;
+ margin-right: 3px;
+}
+.mce-nbsp,
+.mce-shy {
+ background: #aaa;
+}
+.mce-shy::after {
+ content: '-';
+}
+body {
+ font-family: sans-serif;
+}
+table {
+ border-collapse: collapse;
+}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide/content.inline.css b/guns-front-project/public/tinymce/skins/ui/oxide/content.inline.css
new file mode 100644
index 00000000..8e7521d9
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide/content.inline.css
@@ -0,0 +1,726 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.mce-content-body .mce-item-anchor {
+ background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
+ cursor: default;
+ display: inline-block;
+ height: 12px !important;
+ padding: 0 2px;
+ -webkit-user-modify: read-only;
+ -moz-user-modify: read-only;
+ -webkit-user-select: all;
+ -moz-user-select: all;
+ -ms-user-select: all;
+ user-select: all;
+ width: 8px !important;
+}
+.mce-content-body .mce-item-anchor[data-mce-selected] {
+ outline-offset: 1px;
+}
+.tox-comments-visible .tox-comment {
+ background-color: #fff0b7;
+}
+.tox-comments-visible .tox-comment--active {
+ background-color: #ffe168;
+}
+.tox-checklist > li:not(.tox-checklist--hidden) {
+ list-style: none;
+ margin: 0.25em 0;
+}
+.tox-checklist > li:not(.tox-checklist--hidden)::before {
+ content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
+ cursor: pointer;
+ height: 1em;
+ margin-left: -1.5em;
+ margin-top: 0.125em;
+ position: absolute;
+ width: 1em;
+}
+.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {
+ content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
+}
+[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {
+ margin-left: 0;
+ margin-right: -1.5em;
+}
+/* stylelint-disable */
+/* http://prismjs.com/ */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+ color: black;
+ background: none;
+ text-shadow: 0 1px white;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ font-size: 1em;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+ -moz-tab-size: 4;
+ tab-size: 4;
+ -webkit-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+@media print {
+ code[class*="language-"],
+ pre[class*="language-"] {
+ text-shadow: none;
+ }
+}
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: 0.5em 0;
+ overflow: auto;
+}
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+ background: #f5f2f0;
+}
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+ padding: 0.1em;
+ border-radius: 0.3em;
+ white-space: normal;
+}
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: slategray;
+}
+.token.punctuation {
+ color: #999;
+}
+.namespace {
+ opacity: 0.7;
+}
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+ color: #905;
+}
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+ color: #690;
+}
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+ color: #9a6e3a;
+ background: hsla(0, 0%, 100%, 0.5);
+}
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+ color: #07a;
+}
+.token.function,
+.token.class-name {
+ color: #DD4A68;
+}
+.token.regex,
+.token.important,
+.token.variable {
+ color: #e90;
+}
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+.token.italic {
+ font-style: italic;
+}
+.token.entity {
+ cursor: help;
+}
+/* stylelint-enable */
+.mce-content-body {
+ overflow-wrap: break-word;
+ word-wrap: break-word;
+}
+.mce-content-body .mce-visual-caret {
+ background-color: black;
+ background-color: currentColor;
+ position: absolute;
+}
+.mce-content-body .mce-visual-caret-hidden {
+ display: none;
+}
+.mce-content-body *[data-mce-caret] {
+ left: -1000px;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ right: auto;
+ top: 0;
+}
+.mce-content-body .mce-offscreen-selection {
+ left: -2000000px;
+ max-width: 1000000px;
+ position: absolute;
+}
+.mce-content-body *[contentEditable=false] {
+ cursor: default;
+}
+.mce-content-body *[contentEditable=true] {
+ cursor: text;
+}
+.tox-cursor-format-painter {
+ cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default;
+}
+.mce-content-body figure.align-left {
+ float: left;
+}
+.mce-content-body figure.align-right {
+ float: right;
+}
+.mce-content-body figure.image.align-center {
+ display: table;
+ margin-left: auto;
+ margin-right: auto;
+}
+.mce-preview-object {
+ border: 1px solid gray;
+ display: inline-block;
+ line-height: 0;
+ margin: 0 2px 0 2px;
+ position: relative;
+}
+.mce-preview-object .mce-shim {
+ background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.mce-preview-object[data-mce-selected="2"] .mce-shim {
+ display: none;
+}
+.mce-object {
+ background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
+ border: 1px dashed #aaa;
+}
+.mce-pagebreak {
+ border: 1px dashed #aaa;
+ cursor: default;
+ display: block;
+ height: 5px;
+ margin-top: 15px;
+ page-break-before: always;
+ width: 100%;
+}
+@media print {
+ .mce-pagebreak {
+ border: 0;
+ }
+}
+.tiny-pageembed .mce-shim {
+ background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.tiny-pageembed[data-mce-selected="2"] .mce-shim {
+ display: none;
+}
+.tiny-pageembed {
+ display: inline-block;
+ position: relative;
+}
+.tiny-pageembed--21by9,
+.tiny-pageembed--16by9,
+.tiny-pageembed--4by3,
+.tiny-pageembed--1by1 {
+ display: block;
+ overflow: hidden;
+ padding: 0;
+ position: relative;
+ width: 100%;
+}
+.tiny-pageembed--21by9 {
+ padding-top: 42.857143%;
+}
+.tiny-pageembed--16by9 {
+ padding-top: 56.25%;
+}
+.tiny-pageembed--4by3 {
+ padding-top: 75%;
+}
+.tiny-pageembed--1by1 {
+ padding-top: 100%;
+}
+.tiny-pageembed--21by9 iframe,
+.tiny-pageembed--16by9 iframe,
+.tiny-pageembed--4by3 iframe,
+.tiny-pageembed--1by1 iframe {
+ border: 0;
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.mce-content-body[data-mce-placeholder] {
+ position: relative;
+}
+.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {
+ color: rgba(34, 47, 62, 0.7);
+ content: attr(data-mce-placeholder);
+ position: absolute;
+}
+.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {
+ left: 1px;
+}
+.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {
+ right: 1px;
+}
+.mce-content-body div.mce-resizehandle {
+ background-color: #4099ff;
+ border-color: #4099ff;
+ border-style: solid;
+ border-width: 1px;
+ box-sizing: border-box;
+ height: 10px;
+ position: absolute;
+ width: 10px;
+ z-index: 1298;
+}
+.mce-content-body div.mce-resizehandle:hover {
+ background-color: #4099ff;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(1) {
+ cursor: nwse-resize;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(2) {
+ cursor: nesw-resize;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(3) {
+ cursor: nwse-resize;
+}
+.mce-content-body div.mce-resizehandle:nth-of-type(4) {
+ cursor: nesw-resize;
+}
+.mce-content-body .mce-resize-backdrop {
+ z-index: 10000;
+}
+.mce-content-body .mce-clonedresizable {
+ cursor: default;
+ opacity: 0.5;
+ outline: 1px dashed black;
+ position: absolute;
+ z-index: 10001;
+}
+.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,
+.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {
+ border: 0;
+}
+.mce-content-body .mce-resize-helper {
+ background: #555;
+ background: rgba(0, 0, 0, 0.75);
+ border: 1px;
+ border-radius: 3px;
+ color: white;
+ display: none;
+ font-family: sans-serif;
+ font-size: 12px;
+ line-height: 14px;
+ margin: 5px 10px;
+ padding: 5px;
+ position: absolute;
+ white-space: nowrap;
+ z-index: 10002;
+}
+.tox-rtc-user-selection {
+ position: relative;
+}
+.tox-rtc-user-cursor {
+ bottom: 0;
+ cursor: default;
+ position: absolute;
+ top: 0;
+ width: 2px;
+}
+.tox-rtc-user-cursor::before {
+ background-color: inherit;
+ border-radius: 50%;
+ content: '';
+ display: block;
+ height: 8px;
+ position: absolute;
+ right: -3px;
+ top: -3px;
+ width: 8px;
+}
+.tox-rtc-user-cursor:hover::after {
+ background-color: inherit;
+ border-radius: 100px;
+ box-sizing: border-box;
+ color: #fff;
+ content: attr(data-user);
+ display: block;
+ font-size: 12px;
+ font-weight: bold;
+ left: -5px;
+ min-height: 8px;
+ min-width: 8px;
+ padding: 0 12px;
+ position: absolute;
+ top: -11px;
+ white-space: nowrap;
+ z-index: 1000;
+}
+.tox-rtc-user-selection--1 .tox-rtc-user-cursor {
+ background-color: #2dc26b;
+}
+.tox-rtc-user-selection--2 .tox-rtc-user-cursor {
+ background-color: #e03e2d;
+}
+.tox-rtc-user-selection--3 .tox-rtc-user-cursor {
+ background-color: #f1c40f;
+}
+.tox-rtc-user-selection--4 .tox-rtc-user-cursor {
+ background-color: #3598db;
+}
+.tox-rtc-user-selection--5 .tox-rtc-user-cursor {
+ background-color: #b96ad9;
+}
+.tox-rtc-user-selection--6 .tox-rtc-user-cursor {
+ background-color: #e67e23;
+}
+.tox-rtc-user-selection--7 .tox-rtc-user-cursor {
+ background-color: #aaa69d;
+}
+.tox-rtc-user-selection--8 .tox-rtc-user-cursor {
+ background-color: #f368e0;
+}
+.tox-rtc-remote-image {
+ background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;
+ border: 1px solid #ccc;
+ min-height: 240px;
+ min-width: 320px;
+}
+.mce-match-marker {
+ background: #aaa;
+ color: #fff;
+}
+.mce-match-marker-selected {
+ background: #39f;
+ color: #fff;
+}
+.mce-match-marker-selected::-moz-selection {
+ background: #39f;
+ color: #fff;
+}
+.mce-match-marker-selected::selection {
+ background: #39f;
+ color: #fff;
+}
+.mce-content-body img[data-mce-selected],
+.mce-content-body video[data-mce-selected],
+.mce-content-body audio[data-mce-selected],
+.mce-content-body object[data-mce-selected],
+.mce-content-body embed[data-mce-selected],
+.mce-content-body table[data-mce-selected] {
+ outline: 3px solid #b4d7ff;
+}
+.mce-content-body hr[data-mce-selected] {
+ outline: 3px solid #b4d7ff;
+ outline-offset: 1px;
+}
+.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {
+ outline: 3px solid #b4d7ff;
+}
+.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {
+ outline: 3px solid #b4d7ff;
+}
+.mce-content-body *[contentEditable=false][data-mce-selected] {
+ cursor: not-allowed;
+ outline: 3px solid #b4d7ff;
+}
+.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,
+.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {
+ outline: none;
+}
+.mce-content-body *[data-mce-selected="inline-boundary"] {
+ background-color: #b4d7ff;
+}
+.mce-content-body .mce-edit-focus {
+ outline: 3px solid #b4d7ff;
+}
+.mce-content-body td[data-mce-selected],
+.mce-content-body th[data-mce-selected] {
+ position: relative;
+}
+.mce-content-body td[data-mce-selected]::-moz-selection,
+.mce-content-body th[data-mce-selected]::-moz-selection {
+ background: none;
+}
+.mce-content-body td[data-mce-selected]::selection,
+.mce-content-body th[data-mce-selected]::selection {
+ background: none;
+}
+.mce-content-body td[data-mce-selected] *,
+.mce-content-body th[data-mce-selected] * {
+ outline: none;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.mce-content-body td[data-mce-selected]::after,
+.mce-content-body th[data-mce-selected]::after {
+ background-color: rgba(180, 215, 255, 0.7);
+ border: 1px solid rgba(180, 215, 255, 0.7);
+ bottom: -1px;
+ content: '';
+ left: -1px;
+ mix-blend-mode: multiply;
+ position: absolute;
+ right: -1px;
+ top: -1px;
+}
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
+ .mce-content-body td[data-mce-selected]::after,
+ .mce-content-body th[data-mce-selected]::after {
+ border-color: rgba(0, 84, 180, 0.7);
+ }
+}
+.mce-content-body img::-moz-selection {
+ background: none;
+}
+.mce-content-body img::selection {
+ background: none;
+}
+.ephox-snooker-resizer-bar {
+ background-color: #b4d7ff;
+ opacity: 0;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.ephox-snooker-resizer-cols {
+ cursor: col-resize;
+}
+.ephox-snooker-resizer-rows {
+ cursor: row-resize;
+}
+.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {
+ opacity: 1;
+}
+.mce-spellchecker-word {
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
+ background-position: 0 calc(100% + 1px);
+ background-repeat: repeat-x;
+ background-size: auto 6px;
+ cursor: default;
+ height: 2rem;
+}
+.mce-spellchecker-grammar {
+ background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
+ background-position: 0 calc(100% + 1px);
+ background-repeat: repeat-x;
+ background-size: auto 6px;
+ cursor: default;
+}
+.mce-toc {
+ border: 1px solid gray;
+}
+.mce-toc h2 {
+ margin: 4px;
+}
+.mce-toc li {
+ list-style-type: none;
+}
+table[style*="border-width: 0px"],
+.mce-item-table:not([border]),
+.mce-item-table[border="0"],
+table[style*="border-width: 0px"] td,
+.mce-item-table:not([border]) td,
+.mce-item-table[border="0"] td,
+table[style*="border-width: 0px"] th,
+.mce-item-table:not([border]) th,
+.mce-item-table[border="0"] th,
+table[style*="border-width: 0px"] caption,
+.mce-item-table:not([border]) caption,
+.mce-item-table[border="0"] caption {
+ border: 1px dashed #bbb;
+}
+.mce-visualblocks p,
+.mce-visualblocks h1,
+.mce-visualblocks h2,
+.mce-visualblocks h3,
+.mce-visualblocks h4,
+.mce-visualblocks h5,
+.mce-visualblocks h6,
+.mce-visualblocks div:not([data-mce-bogus]),
+.mce-visualblocks section,
+.mce-visualblocks article,
+.mce-visualblocks blockquote,
+.mce-visualblocks address,
+.mce-visualblocks pre,
+.mce-visualblocks figure,
+.mce-visualblocks figcaption,
+.mce-visualblocks hgroup,
+.mce-visualblocks aside,
+.mce-visualblocks ul,
+.mce-visualblocks ol,
+.mce-visualblocks dl {
+ background-repeat: no-repeat;
+ border: 1px dashed #bbb;
+ margin-left: 3px;
+ padding-top: 10px;
+}
+.mce-visualblocks p {
+ background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
+}
+.mce-visualblocks h1 {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
+}
+.mce-visualblocks h2 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
+}
+.mce-visualblocks h3 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
+}
+.mce-visualblocks h4 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
+}
+.mce-visualblocks h5 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
+}
+.mce-visualblocks h6 {
+ background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
+}
+.mce-visualblocks div:not([data-mce-bogus]) {
+ background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
+}
+.mce-visualblocks section {
+ background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
+}
+.mce-visualblocks article {
+ background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
+}
+.mce-visualblocks blockquote {
+ background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
+}
+.mce-visualblocks address {
+ background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
+}
+.mce-visualblocks pre {
+ background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
+}
+.mce-visualblocks figure {
+ background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
+}
+.mce-visualblocks figcaption {
+ border: 1px dashed #bbb;
+}
+.mce-visualblocks hgroup {
+ background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
+}
+.mce-visualblocks aside {
+ background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
+}
+.mce-visualblocks ul {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);
+}
+.mce-visualblocks ol {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
+}
+.mce-visualblocks dl {
+ background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
+}
+.mce-visualblocks:not([dir=rtl]) p,
+.mce-visualblocks:not([dir=rtl]) h1,
+.mce-visualblocks:not([dir=rtl]) h2,
+.mce-visualblocks:not([dir=rtl]) h3,
+.mce-visualblocks:not([dir=rtl]) h4,
+.mce-visualblocks:not([dir=rtl]) h5,
+.mce-visualblocks:not([dir=rtl]) h6,
+.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),
+.mce-visualblocks:not([dir=rtl]) section,
+.mce-visualblocks:not([dir=rtl]) article,
+.mce-visualblocks:not([dir=rtl]) blockquote,
+.mce-visualblocks:not([dir=rtl]) address,
+.mce-visualblocks:not([dir=rtl]) pre,
+.mce-visualblocks:not([dir=rtl]) figure,
+.mce-visualblocks:not([dir=rtl]) figcaption,
+.mce-visualblocks:not([dir=rtl]) hgroup,
+.mce-visualblocks:not([dir=rtl]) aside,
+.mce-visualblocks:not([dir=rtl]) ul,
+.mce-visualblocks:not([dir=rtl]) ol,
+.mce-visualblocks:not([dir=rtl]) dl {
+ margin-left: 3px;
+}
+.mce-visualblocks[dir=rtl] p,
+.mce-visualblocks[dir=rtl] h1,
+.mce-visualblocks[dir=rtl] h2,
+.mce-visualblocks[dir=rtl] h3,
+.mce-visualblocks[dir=rtl] h4,
+.mce-visualblocks[dir=rtl] h5,
+.mce-visualblocks[dir=rtl] h6,
+.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),
+.mce-visualblocks[dir=rtl] section,
+.mce-visualblocks[dir=rtl] article,
+.mce-visualblocks[dir=rtl] blockquote,
+.mce-visualblocks[dir=rtl] address,
+.mce-visualblocks[dir=rtl] pre,
+.mce-visualblocks[dir=rtl] figure,
+.mce-visualblocks[dir=rtl] figcaption,
+.mce-visualblocks[dir=rtl] hgroup,
+.mce-visualblocks[dir=rtl] aside,
+.mce-visualblocks[dir=rtl] ul,
+.mce-visualblocks[dir=rtl] ol,
+.mce-visualblocks[dir=rtl] dl {
+ background-position-x: right;
+ margin-right: 3px;
+}
+.mce-nbsp,
+.mce-shy {
+ background: #aaa;
+}
+.mce-shy::after {
+ content: '-';
+}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide/content.inline.min.css b/guns-front-project/public/tinymce/skins/ui/oxide/content.inline.min.css
new file mode 100644
index 00000000..b4ab9a3a
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide/content.inline.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment{background-color:#fff0b7}.tox-comments-visible .tox-comment--active{background-color:#ffe168}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img::-moz-selection{background:0 0}.mce-content-body img::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide/content.min.css b/guns-front-project/public/tinymce/skins/ui/oxide/content.min.css
new file mode 100644
index 00000000..844858d0
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide/content.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment{background-color:#fff0b7}.tox-comments-visible .tox-comment--active{background-color:#ffe168}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img::-moz-selection{background:0 0}.mce-content-body img::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}body{font-family:sans-serif}table{border-collapse:collapse}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide/content.mobile.css b/guns-front-project/public/tinymce/skins/ui/oxide/content.mobile.css
new file mode 100644
index 00000000..4bdb8bab
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide/content.mobile.css
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection {
+ /* Note: this file is used inside the content, so isn't part of theming */
+ background-color: green;
+ display: inline-block;
+ opacity: 0.5;
+ position: absolute;
+}
+body {
+ -webkit-text-size-adjust: none;
+}
+body img {
+ /* this is related to the content margin */
+ max-width: 96vw;
+}
+body table img {
+ max-width: 95%;
+}
+body {
+ font-family: sans-serif;
+}
+table {
+ border-collapse: collapse;
+}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide/content.mobile.min.css b/guns-front-project/public/tinymce/skins/ui/oxide/content.mobile.min.css
new file mode 100644
index 00000000..35f7dc08
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide/content.mobile.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff b/guns-front-project/public/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff
new file mode 100644
index 00000000..1e3be038
Binary files /dev/null and b/guns-front-project/public/tinymce/skins/ui/oxide/fonts/tinymce-mobile.woff differ
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide/skin.css b/guns-front-project/public/tinymce/skins/ui/oxide/skin.css
new file mode 100644
index 00000000..49a82faf
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide/skin.css
@@ -0,0 +1,3047 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tox {
+ box-shadow: none;
+ box-sizing: content-box;
+ color: #222f3e;
+ cursor: auto;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ font-size: 16px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: normal;
+ -webkit-tap-highlight-color: transparent;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ vertical-align: initial;
+ white-space: normal;
+}
+.tox *:not(svg):not(rect) {
+ box-sizing: inherit;
+ color: inherit;
+ cursor: inherit;
+ direction: inherit;
+ font-family: inherit;
+ font-size: inherit;
+ font-style: inherit;
+ font-weight: inherit;
+ line-height: inherit;
+ -webkit-tap-highlight-color: inherit;
+ text-align: inherit;
+ text-decoration: inherit;
+ text-shadow: inherit;
+ text-transform: inherit;
+ vertical-align: inherit;
+ white-space: inherit;
+}
+.tox *:not(svg):not(rect) {
+ /* stylelint-disable-line no-duplicate-selectors */
+ background: transparent;
+ border: 0;
+ box-shadow: none;
+ float: none;
+ height: auto;
+ margin: 0;
+ max-width: none;
+ outline: 0;
+ padding: 0;
+ position: static;
+ width: auto;
+}
+.tox:not([dir=rtl]) {
+ direction: ltr;
+ text-align: left;
+}
+.tox[dir=rtl] {
+ direction: rtl;
+ text-align: right;
+}
+.tox-tinymce {
+ border: 1px solid #cccccc;
+ border-radius: 0;
+ box-shadow: none;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ overflow: hidden;
+ position: relative;
+ visibility: inherit !important;
+}
+.tox-tinymce-inline {
+ border: none;
+ box-shadow: none;
+}
+.tox-tinymce-inline .tox-editor-header {
+ background-color: transparent;
+ border: 1px solid #cccccc;
+ border-radius: 0;
+ box-shadow: none;
+}
+.tox-tinymce-aux {
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ z-index: 1300;
+}
+.tox-tinymce *:focus,
+.tox-tinymce-aux *:focus {
+ outline: none;
+}
+button::-moz-focus-inner {
+ border: 0;
+}
+.tox[dir=rtl] .tox-icon--flip svg {
+ transform: rotateY(180deg);
+}
+.tox .accessibility-issue__header {
+ align-items: center;
+ display: flex;
+ margin-bottom: 4px;
+}
+.tox .accessibility-issue__description {
+ align-items: stretch;
+ border: 1px solid #cccccc;
+ border-radius: 3px;
+ display: flex;
+ justify-content: space-between;
+}
+.tox .accessibility-issue__description > div {
+ padding-bottom: 4px;
+}
+.tox .accessibility-issue__description > div > div {
+ align-items: center;
+ display: flex;
+ margin-bottom: 4px;
+}
+.tox .accessibility-issue__description > *:last-child:not(:only-child) {
+ border-color: #cccccc;
+ border-style: solid;
+}
+.tox .accessibility-issue__repair {
+ margin-top: 16px;
+}
+.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description {
+ background-color: rgba(32, 122, 183, 0.1);
+ border-color: rgba(32, 122, 183, 0.4);
+ color: #222f3e;
+}
+.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description > *:last-child {
+ border-color: rgba(32, 122, 183, 0.4);
+}
+.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2 {
+ color: #207ab7;
+}
+.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg {
+ fill: #207ab7;
+}
+.tox .tox-dialog__body-content .accessibility-issue--info a .tox-icon {
+ color: #207ab7;
+}
+.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description {
+ background-color: rgba(255, 165, 0, 0.1);
+ border-color: rgba(255, 165, 0, 0.5);
+ color: #222f3e;
+}
+.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description > *:last-child {
+ border-color: rgba(255, 165, 0, 0.5);
+}
+.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2 {
+ color: #cc8500;
+}
+.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg {
+ fill: #cc8500;
+}
+.tox .tox-dialog__body-content .accessibility-issue--warn a .tox-icon {
+ color: #cc8500;
+}
+.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description {
+ background-color: rgba(204, 0, 0, 0.1);
+ border-color: rgba(204, 0, 0, 0.4);
+ color: #222f3e;
+}
+.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description > *:last-child {
+ border-color: rgba(204, 0, 0, 0.4);
+}
+.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2 {
+ color: #c00;
+}
+.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg {
+ fill: #c00;
+}
+.tox .tox-dialog__body-content .accessibility-issue--error a .tox-icon {
+ color: #c00;
+}
+.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description {
+ background-color: rgba(120, 171, 70, 0.1);
+ border-color: rgba(120, 171, 70, 0.4);
+ color: #222f3e;
+}
+.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description > *:last-child {
+ border-color: rgba(120, 171, 70, 0.4);
+}
+.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2 {
+ color: #78AB46;
+}
+.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg {
+ fill: #78AB46;
+}
+.tox .tox-dialog__body-content .accessibility-issue--success a .tox-icon {
+ color: #78AB46;
+}
+.tox .tox-dialog__body-content .accessibility-issue__header h1,
+.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2 {
+ margin-top: 0;
+}
+.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button {
+ margin-left: 4px;
+}
+.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {
+ margin-left: auto;
+}
+.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description {
+ padding: 4px 4px 4px 8px;
+}
+.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description > *:last-child {
+ border-left-width: 1px;
+ padding-left: 4px;
+}
+.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button {
+ margin-right: 4px;
+}
+.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) {
+ margin-right: auto;
+}
+.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description {
+ padding: 4px 8px 4px 4px;
+}
+.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description > *:last-child {
+ border-right-width: 1px;
+ padding-right: 4px;
+}
+.tox .tox-anchorbar {
+ display: flex;
+ flex: 0 0 auto;
+}
+.tox .tox-bar {
+ display: flex;
+ flex: 0 0 auto;
+}
+.tox .tox-button {
+ background-color: #207ab7;
+ background-image: none;
+ background-position: 0 0;
+ background-repeat: repeat;
+ border-color: #207ab7;
+ border-radius: 3px;
+ border-style: solid;
+ border-width: 1px;
+ box-shadow: none;
+ box-sizing: border-box;
+ color: #fff;
+ cursor: pointer;
+ display: inline-block;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: bold;
+ letter-spacing: normal;
+ line-height: 24px;
+ margin: 0;
+ outline: none;
+ padding: 4px 16px;
+ text-align: center;
+ text-decoration: none;
+ text-transform: none;
+ white-space: nowrap;
+}
+.tox .tox-button[disabled] {
+ background-color: #207ab7;
+ background-image: none;
+ border-color: #207ab7;
+ box-shadow: none;
+ color: rgba(255, 255, 255, 0.5);
+ cursor: not-allowed;
+}
+.tox .tox-button:focus:not(:disabled) {
+ background-color: #1c6ca1;
+ background-image: none;
+ border-color: #1c6ca1;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-button:hover:not(:disabled) {
+ background-color: #1c6ca1;
+ background-image: none;
+ border-color: #1c6ca1;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-button:active:not(:disabled) {
+ background-color: #185d8c;
+ background-image: none;
+ border-color: #185d8c;
+ box-shadow: none;
+ color: #fff;
+}
+.tox .tox-button--secondary {
+ background-color: #f0f0f0;
+ background-image: none;
+ background-position: 0 0;
+ background-repeat: repeat;
+ border-color: #f0f0f0;
+ border-radius: 3px;
+ border-style: solid;
+ border-width: 1px;
+ box-shadow: none;
+ color: #222f3e;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: bold;
+ letter-spacing: normal;
+ outline: none;
+ padding: 4px 16px;
+ text-decoration: none;
+ text-transform: none;
+}
+.tox .tox-button--secondary[disabled] {
+ background-color: #f0f0f0;
+ background-image: none;
+ border-color: #f0f0f0;
+ box-shadow: none;
+ color: rgba(34, 47, 62, 0.5);
+}
+.tox .tox-button--secondary:focus:not(:disabled) {
+ background-color: #e3e3e3;
+ background-image: none;
+ border-color: #e3e3e3;
+ box-shadow: none;
+ color: #222f3e;
+}
+.tox .tox-button--secondary:hover:not(:disabled) {
+ background-color: #e3e3e3;
+ background-image: none;
+ border-color: #e3e3e3;
+ box-shadow: none;
+ color: #222f3e;
+}
+.tox .tox-button--secondary:active:not(:disabled) {
+ background-color: #d6d6d6;
+ background-image: none;
+ border-color: #d6d6d6;
+ box-shadow: none;
+ color: #222f3e;
+}
+.tox .tox-button--icon,
+.tox .tox-button.tox-button--icon,
+.tox .tox-button.tox-button--secondary.tox-button--icon {
+ padding: 4px;
+}
+.tox .tox-button--icon .tox-icon svg,
+.tox .tox-button.tox-button--icon .tox-icon svg,
+.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg {
+ display: block;
+ fill: currentColor;
+}
+.tox .tox-button-link {
+ background: 0;
+ border: none;
+ box-sizing: border-box;
+ cursor: pointer;
+ display: inline-block;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ font-size: 16px;
+ font-weight: normal;
+ line-height: 1.3;
+ margin: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+.tox .tox-button-link--sm {
+ font-size: 14px;
+}
+.tox .tox-button--naked {
+ background-color: transparent;
+ border-color: transparent;
+ box-shadow: unset;
+ color: #222f3e;
+}
+.tox .tox-button--naked[disabled] {
+ background-color: #f0f0f0;
+ border-color: #f0f0f0;
+ box-shadow: none;
+ color: rgba(34, 47, 62, 0.5);
+}
+.tox .tox-button--naked:hover:not(:disabled) {
+ background-color: #e3e3e3;
+ border-color: #e3e3e3;
+ box-shadow: none;
+ color: #222f3e;
+}
+.tox .tox-button--naked:focus:not(:disabled) {
+ background-color: #e3e3e3;
+ border-color: #e3e3e3;
+ box-shadow: none;
+ color: #222f3e;
+}
+.tox .tox-button--naked:active:not(:disabled) {
+ background-color: #d6d6d6;
+ border-color: #d6d6d6;
+ box-shadow: none;
+ color: #222f3e;
+}
+.tox .tox-button--naked .tox-icon svg {
+ fill: currentColor;
+}
+.tox .tox-button--naked.tox-button--icon:hover:not(:disabled) {
+ color: #222f3e;
+}
+.tox .tox-checkbox {
+ align-items: center;
+ border-radius: 3px;
+ cursor: pointer;
+ display: flex;
+ height: 36px;
+ min-width: 36px;
+}
+.tox .tox-checkbox__input {
+ /* Hide from view but visible to screen readers */
+ height: 1px;
+ overflow: hidden;
+ position: absolute;
+ top: auto;
+ width: 1px;
+}
+.tox .tox-checkbox__icons {
+ align-items: center;
+ border-radius: 3px;
+ box-shadow: 0 0 0 2px transparent;
+ box-sizing: content-box;
+ display: flex;
+ height: 24px;
+ justify-content: center;
+ padding: calc(4px - 1px);
+ width: 24px;
+}
+.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {
+ display: block;
+ fill: rgba(34, 47, 62, 0.3);
+}
+.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {
+ display: none;
+ fill: #207ab7;
+}
+.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg {
+ display: none;
+ fill: #207ab7;
+}
+.tox .tox-checkbox--disabled {
+ color: rgba(34, 47, 62, 0.5);
+ cursor: not-allowed;
+}
+.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg {
+ fill: rgba(34, 47, 62, 0.5);
+}
+.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {
+ fill: rgba(34, 47, 62, 0.5);
+}
+.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {
+ fill: rgba(34, 47, 62, 0.5);
+}
+.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {
+ display: none;
+}
+.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg {
+ display: block;
+}
+.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg {
+ display: none;
+}
+.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg {
+ display: block;
+}
+.tox input.tox-checkbox__input:focus + .tox-checkbox__icons {
+ border-radius: 3px;
+ box-shadow: inset 0 0 0 1px #207ab7;
+ padding: calc(4px - 1px);
+}
+.tox:not([dir=rtl]) .tox-checkbox__label {
+ margin-left: 4px;
+}
+.tox:not([dir=rtl]) .tox-checkbox__input {
+ left: -10000px;
+}
+.tox:not([dir=rtl]) .tox-bar .tox-checkbox {
+ margin-left: 4px;
+}
+.tox[dir=rtl] .tox-checkbox__label {
+ margin-right: 4px;
+}
+.tox[dir=rtl] .tox-checkbox__input {
+ right: -10000px;
+}
+.tox[dir=rtl] .tox-bar .tox-checkbox {
+ margin-right: 4px;
+}
+.tox {
+ /* stylelint-disable-next-line no-descending-specificity */
+}
+.tox .tox-collection--toolbar .tox-collection__group {
+ display: flex;
+ padding: 0;
+}
+.tox .tox-collection--grid .tox-collection__group {
+ display: flex;
+ flex-wrap: wrap;
+ max-height: 208px;
+ overflow-x: hidden;
+ overflow-y: auto;
+ padding: 0;
+}
+.tox .tox-collection--list .tox-collection__group {
+ border-bottom-width: 0;
+ border-color: #cccccc;
+ border-left-width: 0;
+ border-right-width: 0;
+ border-style: solid;
+ border-top-width: 1px;
+ padding: 4px 0;
+}
+.tox .tox-collection--list .tox-collection__group:first-child {
+ border-top-width: 0;
+}
+.tox .tox-collection__group-heading {
+ background-color: #e6e6e6;
+ color: rgba(34, 47, 62, 0.7);
+ cursor: default;
+ font-size: 12px;
+ font-style: normal;
+ font-weight: normal;
+ margin-bottom: 4px;
+ margin-top: -4px;
+ padding: 4px 8px;
+ text-transform: none;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.tox .tox-collection__item {
+ align-items: center;
+ color: #222f3e;
+ cursor: pointer;
+ display: flex;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.tox .tox-collection--list .tox-collection__item {
+ padding: 4px 8px;
+}
+.tox .tox-collection--toolbar .tox-collection__item {
+ border-radius: 3px;
+ padding: 4px;
+}
+.tox .tox-collection--grid .tox-collection__item {
+ border-radius: 3px;
+ padding: 4px;
+}
+.tox .tox-collection--list .tox-collection__item--enabled {
+ background-color: #fff;
+ color: #222f3e;
+}
+.tox .tox-collection--list .tox-collection__item--active {
+ background-color: #dee0e2;
+}
+.tox .tox-collection--toolbar .tox-collection__item--enabled {
+ background-color: #c8cbcf;
+ color: #222f3e;
+}
+.tox .tox-collection--toolbar .tox-collection__item--active {
+ background-color: #dee0e2;
+}
+.tox .tox-collection--grid .tox-collection__item--enabled {
+ background-color: #c8cbcf;
+ color: #222f3e;
+}
+.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled) {
+ background-color: #dee0e2;
+ color: #222f3e;
+}
+.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) {
+ color: #222f3e;
+}
+.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled) {
+ color: #222f3e;
+}
+.tox .tox-collection__item-icon,
+.tox .tox-collection__item-checkmark {
+ align-items: center;
+ display: flex;
+ height: 24px;
+ justify-content: center;
+ width: 24px;
+}
+.tox .tox-collection__item-icon svg,
+.tox .tox-collection__item-checkmark svg {
+ fill: currentColor;
+}
+.tox .tox-collection--toolbar-lg .tox-collection__item-icon {
+ height: 48px;
+ width: 48px;
+}
+.tox .tox-collection__item-label {
+ color: currentColor;
+ display: inline-block;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 24px;
+ text-transform: none;
+ word-break: break-all;
+}
+.tox .tox-collection__item-accessory {
+ color: rgba(34, 47, 62, 0.7);
+ display: inline-block;
+ font-size: 14px;
+ height: 24px;
+ line-height: 24px;
+ text-transform: none;
+}
+.tox .tox-collection__item-caret {
+ align-items: center;
+ display: flex;
+ min-height: 24px;
+}
+.tox .tox-collection__item-caret::after {
+ content: '';
+ font-size: 0;
+ min-height: inherit;
+}
+.tox .tox-collection__item-caret svg {
+ fill: #222f3e;
+}
+.tox .tox-collection__item--state-disabled {
+ background-color: transparent;
+ color: rgba(34, 47, 62, 0.5);
+ cursor: not-allowed;
+}
+.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg {
+ fill: rgba(34, 47, 62, 0.5);
+}
+.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg {
+ display: none;
+}
+.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory + .tox-collection__item-checkmark {
+ display: none;
+}
+.tox .tox-collection--horizontal {
+ background-color: #fff;
+ border: 1px solid #cccccc;
+ border-radius: 3px;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ display: flex;
+ flex: 0 0 auto;
+ flex-shrink: 0;
+ flex-wrap: nowrap;
+ margin-bottom: 0;
+ overflow-x: auto;
+ padding: 0;
+}
+.tox .tox-collection--horizontal .tox-collection__group {
+ align-items: center;
+ display: flex;
+ flex-wrap: nowrap;
+ margin: 0;
+ padding: 0 4px;
+}
+.tox .tox-collection--horizontal .tox-collection__item {
+ height: 34px;
+ margin: 2px 0 3px 0;
+ padding: 0 4px;
+}
+.tox .tox-collection--horizontal .tox-collection__item-label {
+ white-space: nowrap;
+}
+.tox .tox-collection--horizontal .tox-collection__item-caret {
+ margin-left: 4px;
+}
+.tox .tox-collection__item-container {
+ display: flex;
+}
+.tox .tox-collection__item-container--row {
+ align-items: center;
+ flex: 1 1 auto;
+ flex-direction: row;
+}
+.tox .tox-collection__item-container--row.tox-collection__item-container--align-left {
+ margin-right: auto;
+}
+.tox .tox-collection__item-container--row.tox-collection__item-container--align-right {
+ justify-content: flex-end;
+ margin-left: auto;
+}
+.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top {
+ align-items: flex-start;
+ margin-bottom: auto;
+}
+.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle {
+ align-items: center;
+}
+.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom {
+ align-items: flex-end;
+ margin-top: auto;
+}
+.tox .tox-collection__item-container--column {
+ -ms-grid-row-align: center;
+ align-self: center;
+ flex: 1 1 auto;
+ flex-direction: column;
+}
+.tox .tox-collection__item-container--column.tox-collection__item-container--align-left {
+ align-items: flex-start;
+}
+.tox .tox-collection__item-container--column.tox-collection__item-container--align-right {
+ align-items: flex-end;
+}
+.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top {
+ align-self: flex-start;
+}
+.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle {
+ -ms-grid-row-align: center;
+ align-self: center;
+}
+.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom {
+ align-self: flex-end;
+}
+.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {
+ border-right: 1px solid #cccccc;
+}
+.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > *:not(:first-child) {
+ margin-left: 8px;
+}
+.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {
+ margin-left: 4px;
+}
+.tox:not([dir=rtl]) .tox-collection__item-accessory {
+ margin-left: 16px;
+ text-align: right;
+}
+.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret {
+ margin-left: 16px;
+}
+.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type) {
+ border-left: 1px solid #cccccc;
+}
+.tox[dir=rtl] .tox-collection--list .tox-collection__item > *:not(:first-child) {
+ margin-right: 8px;
+}
+.tox[dir=rtl] .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child {
+ margin-right: 4px;
+}
+.tox[dir=rtl] .tox-collection__item-accessory {
+ margin-right: 16px;
+ text-align: left;
+}
+.tox[dir=rtl] .tox-collection .tox-collection__item-caret {
+ margin-right: 16px;
+ transform: rotateY(180deg);
+}
+.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret {
+ margin-right: 4px;
+}
+.tox .tox-color-picker-container {
+ display: flex;
+ flex-direction: row;
+ height: 225px;
+ margin: 0;
+}
+.tox .tox-sv-palette {
+ box-sizing: border-box;
+ display: flex;
+ height: 100%;
+}
+.tox .tox-sv-palette-spectrum {
+ height: 100%;
+}
+.tox .tox-sv-palette,
+.tox .tox-sv-palette-spectrum {
+ width: 225px;
+}
+.tox .tox-sv-palette-thumb {
+ background: none;
+ border: 1px solid black;
+ border-radius: 50%;
+ box-sizing: content-box;
+ height: 12px;
+ position: absolute;
+ width: 12px;
+}
+.tox .tox-sv-palette-inner-thumb {
+ border: 1px solid white;
+ border-radius: 50%;
+ height: 10px;
+ position: absolute;
+ width: 10px;
+}
+.tox .tox-hue-slider {
+ box-sizing: border-box;
+ height: 100%;
+ width: 25px;
+}
+.tox .tox-hue-slider-spectrum {
+ background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00);
+ height: 100%;
+ width: 100%;
+}
+.tox .tox-hue-slider,
+.tox .tox-hue-slider-spectrum {
+ width: 20px;
+}
+.tox .tox-hue-slider-thumb {
+ background: white;
+ border: 1px solid black;
+ box-sizing: content-box;
+ height: 4px;
+ width: 100%;
+}
+.tox .tox-rgb-form {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+}
+.tox .tox-rgb-form div {
+ align-items: center;
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 5px;
+ width: inherit;
+}
+.tox .tox-rgb-form input {
+ width: 6em;
+}
+.tox .tox-rgb-form input.tox-invalid {
+ /* Need !important to override Chrome's focus styling unfortunately */
+ border: 1px solid red !important;
+}
+.tox .tox-rgb-form .tox-rgba-preview {
+ border: 1px solid black;
+ flex-grow: 2;
+ margin-bottom: 0;
+}
+.tox:not([dir=rtl]) .tox-sv-palette {
+ margin-right: 15px;
+}
+.tox:not([dir=rtl]) .tox-hue-slider {
+ margin-right: 15px;
+}
+.tox:not([dir=rtl]) .tox-hue-slider-thumb {
+ margin-left: -1px;
+}
+.tox:not([dir=rtl]) .tox-rgb-form label {
+ margin-right: 0.5em;
+}
+.tox[dir=rtl] .tox-sv-palette {
+ margin-left: 15px;
+}
+.tox[dir=rtl] .tox-hue-slider {
+ margin-left: 15px;
+}
+.tox[dir=rtl] .tox-hue-slider-thumb {
+ margin-right: -1px;
+}
+.tox[dir=rtl] .tox-rgb-form label {
+ margin-left: 0.5em;
+}
+.tox .tox-toolbar .tox-swatches,
+.tox .tox-toolbar__primary .tox-swatches,
+.tox .tox-toolbar__overflow .tox-swatches {
+ margin: 2px 0 3px 4px;
+}
+.tox .tox-collection--list .tox-collection__group .tox-swatches-menu {
+ border: 0;
+ margin: -4px 0;
+}
+.tox .tox-swatches__row {
+ display: flex;
+}
+.tox .tox-swatch {
+ height: 30px;
+ transition: transform 0.15s, box-shadow 0.15s;
+ width: 30px;
+}
+.tox .tox-swatch:hover,
+.tox .tox-swatch:focus {
+ box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset;
+ transform: scale(0.8);
+}
+.tox .tox-swatch--remove {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+}
+.tox .tox-swatch--remove svg path {
+ stroke: #e74c3c;
+}
+.tox .tox-swatches__picker-btn {
+ align-items: center;
+ background-color: transparent;
+ border: 0;
+ cursor: pointer;
+ display: flex;
+ height: 30px;
+ justify-content: center;
+ outline: none;
+ padding: 0;
+ width: 30px;
+}
+.tox .tox-swatches__picker-btn svg {
+ height: 24px;
+ width: 24px;
+}
+.tox .tox-swatches__picker-btn:hover {
+ background: #dee0e2;
+}
+.tox:not([dir=rtl]) .tox-swatches__picker-btn {
+ margin-left: auto;
+}
+.tox[dir=rtl] .tox-swatches__picker-btn {
+ margin-right: auto;
+}
+.tox .tox-comment-thread {
+ background: #fff;
+ position: relative;
+}
+.tox .tox-comment-thread > *:not(:first-child) {
+ margin-top: 8px;
+}
+.tox .tox-comment {
+ background: #fff;
+ border: 1px solid #cccccc;
+ border-radius: 3px;
+ box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1);
+ padding: 8px 8px 16px 8px;
+ position: relative;
+}
+.tox .tox-comment__header {
+ align-items: center;
+ color: #222f3e;
+ display: flex;
+ justify-content: space-between;
+}
+.tox .tox-comment__date {
+ color: rgba(34, 47, 62, 0.7);
+ font-size: 12px;
+}
+.tox .tox-comment__body {
+ color: #222f3e;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1.3;
+ margin-top: 8px;
+ position: relative;
+ text-transform: initial;
+}
+.tox .tox-comment__body textarea {
+ resize: none;
+ white-space: normal;
+ width: 100%;
+}
+.tox .tox-comment__expander {
+ padding-top: 8px;
+}
+.tox .tox-comment__expander p {
+ color: rgba(34, 47, 62, 0.7);
+ font-size: 14px;
+ font-style: normal;
+}
+.tox .tox-comment__body p {
+ margin: 0;
+}
+.tox .tox-comment__buttonspacing {
+ padding-top: 16px;
+ text-align: center;
+}
+.tox .tox-comment-thread__overlay::after {
+ background: #fff;
+ bottom: 0;
+ content: "";
+ display: flex;
+ left: 0;
+ opacity: 0.9;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 5;
+}
+.tox .tox-comment__reply {
+ display: flex;
+ flex-shrink: 0;
+ flex-wrap: wrap;
+ justify-content: flex-end;
+ margin-top: 8px;
+}
+.tox .tox-comment__reply > *:first-child {
+ margin-bottom: 8px;
+ width: 100%;
+}
+.tox .tox-comment__edit {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-end;
+ margin-top: 16px;
+}
+.tox .tox-comment__gradient::after {
+ background: linear-gradient(rgba(255, 255, 255, 0), #fff);
+ bottom: 0;
+ content: "";
+ display: block;
+ height: 5em;
+ margin-top: -40px;
+ position: absolute;
+ width: 100%;
+}
+.tox .tox-comment__overlay {
+ background: #fff;
+ bottom: 0;
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+ left: 0;
+ opacity: 0.9;
+ position: absolute;
+ right: 0;
+ text-align: center;
+ top: 0;
+ z-index: 5;
+}
+.tox .tox-comment__loading-text {
+ align-items: center;
+ color: #222f3e;
+ display: flex;
+ flex-direction: column;
+ position: relative;
+}
+.tox .tox-comment__loading-text > div {
+ padding-bottom: 16px;
+}
+.tox .tox-comment__overlaytext {
+ bottom: 0;
+ flex-direction: column;
+ font-size: 14px;
+ left: 0;
+ padding: 1em;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 10;
+}
+.tox .tox-comment__overlaytext p {
+ background-color: #fff;
+ box-shadow: 0 0 8px 8px #fff;
+ color: #222f3e;
+ text-align: center;
+}
+.tox .tox-comment__overlaytext div:nth-of-type(2) {
+ font-size: 0.8em;
+}
+.tox .tox-comment__busy-spinner {
+ align-items: center;
+ background-color: #fff;
+ bottom: 0;
+ display: flex;
+ justify-content: center;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 20;
+}
+.tox .tox-comment__scroll {
+ display: flex;
+ flex-direction: column;
+ flex-shrink: 1;
+ overflow: auto;
+}
+.tox .tox-conversations {
+ margin: 8px;
+}
+.tox:not([dir=rtl]) .tox-comment__edit {
+ margin-left: 8px;
+}
+.tox:not([dir=rtl]) .tox-comment__buttonspacing > *:last-child,
+.tox:not([dir=rtl]) .tox-comment__edit > *:last-child,
+.tox:not([dir=rtl]) .tox-comment__reply > *:last-child {
+ margin-left: 8px;
+}
+.tox[dir=rtl] .tox-comment__edit {
+ margin-right: 8px;
+}
+.tox[dir=rtl] .tox-comment__buttonspacing > *:last-child,
+.tox[dir=rtl] .tox-comment__edit > *:last-child,
+.tox[dir=rtl] .tox-comment__reply > *:last-child {
+ margin-right: 8px;
+}
+.tox .tox-user {
+ align-items: center;
+ display: flex;
+}
+.tox .tox-user__avatar svg {
+ fill: rgba(34, 47, 62, 0.7);
+}
+.tox .tox-user__name {
+ color: rgba(34, 47, 62, 0.7);
+ font-size: 12px;
+ font-style: normal;
+ font-weight: bold;
+ text-transform: uppercase;
+}
+.tox:not([dir=rtl]) .tox-user__avatar svg {
+ margin-right: 8px;
+}
+.tox:not([dir=rtl]) .tox-user__avatar + .tox-user__name {
+ margin-left: 8px;
+}
+.tox[dir=rtl] .tox-user__avatar svg {
+ margin-left: 8px;
+}
+.tox[dir=rtl] .tox-user__avatar + .tox-user__name {
+ margin-right: 8px;
+}
+.tox .tox-dialog-wrap {
+ align-items: center;
+ bottom: 0;
+ display: flex;
+ justify-content: center;
+ left: 0;
+ position: fixed;
+ right: 0;
+ top: 0;
+ z-index: 1100;
+}
+.tox .tox-dialog-wrap__backdrop {
+ background-color: rgba(255, 255, 255, 0.75);
+ bottom: 0;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 1;
+}
+.tox .tox-dialog-wrap__backdrop--opaque {
+ background-color: #fff;
+}
+.tox .tox-dialog {
+ background-color: #fff;
+ border-color: #cccccc;
+ border-radius: 3px;
+ border-style: solid;
+ border-width: 1px;
+ box-shadow: 0 16px 16px -10px rgba(34, 47, 62, 0.15), 0 0 40px 1px rgba(34, 47, 62, 0.15);
+ display: flex;
+ flex-direction: column;
+ max-height: 100%;
+ max-width: 480px;
+ overflow: hidden;
+ position: relative;
+ width: 95vw;
+ z-index: 2;
+}
+@media only screen and (max-width:767px) {
+ body:not(.tox-force-desktop) .tox .tox-dialog {
+ align-self: flex-start;
+ margin: 8px auto;
+ width: calc(100vw - 16px);
+ }
+}
+.tox .tox-dialog-inline {
+ z-index: 1100;
+}
+.tox .tox-dialog__header {
+ align-items: center;
+ background-color: #fff;
+ border-bottom: none;
+ color: #222f3e;
+ display: flex;
+ font-size: 16px;
+ justify-content: space-between;
+ padding: 8px 16px 0 16px;
+ position: relative;
+}
+.tox .tox-dialog__header .tox-button {
+ z-index: 1;
+}
+.tox .tox-dialog__draghandle {
+ cursor: grab;
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.tox .tox-dialog__draghandle:active {
+ cursor: grabbing;
+}
+.tox .tox-dialog__dismiss {
+ margin-left: auto;
+}
+.tox .tox-dialog__title {
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ font-size: 20px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1.3;
+ margin: 0;
+ text-transform: none;
+}
+.tox .tox-dialog__body {
+ color: #222f3e;
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+ font-size: 16px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1.3;
+ min-width: 0;
+ text-align: left;
+ text-transform: none;
+}
+@media only screen and (max-width:767px) {
+ body:not(.tox-force-desktop) .tox .tox-dialog__body {
+ flex-direction: column;
+ }
+}
+.tox .tox-dialog__body-nav {
+ align-items: flex-start;
+ display: flex;
+ flex-direction: column;
+ padding: 16px 16px;
+}
+@media only screen and (max-width:767px) {
+ body:not(.tox-force-desktop) .tox .tox-dialog__body-nav {
+ flex-direction: row;
+ -webkit-overflow-scrolling: touch;
+ overflow-x: auto;
+ padding-bottom: 0;
+ }
+}
+.tox .tox-dialog__body-nav-item {
+ border-bottom: 2px solid transparent;
+ color: rgba(34, 47, 62, 0.7);
+ display: inline-block;
+ font-size: 14px;
+ line-height: 1.3;
+ margin-bottom: 8px;
+ text-decoration: none;
+ white-space: nowrap;
+}
+.tox .tox-dialog__body-nav-item:focus {
+ background-color: rgba(32, 122, 183, 0.1);
+}
+.tox .tox-dialog__body-nav-item--active {
+ border-bottom: 2px solid #207ab7;
+ color: #207ab7;
+}
+.tox .tox-dialog__body-content {
+ box-sizing: border-box;
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ -ms-flex-preferred-size: auto;
+ max-height: 650px;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ padding: 16px 16px;
+}
+.tox .tox-dialog__body-content > * {
+ margin-bottom: 0;
+ margin-top: 16px;
+}
+.tox .tox-dialog__body-content > *:first-child {
+ margin-top: 0;
+}
+.tox .tox-dialog__body-content > *:last-child {
+ margin-bottom: 0;
+}
+.tox .tox-dialog__body-content > *:only-child {
+ margin-bottom: 0;
+ margin-top: 0;
+}
+.tox .tox-dialog__body-content a {
+ color: #207ab7;
+ cursor: pointer;
+ text-decoration: none;
+}
+.tox .tox-dialog__body-content a:hover,
+.tox .tox-dialog__body-content a:focus {
+ color: #185d8c;
+ text-decoration: none;
+}
+.tox .tox-dialog__body-content a:active {
+ color: #185d8c;
+ text-decoration: none;
+}
+.tox .tox-dialog__body-content svg {
+ fill: #222f3e;
+}
+.tox .tox-dialog__body-content ul {
+ display: block;
+ list-style-type: disc;
+ margin-bottom: 16px;
+ -webkit-margin-end: 0;
+ margin-inline-end: 0;
+ -webkit-margin-start: 0;
+ margin-inline-start: 0;
+ -webkit-padding-start: 2.5rem;
+ padding-inline-start: 2.5rem;
+}
+.tox .tox-dialog__body-content .tox-form__group h1 {
+ color: #222f3e;
+ font-size: 20px;
+ font-style: normal;
+ font-weight: bold;
+ letter-spacing: normal;
+ margin-bottom: 16px;
+ margin-top: 2rem;
+ text-transform: none;
+}
+.tox .tox-dialog__body-content .tox-form__group h2 {
+ color: #222f3e;
+ font-size: 16px;
+ font-style: normal;
+ font-weight: bold;
+ letter-spacing: normal;
+ margin-bottom: 16px;
+ margin-top: 2rem;
+ text-transform: none;
+}
+.tox .tox-dialog__body-content .tox-form__group p {
+ margin-bottom: 16px;
+}
+.tox .tox-dialog__body-content .tox-form__group h1:first-child,
+.tox .tox-dialog__body-content .tox-form__group h2:first-child,
+.tox .tox-dialog__body-content .tox-form__group p:first-child {
+ margin-top: 0;
+}
+.tox .tox-dialog__body-content .tox-form__group h1:last-child,
+.tox .tox-dialog__body-content .tox-form__group h2:last-child,
+.tox .tox-dialog__body-content .tox-form__group p:last-child {
+ margin-bottom: 0;
+}
+.tox .tox-dialog__body-content .tox-form__group h1:only-child,
+.tox .tox-dialog__body-content .tox-form__group h2:only-child,
+.tox .tox-dialog__body-content .tox-form__group p:only-child {
+ margin-bottom: 0;
+ margin-top: 0;
+}
+.tox .tox-dialog--width-lg {
+ height: 650px;
+ max-width: 1200px;
+}
+.tox .tox-dialog--width-md {
+ max-width: 800px;
+}
+.tox .tox-dialog--width-md .tox-dialog__body-content {
+ overflow: auto;
+}
+.tox .tox-dialog__body-content--centered {
+ text-align: center;
+}
+.tox .tox-dialog__footer {
+ align-items: center;
+ background-color: #fff;
+ border-top: 1px solid #cccccc;
+ display: flex;
+ justify-content: space-between;
+ padding: 8px 16px;
+}
+.tox .tox-dialog__footer-start,
+.tox .tox-dialog__footer-end {
+ display: flex;
+}
+.tox .tox-dialog__busy-spinner {
+ align-items: center;
+ background-color: rgba(255, 255, 255, 0.75);
+ bottom: 0;
+ display: flex;
+ justify-content: center;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 3;
+}
+.tox .tox-dialog__table {
+ border-collapse: collapse;
+ width: 100%;
+}
+.tox .tox-dialog__table thead th {
+ font-weight: bold;
+ padding-bottom: 8px;
+}
+.tox .tox-dialog__table tbody tr {
+ border-bottom: 1px solid #cccccc;
+}
+.tox .tox-dialog__table tbody tr:last-child {
+ border-bottom: none;
+}
+.tox .tox-dialog__table td {
+ padding-bottom: 8px;
+ padding-top: 8px;
+}
+.tox .tox-dialog__popups {
+ position: absolute;
+ width: 100%;
+ z-index: 1100;
+}
+.tox .tox-dialog__body-iframe {
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-dialog__body-iframe .tox-navobj {
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2) {
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+ height: 100%;
+}
+.tox .tox-dialog-dock-fadeout {
+ opacity: 0;
+ visibility: hidden;
+}
+.tox .tox-dialog-dock-fadein {
+ opacity: 1;
+ visibility: visible;
+}
+.tox .tox-dialog-dock-transition {
+ transition: visibility 0s linear 0.3s, opacity 0.3s ease;
+}
+.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein {
+ transition-delay: 0s;
+}
+.tox.tox-platform-ie {
+ /* IE11 CSS styles go here */
+}
+.tox.tox-platform-ie .tox-dialog-wrap {
+ position: -ms-device-fixed;
+}
+@media only screen and (max-width:767px) {
+ body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav {
+ margin-right: 0;
+ }
+}
+@media only screen and (max-width:767px) {
+ body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child) {
+ margin-left: 8px;
+ }
+}
+.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start > *,
+.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end > * {
+ margin-left: 8px;
+}
+.tox[dir=rtl] .tox-dialog__body {
+ text-align: right;
+}
+@media only screen and (max-width:767px) {
+ body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav {
+ margin-left: 0;
+ }
+}
+@media only screen and (max-width:767px) {
+ body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child) {
+ margin-right: 8px;
+ }
+}
+.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start > *,
+.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end > * {
+ margin-right: 8px;
+}
+body.tox-dialog__disable-scroll {
+ overflow: hidden;
+}
+.tox .tox-dropzone-container {
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-dropzone {
+ align-items: center;
+ background: #fff;
+ border: 2px dashed #cccccc;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+ justify-content: center;
+ min-height: 100px;
+ padding: 10px;
+}
+.tox .tox-dropzone p {
+ color: rgba(34, 47, 62, 0.7);
+ margin: 0 0 16px 0;
+}
+.tox .tox-edit-area {
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+ overflow: hidden;
+ position: relative;
+}
+.tox .tox-edit-area__iframe {
+ background-color: #fff;
+ border: 0;
+ box-sizing: border-box;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+ height: 100%;
+ position: absolute;
+ width: 100%;
+}
+.tox.tox-inline-edit-area {
+ border: 1px dotted #cccccc;
+}
+.tox .tox-editor-container {
+ display: flex;
+ flex: 1 1 auto;
+ flex-direction: column;
+ overflow: hidden;
+}
+.tox .tox-editor-header {
+ z-index: 1;
+}
+.tox:not(.tox-tinymce-inline) .tox-editor-header {
+ box-shadow: none;
+ transition: box-shadow 0.5s;
+}
+.tox.tox-tinymce--toolbar-bottom .tox-editor-header,
+.tox.tox-tinymce-inline .tox-editor-header {
+ margin-bottom: -1px;
+}
+.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header {
+ background-color: transparent;
+ box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25);
+}
+.tox-editor-dock-fadeout {
+ opacity: 0;
+ visibility: hidden;
+}
+.tox-editor-dock-fadein {
+ opacity: 1;
+ visibility: visible;
+}
+.tox-editor-dock-transition {
+ transition: visibility 0s linear 0.25s, opacity 0.25s ease;
+}
+.tox-editor-dock-transition.tox-editor-dock-fadein {
+ transition-delay: 0s;
+}
+.tox .tox-control-wrap {
+ flex: 1;
+ position: relative;
+}
+.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,
+.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,
+.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid {
+ display: none;
+}
+.tox .tox-control-wrap svg {
+ display: block;
+}
+.tox .tox-control-wrap__status-icon-wrap {
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+}
+.tox .tox-control-wrap__status-icon-invalid svg {
+ fill: #c00;
+}
+.tox .tox-control-wrap__status-icon-unknown svg {
+ fill: orange;
+}
+.tox .tox-control-wrap__status-icon-valid svg {
+ fill: green;
+}
+.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,
+.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,
+.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield {
+ padding-right: 32px;
+}
+.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap {
+ right: 4px;
+}
+.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,
+.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,
+.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield {
+ padding-left: 32px;
+}
+.tox[dir=rtl] .tox-control-wrap__status-icon-wrap {
+ left: 4px;
+}
+.tox .tox-autocompleter {
+ max-width: 25em;
+}
+.tox .tox-autocompleter .tox-menu {
+ max-width: 25em;
+}
+.tox .tox-autocompleter .tox-autocompleter-highlight {
+ font-weight: bold;
+}
+.tox .tox-color-input {
+ display: flex;
+ position: relative;
+ z-index: 1;
+}
+.tox .tox-color-input .tox-textfield {
+ z-index: -1;
+}
+.tox .tox-color-input span {
+ border-color: rgba(34, 47, 62, 0.2);
+ border-radius: 3px;
+ border-style: solid;
+ border-width: 1px;
+ box-shadow: none;
+ box-sizing: border-box;
+ height: 24px;
+ position: absolute;
+ top: 6px;
+ width: 24px;
+}
+.tox .tox-color-input span:hover:not([aria-disabled=true]),
+.tox .tox-color-input span:focus:not([aria-disabled=true]) {
+ border-color: #207ab7;
+ cursor: pointer;
+}
+.tox .tox-color-input span::before {
+ background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(-45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%), linear-gradient(-45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%);
+ background-position: 0 0, 0 6px, 6px -6px, -6px 0;
+ background-size: 12px 12px;
+ border: 1px solid #fff;
+ border-radius: 3px;
+ box-sizing: border-box;
+ content: '';
+ height: 24px;
+ left: -1px;
+ position: absolute;
+ top: -1px;
+ width: 24px;
+ z-index: -1;
+}
+.tox .tox-color-input span[aria-disabled=true] {
+ cursor: not-allowed;
+}
+.tox:not([dir=rtl]) .tox-color-input {
+ /* stylelint-disable-next-line no-descending-specificity */
+}
+.tox:not([dir=rtl]) .tox-color-input .tox-textfield {
+ padding-left: 36px;
+}
+.tox:not([dir=rtl]) .tox-color-input span {
+ left: 6px;
+}
+.tox[dir="rtl"] .tox-color-input {
+ /* stylelint-disable-next-line no-descending-specificity */
+}
+.tox[dir="rtl"] .tox-color-input .tox-textfield {
+ padding-right: 36px;
+}
+.tox[dir="rtl"] .tox-color-input span {
+ right: 6px;
+}
+.tox .tox-label,
+.tox .tox-toolbar-label {
+ color: rgba(34, 47, 62, 0.7);
+ display: block;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1.3;
+ padding: 0 8px 0 0;
+ text-transform: none;
+ white-space: nowrap;
+}
+.tox .tox-toolbar-label {
+ padding: 0 8px;
+}
+.tox[dir=rtl] .tox-label {
+ padding: 0 0 0 8px;
+}
+.tox .tox-form {
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-form__group {
+ box-sizing: border-box;
+ margin-bottom: 4px;
+}
+.tox .tox-form-group--maximize {
+ flex: 1;
+}
+.tox .tox-form__group--error {
+ color: #c00;
+}
+.tox .tox-form__group--collection {
+ display: flex;
+}
+.tox .tox-form__grid {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ justify-content: space-between;
+}
+.tox .tox-form__grid--2col > .tox-form__group {
+ width: calc(50% - (8px / 2));
+}
+.tox .tox-form__grid--3col > .tox-form__group {
+ width: calc(100% / 3 - (8px / 2));
+}
+.tox .tox-form__grid--4col > .tox-form__group {
+ width: calc(25% - (8px / 2));
+}
+.tox .tox-form__controls-h-stack {
+ align-items: center;
+ display: flex;
+}
+.tox .tox-form__group--inline {
+ align-items: center;
+ display: flex;
+}
+.tox .tox-form__group--stretched {
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-form__group--stretched .tox-textarea {
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-form__group--stretched .tox-navobj {
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-form__group--stretched .tox-navobj :nth-child(2) {
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+ height: 100%;
+}
+.tox:not([dir=rtl]) .tox-form__controls-h-stack > *:not(:first-child) {
+ margin-left: 4px;
+}
+.tox[dir=rtl] .tox-form__controls-h-stack > *:not(:first-child) {
+ margin-right: 4px;
+}
+.tox .tox-lock.tox-locked .tox-lock-icon__unlock,
+.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock {
+ display: none;
+}
+.tox .tox-textfield,
+.tox .tox-toolbar-textfield,
+.tox .tox-listboxfield .tox-listbox--select,
+.tox .tox-textarea {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background-color: #fff;
+ border-color: #cccccc;
+ border-radius: 3px;
+ border-style: solid;
+ border-width: 1px;
+ box-shadow: none;
+ box-sizing: border-box;
+ color: #222f3e;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ font-size: 16px;
+ line-height: 24px;
+ margin: 0;
+ min-height: 34px;
+ outline: none;
+ padding: 5px 4.75px;
+ resize: none;
+ width: 100%;
+}
+.tox .tox-textfield[disabled],
+.tox .tox-textarea[disabled] {
+ background-color: #f2f2f2;
+ color: rgba(34, 47, 62, 0.85);
+ cursor: not-allowed;
+}
+.tox .tox-textfield:focus,
+.tox .tox-listboxfield .tox-listbox--select:focus,
+.tox .tox-textarea:focus {
+ background-color: #fff;
+ border-color: #207ab7;
+ box-shadow: none;
+ outline: none;
+}
+.tox .tox-toolbar-textfield {
+ border-width: 0;
+ margin-bottom: 3px;
+ margin-top: 2px;
+ max-width: 250px;
+}
+.tox .tox-naked-btn {
+ background-color: transparent;
+ border: 0;
+ border-color: transparent;
+ box-shadow: unset;
+ color: #207ab7;
+ cursor: pointer;
+ display: block;
+ margin: 0;
+ padding: 0;
+}
+.tox .tox-naked-btn svg {
+ display: block;
+ fill: #222f3e;
+}
+.tox:not([dir=rtl]) .tox-toolbar-textfield + * {
+ margin-left: 4px;
+}
+.tox[dir=rtl] .tox-toolbar-textfield + * {
+ margin-right: 4px;
+}
+.tox .tox-listboxfield {
+ cursor: pointer;
+ position: relative;
+}
+.tox .tox-listboxfield .tox-listbox--select[disabled] {
+ background-color: #f2f2f2;
+ color: rgba(34, 47, 62, 0.85);
+ cursor: not-allowed;
+}
+.tox .tox-listbox__select-label {
+ cursor: default;
+ flex: 1;
+ margin: 0 4px;
+}
+.tox .tox-listbox__select-chevron {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ width: 16px;
+}
+.tox .tox-listbox__select-chevron svg {
+ fill: #222f3e;
+}
+.tox .tox-listboxfield .tox-listbox--select {
+ align-items: center;
+ display: flex;
+}
+.tox:not([dir=rtl]) .tox-listboxfield svg {
+ right: 8px;
+}
+.tox[dir=rtl] .tox-listboxfield svg {
+ left: 8px;
+}
+.tox .tox-selectfield {
+ cursor: pointer;
+ position: relative;
+}
+.tox .tox-selectfield select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background-color: #fff;
+ border-color: #cccccc;
+ border-radius: 3px;
+ border-style: solid;
+ border-width: 1px;
+ box-shadow: none;
+ box-sizing: border-box;
+ color: #222f3e;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
+ font-size: 16px;
+ line-height: 24px;
+ margin: 0;
+ min-height: 34px;
+ outline: none;
+ padding: 5px 4.75px;
+ resize: none;
+ width: 100%;
+}
+.tox .tox-selectfield select[disabled] {
+ background-color: #f2f2f2;
+ color: rgba(34, 47, 62, 0.85);
+ cursor: not-allowed;
+}
+.tox .tox-selectfield select::-ms-expand {
+ display: none;
+}
+.tox .tox-selectfield select:focus {
+ background-color: #fff;
+ border-color: #207ab7;
+ box-shadow: none;
+ outline: none;
+}
+.tox .tox-selectfield svg {
+ pointer-events: none;
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+}
+.tox:not([dir=rtl]) .tox-selectfield select[size="0"],
+.tox:not([dir=rtl]) .tox-selectfield select[size="1"] {
+ padding-right: 24px;
+}
+.tox:not([dir=rtl]) .tox-selectfield svg {
+ right: 8px;
+}
+.tox[dir=rtl] .tox-selectfield select[size="0"],
+.tox[dir=rtl] .tox-selectfield select[size="1"] {
+ padding-left: 24px;
+}
+.tox[dir=rtl] .tox-selectfield svg {
+ left: 8px;
+}
+.tox .tox-textarea {
+ -webkit-appearance: textarea;
+ -moz-appearance: textarea;
+ appearance: textarea;
+ white-space: pre-wrap;
+}
+.tox-fullscreen {
+ border: 0;
+ height: 100%;
+ margin: 0;
+ overflow: hidden;
+ -ms-scroll-chaining: none;
+ overscroll-behavior: none;
+ padding: 0;
+ touch-action: pinch-zoom;
+ width: 100%;
+}
+.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
+ display: none;
+}
+.tox.tox-tinymce.tox-fullscreen,
+.tox-shadowhost.tox-fullscreen {
+ left: 0;
+ position: fixed;
+ top: 0;
+ z-index: 1200;
+}
+.tox.tox-tinymce.tox-fullscreen {
+ background-color: transparent;
+}
+.tox-fullscreen .tox.tox-tinymce-aux,
+.tox-fullscreen ~ .tox.tox-tinymce-aux {
+ z-index: 1201;
+}
+.tox .tox-help__more-link {
+ list-style: none;
+ margin-top: 1em;
+}
+.tox .tox-image-tools {
+ width: 100%;
+}
+.tox .tox-image-tools__toolbar {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+}
+.tox .tox-image-tools__image {
+ background-color: #666;
+ height: 380px;
+ overflow: auto;
+ position: relative;
+ width: 100%;
+}
+.tox .tox-image-tools__image,
+.tox .tox-image-tools__image + .tox-image-tools__toolbar {
+ margin-top: 8px;
+}
+.tox .tox-image-tools__image-bg {
+ background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==);
+}
+.tox .tox-image-tools__toolbar > .tox-spacer {
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-croprect-block {
+ background: black;
+ filter: alpha(opacity=50);
+ opacity: 0.5;
+ position: absolute;
+ zoom: 1;
+}
+.tox .tox-croprect-handle {
+ border: 2px solid white;
+ height: 20px;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 20px;
+}
+.tox .tox-croprect-handle-move {
+ border: 0;
+ cursor: move;
+ position: absolute;
+}
+.tox .tox-croprect-handle-nw {
+ border-width: 2px 0 0 2px;
+ cursor: nw-resize;
+ left: 100px;
+ margin: -2px 0 0 -2px;
+ top: 100px;
+}
+.tox .tox-croprect-handle-ne {
+ border-width: 2px 2px 0 0;
+ cursor: ne-resize;
+ left: 200px;
+ margin: -2px 0 0 -20px;
+ top: 100px;
+}
+.tox .tox-croprect-handle-sw {
+ border-width: 0 0 2px 2px;
+ cursor: sw-resize;
+ left: 100px;
+ margin: -20px 2px 0 -2px;
+ top: 200px;
+}
+.tox .tox-croprect-handle-se {
+ border-width: 0 2px 2px 0;
+ cursor: se-resize;
+ left: 200px;
+ margin: -20px 0 0 -20px;
+ top: 200px;
+}
+.tox:not([dir=rtl]) .tox-image-tools__toolbar > .tox-slider:not(:first-of-type) {
+ margin-left: 8px;
+}
+.tox:not([dir=rtl]) .tox-image-tools__toolbar > .tox-button + .tox-slider {
+ margin-left: 32px;
+}
+.tox:not([dir=rtl]) .tox-image-tools__toolbar > .tox-slider + .tox-button {
+ margin-left: 32px;
+}
+.tox[dir=rtl] .tox-image-tools__toolbar > .tox-slider:not(:first-of-type) {
+ margin-right: 8px;
+}
+.tox[dir=rtl] .tox-image-tools__toolbar > .tox-button + .tox-slider {
+ margin-right: 32px;
+}
+.tox[dir=rtl] .tox-image-tools__toolbar > .tox-slider + .tox-button {
+ margin-right: 32px;
+}
+.tox .tox-insert-table-picker {
+ display: flex;
+ flex-wrap: wrap;
+ width: 170px;
+}
+.tox .tox-insert-table-picker > div {
+ border-color: #cccccc;
+ border-style: solid;
+ border-width: 0 1px 1px 0;
+ box-sizing: border-box;
+ height: 17px;
+ width: 17px;
+}
+.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker {
+ margin: -4px 0;
+}
+.tox .tox-insert-table-picker .tox-insert-table-picker__selected {
+ background-color: rgba(32, 122, 183, 0.5);
+ border-color: rgba(32, 122, 183, 0.5);
+}
+.tox .tox-insert-table-picker__label {
+ color: rgba(34, 47, 62, 0.7);
+ display: block;
+ font-size: 14px;
+ padding: 4px;
+ text-align: center;
+ width: 100%;
+}
+.tox:not([dir=rtl]) {
+ /* stylelint-disable-next-line no-descending-specificity */
+}
+.tox:not([dir=rtl]) .tox-insert-table-picker > div:nth-child(10n) {
+ border-right: 0;
+}
+.tox[dir=rtl] {
+ /* stylelint-disable-next-line no-descending-specificity */
+}
+.tox[dir=rtl] .tox-insert-table-picker > div:nth-child(10n+1) {
+ border-right: 0;
+}
+.tox {
+ /* stylelint-disable */
+ /* stylelint-enable */
+}
+.tox .tox-menu {
+ background-color: #fff;
+ border: 1px solid #cccccc;
+ border-radius: 3px;
+ box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1);
+ display: inline-block;
+ overflow: hidden;
+ vertical-align: top;
+ z-index: 1150;
+}
+.tox .tox-menu.tox-collection.tox-collection--list {
+ padding: 0;
+}
+.tox .tox-menu.tox-collection.tox-collection--toolbar {
+ padding: 4px;
+}
+.tox .tox-menu.tox-collection.tox-collection--grid {
+ padding: 4px;
+}
+.tox .tox-menu__label h1,
+.tox .tox-menu__label h2,
+.tox .tox-menu__label h3,
+.tox .tox-menu__label h4,
+.tox .tox-menu__label h5,
+.tox .tox-menu__label h6,
+.tox .tox-menu__label p,
+.tox .tox-menu__label blockquote,
+.tox .tox-menu__label code {
+ margin: 0;
+}
+.tox .tox-menubar {
+ background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;
+ background-color: #fff;
+ display: flex;
+ flex: 0 0 auto;
+ flex-shrink: 0;
+ flex-wrap: wrap;
+ padding: 0 4px 0 4px;
+}
+.tox.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar {
+ border-top: 1px solid #cccccc;
+}
+/* Deprecated. Remove in next major release */
+.tox .tox-mbtn {
+ align-items: center;
+ background: transparent;
+ border: 0;
+ border-radius: 3px;
+ box-shadow: none;
+ color: #222f3e;
+ display: flex;
+ flex: 0 0 auto;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ height: 34px;
+ justify-content: center;
+ margin: 2px 0 3px 0;
+ outline: none;
+ overflow: hidden;
+ padding: 0 4px;
+ text-transform: none;
+ width: auto;
+}
+.tox .tox-mbtn[disabled] {
+ background-color: transparent;
+ border: 0;
+ box-shadow: none;
+ color: rgba(34, 47, 62, 0.5);
+ cursor: not-allowed;
+}
+.tox .tox-mbtn:focus:not(:disabled) {
+ background: #dee0e2;
+ border: 0;
+ box-shadow: none;
+ color: #222f3e;
+}
+.tox .tox-mbtn--active {
+ background: #c8cbcf;
+ border: 0;
+ box-shadow: none;
+ color: #222f3e;
+}
+.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active) {
+ background: #dee0e2;
+ border: 0;
+ box-shadow: none;
+ color: #222f3e;
+}
+.tox .tox-mbtn__select-label {
+ cursor: default;
+ font-weight: normal;
+ margin: 0 4px;
+}
+.tox .tox-mbtn[disabled] .tox-mbtn__select-label {
+ cursor: not-allowed;
+}
+.tox .tox-mbtn__select-chevron {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ width: 16px;
+ display: none;
+}
+.tox .tox-notification {
+ border-radius: 3px;
+ border-style: solid;
+ border-width: 1px;
+ box-shadow: none;
+ box-sizing: border-box;
+ display: -ms-grid;
+ display: grid;
+ font-size: 14px;
+ font-weight: normal;
+ -ms-grid-columns: minmax(40px, 1fr) auto minmax(40px, 1fr);
+ grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr);
+ margin-top: 4px;
+ opacity: 0;
+ padding: 4px;
+ transition: transform 100ms ease-in, opacity 150ms ease-in;
+}
+.tox .tox-notification p {
+ font-size: 14px;
+ font-weight: normal;
+}
+.tox .tox-notification a {
+ cursor: pointer;
+ text-decoration: underline;
+}
+.tox .tox-notification--in {
+ opacity: 1;
+}
+.tox .tox-notification--success {
+ background-color: #e4eeda;
+ border-color: #d7e6c8;
+ color: #222f3e;
+}
+.tox .tox-notification--success p {
+ color: #222f3e;
+}
+.tox .tox-notification--success a {
+ color: #547831;
+}
+.tox .tox-notification--success svg {
+ fill: #222f3e;
+}
+.tox .tox-notification--error {
+ background-color: #f8dede;
+ border-color: #f2bfbf;
+ color: #222f3e;
+}
+.tox .tox-notification--error p {
+ color: #222f3e;
+}
+.tox .tox-notification--error a {
+ color: #c00;
+}
+.tox .tox-notification--error svg {
+ fill: #222f3e;
+}
+.tox .tox-notification--warn,
+.tox .tox-notification--warning {
+ background-color: #fffaea;
+ border-color: #ffe89d;
+ color: #222f3e;
+}
+.tox .tox-notification--warn p,
+.tox .tox-notification--warning p {
+ color: #222f3e;
+}
+.tox .tox-notification--warn a,
+.tox .tox-notification--warning a {
+ color: #222f3e;
+}
+.tox .tox-notification--warn svg,
+.tox .tox-notification--warning svg {
+ fill: #222f3e;
+}
+.tox .tox-notification--info {
+ background-color: #d9edf7;
+ border-color: #779ecb;
+ color: #222f3e;
+}
+.tox .tox-notification--info p {
+ color: #222f3e;
+}
+.tox .tox-notification--info a {
+ color: #222f3e;
+}
+.tox .tox-notification--info svg {
+ fill: #222f3e;
+}
+.tox .tox-notification__body {
+ -ms-grid-row-align: center;
+ align-self: center;
+ color: #222f3e;
+ font-size: 14px;
+ -ms-grid-column-span: 1;
+ grid-column-end: 3;
+ -ms-grid-column: 2;
+ grid-column-start: 2;
+ -ms-grid-row-span: 1;
+ grid-row-end: 2;
+ -ms-grid-row: 1;
+ grid-row-start: 1;
+ text-align: center;
+ white-space: normal;
+ word-break: break-all;
+ word-break: break-word;
+}
+.tox .tox-notification__body > * {
+ margin: 0;
+}
+.tox .tox-notification__body > * + * {
+ margin-top: 1rem;
+}
+.tox .tox-notification__icon {
+ -ms-grid-row-align: center;
+ align-self: center;
+ -ms-grid-column-span: 1;
+ grid-column-end: 2;
+ -ms-grid-column: 1;
+ grid-column-start: 1;
+ -ms-grid-row-span: 1;
+ grid-row-end: 2;
+ -ms-grid-row: 1;
+ grid-row-start: 1;
+ -ms-grid-column-align: end;
+ justify-self: end;
+}
+.tox .tox-notification__icon svg {
+ display: block;
+}
+.tox .tox-notification__dismiss {
+ -ms-grid-row-align: start;
+ align-self: start;
+ -ms-grid-column-span: 1;
+ grid-column-end: 4;
+ -ms-grid-column: 3;
+ grid-column-start: 3;
+ -ms-grid-row-span: 1;
+ grid-row-end: 2;
+ -ms-grid-row: 1;
+ grid-row-start: 1;
+ -ms-grid-column-align: end;
+ justify-self: end;
+}
+.tox .tox-notification .tox-progress-bar {
+ -ms-grid-column-span: 3;
+ grid-column-end: 4;
+ -ms-grid-column: 1;
+ grid-column-start: 1;
+ -ms-grid-row-span: 1;
+ grid-row-end: 3;
+ -ms-grid-row: 2;
+ grid-row-start: 2;
+ -ms-grid-column-align: center;
+ justify-self: center;
+}
+.tox .tox-pop {
+ display: inline-block;
+ position: relative;
+}
+.tox .tox-pop--resizing {
+ transition: width 0.1s ease;
+}
+.tox .tox-pop--resizing .tox-toolbar,
+.tox .tox-pop--resizing .tox-toolbar__group {
+ flex-wrap: nowrap;
+}
+.tox .tox-pop--transition {
+ transition: 0.15s ease;
+ transition-property: left, right, top, bottom;
+}
+.tox .tox-pop--transition::before,
+.tox .tox-pop--transition::after {
+ transition: all 0.15s, visibility 0s, opacity 0.075s ease 0.075s;
+}
+.tox .tox-pop__dialog {
+ background-color: #fff;
+ border: 1px solid #cccccc;
+ border-radius: 3px;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+ min-width: 0;
+ overflow: hidden;
+}
+.tox .tox-pop__dialog > *:not(.tox-toolbar) {
+ margin: 4px 4px 4px 8px;
+}
+.tox .tox-pop__dialog .tox-toolbar {
+ background-color: transparent;
+ margin-bottom: -1px;
+}
+.tox .tox-pop::before,
+.tox .tox-pop::after {
+ border-style: solid;
+ content: '';
+ display: block;
+ height: 0;
+ opacity: 1;
+ position: absolute;
+ width: 0;
+}
+.tox .tox-pop.tox-pop--inset::before,
+.tox .tox-pop.tox-pop--inset::after {
+ opacity: 0;
+ transition: all 0s 0.15s, visibility 0s, opacity 0.075s ease;
+}
+.tox .tox-pop.tox-pop--bottom::before,
+.tox .tox-pop.tox-pop--bottom::after {
+ left: 50%;
+ top: 100%;
+}
+.tox .tox-pop.tox-pop--bottom::after {
+ border-color: #fff transparent transparent transparent;
+ border-width: 8px;
+ margin-left: -8px;
+ margin-top: -1px;
+}
+.tox .tox-pop.tox-pop--bottom::before {
+ border-color: #cccccc transparent transparent transparent;
+ border-width: 9px;
+ margin-left: -9px;
+}
+.tox .tox-pop.tox-pop--top::before,
+.tox .tox-pop.tox-pop--top::after {
+ left: 50%;
+ top: 0;
+ transform: translateY(-100%);
+}
+.tox .tox-pop.tox-pop--top::after {
+ border-color: transparent transparent #fff transparent;
+ border-width: 8px;
+ margin-left: -8px;
+ margin-top: 1px;
+}
+.tox .tox-pop.tox-pop--top::before {
+ border-color: transparent transparent #cccccc transparent;
+ border-width: 9px;
+ margin-left: -9px;
+}
+.tox .tox-pop.tox-pop--left::before,
+.tox .tox-pop.tox-pop--left::after {
+ left: 0;
+ top: calc(50% - 1px);
+ transform: translateY(-50%);
+}
+.tox .tox-pop.tox-pop--left::after {
+ border-color: transparent #fff transparent transparent;
+ border-width: 8px;
+ margin-left: -15px;
+}
+.tox .tox-pop.tox-pop--left::before {
+ border-color: transparent #cccccc transparent transparent;
+ border-width: 10px;
+ margin-left: -19px;
+}
+.tox .tox-pop.tox-pop--right::before,
+.tox .tox-pop.tox-pop--right::after {
+ left: 100%;
+ top: calc(50% + 1px);
+ transform: translateY(-50%);
+}
+.tox .tox-pop.tox-pop--right::after {
+ border-color: transparent transparent transparent #fff;
+ border-width: 8px;
+ margin-left: -1px;
+}
+.tox .tox-pop.tox-pop--right::before {
+ border-color: transparent transparent transparent #cccccc;
+ border-width: 10px;
+ margin-left: -1px;
+}
+.tox .tox-pop.tox-pop--align-left::before,
+.tox .tox-pop.tox-pop--align-left::after {
+ left: 20px;
+}
+.tox .tox-pop.tox-pop--align-right::before,
+.tox .tox-pop.tox-pop--align-right::after {
+ left: calc(100% - 20px);
+}
+.tox .tox-sidebar-wrap {
+ display: flex;
+ flex-direction: row;
+ flex-grow: 1;
+ -ms-flex-preferred-size: 0;
+ min-height: 0;
+}
+.tox .tox-sidebar {
+ background-color: #fff;
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-end;
+}
+.tox .tox-sidebar__slider {
+ display: flex;
+ overflow: hidden;
+}
+.tox .tox-sidebar__pane-container {
+ display: flex;
+}
+.tox .tox-sidebar__pane {
+ display: flex;
+}
+.tox .tox-sidebar--sliding-closed {
+ opacity: 0;
+}
+.tox .tox-sidebar--sliding-open {
+ opacity: 1;
+}
+.tox .tox-sidebar--sliding-growing,
+.tox .tox-sidebar--sliding-shrinking {
+ transition: width 0.5s ease, opacity 0.5s ease;
+}
+.tox .tox-selector {
+ background-color: #4099ff;
+ border-color: #4099ff;
+ border-style: solid;
+ border-width: 1px;
+ box-sizing: border-box;
+ display: inline-block;
+ height: 10px;
+ position: absolute;
+ width: 10px;
+}
+.tox.tox-platform-touch .tox-selector {
+ height: 12px;
+ width: 12px;
+}
+.tox .tox-slider {
+ align-items: center;
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+ height: 24px;
+ justify-content: center;
+ position: relative;
+}
+.tox .tox-slider__rail {
+ background-color: transparent;
+ border: 1px solid #cccccc;
+ border-radius: 3px;
+ height: 10px;
+ min-width: 120px;
+ width: 100%;
+}
+.tox .tox-slider__handle {
+ background-color: #207ab7;
+ border: 2px solid #185d8c;
+ border-radius: 3px;
+ box-shadow: none;
+ height: 24px;
+ left: 50%;
+ position: absolute;
+ top: 50%;
+ transform: translateX(-50%) translateY(-50%);
+ width: 14px;
+}
+.tox .tox-source-code {
+ overflow: auto;
+}
+.tox .tox-spinner {
+ display: flex;
+}
+.tox .tox-spinner > div {
+ animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both;
+ background-color: rgba(34, 47, 62, 0.7);
+ border-radius: 100%;
+ height: 8px;
+ width: 8px;
+}
+.tox .tox-spinner > div:nth-child(1) {
+ animation-delay: -0.32s;
+}
+.tox .tox-spinner > div:nth-child(2) {
+ animation-delay: -0.16s;
+}
+@keyframes tam-bouncing-dots {
+ 0%,
+ 80%,
+ 100% {
+ transform: scale(0);
+ }
+ 40% {
+ transform: scale(1);
+ }
+}
+.tox:not([dir=rtl]) .tox-spinner > div:not(:first-child) {
+ margin-left: 4px;
+}
+.tox[dir=rtl] .tox-spinner > div:not(:first-child) {
+ margin-right: 4px;
+}
+.tox .tox-statusbar {
+ align-items: center;
+ background-color: #fff;
+ border-top: 1px solid #cccccc;
+ color: rgba(34, 47, 62, 0.7);
+ display: flex;
+ flex: 0 0 auto;
+ font-size: 12px;
+ font-weight: normal;
+ height: 18px;
+ overflow: hidden;
+ padding: 0 8px;
+ position: relative;
+ text-transform: uppercase;
+}
+.tox .tox-statusbar__text-container {
+ display: flex;
+ flex: 1 1 auto;
+ justify-content: flex-end;
+ overflow: hidden;
+}
+.tox .tox-statusbar__path {
+ display: flex;
+ flex: 1 1 auto;
+ margin-right: auto;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.tox .tox-statusbar__path > * {
+ display: inline;
+ white-space: nowrap;
+}
+.tox .tox-statusbar__wordcount {
+ flex: 0 0 auto;
+ margin-left: 1ch;
+}
+.tox .tox-statusbar a,
+.tox .tox-statusbar__path-item,
+.tox .tox-statusbar__wordcount {
+ color: rgba(34, 47, 62, 0.7);
+ text-decoration: none;
+}
+.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),
+.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),
+.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]),
+.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),
+.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),
+.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) {
+ cursor: pointer;
+ text-decoration: underline;
+}
+.tox .tox-statusbar__resize-handle {
+ align-items: flex-end;
+ align-self: stretch;
+ cursor: nwse-resize;
+ display: flex;
+ flex: 0 0 auto;
+ justify-content: flex-end;
+ margin-left: auto;
+ margin-right: -8px;
+ padding-left: 1ch;
+}
+.tox .tox-statusbar__resize-handle svg {
+ display: block;
+ fill: rgba(34, 47, 62, 0.7);
+}
+.tox .tox-statusbar__resize-handle:focus svg {
+ background-color: #dee0e2;
+ border-radius: 1px;
+ box-shadow: 0 0 0 2px #dee0e2;
+}
+.tox:not([dir=rtl]) .tox-statusbar__path > * {
+ margin-right: 4px;
+}
+.tox:not([dir=rtl]) .tox-statusbar__branding {
+ margin-left: 1ch;
+}
+.tox[dir=rtl] .tox-statusbar {
+ flex-direction: row-reverse;
+}
+.tox[dir=rtl] .tox-statusbar__path > * {
+ margin-left: 4px;
+}
+.tox .tox-throbber {
+ z-index: 1299;
+}
+.tox .tox-throbber__busy-spinner {
+ align-items: center;
+ background-color: rgba(255, 255, 255, 0.6);
+ bottom: 0;
+ display: flex;
+ justify-content: center;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+.tox .tox-tbtn {
+ align-items: center;
+ background: transparent;
+ border: 0;
+ border-radius: 3px;
+ box-shadow: none;
+ color: #222f3e;
+ display: flex;
+ flex: 0 0 auto;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ height: 34px;
+ justify-content: center;
+ margin: 2px 0 3px 0;
+ outline: none;
+ overflow: hidden;
+ padding: 0;
+ text-transform: none;
+ width: 34px;
+}
+.tox .tox-tbtn svg {
+ display: block;
+ fill: #222f3e;
+}
+.tox .tox-tbtn.tox-tbtn-more {
+ padding-left: 5px;
+ padding-right: 5px;
+ width: inherit;
+}
+.tox .tox-tbtn:focus {
+ background: #dee0e2;
+ border: 0;
+ box-shadow: none;
+}
+.tox .tox-tbtn:hover {
+ background: #dee0e2;
+ border: 0;
+ box-shadow: none;
+ color: #222f3e;
+}
+.tox .tox-tbtn:hover svg {
+ fill: #222f3e;
+}
+.tox .tox-tbtn:active {
+ background: #c8cbcf;
+ border: 0;
+ box-shadow: none;
+ color: #222f3e;
+}
+.tox .tox-tbtn:active svg {
+ fill: #222f3e;
+}
+.tox .tox-tbtn--disabled,
+.tox .tox-tbtn--disabled:hover,
+.tox .tox-tbtn:disabled,
+.tox .tox-tbtn:disabled:hover {
+ background: transparent;
+ border: 0;
+ box-shadow: none;
+ color: rgba(34, 47, 62, 0.5);
+ cursor: not-allowed;
+}
+.tox .tox-tbtn--disabled svg,
+.tox .tox-tbtn--disabled:hover svg,
+.tox .tox-tbtn:disabled svg,
+.tox .tox-tbtn:disabled:hover svg {
+ /* stylelint-disable-line no-descending-specificity */
+ fill: rgba(34, 47, 62, 0.5);
+}
+.tox .tox-tbtn--enabled,
+.tox .tox-tbtn--enabled:hover {
+ background: #c8cbcf;
+ border: 0;
+ box-shadow: none;
+ color: #222f3e;
+}
+.tox .tox-tbtn--enabled > *,
+.tox .tox-tbtn--enabled:hover > * {
+ transform: none;
+}
+.tox .tox-tbtn--enabled svg,
+.tox .tox-tbtn--enabled:hover svg {
+ /* stylelint-disable-line no-descending-specificity */
+ fill: #222f3e;
+}
+.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) {
+ color: #222f3e;
+}
+.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg {
+ fill: #222f3e;
+}
+.tox .tox-tbtn:active > * {
+ transform: none;
+}
+.tox .tox-tbtn--md {
+ height: 51px;
+ width: 51px;
+}
+.tox .tox-tbtn--lg {
+ flex-direction: column;
+ height: 68px;
+ width: 68px;
+}
+.tox .tox-tbtn--return {
+ -ms-grid-row-align: stretch;
+ align-self: stretch;
+ height: unset;
+ width: 16px;
+}
+.tox .tox-tbtn--labeled {
+ padding: 0 4px;
+ width: unset;
+}
+.tox .tox-tbtn__vlabel {
+ display: block;
+ font-size: 10px;
+ font-weight: normal;
+ letter-spacing: -0.025em;
+ margin-bottom: 4px;
+ white-space: nowrap;
+}
+.tox .tox-tbtn--select {
+ margin: 2px 0 3px 0;
+ padding: 0 4px;
+ width: auto;
+}
+.tox .tox-tbtn__select-label {
+ cursor: default;
+ font-weight: normal;
+ margin: 0 4px;
+}
+.tox .tox-tbtn__select-chevron {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ width: 16px;
+}
+.tox .tox-tbtn__select-chevron svg {
+ fill: rgba(34, 47, 62, 0.5);
+}
+.tox .tox-tbtn--bespoke .tox-tbtn__select-label {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ width: 7em;
+}
+.tox .tox-split-button {
+ border: 0;
+ border-radius: 3px;
+ box-sizing: border-box;
+ display: flex;
+ margin: 2px 0 3px 0;
+ overflow: hidden;
+}
+.tox .tox-split-button:hover {
+ box-shadow: 0 0 0 1px #dee0e2 inset;
+}
+.tox .tox-split-button:focus {
+ background: #dee0e2;
+ box-shadow: none;
+ color: #222f3e;
+}
+.tox .tox-split-button > * {
+ border-radius: 0;
+}
+.tox .tox-split-button__chevron {
+ width: 16px;
+}
+.tox .tox-split-button__chevron svg {
+ fill: rgba(34, 47, 62, 0.5);
+}
+.tox .tox-split-button .tox-tbtn {
+ margin: 0;
+}
+.tox.tox-platform-touch .tox-split-button .tox-tbtn:first-child {
+ width: 30px;
+}
+.tox.tox-platform-touch .tox-split-button__chevron {
+ width: 20px;
+}
+.tox .tox-split-button.tox-tbtn--disabled:hover,
+.tox .tox-split-button.tox-tbtn--disabled:focus,
+.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,
+.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus {
+ background: transparent;
+ box-shadow: none;
+ color: rgba(34, 47, 62, 0.5);
+}
+.tox .tox-toolbar-overlord {
+ background-color: #fff;
+}
+.tox .tox-toolbar,
+.tox .tox-toolbar__primary,
+.tox .tox-toolbar__overflow {
+ background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;
+ background-color: #fff;
+ display: flex;
+ flex: 0 0 auto;
+ flex-shrink: 0;
+ flex-wrap: wrap;
+ padding: 0 0;
+}
+.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed {
+ height: 0;
+ opacity: 0;
+ padding-bottom: 0;
+ padding-top: 0;
+ visibility: hidden;
+}
+.tox .tox-toolbar__overflow--growing {
+ transition: height 0.3s ease, opacity 0.2s linear 0.1s;
+}
+.tox .tox-toolbar__overflow--shrinking {
+ transition: opacity 0.3s ease, height 0.2s linear 0.1s, visibility 0s linear 0.3s;
+}
+.tox .tox-menubar + .tox-toolbar,
+.tox .tox-menubar + .tox-toolbar-overlord .tox-toolbar__primary {
+ border-top: 1px solid #cccccc;
+ margin-top: -1px;
+}
+.tox .tox-toolbar--scrolling {
+ flex-wrap: nowrap;
+ overflow-x: auto;
+}
+.tox .tox-pop .tox-toolbar {
+ border-width: 0;
+}
+.tox .tox-toolbar--no-divider {
+ background-image: none;
+}
+.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child,
+.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary {
+ border-top: 1px solid #cccccc;
+}
+.tox.tox-tinymce-aux .tox-toolbar__overflow {
+ background-color: #fff;
+ border: 1px solid #cccccc;
+ border-radius: 3px;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
+}
+.tox .tox-toolbar__group {
+ align-items: center;
+ display: flex;
+ flex-wrap: wrap;
+ margin: 0 0;
+ padding: 0 4px 0 4px;
+}
+.tox .tox-toolbar__group--pull-right {
+ margin-left: auto;
+}
+.tox .tox-toolbar--scrolling .tox-toolbar__group {
+ flex-shrink: 0;
+ flex-wrap: nowrap;
+}
+.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) {
+ border-right: 1px solid #cccccc;
+}
+.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) {
+ border-left: 1px solid #cccccc;
+}
+.tox .tox-tooltip {
+ display: inline-block;
+ padding: 8px;
+ position: relative;
+}
+.tox .tox-tooltip__body {
+ background-color: #222f3e;
+ border-radius: 3px;
+ box-shadow: 0 2px 4px rgba(34, 47, 62, 0.3);
+ color: rgba(255, 255, 255, 0.75);
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ padding: 4px 8px;
+ text-transform: none;
+}
+.tox .tox-tooltip__arrow {
+ position: absolute;
+}
+.tox .tox-tooltip--down .tox-tooltip__arrow {
+ border-left: 8px solid transparent;
+ border-right: 8px solid transparent;
+ border-top: 8px solid #222f3e;
+ bottom: 0;
+ left: 50%;
+ position: absolute;
+ transform: translateX(-50%);
+}
+.tox .tox-tooltip--up .tox-tooltip__arrow {
+ border-bottom: 8px solid #222f3e;
+ border-left: 8px solid transparent;
+ border-right: 8px solid transparent;
+ left: 50%;
+ position: absolute;
+ top: 0;
+ transform: translateX(-50%);
+}
+.tox .tox-tooltip--right .tox-tooltip__arrow {
+ border-bottom: 8px solid transparent;
+ border-left: 8px solid #222f3e;
+ border-top: 8px solid transparent;
+ position: absolute;
+ right: 0;
+ top: 50%;
+ transform: translateY(-50%);
+}
+.tox .tox-tooltip--left .tox-tooltip__arrow {
+ border-bottom: 8px solid transparent;
+ border-right: 8px solid #222f3e;
+ border-top: 8px solid transparent;
+ left: 0;
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+}
+.tox .tox-well {
+ border: 1px solid #cccccc;
+ border-radius: 3px;
+ padding: 8px;
+ width: 100%;
+}
+.tox .tox-well > *:first-child {
+ margin-top: 0;
+}
+.tox .tox-well > *:last-child {
+ margin-bottom: 0;
+}
+.tox .tox-well > *:only-child {
+ margin: 0;
+}
+.tox .tox-custom-editor {
+ border: 1px solid #cccccc;
+ border-radius: 3px;
+ display: flex;
+ flex: 1;
+ position: relative;
+}
+/* stylelint-disable */
+.tox {
+ /* stylelint-enable */
+}
+.tox .tox-dialog-loading::before {
+ background-color: rgba(0, 0, 0, 0.5);
+ content: "";
+ height: 100%;
+ position: absolute;
+ width: 100%;
+ z-index: 1000;
+}
+.tox .tox-tab {
+ cursor: pointer;
+}
+.tox .tox-dialog__content-js {
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-dialog__body-content .tox-collection {
+ display: flex;
+ flex: 1;
+ -ms-flex-preferred-size: auto;
+}
+.tox .tox-image-tools-edit-panel {
+ height: 60px;
+}
+.tox .tox-image-tools__sidebar {
+ height: 60px;
+}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide/skin.min.css b/guns-front-project/public/tinymce/skins/ui/oxide/skin.min.css
new file mode 100644
index 00000000..f570b8e4
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide/skin.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tox{box-shadow:none;box-sizing:content-box;color:#222f3e;cursor:auto;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce{border:1px solid #ccc;border-radius:0;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;overflow:hidden;position:relative;visibility:inherit!important}.tox-tinymce-inline{border:none;box-shadow:none}.tox-tinymce-inline .tox-editor-header{background-color:transparent;border:1px solid #ccc;border-radius:0;box-shadow:none}.tox-tinymce-aux{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;z-index:1300}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description{align-items:stretch;border:1px solid #ccc;border-radius:3px;display:flex;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>:last-child:not(:only-child){border-color:#ccc;border-style:solid}.tox .accessibility-issue__repair{margin-top:16px}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:rgba(32,122,183,.1);border-color:rgba(32,122,183,.4);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description>:last-child{border-color:rgba(32,122,183,.4)}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{color:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg{fill:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--info a .tox-icon{color:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:rgba(255,165,0,.1);border-color:rgba(255,165,0,.5);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description>:last-child{border-color:rgba(255,165,0,.5)}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{color:#cc8500}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg{fill:#cc8500}.tox .tox-dialog__body-content .accessibility-issue--warn a .tox-icon{color:#cc8500}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:rgba(204,0,0,.1);border-color:rgba(204,0,0,.4);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description>:last-child{border-color:rgba(204,0,0,.4)}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{color:#c00}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg{fill:#c00}.tox .tox-dialog__body-content .accessibility-issue--error a .tox-icon{color:#c00}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.1);border-color:rgba(120,171,70,.4);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{border-color:rgba(120,171,70,.4)}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#78ab46}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg{fill:#78ab46}.tox .tox-dialog__body-content .accessibility-issue--success a .tox-icon{color:#78ab46}.tox .tox-dialog__body-content .accessibility-issue__header h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:4px 4px 4px 8px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description>:last-child{border-left-width:1px;padding-left:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description>:last-child{border-right-width:1px;padding-right:4px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{background-color:#207ab7;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#207ab7;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;line-height:24px;margin:0;outline:0;padding:4px 16px;text-align:center;text-decoration:none;text-transform:none;white-space:nowrap}.tox .tox-button[disabled]{background-color:#207ab7;background-image:none;border-color:#207ab7;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:hover:not(:disabled){background-color:#1c6ca1;background-image:none;border-color:#1c6ca1;box-shadow:none;color:#fff}.tox .tox-button:active:not(:disabled){background-color:#185d8c;background-image:none;border-color:#185d8c;box-shadow:none;color:#fff}.tox .tox-button--secondary{background-color:#f0f0f0;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#f0f0f0;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;color:#222f3e;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:#f0f0f0;background-image:none;border-color:#f0f0f0;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-button--secondary:focus:not(:disabled){background-color:#e3e3e3;background-image:none;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--secondary:hover:not(:disabled){background-color:#e3e3e3;background-image:none;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--secondary:active:not(:disabled){background-color:#d6d6d6;background-image:none;border-color:#d6d6d6;box-shadow:none;color:#222f3e}.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding:4px}.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display:block;fill:currentColor}.tox .tox-button-link{background:0;border:none;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;white-space:nowrap}.tox .tox-button-link--sm{font-size:14px}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:#222f3e}.tox .tox-button--naked[disabled]{background-color:#f0f0f0;border-color:#f0f0f0;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-button--naked:hover:not(:disabled){background-color:#e3e3e3;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--naked:focus:not(:disabled){background-color:#e3e3e3;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--naked:active:not(:disabled){background-color:#d6d6d6;border-color:#d6d6d6;box-shadow:none;color:#222f3e}.tox .tox-button--naked .tox-icon svg{fill:currentColor}.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color:#222f3e}.tox .tox-checkbox{align-items:center;border-radius:3px;cursor:pointer;display:flex;height:36px;min-width:36px}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{align-items:center;border-radius:3px;box-shadow:0 0 0 2px transparent;box-sizing:content-box;display:flex;height:24px;justify-content:center;padding:calc(4px - 1px);width:24px}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:rgba(34,47,62,.3)}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:#207ab7}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:#207ab7}.tox .tox-checkbox--disabled{color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:rgba(34,47,62,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:rgba(34,47,62,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:rgba(34,47,62,.5)}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{border-radius:3px;box-shadow:inset 0 0 0 1px #207ab7;padding:calc(4px - 1px)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:4px}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:4px}.tox[dir=rtl] .tox-checkbox__label{margin-right:4px}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:4px}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#ccc;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#e6e6e6;color:rgba(34,47,62,.7);cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;color:#222f3e;cursor:pointer;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled{background-color:#fff;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active{background-color:#dee0e2}.tox .tox-collection--toolbar .tox-collection__item--enabled{background-color:#c8cbcf;color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active{background-color:#dee0e2}.tox .tox-collection--grid .tox-collection__item--enabled{background-color:#c8cbcf;color:#222f3e}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#dee0e2;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;-ms-flex-preferred-size:auto;font-size:14px;font-style:normal;font-weight:400;line-height:24px;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:rgba(34,47,62,.7);display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:#222f3e}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(34,47,62,.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:34px;margin:2px 0 3px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{-ms-grid-row-align:center;align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{-ms-grid-row-align:center;align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid #ccc}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid #ccc}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:2px 0 3px 4px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px 0}.tox .tox-swatches__row{display:flex}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#dee0e2}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment-thread{background:#fff;position:relative}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment{background:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);padding:8px 8px 16px 8px;position:relative}.tox .tox-comment__header{align-items:center;color:#222f3e;display:flex;justify-content:space-between}.tox .tox-comment__date{color:rgba(34,47,62,.7);font-size:12px}.tox .tox-comment__body{color:#222f3e;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(34,47,62,.7);font-size:14px;font-style:normal}.tox .tox-comment__body p{margin:0}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-comment-thread__overlay::after{background:#fff;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:16px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(255,255,255,0),#fff);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#fff;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__loading-text{align-items:center;color:#222f3e;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#fff;box-shadow:0 0 8px 8px #fff;color:#222f3e;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__busy-spinner{align-items:center;background-color:#fff;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto}.tox .tox-conversations{margin:8px}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(34,47,62,.7)}.tox .tox-user__name{color:rgba(34,47,62,.7);font-size:12px;font-style:normal;font-weight:700;text-transform:uppercase}.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(255,255,255,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#fff}.tox .tox-dialog{background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#fff;border-bottom:none;color:#222f3e;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#222f3e;display:flex;flex:1;-ms-flex-preferred-size:auto;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;padding:16px 16px}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(34,47,62,.7);display:inline-block;font-size:14px;line-height:1.3;margin-bottom:8px;text-decoration:none;white-space:nowrap}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(32,122,183,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #207ab7;color:#207ab7}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto;max-height:650px;overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#207ab7;cursor:pointer;text-decoration:none}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#185d8c;text-decoration:none}.tox .tox-dialog__body-content a:active{color:#185d8c;text-decoration:none}.tox .tox-dialog__body-content svg{fill:#222f3e}.tox .tox-dialog__body-content ul{display:block;list-style-type:disc;margin-bottom:16px;-webkit-margin-end:0;margin-inline-end:0;-webkit-margin-start:0;margin-inline-start:0;-webkit-padding-start:2.5rem;padding-inline-start:2.5rem}.tox .tox-dialog__body-content .tox-form__group h1{color:#222f3e;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#222f3e;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#fff;border-top:1px solid #ccc;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(255,255,255,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #ccc}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}.tox.tox-platform-ie .tox-dialog-wrap{position:-ms-device-fixed}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #ccc;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(34,47,62,.7);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;-ms-flex-preferred-size:auto;overflow:hidden;position:relative}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;-ms-flex-preferred-size:auto;height:100%;position:absolute;width:100%}.tox.tox-inline-edit-area{border:1px dotted #ccc}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{z-index:1}.tox:not(.tox-tinymce-inline) .tox-editor-header{box-shadow:none;transition:box-shadow .5s}.tox.tox-tinymce--toolbar-bottom .tox-editor-header,.tox.tox-tinymce-inline .tox-editor-header{margin-bottom:-1px}.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:transparent;box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(34,47,62,.2);border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#207ab7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(0,0,0,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(0,0,0,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #fff;border-radius:3px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(34,47,62,.7);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-textarea{flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;-ms-flex-preferred-size:auto;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textfield,.tox .tox-toolbar-textfield{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea:focus,.tox .tox-textfield:focus{background-color:#fff;border-color:#207ab7;box-shadow:none;outline:0}.tox .tox-toolbar-textfield{border-width:0;margin-bottom:3px;margin-top:2px;max-width:250px}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#207ab7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#222f3e}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#222f3e}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#fff;border-color:#207ab7;box-shadow:none;outline:0}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea{-webkit-appearance:textarea;-moz-appearance:textarea;appearance:textarea;white-space:pre-wrap}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-image-tools{width:100%}.tox .tox-image-tools__toolbar{align-items:center;display:flex;justify-content:center}.tox .tox-image-tools__image{background-color:#666;height:380px;overflow:auto;position:relative;width:100%}.tox .tox-image-tools__image,.tox .tox-image-tools__image+.tox-image-tools__toolbar{margin-top:8px}.tox .tox-image-tools__image-bg{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools__toolbar>.tox-spacer{flex:1;-ms-flex-preferred-size:auto}.tox .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-left:8px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-left:32px}.tox:not([dir=rtl]) .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-left:32px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider:not(:first-of-type){margin-right:8px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-button+.tox-slider{margin-right:32px}.tox[dir=rtl] .tox-image-tools__toolbar>.tox-slider+.tox-button{margin-right:32px}.tox .tox-insert-table-picker{display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:#ccc;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px 0}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(32,122,183,.5);border-color:rgba(32,122,183,.5)}.tox .tox-insert-table-picker__label{color:rgba(34,47,62,.7);display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox .tox-menu{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:4px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:4px}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 4px 0 4px}.tox.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar{border-top:1px solid #ccc}.tox .tox-mbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:transparent;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn--active{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:-ms-grid;display:grid;font-size:14px;font-weight:400;-ms-grid-columns:minmax(40px,1fr) auto minmax(40px,1fr);grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification a{cursor:pointer;text-decoration:underline}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#e4eeda;border-color:#d7e6c8;color:#222f3e}.tox .tox-notification--success p{color:#222f3e}.tox .tox-notification--success a{color:#547831}.tox .tox-notification--success svg{fill:#222f3e}.tox .tox-notification--error{background-color:#f8dede;border-color:#f2bfbf;color:#222f3e}.tox .tox-notification--error p{color:#222f3e}.tox .tox-notification--error a{color:#c00}.tox .tox-notification--error svg{fill:#222f3e}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#fffaea;border-color:#ffe89d;color:#222f3e}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#222f3e}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#222f3e}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#222f3e}.tox .tox-notification--info{background-color:#d9edf7;border-color:#779ecb;color:#222f3e}.tox .tox-notification--info p{color:#222f3e}.tox .tox-notification--info a{color:#222f3e}.tox .tox-notification--info svg{fill:#222f3e}.tox .tox-notification__body{-ms-grid-row-align:center;align-self:center;color:#222f3e;font-size:14px;-ms-grid-column-span:1;grid-column-end:3;-ms-grid-column:2;grid-column-start:2;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{-ms-grid-row-align:center;align-self:center;-ms-grid-column-span:1;grid-column-end:2;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{-ms-grid-row-align:start;align-self:start;-ms-grid-column-span:1;grid-column-end:4;-ms-grid-column:3;grid-column-start:3;-ms-grid-row-span:1;grid-row-end:2;-ms-grid-row:1;grid-row-start:1;-ms-grid-column-align:end;justify-self:end}.tox .tox-notification .tox-progress-bar{-ms-grid-column-span:3;grid-column-end:4;-ms-grid-column:1;grid-column-start:1;-ms-grid-row-span:1;grid-row-end:3;-ms-grid-row:2;grid-row-start:2;-ms-grid-column-align:center;justify-self:center}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#fff transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#ccc transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #fff transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #ccc transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #fff transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #ccc transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #fff;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #ccc;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;-ms-flex-preferred-size:0;min-height:0}.tox .tox-sidebar{background-color:#fff;display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-slider{align-items:center;display:flex;flex:1;-ms-flex-preferred-size:auto;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #ccc;border-radius:3px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#207ab7;border:2px solid #185d8c;border-radius:3px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(34,47,62,.7);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:nth-child(1){animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-statusbar{align-items:center;background-color:#fff;border-top:1px solid #ccc;color:rgba(34,47,62,.7);display:flex;flex:0 0 auto;font-size:12px;font-weight:400;height:18px;overflow:hidden;padding:0 8px;position:relative;text-transform:uppercase}.tox .tox-statusbar__text-container{display:flex;flex:1 1 auto;justify-content:flex-end;overflow:hidden}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:rgba(34,47,62,.7);text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){cursor:pointer;text-decoration:underline}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;cursor:nwse-resize;display:flex;flex:0 0 auto;justify-content:flex-end;margin-left:auto;margin-right:-8px;padding-left:1ch}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(34,47,62,.7)}.tox .tox-statusbar__resize-handle:focus svg{background-color:#dee0e2;border-radius:1px;box-shadow:0 0 0 2px #dee0e2}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:1ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(255,255,255,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-tbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;overflow:hidden;padding:0;text-transform:none;width:34px}.tox .tox-tbtn svg{display:block;fill:#222f3e}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#dee0e2;border:0;box-shadow:none}.tox .tox-tbtn:hover{background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:hover svg{fill:#222f3e}.tox .tox-tbtn:active{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:active svg{fill:#222f3e}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:hover{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#222f3e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#222f3e}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:51px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:68px;width:68px}.tox .tox-tbtn--return{-ms-grid-row-align:stretch;align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tbtn--select{margin:2px 0 3px 0;padding:0 4px;width:auto}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-split-button{border:0;border-radius:3px;box-sizing:border-box;display:flex;margin:2px 0 3px 0;overflow:hidden}.tox .tox-split-button:hover{box-shadow:0 0 0 1px #dee0e2 inset}.tox .tox-split-button:focus{background:#dee0e2;box-shadow:none;color:#222f3e}.tox .tox-split-button>*{border-radius:0}.tox .tox-split-button__chevron{width:16px}.tox .tox-split-button__chevron svg{fill:rgba(34,47,62,.5)}.tox .tox-split-button .tox-tbtn{margin:0}.tox.tox-platform-touch .tox-split-button .tox-tbtn:first-child{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{background:0 0;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-toolbar-overlord{background-color:#fff}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord .tox-toolbar__primary{border-top:1px solid #ccc;margin-top:-1px}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary,.tox-tinymce:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child{border-top:1px solid #ccc}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.15)}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 4px 0 4px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid #ccc}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid #ccc}.tox .tox-tooltip{display:inline-block;padding:8px;position:relative}.tox .tox-tooltip__body{background-color:#222f3e;border-radius:3px;box-shadow:0 2px 4px rgba(34,47,62,.3);color:rgba(255,255,255,.75);font-size:14px;font-style:normal;font-weight:400;padding:4px 8px;text-transform:none}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #222f3e;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #222f3e;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #222f3e;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #222f3e;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-well{border:1px solid #ccc;border-radius:3px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #ccc;border-radius:3px;display:flex;flex:1;position:relative}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1;-ms-flex-preferred-size:auto}.tox .tox-image-tools-edit-panel{height:60px}.tox .tox-image-tools__sidebar{height:60px}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide/skin.mobile.css b/guns-front-project/public/tinymce/skins/ui/oxide/skin.mobile.css
new file mode 100644
index 00000000..875721a2
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide/skin.mobile.css
@@ -0,0 +1,673 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+/* RESET all the things! */
+.tinymce-mobile-outer-container {
+ all: initial;
+ display: block;
+}
+.tinymce-mobile-outer-container * {
+ border: 0;
+ box-sizing: initial;
+ cursor: inherit;
+ float: none;
+ line-height: 1;
+ margin: 0;
+ outline: 0;
+ padding: 0;
+ -webkit-tap-highlight-color: transparent;
+ /* TBIO-3691, stop the gray flicker on touch. */
+ text-shadow: none;
+ white-space: nowrap;
+}
+.tinymce-mobile-icon-arrow-back::before {
+ content: "\e5cd";
+}
+.tinymce-mobile-icon-image::before {
+ content: "\e412";
+}
+.tinymce-mobile-icon-cancel-circle::before {
+ content: "\e5c9";
+}
+.tinymce-mobile-icon-full-dot::before {
+ content: "\e061";
+}
+.tinymce-mobile-icon-align-center::before {
+ content: "\e234";
+}
+.tinymce-mobile-icon-align-left::before {
+ content: "\e236";
+}
+.tinymce-mobile-icon-align-right::before {
+ content: "\e237";
+}
+.tinymce-mobile-icon-bold::before {
+ content: "\e238";
+}
+.tinymce-mobile-icon-italic::before {
+ content: "\e23f";
+}
+.tinymce-mobile-icon-unordered-list::before {
+ content: "\e241";
+}
+.tinymce-mobile-icon-ordered-list::before {
+ content: "\e242";
+}
+.tinymce-mobile-icon-font-size::before {
+ content: "\e245";
+}
+.tinymce-mobile-icon-underline::before {
+ content: "\e249";
+}
+.tinymce-mobile-icon-link::before {
+ content: "\e157";
+}
+.tinymce-mobile-icon-unlink::before {
+ content: "\eca2";
+}
+.tinymce-mobile-icon-color::before {
+ content: "\e891";
+}
+.tinymce-mobile-icon-previous::before {
+ content: "\e314";
+}
+.tinymce-mobile-icon-next::before {
+ content: "\e315";
+}
+.tinymce-mobile-icon-large-font::before,
+.tinymce-mobile-icon-style-formats::before {
+ content: "\e264";
+}
+.tinymce-mobile-icon-undo::before {
+ content: "\e166";
+}
+.tinymce-mobile-icon-redo::before {
+ content: "\e15a";
+}
+.tinymce-mobile-icon-removeformat::before {
+ content: "\e239";
+}
+.tinymce-mobile-icon-small-font::before {
+ content: "\e906";
+}
+.tinymce-mobile-icon-readonly-back::before,
+.tinymce-mobile-format-matches::after {
+ content: "\e5ca";
+}
+.tinymce-mobile-icon-small-heading::before {
+ content: "small";
+}
+.tinymce-mobile-icon-large-heading::before {
+ content: "large";
+}
+.tinymce-mobile-icon-small-heading::before,
+.tinymce-mobile-icon-large-heading::before {
+ font-family: sans-serif;
+ font-size: 80%;
+}
+.tinymce-mobile-mask-edit-icon::before {
+ content: "\e254";
+}
+.tinymce-mobile-icon-back::before {
+ content: "\e5c4";
+}
+.tinymce-mobile-icon-heading::before {
+ /* TODO: Translate */
+ content: "Headings";
+ font-family: sans-serif;
+ font-size: 80%;
+ font-weight: bold;
+}
+.tinymce-mobile-icon-h1::before {
+ content: "H1";
+ font-weight: bold;
+}
+.tinymce-mobile-icon-h2::before {
+ content: "H2";
+ font-weight: bold;
+}
+.tinymce-mobile-icon-h3::before {
+ content: "H3";
+ font-weight: bold;
+}
+.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ background: rgba(51, 51, 51, 0.5);
+ height: 100%;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container {
+ align-items: center;
+ border-radius: 50%;
+ display: flex;
+ flex-direction: column;
+ font-family: sans-serif;
+ font-size: 1em;
+ justify-content: space-between;
+}
+.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ border-radius: 50%;
+ height: 2.1em;
+ width: 2.1em;
+}
+.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ flex-direction: column;
+ font-size: 1em;
+}
+@media only screen and (min-device-width:700px) {
+ .tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section {
+ font-size: 1.2em;
+ }
+}
+.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ border-radius: 50%;
+ height: 2.1em;
+ width: 2.1em;
+ background-color: white;
+ color: #207ab7;
+}
+.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before {
+ content: "\e900";
+ font-family: 'tinymce-mobile', sans-serif;
+}
+.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon {
+ z-index: 2;
+}
+.tinymce-mobile-android-container.tinymce-mobile-android-maximized {
+ background: #ffffff;
+ border: none;
+ bottom: 0;
+ display: flex;
+ flex-direction: column;
+ left: 0;
+ position: fixed;
+ right: 0;
+ top: 0;
+}
+.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized) {
+ position: relative;
+}
+.tinymce-mobile-android-container .tinymce-mobile-editor-socket {
+ display: flex;
+ flex-grow: 1;
+}
+.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe {
+ display: flex !important;
+ flex-grow: 1;
+ height: auto !important;
+}
+.tinymce-mobile-android-scroll-reload {
+ overflow: hidden;
+}
+:not(.tinymce-mobile-readonly-mode) > .tinymce-mobile-android-selection-context-toolbar {
+ margin-top: 23px;
+}
+.tinymce-mobile-toolstrip {
+ background: #fff;
+ display: flex;
+ flex: 0 0 auto;
+ z-index: 1;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar {
+ align-items: center;
+ background-color: #fff;
+ border-bottom: 1px solid #cccccc;
+ display: flex;
+ flex: 1;
+ height: 2.5em;
+ width: 100%;
+ /* Make it no larger than the toolstrip, so that it needs to scroll */
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group {
+ align-items: center;
+ display: flex;
+ height: 100%;
+ flex-shrink: 1;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group > div {
+ align-items: center;
+ display: flex;
+ height: 100%;
+ flex: 1;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container {
+ background: #f44336;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group {
+ flex-grow: 1;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item {
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button {
+ align-items: center;
+ display: flex;
+ height: 80%;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected {
+ background: #c8cbcf;
+ color: #cccccc;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type {
+ background: #207ab7;
+ color: #eceff1;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar {
+ /* Note, this file is imported inside .tinymce-mobile-context-toolbar, so that prefix is on everything here. */
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group {
+ align-items: center;
+ display: flex;
+ height: 100%;
+ flex: 1;
+ padding-bottom: 0.4em;
+ padding-top: 0.4em;
+ /* Make any buttons appearing on the left and right display in the centre (e.g. color edges) */
+ /* For widgets like the colour picker, use the whole height */
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog {
+ display: flex;
+ min-height: 1.5em;
+ overflow: hidden;
+ padding-left: 0;
+ padding-right: 0;
+ position: relative;
+ width: 100%;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain {
+ display: flex;
+ height: 100%;
+ transition: left cubic-bezier(0.4, 0, 1, 1) 0.15s;
+ width: 100%;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen {
+ display: flex;
+ flex: 0 0 auto;
+ justify-content: space-between;
+ width: 100%;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input {
+ font-family: Sans-serif;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container {
+ display: flex;
+ flex-grow: 1;
+ position: relative;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x {
+ -ms-grid-row-align: center;
+ align-self: center;
+ background: inherit;
+ border: none;
+ border-radius: 50%;
+ color: #888;
+ font-size: 0.6em;
+ font-weight: bold;
+ height: 100%;
+ padding-right: 2px;
+ position: absolute;
+ right: 0;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x {
+ display: none;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous,
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next {
+ align-items: center;
+ display: flex;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before,
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before {
+ align-items: center;
+ display: flex;
+ font-weight: bold;
+ height: 100%;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before,
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before {
+ visibility: hidden;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item {
+ color: #cccccc;
+ font-size: 10px;
+ line-height: 10px;
+ margin: 0 2px;
+ padding-top: 3px;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active {
+ color: #c8cbcf;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before {
+ margin-left: 0.5em;
+ margin-right: 0.9em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before {
+ margin-left: 0.9em;
+ margin-right: 0.5em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider {
+ display: flex;
+ flex: 1;
+ margin-left: 0;
+ margin-right: 0;
+ padding: 0.28em 0;
+ position: relative;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container {
+ align-items: center;
+ display: flex;
+ flex-grow: 1;
+ height: 100%;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line {
+ background: #cccccc;
+ display: flex;
+ flex: 1;
+ height: 0.2em;
+ margin-bottom: 0.3em;
+ margin-top: 0.3em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container {
+ padding-left: 2em;
+ padding-right: 2em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container {
+ align-items: center;
+ display: flex;
+ flex-grow: 1;
+ height: 100%;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient {
+ background: linear-gradient(to right, hsl(0, 100%, 50%) 0%, hsl(60, 100%, 50%) 17%, hsl(120, 100%, 50%) 33%, hsl(180, 100%, 50%) 50%, hsl(240, 100%, 50%) 67%, hsl(300, 100%, 50%) 83%, hsl(0, 100%, 50%) 100%);
+ display: flex;
+ flex: 1;
+ height: 0.2em;
+ margin-bottom: 0.3em;
+ margin-top: 0.3em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black {
+ /* Not part of theming */
+ background: black;
+ height: 0.2em;
+ margin-bottom: 0.3em;
+ margin-top: 0.3em;
+ width: 1.2em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white {
+ /* Not part of theming */
+ background: white;
+ height: 0.2em;
+ margin-bottom: 0.3em;
+ margin-top: 0.3em;
+ width: 1.2em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb {
+ /* vertically centering trick (margin: auto, top: 0, bottom: 0). On iOS and Safari, if you leave
+ * out these values, then it shows the thumb at the top of the spectrum. This is probably because it is
+ * absolutely positioned with only a left value, and not a top. Note, on Chrome it seems to be fine without
+ * this approach.
+ */
+ align-items: center;
+ background-clip: padding-box;
+ background-color: #455a64;
+ border: 0.5em solid rgba(136, 136, 136, 0);
+ border-radius: 3em;
+ bottom: 0;
+ color: #fff;
+ display: flex;
+ height: 0.5em;
+ justify-content: center;
+ left: -10px;
+ margin: auto;
+ position: absolute;
+ top: 0;
+ transition: border 120ms cubic-bezier(0.39, 0.58, 0.57, 1);
+ width: 0.5em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active {
+ border: 0.5em solid rgba(136, 136, 136, 0.39);
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group > div {
+ align-items: center;
+ display: flex;
+ height: 100%;
+ flex: 1;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper {
+ flex-direction: column;
+ justify-content: center;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item {
+ align-items: center;
+ display: flex;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog) {
+ height: 100%;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container {
+ display: flex;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input {
+ background: #ffffff;
+ border: none;
+ border-radius: 0;
+ color: #455a64;
+ flex-grow: 1;
+ font-size: 0.85em;
+ padding-bottom: 0.1em;
+ padding-left: 5px;
+ padding-top: 0.1em;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder {
+ /* WebKit, Blink, Edge */
+ color: #888;
+}
+.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder {
+ /* WebKit, Blink, Edge */
+ color: #888;
+}
+/* dropup */
+.tinymce-mobile-dropup {
+ background: white;
+ display: flex;
+ overflow: hidden;
+ width: 100%;
+}
+.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking {
+ transition: height 0.3s ease-out;
+}
+.tinymce-mobile-dropup.tinymce-mobile-dropup-growing {
+ transition: height 0.3s ease-in;
+}
+.tinymce-mobile-dropup.tinymce-mobile-dropup-closed {
+ flex-grow: 0;
+}
+.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing) {
+ flex-grow: 1;
+}
+/* TODO min-height for device size and orientation */
+.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {
+ min-height: 200px;
+}
+@media only screen and (orientation: landscape) {
+ .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {
+ min-height: 200px;
+ }
+}
+@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) {
+ .tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {
+ min-height: 150px;
+ }
+}
+/* styles menu */
+.tinymce-mobile-styles-menu {
+ font-family: sans-serif;
+ outline: 4px solid black;
+ overflow: hidden;
+ position: relative;
+ width: 100%;
+}
+.tinymce-mobile-styles-menu [role="menu"] {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ position: absolute;
+ width: 100%;
+}
+.tinymce-mobile-styles-menu [role="menu"].transitioning {
+ transition: transform 0.5s ease-in-out;
+}
+.tinymce-mobile-styles-menu .tinymce-mobile-styles-item {
+ border-bottom: 1px solid #ddd;
+ color: #455a64;
+ cursor: pointer;
+ display: flex;
+ padding: 1em 1em;
+ position: relative;
+}
+.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before {
+ color: #455a64;
+ content: "\e314";
+ font-family: 'tinymce-mobile', sans-serif;
+}
+.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after {
+ color: #455a64;
+ content: "\e315";
+ font-family: 'tinymce-mobile', sans-serif;
+ padding-left: 1em;
+ padding-right: 1em;
+ position: absolute;
+ right: 0;
+}
+.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after {
+ font-family: 'tinymce-mobile', sans-serif;
+ padding-left: 1em;
+ padding-right: 1em;
+ position: absolute;
+ right: 0;
+}
+.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator,
+.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser {
+ align-items: center;
+ background: #fff;
+ border-top: #455a64;
+ color: #455a64;
+ display: flex;
+ min-height: 2.5em;
+ padding-left: 1em;
+ padding-right: 1em;
+}
+.tinymce-mobile-styles-menu [data-transitioning-destination="before"][data-transitioning-state],
+.tinymce-mobile-styles-menu [data-transitioning-state="before"] {
+ transform: translate(-100%);
+}
+.tinymce-mobile-styles-menu [data-transitioning-destination="current"][data-transitioning-state],
+.tinymce-mobile-styles-menu [data-transitioning-state="current"] {
+ transform: translate(0%);
+}
+.tinymce-mobile-styles-menu [data-transitioning-destination="after"][data-transitioning-state],
+.tinymce-mobile-styles-menu [data-transitioning-state="after"] {
+ transform: translate(100%);
+}
+@font-face {
+ font-family: 'tinymce-mobile';
+ font-style: normal;
+ font-weight: normal;
+ src: url('fonts/tinymce-mobile.woff?8x92w3') format('woff');
+}
+@media (min-device-width: 700px) {
+ .tinymce-mobile-outer-container,
+ .tinymce-mobile-outer-container input {
+ font-size: 25px;
+ }
+}
+@media (max-device-width: 700px) {
+ .tinymce-mobile-outer-container,
+ .tinymce-mobile-outer-container input {
+ font-size: 18px;
+ }
+}
+.tinymce-mobile-icon {
+ font-family: 'tinymce-mobile', sans-serif;
+}
+.mixin-flex-and-centre {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+}
+.mixin-flex-bar {
+ align-items: center;
+ display: flex;
+ height: 100%;
+}
+.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe {
+ background-color: #fff;
+ width: 100%;
+}
+.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {
+ /* Note, on the iPod touch in landscape, this isn't visible when the navbar appears */
+ background-color: #207ab7;
+ border-radius: 50%;
+ bottom: 1em;
+ color: white;
+ font-size: 1em;
+ height: 2.1em;
+ position: fixed;
+ right: 2em;
+ width: 2.1em;
+ align-items: center;
+ display: flex;
+ justify-content: center;
+}
+@media only screen and (min-device-width:700px) {
+ .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {
+ font-size: 1.2em;
+ }
+}
+.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket {
+ height: 300px;
+ overflow: hidden;
+}
+.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe {
+ height: 100%;
+}
+.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip {
+ display: none;
+}
+/*
+ Note, that if you don't include this (::-webkit-file-upload-button), the toolbar width gets
+ increased and the whole body becomes scrollable. It's important!
+ */
+input[type="file"]::-webkit-file-upload-button {
+ display: none;
+}
+@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) {
+ .tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {
+ bottom: 50%;
+ }
+}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide/skin.mobile.min.css b/guns-front-project/public/tinymce/skins/ui/oxide/skin.mobile.min.css
new file mode 100644
index 00000000..3a45cacf
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide/skin.mobile.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+.tinymce-mobile-outer-container{all:initial;display:block}.tinymce-mobile-outer-container *{border:0;box-sizing:initial;cursor:inherit;float:none;line-height:1;margin:0;outline:0;padding:0;-webkit-tap-highlight-color:transparent;text-shadow:none;white-space:nowrap}.tinymce-mobile-icon-arrow-back::before{content:"\e5cd"}.tinymce-mobile-icon-image::before{content:"\e412"}.tinymce-mobile-icon-cancel-circle::before{content:"\e5c9"}.tinymce-mobile-icon-full-dot::before{content:"\e061"}.tinymce-mobile-icon-align-center::before{content:"\e234"}.tinymce-mobile-icon-align-left::before{content:"\e236"}.tinymce-mobile-icon-align-right::before{content:"\e237"}.tinymce-mobile-icon-bold::before{content:"\e238"}.tinymce-mobile-icon-italic::before{content:"\e23f"}.tinymce-mobile-icon-unordered-list::before{content:"\e241"}.tinymce-mobile-icon-ordered-list::before{content:"\e242"}.tinymce-mobile-icon-font-size::before{content:"\e245"}.tinymce-mobile-icon-underline::before{content:"\e249"}.tinymce-mobile-icon-link::before{content:"\e157"}.tinymce-mobile-icon-unlink::before{content:"\eca2"}.tinymce-mobile-icon-color::before{content:"\e891"}.tinymce-mobile-icon-previous::before{content:"\e314"}.tinymce-mobile-icon-next::before{content:"\e315"}.tinymce-mobile-icon-large-font::before,.tinymce-mobile-icon-style-formats::before{content:"\e264"}.tinymce-mobile-icon-undo::before{content:"\e166"}.tinymce-mobile-icon-redo::before{content:"\e15a"}.tinymce-mobile-icon-removeformat::before{content:"\e239"}.tinymce-mobile-icon-small-font::before{content:"\e906"}.tinymce-mobile-format-matches::after,.tinymce-mobile-icon-readonly-back::before{content:"\e5ca"}.tinymce-mobile-icon-small-heading::before{content:"small"}.tinymce-mobile-icon-large-heading::before{content:"large"}.tinymce-mobile-icon-large-heading::before,.tinymce-mobile-icon-small-heading::before{font-family:sans-serif;font-size:80%}.tinymce-mobile-mask-edit-icon::before{content:"\e254"}.tinymce-mobile-icon-back::before{content:"\e5c4"}.tinymce-mobile-icon-heading::before{content:"Headings";font-family:sans-serif;font-size:80%;font-weight:700}.tinymce-mobile-icon-h1::before{content:"H1";font-weight:700}.tinymce-mobile-icon-h2::before{content:"H2";font-weight:700}.tinymce-mobile-icon-h3::before{content:"H3";font-weight:700}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask{align-items:center;display:flex;justify-content:center;background:rgba(51,51,51,.5);height:100%;position:absolute;top:0;width:100%}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container{align-items:center;border-radius:50%;display:flex;flex-direction:column;font-family:sans-serif;font-size:1em;justify-content:space-between}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item{align-items:center;display:flex;justify-content:center;border-radius:50%;height:2.1em;width:2.1em}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{align-items:center;display:flex;justify-content:center;flex-direction:column;font-size:1em}@media only screen and (min-device-width:700px){.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section{font-size:1.2em}}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon{align-items:center;display:flex;justify-content:center;border-radius:50%;height:2.1em;width:2.1em;background-color:#fff;color:#207ab7}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before{content:"\e900";font-family:tinymce-mobile,sans-serif}.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon{z-index:2}.tinymce-mobile-android-container.tinymce-mobile-android-maximized{background:#fff;border:none;bottom:0;display:flex;flex-direction:column;left:0;position:fixed;right:0;top:0}.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized){position:relative}.tinymce-mobile-android-container .tinymce-mobile-editor-socket{display:flex;flex-grow:1}.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe{display:flex!important;flex-grow:1;height:auto!important}.tinymce-mobile-android-scroll-reload{overflow:hidden}:not(.tinymce-mobile-readonly-mode)>.tinymce-mobile-android-selection-context-toolbar{margin-top:23px}.tinymce-mobile-toolstrip{background:#fff;display:flex;flex:0 0 auto;z-index:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar{align-items:center;background-color:#fff;border-bottom:1px solid #ccc;display:flex;flex:1;height:2.5em;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group{align-items:center;display:flex;height:100%;flex-shrink:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group>div{align-items:center;display:flex;height:100%;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container{background:#f44336}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group{flex-grow:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button{align-items:center;display:flex;height:80%;margin-left:2px;margin-right:2px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected{background:#c8cbcf;color:#ccc}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type{background:#207ab7;color:#eceff1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group{align-items:center;display:flex;height:100%;flex:1;padding-bottom:.4em;padding-top:.4em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog{display:flex;min-height:1.5em;overflow:hidden;padding-left:0;padding-right:0;position:relative;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain{display:flex;height:100%;transition:left cubic-bezier(.4,0,1,1) .15s;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen{display:flex;flex:0 0 auto;justify-content:space-between;width:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input{font-family:Sans-serif}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container{display:flex;flex-grow:1;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x{-ms-grid-row-align:center;align-self:center;background:inherit;border:none;border-radius:50%;color:#888;font-size:.6em;font-weight:700;height:100%;padding-right:2px;position:absolute;right:0}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x{display:none}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous{align-items:center;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before{align-items:center;display:flex;font-weight:700;height:100%;padding-left:.5em;padding-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before{visibility:hidden}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item{color:#ccc;font-size:10px;line-height:10px;margin:0 2px;padding-top:3px}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active{color:#c8cbcf}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before{margin-left:.5em;margin-right:.9em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before{margin-left:.9em;margin-right:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider{display:flex;flex:1;margin-left:0;margin-right:0;padding:.28em 0;position:relative}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container{align-items:center;display:flex;flex-grow:1;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line{background:#ccc;display:flex;flex:1;height:.2em;margin-bottom:.3em;margin-top:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container{padding-left:2em;padding-right:2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container{align-items:center;display:flex;flex-grow:1;height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient{background:linear-gradient(to right,red 0,#feff00 17%,#0f0 33%,#00feff 50%,#00f 67%,#ff00fe 83%,red 100%);display:flex;flex:1;height:.2em;margin-bottom:.3em;margin-top:.3em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black{background:#000;height:.2em;margin-bottom:.3em;margin-top:.3em;width:1.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white{background:#fff;height:.2em;margin-bottom:.3em;margin-top:.3em;width:1.2em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb{align-items:center;background-clip:padding-box;background-color:#455a64;border:.5em solid rgba(136,136,136,0);border-radius:3em;bottom:0;color:#fff;display:flex;height:.5em;justify-content:center;left:-10px;margin:auto;position:absolute;top:0;transition:border 120ms cubic-bezier(.39,.58,.57,1);width:.5em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active{border:.5em solid rgba(136,136,136,.39)}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group>div{align-items:center;display:flex;height:100%;flex:1}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper{flex-direction:column;justify-content:center}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item{align-items:center;display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog){height:100%}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container{display:flex}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input{background:#fff;border:none;border-radius:0;color:#455a64;flex-grow:1;font-size:.85em;padding-bottom:.1em;padding-left:5px;padding-top:.1em}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder{color:#888}.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder{color:#888}.tinymce-mobile-dropup{background:#fff;display:flex;overflow:hidden;width:100%}.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking{transition:height .3s ease-out}.tinymce-mobile-dropup.tinymce-mobile-dropup-growing{transition:height .3s ease-in}.tinymce-mobile-dropup.tinymce-mobile-dropup-closed{flex-grow:0}.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing){flex-grow:1}.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}@media only screen and (orientation:landscape){.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:200px}}@media only screen and (min-device-width :320px) and (max-device-width :568px) and (orientation :landscape){.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed){min-height:150px}}.tinymce-mobile-styles-menu{font-family:sans-serif;outline:4px solid #000;overflow:hidden;position:relative;width:100%}.tinymce-mobile-styles-menu [role=menu]{display:flex;flex-direction:column;height:100%;position:absolute;width:100%}.tinymce-mobile-styles-menu [role=menu].transitioning{transition:transform .5s ease-in-out}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item{border-bottom:1px solid #ddd;color:#455a64;cursor:pointer;display:flex;padding:1em 1em;position:relative}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before{color:#455a64;content:"\e314";font-family:tinymce-mobile,sans-serif}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after{color:#455a64;content:"\e315";font-family:tinymce-mobile,sans-serif;padding-left:1em;padding-right:1em;position:absolute;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after{font-family:tinymce-mobile,sans-serif;padding-left:1em;padding-right:1em;position:absolute;right:0}.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser,.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator{align-items:center;background:#fff;border-top:#455a64;color:#455a64;display:flex;min-height:2.5em;padding-left:1em;padding-right:1em}.tinymce-mobile-styles-menu [data-transitioning-destination=before][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=before]{transform:translate(-100%)}.tinymce-mobile-styles-menu [data-transitioning-destination=current][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=current]{transform:translate(0)}.tinymce-mobile-styles-menu [data-transitioning-destination=after][data-transitioning-state],.tinymce-mobile-styles-menu [data-transitioning-state=after]{transform:translate(100%)}@font-face{font-family:tinymce-mobile;font-style:normal;font-weight:400;src:url(fonts/tinymce-mobile.woff?8x92w3) format('woff')}@media (min-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:25px}}@media (max-device-width:700px){.tinymce-mobile-outer-container,.tinymce-mobile-outer-container input{font-size:18px}}.tinymce-mobile-icon{font-family:tinymce-mobile,sans-serif}.mixin-flex-and-centre{align-items:center;display:flex;justify-content:center}.mixin-flex-bar{align-items:center;display:flex;height:100%}.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe{background-color:#fff;width:100%}.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{background-color:#207ab7;border-radius:50%;bottom:1em;color:#fff;font-size:1em;height:2.1em;position:fixed;right:2em;width:2.1em;align-items:center;display:flex;justify-content:center}@media only screen and (min-device-width:700px){.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{font-size:1.2em}}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket{height:300px;overflow:hidden}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe{height:100%}.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip{display:none}input[type=file]::-webkit-file-upload-button{display:none}@media only screen and (min-device-width :320px) and (max-device-width :568px) and (orientation :landscape){.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon{bottom:50%}}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide/skin.shadowdom.css b/guns-front-project/public/tinymce/skins/ui/oxide/skin.shadowdom.css
new file mode 100644
index 00000000..d2adc4db
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide/skin.shadowdom.css
@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+body.tox-dialog__disable-scroll {
+ overflow: hidden;
+}
+.tox-fullscreen {
+ border: 0;
+ height: 100%;
+ margin: 0;
+ overflow: hidden;
+ -ms-scroll-chaining: none;
+ overscroll-behavior: none;
+ padding: 0;
+ touch-action: pinch-zoom;
+ width: 100%;
+}
+.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
+ display: none;
+}
+.tox.tox-tinymce.tox-fullscreen,
+.tox-shadowhost.tox-fullscreen {
+ left: 0;
+ position: fixed;
+ top: 0;
+ z-index: 1200;
+}
+.tox.tox-tinymce.tox-fullscreen {
+ background-color: transparent;
+}
+.tox-fullscreen .tox.tox-tinymce-aux,
+.tox-fullscreen ~ .tox.tox-tinymce-aux {
+ z-index: 1201;
+}
diff --git a/guns-front-project/public/tinymce/skins/ui/oxide/skin.shadowdom.min.css b/guns-front-project/public/tinymce/skins/ui/oxide/skin.shadowdom.min.css
new file mode 100644
index 00000000..a0893b91
--- /dev/null
+++ b/guns-front-project/public/tinymce/skins/ui/oxide/skin.shadowdom.min.css
@@ -0,0 +1,7 @@
+/**
+ * Copyright (c) Tiny Technologies, Inc. All rights reserved.
+ * Licensed under the LGPL or a commercial license.
+ * For LGPL see License.txt in the project root for license information.
+ * For commercial licenses see https://www.tiny.cloud/
+ */
+body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}
diff --git a/guns-front-project/src/App.vue b/guns-front-project/src/App.vue
new file mode 100644
index 00000000..d25b56d3
--- /dev/null
+++ b/guns-front-project/src/App.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/api/CommonApi.js b/guns-front-project/src/api/CommonApi.js
new file mode 100644
index 00000000..08f9f87f
--- /dev/null
+++ b/guns-front-project/src/api/CommonApi.js
@@ -0,0 +1,16 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 公共api
+ *
+ */
+export class CommonApi {
+ /**
+ * 获取DevOps系统编码
+ * @param {*} params
+ * @returns
+ */
+ static getSystemCode(params) {
+ return Request.get('/devops/getSystemCode', params);
+ }
+}
diff --git a/guns-front-project/src/api/CommonHrApi.js b/guns-front-project/src/api/CommonHrApi.js
new file mode 100644
index 00000000..8ae1dbfc
--- /dev/null
+++ b/guns-front-project/src/api/CommonHrApi.js
@@ -0,0 +1,46 @@
+import Request from '@/utils/request/request-util';
+
+export class CommonHrApi {
+ /**
+ * 批量获取组织机构信息
+ *
+ * @author fengshuonan
+ * @date 2022/5/8 20:36
+ * orgIdList 组织id列表
+ */
+ static getOrgListName(params) {
+ return Request.post('/common/org/getOrgListName', params);
+ }
+
+ /**
+ * 批量获取用户信息
+ *
+ * @author fengshuonan
+ * @date 2022/5/8 20:36
+ * userIdList 用户id列表
+ */
+ static getUserListName(params) {
+ return Request.post('/common/sysUser/batchGetName', params);
+ }
+
+ /**
+ * 批量获取职务信息
+ *
+ * @author fengshuonan
+ * @date 2022/5/8 20:36
+ * positionIdList 职务id列表
+ */
+ static getPositionListName(params) {
+ return Request.post('/common/position/batchGetName', params);
+ }
+
+ /**
+ * 业务排序获取
+ *
+ * @author fengshuonan
+ * @date 2022/5/8 20:36
+ */
+ static getBusinessMaxSort(code) {
+ return Request.getAndLoadData('/common/getBusinessMaxSort', { code: code });
+ }
+}
diff --git a/guns-front-project/src/assets/avatar.png b/guns-front-project/src/assets/avatar.png
new file mode 100644
index 00000000..c56269c2
Binary files /dev/null and b/guns-front-project/src/assets/avatar.png differ
diff --git a/guns-front-project/src/assets/bg-login.png b/guns-front-project/src/assets/bg-login.png
new file mode 100644
index 00000000..787837a2
Binary files /dev/null and b/guns-front-project/src/assets/bg-login.png differ
diff --git a/guns-front-project/src/assets/card-background/1.png b/guns-front-project/src/assets/card-background/1.png
new file mode 100644
index 00000000..004c3127
Binary files /dev/null and b/guns-front-project/src/assets/card-background/1.png differ
diff --git a/guns-front-project/src/assets/card-background/2.png b/guns-front-project/src/assets/card-background/2.png
new file mode 100644
index 00000000..0a1fb495
Binary files /dev/null and b/guns-front-project/src/assets/card-background/2.png differ
diff --git a/guns-front-project/src/assets/card-background/3.png b/guns-front-project/src/assets/card-background/3.png
new file mode 100644
index 00000000..3181a486
Binary files /dev/null and b/guns-front-project/src/assets/card-background/3.png differ
diff --git a/guns-front-project/src/assets/gitee.png b/guns-front-project/src/assets/gitee.png
new file mode 100644
index 00000000..b17c15f8
Binary files /dev/null and b/guns-front-project/src/assets/gitee.png differ
diff --git a/guns-front-project/src/assets/iconfont/iconfont.css b/guns-front-project/src/assets/iconfont/iconfont.css
new file mode 100644
index 00000000..39153fef
--- /dev/null
+++ b/guns-front-project/src/assets/iconfont/iconfont.css
@@ -0,0 +1,699 @@
+@font-face {
+ font-family: "iconfont"; /* Project id 4453133 */
+ src: url('iconfont.woff2?t=1710569016438') format('woff2'),
+ url('iconfont.woff?t=1710569016438') format('woff'),
+ url('iconfont.ttf?t=1710569016438') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-menu-anquancaozuo-p:before {
+ content: "\e748";
+}
+
+.icon-menu-richangyunwei-p:before {
+ content: "\e749";
+}
+
+.icon-menu-linshimiyao-p:before {
+ content: "\e74a";
+}
+
+.icon-menu-shenjirizhi-p:before {
+ content: "\e74b";
+}
+
+.icon-menu-anquancaozuo:before {
+ content: "\e74c";
+}
+
+.icon-menu-richangyunwei:before {
+ content: "\e74d";
+}
+
+.icon-menu-linshimiyao:before {
+ content: "\e74e";
+}
+
+.icon-menu-shenjirizhi:before {
+ content: "\e74f";
+}
+
+.icon-menu-quanxian-p:before {
+ content: "\e701";
+}
+
+.icon-menu-quanxian:before {
+ content: "\e6ce";
+}
+
+.icon-menu-liuchengquanxian-p:before {
+ content: "\e6cf";
+}
+
+.icon-menu-shujubiao-p:before {
+ content: "\e6d3";
+}
+
+.icon-menu-biaodan-p:before {
+ content: "\e6d4";
+}
+
+.icon-menu-duoshujuyuan:before {
+ content: "\e6d5";
+}
+
+.icon-menu-jiankongguanli-p:before {
+ content: "\e6d8";
+}
+
+.icon-menu-rizhichakan-p:before {
+ content: "\e6d6";
+}
+
+.icon-menu-yewuliebiao-p:before {
+ content: "\e6f2";
+}
+
+.icon-menu-anquancelue-p:before {
+ content: "\e6f3";
+}
+
+.icon-menu-zhutipeizhi-p:before {
+ content: "\e6f4";
+}
+
+.icon-menu-wenjianguanli-p:before {
+ content: "\e6f5";
+}
+
+.icon-menu-dingshirenwu-p:before {
+ content: "\e6f6";
+}
+
+.icon-menu-zaixianyonghu-p:before {
+ content: "\e6f7";
+}
+
+.icon-menu-xitongpeizhi-p:before {
+ content: "\e6fb";
+}
+
+.icon-menu-ziyuan-p:before {
+ content: "\e6fe";
+}
+
+.icon-menu-yingyong-p:before {
+ content: "\e6fc";
+}
+
+.icon-menu-shouquan-p:before {
+ content: "\e747";
+}
+
+.icon-menu-zhiwei-p:before {
+ content: "\e745";
+}
+
+.icon-menu-zhiwei:before {
+ content: "\e746";
+}
+
+.icon-menu-jigou-p:before {
+ content: "\e744";
+}
+
+.icon-menu-wodexiaoxi-p:before {
+ content: "\eb89";
+}
+
+.icon-menu-liuchengrenwu-p:before {
+ content: "\e743";
+}
+
+.icon-menu-xiangmu-p:before {
+ content: "\e741";
+}
+
+.icon-menu-peizhi-p:before {
+ content: "\e714";
+}
+
+.icon-menu-jiekoushouquan:before {
+ content: "\e742";
+}
+
+.icon-menu-jiekoushouquan-p:before {
+ content: "\eb88";
+}
+
+.icon-menu-jiekou-p:before {
+ content: "\e73f";
+}
+
+.icon-menu-jiekou:before {
+ content: "\e740";
+}
+
+.icon-menu-yingyongjieru-p:before {
+ content: "\e73c";
+}
+
+.icon-menu-yingyongjieru:before {
+ content: "\e73b";
+}
+
+.icon-menu-zuhushenhe:before {
+ content: "\e739";
+}
+
+.icon-menu-zuhushenhe-p:before {
+ content: "\e73a";
+}
+
+.icon-menu-zuhuguanli-p:before {
+ content: "\e71f";
+}
+
+.icon-menu-zuhuguanli:before {
+ content: "\e72b";
+}
+
+.icon-menu-gongnengbao:before {
+ content: "\e733";
+}
+
+.icon-menu-gongnengbao-p:before {
+ content: "\e734";
+}
+
+.icon-menu-apirenzheng-p:before {
+ content: "\e735";
+}
+
+.icon-menu-apirenzheng:before {
+ content: "\e736";
+}
+
+.icon-menu-waibuyingyong-p:before {
+ content: "\e737";
+}
+
+.icon-menu-waibuyingyong:before {
+ content: "\e738";
+}
+
+.icon-menu-baobiaoguanli-p:before {
+ content: "\e73e";
+}
+
+.icon-menu-baobiaoguanli:before {
+ content: "\e73d";
+}
+
+.icon-menu-liuchengliebiao:before {
+ content: "\e72d";
+}
+
+.icon-menu-liuchengliebiao-p:before {
+ content: "\e72c";
+}
+
+.icon-menu-faqiliucheng-p:before {
+ content: "\e732";
+}
+
+.icon-menu-faqiliucheng:before {
+ content: "\e72a";
+}
+
+.icon-menu-moxingliebiao-p:before {
+ content: "\e721";
+}
+
+.icon-menu-moxingliebiao:before {
+ content: "\e720";
+}
+
+.icon-menu-flow-design:before {
+ content: "\e729";
+}
+
+.icon-menu-flow-design-p:before {
+ content: "\e728";
+}
+
+.icon-menu-yewuguanlian-p:before {
+ content: "\e731";
+}
+
+.icon-menu-yewuguanlian:before {
+ content: "\e730";
+}
+
+.icon-menu-liuchengquanxian:before {
+ content: "\e72e";
+}
+
+.icon-menu-yewuliebiao:before {
+ content: "\e71a";
+}
+
+.icon-menu-shujubiao:before {
+ content: "\e726";
+}
+
+.icon-menu-biaodan:before {
+ content: "\e725";
+}
+
+.icon-menu-shitu-p:before {
+ content: "\e723";
+}
+
+.icon-menu-shitu:before {
+ content: "\e722";
+}
+
+.icon-menu-xitongpeizhi:before {
+ content: "\e709";
+}
+
+.icon-menu-zidian-p:before {
+ content: "\e70c";
+}
+
+.icon-menu-zidian:before {
+ content: "\e70b";
+}
+
+.icon-menu-zaixianyonghu:before {
+ content: "\e712";
+}
+
+.icon-menu-dingshirenwu:before {
+ content: "\e710";
+}
+
+.icon-menu-wenjianguanli:before {
+ content: "\e70e";
+}
+
+.icon-menu-duoshujuyuan-p:before {
+ content: "\e713";
+}
+
+.icon-menu-rizhichakan:before {
+ content: "\e717";
+}
+
+.icon-menu-jiankongguanli:before {
+ content: "\e715";
+}
+
+.icon-menu-zhutipeizhi:before {
+ content: "\e71e";
+}
+
+.icon-menu-anquancelue:before {
+ content: "\e71d";
+}
+
+.icon-menu-yingyong:before {
+ content: "\e6fd";
+}
+
+.icon-menu-juese-p:before {
+ content: "\e703";
+}
+
+.icon-menu-juese:before {
+ content: "\e704";
+}
+
+.icon-menu-caidan:before {
+ content: "\e705";
+}
+
+.icon-menu-caidan-p:before {
+ content: "\e702";
+}
+
+.icon-menu-ziyuan:before {
+ content: "\e708";
+}
+
+.icon-menu-renyuan-p:before {
+ content: "\e6fa";
+}
+
+.icon-menu-renyuan:before {
+ content: "\e6f9";
+}
+
+.icon-menu-jigou:before {
+ content: "\e6f8";
+}
+
+.icon-menu-shouquan:before {
+ content: "\e6ff";
+}
+
+.icon-tree-gongsi:before {
+ content: "\e6f0";
+}
+
+.icon-tree-dept:before {
+ content: "\e6ef";
+}
+
+.icon-tree-table:before {
+ content: "\e6ee";
+}
+
+.icon-tree-chengyuan:before {
+ content: "\e6ed";
+}
+
+.icon-tree-wenjianjia:before {
+ content: "\e6ec";
+}
+
+.icon-tab-yewujuese:before {
+ content: "\e6e8";
+}
+
+.icon-tab-xitongjuese:before {
+ content: "\e6e6";
+}
+
+.icon-tab-gongsijuese:before {
+ content: "\e6dc";
+}
+
+.icon-opt-export-user:before {
+ content: "\e6e3";
+}
+
+.icon-opt-import-user:before {
+ content: "\e6e2";
+}
+
+.icon-tab-jichuxinxi:before {
+ content: "\e6e9";
+}
+
+.icon-tab-jiaosexinxi:before {
+ content: "\e6e5";
+}
+
+.icon-tab-yonghuzhengshu:before {
+ content: "\e6e1";
+}
+
+.icon-tab-zuzhijigou:before {
+ content: "\e6dd";
+}
+
+.icon-opt-tuihui:before {
+ content: "\e6eb";
+}
+
+.icon-nav-zhuye:before {
+ content: "\e6e4";
+}
+
+.icon-opt-yidu:before {
+ content: "\e6df";
+}
+
+.icon-opt-yulan:before {
+ content: "\e668";
+}
+
+.icon-menu-type-single-page:before {
+ content: "\e615";
+}
+
+.icon-menu-type-backend:before {
+ content: "\eb87";
+}
+
+.icon-menu-type-inner-link:before {
+ content: "\e8ae";
+}
+
+.icon-menu-type-waibulianjie:before {
+ content: "\e85f";
+}
+
+.icon-opt-zidingyilie:before {
+ content: "\e66b";
+}
+
+.icon-opt-search:before {
+ content: "\e65c";
+}
+
+.icon-opt-qiehuan:before {
+ content: "\e661";
+}
+
+.icon-opt-tianjia:before {
+ content: "\e66f";
+}
+
+.icon-opt-daoru:before {
+ content: "\e68c";
+}
+
+.icon-opt-daochu:before {
+ content: "\e689";
+}
+
+.icon-opt-shuaxin:before {
+ content: "\e685";
+}
+
+.icon-opt-fangda:before {
+ content: "\e6ba";
+}
+
+.icon-opt-suoxiao:before {
+ content: "\e6b9";
+}
+
+.icon-opt-jiaqian:before {
+ content: "\e6ab";
+}
+
+.icon-opt-tongyi:before {
+ content: "\e6a9";
+}
+
+.icon-opt-chehui:before {
+ content: "\e6a8";
+}
+
+.icon-opt-jujue:before {
+ content: "\e6a5";
+}
+
+.icon-opt-zhuanjiao:before {
+ content: "\e6a4";
+}
+
+.icon-xiala-xiugaitouxiang:before {
+ content: "\e68f";
+}
+
+.icon-xiala-xiugaimima:before {
+ content: "\e67d";
+}
+
+.icon-xiala-gerenxinxi:before {
+ content: "\e684";
+}
+
+.icon-xiala-tuichudenglu:before {
+ content: "\e6b8";
+}
+
+.icon-opt-fabu:before {
+ content: "\e691";
+}
+
+.icon-opt-shezhi:before {
+ content: "\e658";
+}
+
+.icon-opt-xiangqing:before {
+ content: "\e683";
+}
+
+.icon-opt-shangchuandaoshujuku:before {
+ content: "\e679";
+}
+
+.icon-opt-shangchuan:before {
+ content: "\e688";
+}
+
+.icon-opt-xiazai:before {
+ content: "\e687";
+}
+
+.icon-opt-tixiaxian:before {
+ content: "\e67f";
+}
+
+.icon-opt-shenpirenshezhi:before {
+ content: "\e675";
+}
+
+.icon-opt-liuchengqianyi:before {
+ content: "\e67a";
+}
+
+.icon-opt-liuchengsheji:before {
+ content: "\e6b7";
+}
+
+.icon-opt-bianji:before {
+ content: "\e662";
+}
+
+.icon-opt-shoucang:before {
+ content: "\e669";
+}
+
+.icon-opt-yishoucang:before {
+ content: "\e667";
+}
+
+.icon-opt-shanchu:before {
+ content: "\e66a";
+}
+
+.icon-opt-fenpeijuese:before {
+ content: "\e674";
+}
+
+.icon-opt-chongzhimima:before {
+ content: "\e67c";
+}
+
+.icon-opt-fuzhi:before {
+ content: "\e699";
+}
+
+.icon-nav-gongsi:before {
+ content: "\e65b";
+}
+
+.icon-nav-yingyong:before {
+ content: "\e656";
+}
+
+.icon-nav-tongzhi:before {
+ content: "\e655";
+}
+
+.icon-nav-duoyuyan:before {
+ content: "\e65e";
+}
+
+.icon-nav-gengduopeizhi:before {
+ content: "\e66c";
+}
+
+.icon-faqiliucheng:before {
+ content: "\e6a1";
+}
+
+.icon-daibanrenwu:before {
+ content: "\e6a0";
+}
+
+.icon-yibanshixiang:before {
+ content: "\e69d";
+}
+
+.icon-yiyueshixiang:before {
+ content: "\e69c";
+}
+
+.icon-daiyuerenwu:before {
+ content: "\e69b";
+}
+
+.icon-wodecaogao:before {
+ content: "\e6c5";
+}
+
+.icon-wofaqide:before {
+ content: "\e6cb";
+}
+
+.icon-quanbuxiangmu:before {
+ content: "\e69e";
+}
+
+.icon-woshoucangde:before {
+ content: "\e69f";
+}
+
+.icon-menu-yingyongguanli:before {
+ content: "\e68e";
+}
+
+.icon-menu-yingyongguanli-p:before {
+ content: "\e68d";
+}
+
+.icon-menu-liuchengsheji:before {
+ content: "\e6ae";
+}
+
+.icon-menu-liuchengsheji-p:before {
+ content: "\e6af";
+}
+
+.icon-menu-xiangmu:before {
+ content: "\e6b5";
+}
+
+.icon-menu-liuchengrenwu:before {
+ content: "\e6d0";
+}
+
+.icon-menu-zuzhijiagou:before {
+ content: "\e698";
+}
+
+.icon-menu-wodexiaoxi:before {
+ content: "\e6b2";
+}
+
+.icon-menu-peizhi:before {
+ content: "\e6b4";
+}
+
+.icon-menu-quanxiankongzhi-p:before {
+ content: "\e6d2";
+}
+
+.icon-menu-quanxiankongzhi:before {
+ content: "\e6d1";
+}
+
+.icon-menu-zuzhijiagou-p:before {
+ content: "\e6cc";
+}
+
diff --git a/guns-front-project/src/assets/iconfont/iconfont.js b/guns-front-project/src/assets/iconfont/iconfont.js
new file mode 100644
index 00000000..f306b082
--- /dev/null
+++ b/guns-front-project/src/assets/iconfont/iconfont.js
@@ -0,0 +1 @@
+window._iconfont_svg_string_4453133='',function(h){var a=(a=document.getElementsByTagName("script"))[a.length-1],l=a.getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var c,i,z,m,v,o=function(a,l){l.parentNode.insertBefore(a,l)};if(l&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}c=function(){var a,l=document.createElement("div");l.innerHTML=h._iconfont_svg_string_4453133,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(a=document.body).firstChild?o(l,a.firstChild):a.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(i=function(){document.removeEventListener("DOMContentLoaded",i,!1),c()},document.addEventListener("DOMContentLoaded",i,!1)):document.attachEvent&&(z=c,m=h.document,v=!1,p(),m.onreadystatechange=function(){"complete"==m.readyState&&(m.onreadystatechange=null,t())})}function t(){v||(v=!0,z())}function p(){try{m.documentElement.doScroll("left")}catch(a){return void setTimeout(p,50)}t()}}(window);
\ No newline at end of file
diff --git a/guns-front-project/src/assets/iconfont/iconfont.json b/guns-front-project/src/assets/iconfont/iconfont.json
new file mode 100644
index 00000000..dd9b3c3e
--- /dev/null
+++ b/guns-front-project/src/assets/iconfont/iconfont.json
@@ -0,0 +1,1206 @@
+{
+ "id": "4453133",
+ "name": "产品UI-菜单+基础",
+ "font_family": "iconfont",
+ "css_prefix_text": "icon-",
+ "description": "",
+ "glyphs": [
+ {
+ "icon_id": "39574651",
+ "name": "菜单-安全操作",
+ "font_class": "menu-anquancaozuo-p",
+ "unicode": "e748",
+ "unicode_decimal": 59208
+ },
+ {
+ "icon_id": "39574652",
+ "name": "菜单-日常运维",
+ "font_class": "menu-richangyunwei-p",
+ "unicode": "e749",
+ "unicode_decimal": 59209
+ },
+ {
+ "icon_id": "39574653",
+ "name": "菜单-临时秘钥",
+ "font_class": "menu-linshimiyao-p",
+ "unicode": "e74a",
+ "unicode_decimal": 59210
+ },
+ {
+ "icon_id": "39574654",
+ "name": "菜单-审计日志",
+ "font_class": "menu-shenjirizhi-p",
+ "unicode": "e74b",
+ "unicode_decimal": 59211
+ },
+ {
+ "icon_id": "39574655",
+ "name": "菜单-安全操作",
+ "font_class": "menu-anquancaozuo",
+ "unicode": "e74c",
+ "unicode_decimal": 59212
+ },
+ {
+ "icon_id": "39574656",
+ "name": "菜单-日常运维",
+ "font_class": "menu-richangyunwei",
+ "unicode": "e74d",
+ "unicode_decimal": 59213
+ },
+ {
+ "icon_id": "39574657",
+ "name": "菜单-临时秘钥",
+ "font_class": "menu-linshimiyao",
+ "unicode": "e74e",
+ "unicode_decimal": 59214
+ },
+ {
+ "icon_id": "39574658",
+ "name": "菜单-审计日志",
+ "font_class": "menu-shenjirizhi",
+ "unicode": "e74f",
+ "unicode_decimal": 59215
+ },
+ {
+ "icon_id": "39523255",
+ "name": "菜单-权限",
+ "font_class": "menu-quanxian-p",
+ "unicode": "e701",
+ "unicode_decimal": 59137
+ },
+ {
+ "icon_id": "39533678",
+ "name": "菜单-权限",
+ "font_class": "menu-quanxian",
+ "unicode": "e6ce",
+ "unicode_decimal": 59086
+ },
+ {
+ "icon_id": "39533890",
+ "name": "菜单-流程权限",
+ "font_class": "menu-liuchengquanxian-p",
+ "unicode": "e6cf",
+ "unicode_decimal": 59087
+ },
+ {
+ "icon_id": "39534087",
+ "name": "菜单-数据表",
+ "font_class": "menu-shujubiao-p",
+ "unicode": "e6d3",
+ "unicode_decimal": 59091
+ },
+ {
+ "icon_id": "39534533",
+ "name": "菜单-表单",
+ "font_class": "menu-biaodan-p",
+ "unicode": "e6d4",
+ "unicode_decimal": 59092
+ },
+ {
+ "icon_id": "39535136",
+ "name": "菜单-多数据源",
+ "font_class": "menu-duoshujuyuan",
+ "unicode": "e6d5",
+ "unicode_decimal": 59093
+ },
+ {
+ "icon_id": "39535314",
+ "name": "菜单-监控管理",
+ "font_class": "menu-jiankongguanli-p",
+ "unicode": "e6d8",
+ "unicode_decimal": 59096
+ },
+ {
+ "icon_id": "39535342",
+ "name": "菜单-日志查看",
+ "font_class": "menu-rizhichakan-p",
+ "unicode": "e6d6",
+ "unicode_decimal": 59094
+ },
+ {
+ "icon_id": "39536046",
+ "name": "菜单-业务列表",
+ "font_class": "menu-yewuliebiao-p",
+ "unicode": "e6f2",
+ "unicode_decimal": 59122
+ },
+ {
+ "icon_id": "39537406",
+ "name": "菜单-安全策略",
+ "font_class": "menu-anquancelue-p",
+ "unicode": "e6f3",
+ "unicode_decimal": 59123
+ },
+ {
+ "icon_id": "39537557",
+ "name": "菜单-主题配置",
+ "font_class": "menu-zhutipeizhi-p",
+ "unicode": "e6f4",
+ "unicode_decimal": 59124
+ },
+ {
+ "icon_id": "39537569",
+ "name": "菜单-文件管理",
+ "font_class": "menu-wenjianguanli-p",
+ "unicode": "e6f5",
+ "unicode_decimal": 59125
+ },
+ {
+ "icon_id": "39537626",
+ "name": "菜单-定时任务",
+ "font_class": "menu-dingshirenwu-p",
+ "unicode": "e6f6",
+ "unicode_decimal": 59126
+ },
+ {
+ "icon_id": "39537791",
+ "name": "菜单-在线用户",
+ "font_class": "menu-zaixianyonghu-p",
+ "unicode": "e6f7",
+ "unicode_decimal": 59127
+ },
+ {
+ "icon_id": "39538291",
+ "name": "菜单-系统配置",
+ "font_class": "menu-xitongpeizhi-p",
+ "unicode": "e6fb",
+ "unicode_decimal": 59131
+ },
+ {
+ "icon_id": "39538469",
+ "name": "菜单-资源",
+ "font_class": "menu-ziyuan-p",
+ "unicode": "e6fe",
+ "unicode_decimal": 59134
+ },
+ {
+ "icon_id": "39538518",
+ "name": "菜单-应用",
+ "font_class": "menu-yingyong-p",
+ "unicode": "e6fc",
+ "unicode_decimal": 59132
+ },
+ {
+ "icon_id": "39540384",
+ "name": "菜单-授权",
+ "font_class": "menu-shouquan-p",
+ "unicode": "e747",
+ "unicode_decimal": 59207
+ },
+ {
+ "icon_id": "39540427",
+ "name": "菜单-职位",
+ "font_class": "menu-zhiwei-p",
+ "unicode": "e745",
+ "unicode_decimal": 59205
+ },
+ {
+ "icon_id": "39540528",
+ "name": "菜单-职位",
+ "font_class": "menu-zhiwei",
+ "unicode": "e746",
+ "unicode_decimal": 59206
+ },
+ {
+ "icon_id": "39540531",
+ "name": "菜单-机构",
+ "font_class": "menu-jigou-p",
+ "unicode": "e744",
+ "unicode_decimal": 59204
+ },
+ {
+ "icon_id": "39573817",
+ "name": "菜单-通知公告",
+ "font_class": "menu-wodexiaoxi-p",
+ "unicode": "eb89",
+ "unicode_decimal": 60297
+ },
+ {
+ "icon_id": "39540716",
+ "name": "菜单-流程任务",
+ "font_class": "menu-liuchengrenwu-p",
+ "unicode": "e743",
+ "unicode_decimal": 59203
+ },
+ {
+ "icon_id": "39540898",
+ "name": "菜单-项目管理",
+ "font_class": "menu-xiangmu-p",
+ "unicode": "e741",
+ "unicode_decimal": 59201
+ },
+ {
+ "icon_id": "39541093",
+ "name": "菜单-后台配置",
+ "font_class": "menu-peizhi-p",
+ "unicode": "e714",
+ "unicode_decimal": 59156
+ },
+ {
+ "icon_id": "39555493",
+ "name": "菜单-接口授权",
+ "font_class": "menu-jiekoushouquan",
+ "unicode": "e742",
+ "unicode_decimal": 59202
+ },
+ {
+ "icon_id": "39573765",
+ "name": "菜单-接口授权",
+ "font_class": "menu-jiekoushouquan-p",
+ "unicode": "eb88",
+ "unicode_decimal": 60296
+ },
+ {
+ "icon_id": "39555353",
+ "name": "菜单-接口",
+ "font_class": "menu-jiekou-p",
+ "unicode": "e73f",
+ "unicode_decimal": 59199
+ },
+ {
+ "icon_id": "39555354",
+ "name": "菜单-接口",
+ "font_class": "menu-jiekou",
+ "unicode": "e740",
+ "unicode_decimal": 59200
+ },
+ {
+ "icon_id": "39555623",
+ "name": "菜单-应用接入",
+ "font_class": "menu-yingyongjieru-p",
+ "unicode": "e73c",
+ "unicode_decimal": 59196
+ },
+ {
+ "icon_id": "39555624",
+ "name": "菜单-应用接入",
+ "font_class": "menu-yingyongjieru",
+ "unicode": "e73b",
+ "unicode_decimal": 59195
+ },
+ {
+ "icon_id": "39554760",
+ "name": "菜单-租户-租户审核",
+ "font_class": "menu-zuhushenhe",
+ "unicode": "e739",
+ "unicode_decimal": 59193
+ },
+ {
+ "icon_id": "39554761",
+ "name": "菜单-租户-租户审核",
+ "font_class": "menu-zuhushenhe-p",
+ "unicode": "e73a",
+ "unicode_decimal": 59194
+ },
+ {
+ "icon_id": "39553670",
+ "name": "菜单-租户管理",
+ "font_class": "menu-zuhuguanli-p",
+ "unicode": "e71f",
+ "unicode_decimal": 59167
+ },
+ {
+ "icon_id": "39554167",
+ "name": "菜单-租户管理",
+ "font_class": "menu-zuhuguanli",
+ "unicode": "e72b",
+ "unicode_decimal": 59179
+ },
+ {
+ "icon_id": "39554470",
+ "name": "菜单-租户-功能包管理",
+ "font_class": "menu-gongnengbao",
+ "unicode": "e733",
+ "unicode_decimal": 59187
+ },
+ {
+ "icon_id": "39554471",
+ "name": "菜单-租户-功能包管理",
+ "font_class": "menu-gongnengbao-p",
+ "unicode": "e734",
+ "unicode_decimal": 59188
+ },
+ {
+ "icon_id": "39555047",
+ "name": "菜单-api认证",
+ "font_class": "menu-apirenzheng-p",
+ "unicode": "e735",
+ "unicode_decimal": 59189
+ },
+ {
+ "icon_id": "39555048",
+ "name": "菜单-api认证",
+ "font_class": "menu-apirenzheng",
+ "unicode": "e736",
+ "unicode_decimal": 59190
+ },
+ {
+ "icon_id": "39555202",
+ "name": "菜单-外部应用",
+ "font_class": "menu-waibuyingyong-p",
+ "unicode": "e737",
+ "unicode_decimal": 59191
+ },
+ {
+ "icon_id": "39555203",
+ "name": "菜单-外部应用",
+ "font_class": "menu-waibuyingyong",
+ "unicode": "e738",
+ "unicode_decimal": 59192
+ },
+ {
+ "icon_id": "39555767",
+ "name": "菜单-报表管理",
+ "font_class": "menu-baobiaoguanli-p",
+ "unicode": "e73e",
+ "unicode_decimal": 59198
+ },
+ {
+ "icon_id": "39555768",
+ "name": "菜单-报表管理",
+ "font_class": "menu-baobiaoguanli",
+ "unicode": "e73d",
+ "unicode_decimal": 59197
+ },
+ {
+ "icon_id": "39525750",
+ "name": "菜单-流程列表",
+ "font_class": "menu-liuchengliebiao",
+ "unicode": "e72d",
+ "unicode_decimal": 59181
+ },
+ {
+ "icon_id": "39525751",
+ "name": "菜单-流程列表",
+ "font_class": "menu-liuchengliebiao-p",
+ "unicode": "e72c",
+ "unicode_decimal": 59180
+ },
+ {
+ "icon_id": "39525752",
+ "name": "菜单-发起流程",
+ "font_class": "menu-faqiliucheng-p",
+ "unicode": "e732",
+ "unicode_decimal": 59186
+ },
+ {
+ "icon_id": "39525753",
+ "name": "菜单-发起流程",
+ "font_class": "menu-faqiliucheng",
+ "unicode": "e72a",
+ "unicode_decimal": 59178
+ },
+ {
+ "icon_id": "39525738",
+ "name": "菜单-模型列表",
+ "font_class": "menu-moxingliebiao-p",
+ "unicode": "e721",
+ "unicode_decimal": 59169
+ },
+ {
+ "icon_id": "39525739",
+ "name": "菜单-模型列表",
+ "font_class": "menu-moxingliebiao",
+ "unicode": "e720",
+ "unicode_decimal": 59168
+ },
+ {
+ "icon_id": "39525740",
+ "name": "菜单-流程设计-设计界面",
+ "font_class": "menu-flow-design",
+ "unicode": "e729",
+ "unicode_decimal": 59177
+ },
+ {
+ "icon_id": "39525741",
+ "name": "菜单-流程设计-设计界面",
+ "font_class": "menu-flow-design-p",
+ "unicode": "e728",
+ "unicode_decimal": 59176
+ },
+ {
+ "icon_id": "39525744",
+ "name": "菜单-业务关联",
+ "font_class": "menu-yewuguanlian-p",
+ "unicode": "e731",
+ "unicode_decimal": 59185
+ },
+ {
+ "icon_id": "39525745",
+ "name": "菜单-业务关联",
+ "font_class": "menu-yewuguanlian",
+ "unicode": "e730",
+ "unicode_decimal": 59184
+ },
+ {
+ "icon_id": "39525749",
+ "name": "菜单-流程权限",
+ "font_class": "menu-liuchengquanxian",
+ "unicode": "e72e",
+ "unicode_decimal": 59182
+ },
+ {
+ "icon_id": "39525721",
+ "name": "菜单-业务列表",
+ "font_class": "menu-yewuliebiao",
+ "unicode": "e71a",
+ "unicode_decimal": 59162
+ },
+ {
+ "icon_id": "39525726",
+ "name": "菜单-数据表",
+ "font_class": "menu-shujubiao",
+ "unicode": "e726",
+ "unicode_decimal": 59174
+ },
+ {
+ "icon_id": "39525735",
+ "name": "菜单-表单",
+ "font_class": "menu-biaodan",
+ "unicode": "e725",
+ "unicode_decimal": 59173
+ },
+ {
+ "icon_id": "39525736",
+ "name": "菜单-视图",
+ "font_class": "menu-shitu-p",
+ "unicode": "e723",
+ "unicode_decimal": 59171
+ },
+ {
+ "icon_id": "39525737",
+ "name": "菜单-视图",
+ "font_class": "menu-shitu",
+ "unicode": "e722",
+ "unicode_decimal": 59170
+ },
+ {
+ "icon_id": "39523503",
+ "name": "菜单-系统配置",
+ "font_class": "menu-xitongpeizhi",
+ "unicode": "e709",
+ "unicode_decimal": 59145
+ },
+ {
+ "icon_id": "39523515",
+ "name": "菜单-字典",
+ "font_class": "menu-zidian-p",
+ "unicode": "e70c",
+ "unicode_decimal": 59148
+ },
+ {
+ "icon_id": "39523622",
+ "name": "菜单-字典",
+ "font_class": "menu-zidian",
+ "unicode": "e70b",
+ "unicode_decimal": 59147
+ },
+ {
+ "icon_id": "39524502",
+ "name": "菜单-在线用户",
+ "font_class": "menu-zaixianyonghu",
+ "unicode": "e712",
+ "unicode_decimal": 59154
+ },
+ {
+ "icon_id": "39524520",
+ "name": "菜单-定时任务",
+ "font_class": "menu-dingshirenwu",
+ "unicode": "e710",
+ "unicode_decimal": 59152
+ },
+ {
+ "icon_id": "39524525",
+ "name": "菜单-文件管理",
+ "font_class": "menu-wenjianguanli",
+ "unicode": "e70e",
+ "unicode_decimal": 59150
+ },
+ {
+ "icon_id": "39524526",
+ "name": "菜单-多数据源",
+ "font_class": "menu-duoshujuyuan-p",
+ "unicode": "e713",
+ "unicode_decimal": 59155
+ },
+ {
+ "icon_id": "39525707",
+ "name": "菜单-日志查看",
+ "font_class": "menu-rizhichakan",
+ "unicode": "e717",
+ "unicode_decimal": 59159
+ },
+ {
+ "icon_id": "39525709",
+ "name": "菜单-监控管理",
+ "font_class": "menu-jiankongguanli",
+ "unicode": "e715",
+ "unicode_decimal": 59157
+ },
+ {
+ "icon_id": "39525714",
+ "name": "菜单-主题配置",
+ "font_class": "menu-zhutipeizhi",
+ "unicode": "e71e",
+ "unicode_decimal": 59166
+ },
+ {
+ "icon_id": "39525719",
+ "name": "菜单-安全策略",
+ "font_class": "menu-anquancelue",
+ "unicode": "e71d",
+ "unicode_decimal": 59165
+ },
+ {
+ "icon_id": "39523235",
+ "name": "菜单-应用",
+ "font_class": "menu-yingyong",
+ "unicode": "e6fd",
+ "unicode_decimal": 59133
+ },
+ {
+ "icon_id": "39523259",
+ "name": "菜单-角色",
+ "font_class": "menu-juese-p",
+ "unicode": "e703",
+ "unicode_decimal": 59139
+ },
+ {
+ "icon_id": "39523359",
+ "name": "菜单-角色",
+ "font_class": "menu-juese",
+ "unicode": "e704",
+ "unicode_decimal": 59140
+ },
+ {
+ "icon_id": "39523374",
+ "name": "菜单-菜单",
+ "font_class": "menu-caidan",
+ "unicode": "e705",
+ "unicode_decimal": 59141
+ },
+ {
+ "icon_id": "39523375",
+ "name": "菜单-菜单",
+ "font_class": "menu-caidan-p",
+ "unicode": "e702",
+ "unicode_decimal": 59138
+ },
+ {
+ "icon_id": "39523497",
+ "name": "菜单-资源",
+ "font_class": "menu-ziyuan",
+ "unicode": "e708",
+ "unicode_decimal": 59144
+ },
+ {
+ "icon_id": "39523044",
+ "name": "菜单-人员",
+ "font_class": "menu-renyuan-p",
+ "unicode": "e6fa",
+ "unicode_decimal": 59130
+ },
+ {
+ "icon_id": "39523045",
+ "name": "菜单-人员",
+ "font_class": "menu-renyuan",
+ "unicode": "e6f9",
+ "unicode_decimal": 59129
+ },
+ {
+ "icon_id": "39523071",
+ "name": "菜单-机构",
+ "font_class": "menu-jigou",
+ "unicode": "e6f8",
+ "unicode_decimal": 59128
+ },
+ {
+ "icon_id": "39523224",
+ "name": "菜单-授权",
+ "font_class": "menu-shouquan",
+ "unicode": "e6ff",
+ "unicode_decimal": 59135
+ },
+ {
+ "icon_id": "39474651",
+ "name": "树节点-公司",
+ "font_class": "tree-gongsi",
+ "unicode": "e6f0",
+ "unicode_decimal": 59120
+ },
+ {
+ "icon_id": "39474652",
+ "name": "树节点-部门",
+ "font_class": "tree-dept",
+ "unicode": "e6ef",
+ "unicode_decimal": 59119
+ },
+ {
+ "icon_id": "39474653",
+ "name": "树节点-表格",
+ "font_class": "tree-table",
+ "unicode": "e6ee",
+ "unicode_decimal": 59118
+ },
+ {
+ "icon_id": "39474654",
+ "name": "树节点-成员",
+ "font_class": "tree-chengyuan",
+ "unicode": "e6ed",
+ "unicode_decimal": 59117
+ },
+ {
+ "icon_id": "39460944",
+ "name": "树节点-文件夹",
+ "font_class": "tree-wenjianjia",
+ "unicode": "e6ec",
+ "unicode_decimal": 59116
+ },
+ {
+ "icon_id": "39460948",
+ "name": "标签页-业务角色",
+ "font_class": "tab-yewujuese",
+ "unicode": "e6e8",
+ "unicode_decimal": 59112
+ },
+ {
+ "icon_id": "39460949",
+ "name": "标签页-系统角色",
+ "font_class": "tab-xitongjuese",
+ "unicode": "e6e6",
+ "unicode_decimal": 59110
+ },
+ {
+ "icon_id": "39460972",
+ "name": "标签页-公司角色",
+ "font_class": "tab-gongsijuese",
+ "unicode": "e6dc",
+ "unicode_decimal": 59100
+ },
+ {
+ "icon_id": "39460951",
+ "name": "操作-导出用户",
+ "font_class": "opt-export-user",
+ "unicode": "e6e3",
+ "unicode_decimal": 59107
+ },
+ {
+ "icon_id": "39460954",
+ "name": "操作-导入用户",
+ "font_class": "opt-import-user",
+ "unicode": "e6e2",
+ "unicode_decimal": 59106
+ },
+ {
+ "icon_id": "39460942",
+ "name": "标签页-基础信息",
+ "font_class": "tab-jichuxinxi",
+ "unicode": "e6e9",
+ "unicode_decimal": 59113
+ },
+ {
+ "icon_id": "39460950",
+ "name": "标签页-角色信息",
+ "font_class": "tab-jiaosexinxi",
+ "unicode": "e6e5",
+ "unicode_decimal": 59109
+ },
+ {
+ "icon_id": "39460953",
+ "name": "标签页-用户证书",
+ "font_class": "tab-yonghuzhengshu",
+ "unicode": "e6e1",
+ "unicode_decimal": 59105
+ },
+ {
+ "icon_id": "39460958",
+ "name": "标签页-组织机构",
+ "font_class": "tab-zuzhijigou",
+ "unicode": "e6dd",
+ "unicode_decimal": 59101
+ },
+ {
+ "icon_id": "39460945",
+ "name": "操作-退回",
+ "font_class": "opt-tuihui",
+ "unicode": "e6eb",
+ "unicode_decimal": 59115
+ },
+ {
+ "icon_id": "39460952",
+ "name": "导航条-主页",
+ "font_class": "nav-zhuye",
+ "unicode": "e6e4",
+ "unicode_decimal": 59108
+ },
+ {
+ "icon_id": "39460956",
+ "name": "操作-已读",
+ "font_class": "opt-yidu",
+ "unicode": "e6df",
+ "unicode_decimal": 59103
+ },
+ {
+ "icon_id": "39407704",
+ "name": "操作-预览",
+ "font_class": "opt-yulan",
+ "unicode": "e668",
+ "unicode_decimal": 58984
+ },
+ {
+ "icon_id": "1447730",
+ "name": "菜单类型-纯前端路由",
+ "font_class": "menu-type-single-page",
+ "unicode": "e615",
+ "unicode_decimal": 58901
+ },
+ {
+ "icon_id": "5387902",
+ "name": "菜单类型-后台菜单",
+ "font_class": "menu-type-backend",
+ "unicode": "eb87",
+ "unicode_decimal": 60295
+ },
+ {
+ "icon_id": "10880727",
+ "name": "菜单类型-内部链接",
+ "font_class": "menu-type-inner-link",
+ "unicode": "e8ae",
+ "unicode_decimal": 59566
+ },
+ {
+ "icon_id": "34202262",
+ "name": "菜单类型-外部链接",
+ "font_class": "menu-type-waibulianjie",
+ "unicode": "e85f",
+ "unicode_decimal": 59487
+ },
+ {
+ "icon_id": "39407700",
+ "name": "操作-自定义列",
+ "font_class": "opt-zidingyilie",
+ "unicode": "e66b",
+ "unicode_decimal": 58987
+ },
+ {
+ "icon_id": "39407623",
+ "name": "操作-搜索",
+ "font_class": "opt-search",
+ "unicode": "e65c",
+ "unicode_decimal": 58972
+ },
+ {
+ "icon_id": "39407680",
+ "name": "操作-切换",
+ "font_class": "opt-qiehuan",
+ "unicode": "e661",
+ "unicode_decimal": 58977
+ },
+ {
+ "icon_id": "39407697",
+ "name": "操作-添加",
+ "font_class": "opt-tianjia",
+ "unicode": "e66f",
+ "unicode_decimal": 58991
+ },
+ {
+ "icon_id": "39407756",
+ "name": "操作-导入",
+ "font_class": "opt-daoru",
+ "unicode": "e68c",
+ "unicode_decimal": 59020
+ },
+ {
+ "icon_id": "39407757",
+ "name": "操作-导出",
+ "font_class": "opt-daochu",
+ "unicode": "e689",
+ "unicode_decimal": 59017
+ },
+ {
+ "icon_id": "39407762",
+ "name": "操作-刷新",
+ "font_class": "opt-shuaxin",
+ "unicode": "e685",
+ "unicode_decimal": 59013
+ },
+ {
+ "icon_id": "39407837",
+ "name": "操作-放大",
+ "font_class": "opt-fangda",
+ "unicode": "e6ba",
+ "unicode_decimal": 59066
+ },
+ {
+ "icon_id": "39407838",
+ "name": "操作-缩小",
+ "font_class": "opt-suoxiao",
+ "unicode": "e6b9",
+ "unicode_decimal": 59065
+ },
+ {
+ "icon_id": "39407799",
+ "name": "操作-加签",
+ "font_class": "opt-jiaqian",
+ "unicode": "e6ab",
+ "unicode_decimal": 59051
+ },
+ {
+ "icon_id": "39407801",
+ "name": "操作-同意",
+ "font_class": "opt-tongyi",
+ "unicode": "e6a9",
+ "unicode_decimal": 59049
+ },
+ {
+ "icon_id": "39407802",
+ "name": "操作-撤回",
+ "font_class": "opt-chehui",
+ "unicode": "e6a8",
+ "unicode_decimal": 59048
+ },
+ {
+ "icon_id": "39407804",
+ "name": "操作-拒绝",
+ "font_class": "opt-jujue",
+ "unicode": "e6a5",
+ "unicode_decimal": 59045
+ },
+ {
+ "icon_id": "39407806",
+ "name": "操作-转交",
+ "font_class": "opt-zhuanjiao",
+ "unicode": "e6a4",
+ "unicode_decimal": 59044
+ },
+ {
+ "icon_id": "39407777",
+ "name": "下拉菜单-修改头像",
+ "font_class": "xiala-xiugaitouxiang",
+ "unicode": "e68f",
+ "unicode_decimal": 59023
+ },
+ {
+ "icon_id": "39407751",
+ "name": "下拉菜单-修改密码",
+ "font_class": "xiala-xiugaimima",
+ "unicode": "e67d",
+ "unicode_decimal": 59005
+ },
+ {
+ "icon_id": "39407767",
+ "name": "下拉菜单-个人信息",
+ "font_class": "xiala-gerenxinxi",
+ "unicode": "e684",
+ "unicode_decimal": 59012
+ },
+ {
+ "icon_id": "39407839",
+ "name": "下拉菜单-退出登录",
+ "font_class": "xiala-tuichudenglu",
+ "unicode": "e6b8",
+ "unicode_decimal": 59064
+ },
+ {
+ "icon_id": "39407775",
+ "name": "操作-发布",
+ "font_class": "opt-fabu",
+ "unicode": "e691",
+ "unicode_decimal": 59025
+ },
+ {
+ "icon_id": "39407627",
+ "name": "操作-设置",
+ "font_class": "opt-shezhi",
+ "unicode": "e658",
+ "unicode_decimal": 58968
+ },
+ {
+ "icon_id": "39407765",
+ "name": "操作-查看详情",
+ "font_class": "opt-xiangqing",
+ "unicode": "e683",
+ "unicode_decimal": 59011
+ },
+ {
+ "icon_id": "39407732",
+ "name": "操作-上传到数据库",
+ "font_class": "opt-shangchuandaoshujuku",
+ "unicode": "e679",
+ "unicode_decimal": 59001
+ },
+ {
+ "icon_id": "39407759",
+ "name": "操作-上传",
+ "font_class": "opt-shangchuan",
+ "unicode": "e688",
+ "unicode_decimal": 59016
+ },
+ {
+ "icon_id": "39407761",
+ "name": "操作-下载",
+ "font_class": "opt-xiazai",
+ "unicode": "e687",
+ "unicode_decimal": 59015
+ },
+ {
+ "icon_id": "39407770",
+ "name": "操作-踢下线",
+ "font_class": "opt-tixiaxian",
+ "unicode": "e67f",
+ "unicode_decimal": 59007
+ },
+ {
+ "icon_id": "39407716",
+ "name": "操作-审批人设置",
+ "font_class": "opt-shenpirenshezhi",
+ "unicode": "e675",
+ "unicode_decimal": 58997
+ },
+ {
+ "icon_id": "39407744",
+ "name": "操作-流程迁移",
+ "font_class": "opt-liuchengqianyi",
+ "unicode": "e67a",
+ "unicode_decimal": 59002
+ },
+ {
+ "icon_id": "39407840",
+ "name": "操作-流程设计",
+ "font_class": "opt-liuchengsheji",
+ "unicode": "e6b7",
+ "unicode_decimal": 59063
+ },
+ {
+ "icon_id": "39407679",
+ "name": "操作-编辑",
+ "font_class": "opt-bianji",
+ "unicode": "e662",
+ "unicode_decimal": 58978
+ },
+ {
+ "icon_id": "39407701",
+ "name": "操作-收藏",
+ "font_class": "opt-shoucang",
+ "unicode": "e669",
+ "unicode_decimal": 58985
+ },
+ {
+ "icon_id": "39407702",
+ "name": "操作-已收藏",
+ "font_class": "opt-yishoucang",
+ "unicode": "e667",
+ "unicode_decimal": 58983
+ },
+ {
+ "icon_id": "39407703",
+ "name": "操作-删除",
+ "font_class": "opt-shanchu",
+ "unicode": "e66a",
+ "unicode_decimal": 58986
+ },
+ {
+ "icon_id": "39407709",
+ "name": "操作-分配角色",
+ "font_class": "opt-fenpeijuese",
+ "unicode": "e674",
+ "unicode_decimal": 58996
+ },
+ {
+ "icon_id": "39407753",
+ "name": "操作-重置密码",
+ "font_class": "opt-chongzhimima",
+ "unicode": "e67c",
+ "unicode_decimal": 59004
+ },
+ {
+ "icon_id": "39407793",
+ "name": "操作-复制",
+ "font_class": "opt-fuzhi",
+ "unicode": "e699",
+ "unicode_decimal": 59033
+ },
+ {
+ "icon_id": "39407626",
+ "name": "导航条-当前公司",
+ "font_class": "nav-gongsi",
+ "unicode": "e65b",
+ "unicode_decimal": 58971
+ },
+ {
+ "icon_id": "39407629",
+ "name": "导航条-应用",
+ "font_class": "nav-yingyong",
+ "unicode": "e656",
+ "unicode_decimal": 58966
+ },
+ {
+ "icon_id": "39407631",
+ "name": "导航条-通知",
+ "font_class": "nav-tongzhi",
+ "unicode": "e655",
+ "unicode_decimal": 58965
+ },
+ {
+ "icon_id": "39407677",
+ "name": "导航条-多语言",
+ "font_class": "nav-duoyuyan",
+ "unicode": "e65e",
+ "unicode_decimal": 58974
+ },
+ {
+ "icon_id": "39407696",
+ "name": "导航条-更多配置",
+ "font_class": "nav-gengduopeizhi",
+ "unicode": "e66c",
+ "unicode_decimal": 58988
+ },
+ {
+ "icon_id": "39407810",
+ "name": "发起流程",
+ "font_class": "faqiliucheng",
+ "unicode": "e6a1",
+ "unicode_decimal": 59041
+ },
+ {
+ "icon_id": "39407811",
+ "name": "待办任务",
+ "font_class": "daibanrenwu",
+ "unicode": "e6a0",
+ "unicode_decimal": 59040
+ },
+ {
+ "icon_id": "39407814",
+ "name": "已办事项",
+ "font_class": "yibanshixiang",
+ "unicode": "e69d",
+ "unicode_decimal": 59037
+ },
+ {
+ "icon_id": "39407815",
+ "name": "已阅事项",
+ "font_class": "yiyueshixiang",
+ "unicode": "e69c",
+ "unicode_decimal": 59036
+ },
+ {
+ "icon_id": "39407816",
+ "name": "待阅任务",
+ "font_class": "daiyuerenwu",
+ "unicode": "e69b",
+ "unicode_decimal": 59035
+ },
+ {
+ "icon_id": "39407895",
+ "name": "我的草稿",
+ "font_class": "wodecaogao",
+ "unicode": "e6c5",
+ "unicode_decimal": 59077
+ },
+ {
+ "icon_id": "39407942",
+ "name": "我发起的",
+ "font_class": "wofaqide",
+ "unicode": "e6cb",
+ "unicode_decimal": 59083
+ },
+ {
+ "icon_id": "39407812",
+ "name": "全部项目",
+ "font_class": "quanbuxiangmu",
+ "unicode": "e69e",
+ "unicode_decimal": 59038
+ },
+ {
+ "icon_id": "39407813",
+ "name": "我收藏的",
+ "font_class": "woshoucangde",
+ "unicode": "e69f",
+ "unicode_decimal": 59039
+ },
+ {
+ "icon_id": "39407779",
+ "name": "菜单-应用设计",
+ "font_class": "menu-yingyongguanli",
+ "unicode": "e68e",
+ "unicode_decimal": 59022
+ },
+ {
+ "icon_id": "39407780",
+ "name": "菜单-应用设计",
+ "font_class": "menu-yingyongguanli-p",
+ "unicode": "e68d",
+ "unicode_decimal": 59021
+ },
+ {
+ "icon_id": "39407822",
+ "name": "菜单-流程设计",
+ "font_class": "menu-liuchengsheji",
+ "unicode": "e6ae",
+ "unicode_decimal": 59054
+ },
+ {
+ "icon_id": "39407823",
+ "name": "菜单-流程设计",
+ "font_class": "menu-liuchengsheji-p",
+ "unicode": "e6af",
+ "unicode_decimal": 59055
+ },
+ {
+ "icon_id": "39407832",
+ "name": "菜单-项目管理",
+ "font_class": "menu-xiangmu",
+ "unicode": "e6b5",
+ "unicode_decimal": 59061
+ },
+ {
+ "icon_id": "39407938",
+ "name": "菜单-流程任务",
+ "font_class": "menu-liuchengrenwu",
+ "unicode": "e6d0",
+ "unicode_decimal": 59088
+ },
+ {
+ "icon_id": "39407794",
+ "name": "菜单-组织机构",
+ "font_class": "menu-zuzhijiagou",
+ "unicode": "e698",
+ "unicode_decimal": 59032
+ },
+ {
+ "icon_id": "39407825",
+ "name": "菜单-通知公告",
+ "font_class": "menu-wodexiaoxi",
+ "unicode": "e6b2",
+ "unicode_decimal": 59058
+ },
+ {
+ "icon_id": "39407830",
+ "name": "菜单-后台配置",
+ "font_class": "menu-peizhi",
+ "unicode": "e6b4",
+ "unicode_decimal": 59060
+ },
+ {
+ "icon_id": "39407933",
+ "name": "菜单-权限控制",
+ "font_class": "menu-quanxiankongzhi-p",
+ "unicode": "e6d2",
+ "unicode_decimal": 59090
+ },
+ {
+ "icon_id": "39407934",
+ "name": "菜单-权限控制",
+ "font_class": "menu-quanxiankongzhi",
+ "unicode": "e6d1",
+ "unicode_decimal": 59089
+ },
+ {
+ "icon_id": "39407943",
+ "name": "菜单-组织架构",
+ "font_class": "menu-zuzhijiagou-p",
+ "unicode": "e6cc",
+ "unicode_decimal": 59084
+ }
+ ]
+}
diff --git a/guns-front-project/src/assets/iconfont/iconfont.ttf b/guns-front-project/src/assets/iconfont/iconfont.ttf
new file mode 100644
index 00000000..ba904506
Binary files /dev/null and b/guns-front-project/src/assets/iconfont/iconfont.ttf differ
diff --git a/guns-front-project/src/assets/iconfont/iconfont.woff b/guns-front-project/src/assets/iconfont/iconfont.woff
new file mode 100644
index 00000000..91d82f34
Binary files /dev/null and b/guns-front-project/src/assets/iconfont/iconfont.woff differ
diff --git a/guns-front-project/src/assets/iconfont/iconfont.woff2 b/guns-front-project/src/assets/iconfont/iconfont.woff2
new file mode 100644
index 00000000..f521acae
Binary files /dev/null and b/guns-front-project/src/assets/iconfont/iconfont.woff2 differ
diff --git a/guns-front-project/src/assets/images/guns.png b/guns-front-project/src/assets/images/guns.png
new file mode 100644
index 00000000..e0daecf4
Binary files /dev/null and b/guns-front-project/src/assets/images/guns.png differ
diff --git a/guns-front-project/src/assets/logo.png b/guns-front-project/src/assets/logo.png
new file mode 100644
index 00000000..9eb0e8d1
Binary files /dev/null and b/guns-front-project/src/assets/logo.png differ
diff --git a/guns-front-project/src/assets/logo.svg b/guns-front-project/src/assets/logo.svg
new file mode 100644
index 00000000..9b322a8e
--- /dev/null
+++ b/guns-front-project/src/assets/logo.svg
@@ -0,0 +1,164 @@
+
+
+
diff --git a/guns-front-project/src/components/CropperModal/components/cropper-preview.vue b/guns-front-project/src/components/CropperModal/components/cropper-preview.vue
new file mode 100644
index 00000000..7011ad03
--- /dev/null
+++ b/guns-front-project/src/components/CropperModal/components/cropper-preview.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
diff --git a/guns-front-project/src/components/CropperModal/components/cropper-tools.vue b/guns-front-project/src/components/CropperModal/components/cropper-tools.vue
new file mode 100644
index 00000000..30c6b695
--- /dev/null
+++ b/guns-front-project/src/components/CropperModal/components/cropper-tools.vue
@@ -0,0 +1,261 @@
+
+
+
+
+
diff --git a/guns-front-project/src/components/CropperModal/components/cropper.vue b/guns-front-project/src/components/CropperModal/components/cropper.vue
new file mode 100644
index 00000000..e20b88bf
--- /dev/null
+++ b/guns-front-project/src/components/CropperModal/components/cropper.vue
@@ -0,0 +1,405 @@
+
+
+
+
+
+
![cropper]()
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/CropperModal/index.vue b/guns-front-project/src/components/CropperModal/index.vue
new file mode 100644
index 00000000..d434a6b4
--- /dev/null
+++ b/guns-front-project/src/components/CropperModal/index.vue
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/DictSelect/DictCheckbox.vue b/guns-front-project/src/components/DictSelect/DictCheckbox.vue
new file mode 100644
index 00000000..ac82d5f9
--- /dev/null
+++ b/guns-front-project/src/components/DictSelect/DictCheckbox.vue
@@ -0,0 +1,112 @@
+
+
+
+
+ {{ dict.dictName }}
+
+
+
+
+
diff --git a/guns-front-project/src/components/DictSelect/DictRadio.vue b/guns-front-project/src/components/DictSelect/DictRadio.vue
new file mode 100644
index 00000000..e777ecbe
--- /dev/null
+++ b/guns-front-project/src/components/DictSelect/DictRadio.vue
@@ -0,0 +1,105 @@
+
+
+
+
+ {{ dict.dictName }}
+
+
+
+
+
diff --git a/guns-front-project/src/components/DictSelect/DictSelect.vue b/guns-front-project/src/components/DictSelect/DictSelect.vue
new file mode 100644
index 00000000..a930ed13
--- /dev/null
+++ b/guns-front-project/src/components/DictSelect/DictSelect.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+ {{ dict.dictName }}
+
+
+
+
+
+ {{ dict.dictName }}
+
+
+
+
+
diff --git a/guns-front-project/src/components/DictSelect/DictTypeSelect.vue b/guns-front-project/src/components/DictSelect/DictTypeSelect.vue
new file mode 100644
index 00000000..2d17851d
--- /dev/null
+++ b/guns-front-project/src/components/DictSelect/DictTypeSelect.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
+ {{ dictType.dictTypeName }}
+
+
+
+
+ {{ dictType.dictTypeName }}
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/DictSelect/api/SysConfigApi.js b/guns-front-project/src/components/DictSelect/api/SysConfigApi.js
new file mode 100644
index 00000000..ec24b6a9
--- /dev/null
+++ b/guns-front-project/src/components/DictSelect/api/SysConfigApi.js
@@ -0,0 +1,143 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 系统配置api
+ *
+ * @author fengshuonan
+ * @date 2021/4/9 11:56
+ */
+export class SysConfigApi {
+ /**
+ * 获取系统配置类型的分页
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 16:07
+ */
+ static findConfigGroupPage(params) {
+ return Request.getAndLoadData('/dict/getConfigGroupPage', params);
+ }
+
+ /**
+ * 获取系统配置分页数据
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 16:07
+ */
+ static findConfigPage(params) {
+ return Request.getAndLoadData('/sysConfig/page', params);
+ }
+
+ /**
+ * 获取系统配置类型的字典的详情(新增系统配置类型界面用)
+ *
+ * @author fengshuonan
+ * @date 2021/4/9 12:05
+ */
+ static getConfigDictTypeDetail(params) {
+ return Request.getAndLoadData('/dictType/getConfigDictTypeDetail', params);
+ }
+
+ /**
+ * 添加系统配置类型,系统配置类别其实就是字典
+ *
+ * @param {string} params.dictCode 字典编码(系统配置分类编码)
+ * @param {string} params.dictName 字典名称(系统配置分类名称)
+ * @param {string} params.dictShortCode 字典简写编码
+ * @param {string} params.dictShortName 字典缩写名称
+ * @param {number} params.dictSort 字典排序
+ * @param {string} params.dictTypeCode 字典类型编码
+ * @param {string} params.dictTypeName 字典类型名称
+ * @param {string} params.dictTypeId 字典类型id
+ * @author fengshuonan
+ * @date 2021/4/9 12:05
+ */
+ static addConfigType(params) {
+ return Request.post('/dict/add', params);
+ }
+
+ /**
+ * 删除系统配置类型
+ *
+ * @param {String} params.dictId 字典id(系统配置分类id)
+ * @author fengshuonan
+ * @date 2021/4/9 12:05
+ */
+ static deleteConfigType(params) {
+ return Request.post('/dict/delete', params);
+ }
+
+ /**
+ * 添加系统配置
+ *
+ * @param {string} params.configCode 配置编码
+ * @param {string} params.configName 配置名称
+ * @param {string} params.configValue 配置值
+ * @param {string} params.groupCode 所属配置分类
+ * @param {string} params.remark 备注
+ * @param {string} params.sysFlag 是否是系统配置
+ * @author fengshuonan
+ * @date 2021/4/9 13:24
+ */
+ static addSysConfig(params) {
+ return Request.post('/sysConfig/add', params);
+ }
+
+ /**
+ * 修改系统配置
+ *
+ * @param {string} params.configCode 配置编码
+ * @param {string} params.configId 配置id
+ * @param {string} params.configName 配置名称
+ * @param {string} params.configValue 配置值
+ * @param {string} params.groupCode 所属配置分类
+ * @param {string} params.remark 备注
+ * @param {string} params.sysFlag 是否是系统配置
+ * @author fengshuonan
+ * @date 2021/4/9 13:24
+ */
+ static editSysConfig(params) {
+ return Request.post('/sysConfig/edit', params);
+ }
+
+ /**
+ * 删除系统配置
+ *
+ * @param {string} params.configId 配置id
+ * @author fengshuonan
+ * @date 2021/4/9 13:24
+ */
+ static deleteSysConfig(params) {
+ return Request.post('/sysConfig/delete', params);
+ }
+
+ /**
+ * 获取系统配置是否已经初始化
+ *
+ * @return {boolean} true-已经初始化,false-未初始化
+ * @author fengshuonan
+ * @date 2021/4/9 13:24
+ */
+ static async getInitConfigFlag() {
+ return await Request.getAndLoadData('/sysConfig/getInitConfigFlag');
+ }
+
+ /**
+ * 获取需要初始化的配置列表
+ *
+ * @author fengshuonan
+ * @date 2021/4/9 13:24
+ */
+ static async getInitConfigList() {
+ return await Request.getAndLoadData('/sysConfig/getInitConfigList');
+ }
+
+ /**
+ * 初始化系统配置参数
+ *
+ * @author fengshuonan
+ * @date 2021/7/9 11:04
+ */
+ static async initConfig(params) {
+ return await Request.post('/sysConfig/initConfig', params);
+ }
+}
diff --git a/guns-front-project/src/components/DictSelect/api/SysDictDataApi.js b/guns-front-project/src/components/DictSelect/api/SysDictDataApi.js
new file mode 100644
index 00000000..ea078072
--- /dev/null
+++ b/guns-front-project/src/components/DictSelect/api/SysDictDataApi.js
@@ -0,0 +1,59 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 字典数据api
+ *
+ * @author chenjinlong
+ * @date 2021/4/13 09:52
+ */
+export class SysDictDataApi {
+ /**
+ * 获取字典类型分页列表
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 16:07
+ */
+ static findDictPage(params) {
+ return Request.getAndLoadData('/dict/page', params);
+ }
+
+ /**
+ * 新增
+ *
+ * @author chenjinlong
+ * @date 2021/4/1 16:07
+ */
+ static add(params) {
+ return Request.post('/dict/add', params);
+ }
+
+ /**
+ * 删除
+ *
+ * @author chenjinlong
+ * @date 2021/4/1 16:07
+ */
+ static del(params) {
+ return Request.post('/dict/delete', params);
+ }
+
+ /**
+ * 批量删除
+ *
+ * @author chenjinlong
+ * @date 2021/4/1 16:07
+ */
+ static batchDel(params) {
+ return Request.post('/dict/batchDelete', params);
+ }
+
+ /**
+ * 修改
+ *
+ * @author chenjinlong
+ * @date 2021/4/1 16:07
+ */
+ static edit(params) {
+ return Request.post('/dict/edit', params);
+ }
+}
diff --git a/guns-front-project/src/components/DictSelect/api/SysDictTypeApi.js b/guns-front-project/src/components/DictSelect/api/SysDictTypeApi.js
new file mode 100644
index 00000000..1fa97baa
--- /dev/null
+++ b/guns-front-project/src/components/DictSelect/api/SysDictTypeApi.js
@@ -0,0 +1,79 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 字典类型api
+ *
+ * @author chenjinlong
+ * @date 2021/4/13 09:52
+ */
+export class SysDictTypeApi {
+ /**
+ * 获取字典类型分页列表
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 16:07
+ */
+ static findDictTypePage(params) {
+ return Request.getAndLoadData('/dictType/page', params);
+ }
+
+ /**
+ * 新增
+ *
+ * @author chenjinlong
+ * @date 2021/4/1 16:07
+ */
+ static add(params) {
+ return Request.post('/dictType/add', params);
+ }
+
+ /**
+ * 删除
+ *
+ * @author chenjinlong
+ * @date 2021/4/1 16:07
+ */
+ static del(params) {
+ return Request.post('/dictType/delete', params);
+ }
+
+ /**
+ * 批量删除
+ *
+ * @author chenjinlong
+ * @date 2021/4/1 16:07
+ */
+ static batchDel(params) {
+ return Request.post('/dictType/batchDelete', params);
+ }
+
+ /**
+ * 修改
+ *
+ * @author chenjinlong
+ * @date 2021/4/1 16:07
+ */
+ static edit(params) {
+ return Request.post('/dictType/edit', params);
+ }
+
+ /**
+ * 获取字典类型下的所有字典
+ *
+ * @author fengshuonan
+ * @date 2021/4/19 22:42
+ */
+ static getDictListByParams(params) {
+ return Request.getAndLoadData('/dict/list', params);
+ }
+
+ /**
+ * 获取所有字典类型列表
+ *
+ * @author fengshuonan
+ * @date 2021/4/20 10:41
+ */
+ static getDictTypeList(params) {
+ return Request.getAndLoadData('/dictType/list', params);
+ }
+}
diff --git a/guns-front-project/src/components/Exception/403/index.vue b/guns-front-project/src/components/Exception/403/index.vue
new file mode 100644
index 00000000..66332284
--- /dev/null
+++ b/guns-front-project/src/components/Exception/403/index.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/guns-front-project/src/components/Exception/404/index.vue b/guns-front-project/src/components/Exception/404/index.vue
new file mode 100644
index 00000000..35352c61
--- /dev/null
+++ b/guns-front-project/src/components/Exception/404/index.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/guns-front-project/src/components/Exception/500/index.vue b/guns-front-project/src/components/Exception/500/index.vue
new file mode 100644
index 00000000..82320825
--- /dev/null
+++ b/guns-front-project/src/components/Exception/500/index.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/guns-front-project/src/components/IconSelect/index.vue b/guns-front-project/src/components/IconSelect/index.vue
new file mode 100644
index 00000000..c3334144
--- /dev/null
+++ b/guns-front-project/src/components/IconSelect/index.vue
@@ -0,0 +1,315 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/RedirectLayout/index.js b/guns-front-project/src/components/RedirectLayout/index.js
new file mode 100644
index 00000000..952c5496
--- /dev/null
+++ b/guns-front-project/src/components/RedirectLayout/index.js
@@ -0,0 +1,21 @@
+/** 用于刷新的路由组件 */
+import { unref, h } from 'vue';
+import { useRouter } from 'vue-router';
+import { setRouteReload } from '@/utils/page-tab-util';
+
+export default {
+ name: 'RedirectLayout',
+ setup() {
+ const { currentRoute, replace } = useRouter();
+ const { params, query } = unref(currentRoute);
+ const from = Array.isArray(params.path)
+ ? params.path.join('/')
+ : params.path;
+ const path = '/' + from;
+ setTimeout(() => {
+ setRouteReload(null);
+ replace({ path, query });
+ }, 100);
+ return () => h('div');
+ }
+};
diff --git a/guns-front-project/src/components/RouterLayout/index.vue b/guns-front-project/src/components/RouterLayout/index.vue
new file mode 100644
index 00000000..c3fc2299
--- /dev/null
+++ b/guns-front-project/src/components/RouterLayout/index.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/TinymceEditor/index.vue b/guns-front-project/src/components/TinymceEditor/index.vue
new file mode 100644
index 00000000..d3a21d72
--- /dev/null
+++ b/guns-front-project/src/components/TinymceEditor/index.vue
@@ -0,0 +1,238 @@
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/TinymceEditor/util.js b/guns-front-project/src/components/TinymceEditor/util.js
new file mode 100644
index 00000000..1ab0a3c3
--- /dev/null
+++ b/guns-front-project/src/components/TinymceEditor/util.js
@@ -0,0 +1,229 @@
+const BASE_URL = import.meta.env.BASE_URL;
+
+// 默认加载插件
+const PLUGINS = [
+ 'code',
+ 'preview',
+ 'fullscreen',
+ 'paste',
+ 'searchreplace',
+ 'save',
+ 'autosave',
+ 'link',
+ 'autolink',
+ 'image',
+ 'media',
+ 'table',
+ 'codesample',
+ 'lists',
+ 'advlist',
+ 'hr',
+ 'charmap',
+ 'emoticons',
+ 'anchor',
+ 'directionality',
+ 'pagebreak',
+ 'quickbars',
+ 'nonbreaking',
+ 'visualblocks',
+ 'visualchars',
+ 'wordcount'
+].join(' ');
+
+// 默认工具栏布局
+const TOOLBAR = [
+ 'fullscreen',
+ 'preview',
+ 'code',
+ '|',
+ 'undo',
+ 'redo',
+ '|',
+ 'forecolor',
+ 'backcolor',
+ '|',
+ 'bold',
+ 'italic',
+ 'underline',
+ 'strikethrough',
+ '|',
+ 'alignleft',
+ 'aligncenter',
+ 'alignright',
+ 'alignjustify',
+ '|',
+ 'outdent',
+ 'indent',
+ '|',
+ 'numlist',
+ 'bullist',
+ '|',
+ 'formatselect',
+ 'fontselect',
+ 'fontsizeselect',
+ '|',
+ 'link',
+ 'image',
+ 'media',
+ 'emoticons',
+ 'charmap',
+ 'anchor',
+ 'pagebreak',
+ 'codesample',
+ '|',
+ 'ltr',
+ 'rtl'
+].join(' ');
+
+// 默认配置
+export const DEFAULT_CONFIG = {
+ height: 300,
+ branding: false,
+ skin_url: BASE_URL + 'tinymce/skins/ui/oxide',
+ content_css: BASE_URL + 'tinymce/skins/content/default/content.min.css',
+ language_url: BASE_URL + 'tinymce/langs/zh_CN.js',
+ language: 'zh_CN',
+ plugins: PLUGINS,
+ toolbar: TOOLBAR,
+ draggable_modal: true,
+ toolbar_mode: 'sliding',
+ quickbars_insert_toolbar: '',
+ images_upload_handler: (blobInfo, success, error) => {
+ if (blobInfo.blob().size / 1024 > 400) {
+ error('大小不能超过 400KB');
+ return;
+ }
+ success('data:image/jpeg;base64,' + blobInfo.base64());
+ },
+ file_picker_types: 'media',
+ file_picker_callback: () => {}
+};
+
+// 暗黑主题配置
+export const DARK_CONFIG = {
+ skin_url: BASE_URL + 'tinymce/skins/ui/oxide-dark',
+ content_css: BASE_URL + 'tinymce/skins/content/dark/content.min.css'
+};
+
+// 支持监听的事件
+export const VALID_EVENTS = [
+ 'onActivate',
+ 'onAddUndo',
+ 'onBeforeAddUndo',
+ 'onBeforeExecCommand',
+ 'onBeforeGetContent',
+ 'onBeforeRenderUI',
+ 'onBeforeSetContent',
+ 'onBeforePaste',
+ 'onBlur',
+ 'onChange',
+ 'onClearUndos',
+ 'onClick',
+ 'onContextMenu',
+ 'onCopy',
+ 'onCut',
+ 'onDblclick',
+ 'onDeactivate',
+ 'onDirty',
+ 'onDrag',
+ 'onDragDrop',
+ 'onDragEnd',
+ 'onDragGesture',
+ 'onDragOver',
+ 'onDrop',
+ 'onExecCommand',
+ 'onFocus',
+ 'onFocusIn',
+ 'onFocusOut',
+ 'onGetContent',
+ 'onHide',
+ 'onInit',
+ 'onKeyDown',
+ 'onKeyPress',
+ 'onKeyUp',
+ 'onLoadContent',
+ 'onMouseDown',
+ 'onMouseEnter',
+ 'onMouseLeave',
+ 'onMouseMove',
+ 'onMouseOut',
+ 'onMouseOver',
+ 'onMouseUp',
+ 'onNodeChange',
+ 'onObjectResizeStart',
+ 'onObjectResized',
+ 'onObjectSelected',
+ 'onPaste',
+ 'onPostProcess',
+ 'onPostRender',
+ 'onPreProcess',
+ 'onProgressState',
+ 'onRedo',
+ 'onRemove',
+ 'onReset',
+ 'onSaveContent',
+ 'onSelectionChange',
+ 'onSetAttrib',
+ 'onSetContent',
+ 'onShow',
+ 'onSubmit',
+ 'onUndo',
+ 'onVisualAid'
+];
+
+let unique = 0;
+
+/**
+ * 生成编辑器 id
+ */
+export function uuid(prefix) {
+ const time = Date.now();
+ const random = Math.floor(Math.random() * 1000000000);
+ unique++;
+ return prefix + '_' + random + unique + String(time);
+}
+
+/**
+ * 绑定事件
+ */
+export function bindHandlers(initEvent, listeners, editor) {
+ const validEvents = VALID_EVENTS.map((event) => event.toLowerCase());
+ Object.keys(listeners)
+ .filter((key) => validEvents.includes(key.toLowerCase()))
+ .forEach((key) => {
+ const handler = listeners[key];
+ if (typeof handler === 'function') {
+ if (key === 'onInit') {
+ handler(initEvent, editor);
+ } else {
+ editor.on(key.substring(2), (e) => handler(e, editor));
+ }
+ }
+ });
+}
+
+/**
+ * 弹出提示框
+ */
+export function openAlert(editor, option = {}) {
+ editor?.windowManager?.open({
+ title: option.title ?? '提示',
+ body: {
+ type: 'panel',
+ items: [
+ {
+ type: 'htmlpanel',
+ html: `${option.content ?? ''}
`
+ }
+ ]
+ },
+ buttons: [
+ {
+ type: 'cancel',
+ name: 'closeButton',
+ text: '确定',
+ primary: true
+ }
+ ]
+ });
+}
diff --git a/guns-front-project/src/components/common/ColorPicker/components/alpha-slider.vue b/guns-front-project/src/components/common/ColorPicker/components/alpha-slider.vue
new file mode 100644
index 00000000..dd966588
--- /dev/null
+++ b/guns-front-project/src/components/common/ColorPicker/components/alpha-slider.vue
@@ -0,0 +1,119 @@
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/ColorPicker/components/hue-slider.vue b/guns-front-project/src/components/common/ColorPicker/components/hue-slider.vue
new file mode 100644
index 00000000..82e218ed
--- /dev/null
+++ b/guns-front-project/src/components/common/ColorPicker/components/hue-slider.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/ColorPicker/components/predefine-list.vue b/guns-front-project/src/components/common/ColorPicker/components/predefine-list.vue
new file mode 100644
index 00000000..8c6a225a
--- /dev/null
+++ b/guns-front-project/src/components/common/ColorPicker/components/predefine-list.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/ColorPicker/components/sv-panel.vue b/guns-front-project/src/components/common/ColorPicker/components/sv-panel.vue
new file mode 100644
index 00000000..79d3bfeb
--- /dev/null
+++ b/guns-front-project/src/components/common/ColorPicker/components/sv-panel.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/ColorPicker/index.vue b/guns-front-project/src/components/common/ColorPicker/index.vue
new file mode 100644
index 00000000..1902ae56
--- /dev/null
+++ b/guns-front-project/src/components/common/ColorPicker/index.vue
@@ -0,0 +1,289 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/ColorPicker/style/index.less b/guns-front-project/src/components/common/ColorPicker/style/index.less
new file mode 100644
index 00000000..552ea4e3
--- /dev/null
+++ b/guns-front-project/src/components/common/ColorPicker/style/index.less
@@ -0,0 +1,242 @@
+@import '../../../layout/style/themes/default.less';
+
+/* trigger */
+.guns-color-picker-trigger {
+ width: 32px;
+ height: 32px;
+ position: relative;
+ display: inline-block;
+ padding: 4px;
+ border-radius: 2px;
+ border: 1px solid @border-color-split;
+ background: @component-background;
+ box-sizing: border-box;
+ text-align: center;
+ cursor: pointer;
+
+ .guns-color-picker-trigger-inner {
+ height: 100%;
+ border-radius: 2px;
+ box-shadow: 0 0 0 1px @border-color-split;
+ overflow: hidden;
+
+ &:not(.is-empty) {
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
+ }
+
+ & > div {
+ height: 100%;
+ }
+ }
+
+ .guns-color-picker-trigger-arrow {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ margin: -6px auto auto -6px;
+ line-height: 0;
+ font-size: 12px;
+ color: @text-color-secondary;
+
+ & > .anticon:not(.anticon-close) {
+ color: #fff;
+ }
+ }
+
+ // 禁用状态
+ &.is-disabled {
+ cursor: not-allowed;
+
+ .guns-color-picker-trigger-inner {
+ opacity: 0.6;
+ }
+ }
+
+ // 尺寸控制
+ &.guns-color-picker-large {
+ width: 40px;
+ height: 40px;
+ }
+
+ &.guns-color-picker-small {
+ width: 24px;
+ height: 24px;
+ padding: 3px;
+ }
+}
+
+/* picker */
+.guns-color-picker.ant-dropdown-menu {
+ width: 300px;
+ padding: 12px;
+ box-sizing: content-box;
+}
+
+/* footer */
+.guns-color-picker .guns-color-picker-footer {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-top: 12px;
+
+ .guns-color-picker-value {
+ width: 140px;
+ }
+
+ .guns-color-picker-value > .ant-input {
+ height: 36px;
+ line-height: 1;
+ padding: 0 4px;
+ font-size: 12px;
+ display: block;
+ }
+
+ .ant-btn + .ant-btn {
+ margin-left: 8px;
+ }
+}
+
+/* alpha slider */
+.guns-color-picker .guns-color-alpha-slider {
+ height: 12px;
+ margin-top: 12px;
+ position: relative;
+ box-sizing: border-box;
+ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
+
+ .guns-color-alpha-slider-bar {
+ height: 100%;
+ background: linear-gradient(
+ to right,
+ rgba(255, 255, 255, 0) 0%,
+ rgba(255, 255, 255, 1) 100%
+ );
+ position: relative;
+ cursor: pointer;
+ }
+
+ .guns-color-alpha-slider-thumb {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 4px;
+ height: 100%;
+ background: #fff;
+ box-sizing: border-box;
+ box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
+ border: 1px solid #f0f0f0;
+ border-radius: 1px;
+ cursor: pointer;
+ z-index: 1;
+ }
+}
+
+/* hue slider */
+.guns-color-picker .guns-color-hue-slider {
+ height: 12px;
+ padding: 0 2px;
+ margin-top: 12px;
+ position: relative;
+ box-sizing: border-box;
+
+ .guns-color-hue-slider-bar {
+ height: 100%;
+ background: linear-gradient(
+ to right,
+ #f00 0%,
+ #ff0 17%,
+ #0f0 33%,
+ #0ff 50%,
+ #00f 67%,
+ #f0f 83%,
+ #f00 100%
+ );
+ position: relative;
+ cursor: pointer;
+ }
+
+ .guns-color-hue-slider-thumb {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 4px;
+ height: 100%;
+ background: #fff;
+ box-sizing: border-box;
+ box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
+ border: 1px solid #f0f0f0;
+ border-radius: 1px;
+ cursor: pointer;
+ z-index: 1;
+ }
+}
+
+/* predefine */
+.guns-color-picker .guns-color-predefine {
+ display: flex;
+ flex-wrap: wrap;
+ margin-top: 4px;
+
+ .guns-color-predefine-item {
+ width: 20px;
+ height: 20px;
+ border-radius: 2px;
+ margin: 8px 0 0 8px;
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
+ position: relative;
+ overflow: hidden;
+ cursor: pointer;
+
+ & > div {
+ height: 100%;
+ }
+
+ &:nth-child(10n + 1) {
+ margin-left: 4px;
+ }
+
+ & > .anticon {
+ color: #fff;
+ font-size: 12px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ margin: -6px auto auto -6px;
+ }
+ }
+}
+
+/* sv panel */
+.guns-color-picker .guns-color-svpanel {
+ height: 180px;
+ position: relative;
+ cursor: pointer;
+
+ .guns-color-svpanel-white,
+ .guns-color-svpanel-black {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ }
+
+ .guns-color-svpanel-white {
+ background: linear-gradient(to right, #fff, rgba(255, 255, 255, 0));
+ }
+
+ .guns-color-svpanel-black {
+ background: linear-gradient(to top, #000, rgba(0, 0, 0, 0));
+ }
+
+ .guns-color-svpanel-cursor {
+ position: absolute;
+ width: 4px;
+ height: 4px;
+ border-radius: 50%;
+ box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0, 0, 0, 0.3),
+ 0 0 1px 2px rgba(0, 0, 0, 0.4);
+ transform: translate(-2px, -2px);
+ cursor: pointer;
+ }
+}
diff --git a/guns-front-project/src/components/common/ColorPicker/util/color.js b/guns-front-project/src/components/common/ColorPicker/util/color.js
new file mode 100644
index 00000000..8ddef4b3
--- /dev/null
+++ b/guns-front-project/src/components/common/ColorPicker/util/color.js
@@ -0,0 +1,381 @@
+/**
+ * 数字对应的 16 进制字符
+ */
+const INT_HEX_MAP = {
+ 10: 'A',
+ 11: 'B',
+ 12: 'C',
+ 13: 'D',
+ 14: 'E',
+ 15: 'F'
+};
+
+/**
+ * 16 进制字符对应的数字
+ */
+const HEX_INT_MAP = { A: 10, B: 11, C: 12, D: 13, E: 14, F: 15 };
+
+/**
+ * 是否是百分数格式
+ */
+const isPercentage = function (n) {
+ return typeof n === 'string' && n.indexOf('%') !== -1;
+};
+
+/**
+ * 是否等于 1.0
+ */
+const isOnePointZero = function (n) {
+ return typeof n === 'string' && n.indexOf('.') !== -1 && parseFloat(n) === 1;
+};
+
+/**
+ * Take input from [0, n] and return it as [0, 1]
+ */
+const bound01 = function (value, max) {
+ if (isOnePointZero(value)) {
+ value = '100%';
+ }
+
+ const processPercent = isPercentage(value);
+ value = Math.min(max, Math.max(0, parseFloat(String(value))));
+
+ // Automatically convert percentage into number
+ if (processPercent) {
+ value = parseInt(String(value * max), 10) / 100;
+ }
+
+ // Handle floating point rounding errors
+ if (Math.abs(value - max) < 0.000001) {
+ return 1;
+ }
+
+ // Convert into [0, 1] range if it isn't already
+ return (value % max) / parseFloat(String(max));
+};
+
+/**
+ * hsv 转 hsl
+ * @param hue 色相
+ * @param sat 饱和度
+ * @param val 明度
+ */
+const hsv2hsl = function (hue, sat, val) {
+ return [hue, (sat * val) / ((hue = (2 - sat) * val) < 1 ? hue : 2 - hue) || 0, hue / 2];
+};
+
+/**
+ * hsl 转 hsv
+ * @param hue 色相
+ * @param sat 饱和度
+ * @param light 亮度
+ */
+const hsl2hsv = function (hue, sat, light) {
+ sat = sat / 100;
+ light = light / 100;
+ let smin = sat;
+ const lmin = Math.max(light, 0.01);
+
+ light *= 2;
+ sat *= light <= 1 ? light : 2 - light;
+ smin *= lmin <= 1 ? lmin : 2 - lmin;
+ const v = (light + sat) / 2;
+ const sv = light === 0 ? (2 * smin) / (lmin + smin) : (2 * sat) / (light + sat);
+
+ return {
+ h: hue,
+ s: sv * 100,
+ v: v * 100
+ };
+};
+
+/**
+ * rgb 转 hsv
+ * Converts an RGB color value to HSV
+ * Assumes: r, g, and b are contained in the set [0, 255] or [0, 1]
+ * Returns: { h, s, v } in [0,1]
+ * @param r
+ * @param g
+ * @param b
+ */
+const rgb2hsv = function (r, g, b) {
+ r = bound01(r, 255);
+ g = bound01(g, 255);
+ b = bound01(b, 255);
+
+ const max = Math.max(r, g, b);
+ const min = Math.min(r, g, b);
+ let h = 0;
+ const v = max;
+
+ const d = max - min;
+ const s = max === 0 ? 0 : d / max;
+
+ if (max === min) {
+ h = 0; // achromatic
+ } else {
+ switch (max) {
+ case r:
+ h = (g - b) / d + (g < b ? 6 : 0);
+ break;
+ case g:
+ h = (b - r) / d + 2;
+ break;
+ case b:
+ h = (r - g) / d + 4;
+ break;
+ }
+ h /= 6;
+ }
+
+ return { h: h * 360, s: s * 100, v: v * 100 };
+};
+
+/**
+ * hsv 转 rgb
+ * Converts an HSV color value to RGB
+ * Assumes: h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
+ * Returns: { r, g, b } in the set [0, 255]
+ * @param h
+ * @param s
+ * @param v
+ */
+const hsv2rgb = function (h, s, v) {
+ h = bound01(h, 360) * 6;
+ s = bound01(s, 100);
+ v = bound01(v, 100);
+
+ const i = Math.floor(h);
+ const f = h - i;
+ const p = v * (1 - s);
+ const q = v * (1 - f * s);
+ const t = v * (1 - (1 - f) * s);
+ const mod = i % 6;
+ const r = [v, q, p, p, t, v][mod];
+ const g = [t, v, v, q, p, p][mod];
+ const b = [p, p, t, v, v, q][mod];
+
+ return {
+ r: Math.round(r * 255),
+ g: Math.round(g * 255),
+ b: Math.round(b * 255)
+ };
+};
+
+/**
+ * rgb 转 16 进制
+ * @param
+ */
+const toHex = function ({ r, g, b }) {
+ const hexOne = function (value) {
+ value = Math.min(Math.round(value), 255);
+ const high = Math.floor(value / 16);
+ const low = value % 16;
+ return '' + (INT_HEX_MAP[high] || high) + (INT_HEX_MAP[low] || low);
+ };
+
+ if (isNaN(r) || isNaN(g) || isNaN(b)) {
+ return '';
+ }
+
+ return '#' + hexOne(r) + hexOne(g) + hexOne(b);
+};
+
+/**
+ * 解析颜色通道
+ * @param hex
+ */
+const parseHexChannel = function (hex) {
+ if (hex.length === 2) {
+ return (HEX_INT_MAP[hex[0].toUpperCase()] || +hex[0]) * 16 + (HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1]);
+ }
+ return HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1];
+};
+
+/**
+ * 颜色对象
+ */
+export default class Color {
+ // 色相
+ _hue;
+ // 饱和度
+ _saturation;
+ // 明度
+ _value;
+ // 透明度
+ _alpha;
+ // 是否开启透明度
+ enableAlpha;
+ // 颜色格式
+ format;
+ // 颜色值
+ value;
+
+ constructor(options = {}) {
+ this._hue = options._hue ?? 0;
+ this._saturation = options._saturation ?? 100;
+ this._value = options._value ?? 100;
+ this._alpha = options._alpha ?? 100;
+
+ this.enableAlpha = options.enableAlpha ?? false;
+ this.format = options.format ?? 'hex';
+ this.value = '';
+
+ this.doOnChange();
+ }
+
+ /**
+ * 修改属性
+ * @param options
+ */
+ set(options) {
+ Object.assign(this, options);
+ this.doOnChange();
+ }
+
+ /**
+ * 转 rgb
+ */
+ toRgb() {
+ return hsv2rgb(this._hue, this._saturation, this._value);
+ }
+
+ /**
+ * 解析颜色
+ * @param value
+ */
+ fromString(value) {
+ if (!value) {
+ this._hue = 0;
+ this._saturation = 100;
+ this._value = 100;
+ this._alpha = 100;
+ this.doOnChange();
+ return;
+ }
+
+ const fromHSV = (h, s, v) => {
+ this._hue = Math.max(0, Math.min(360, h));
+ this._saturation = Math.max(0, Math.min(100, s));
+ this._value = Math.max(0, Math.min(100, v));
+ this.doOnChange();
+ };
+
+ if (value.indexOf('hsl') !== -1) {
+ const parts = value
+ .replace(/hsla|hsl|\(|\)/gm, '')
+ .split(/\s|,/g)
+ .filter(val => val !== '')
+ .map((val, index) => (index > 2 ? parseFloat(val) : parseInt(val, 10)));
+ if (parts.length === 4) {
+ this._alpha = Math.floor(parseFloat(String(parts[3])) * 100);
+ } else if (parts.length === 3) {
+ this._alpha = 100;
+ }
+ if (parts.length >= 3) {
+ const { h, s, v } = hsl2hsv(parts[0], parts[1], parts[2]);
+ fromHSV(h, s, v);
+ }
+ } else if (value.indexOf('hsv') !== -1) {
+ const parts = value
+ .replace(/hsva|hsv|\(|\)/gm, '')
+ .split(/\s|,/g)
+ .filter(val => val !== '')
+ .map((val, index) => (index > 2 ? parseFloat(val) : parseInt(val, 10)));
+ if (parts.length === 4) {
+ this._alpha = Math.floor(parseFloat(String(parts[3])) * 100);
+ } else if (parts.length === 3) {
+ this._alpha = 100;
+ }
+ if (parts.length >= 3) {
+ fromHSV(parts[0], parts[1], parts[2]);
+ }
+ } else if (value.indexOf('rgb') !== -1) {
+ const parts = value
+ .replace(/rgba|rgb|\(|\)/gm, '')
+ .split(/\s|,/g)
+ .filter(val => val !== '')
+ .map((val, index) => (index > 2 ? parseFloat(val) : parseInt(val, 10)));
+ if (parts.length === 4) {
+ this._alpha = Math.floor(parseFloat(String(parts[3])) * 100);
+ } else if (parts.length === 3) {
+ this._alpha = 100;
+ }
+ if (parts.length >= 3) {
+ const { h, s, v } = rgb2hsv(parts[0], parts[1], parts[2]);
+ fromHSV(h, s, v);
+ }
+ } else if (value.indexOf('#') !== -1) {
+ const hex = value.replace('#', '').trim();
+ if (!/^(?:[0-9a-fA-F]{3}){1,2}|[0-9a-fA-F]{8}$/.test(hex)) {
+ return;
+ }
+ let r, g, b;
+ if (hex.length === 3) {
+ r = parseHexChannel(hex[0] + hex[0]);
+ g = parseHexChannel(hex[1] + hex[1]);
+ b = parseHexChannel(hex[2] + hex[2]);
+ } else if (hex.length === 6 || hex.length === 8) {
+ r = parseHexChannel(hex.substring(0, 2));
+ g = parseHexChannel(hex.substring(2, 4));
+ b = parseHexChannel(hex.substring(4, 6));
+ }
+ if (hex.length === 8) {
+ this._alpha = Math.floor((parseHexChannel(hex.substring(6)) / 255) * 100);
+ } else if (hex.length === 3 || hex.length === 6) {
+ this._alpha = 100;
+ }
+ const { h, s, v } = rgb2hsv(r ?? 0, g ?? 0, b ?? 0);
+ fromHSV(h, s, v);
+ }
+ }
+
+ /**
+ * 比较颜色
+ * @param color
+ */
+ compare(color) {
+ return (
+ Math.abs(color._hue - this._hue) < 2 &&
+ Math.abs(color._saturation - this._saturation) < 1 &&
+ Math.abs(color._value - this._value) < 1 &&
+ Math.abs(color._alpha - this._alpha) < 1
+ );
+ }
+
+ /**
+ * 更新颜色值
+ */
+ doOnChange() {
+ const { _hue, _saturation, _value, _alpha, format } = this;
+ if (this.enableAlpha) {
+ if (format === 'hsl') {
+ const hsl = hsv2hsl(_hue, _saturation / 100, _value / 100);
+ const _s = Math.round(hsl[1] * 100);
+ const _l = Math.round(hsl[2] * 100);
+ this.value = `hsla(${_hue}, ${_s}%, ${_l}%, ${_alpha / 100})`;
+ } else if (format === 'hsv') {
+ const _s = Math.round(_saturation);
+ const _v = Math.round(_value);
+ this.value = `hsva(${_hue}, ${_s}%, ${_v}%, ${_alpha / 100})`;
+ } else {
+ const { r, g, b } = hsv2rgb(_hue, _saturation, _value);
+ this.value = `rgba(${r}, ${g}, ${b}, ${_alpha / 100})`;
+ }
+ } else {
+ if (format === 'hsl') {
+ const hsl = hsv2hsl(_hue, _saturation / 100, _value / 100);
+ const _l = Math.round(hsl[2] * 100);
+ this.value = `hsl(${_hue}, ${Math.round(hsl[1] * 100)}%, ${_l}%)`;
+ } else if (format === 'hsv') {
+ const _v = Math.round(_value);
+ this.value = `hsv(${_hue}, ${Math.round(_saturation)}%, ${_v}%)`;
+ } else if (format === 'rgb') {
+ const { r, g, b } = hsv2rgb(_hue, _saturation, _value);
+ this.value = `rgb(${r}, ${g}, ${b})`;
+ } else {
+ this.value = toHex(hsv2rgb(_hue, _saturation, _value));
+ }
+ }
+ }
+}
diff --git a/guns-front-project/src/components/common/ColorPicker/util/draggable.js b/guns-front-project/src/components/common/ColorPicker/util/draggable.js
new file mode 100644
index 00000000..c8d64964
--- /dev/null
+++ b/guns-front-project/src/components/common/ColorPicker/util/draggable.js
@@ -0,0 +1,41 @@
+/** 拖动事件封装 */
+let isDragging = false;
+
+/**
+ * 拖动事件封装
+ * @param element
+ * @param options
+ */
+export default function (element, options) {
+ // 鼠标移动事件
+ const moveFn = function (event) {
+ options.drag && options.drag(event);
+ };
+
+ // 鼠标抬起事件
+ const upFn = function (event) {
+ document.removeEventListener('mousemove', moveFn);
+ document.removeEventListener('mouseup', upFn);
+ document.onselectstart = null;
+ document.ondragstart = null;
+ isDragging = false;
+ options.end && options.end(event);
+ };
+
+ // 鼠标按下事件
+ element.addEventListener('mousedown', function (event) {
+ if (isDragging) {
+ return;
+ }
+ document.onselectstart = function () {
+ return false;
+ };
+ document.ondragstart = function () {
+ return false;
+ };
+ document.addEventListener('mousemove', moveFn);
+ document.addEventListener('mouseup', upFn);
+ isDragging = true;
+ options.start && options.start(event);
+ });
+}
diff --git a/guns-front-project/src/components/common/CommonDrawer/index.vue b/guns-front-project/src/components/common/CommonDrawer/index.vue
new file mode 100644
index 00000000..0a6f46ad
--- /dev/null
+++ b/guns-front-project/src/components/common/CommonDrawer/index.vue
@@ -0,0 +1,234 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/CommonTable/index.vue b/guns-front-project/src/components/common/CommonTable/index.vue
new file mode 100644
index 00000000..80ca2ab9
--- /dev/null
+++ b/guns-front-project/src/components/common/CommonTable/index.vue
@@ -0,0 +1,369 @@
+
+
+
+
+
+
+ {{ scope.index + 1 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/Custom/api/CustomApi.js b/guns-front-project/src/components/common/Custom/api/CustomApi.js
new file mode 100644
index 00000000..d2108083
--- /dev/null
+++ b/guns-front-project/src/components/common/Custom/api/CustomApi.js
@@ -0,0 +1,24 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -自定义列api
+ *
+ */
+export class CustomApi {
+ /**
+ * 获取用户针对某个业务的table的列宽配置
+ * @param {*} params
+ * @returns
+ */
+ static getUserConfig(params) {
+ return Request.getAndLoadData('/sysTableWidth/getUserConfig', params);
+ }
+ /**
+ * 添加用户针对某个table的列属性配置
+ * @param {*} params
+ * @returns
+ */
+ static setTableWidth(params) {
+ return Request.post('/sysTableWidth/setTableWidth', params);
+ }
+}
diff --git a/guns-front-project/src/components/common/Custom/index.vue b/guns-front-project/src/components/common/Custom/index.vue
new file mode 100644
index 00000000..89b442fa
--- /dev/null
+++ b/guns-front-project/src/components/common/Custom/index.vue
@@ -0,0 +1,225 @@
+
+
+
+
+
+
+
+
+
+ |
+
+
+ {{ element.title }}
+ |
+
+
+
+ |
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/DropDown/index.vue b/guns-front-project/src/components/common/DropDown/index.vue
new file mode 100644
index 00000000..f1c64849
--- /dev/null
+++ b/guns-front-project/src/components/common/DropDown/index.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/IconFont/index.vue b/guns-front-project/src/components/common/IconFont/index.vue
new file mode 100644
index 00000000..1f5f4869
--- /dev/null
+++ b/guns-front-project/src/components/common/IconFont/index.vue
@@ -0,0 +1,71 @@
+
+
+ {{
+ iconClass
+ }}
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/Selection/api/SelectionApi.js b/guns-front-project/src/components/common/Selection/api/SelectionApi.js
new file mode 100644
index 00000000..824815d3
--- /dev/null
+++ b/guns-front-project/src/components/common/Selection/api/SelectionApi.js
@@ -0,0 +1,9 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 选择组件 -api
+ *
+ */
+export class SelectionApi {
+
+}
\ No newline at end of file
diff --git a/guns-front-project/src/components/common/Selection/components/common.js b/guns-front-project/src/components/common/Selection/components/common.js
new file mode 100644
index 00000000..b2f9499b
--- /dev/null
+++ b/guns-front-project/src/components/common/Selection/components/common.js
@@ -0,0 +1,90 @@
+/**
+ * 单选
+ * @param {*当前行数据} record
+ * @param {*是选中状态还是取消选中状态} selected
+ * @param {*需要添加或删除的数组} lsit
+ * @param {*需要添加或删除数组的名字} listName
+ * @param {*需要添加或删除当前行的id} listId
+ */
+export function radioSelect(record, selected, list, listId, listName) {
+ // 为选中状态时
+ if (selected) {
+ let obj = {
+ bizId: record[listId],
+ name: record[listName],
+ ...record,
+ };
+ if (!list.find(userItem => userItem.bizId == record[listId])) {
+ list.push(obj);
+ }
+ } else {
+ // 为不选中状态时,删除当前行
+ list.splice(
+ list.findIndex(item => item.bizId === record[listId]),
+ 1
+ );
+ }
+}
+
+/**
+ * 多选
+ * @param {*是选中状态还是取消选中状态} selected
+ * @param {*改变数据的数组} changeRows
+ * @param {*需要添加或删除的数组} list
+ * @param {*需要添加或删除当前行的id} listId
+ * @param {*需要添加或删除数组的名字} listName
+ */
+export function checkBox(selected, changeRows, list, listId, listName) {
+ if (selected) {
+ // 全选时遍历选中的数组,加入已选列表
+ changeRows.forEach(item => {
+ if (!list.find(userItem => userItem.bizId == item[listId])) {
+ let obj = {
+ bizId: item[listId],
+ name: item[listName],
+ ...item,
+ };
+ list.push(obj);
+ }
+ });
+ } else {
+ // 反选时删除当前页的全部数据
+ changeRows.forEach(item => {
+ for (let i = list.length - 1; i >= 0; i--) {
+ if (item[listId] == list[i].bizId) {
+ list.splice(i, 1);
+ }
+ }
+ });
+ }
+}
+
+/**
+ * 获取表格选中的数据列表
+ * @param {*} list
+ * @param {*} id
+ * @param {*} valList
+ */
+export function getSelectedRowKeys(list, id, valList,orgId) {
+ let selectList = [];
+ let selectedRowKeys = [];
+ // 表格选择数据跟tree关联-岗位-部门审批人
+ if(orgId){
+ valList.forEach(value => {
+ if (value.subValue == orgId) {
+ selectList.push(value);
+ }
+ });
+ }else{
+ selectList = valList
+ }
+ if (list && list.length > 0) {
+ list.forEach(listItem => {
+ if (selectList.find(item => item.bizId == listItem[id])) {
+ selectedRowKeys.push(listItem[id]);
+ }
+ });
+ }
+
+ return selectedRowKeys;
+}
diff --git a/guns-front-project/src/components/common/Selection/components/org-tree.vue b/guns-front-project/src/components/common/Selection/components/org-tree.vue
new file mode 100644
index 00000000..616c4bd4
--- /dev/null
+++ b/guns-front-project/src/components/common/Selection/components/org-tree.vue
@@ -0,0 +1,165 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ data.orgName }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/Selection/components/select-company.vue b/guns-front-project/src/components/common/Selection/components/select-company.vue
new file mode 100644
index 00000000..22d7019f
--- /dev/null
+++ b/guns-front-project/src/components/common/Selection/components/select-company.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/Selection/components/select-dept.vue b/guns-front-project/src/components/common/Selection/components/select-dept.vue
new file mode 100644
index 00000000..18641a3d
--- /dev/null
+++ b/guns-front-project/src/components/common/Selection/components/select-dept.vue
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
tableListChange(list, 'orgId')"
+ >
+
+
+
+ 启用
+ 禁用
+
+
+ 公司
+ 部门
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/Selection/components/select-dicts.vue b/guns-front-project/src/components/common/Selection/components/select-dicts.vue
new file mode 100644
index 00000000..ca3eb3dc
--- /dev/null
+++ b/guns-front-project/src/components/common/Selection/components/select-dicts.vue
@@ -0,0 +1,180 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/Selection/components/select-position.vue b/guns-front-project/src/components/common/Selection/components/select-position.vue
new file mode 100644
index 00000000..504ec249
--- /dev/null
+++ b/guns-front-project/src/components/common/Selection/components/select-position.vue
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
+
tableListChange(list, 'positionId')"
+ >
+
+
+
+ 启用
+ 禁用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/Selection/components/select-role.vue b/guns-front-project/src/components/common/Selection/components/select-role.vue
new file mode 100644
index 00000000..a48035df
--- /dev/null
+++ b/guns-front-project/src/components/common/Selection/components/select-role.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+ tableListChange(list, 'roleId')"
+ >
+
+
+ {{ index + 1 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/Selection/components/select-user.vue b/guns-front-project/src/components/common/Selection/components/select-user.vue
new file mode 100644
index 00000000..fa65ab9b
--- /dev/null
+++ b/guns-front-project/src/components/common/Selection/components/select-user.vue
@@ -0,0 +1,205 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ tableListChange(list, 'userId')"
+ >
+
+
+
+ {{ record?.userOrgDTO?.companyName ? record?.userOrgDTO?.companyName : '' }}
+
+
+
+ {{ record?.userOrgDTO?.deptName ? record?.userOrgDTO?.deptName : '' }}
+
+
+
+ {{ record?.userOrgDTO?.positionName ? record?.userOrgDTO?.positionName : '' }}
+
+
+
+ 男
+ 女
+
+
+
+ 启用
+ 禁用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/Selection/components/selected-list.vue b/guns-front-project/src/components/common/Selection/components/selected-list.vue
new file mode 100644
index 00000000..8ad19536
--- /dev/null
+++ b/guns-front-project/src/components/common/Selection/components/selected-list.vue
@@ -0,0 +1,110 @@
+
+
+
+
+ 已选
+
+
+
+
+
+
+
+
+
+
+
+
{{ index + 1 }} {{ item.subValueName ? item.subValueName + '#' : '' }}{{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/Selection/index.vue b/guns-front-project/src/components/common/Selection/index.vue
new file mode 100644
index 00000000..49ed0d32
--- /dev/null
+++ b/guns-front-project/src/components/common/Selection/index.vue
@@ -0,0 +1,406 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/Vertify/api/VertifyApi.js b/guns-front-project/src/components/common/Vertify/api/VertifyApi.js
new file mode 100644
index 00000000..641f08c1
--- /dev/null
+++ b/guns-front-project/src/components/common/Vertify/api/VertifyApi.js
@@ -0,0 +1,17 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 登录退出接口
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 14:34
+ */
+export class VertifyApi {
+ /**
+ * 获取拖拽验证码的接口
+ *
+ */
+ static getDragCaptcha(params) {
+ return Request.get('/getDragCaptcha', params);
+ }
+}
\ No newline at end of file
diff --git a/guns-front-project/src/components/common/Vertify/images.js b/guns-front-project/src/components/common/Vertify/images.js
new file mode 100644
index 00000000..4f8d9c53
--- /dev/null
+++ b/guns-front-project/src/components/common/Vertify/images.js
@@ -0,0 +1,3 @@
+export const logo = `data:image/png;base64,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`
+
+export const background = `data:image/jpeg;base64,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`
diff --git a/guns-front-project/src/components/common/Vertify/index.vue b/guns-front-project/src/components/common/Vertify/index.vue
new file mode 100644
index 00000000..7d3194f5
--- /dev/null
+++ b/guns-front-project/src/components/common/Vertify/index.vue
@@ -0,0 +1,530 @@
+
+
+
+
+
+
+
+
+
+
+ 关闭验证
+
+
+
+ 刷新验证
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/common/Vertify/style/animation.less b/guns-front-project/src/components/common/Vertify/style/animation.less
new file mode 100644
index 00000000..4716b508
--- /dev/null
+++ b/guns-front-project/src/components/common/Vertify/style/animation.less
@@ -0,0 +1,635 @@
+@import './variables.less';
+
+.@{ym-prefix} {
+ &anim {
+ transition: all @ym-anim-duration ease;
+
+ /** fade */
+ &-fade-enter-active,
+ &-fade-leave-active {
+ opacity: 1;
+ }
+
+ &-fade-enter-from,
+ &-fade-leave-to {
+ opacity: 0
+ }
+
+ /** scale */
+ &-scale-enter-active,
+ &-scale-leave-active {
+ opacity: 1;
+ transform: scale(1);
+ }
+
+ &-scale-enter-from,
+ &-scale-leave-to {
+ transform: scale(0);
+ opacity: 0
+ }
+
+ /** slide left / slide right */
+ &-slide-enter-active,
+ &-slide-leave-active,
+ &-slide-right-enter-active,
+ &-slide-right-leave-active {
+ opacity: 1;
+ transform: translateX(0);
+ }
+
+ &-slide-enter-from,
+ &-slide-leave-to,
+ &-slide-right-enter-from,
+ &-slide-right-leave-to {
+ transform: translateX(20%);
+ opacity: 0
+ }
+
+ /** slide bottom */
+ &-slide-bottom-enter-active,
+ &-slide-bottom-leave-active {
+ opacity: 1;
+ transform: translateY(0);
+ }
+
+ &-slide-bottom-enter-from,
+ &-slide-bottom-leave-to {
+ transform: translateY(20%);
+ opacity: 0
+ }
+
+ /** slide fall */
+ &-slide-fall-enter-active,
+ &-slide-fall-leave-active {
+ opacity: 1;
+ transform: translate(0%) translateZ(0) rotate(0deg);
+ }
+
+ &-slide-fall-enter-from,
+ &-slide-fall-leave-to {
+ transform: translate(30%) translateZ(660px) rotate(30deg);
+ opacity: 0
+ }
+
+ /** newspaper */
+ &-newspaper-enter-active,
+ &-newspaper-leave-active {
+ opacity: 1;
+ transform: scale(1) rotate(0deg);
+ }
+
+ &-newspaper-enter-from,
+ &-newspaper-leave-to {
+ transform-style: preserve-3d;
+ transform: scale(0) rotate(720deg);
+ opacity: 0
+ }
+
+ /** sticky */
+ &-sticky-enter-active,
+ &-sticky-leave-active {
+ opacity: 1;
+ transform: translateY(0);
+ }
+
+ &-sticky-enter-from,
+ &-sticky-leave-to {
+ transform: translateY(-200%);
+ opacity: 0
+ }
+
+ /** flip */
+ &-flip-enter-active,
+ &-flip-leave-active,
+ &-flip-horizontal-enter-active,
+ &-flip-horizontal-leave-active {
+ opacity: 1;
+ transform: rotateY(0deg);
+ }
+
+ &-flip-enter-from,
+ &-flip-leave-to,
+ &-flip-horizontal-enter-from,
+ &-flip-horizontal-leave-to {
+ transform-style: preserve-3d;
+ transform: rotateY(-70deg);
+ opacity: 0
+ }
+
+ &-flip-vertical-enter-active,
+ &-flip-vertical-leave-active {
+ opacity: 1;
+ transform: rotateX(0deg);
+ }
+
+ &-flip-vertical-enter-from,
+ &-flip-vertical-leave-to {
+ transform-style: preserve-3d;
+ transform: rotateX(-70deg);
+ opacity: 0
+ }
+
+ /** fall */
+ &-fall-enter-active,
+ &-fall-leave-active {
+ opacity: 1;
+ transform: translateZ(0px) rotateX(0deg);
+ }
+
+ &-fall-enter-from,
+ &-fall-leave-to {
+ transform: translateZ(660px) rotateX(20deg);
+ opacity: 0
+ }
+
+ /** rotate */
+ &-rotate-enter-active,
+ &-rotate-leave-active {
+ transform: translateY(0%) rotateX(0deg);
+ opacity: 1;
+ }
+
+ &-rotate-enter-from,
+ &-rotate-leave-to {
+ transform-style: preserve-3d;
+ transform: translateY(100%) rotateX(90deg);
+ transform-origin: 0 100%;
+ opacity: 0
+ }
+
+ /** sign */
+ &-sign-enter-active,
+ &-sign-leave-active {
+ transform: rotateX(0deg);
+ opacity: 1;
+ }
+
+ &-sign-enter-from,
+ &-sign-leave-to {
+ transform-style: preserve-3d;
+ transform: rotateX(-90deg);
+ transform-origin: 50% 0;
+ opacity: 0
+ }
+
+ /** slit */
+ &-slit-enter-active {
+ animation: ym-anim-slit @ym-anim-duration forwards ease-out;
+ }
+
+ &-slit-leave-active {
+ animation: ym-anim-slit @ym-anim-duration forwards ease-out reverse;
+ }
+
+ /** shake */
+ &-shake-enter-active {
+ animation: ym-anim-modal-shake @ym-anim-duration forwards linear;
+ }
+
+ &-shake-leave-active {
+ animation: ym-anim-modal-shake @ym-anim-duration forwards linear reverse;
+ }
+
+ /** route change */
+ &-page-slide-enter-active,
+ &-page-slide-leave-active {
+ transition: all @ym-anim-duration linear;
+ }
+
+ &-page-slide-leave-from,
+ &-page-slide-enter-to {
+ transform: translateX(0);
+ opacity: 1;
+ }
+
+ &-page-slide-enter-from {
+ transform: translateX(100%);
+ opacity: 0;
+ }
+
+ &-page-slide-leave-to {
+ transform: translateX(-100%);
+ opacity: 0;
+ }
+
+ /** breadcrumb change */
+ &-breadcrumb-enter-active,
+ &-breadcrumb-leave-active {
+ transition: all @ym-anim-duration linear;
+ }
+
+ &-breadcrumb-leave-from,
+ &-breadcrumb-enter-to {
+ transform: translateX(0);
+ opacity: 1;
+ }
+
+ &-breadcrumb-enter-from {
+ transform: translateX(-32px);
+ opacity: 0;
+ }
+
+ &-breadcrumb-leave-to {
+ transform: translateX(32px);
+ opacity: 0;
+ }
+
+ /** anchor */
+ &-anchor-enter-active,
+ &-anchor-leave-active {
+ opacity: 1;
+ transform: translateX(0);
+ }
+
+ &-anchor-enter-from,
+ &-anchor-leave-to {
+ opacity: 0;
+ transform: translateX(5rem);
+ }
+ }
+}
+
+@keyframes ym-anim-wait {
+ 60% {
+ -moz-transform: scale(0.75);
+ -ms-transform: scale(0.75);
+ -webkit-transform: scale(0.75);
+ transform: scale(0.75);
+ }
+}
+
+@keyframes ym-anim-scan {
+ 0% {
+ .properties(top, 6);
+ }
+ 50% {
+ .properties(top, 14);
+ }
+ 100% {
+ .properties(top, 6);
+ }
+}
+
+@keyframes ym-anim-shake {
+ 0% {
+ -webkit-transform: translate(0, 0) rotate(0);
+ -moz-transform: translate(0, 0) rotate(0);
+ -o-transform: translate(0, 0) rotate(0);
+ -ms-transform: translate(0, 0) rotate(0);
+ transform: translate(0, 0) rotate(0);
+ }
+ 25% {
+ -webkit-transform: translate(-12px, 0) rotate(0);
+ -moz-transform: translate(-12px, 0) rotate(0);
+ -o-transform: translate(-12px, 0) rotate(0);
+ -ms-transform: translate(-12px, 0) rotate(0);
+ transform: translate(-12px, 0) rotate(0);
+ }
+ 50% {
+ -webkit-transform: translate(0, 0) rotate(0);
+ -moz-transform: translate(0, 0) rotate(0);
+ -o-transform: translate(0, 0) rotate(0);
+ -ms-transform: translate(0, 0) rotate(0);
+ transform: translate(0, 0) rotate(0);
+ }
+ 75% {
+ -webkit-transform: translate(-12px, 0) rotate(0);
+ -moz-transform: translate(-12px, 0) rotate(0);
+ -o-transform: translate(-12px, 0) rotate(0);
+ -ms-transform: translate(-12px, 0) rotate(0);
+ transform: translate(-12px, 0) rotate(0);
+ }
+ 100% {
+ -webkit-transform: translate(0, 0) rotate(0);
+ -moz-transform: translate(0, 0) rotate(0);
+ -o-transform: translate(0, 0) rotate(0);
+ -ms-transform: translate(0, 0) rotate(0);
+ transform: translate(0, 0) rotate(0);
+ }
+}
+
+@keyframes ym-anim-move {
+ 0% { transform: translate(1px, 1px) }
+ 33.33% { transform: translate(51px, 1px) }
+ 66.66% { transform: translate(21px, 51px) }
+ 100% { transform: translate(1px, 1px) }
+}
+
+@keyframes ym-anim-rotate {
+ 0% { transform: rotate(0) }
+ 100% { transform: rotate(360deg) }
+}
+
+@keyframes ym-captcha-modal-open {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale3d(0, 0, 1);
+ -moz-transform: scale3d(0, 0, 1);
+ -o-transform: scale3d(0, 0, 1);
+ -ms-transform: scale3d(0, 0, 1);
+ transform: scale3d(0, 0, 1);
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: scale3d(1, 1, 1);
+ -moz-transform: scale3d(1, 1, 1);
+ -o-transform: scale3d(1, 1, 1);
+ -ms-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+@keyframes ym-captcha-success {
+ 25% {
+ -o-transform: (25deg);
+ -moz-transform: rotate(25deg);
+ -ms-transform: rotate(25deg);
+ -webkit-transform: rotate(25deg);
+ transform: rotate(25deg)
+ }
+ 100% {
+ -o-transform: rotate(-360deg);
+ -moz-transform: rotate(-360deg);
+ -ms-transform: rotate(-360deg);
+ -webkit-transform: rotate(-360deg);
+ transform: rotate(-360deg)
+ }
+}
+
+@keyframes ym-captcha-downtip {
+ 0% {
+ transform: translateY(-100px);
+ opacity: 0;
+ }
+ 100% {
+ transform: translateY(0);
+ opacity: 1;
+ }
+}
+
+@keyframes ym-anim-slit {
+ 0% {
+ transform: translateZ(-3000px) rotateY(90deg);
+ opacity: 1;
+ animation-timing-function: ease-in;
+ }
+ 50% {
+ transform: translateZ(-250px) rotateY(89deg);
+ opacity: 1;
+ animation-timing-function: ease-in;
+ }
+ 100% {
+ transform: translateZ(0) rotateY(0deg);
+ opacity: 1;
+ }
+}
+
+@keyframes ym-anim-modal-shake {
+ 0% {
+ opacity: 0;
+ -webkit-transform: matrix3d(0.7, 0, 0, 0, 0, 0.7, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.7, 0, 0, 0, 0, 0.7, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 2.083333% {
+ -webkit-transform: matrix3d(0.75266, 0, 0, 0, 0, 0.76342, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.75266, 0, 0, 0, 0, 0.76342, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 4.166667% {
+ -webkit-transform: matrix3d(0.81071, 0, 0, 0, 0, 0.84545, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.81071, 0, 0, 0, 0, 0.84545, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 6.25% {
+ -webkit-transform: matrix3d(0.86808, 0, 0, 0, 0, 0.9286, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.86808, 0, 0, 0, 0, 0.9286, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 8.333333% {
+ -webkit-transform: matrix3d(0.92038, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.92038, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 10.416667% {
+ -webkit-transform: matrix3d(0.96482, 0, 0, 0, 0, 1.05202, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.96482, 0, 0, 0, 0, 1.05202, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 12.5% {
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1.08204, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1, 0, 0, 0, 0, 1.08204, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 14.583333% {
+ -webkit-transform: matrix3d(1.02563, 0, 0, 0, 0, 1.09149, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.02563, 0, 0, 0, 0, 1.09149, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 16.666667% {
+ -webkit-transform: matrix3d(1.04227, 0, 0, 0, 0, 1.08453, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.04227, 0, 0, 0, 0, 1.08453, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 18.75% {
+ -webkit-transform: matrix3d(1.05102, 0, 0, 0, 0, 1.06666, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.05102, 0, 0, 0, 0, 1.06666, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 20.833333% {
+ -webkit-transform: matrix3d(1.05334, 0, 0, 0, 0, 1.04355, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.05334, 0, 0, 0, 0, 1.04355, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 22.916667% {
+ -webkit-transform: matrix3d(1.05078, 0, 0, 0, 0, 1.02012, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.05078, 0, 0, 0, 0, 1.02012, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 25% {
+ -webkit-transform: matrix3d(1.04487, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.04487, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 27.083333% {
+ -webkit-transform: matrix3d(1.03699, 0, 0, 0, 0, 0.98534, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.03699, 0, 0, 0, 0, 0.98534, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 29.166667% {
+ -webkit-transform: matrix3d(1.02831, 0, 0, 0, 0, 0.97688, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.02831, 0, 0, 0, 0, 0.97688, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 31.25% {
+ -webkit-transform: matrix3d(1.01973, 0, 0, 0, 0, 0.97422, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.01973, 0, 0, 0, 0, 0.97422, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 33.333333% {
+ -webkit-transform: matrix3d(1.01191, 0, 0, 0, 0, 0.97618, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.01191, 0, 0, 0, 0, 0.97618, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 35.416667% {
+ -webkit-transform: matrix3d(1.00526, 0, 0, 0, 0, 0.98122, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.00526, 0, 0, 0, 0, 0.98122, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 37.5% {
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.98773, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1, 0, 0, 0, 0, 0.98773, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 39.583333% {
+ -webkit-transform: matrix3d(0.99617, 0, 0, 0, 0, 0.99433, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99617, 0, 0, 0, 0, 0.99433, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 41.666667% {
+ -webkit-transform: matrix3d(0.99368, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99368, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 43.75% {
+ -webkit-transform: matrix3d(0.99237, 0, 0, 0, 0, 1.00413, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99237, 0, 0, 0, 0, 1.00413, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 45.833333% {
+ -webkit-transform: matrix3d(0.99202, 0, 0, 0, 0, 1.00651, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99202, 0, 0, 0, 0, 1.00651, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 47.916667% {
+ -webkit-transform: matrix3d(0.99241, 0, 0, 0, 0, 1.00726, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99241, 0, 0, 0, 0, 1.00726, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 50% {
+ opacity: 1;
+ -webkit-transform: matrix3d(0.99329, 0, 0, 0, 0, 1.00671, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99329, 0, 0, 0, 0, 1.00671, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 52.083333% {
+ -webkit-transform: matrix3d(0.99447, 0, 0, 0, 0, 1.00529, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99447, 0, 0, 0, 0, 1.00529, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 54.166667% {
+ -webkit-transform: matrix3d(0.99577, 0, 0, 0, 0, 1.00346, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99577, 0, 0, 0, 0, 1.00346, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 56.25% {
+ -webkit-transform: matrix3d(0.99705, 0, 0, 0, 0, 1.0016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99705, 0, 0, 0, 0, 1.0016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 58.333333% {
+ -webkit-transform: matrix3d(0.99822, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99822, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 60.416667% {
+ -webkit-transform: matrix3d(0.99921, 0, 0, 0, 0, 0.99884, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99921, 0, 0, 0, 0, 0.99884, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 62.5% {
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 0.99816, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1, 0, 0, 0, 0, 0.99816, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 64.583333% {
+ -webkit-transform: matrix3d(1.00057, 0, 0, 0, 0, 0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.00057, 0, 0, 0, 0, 0.99795, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 66.666667% {
+ -webkit-transform: matrix3d(1.00095, 0, 0, 0, 0, 0.99811, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.00095, 0, 0, 0, 0, 0.99811, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 68.75% {
+ -webkit-transform: matrix3d(1.00114, 0, 0, 0, 0, 0.99851, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.00114, 0, 0, 0, 0, 0.99851, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 70.833333% {
+ -webkit-transform: matrix3d(1.00119, 0, 0, 0, 0, 0.99903, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.00119, 0, 0, 0, 0, 0.99903, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 72.916667% {
+ -webkit-transform: matrix3d(1.00114, 0, 0, 0, 0, 0.99955, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.00114, 0, 0, 0, 0, 0.99955, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 75% {
+ -webkit-transform: matrix3d(1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 77.083333% {
+ -webkit-transform: matrix3d(1.00083, 0, 0, 0, 0, 1.00033, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.00083, 0, 0, 0, 0, 1.00033, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 79.166667% {
+ -webkit-transform: matrix3d(1.00063, 0, 0, 0, 0, 1.00052, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.00063, 0, 0, 0, 0, 1.00052, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 81.25% {
+ -webkit-transform: matrix3d(1.00044, 0, 0, 0, 0, 1.00058, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.00044, 0, 0, 0, 0, 1.00058, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 83.333333% {
+ -webkit-transform: matrix3d(1.00027, 0, 0, 0, 0, 1.00053, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.00027, 0, 0, 0, 0, 1.00053, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 85.416667% {
+ -webkit-transform: matrix3d(1.00012, 0, 0, 0, 0, 1.00042, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1.00012, 0, 0, 0, 0, 1.00042, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 87.5% {
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1.00027, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1, 0, 0, 0, 0, 1.00027, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 89.583333% {
+ -webkit-transform: matrix3d(0.99991, 0, 0, 0, 0, 1.00013, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99991, 0, 0, 0, 0, 1.00013, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 91.666667% {
+ -webkit-transform: matrix3d(0.99986, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99986, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 93.75% {
+ -webkit-transform: matrix3d(0.99983, 0, 0, 0, 0, 0.99991, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99983, 0, 0, 0, 0, 0.99991, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 95.833333% {
+ -webkit-transform: matrix3d(0.99982, 0, 0, 0, 0, 0.99985, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99982, 0, 0, 0, 0, 0.99985, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 97.916667% {
+ -webkit-transform: matrix3d(0.99983, 0, 0, 0, 0, 0.99984, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(0.99983, 0, 0, 0, 0, 0.99984, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+ }
+}
\ No newline at end of file
diff --git a/guns-front-project/src/components/common/Vertify/style/index.less b/guns-front-project/src/components/common/Vertify/style/index.less
new file mode 100644
index 00000000..ed14d0b0
--- /dev/null
+++ b/guns-front-project/src/components/common/Vertify/style/index.less
@@ -0,0 +1,217 @@
+@import './variables.less';
+@import './animation.less';
+
+img {
+ width: 100%;
+ height: 100%;
+}
+
+// captcha
+@ym-captcha: ~'@{ym-prefix}captcha';
+@ym-icon: ~'@{ym-prefix}icon';
+
+.@{ym-captcha} {
+ width: 100%;
+ .properties(height, 42);
+ font-family: @ym-font-family;
+
+ &-content {
+ width: 100%;
+ height: 100%;
+ position: relative;
+ }
+
+ &-radar {
+ .flex(center, flex-start);
+ height: 100%;
+ width: 100%;
+ .linear-gradient-background();
+ border: 1px solid var(--ym-theme, @ym-theme);
+ box-shadow: 0 0 4px var(--ym-theme, @ym-theme);
+ cursor: pointer;
+ .properties(min-width, 160);
+ position: relative;
+
+ &-ready,
+ &-scan,
+ &-being,
+ &-success {
+ .flex();
+ flex-wrap: nowrap;
+ position: relative;
+ transition: all @ym-anim-duration ease;
+ .properties(width, 30);
+ .properties(height, 30);
+ .properties(margin, 6);
+ }
+
+ &-ring,
+ &-dot {
+ position: absolute;
+ .border-radius-circle();
+ transform: scale(.4);
+ width: 100%;
+ height: 100%;
+ box-shadow: inset 0 0 0 1px var(--ym-theme, @ym-theme);
+ background-image: linear-gradient(0, rgba(0, 0, 0, 0) 50%, #fff 50%), linear-gradient(0, #fff 50%, rgba(0, 0, 0, 0) 50%);
+ }
+
+ &-dot {
+ background: var(--ym-theme, @ym-theme);
+ }
+
+ &-ring {
+ animation: ym-anim-wait 1s infinite;
+ transform: scale(1);
+ }
+
+ &-scan {
+ .double-ring {
+ width: 100%;
+ height: 100%;
+ position: relative;
+ transform: translateZ(0) scale(1);
+ backface-visibility: hidden;
+ transform-origin: 0 0;
+
+ > div {
+ position: absolute;
+ .properties(width, 24);
+ .properties(height, 24);
+ .properties(top, 3);
+ .properties(left, 3);
+ .border-radius-circle();
+ border: 3px solid var(--ym-ink, @ym-ink);
+ border-color: var(--ym-theme, @ym-theme) transparent var(--ym-theme, @ym-theme) transparent;
+ animation: ym-anim-rotate .8s linear infinite;
+ }
+
+ > div:nth-child(2) {
+ .properties(width, 14);
+ .properties(height, 14);
+ .properties(top, 8);
+ .properties(left, 8);
+ border-color: transparent var(--ym-theme, @ym-theme) transparent var(--ym-theme, @ym-theme);
+ animation: ym-anim-rotate .5s linear infinite reverse;
+ }
+ }
+ }
+
+ &-being {
+ .flex();
+ .properties(font-size, 14);
+ font-weight: 600;
+ color: var(--ym-font, @ym-font);
+ text-align: center;
+ }
+
+ &-success {
+ .flex();
+ cursor: default;
+
+ &-icon {
+ color: var(--ym-theme, @ym-theme);
+ animation-name: ym-captcha-success;
+ animation-timing-function: ease;
+ animation-iteration-count: 1;
+ animation-delay: .5s;
+ animation-duration: @ym-anim-duration;
+ }
+ }
+
+ &-tip {
+ .flex(center, flex-start);
+ .properties(height, 42);
+ .properties(padding-left, 2);
+ .properties(font-size, @ym-font-size-normal);
+ color: var(--ym-font, @ym-font);
+ .text-ellipsis();
+ text-align: left;
+
+ &-error {
+ color: var(--ym-danger, @ym-danger);
+ }
+ }
+
+ &-pass &-tip {
+ color: var(--ym-theme, @ym-theme);
+ }
+
+ &-logo {
+ position: absolute;
+ .properties(right);
+ .properties(top, 10);
+ .properties(width, 20);
+ .properties(height, 20);
+ border: 1px solid var(--ym-theme, @ym-theme);
+ .linear-gradient-background();
+ .border-radius-circle();
+ overflow: hidden;
+
+ > a {
+ .flex();
+ }
+
+ img {
+ width: 100%;
+ height: 100%;
+ transform: scale(1.1);
+ }
+ }
+ }
+
+ &-success {
+ position: absolute;
+ right: 0;
+ top: 0;
+ height: 100%;
+ width: 0;
+ box-shadow: 0 0 4px var(--ym-captcha-success-bg, @ym-captcha-success-bg);
+ cursor: default;
+ transition: width @ym-anim-duration ease;
+ overflow: hidden;
+
+ &-show{
+ background: var(--ym-captcha-success-bg, @ym-captcha-success-bg);
+ width: 100%;
+ }
+ }
+
+ &-message {
+ position: absolute;
+ top: 20px;
+ left: 0;
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: @ym-z-index-modal;
+
+ &-content {
+ .linear-gradient-background();
+ .border-radius(32);
+ border: 1px solid var(--ym-theme, @ym-theme);
+ color: var(--ym-danger, @ym-danger);
+ .properties(padding-top);
+ .properties(padding-bottom);
+ .properties(padding-left, 16);
+ .properties(padding-right, 16);
+ .flex();
+ .properties(line-height, 22);
+ animation-name: ym-captcha-downtip;
+ animation-duration: @ym-anim-duration;
+ animation-timing-function: ease;
+ animation-fill-mode: forwards;
+ }
+ }
+}
+
+.ant-form-item-has-error {
+ .@{ym-captcha} {
+ &-radar {
+ border-color: var(--ym-error, @ym-error);
+ }
+ }
+}
+
+@import './modal.less';
\ No newline at end of file
diff --git a/guns-front-project/src/components/common/Vertify/style/modal.less b/guns-front-project/src/components/common/Vertify/style/modal.less
new file mode 100644
index 00000000..ca11e881
--- /dev/null
+++ b/guns-front-project/src/components/common/Vertify/style/modal.less
@@ -0,0 +1,356 @@
+@import './variables.less';
+@ym-captcha: ~'@{ym-prefix}captcha';
+@ym-icon: ~'@{ym-prefix}icon';
+
+.@{ym-captcha} {
+ &-modal {
+ position: absolute;
+ display: block;
+ transition: all @ym-anim-duration ease;
+ transform-origin: left center;
+ z-index: @ym-z-index-modal;
+
+ &-content {
+ .properties(width, 400);
+ // position: absolute;
+ // left: 0;
+ // height: 300px;
+ // .properties(top, -157);
+ .border-radius();
+ .linear-gradient-background();
+ box-shadow: 0 0 10px var(--ym-dark, @ym-dark);
+ border: 1px solid var(--ym-theme, @ym-theme);
+ }
+
+ &-wrap {
+ position: relative;
+ .properties(padding, 12);
+ }
+
+ &-embed {
+ width: 100%;
+ height: 0;
+ position: relative;
+ left: 0;
+ top: 0;
+ .properties(padding-bottom, 200);
+ overflow: hidden;
+ }
+
+ &-loading,
+ &-info {
+ position: absolute;
+ }
+
+ &-loading {
+ .properties(width, 374);
+ .properties(height, 200);
+ .flex();
+ flex-direction: column;
+ .border-radius();
+ color: #fff;
+ background: #636363;
+ .properties(font-size, @ym-font-size-normal);
+
+ &-spinner {
+ .properties(width, 80);
+ .properties(height, 80);
+ display: inline-block;
+ overflow: hidden;
+ background: transparent;
+
+ .load > div {
+ transform: scale(0.8);
+ transform-origin: 50px 50px;
+ }
+
+ .load > div > div {
+ animation: ym-anim-move 3s linear infinite;
+ position: absolute
+ }
+
+ .load > div > div div:nth-child(1) {
+ .properties(width, 36);
+ .properties(height, 36);
+ border-radius: 50%;
+ border: 6px solid var(--ym-theme, @ym-theme);
+ background: transparent;
+ }
+
+ .load > div > div div:nth-child(2) {
+ .properties(width, 8.5);
+ .properties(height, 25.5);
+ transform: rotate(-45deg);
+ background: var(--ym-theme, @ym-theme);
+ border-radius: 0 0 4px 4px;
+ position: absolute;
+ .properties(top, 34);
+ .properties(left, 42.5);
+ }
+
+ .load {
+ width: 100%;
+ height: 100%;
+ position: relative;
+ transform: translateZ(0) scale(0.8);
+ backface-visibility: hidden;
+ transform-origin: 0 0;
+ }
+ .load div {
+ box-sizing: content-box;
+ }
+ }
+
+ &-tip {
+ .properties(margin-top, 16);
+ .letter-spacing(4);
+ }
+ }
+
+ &-info {
+ canvas {
+ position: absolute;
+ .border-radius();
+
+ &:first-child {
+ z-index: 100;
+ }
+
+ &:last-child {
+ z-index: 200;
+ }
+ }
+ }
+
+ &-result {
+ position: absolute;
+ left: 0;
+ .properties(bottom, -32);
+ width: 100%;
+ color: #fff;
+ transition: bottom @ym-anim-duration ease;
+ .flex(center, flex-start);
+ .properties(text-indent, 12);
+ .properties(font-size, 14);
+ .properties(height, 32);
+ z-index: 220;
+
+ &-success {
+ background: var(--ym-success, @ym-success);
+ }
+
+ &-error {
+ background: var(--ym-danger, @ym-danger);
+ }
+ }
+
+ &-slider {
+ user-select: none;
+ position: relative;
+ .properties(margin-top, 16);
+ .properties(margin-bottom);
+ margin-right: 0;
+
+ &-track {
+ background: #fff;
+ border: 1px solid var(--ym-theme, @ym-theme);
+ .flex();
+ .border-radius(20);
+ .properties(height, 38);
+ .properties(padding-left, 60);
+ overflow: hidden;
+
+ &-tip {
+ width: 100%;
+ .properties(height, 38);
+ .properties(font-size, @ym-font-size-normal);
+ color: #1d1e23;
+ .flex(center, flex-start);
+ flex-wrap: nowrap;
+ opacity: 1;
+ transition: opacity .3s ease;
+
+ &.hide {
+ opacity: 0;
+ }
+ }
+ }
+
+ &-btn {
+ position: absolute;
+ .properties(top, -8);
+ left: 0;
+ .properties(width, 54);
+ .properties(height, 54);
+ .border-radius-circle();
+ border: 1px solid var(--ym-theme, @ym-theme);
+ background: #fff;
+ .flex();
+ cursor: pointer;
+ box-shadow: 1px 1px 10px var(--ym-dark, @ym-dark);
+
+ &-icon {
+ .properties(width, 28);
+ .properties(height, 24);
+ border: 2px solid var(--ym-dark, @ym-dark);
+ .border-radius();
+ position: relative;
+ }
+
+ &-vertical {
+ .properties(width, 8);
+ .properties(height, 32);
+ background: #fff;
+ position: absolute;
+ .properties(left);
+ .properties(top, -4);
+ }
+
+ &-horizontal {
+ .properties(width, 20);
+ .properties(height, 2);
+ background: var(--ym-dark, @ym-dark);
+ .border-radius();
+ position: absolute;
+ .properties(left, 2);
+ .properties(top, 11);
+ transition: all .5 ease;
+ animation: ym-anim-scan 1.5s linear infinite;
+ z-index: 20;
+ }
+ }
+ }
+
+ &-panel {
+ position: relative;
+ border-top: 1px solid fade(#1d1e23, 10%);
+ box-shadow: 0 0 2px fade(#fff, 30%);
+ .properties(height, 50);
+ .properties(padding-left, 12);
+ .properties(padding-right, 12);
+ .flex(center, space-between);
+
+ &-action{
+ .flex();
+
+ .@{ym-icon} {
+ color: #fff;
+ .properties(margin-right, 12);
+ cursor: pointer;
+
+ &:last-child {
+ margin-right: 0
+ }
+ }
+
+ .anticon {
+ .properties(font-size, 14);
+ .properties(width, 14);
+ .properties(height, 14);
+ .properties(margin-right, 16);
+ cursor: pointer;
+ color: #fff;
+
+ &:last-child {
+ margin-right: 0;
+ }
+ }
+
+ > a {
+ .flex();
+ .properties(height, 14);
+ }
+
+ &-close {
+ .properties(width, 20);
+ .properties(height, 20);
+ background-color: #fff;
+ .border-radius-circle();
+ .flex();
+ transition: all .4s cubic-bezier(.215, .61, .355,1);
+ box-shadow: 0px 0px 30px 0px fade(#f6ca9d, 50%);
+
+ & > span {
+ background-color: var(--ym-theme, @ym-theme);
+ .properties(height, 12);
+ .border-radius(6);
+ position: relative;
+ transition: all @ym-anim-duration cubic-bezier(.215, .61, .355,1);
+ position: absolute;
+ top: 50%;
+ .properties(margin-top, -6);
+ .properties(left, 18);
+ .properties(width, 4);
+ .flex();
+ }
+ }
+ }
+ }
+
+ &&-error {
+ animation-name: ym-anim-shake;
+ animation-duration: @ym-anim-duration;
+ animation-timing-function: ease-in-out;
+ animation-iteration-count: 1.5;
+
+ .@{ym-captcha}-modal {
+ &-info canvas:last-child,
+ &-slider-btn {
+ transition: all @ym-anim-duration ease;
+ }
+ }
+ }
+
+ &-copyright {
+ .properties(font-size, 12);
+ .properties(line-height, 16);
+ color: #fff;
+
+ &-text {
+ .flex();
+
+ a {
+ .properties(width, 20);
+ .properties(height, 20);
+ .properties(margin-right);
+ border: 1px solid var(--ym-theme, @ym-theme);
+ .border-radius-circle();
+ .linear-gradient-background();
+ overflow: hidden;
+
+ img {
+ transform: scale(1.1);
+ .border-radius-circle();
+ }
+ }
+ }
+ }
+
+ &-tooltip {
+ z-index: @ym-z-index-modal;
+
+ .ant-tooltip {
+ &-inner {
+ .border-radius(8);
+ .linear-gradient-background();
+ min-height: unset;
+ }
+ }
+ }
+ }
+}
+
+.@{ym-lang-en} {
+ .@{ym-captcha} {
+ &-modal {
+ &-result {
+ &-error {
+ .properties(bottom, -48);
+ .properties(height, 48);
+ .properties(padding-left, 8);
+ .properties(padding-right, 8);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/guns-front-project/src/components/common/Vertify/style/variables.less b/guns-front-project/src/components/common/Vertify/style/variables.less
new file mode 100644
index 00000000..ccd0720f
--- /dev/null
+++ b/guns-front-project/src/components/common/Vertify/style/variables.less
@@ -0,0 +1,156 @@
+// prefix.
+@ym-prefix: ym-;
+@ym-lang-en: ~'@{ym-prefix}lang-en-us';
+
+// font-size.
+@ym-font-size: 1rem;
+@ym-font-size-sm: 12px;
+@ym-font-size-normal: 14px;
+@ym-font-size-base: 16px;
+
+// gap.
+@ym-gap: 8px;
+
+// animation duration
+@ym-anim-duration: .4s;
+
+@ym-z-index: 20220511;
+@ym-z-index-top: 20220602;
+@ym-z-index-mask: 20220614;
+@ym-z-index-modal: 20220620;
+
+@ym-overflow-extend: 21px;
+
+// color.
+@ym-white: #fff;
+@ym-black: #000;
+
+// side menu.
+@ym-side-width: (@ym-gap * 32 / @ym-font-size-base) * @ym-font-size;
+@ym-side-height: (@ym-gap * 16 / @ym-font-size-base) * @ym-font-size;
+@ym-side-large-height: (@ym-gap * 24 / @ym-font-size-base) * @ym-font-size;
+@ym-side-width-scroll: ((@ym-gap * 34 + 1) / @ym-font-size-base) * @ym-font-size;
+@ym-side-width-sm: (@ym-gap * 10 / @ym-font-size-base) * @ym-font-size;
+@ym-side-width-sm-scroll: ((@ym-gap * 12 + 1) / @ym-font-size-base) * @ym-font-size;
+@ym-side-width-margin: (@ym-gap * 2 / @ym-font-size-base) * @ym-font-size;
+@ym-side-item-height: (@ym-gap * 6.25 / @ym-font-size-base) * @ym-font-size;
+@ym-side-logo-size: (@ym-gap * 4 / @ym-font-size-base) * @ym-font-size;
+@ym-side-logo-large-size: (@ym-gap * 8 / @ym-font-size-base) * @ym-font-size;
+
+// header.
+@ym-header-height: (@ym-gap * 6 / @ym-font-size-base) * @ym-font-size;
+@ym-header-avatar-size: (@ym-gap * 3 / @ym-font-size-base) * @ym-font-size;
+
+// content
+@ym-content-padding-top: (@ym-gap * 15 / @ym-font-size-base) * @ym-font-size;
+
+// font.
+@ym-font-color: #333;
+@ym-font-family: "Pingfang SC", "Microsoft YaHei", "Monospaced Number", "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Helvetica Neue", Helvetica, Arial, sans-serif;
+@ym-code-family: Lucida Console, Consolas, "Courier New", "Source Code Pro", "Miscrosoft Yahei", "Segoe UI", "Lucida Grande", Helvetica, Arial, FreeSans, Arimo, "Droid Sans", "wenquanyi micro hei", "Hiragino Sans GB", "Hiragino Sans GB W3", sans-serif;
+
+// flex.
+.flex(@align: center, @justify: center, @direction: row) {
+ display: flex;
+ align-items: @align;
+ justify-content: @justify;
+ flex-direction: @direction;
+}
+
+// border raiuds.
+.border-radius(@raduis: 4) {
+ border-radius: (@raduis / @ym-font-size-base) * @ym-font-size;
+}
+
+.border-radius-circle() {
+ border-radius: 50%;
+}
+
+.linear-gradient-background() {
+ background-color: var(--ym-dark, @ym-dark);
+ background-image: linear-gradient(315deg, var(--ym-black, @ym-black) 0%, var(--ym-pre-dark, @ym-pre-dark) 74%);
+}
+
+.linear-gradient-background-theme() {
+ background-color: var(--ym-theme, @ym-theme);
+ background-image: linear-gradient(127deg, var(--ym-gradient-s, @ym-gradient-s) 0%, var(--ym-gradient-m, @ym-gradient-m) 52%, var(--ym-gradient-e, @ym-gradient-e) 100%);
+}
+
+.linear-gradient-text() {
+ background: transparent linear-gradient(127deg, var(--ym-gradient-s, @ym-gradient-s) 0%, var(--ym-gradient-m, @ym-gradient-m) 52%, var(--ym-gradient-e, @ym-gradient-e) 100%);
+ -webkit-text-fill-color: transparent;
+ -webkit-background-clip: text;
+ background-clip: text;
+}
+
+// font size
+.font-size(@size: @ym-font-size-normal) {
+ font-size: (@size / @ym-font-size-base) * @ym-font-size;
+ line-height: ((@size + 4) / @ym-font-size-base) * @ym-font-size;
+}
+
+// linear-gradient
+.linear-gradient() {
+ background: linear-gradient(127deg, var(--ym-gradient-s, @ym-gradient-s) 0%, var(--ym-gradient-m, @ym-gradient-m) 52%, var(--ym-gradient-e, @ym-gradient-e) 100%);
+ color: linear-gradient(127deg, var(--ym-gradient-s, @ym-gradient-s) 0%, var(--ym-gradient-m, @ym-gradient-m) 52%, var(--ym-gradient-e, @ym-gradient-e) 100%);
+}
+
+// properties
+.properties(@key, @value: @ym-gap) {
+ @{key}: (@value / @ym-font-size-base) * @ym-font-size;
+}
+
+// text overflow ellipsis.
+.text-ellipsis() {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+// letter spacing.
+.letter-spacing(@value: 2) {
+ .properties(letter-spacing, @value);
+}
+
+// tag
+.tag(@bgColor: #ff5500, @txtColor: @ym-white) {
+ background: @bgColor;
+ margin-right: 0;
+ .border-radius(16);
+ color: @txtColor;
+ .properties(line-height, 18);
+ .properties(max-width, 64);
+ .text-ellipsis();
+ .properties(padding-left);
+ .properties(padding-right);
+ .properties(font-size, 12);
+ .properties(height, 20);
+}
+
+@ym-theme: #f6ca9d;
+@ym-primary: @ym-theme;
+@ym-subsidiary: #808695;
+@ym-success: #2F9688;
+@ym-error: #ff4d4f;
+@ym-danger: #ed4014;
+@ym-warning: #ff9900;
+@ym-info: #2db7f5;
+@ym-selection: fade(@ym-theme, 80%);
+@ym-link: @ym-primary;
+@ym-font: @ym-white;
+@ym-ink: @ym-black;
+@ym-dark: #1d1e23;
+@ym-deep: #2d2f32;
+@ym-night: #3e3e3e;
+@ym-dawn: #4c4c4c;
+@ym-dark-grey: #333;
+@ym-light-grey: #949494;
+@ym-pre-dark: #434343;
+@ym-light-purple: #5a72af;
+@ym-light-blue: #8da6b8;
+@ym-gradient-s: #d2b27d;
+@ym-gradient-m: #f4d5a9;
+@ym-gradient-e: #d1a466;
+
+// captcha
+@ym-captcha-success-bg: fade(@ym-theme, 20%);
\ No newline at end of file
diff --git a/guns-front-project/src/components/common/Vertify/tools.js b/guns-front-project/src/components/common/Vertify/tools.js
new file mode 100644
index 00000000..d9cac0c5
--- /dev/null
+++ b/guns-front-project/src/components/common/Vertify/tools.js
@@ -0,0 +1,335 @@
+class MiTools {
+ /**
+ * 是否为移动端.
+ * 注: iPad Safari 获取的 ua 与 Mac Safari 一致, 需独立判断.
+ * @returns
+ */
+ isMobile() {
+ const ua = navigator.userAgent;
+ const agents = ['Android', 'iPhone', 'SymbianOS', 'Windows Phone', 'iPad', 'iPod'];
+ const isSafari = ua.indexOf('Safari') !== -1 && ua.indexOf('Version') !== -1;
+ const isIPhone = ua.indexOf('iPhone') !== -1 && ua.indexOf('Version') !== -1;
+ const isIPad = isSafari && !isIPhone && 'ontouchend' in document;
+ let mobile = false;
+ if (isIPad) {
+ mobile = true;
+ } else {
+ for (let i = 0, len = agents.length; i < len; i++) {
+ if (ua.indexOf(agents[i]) > 0) {
+ mobile = true;
+ break;
+ }
+ }
+ }
+ return mobile;
+ }
+
+ /**
+ * Format string content.
+ * @param str
+ * @param formatter
+ */
+ formatEmpty(str, formatter) {
+ if (this.isEmpty(str)) return formatter ?? '-';
+ return str;
+ }
+
+ /**
+ * Whether the string content is empty.
+ * @param str
+ * @param format
+ */
+ isEmpty(str, format = false) {
+ let result = str === null || str == '' || typeof str === 'undefined';
+ if (format) result = this.formatEmpty(str);
+ return result;
+ }
+
+ /**
+ * Whether the `element / params` is valid.
+ * @param value
+ */
+ isValid(value) {
+ return value !== undefined && value !== null && value !== '';
+ }
+
+ /**
+ * Whether it is a number.
+ * @param number
+ */
+ isNumber(number) {
+ return typeof number === 'number' && isFinite(number);
+ }
+
+ /**
+ * Get the password strength.
+ * return a number level ( 1 - 4 ).
+ * @param password
+ */
+ getPasswordStrength(password) {
+ const reg = {
+ lower: /[a-z]/,
+ upper: /[A-Z]/,
+ number: /[\d]/,
+ character: /[~!@#$%^&*()_+=\-.,]/
+ };
+ let strength = 0;
+ if (reg.lower.test(password)) strength++;
+ if (reg.upper.test(password)) strength++;
+ if (reg.number.test(password)) strength++;
+ if (reg.character.test(password)) strength++;
+ return strength;
+ }
+
+ /**
+ * random.
+ * @returns {string}
+ */
+ random() {
+ return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
+ }
+
+ /**
+ * Generate a random number within the specified range.
+ * @param start
+ * @param end
+ * @returns {number}
+ */
+ randomNumberInRange(start, end) {
+ return Math.round(Math.random() * (end - start) + start);
+ }
+
+ /**
+ * Generate unique string.
+ * @param upper
+ * @returns {string}
+ */
+ uid(upper = false, prefix) {
+ let str = (
+ this.random() +
+ this.random() +
+ this.random() +
+ this.random() +
+ this.random() +
+ this.random() +
+ this.random() +
+ this.random()
+ ).toLocaleUpperCase();
+ if (prefix) str = prefix + str;
+ return upper ? str.toUpperCase() : str.toLowerCase();
+ }
+
+ /**
+ * replace url parameters.
+ * @param url
+ * @param params
+ * @returns
+ */
+ replaceUrlParams(url, params) {
+ if (Object.keys(params).length > 0) {
+ for (const i in params) {
+ if (params.hasOwnProperty(i)) {
+ const reg = new RegExp('{' + i + '}', 'gi');
+ url = url.replace(reg, params[i]);
+ }
+ }
+ }
+ return url;
+ }
+
+ /**
+ * Unit conversion.
+ * @param value
+ * @param base
+ */
+ px2Rem(value, base = 16) {
+ return value ? Math.round((value / base) * 100) / 100 : value;
+ }
+
+ /**
+ * 转成rem.
+ * @param num
+ * @returns
+ */
+ convert2Rem(num) {
+ return $tools.isNumber(num)
+ ? `${this.px2Rem(parseInt(num.toString()))}rem`
+ : num
+ ? /%/g.test(num.toString())
+ ? num
+ : `${this.px2Rem(parseInt(num.toString()))}rem`
+ : null;
+ }
+
+ /**
+ * convert color.
+ * @param color
+ * @param opacity
+ */
+ colorHex2Rgba(color, opacity = 1) {
+ if (color) {
+ const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
+ if (reg.test(color)) {
+ if (color.length === 4) {
+ let newColor = '#';
+ for (let i = 1; i < 4; i++) {
+ newColor += color.slice(i, i + 1).concat(color.slice(i, i + 1));
+ }
+ color = newColor;
+ }
+ const changeColor = [];
+ for (let i = 1; i < 7; i += 2) {
+ changeColor.push(parseInt('0x' + color.slice(i, i + 2)));
+ }
+ return `rgba(${changeColor.join(',')}, ${opacity})`;
+ }
+ } else return color;
+ }
+
+ /**
+ * convert color.
+ * @param color
+ */
+ colorRgb2Hex(color) {
+ if (color) {
+ const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
+ if (/^(rgb|RGB)/.test(color)) {
+ const aColor = color.replace(/(?:\(|\)|rgb|RGB)*/g, '').split(',');
+ let strHex = '#';
+ for (let i = 0; i < aColor.length; i++) {
+ let hex = Number(aColor[i]).toString(16);
+ if (hex === '0') hex += hex;
+ strHex += hex;
+ }
+ if (strHex.length !== 7) strHex = color;
+ return strHex;
+ } else if (reg.test(color)) {
+ const aNum = color.replace(/#/, '').split('');
+ if (aNum.length === 6) {
+ return color;
+ } else if (aNum.length === 3) {
+ let numHex = '#';
+ for (let i = 0; i < aNum.length; i += 1) {
+ numHex += aNum[i] + aNum[i];
+ }
+ return numHex;
+ }
+ }
+ } else return color;
+ }
+
+ /**
+ * requestAnimationFrame.
+ * @param callback
+ * @returns
+ */
+ raf(callback) {
+ return window.requestAnimationFrame(callback) || window.setTimeout(callback, 1000 / 60);
+ }
+
+ /**
+ * cancelAnimationFrame.
+ * @param rid
+ */
+ caf(rid) {
+ window.cancelAnimationFrame(rid);
+ }
+
+ /**
+ * Gets the actual height of the element from the top of the document.
+ * @param el
+ * @param pos
+ * @returns
+ */
+ getElementActualTopOrLeft(el, pos = 'top') {
+ let actual = pos === 'left' ? el.offsetLeft : el.offsetTop;
+ let current = el.offsetParent;
+ while (current !== null) {
+ actual += pos === 'left' ? current.offsetLeft : current.offsetTop;
+ current = current.offsetParent;
+ }
+ return actual;
+ }
+
+ /**
+ * scroll to top ( animation ).
+ * @param el
+ * @param from
+ * @param to
+ * @param duration
+ * @param endCallback
+ */
+ scrollTop(el, from = 0, to, duration = 800, endCallback) {
+ const difference = Math.abs(from - to);
+ const step = Math.ceil((difference / duration) * 50);
+ let rid;
+ function scroll(start, end, step, vm) {
+ if (start === end) {
+ if (rid) vm.caf(rid);
+ endCallback && endCallback();
+ return;
+ }
+ let d = start + step > end ? end : start + step;
+ if (start > end) d = start - step < end ? end : start - step;
+ if (el === window) window.scrollTo(d, d);
+ else el.scrollTop = d;
+ rid = vm.raf(() => scroll(d, end, step, vm));
+ }
+ scroll(from, to, step, this);
+ }
+
+ /**
+ * back to top.
+ * @param offset
+ * @param duration
+ */
+ back2top(offset = 0, duration = 1000) {
+ const top = offset ?? (document.documentElement.scrollTop || document.body.scrollTop);
+ this.scrollTop(document.body, top, 0, duration);
+ }
+
+ /**
+ * add event listener.
+ * @param el
+ * @param event
+ * @param listener
+ * @param useCapture
+ */
+ on(el, event, listener, useCapture) {
+ if (!!document.addEventListener) {
+ if (el && event && listener) el.addEventListener(event, listener, useCapture);
+ } else {
+ if (el && event && listener) el.attachEvent(`on${event}`, listener);
+ }
+ }
+
+ /**
+ * remove event listener.
+ * @param el
+ * @param event
+ * @param listener
+ * @param useCapture
+ */
+ off(el, event, listener, useCapture) {
+ if (!!document.addEventListener) {
+ if (el && event && listener) el.removeEventListener(event, listener, useCapture);
+ } else {
+ if (el && event && listener) el.detachEvent(`on${event}`, listener);
+ }
+ }
+
+ /**
+ * transfer.
+ * @param html
+ * @returns
+ */
+ htmlEncode(html) {
+ let temp = document.createElement('div');
+ temp.textContent !== null ? (temp.textContent = html) : (temp.innerText = html);
+ const output = temp.innerHTML;
+ temp = null;
+ return output;
+ }
+}
+
+export const $tools = new MiTools();
diff --git a/guns-front-project/src/components/layout/components/layout-header.vue b/guns-front-project/src/components/layout/components/layout-header.vue
new file mode 100644
index 00000000..71e64cc6
--- /dev/null
+++ b/guns-front-project/src/components/layout/components/layout-header.vue
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+ {{ projectName }}
+
+
+
+
+
+
+
+
+
+
+ {{ d.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/layout/components/layout-menus.js b/guns-front-project/src/components/layout/components/layout-menus.js
new file mode 100644
index 00000000..51b1d0c3
--- /dev/null
+++ b/guns-front-project/src/components/layout/components/layout-menus.js
@@ -0,0 +1,146 @@
+/** 菜单 */
+import { defineComponent, h } from 'vue';
+import { RouterLink } from 'vue-router';
+import { Menu as AMenu, MenuItem as AMenuItem, SubMenu as ASubMenu, MenuItemGroup as AMenuItemGroup } from 'ant-design-vue/es';
+import { isExternalLink } from '@/utils/common/menu-util';
+
+export default defineComponent({
+ name: 'LayoutMenus',
+ props: {
+ // 菜单数据
+ data: {
+ type: Array,
+ required: true
+ },
+ // 菜单类型
+ mode: {
+ type: String,
+ default: 'inline'
+ },
+ // 菜单主题
+ theme: {
+ type: String,
+ default: 'light'
+ },
+ // 展开的菜单
+ openKeys: Array,
+ // 菜单选中
+ selectedKeys: Array,
+ // 是否折叠
+ inlineCollapse: Boolean,
+ // 菜单缩进
+ inlineIndent: Number,
+ // 一级父菜单 popup class
+ firstPopClass: String,
+ // 标题插槽名称
+ titleSlot: {
+ type: String,
+ default: 'title'
+ },
+ // 图标插槽名称
+ iconSlot: {
+ type: String,
+ default: 'icon'
+ },
+ // 是否显示图标
+ showIcon: {
+ type: Boolean,
+ default: true
+ }
+ },
+ emits: ['openChange', 'titleClick'],
+ setup(props, { emit, slots }) {
+ /* 递归渲染菜单节点 */
+ const renderItems = (data, popupClassName) => {
+ const nodes = [];
+ data?.forEach(item => {
+ if (item.meta?.hide) {
+ return;
+ }
+ // 图标插槽
+ const iconSlot =
+ props.showIcon && item.meta?.icon
+ ? () => {
+ const t = slots[props.iconSlot];
+ return t ? t({ icon: item.meta.icon, item }) : void 0;
+ }
+ : void 0;
+ // 标题节点
+ const titleSlot = slots[props.titleSlot];
+ const titleNode = titleSlot ? titleSlot({ title: item.meta?.title, item }) : h('span', {}, item.meta?.title);
+ // 子级节点
+ if (!item.children?.some(d => !d.meta?.hide)) {
+ let linkNode;
+ // 超链接节点
+ if (isExternalLink(item.path)) {
+ linkNode = h('a', { href: item.path, target: '_blank' });
+ } else if (isExternalLink(item.redirect)) {
+ linkNode = h('a', { href: item.redirect, target: '_blank' });
+ } else {
+ linkNode = h(RouterLink, { to: item.redirect ? item.redirect : item.path });
+ }
+
+ nodes.push(
+ h(
+ AMenuItem,
+ { key: item.path },
+ {
+ default: () => [titleNode, linkNode],
+ icon: iconSlot
+ }
+ )
+ );
+ return;
+ }
+ // 父级节点
+ if (item.meta?.group) {
+ nodes.push(
+ h(
+ AMenuItemGroup,
+ { key: item.path },
+ {
+ default: () => renderItems(item.children),
+ title: () => titleNode
+ }
+ )
+ );
+ } else {
+ nodes.push(
+ h(
+ ASubMenu,
+ {
+ key: item.path,
+ popupClassName,
+ onTitleClick: key => emit('titleClick', key, item)
+ },
+ {
+ default: () => renderItems(item.children),
+ title: () => titleNode,
+ icon: iconSlot
+ }
+ )
+ );
+ }
+ });
+ return nodes;
+ };
+
+ return () => {
+ return h(
+ AMenu,
+ {
+ mode: props.mode,
+ theme: props.theme,
+ openKeys: props.openKeys,
+ selectedKeys: props.selectedKeys,
+ inlineCollapse: props.inlineCollapse,
+ inlineIndent: props.inlineIndent,
+ titleSlot: props.titleSlot,
+ iconSlot: props.iconSlot,
+ onOpenChange: keys => emit('openChange', keys)
+ },
+ () => renderItems(props.data, props.firstPopClass)
+ );
+ };
+ }
+});
diff --git a/guns-front-project/src/components/layout/components/layout-sidebar.vue b/guns-front-project/src/components/layout/components/layout-sidebar.vue
new file mode 100644
index 00000000..27390188
--- /dev/null
+++ b/guns-front-project/src/components/layout/components/layout-sidebar.vue
@@ -0,0 +1,125 @@
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/layout/components/tab-dropdown.js b/guns-front-project/src/components/layout/components/tab-dropdown.js
new file mode 100644
index 00000000..1587074b
--- /dev/null
+++ b/guns-front-project/src/components/layout/components/tab-dropdown.js
@@ -0,0 +1,92 @@
+/** 页签栏下拉菜单 */
+import { defineComponent, h } from 'vue';
+import {
+ Dropdown as ADropdown,
+ Menu as AMenu,
+ MenuItem as AMenuItem
+} from 'ant-design-vue/es';
+import DownOutlined from '@ant-design/icons-vue/es/icons/DownOutlined';
+import ReloadOutlined from '@ant-design/icons-vue/es/icons/ReloadOutlined';
+import ArrowLeftOutlined from '@ant-design/icons-vue/es/icons/ArrowLeftOutlined';
+import ArrowRightOutlined from '@ant-design/icons-vue/es/icons/ArrowRightOutlined';
+import CloseCircleOutlined from '@ant-design/icons-vue/es/icons/CloseCircleOutlined';
+import ExpandOutlined from '@ant-design/icons-vue/es/icons/ExpandOutlined';
+import CompressOutlined from '@ant-design/icons-vue/es/icons/CompressOutlined';
+import MinusCircleOutlined from '@ant-design/icons-vue/es/icons/MinusCircleOutlined';
+import { useLocale } from '@/i18n/use-locale';
+
+export default defineComponent({
+ name: 'LayoutTabDropdown',
+ props: {
+ active: String,
+ showRefresh: Boolean,
+ bodyFullscreen: Boolean
+ },
+ emits: ['menu-click'],
+ setup(props, { emit, slots }) {
+ const { locale } = useLocale({ name: 'tabs' });
+
+ /* 菜单 item 点击事件 */
+ const onClick = ({ key }) => {
+ emit('menu-click', key);
+ };
+
+ /* 渲染菜单 item */
+ const hMI = (
+ key,
+ label,
+ icon,
+ scale
+ ) => {
+ return h(AMenuItem, { key }, () => {
+ return h('div', { class: 'guns-dropdown-item' }, [
+ h(icon, {
+ style: { transform: scale ? `scale(${scale})` : void 0 }
+ }),
+ h('div', { class: 'guns-dropdown-item-label' }, label)
+ ]);
+ });
+ };
+
+ return () => {
+ return h(
+ ADropdown,
+ {
+ placement: 'bottomRight',
+ overlayClassName: 'guns-admin-tabs-drop-popper'
+ },
+ {
+ default: () => {
+ return h('div', { class: 'guns-tab-dropdowm' }, h(DownOutlined));
+ },
+ overlay: () => {
+ if (slots.dropdown) {
+ return slots.dropdown({
+ active: props.active,
+ refresh: props.showRefresh
+ });
+ }
+ const items = [
+ hMI(
+ 'fullscreen',
+ props.bodyFullscreen
+ ? locale.value.fullscreenExit
+ : locale.value.fullscreen,
+ props.bodyFullscreen ? CompressOutlined : ExpandOutlined,
+ 0.9
+ ),
+ hMI('left', locale.value.closeLeft, ArrowLeftOutlined),
+ hMI('right', locale.value.closeRight, ArrowRightOutlined),
+ hMI('other', locale.value.closeOther, MinusCircleOutlined, 1.02),
+ hMI('all', locale.value.closeAll, CloseCircleOutlined, 1.02)
+ ];
+ if (props.showRefresh) {
+ items.push(hMI('reload', locale.value.reload, ReloadOutlined));
+ }
+ return h(AMenu, { selectable: false, onClick }, () => items);
+ }
+ }
+ );
+ };
+ }
+});
diff --git a/guns-front-project/src/components/layout/components/tab-tool.vue b/guns-front-project/src/components/layout/components/tab-tool.vue
new file mode 100644
index 00000000..09cd248d
--- /dev/null
+++ b/guns-front-project/src/components/layout/components/tab-tool.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/layout/index.vue b/guns-front-project/src/components/layout/index.vue
new file mode 100644
index 00000000..5e2f4a6c
--- /dev/null
+++ b/guns-front-project/src/components/layout/index.vue
@@ -0,0 +1,726 @@
+
+
+
+
+
+
diff --git a/guns-front-project/src/components/layout/layout-config-provider/index.js b/guns-front-project/src/components/layout/layout-config-provider/index.js
new file mode 100644
index 00000000..7e0580f5
--- /dev/null
+++ b/guns-front-project/src/components/layout/layout-config-provider/index.js
@@ -0,0 +1,61 @@
+/** 全局配置组件 */
+import { defineComponent, reactive, watch } from 'vue';
+
+export default defineComponent({
+ name: 'LayoutConfigProvider',
+ props: {
+ // 表格全局 request
+ request: Object,
+ // 表格全局 response
+ response: Object,
+ // 表格全局配置
+ table: Object,
+ // 国际化配置
+ locale: Object,
+ // 是否开启 keep-alive
+ keepAlive: Boolean
+ },
+ setup(props, { slots }) {
+ const config = reactive({ ...props });
+
+ watch(
+ () => props.request,
+ () => {
+ config.request = props.request;
+ },
+ { deep: true }
+ );
+
+ watch(
+ () => props.response,
+ () => {
+ config.response = props.response;
+ },
+ { deep: true }
+ );
+
+ watch(
+ () => props.table,
+ () => {
+ config.table = props.table;
+ },
+ { deep: true }
+ );
+
+ watch(
+ () => props.locale,
+ () => {
+ config.locale = props.locale;
+ }
+ );
+
+ watch(
+ () => props.keepAlive,
+ () => {
+ config.keepAlive = props.keepAlive;
+ }
+ );
+
+ return () => slots.default?.();
+ }
+});
diff --git a/guns-front-project/src/components/layout/props.js b/guns-front-project/src/components/layout/props.js
new file mode 100644
index 00000000..e69a9745
--- /dev/null
+++ b/guns-front-project/src/components/layout/props.js
@@ -0,0 +1,161 @@
+export default {
+ // 菜单数据
+ menus: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ // 页签数据
+ tabs: {
+ type: Array,
+ default: () => {
+ return [];
+ }
+ },
+ // 是否折叠侧栏菜单
+ collapse: Boolean,
+ // 是否折叠侧栏一级菜单
+ sideNavCollapse: Boolean,
+ // 内容区域是否全屏
+ bodyFullscreen: Boolean,
+ // 是否显示侧栏折叠按钮
+ showCollapse: {
+ type: Boolean,
+ default: true
+ },
+ // 是否显示刷新按钮
+ showRefresh: {
+ type: Boolean,
+ default: false
+ },
+ // 是否显示面包屑导航
+ showBreadcrumb: {
+ type: Boolean,
+ default: true
+ },
+ // 是否显示全局页脚
+ showFooter: Boolean,
+ // 是否需要返回顶部组件
+ showBackTop: {
+ type: Boolean,
+ default: true
+ },
+ // 顶栏风格, light | dark | primary
+ headStyle: {
+ type: String,
+ default: 'light',
+ validator: (value) => {
+ return ['light', 'dark', 'primary'].includes(value);
+ }
+ },
+ // 侧栏风格, light | dark
+ sideStyle: {
+ type: String,
+ default: 'dark',
+ validator: (value) => {
+ return ['light', 'dark'].includes(value);
+ }
+ },
+ // 布局风格, side | mix
+ layoutStyle: {
+ type: String,
+ default: 'side',
+ validator: (value) => {
+ return ['side', 'top', 'mix'].includes(value);
+ }
+ },
+ // 侧栏菜单模式, default | mix
+ sideMenuStyle: {
+ type: String,
+ default: 'default',
+ validator: (value) => {
+ return ['default', 'mix'].includes(value);
+ }
+ },
+ // 是否固定主体
+ fixedBody: Boolean,
+ // 内容区域宽度是否铺满
+ bodyFull: {
+ type: Boolean,
+ default: true
+ },
+ // logo 宽度是否自适应
+ logoAutoSize: Boolean,
+ // 侧栏是否只保持一个子菜单展开
+ sideUniqueOpen: {
+ type: Boolean,
+ default: true
+ },
+ // 菜单缩进量
+ inlineIndent: {
+ type: Number,
+ default: 16
+ },
+ // 面包屑导航分隔符
+ breadcrumbSeparator: {
+ type: String,
+ default: '/'
+ },
+ // 返回顶部可见的滚动高度
+ backTopVisibilityHeight: {
+ type: Number,
+ default: 200
+ },
+ // 内容区域全屏时是否不显示页签栏
+ contentFullscreen: Boolean,
+ // 是否按返回键退出内容区域全屏
+ fullscreenExitOnEsc: Boolean,
+ // 是否再次点击选中页签刷新
+ clickReload: Boolean,
+ // 项目名
+ projectName: String,
+ // 主页标题
+ homeTitle: String,
+ // 主页路由的 path
+ homePath: {
+ type: String,
+ default: '/'
+ },
+ // 外层布局的路由地址
+ layoutPath: {
+ type: String,
+ default: '/'
+ },
+ // 刷新路由的 path
+ redirectPath: {
+ type: String,
+ default: '/redirect/'
+ },
+ // 不显示全局页脚的路由
+ hideFooters: Array,
+ // 不显示侧栏的路由
+ hideSidebars: Array,
+ // 同路由不同参数可重复打开页签的路由地址
+ repeatableTabs: Array,
+ // 国际化的当前语言
+ locale: String,
+ // 国际化的自定义菜单标题方法
+ i18n: Function,
+ // 侧栏默认展开的菜单 key
+ sideDefaultOpeneds: Array,
+ // 固定主体时切换路由自动滚动到顶部
+ autoScrollTop: {
+ type: Boolean,
+ default: true
+ },
+ // 是否开启页签右键菜单
+ tabContextMenu: {
+ type: Boolean,
+ default: true
+ },
+ // 是否支持页签拖动排序
+ tabSortable: Boolean,
+ // 是否显示页签左右滚动箭头
+ tabArrow: Boolean,
+ // 是否开启响应式
+ styleResponsive: {
+ type: Boolean,
+ default: true
+ }
+};
diff --git a/guns-front-project/src/components/layout/style/collapse.less b/guns-front-project/src/components/layout/style/collapse.less
new file mode 100644
index 00000000..47ff902b
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/collapse.less
@@ -0,0 +1,88 @@
+@import './themes/default.less';
+
+/* 折叠侧栏 */
+.guns-admin-collapse {
+ .guns-admin-logo > span {
+ display: none;
+ }
+
+ &:not(.guns-admin-side-mix) {
+ .guns-admin-logo,
+ .guns-admin-sidebar {
+ width: @sidebar-collapse-width;
+ }
+ }
+
+ .guns-admin-sidebar .ant-menu-inline-collapsed {
+ width: 100%;
+ }
+
+ .guns-admin-sidebar .ant-menu > .ant-menu-item,
+ .guns-admin-sidebar .ant-menu > .ant-menu-submenu > .ant-menu-submenu-title {
+ padding: 0 calc(calc(@sidebar-collapse-width - @menu-icon-size-lg) / 2) !important;
+ }
+
+ &.guns-admin-side-mix .guns-admin-sidebar-nav {
+ box-shadow: @sidebar-light-shadow;
+
+ & + .guns-admin-sidebar {
+ width: 0;
+ }
+ }
+
+ .guns-admin-sidebar + .guns-admin-body {
+ width: calc(100% - @sidebar-collapse-width);
+ }
+
+ &.guns-admin-side-mix:not(.guns-admin-nav-collapse) {
+ .guns-admin-sidebar + .guns-admin-body {
+ width: calc(100% - @sidebar-nav-width);
+ }
+ }
+}
+
+/* 折叠一级侧栏 */
+.guns-admin-nav-collapse.guns-admin-side-mix {
+ .guns-admin-logo {
+ width: @sidebar-collapse-width;
+ }
+
+ .guns-admin-sidebar-nav {
+ width: @sidebar-collapse-width;
+
+ & > .guns-admin-sidebar-nav-menu {
+ padding: @sidebar-collapse-nav-padding;
+
+ & > .ant-menu {
+ & > .ant-menu-item,
+ & > .ant-menu-submenu {
+ margin: @sidebar-collapse-nav-item-margin;
+ }
+
+ & > .ant-menu-item,
+ & > .ant-menu-submenu > .ant-menu-submenu-title {
+ padding: @sidebar-collapse-nav-item-padding !important;
+
+ & > .ant-menu-item-icon {
+ font-size: @menu-icon-size-lg;
+ }
+
+ & > .ant-menu-title-content > span {
+ margin: 0;
+ max-height: 0;
+ transform: scale(0);
+ visibility: hidden;
+ }
+ }
+ }
+ }
+ }
+
+ .guns-admin-body {
+ width: calc(100% - @sidebar-collapse-width);
+ }
+
+ &:not(.guns-admin-collapse) .guns-admin-sidebar + .guns-admin-body {
+ width: calc(100% - @sidebar-width);
+ }
+}
diff --git a/guns-front-project/src/components/layout/style/common.less b/guns-front-project/src/components/layout/style/common.less
new file mode 100644
index 00000000..99c1d8c3
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/common.less
@@ -0,0 +1,693 @@
+/** 全局样式及辅助类 */
+@import './themes/default.less';
+
+html {
+ overflow: auto;
+ overflow: overlay;
+}
+
+/* 辅助类 */
+body {
+ overflow-x: hidden;
+ position: relative;
+
+ &.guns-body-limit-width {
+ min-width: @body-max-width;
+
+ .ant-form-item .ant-form-item-label {
+ padding: 0;
+ line-height: inherit;
+ white-space: nowrap;
+ text-align: right;
+
+ & > label:after {
+ display: block;
+ }
+ }
+ }
+
+ // 标题
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6 {
+ margin: 0;
+ font-weight: normal;
+ font-size: @font-size-lg;
+ }
+
+ h5 {
+ font-size: (@font-size-lg + 2px);
+ }
+
+ h4 {
+ font-size: (@font-size-lg + 4px);
+ }
+
+ h3 {
+ font-size: (@font-size-lg + 6px);
+ }
+
+ h2 {
+ font-size: (@font-size-lg + 8px);
+ }
+
+ h1 {
+ font-size: (@font-size-lg + 10px);
+ }
+
+ // 文字
+ .guns-text {
+ color: @text-color;
+ }
+
+ .guns-text-heading {
+ color: @heading-color;
+ }
+
+ .guns-text-secondary {
+ color: @text-color-secondary;
+ }
+
+ .guns-text-placeholder {
+ color: @input-placeholder-color;
+ }
+
+ a.guns-text,
+ a.guns-text-heading,
+ a.guns-text-secondary,
+ a.guns-text-placeholder {
+ &:hover {
+ color: ~`colorPalette('@{primary-color}', 5) `;
+ }
+ }
+
+ .guns-text-primary {
+ color: @primary-color;
+ }
+
+ .guns-text-success,
+ .guns-text-success:hover {
+ color: @success-color;
+ }
+
+ a.guns-text-success:hover {
+ color: ~`colorPalette('@{success-color}', 5) `;
+ }
+
+ a.guns-text-success:active {
+ color: ~`colorPalette('@{success-color}', 7) `;
+ }
+
+ .guns-text-warning,
+ .guns-text-warning:hover {
+ color: @warning-color;
+ }
+
+ a.guns-text-warning:hover {
+ color: ~`colorPalette('@{warning-color}', 5) `;
+ }
+
+ a.guns-text-warning:active {
+ color: ~`colorPalette('@{warning-color}', 7) `;
+ }
+
+ .guns-text-danger,
+ .guns-text-danger:hover {
+ color: @error-color;
+ }
+
+ a.guns-text-danger:hover {
+ color: ~`colorPalette('@{error-color}', 5) `;
+ }
+
+ a.guns-text-danger:active {
+ color: ~`colorPalette('@{error-color}', 7) `;
+ }
+
+ .guns-text-info,
+ a.guns-text-info:hover,
+ a.guns-text-info:active {
+ color: @normal-color;
+ }
+
+ .guns-text-delete {
+ text-decoration: line-through;
+ }
+
+ .guns-text-small {
+ font-size: @font-size-sm !important;
+ }
+
+ // 背景和边框
+ .guns-bg-base {
+ background-color: @layout-body-background !important;
+ }
+
+ .guns-bg-primary {
+ background-color: @primary-color !important;
+ }
+
+ .guns-bg-success {
+ background-color: @success-color !important;
+ }
+
+ .guns-bg-warning {
+ background-color: @warning-color !important;
+ }
+
+ .guns-bg-danger {
+ background-color: @error-color !important;
+ }
+
+ .guns-bg-info {
+ background-color: @normal-color !important;
+ }
+
+ .guns-bg-white {
+ background-color: @component-background !important;
+ }
+
+ .guns-border-primary {
+ border-color: @primary-color !important;
+ }
+
+ .guns-border-success {
+ border-color: @success-color !important;
+ }
+
+ .guns-border-warning {
+ border-color: @warning-color !important;
+ }
+
+ .guns-border-danger {
+ border-color: @error-color !important;
+ }
+
+ .guns-border-info {
+ border-color: @normal-color !important;
+ }
+
+ .guns-border-base {
+ border-color: @border-color-base !important;
+ }
+
+ .guns-border-split {
+ border-color: @border-color-split !important;
+ }
+
+ // 浮动
+ .guns-pull-left {
+ float: left;
+ }
+
+ .guns-pull-right {
+ float: right;
+ }
+
+ .guns-clear {
+ clear: both;
+ }
+
+ .guns-clear-after:after {
+ content: '';
+ clear: both;
+ display: block;
+ }
+
+ // 对齐方式
+ .guns-text-center {
+ text-align: center;
+ }
+
+ .guns-text-left {
+ text-align: left;
+ }
+
+ .guns-text-right {
+ text-align: right;
+ }
+
+ .guns-fluid {
+ width: 100% !important;
+ }
+
+ .guns-block {
+ display: block;
+ }
+
+ .guns-inline-block {
+ display: inline-block;
+ }
+
+ .guns-inline {
+ display: inline;
+ }
+
+ // 占位元素
+ em:not([class]) {
+ padding: 0 0.5em;
+ font-style: normal;
+ }
+
+ s:not([class]) {
+ padding: 0 0.125em;
+ font-style: normal;
+ }
+}
+
+/* 文字省略 */
+.guns-elip {
+ overflow: hidden;
+ white-space: nowrap;
+ word-break: break-all;
+ text-overflow: ellipsis;
+}
+
+/* 单元格 */
+.guns-cell {
+ display: flex;
+
+ &:not(.guns-cell-align-top) {
+ align-items: center;
+ }
+
+ &.guns-cell-align-bottom {
+ align-items: flex-end;
+ }
+
+ & > .guns-cell-content {
+ flex: 1;
+ box-sizing: border-box;
+ }
+
+ & > * + .guns-cell-content {
+ padding-left: @padding-sm;
+ }
+
+ .guns-cell-title {
+ color: @heading-color;
+ font-size: @font-size-base + 1px;
+ }
+
+ .guns-cell-desc {
+ color: @text-color-secondary;
+ font-size: @font-size-base - 1px;
+ margin-top: (@padding-xs / 2);
+ }
+}
+
+/* 页面容器 */
+.guns-body {
+ padding: @padding-md;
+
+ &.guns-body-card {
+ padding-bottom: 0;
+
+ .ant-card {
+ margin-bottom: @padding-md;
+ }
+ }
+}
+
+/* 底部工具栏 */
+.guns-bottom-tool {
+ position: fixed;
+ bottom: 0;
+ right: 0;
+ width: 100%;
+ display: flex;
+ align-items: center;
+ box-shadow: @shadow-1-up;
+ padding: @padding-xs @padding-md;
+ background: @component-background;
+ transition: padding-left @sidebar-transition-anim;
+ z-index: (@layout-z-index - 1);
+
+ .guns-bottom-tool-actions {
+ flex: 1;
+ text-align: right;
+ }
+}
+
+@media screen and (min-width: 768px) {
+ .guns-admin-sidebar + .guns-admin-body .guns-bottom-tool {
+ padding-left: (@sidebar-width + @padding-md);
+ }
+
+ .guns-layout-collapse .guns-admin-sidebar + .guns-admin-body .guns-bottom-tool {
+ padding-left: (@sidebar-collapse-width + @padding-md);
+ }
+}
+
+/* 静态表格 */
+.guns-table {
+ width: 100%;
+ border-spacing: 0;
+ border-collapse: collapse;
+ background: @component-background;
+
+ thead tr {
+ th,
+ td {
+ background: @table-header-bg;
+ transition: background-color 0.25s ease;
+ }
+ }
+
+ tbody tr {
+ th,
+ td {
+ background: @component-background;
+ transition: background-color 0.25s ease;
+ }
+ }
+
+ tbody tr:hover,
+ &.guns-table-stripe tr:nth-child(even) {
+ th,
+ td {
+ background: @table-row-hover-bg;
+ }
+ }
+
+ tbody tr.guns-table-active {
+ th,
+ td {
+ background: @table-selected-row-bg;
+ }
+ }
+
+ th,
+ td {
+ font-weight: normal;
+ line-height: 23px;
+ padding: 12px 10px;
+ border-width: 0;
+ border-style: solid;
+ border-color: @table-border-color;
+ border-bottom-width: 1px;
+ text-align: left;
+ }
+
+ th {
+ color: @table-header-color;
+ }
+
+ // 显示边框
+ &.guns-table-border {
+ th,
+ td {
+ border-width: 1px;
+ }
+ }
+
+ // 尺寸控制
+ &.guns-table-medium {
+ th,
+ td {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ }
+ }
+
+ &.guns-table-small {
+ th,
+ td {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ font-size: 12px;
+ }
+ }
+
+ &.guns-table-mini {
+ th,
+ td {
+ padding-top: 6px;
+ padding-bottom: 6px;
+ font-size: 12px;
+ }
+ }
+
+ // 表头分割线
+ &:not(.guns-table-border) thead > tr > th {
+ position: relative;
+
+ &:not(:last-child):before {
+ position: absolute;
+ top: 50%;
+ right: 0;
+ width: 1px;
+ height: 1.6em;
+ background-color: @table-header-cell-split-color;
+ transform: translateY(-50%);
+ transition: background-color 0.3s;
+ content: '';
+ }
+ }
+}
+
+/* antd 组件样式调整 */
+body {
+ // 分割线
+ .ant-divider {
+ margin: 0;
+ }
+
+ // modal 标题高度
+ .ant-modal-header {
+ padding: @modal-header-padding;
+
+ & > .ant-modal-title > div {
+ padding-right: calc(@modal-close-x-width - 20px);
+ }
+ }
+
+ .ant-modal-close-x {
+ width: @modal-close-x-width;
+ height: @modal-close-x-height;
+ line-height: @modal-close-x-height;
+ }
+}
+
+// 按钮加图标减少间距
+.guns-btn-icon:not(.ant-btn-sm) {
+ padding-left: (@padding-sm - 2px);
+ padding-right: (@padding-sm - 2px);
+
+ & > .anticon + span {
+ margin-left: @margin-xss;
+ margin-right: 2px;
+ }
+}
+
+// 表单详情
+.guns-form-detail .ant-form-item {
+ margin-bottom: 0;
+}
+
+@media (max-width: 575px) {
+ .guns-form-detail .ant-form-item-label {
+ line-height: @input-height-lg - 0.0001px;
+ padding-bottom: 0;
+
+ & > label:after {
+ display: inherit;
+ }
+ }
+}
+
+// 级联选择器增加高度
+.guns-pop-wrap-higher .ant-cascader-menu {
+ height: 280px;
+}
+
+/* 加载框 */
+.ant-message-notice.guns-message-loading {
+ animation: none !important;
+ transition: opacity 0.2s, margin 0.3s;
+ position: relative;
+
+ & > .ant-message-notice-content {
+ &::before {
+ content: '';
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ }
+
+ & > .ant-message-loading {
+ position: relative;
+ z-index: 1;
+ }
+ }
+
+ &.ant-move-up-enter.ant-move-up-enter-active,
+ &.ant-move-up-leave.ant-move-up-leave-active {
+ margin-top: -58px;
+ opacity: 0;
+ }
+
+ // 遮罩
+ &.guns-message-mask > .ant-message-notice-content {
+ box-shadow: @shadow-2, 0 0 0 1000vw @modal-mask-bg;
+ }
+
+ // 居中
+ &.guns-message-center {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ }
+}
+
+// 虚拟滚动条样式优化
+.rc-virtual-list-scrollbar-thumb,
+.ant-select-tree-list-scrollbar-thumb {
+ background: @scrollbar-thumb-color !important;
+
+ &:hover {
+ background: @scrollbar-thumb-hover-color !important;
+ }
+}
+
+// table 有滚动条时加边框
+.ant-table-bordered div.ant-table-body {
+ &:before,
+ &:after {
+ content: '';
+ position: absolute;
+ background: @border-color-split;
+ z-index: 2;
+ }
+
+ &:before {
+ right: 0;
+ top: 0;
+ bottom: 0;
+ width: 1px;
+ }
+
+ &:after {
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: 1px;
+ }
+}
+
+/* echarts 提示框圆点 */
+.guns-chart-dot {
+ width: 10px;
+ height: 10px;
+ margin-right: 5px;
+ border-radius: 50%;
+ display: inline-block;
+ background: #5b8ff9;
+}
+
+.echarts > div {
+ max-width: 100%;
+ overflow: hidden;
+}
+
+/* 滚动条 */
+::-webkit-scrollbar {
+ width: @scrollbar-thumb-size;
+ height: @scrollbar-thumb-size;
+}
+
+::-webkit-scrollbar-thumb {
+ border-radius: (@scrollbar-thumb-size / 2);
+ border: @scrollbar-thumb-border-size solid transparent;
+ background-color: @scrollbar-thumb-color;
+ background-clip: padding-box;
+
+ &:hover {
+ background-color: @scrollbar-thumb-hover-color;
+ }
+}
+
+::-webkit-scrollbar-track {
+ background: @scrollbar-track-color;
+}
+
+::-webkit-scrollbar-corner {
+ background: transparent;
+}
+
+// 小型滚动条
+.guns-scrollbar-mini {
+ &::-webkit-scrollbar {
+ width: @scrollbar-mini-thumb-size;
+ height: @scrollbar-mini-thumb-size;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ border-radius: (@scrollbar-mini-thumb-size / 2);
+ }
+}
+
+// 隐藏滚动条
+.guns-scrollbar-hide::-webkit-scrollbar {
+ width: 0;
+ height: 0;
+}
+
+.guns-scrollbar-hide,
+.guns-scrollbar-hover {
+ overflow: auto;
+ overflow: overlay;
+}
+
+// 鼠标滑入才显示滚动条
+@media (hover: hover) and (pointer: fine) {
+ .guns-scrollbar-hover {
+ &::-webkit-scrollbar,
+ &.guns-scrollbar-mini::-webkit-scrollbar {
+ width: 0;
+ height: 0;
+ }
+
+ &:hover {
+ &::-webkit-scrollbar {
+ width: @scrollbar-thumb-size;
+ height: @scrollbar-thumb-size;
+ }
+
+ &.guns-scrollbar-mini::-webkit-scrollbar {
+ width: @scrollbar-mini-thumb-size;
+ height: @scrollbar-mini-thumb-size;
+ }
+ }
+ }
+}
+
+// 小尺寸设备
+@media only screen and (max-width: 768px) {
+ ::-webkit-scrollbar,
+ .guns-scrollbar-hover:hover::-webkit-scrollbar {
+ width: @scrollbar-mini-thumb-size;
+ height: @scrollbar-mini-thumb-size;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ border-radius: (@scrollbar-mini-thumb-size / 2);
+ }
+}
+
+// 兼容火狐浏览器
+* {
+ scrollbar-width: thin;
+ scrollbar-color: @scrollbar-thumb-color transparent;
+}
diff --git a/guns-front-project/src/components/layout/style/display.less b/guns-front-project/src/components/layout/style/display.less
new file mode 100644
index 00000000..1fa542c0
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/display.less
@@ -0,0 +1,103 @@
+@import './themes/default.less';
+
+@media only screen and (max-width: @screen-xs-max) {
+ .hidden-xs-only {
+ display: none !important;
+ }
+}
+
+@media only screen and (min-width: @screen-sm-min) {
+ .hidden-sm-and-up {
+ display: none !important;
+ }
+}
+
+@media only screen and (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ .hidden-sm-only {
+ display: none !important;
+ }
+}
+
+@media only screen and (max-width: @screen-sm-max) {
+ .hidden-sm-and-down {
+ display: none !important;
+ }
+}
+
+@media only screen and (min-width: @screen-md-min) {
+ .hidden-md-and-up {
+ display: none !important;
+ }
+}
+
+@media only screen and (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ .hidden-md-only {
+ display: none !important;
+ }
+}
+
+@media only screen and (max-width: @screen-md-max) {
+ .hidden-md-and-down {
+ display: none !important;
+ }
+}
+
+@media only screen and (min-width: @screen-lg-min) {
+ .hidden-lg-and-up {
+ display: none !important;
+ }
+}
+
+@media only screen and (min-width: @screen-lg-min) and (max-width: @screen-lg-max) {
+ .hidden-lg-only {
+ display: none !important;
+ }
+}
+
+@media only screen and (max-width: @screen-lg-max) {
+ .hidden-lg-and-down {
+ display: none !important;
+ }
+}
+
+@media only screen and (min-width: @screen-xl-min) {
+ .hidden-xl-and-up {
+ display: none !important;
+ }
+}
+
+@media only screen and (min-width: @screen-xl-min) and (max-width: @screen-xl-max) {
+ .hidden-xl-only {
+ display: none !important;
+ }
+}
+
+@media only screen and (max-width: @screen-xl-max) {
+ .hidden-xl-and-down {
+ display: none !important;
+ }
+}
+
+@media only screen and (min-width: @screen-xxl-min) {
+ .hidden-xxl-and-up {
+ display: none !important;
+ }
+}
+
+@media only screen and (min-width: @screen-xxl-min) and (max-width: @screen-xxl-max) {
+ .hidden-xxl-only {
+ display: none !important;
+ }
+}
+
+@media only screen and (max-width: @screen-xxl-max) {
+ .hidden-xxl-and-down {
+ display: none !important;
+ }
+}
+
+@media only screen and (min-width: @screen-xxxl-min) {
+ .hidden-xxxl-only {
+ display: none !important;
+ }
+}
diff --git a/guns-front-project/src/components/layout/style/header.less b/guns-front-project/src/components/layout/style/header.less
new file mode 100644
index 00000000..c384388d
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/header.less
@@ -0,0 +1,156 @@
+@import './themes/default.less';
+
+/* header */
+.guns-admin-header {
+ display: flex;
+ align-items: center;
+ height: @header-height;
+ line-height: @header-height;
+ box-shadow: @header-light-shadow;
+ background: @header-light-background;
+ z-index: calc(@layout-z-index + 2);
+ box-sizing: border-box;
+ position: relative;
+
+ // logo
+ .guns-admin-logo {
+ width: @sidebar-width;
+ height: @header-height;
+ box-shadow: @logo-light-shadow;
+ background: @header-light-background;
+ transition: @sidebar-transition;
+ font-weight: @logo-font-weight;
+ font-family: @logo-font-family;
+ font-size: @logo-font-size;
+ color: @logo-light-color;
+ white-space: nowrap;
+ position: relative;
+ overflow: hidden;
+ flex-shrink: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+
+ & > img {
+ width: @logo-size;
+ height: @logo-size;
+
+ & + span {
+ margin-left: @padding-sm;
+ }
+ }
+ }
+
+ .ant-menu-title-content {
+ font-size: 15px;
+ }
+
+ .guns-admin-header-line {
+ border-left: 1px solid #ddd;
+ position: relative;
+ display: inline-block;
+ height: 1rem;
+ margin: 0 10px;
+ vertical-align: middle;
+ border-top: 0;
+ }
+
+ // 面包屑
+ .guns-admin-breadcrumb {
+ flex-shrink: 0;
+ }
+
+ // nav
+ .guns-admin-header-nav {
+ flex: 1;
+ overflow: hidden;
+
+ & > .ant-menu {
+ border: none;
+ background: none;
+ line-height: @header-height;
+
+ .ant-menu-item,
+ .ant-menu-submenu {
+ top: auto;
+ margin-top: 0;
+ }
+ }
+ }
+
+ // 操作按钮
+ .guns-admin-header-tool {
+ display: flex;
+ flex-shrink: 0;
+ padding: 0 @padding-sm;
+
+ .guns-admin-header-tool-item {
+ padding: 0 @padding-sm;
+ font-size: @font-size-base;
+ transition:
+ color 0.2s,
+ background-color 0.2s;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+
+ &:hover {
+ background: @header-tool-hover-bg;
+ }
+
+ .anticon-menu-fold,
+ .anticon-menu-unfold,
+ .anticon-more,
+ .anticon-bell,
+ .anticon-fullscreen,
+ .anticon-fullscreen-exit {
+ transform: scale(1.15);
+ }
+ }
+ .guns-admin-header-tool-title {
+ padding: 0 @padding-sm;
+ font-size: @font-size-base;
+ transition:
+ color 0.2s,
+ background-color 0.2s;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+
+ .anticon-menu-fold,
+ .anticon-menu-unfold,
+ .anticon-more,
+ .anticon-bell,
+ .anticon-fullscreen,
+ .anticon-fullscreen-exit {
+ transform: scale(1.15);
+ }
+ .menu-title {
+ margin-left: 10px;
+ font-size: 18px;
+ font-style: normal;
+ font-weight: 600;
+ line-height: normal;
+ }
+ }
+ }
+
+ // 用户信息
+ .guns-admin-header-avatar {
+ display: flex;
+ align-items: center;
+ position: relative;
+ height: 100%;
+
+ .ant-avatar {
+ width: @header-avatar-size;
+ height: @header-avatar-size;
+ line-height: @header-avatar-size;
+
+ & + span {
+ padding-left: @padding-xs;
+ }
+ }
+ }
+}
diff --git a/guns-front-project/src/components/layout/style/index.less b/guns-front-project/src/components/layout/style/index.less
new file mode 100644
index 00000000..dd6efab2
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/index.less
@@ -0,0 +1,13 @@
+@import './layout.less';
+@import './header.less';
+@import './sidebar.less';
+@import './tabs.less';
+@import './collapse.less';
+@import './layout-style.less';
+@import './layout-theme.less';
+@import './tab-style.less';
+@import './layout-mobile.less';
+@import './scrollbar.less';
+@import './nprogress.less';
+@import './common.less';
+@import './display.less';
diff --git a/guns-front-project/src/components/layout/style/layout-mobile.less b/guns-front-project/src/components/layout/style/layout-mobile.less
new file mode 100644
index 00000000..43d8ef20
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/layout-mobile.less
@@ -0,0 +1,63 @@
+@import './themes/default.less';
+
+/* 小屏幕样式 */
+@media screen and (max-width: 768px) {
+ .guns-admin-responsive {
+ .guns-admin-logo,
+ .guns-admin-sidebar {
+ position: fixed !important;
+ left: 0 !important;
+ width: @sidebar-width !important;
+ z-index: calc(@sidebar-fixed-z-index + 1) !important;
+ }
+
+ .guns-admin-sidebar {
+ top: @header-height !important;
+ }
+
+ .guns-admin-logo > span {
+ display: inline !important;
+ }
+
+ .guns-admin-body,
+ .guns-admin-header {
+ padding-left: 0 !important;
+ width: 100% !important;
+ }
+
+ .guns-admin-tabs {
+ left: 0 !important;
+ }
+
+ .guns-admin-breadcrumb,
+ .guns-admin-sidebar-nav {
+ display: none;
+ }
+
+ &:not(.guns-admin-collapse) {
+ .guns-admin-shade {
+ left: @sidebar-width;
+ background: @modal-mask-bg;
+ visibility: visible;
+ }
+
+ .guns-admin-header {
+ z-index: auto;
+ }
+ }
+
+ &.guns-admin-collapse {
+ .guns-admin-sidebar,
+ .guns-admin-logo {
+ left: calc(0px - @sidebar-width) !important;
+ box-shadow: none !important;
+ }
+ }
+
+ &.guns-admin-show-tabs:not(.guns-admin-tab-card):not(.guns-admin-head-dark) {
+ .guns-admin-header {
+ box-shadow: 0 -1px 0 @border-color-split inset !important;
+ }
+ }
+ }
+}
diff --git a/guns-front-project/src/components/layout/style/layout-style.less b/guns-front-project/src/components/layout/style/layout-style.less
new file mode 100644
index 00000000..39a90a88
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/layout-style.less
@@ -0,0 +1,103 @@
+/* 主题风格 */
+@import './themes/default.less';
+
+/* 固定主体 */
+.guns-admin-fixed-body {
+ .guns-admin-content {
+ height: calc(100vh - @header-height);
+ overflow-x: hidden;
+ overflow-y: auto;
+ }
+
+ .guns-admin-sidebar,
+ .guns-admin-sidebar-nav {
+ height: calc(100vh - @header-height);
+ }
+
+ &.guns-admin-show-tabs {
+ .guns-admin-content {
+ height: calc(100vh - @header-height - @tabs-height);
+ }
+
+ &.guns-admin-tab-card .guns-admin-content {
+ height: calc(100vh - @header-height - @tabs-height - @tabs-card-padding);
+ }
+ }
+}
+
+/* 全屏内容区域 */
+.guns-admin-body-fullscreen {
+ padding-top: 0 !important;
+
+ .guns-admin-header,
+ .guns-admin-sidebar,
+ .guns-admin-sidebar-nav {
+ display: none;
+ }
+
+ .guns-admin-body {
+ min-height: 100vh;
+ padding-left: 0 !important;
+ width: 100% !important;
+ }
+
+ .guns-admin-tabs {
+ left: 0 !important;
+ top: 0 !important;
+ }
+
+ &.guns-admin-fixed-body {
+ .guns-admin-content {
+ height: 100vh !important;
+ }
+
+ &.guns-admin-show-tabs:not(.guns-admin-content-fullscreen) {
+ .guns-admin-content {
+ height: calc(100vh - @tabs-height) !important;
+ }
+
+ &.guns-admin-tab-card .guns-admin-content {
+ height: calc(100vh - @tabs-height - @tabs-card-padding) !important;
+ }
+ }
+ }
+
+ &.guns-admin-content-fullscreen {
+ .guns-admin-body {
+ padding-top: 0 !important;
+ }
+
+ .guns-admin-tabs {
+ display: none;
+ }
+ }
+}
+
+/* logo 宽度自适应 */
+.guns-admin-logo-auto.guns-admin-layout {
+ .guns-admin-logo {
+ width: auto;
+ padding: 0 @padding-sm 0 @padding-lg;
+ color: @logo-light-color;
+ background: none;
+ box-shadow: none;
+ transition: none;
+
+ & > span {
+ display: inline;
+ }
+
+ & + .guns-admin-header-nav {
+ margin-left: @padding-sm;
+ }
+ }
+
+ .guns-admin-sidebar,
+ .guns-admin-sidebar-nav {
+ z-index: calc(@layout-z-index + 1);
+ }
+
+ &.guns-admin-head-dark .guns-admin-logo {
+ color: @logo-dark-color;
+ }
+}
diff --git a/guns-front-project/src/components/layout/style/layout-theme.less b/guns-front-project/src/components/layout/style/layout-theme.less
new file mode 100644
index 00000000..e4210f3d
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/layout-theme.less
@@ -0,0 +1,127 @@
+@import './themes/default.less';
+
+/* 暗色顶栏 */
+.guns-admin-head-dark .guns-admin-header {
+ color: @menu-dark-color;
+ box-shadow: @header-dark-shadow;
+ background: @header-background;
+
+ .guns-admin-header-tool .guns-admin-header-tool-item:hover {
+ color: @menu-dark-selected-item-text-color;
+ background: @header-dark-tool-hover-bg;
+ }
+
+ .ant-breadcrumb,
+ .ant-breadcrumb-separator,
+ .ant-breadcrumb a {
+ color: @menu-dark-color;
+ }
+
+ .ant-breadcrumb a:hover {
+ color: @menu-dark-selected-item-text-color;
+ }
+
+ .ant-breadcrumb > span:last-child {
+ color: @menu-dark-color;
+ }
+
+ // 主色顶栏
+ &.guns-admin-header-primary {
+ background-color: @primary-color;
+ }
+
+ // 主色顶栏 menu
+ .ant-menu-light {
+ color: @menu-dark-color;
+
+ & > .ant-menu-item:hover,
+ & > .ant-menu-item-active,
+ & > .ant-menu-item-selected,
+ & > .ant-menu-submenu-active,
+ & > .ant-menu-submenu-open,
+ & > .ant-menu-submenu-selected,
+ & > .ant-menu-submenu > .ant-menu-submenu-title:hover {
+ color: @menu-dark-selected-item-text-color;
+ }
+
+ & > .ant-menu-item:hover:after,
+ & > .ant-menu-submenu:hover:after,
+ & > .ant-menu-item-active:after,
+ & > .ant-menu-submenu-active:after,
+ & > .ant-menu-item-open:after,
+ & > .ant-menu-submenu-open:after,
+ & > .ant-menu-item-selected:after,
+ & > .ant-menu-submenu-selected:after {
+ border-bottom-color: @menu-dark-selected-item-text-color;
+ }
+ .menu-title, .company-name {
+ color: @menu-dark-selected-item-text-color;
+ }
+ }
+}
+.guns-admin-side-dark .guns-admin-sidebar > .guns-admin-sidebar-tool-item .guns-admin-sidebar-tool-item-icon {
+ color: @menu-dark-selected-item-text-color;
+}
+
+.ant-menu-horizontal > .ant-menu-item::after,
+.ant-menu-horizontal > .ant-menu-submenu::after {
+ right: 2px !important;
+ left: 2px !important;
+}
+
+.ant-menu-vertical > .ant-menu-item {
+ height: 48px;
+ line-height: 48px;
+}
+
+/* 暗色侧栏 */
+.guns-admin-side-dark {
+ .guns-admin-logo {
+ color: @logo-dark-color;
+ box-shadow: @logo-dark-shadow;
+ background: @sidebar-background;
+ }
+
+ .guns-admin-sidebar {
+ box-shadow: @sidebar-dark-shadow;
+ background: @sidebar-background;
+ }
+
+ &.guns-admin-side-mix {
+ &:not(.guns-admin-collapse) {
+ .guns-admin-logo,
+ .guns-admin-sidebar-nav {
+ box-shadow: none;
+ }
+ }
+
+ .guns-admin-sidebar-nav {
+ background: @sidebar-background;
+
+ & > .guns-admin-sidebar-nav-menu > .ant-menu {
+ & > .ant-menu-item:not(.ant-menu-item-selected):hover {
+ background: @header-dark-tool-hover-bg;
+ }
+
+ & > .ant-menu-submenu {
+ &:not(.ant-menu-submenu-selected) > .ant-menu-submenu-title:hover {
+ background: @header-dark-tool-hover-bg;
+ }
+
+ &.ant-menu-submenu-selected > .ant-menu-submenu-title {
+ background: @primary-color;
+ color: @menu-dark-selected-item-text-color;
+ }
+ }
+ }
+
+ .guns-admin-sidebar-nav-tool-item {
+ color: @menu-dark-color;
+
+ &:hover {
+ color: @menu-dark-selected-item-text-color;
+ }
+ }
+ }
+ }
+}
diff --git a/guns-front-project/src/components/layout/style/layout.less b/guns-front-project/src/components/layout/style/layout.less
new file mode 100644
index 00000000..b02ee86d
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/layout.less
@@ -0,0 +1,90 @@
+@import './themes/default.less';
+
+.guns-admin-layout {
+ background: @layout-body-background;
+}
+
+/* Main */
+.guns-admin-main {
+ display: flex;
+}
+
+/* 主体部分 */
+.guns-admin-body {
+ display: flex;
+ flex-direction: column;
+ min-height: calc(100vh - @header-height);
+ box-sizing: border-box;
+ width: 100%;
+
+ .guns-admin-content {
+ flex: auto;
+ display: flex;
+ flex-direction: column;
+ box-sizing: border-box;
+
+ .guns-admin-content-view {
+ flex: auto;
+ box-sizing: border-box;
+ }
+ }
+}
+
+/* 主体的 iframe 组件 */
+.guns-admin-iframe {
+ width: 100%;
+ height: calc(100vh - @header-height);
+ box-sizing: border-box;
+ display: block;
+ border: none;
+}
+
+.guns-admin-show-tabs .guns-admin-iframe {
+ height: calc(100vh - @header-height - @tabs-height);
+}
+
+.guns-admin-fixed-body.guns-admin-show-tabs.guns-admin-tab-card {
+ .guns-admin-iframe {
+ height: calc(100vh - @header-height - @tabs-height - @tabs-card-padding);
+ }
+}
+
+/* 小屏幕遮罩层 */
+.guns-admin-shade {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: @sidebar-fixed-z-index;
+ transition: background-color @sidebar-transition-anim,
+ left @sidebar-transition-anim;
+ visibility: hidden;
+}
+
+/* 返回顶部 */
+.guns-admin-layout > .ant-back-top {
+ right: @layout-back-top-right;
+ bottom: @layout-back-top-bottom;
+}
+
+/* 色弱模式 */
+.guns-admin-weak {
+ filter: invert(0.8);
+ background: @heading-color;
+ overflow-x: hidden;
+}
+
+/* 切换布局时关闭过渡效果 */
+body.guns-transition-disabled {
+ .guns-admin-header,
+ .guns-admin-logo,
+ .guns-admin-sidebar,
+ .guns-admin-sidebar-nav,
+ .guns-admin-body,
+ .guns-admin-tabs,
+ .guns-admin-content,
+ .guns-modal-inner {
+ transition: none !important;
+ }
+}
diff --git a/guns-front-project/src/components/layout/style/nprogress.less b/guns-front-project/src/components/layout/style/nprogress.less
new file mode 100644
index 00000000..3c3681e4
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/nprogress.less
@@ -0,0 +1,84 @@
+/* Make clicks pass-through */
+@import './themes/default.less';
+
+#nprogress {
+ pointer-events: none;
+}
+
+#nprogress .bar {
+ background: @primary-color;
+
+ position: fixed;
+ z-index: 1031;
+ top: 0;
+ left: 0;
+
+ width: 100%;
+ height: 2px;
+}
+
+/* Fancy blur effect */
+#nprogress .peg {
+ display: block;
+ position: absolute;
+ right: 0;
+ width: 100px;
+ height: 100%;
+ box-shadow: 0 0 10px @primary-color, 0 0 5px @primary-color;
+ opacity: 1;
+
+ -webkit-transform: rotate(3deg) translate(0px, -4px);
+ -ms-transform: rotate(3deg) translate(0px, -4px);
+ transform: rotate(3deg) translate(0px, -4px);
+}
+
+/* Remove these to get rid of the spinner */
+#nprogress .spinner {
+ display: block;
+ position: fixed;
+ z-index: 1031;
+ top: 15px;
+ right: 15px;
+}
+
+#nprogress .spinner-icon {
+ width: 18px;
+ height: 18px;
+ box-sizing: border-box;
+
+ border: solid 2px transparent;
+ border-top-color: @primary-color;
+ border-left-color: @primary-color;
+ border-radius: 50%;
+
+ -webkit-animation: nprogress-spinner 400ms linear infinite;
+ animation: nprogress-spinner 400ms linear infinite;
+}
+
+.nprogress-custom-parent {
+ overflow: hidden;
+ position: relative;
+}
+
+.nprogress-custom-parent #nprogress .spinner,
+.nprogress-custom-parent #nprogress .bar {
+ position: absolute;
+}
+
+@-webkit-keyframes nprogress-spinner {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(360deg);
+ }
+}
+
+@keyframes nprogress-spinner {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
diff --git a/guns-front-project/src/components/layout/style/scrollbar.less b/guns-front-project/src/components/layout/style/scrollbar.less
new file mode 100644
index 00000000..5a9d32c3
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/scrollbar.less
@@ -0,0 +1,77 @@
+@import './themes/default.less';
+
+/* 侧栏滚动条样式 */
+.guns-admin-sidebar,
+.guns-admin-sidebar > .guns-admin-sidebar-menus,
+.guns-admin-sidebar-nav,
+.guns-admin-sidebar-nav > .guns-admin-sidebar-nav-menu,
+.ant-menu-submenu-popup > .ant-menu.ant-menu-vertical {
+ overflow-y: overlay;
+ scrollbar-width: thin;
+ scrollbar-color: @sidebar-light-scrollbar-thumb-color transparent;
+
+ &::-webkit-scrollbar {
+ width: @scrollbar-mini-thumb-size;
+ height: @scrollbar-mini-thumb-size;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ border-radius: (@scrollbar-mini-thumb-size / 2);
+ border: @scrollbar-thumb-border-size solid transparent;
+ background-color: @sidebar-light-scrollbar-thumb-color;
+ background-clip: padding-box;
+
+ &:hover {
+ background-color: @sidebar-light-scrollbar-thumb-hover-color;
+ }
+ }
+
+ &::-webkit-scrollbar-track {
+ background: @sidebar-light-scrollbar-track-color;
+ }
+
+ &::-webkit-scrollbar-corner {
+ background: transparent;
+ }
+}
+
+@media (hover: hover) and (pointer: fine) {
+ .guns-admin-sidebar,
+ .guns-admin-sidebar > .guns-admin-sidebar-menus,
+ .guns-admin-sidebar-nav,
+ .guns-admin-sidebar-nav > .guns-admin-sidebar-nav-menu,
+ .ant-menu-submenu-popup > .ant-menu.ant-menu-vertical {
+ &::-webkit-scrollbar {
+ width: 0;
+ height: 0;
+ }
+
+ &:hover::-webkit-scrollbar {
+ width: 8px;
+ height: 8px;
+ }
+ }
+}
+
+/* 暗色侧栏滚动条样式 */
+.guns-admin-side-dark:not(.guns-admin-side-mix) > .guns-admin-sidebar,
+.guns-admin-side-dark:not(.guns-admin-side-mix)
+ .guns-admin-sidebar
+ > .guns-admin-sidebar-menus,
+.guns-admin-side-dark .guns-admin-sidebar-nav,
+.guns-admin-side-dark .guns-admin-sidebar-nav > .guns-admin-sidebar-nav-menu,
+.ant-menu-submenu-popup.ant-menu-dark > .ant-menu.ant-menu-vertical {
+ scrollbar-color: @sidebar-scrollbar-thumb-color transparent;
+
+ &::-webkit-scrollbar-thumb {
+ background-color: @sidebar-scrollbar-thumb-color;
+
+ &:hover {
+ background-color: @sidebar-scrollbar-thumb-hover-color;
+ }
+ }
+
+ &::-webkit-scrollbar-track {
+ background: @sidebar-scrollbar-track-color;
+ }
+}
diff --git a/guns-front-project/src/components/layout/style/sidebar.less b/guns-front-project/src/components/layout/style/sidebar.less
new file mode 100644
index 00000000..7b2a202f
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/sidebar.less
@@ -0,0 +1,240 @@
+@import './themes/default.less';
+
+/* 侧栏 */
+.guns-admin-sidebar {
+ flex-shrink: 0;
+ width: @sidebar-width;
+ min-height: calc(100vh - @header-height);
+ z-index: calc(@layout-z-index + 3);
+ background: @sidebar-light-background;
+ box-shadow: @sidebar-light-shadow;
+ transition: @sidebar-transition;
+ box-sizing: border-box;
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ overflow-x: hidden;
+ overflow-y: auto;
+
+ & > .guns-admin-sidebar-menus {
+ flex: auto;
+ overflow-x: hidden;
+ overflow-y: auto;
+
+ & > .ant-menu {
+ border: none;
+ background: none;
+ transition: none;
+
+ .ant-menu-item,
+ .ant-menu-submenu-title {
+ width: 100%;
+ }
+
+ .ant-menu-item-icon {
+ margin-top: 2px;
+ }
+
+ .ant-menu-submenu .ant-menu-sub {
+ transition: none;
+ }
+ }
+ }
+
+ & > .guns-admin-sidebar-tool-item {
+ height: 48px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ .guns-admin-sidebar-tool-item-icon {
+ font-size: 20px !important;
+ color: #000;
+ }
+ }
+
+ & + .guns-admin-body {
+ width: calc(100% - @sidebar-width);
+ transition: width @sidebar-transition-anim;
+ }
+}
+
+/* 双侧栏一级 */
+.guns-admin-sidebar-nav {
+ flex-shrink: 0;
+ width: @sidebar-nav-width;
+ min-height: calc(100vh - @header-height);
+ box-shadow: -1px 0 0 @border-color-split inset;
+ transition:
+ width @sidebar-transition-anim,
+ left @sidebar-transition-anim,
+ padding @sidebar-transition-anim,
+ box-shadow @sidebar-transition-anim;
+ z-index: calc(@layout-z-index + 3);
+ background: @component-background;
+ box-sizing: border-box;
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ overflow-x: hidden;
+ overflow-y: auto;
+
+ & > .guns-admin-sidebar-nav-menu {
+ flex: auto;
+ position: relative;
+ box-sizing: border-box;
+ padding: @sidebar-nav-padding;
+ transition: padding @sidebar-transition-anim;
+ overflow-x: hidden;
+ overflow-y: auto;
+
+ & > .ant-menu {
+ border: none;
+ background: none;
+ width: auto;
+
+ & > .ant-menu-item,
+ & > .ant-menu-submenu {
+ margin: @sidebar-nav-item-margin;
+ border-radius: @border-radius-base;
+ }
+
+ & > .ant-menu-item {
+ transition:
+ color 0.3s @ease-in-out,
+ background-color 0.3s @ease-in-out,
+ margin 0.3s @ease-in-out;
+ }
+
+ & > .ant-menu-submenu {
+ transition: margin 0.3s @ease-in-out;
+ }
+
+ & > .ant-menu-submenu > .ant-menu-submenu-title {
+ margin: 0;
+ }
+
+ & > .ant-menu-item,
+ & > .ant-menu-submenu > .ant-menu-submenu-title {
+ width: 100%;
+ height: auto;
+ line-height: 0;
+ display: block;
+ text-align: center;
+ border-radius: @border-radius-base;
+ padding: @sidebar-nav-item-padding !important;
+ transition:
+ color 0.3s @ease-in-out,
+ background-color 0.3s @ease-in-out,
+ padding 0.3s @ease-in-out;
+
+ & > .ant-menu-item-icon {
+ margin: 0;
+ line-height: 0;
+ font-size: @sidebar-nav-icon-font-size;
+ transition: font-size 0.3s @ease-in-out;
+ }
+
+ & > .ant-menu-title-content {
+ margin: 0;
+ opacity: 1;
+ display: block;
+ transition: none;
+ }
+
+ & > .ant-menu-title-content > span {
+ width: auto;
+ height: auto;
+ display: block;
+ line-height: 1;
+ font-size: @sidebar-nav-font-size;
+ max-height: @sidebar-nav-font-size;
+ margin: @sidebar-nav-item-title-margin;
+ transition:
+ transform 0.3s @ease-in-out,
+ max-height 0.3s @ease-in-out,
+ margin 0.3s @ease-in-out,
+ visibility 0.3s @ease-in-out;
+ overflow: hidden;
+ white-space: nowrap;
+ word-break: break-all;
+ text-overflow: ellipsis;
+ visibility: visible;
+ transform: scale(1);
+ max-width: none;
+ opacity: 1;
+ }
+
+ &:after {
+ display: none;
+ }
+ }
+
+ & > .ant-menu-item:not(.ant-menu-item-selected):hover {
+ background: @header-tool-hover-bg;
+ }
+
+ & > .ant-menu-submenu:not(.ant-menu-submenu-selected) {
+ & > .ant-menu-submenu-title:not(:active):hover {
+ background: @header-tool-hover-bg;
+ }
+ }
+
+ & > .ant-menu-submenu.ant-menu-submenu-selected {
+ & > .ant-menu-submenu-title {
+ background: @item-active-bg;
+ }
+ }
+ }
+ }
+
+ .guns-admin-sidebar-nav-tool-item {
+ height: 40px;
+ line-height: 40px;
+ text-align: center;
+ color: @text-color;
+ font-size: @font-size-lg;
+ transition:
+ color 0.3s @ease-in-out,
+ background-color 0.3s @ease-in-out,
+ padding 0.3s @ease-in-out;
+ cursor: pointer;
+
+ &:hover {
+ color: @primary-color;
+ }
+ }
+}
+
+.guns-admin-sidebar-nav-menu-pop > .ant-menu {
+ margin-left: @sidebar-nav-pop-menu-margin;
+}
+
+/* 侧栏双菜单 */
+.guns-admin-side-mix {
+ .guns-admin-logo {
+ width: @sidebar-nav-width;
+
+ & > span {
+ display: none;
+ }
+ }
+
+ &:not(.guns-admin-collapse) .guns-admin-logo {
+ box-shadow: -1px 0 0 @border-color-split inset;
+ }
+
+ .guns-admin-sidebar-nav + .guns-admin-sidebar {
+ background: @component-background;
+ box-shadow: @sidebar-light-shadow;
+ width: calc(@sidebar-width - @sidebar-collapse-width);
+ z-index: calc(@layout-z-index + 1);
+ }
+
+ .guns-admin-body {
+ width: calc(100% - @sidebar-nav-width);
+ }
+
+ .guns-admin-sidebar + .guns-admin-body {
+ width: calc(100% - @sidebar-width + @sidebar-collapse-width - @sidebar-nav-width);
+ }
+}
diff --git a/guns-front-project/src/components/layout/style/tab-style.less b/guns-front-project/src/components/layout/style/tab-style.less
new file mode 100644
index 00000000..5f16d265
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/tab-style.less
@@ -0,0 +1,79 @@
+@import './themes/default.less';
+
+/* 页签圆点风格 */
+.guns-admin-tab-dot .guns-admin-tabs {
+ & > .ant-tabs > .ant-tabs-nav .ant-tabs-tab {
+ .guns-admin-tab-title {
+ padding-left: @padding-sm;
+
+ &::before {
+ content: '';
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ margin-right: @margin-xs;
+ background: @border-color-base;
+ transition: background-color 0.3s;
+ display: inline-block;
+ vertical-align: 1px;
+ }
+ }
+
+ &.ant-tabs-tab-active .guns-admin-tab-title::before {
+ background: @primary-color;
+ }
+ }
+
+ .guns-tab-tool::after,
+ & > .ant-tabs > .ant-tabs-nav .ant-tabs-tab::after {
+ display: none;
+ }
+}
+
+/* 页签卡片风格 */
+.guns-admin-tab-card .guns-admin-tabs {
+ padding-right: @padding-md;
+ padding-top: @tabs-card-padding;
+ background: @layout-body-background;
+ box-shadow: 0 @tabs-card-padding 0 @layout-body-background;
+
+ .guns-tab-tool,
+ .ant-tabs-nav-operations .ant-tabs-nav-more,
+ & > .ant-tabs > .ant-tabs-nav .ant-tabs-tab {
+ height: calc(@tabs-height - @tabs-card-padding);
+ line-height: calc(@tabs-height - @tabs-card-padding);
+ border-radius: (@border-radius-sm * 2);
+ background: @component-background;
+
+ &::after {
+ display: none;
+ }
+ }
+
+ & > .ant-tabs > .ant-tabs-nav {
+ .ant-tabs-nav-list {
+ padding-left: @tabs-card-padding;
+ }
+
+ .ant-tabs-tab + .ant-tabs-tab {
+ margin-left: @tabs-card-padding;
+ }
+ }
+
+ &.is-show-arrow > .ant-tabs > .ant-tabs-nav .ant-tabs-nav-list {
+ padding-left: 0;
+ }
+
+ .guns-tab-arrow,
+ .ant-tabs-nav-operations .ant-tabs-nav-more {
+ background: none;
+ }
+
+ & + .guns-admin-content {
+ margin-top: @tabs-card-padding;
+
+ & > .guns-admin-content-view > .guns-body:first-child {
+ padding-top: 0;
+ }
+ }
+}
diff --git a/guns-front-project/src/components/layout/style/tabs.less b/guns-front-project/src/components/layout/style/tabs.less
new file mode 100644
index 00000000..f68e3745
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/tabs.less
@@ -0,0 +1,220 @@
+@import './themes/default.less';
+
+/* 页签栏 */
+.guns-admin-tabs {
+ display: flex;
+ align-items: center;
+ padding-left: @padding-md;
+ background: @component-background;
+ box-shadow: @header-light-shadow;
+ z-index: @layout-z-index;
+
+ & > .ant-tabs {
+ background: none;
+ flex: 1;
+
+ & > .ant-tabs-nav {
+ margin-bottom: 0;
+
+ // 页签
+ .ant-tabs-tab {
+ background: none;
+ height: @tabs-height;
+ line-height: @tabs-height;
+ transition: background-color 0.3s, color 0.3s;
+ border-radius: 0;
+ border: none;
+ padding: 0;
+ margin: 0;
+
+ .ant-tabs-tab-btn {
+ transition: none;
+ }
+
+ &::after {
+ content: '';
+ width: 0;
+ height: 2px;
+ background: @primary-color;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ }
+
+ // 选中
+ &.ant-tabs-tab-active {
+ background: @item-active-bg;
+
+ &::after {
+ width: 100%;
+ }
+ }
+
+ // 可关闭
+ &.ant-tabs-tab-with-remove .guns-admin-tab-title {
+ padding-right: 0;
+ }
+
+ .ant-tabs-tab-remove {
+ margin: 0;
+ padding: 0 (@padding-sm - 2px) 0 (@padding-xs - 2px);
+ }
+
+ // 拖动
+ &.sortable-ghost {
+ opacity: 0;
+ }
+ }
+
+ .ant-tabs-extra-content {
+ display: flex;
+ }
+ }
+
+ .ant-tabs-ink-bar,
+ .ant-tabs-nav::before,
+ .ant-tabs-content-holder {
+ display: none;
+ }
+
+ .ant-tabs-nav-operations .ant-tabs-nav-more .anticon {
+ font-size: @font-size-base;
+ vertical-align: -2px;
+ }
+ }
+}
+
+/* 页签标题 */
+.guns-admin-tab-title {
+ padding: 0 @padding-md;
+}
+
+/* 页签操作按钮 */
+.guns-tab-tool,
+.guns-admin-tabs .ant-tabs-nav-operations .ant-tabs-nav-more {
+ padding: 0;
+ flex-shrink: 0;
+ width: auto;
+ min-width: @tabs-height;
+ height: @tabs-height;
+ line-height: @tabs-height;
+ transition: background-color 0.3s, color 0.3s;
+ text-align: center;
+ position: relative;
+ cursor: pointer;
+}
+
+.guns-tab-tool {
+ .anticon,
+ .ant-dropdown-trigger .anticon {
+ font-size: @font-size-sm;
+ vertical-align: -1px;
+ }
+
+ // 模拟页签
+ &.is-tab {
+ &:hover {
+ color: @primary-color;
+ }
+
+ &::after {
+ content: '';
+ width: 0;
+ height: 2px;
+ background: @primary-color;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ }
+
+ &.is-active {
+ color: @primary-color;
+ background: @item-active-bg;
+
+ &::after {
+ width: 100%;
+ }
+ }
+ }
+}
+
+/* 页签下拉框 */
+.guns-admin-tabs-drop-popper,
+.guns-admin-tab-context-menu {
+ min-width: 116px !important;
+}
+
+.guns-admin-tabs-drop-popper {
+ left: auto !important;
+ right: 6px !important;
+}
+
+.guns-dropdown-item {
+ display: flex;
+ align-items: center;
+
+ .guns-dropdown-item-label {
+ flex: 1;
+ box-sizing: border-box;
+ }
+
+ & > * + .guns-dropdown-item-label {
+ padding-left: @padding-sm;
+ }
+}
+
+/* 页签折叠下拉框 */
+.ant-tabs-dropdown {
+ min-width: 140px !important;
+
+ & > .ant-tabs-dropdown-content {
+ background: @dropdown-menu-bg;
+ border-radius: @border-radius-base;
+ }
+
+ .ant-tabs-dropdown-menu-item {
+ padding-right: 6px;
+
+ & > span {
+ display: flex;
+
+ & > span {
+ flex: 1;
+ }
+ }
+ }
+
+ .ant-tabs-dropdown-menu-item-remove {
+ width: 22px;
+ height: 22px;
+ line-height: 22px;
+ margin-left: 2px;
+ }
+}
+
+/* 开启页签栏后顶栏阴影调整 */
+.guns-admin-show-tabs:not(.guns-admin-tab-card):not(.guns-admin-head-dark) {
+ .guns-admin-header {
+ box-shadow: @sidebar-width -1px 0 @border-color-split inset;
+ transition: padding-left @sidebar-transition-anim,
+ box-shadow @sidebar-transition-anim;
+ }
+
+ &.guns-admin-collapse .guns-admin-header {
+ box-shadow: @sidebar-collapse-width -1px 0 @border-color-split inset;
+ }
+
+ &.guns-admin-side-mix {
+ .guns-admin-header {
+ box-shadow: @sidebar-nav-width -1px 0 @border-color-split inset;
+ }
+
+ &.guns-admin-nav-collapse:not(.guns-admin-logo-auto) .guns-admin-header {
+ box-shadow: @sidebar-collapse-width -1px 0 @border-color-split inset;
+ }
+ }
+
+ &.guns-admin-logo-auto .guns-admin-header {
+ box-shadow: 0 -1px 0 @border-color-split inset;
+ }
+}
diff --git a/guns-front-project/src/components/layout/style/themes/dark.less b/guns-front-project/src/components/layout/style/themes/dark.less
new file mode 100644
index 00000000..4fbd3e3a
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/themes/dark.less
@@ -0,0 +1,21 @@
+/** 暗黑主题 */
+@import './default.less';
+@import 'ant-design-vue/es/style/themes/dark.less';
+
+// 滚动条
+@scrollbar-thumb-color: #484848;
+@scrollbar-thumb-hover-color: #5b5b5b;
+
+// 侧栏
+@sidebar-light-shadow: 0 4px 4px rgba(0, 0, 0, 0.6);
+@sidebar-dark-shadow: 0 4px 4px rgba(0, 0, 0, 0.6);
+
+// 顶栏
+@header-light-shadow: 0 1px 4px rgba(0, 0, 0, 0.6);
+@header-dark-shadow: 0 1px 4px rgba(0, 0, 0, 0.6);
+@header-tool-hover-bg: rgba(255, 255, 255, 0.05);
+@header-dark-tool-hover-bg: rgba(255, 255, 255, 0.05);
+
+// logo
+@logo-light-shadow: 0 3px 4px rgba(0, 0, 0, 0.6);
+@logo-dark-shadow: 0 3px 4px rgba(0, 0, 0, 0.6);
diff --git a/guns-front-project/src/components/layout/style/themes/default.less b/guns-front-project/src/components/layout/style/themes/default.less
new file mode 100644
index 00000000..f7b2919e
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/themes/default.less
@@ -0,0 +1,152 @@
+/** 默认主题 */
+@import 'ant-design-vue/es/style/themes/default.less';
+
+/* Menu */
+@menu-dark-color: fade(@white, 85%);
+
+/* Modal */
+@modal-header-padding: 16px 24px;
+@modal-close-x-height: 54px;
+@modal-close-x-width: 54px;
+
+/* 滚动条 */
+// 滑块颜色
+@scrollbar-thumb-color: #cfcfcf;
+// 滑块 hover 颜色
+@scrollbar-thumb-hover-color: #b6b6b6;
+// 滑块大小
+@scrollbar-thumb-size: 12px;
+// 滑块边框大小
+@scrollbar-thumb-border-size: 2px;
+// 小型滚动条滑块大小
+@scrollbar-mini-thumb-size: 8px;
+// 轨道颜色
+@scrollbar-track-color: transparent;
+
+/* Layout */
+// 布局最小 z-index (页签栏[最小]->「顶栏|侧栏」[+2|+3|+1]->移动端遮罩层[+3])
+@layout-z-index: 99;
+// 主体内容定宽
+@body-limit-width: 1160px;
+// 关闭响应式布局后的最大宽度
+@body-max-width: 1400px;
+// 暗黑模式 class
+@dark-class: guns-admin-theme-dark;
+
+/* 侧栏 */
+// 侧栏宽度
+@sidebar-width: 210px;
+// 侧栏折叠后宽度
+@sidebar-collapse-width: 60px;
+// 侧栏背景
+@sidebar-background: @layout-sider-background;
+// 侧栏亮色背景
+@sidebar-light-background: @component-background;
+// 侧栏亮色阴影
+@sidebar-light-shadow: 1px 3px 3px rgba(0, 21, 41, 0.08);
+// 侧栏暗色阴影
+@sidebar-dark-shadow: 0 4px 4px rgba(0, 0, 0, 0.35);
+// 侧栏过渡动画
+@sidebar-transition-anim: 0.3s cubic-bezier(0.2, 0, 0, 1) 0s;
+// 侧栏过渡效果
+@sidebar-transition: width @sidebar-transition-anim,
+ left @sidebar-transition-anim, box-shadow @sidebar-transition-anim;
+// 双侧栏一级宽度
+@sidebar-nav-width: 80px;
+// 双侧栏一级内间距
+@sidebar-nav-padding: 0 @padding-xs;
+// 双侧栏一级折叠后内间距
+@sidebar-collapse-nav-padding: 0 @padding-xss;
+// 双侧栏一级 pop 菜单的左右 margin
+@sidebar-nav-pop-menu-margin: @padding-xs;
+// 双侧栏一级菜单字体大小
+@sidebar-nav-font-size: @font-size-sm;
+// 双侧栏一级菜单图标字体大小
+@sidebar-nav-icon-font-size: @font-size-lg;
+// 双侧栏一级菜单 item 内间距
+@sidebar-nav-item-padding: @padding-sm 0;
+// 双侧栏一级折叠后菜单 item 内间距
+@sidebar-collapse-nav-item-padding: @padding-sm 0;
+// 双侧栏一级菜单 item 标题外间距
+@sidebar-nav-item-title-margin: (@padding-sm / 2) 0 0 0;
+// 双侧栏一级菜单 item 外间距
+@sidebar-nav-item-margin: @padding-xss 0 @padding-xs 0;
+// 双侧栏一级折叠后菜单 item 外间距
+@sidebar-collapse-nav-item-margin: @padding-xss 0 @padding-xs 0;
+// 侧栏固定时的 z-index
+@sidebar-fixed-z-index: (@zindex-modal + 1001);
+// 侧栏滚动条滑块颜色
+@sidebar-scrollbar-thumb-color: tint(@layout-sider-background, 30%);
+// 侧栏滚动条滑块 hover 颜色
+@sidebar-scrollbar-thumb-hover-color: tint(@layout-sider-background, 30%);
+// 侧栏滚动条轨道颜色
+@sidebar-scrollbar-track-color: transparent;
+// 侧栏亮色滚动条滑块颜色
+@sidebar-light-scrollbar-thumb-color: @scrollbar-thumb-color;
+// 侧栏亮色滚动条滑块 hover 颜色
+@sidebar-light-scrollbar-thumb-hover-color: @scrollbar-thumb-hover-color;
+// 侧栏亮色滚动条轨道颜色
+@sidebar-light-scrollbar-track-color: transparent;
+
+/* 顶栏 */
+// 顶栏高度
+@header-height: 52px;
+// 顶栏背景
+@header-background: @layout-sider-background;
+// 顶栏亮色背景
+@header-light-background: @component-background;
+// 顶栏亮色阴影
+@header-light-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
+// 顶栏暗色阴影
+@header-dark-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
+// 顶栏头像大小
+@header-avatar-size: 28px;
+// 顶栏工具按钮 hover 背景
+@header-tool-hover-bg: rgba(0, 0, 0, 0.025);
+// 顶栏暗色工具按钮 hover 背景
+@header-dark-tool-hover-bg: rgba(255, 255, 255, 0.05);
+
+/* logo */
+// logo 大小
+@logo-size: 30px;
+// logo 文字大小
+@logo-font-size: @font-size-lg + 2px;
+// logo 字体粗度
+@logo-font-weight: 600;
+// logo 亮色文字颜色
+@logo-light-color: @heading-color;
+// logo 暗色文字颜色
+@logo-dark-color: @menu-dark-selected-item-text-color;
+// logo 亮色阴影
+@logo-light-shadow: 1px 2px 3px rgba(0, 21, 41, 0.08);
+// logo 暗色阴影
+@logo-dark-shadow: 0 3px 4px rgba(0, 0, 0, 0.35);
+// logo 字体
+@logo-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
+ 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji',
+ 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
+
+/* 页签栏 */
+// 页签栏高度
+@tabs-height: 40px;
+// 页签栏卡片式间距
+@tabs-card-padding: @padding-xs;
+
+/* 返回顶部位置 */
+@layout-back-top-right: 30px;
+@layout-back-top-bottom: 60px;
+
+/* FileList */
+@file-list-selector-z-index: 999;
+@file-list-selector-border-color: #0078d7;
+@file-list-selector-background: rgba(0, 120, 215, 0.2);
+@file-list-item-active-border-color: @primary-3;
+@file-list-item-active-background: @item-active-bg;
+@file-list-table-sort-color: hsla(0, 0%, 60%, 0.6);
+@file-list-table-sort-active-color: @primary-color;
+
+/* Table Tool */
+@table-tool-column-width: 220px;
+@table-tool-column-max-height: 480px;
+// 菜单贵大
+@menu-icon-size-lg: 24px;
diff --git a/guns-front-project/src/components/layout/style/themes/dynamic-dark.less b/guns-front-project/src/components/layout/style/themes/dynamic-dark.less
new file mode 100644
index 00000000..1490efaf
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/themes/dynamic-dark.less
@@ -0,0 +1,384 @@
+@import './default.less';
+
+.@{dark-class} {
+ --blue-1: #111d2c;
+ --blue-2: #112a45;
+ --blue-3: #15395b;
+ --blue-4: #164c7e;
+ --blue-5: #1765ad;
+ --blue-6: #177ddc;
+ --blue-7: #3c9ae8;
+ --blue-8: #65b7f3;
+ --blue-9: #8dcff8;
+ --blue-10: #b7e3fa;
+
+ --purple-1: #1a1325;
+ --purple-2: #24163a;
+ --purple-3: #301c4d;
+ --purple-4: #3e2069;
+ --purple-5: #51258f;
+ --purple-6: #642ab5;
+ --purple-7: #854eca;
+ --purple-8: #ab7ae0;
+ --purple-9: #cda8f0;
+ --purple-10: #ebd7fa;
+
+ --cyan-1: #112123;
+ --cyan-2: #113536;
+ --cyan-3: #144848;
+ --cyan-4: #146262;
+ --cyan-5: #138585;
+ --cyan-6: #13a8a8;
+ --cyan-7: #33bcb7;
+ --cyan-8: #58d1c9;
+ --cyan-9: #84e2d8;
+ --cyan-10: #b2f1e8;
+
+ --green-1: #162312;
+ --green-2: #1d3712;
+ --green-3: #274916;
+ --green-4: #306317;
+ --green-5: #3c8618;
+ --green-6: #49aa19;
+ --green-7: #6abe39;
+ --green-8: #8fd460;
+ --green-9: #b2e58b;
+ --green-10: #d5f2bb;
+
+ --pink-1: #291321;
+ --pink-2: #40162f;
+ --pink-3: #551c3b;
+ --pink-4: #75204f;
+ --pink-5: #a02669;
+ --pink-6: #cb2b83;
+ --pink-7: #e0529c;
+ --pink-8: #f37fb7;
+ --pink-9: #f8a8cc;
+ --pink-10: #fad2e3;
+
+ --red-1: #2a1215;
+ --red-2: #431418;
+ --red-3: #58181c;
+ --red-4: #791a1f;
+ --red-5: #a61d24;
+ --red-6: #f5222d;
+ --red-7: #e84749;
+ --red-8: #f37370;
+ --red-9: #f89f9a;
+ --red-10: #fac8c3;
+
+ --orange-1: #2b1d11;
+ --orange-2: #442a11;
+ --orange-3: #593815;
+ --orange-4: #7c4a15;
+ --orange-5: #aa6215;
+ --orange-6: #d87a16;
+ --orange-7: #e89a3c;
+ --orange-8: #f3b765;
+ --orange-9: #f8cf8d;
+ --orange-10: #fae3b7;
+
+ --gold-1: #2b2111;
+ --gold-2: #443111;
+ --gold-3: #594214;
+ --gold-4: #7c5914;
+ --gold-5: #aa7714;
+ --gold-6: #d89614;
+ --gold-7: #e8b339;
+ --gold-8: #f3cc62;
+ --gold-9: #f8df8b;
+ --gold-10: #faedb5;
+
+ --primary-1: var(--blue-1);
+ --primary-2: var(--blue-2);
+ --primary-3: var(--blue-3);
+ --primary-4: var(--blue-4);
+ --primary-5: var(--blue-5);
+ --primary-6: var(--blue-6);
+ --primary-7: var(--blue-7);
+ --primary-8: var(--blue-8);
+ --primary-9: var(--blue-9);
+ --primary-10: var(--blue-10);
+
+ --primary-color: var(--primary-6);
+ --primary-color-hover: var(--primary-5);
+ --primary-color-active: var(--primary-7);
+ --primary-color-outline: var(--primary-2);
+
+ --info-color: var(--primary-color);
+
+ --success-color: var(--green-6);
+ --success-color-hover: var(--green-5);
+ --success-color-active: var(--green-7);
+ --success-color-outline: var(--green-2);
+
+ --warning-color: var(--gold-6);
+ --warning-color-hover: var(--gold-5);
+ --warning-color-active: var(--gold-7);
+ --warning-color-outline: var(--gold-2);
+
+ --error-color: var(--red-5);
+ --error-color-hover: var(--red-4);
+ --error-color-active: var(--red-7);
+ --error-color-outline: var(--red-2);
+
+ --highlight-color: var(--red-5);
+ --processing-color: var(--blue-6);
+
+ --body-background: @black;
+ --component-background: #141414;
+ --popover-background: #1f1f1f;
+ --popover-customize-border-color: #3a3a3a;
+
+ --text-color: fade(@white, 85%);
+ --text-color-secondary: fade(@white, 45%);
+ --text-color-inverse: @white;
+ --icon-color-hover: fade(@white, 75%);
+ --heading-color: fade(@white, 85%);
+
+ --item-hover-bg: fade(@white, 8%);
+
+ // Border color
+ --border-color-base: #434343;
+ --border-color-split: #303030;
+
+ //
+ --background-color-light: fade(@white, 4%);
+ --background-color-base: fade(@white, 8%);
+
+ // Disabled states
+ --disabled-color: fade(@white, 30%);
+ --disabled-bg: @background-color-base;
+ --disabled-color-dark: fade(@white, 30%);
+
+ // Shadow
+ --shadow-color: rgba(0, 0, 0, 0.45);
+ --shadow-color-inverse: @component-background;
+ --box-shadow-base: @shadow-2;
+ --shadow-1-up: 0 -6px 16px -8px rgba(0, 0, 0, 0.32),
+ 0 -9px 28px 0 rgba(0, 0, 0, 0.2), 0 -12px 48px 16px rgba(0, 0, 0, 0.12);
+ --shadow-1-down: 0 6px 16px -8px rgba(0, 0, 0, 0.32),
+ 0 9px 28px 0 rgba(0, 0, 0, 0.2), 0 12px 48px 16px rgba(0, 0, 0, 0.12);
+ --shadow-1-right: 6px 0 16px -8px rgba(0, 0, 0, 0.32),
+ 9px 0 28px 0 rgba(0, 0, 0, 0.2), 12px 0 48px 16px rgba(0, 0, 0, 0.12);
+ --shadow-2: 0 3px 6px -4px rgba(0, 0, 0, 0.48),
+ 0 6px 16px 0 rgba(0, 0, 0, 0.32), 0 9px 28px 8px rgba(0, 0, 0, 0.2);
+
+ // Buttons
+ --btn-shadow: 0 2px 0 rgba(0, 0, 0, 0.015);
+ --btn-primary-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);
+ --btn-text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);
+ --btn-default-bg: transparent;
+ --btn-default-ghost-color: @text-color;
+ --btn-default-ghost-border: fade(@white, 25%);
+ --btn-text-hover-bg: rgba(255, 255, 255, 0.03);
+ --btn-text-active-bg: rgba(255, 255, 255, 0.04);
+
+ // Checkbox
+ --checkbox-check-bg: transparent;
+
+ // Descriptions
+ --descriptions-bg: @background-color-light;
+
+ // Divider
+ --divider-color: rgba(255, 255, 255, 12%);
+
+ // Dropdown
+ --dropdown-menu-submenu-disabled-bg: transparent;
+
+ // Radio
+ --radio-dot-disabled-color: fade(@white, 20%);
+ --radio-solid-checked-color: @white;
+
+ // Radio buttons
+ --radio-disabled-button-checked-bg: fade(@white, 20%);
+ --radio-disabled-button-checked-color: @disabled-color;
+
+ // Layout
+ --layout-body-background: @body-background;
+ --layout-header-background: @popover-background;
+ --layout-trigger-background: #262626;
+
+ // Dropdown
+ --dropdown-menu-bg: @popover-background;
+
+ // Input
+ --input-placeholder-color: fade(@white, 30%);
+ --input-icon-color: fade(@white, 30%);
+ --input-bg: transparent;
+ --input-number-handler-active-bg: @item-hover-bg;
+ --input-icon-hover-color: fade(@white, 85%);
+
+ // Mentions
+ --mentions-dropdown-bg: @popover-background;
+
+ // Select
+ --select-dropdown-bg: @popover-background;
+ --select-background: transparent;
+ --select-clear-background: @component-background;
+ --select-selection-item-bg: fade(@white, 8);
+ --select-selection-item-border-color: @border-color-split;
+ --select-multiple-disabled-background: @component-background;
+ --select-multiple-item-disabled-color: #595959;
+ --select-multiple-item-disabled-border-color: @popover-background;
+
+ // Cascader
+ --cascader-bg: transparent;
+ --cascader-menu-bg: @popover-background;
+ --cascader-menu-border-color-split: @border-color-split;
+
+ // Tooltip
+ --tooltip-bg: #434343;
+
+ // Popover
+ --popover-bg: @popover-background;
+
+ // Modal
+ --modal-header-bg: @popover-background;
+ --modal-header-border-color-split: @border-color-split;
+ --modal-content-bg: @popover-background;
+ --modal-footer-border-color-split: @border-color-split;
+
+ // Progress
+ --progress-steps-item-bg: fade(@white, 8%);
+
+ // Menu
+ --menu-popup-bg: @popover-background;
+ --menu-dark-bg: @popover-background;
+ --menu-dark-inline-submenu-bg: @component-background;
+
+ // Table
+ --table-header-bg: #1d1d1d;
+ --table-header-sort-bg: #262626;
+ --table-body-sort-bg: fade(@white, 1%);
+ --table-row-hover-bg: #262626;
+ --table-expanded-row-bg: @table-header-bg;
+ --table-header-cell-split-color: fade(@white, 8%);
+ --table-header-sort-active-bg: #303030;
+ --table-fixed-header-sort-active-bg: #222;
+ --table-header-filter-active-bg: #434343;
+ --table-filter-btns-bg: @popover-background;
+ --table-filter-dropdown-bg: @popover-background;
+ --table-expand-icon-bg: transparent;
+
+ // TimePicker
+ --picker-bg: transparent;
+ --picker-basic-cell-disabled-bg: #303030;
+ --picker-border-color: @border-color-split;
+
+ // Calendar
+ --calendar-bg: @popover-background;
+ --calendar-input-bg: @calendar-bg;
+ --calendar-border-color: transparent;
+ --calendar-full-bg: @component-background;
+
+ // Badge
+ --badge-text-color: @white;
+
+ // Rate
+ --rate-star-bg: fade(@white, 12%);
+
+ // Card
+ --card-actions-background: @component-background;
+ --card-skeleton-bg: #303030;
+ --card-shadow: 0 1px 2px -2px rgba(0, 0, 0, 0.64),
+ 0 3px 6px 0 rgba(0, 0, 0, 0.48), 0 5px 12px 4px rgba(0, 0, 0, 0.36);
+
+ // Comment
+ --comment-bg: transparent;
+ --comment-author-time-color: fade(@white, 30%);
+ --comment-action-hover-color: fade(@white, 65%);
+
+ // BackTop
+ --back-top-bg: var(--tooltip-bg);
+ --back-top-hover-bg: var(--border-color-split);
+
+ // Avatar
+ --avatar-bg: fade(@white, 30%);
+
+ // Switch
+ --switch-bg: @white;
+
+ // Pagination
+ --pagination-item-bg: transparent;
+ --pagination-item-bg-active: transparent;
+ --pagination-item-link-bg: transparent;
+ --pagination-item-disabled-color-active: @black;
+ --pagination-item-disabled-bg-active: fade(@white, 25%);
+ --pagination-item-input-bg: @pagination-item-bg;
+
+ // PageHeader
+ --page-header-back-color: @icon-color;
+ --page-header-ghost-bg: transparent;
+
+ // Slider
+ --slider-rail-background-color: #262626;
+ --slider-rail-background-color-hover: @border-color-base;
+ --slider-dot-border-color: @border-color-split;
+ --slider-dot-border-color-active: @primary-4;
+
+ // Tree
+ --tree-bg: transparent;
+
+ // Skeleton
+ --skeleton-to-color: fade(@white, 16%);
+
+ // Transfer
+ --transfer-item-hover-bg: #262626;
+
+ // Message
+ --message-notice-content-bg: @popover-background;
+
+ // List
+ --list-customize-card-bg: transparent;
+
+ // Drawer
+ --drawer-bg: @popover-background;
+
+ // Timeline
+ --timeline-color: @border-color-split;
+ --timeline-dot-color: @primary-color;
+
+ // Steps
+ --steps-nav-arrow-color: fade(@white, 20%);
+ --steps-background: transparent;
+
+ // Notification
+ --notification-bg: @popover-background;
+
+ // Image
+ --image-preview-operation-disabled-color: rgba(255, 255, 255, 0.45);
+
+ //
+ --gradient-min: fade(#303030, 20%);
+ --gradient-max: fade(#303030, 40%);
+
+ // 滚动条
+ --scrollbar-thumb-color: #484848;
+ --scrollbar-thumb-hover-color: #5b5b5b;
+ --scrollbar-track-color: transparent;
+
+ // 侧栏
+ --sidebar-background: @layout-sider-background;
+ --sidebar-light-background: @component-background;
+ --sidebar-light-shadow: 0 4px 4px rgba(0, 0, 0, 0.6);
+ --sidebar-dark-shadow: 0 4px 4px rgba(0, 0, 0, 0.6);
+ --sidebar-scrollbar-thumb-color: tint(#1f1f1f, 30%);
+ --sidebar-scrollbar-thumb-hover-color: tint(#1f1f1f, 40%);
+ --sidebar-scrollbar-track-color: transparent;
+ --sidebar-light-scrollbar-thumb-color: @scrollbar-thumb-color;
+ --sidebar-light-scrollbar-thumb-hover-color: @scrollbar-thumb-hover-color;
+ --sidebar-light-scrollbar-track-color: transparent;
+
+ // 顶栏
+ --header-background: @layout-sider-background;
+ --header-light-background: @component-background;
+ --header-light-shadow: 0 1px 4px rgba(0, 0, 0, 0.6);
+ --header-dark-shadow: 0 1px 4px rgba(0, 0, 0, 0.6);
+ --header-tool-hover-bg: rgba(255, 255, 255, 0.05);
+ --header-dark-tool-hover-bg: rgba(255, 255, 255, 0.05);
+
+ // logo
+ --logo-light-shadow: 0 3px 4px rgba(0, 0, 0, 0.6);
+ --logo-dark-shadow: 0 3px 4px rgba(0, 0, 0, 0.6);
+}
diff --git a/guns-front-project/src/components/layout/style/themes/dynamic-default.less b/guns-front-project/src/components/layout/style/themes/dynamic-default.less
new file mode 100644
index 00000000..81524e35
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/themes/dynamic-default.less
@@ -0,0 +1,386 @@
+@import './default.less';
+
+:root {
+ --blue-1: #e6f7ff;
+ --blue-2: #bae7ff;
+ --blue-3: #91d5ff;
+ --blue-4: #69c0ff;
+ --blue-5: #40a9ff;
+ --blue-6: #1890ff;
+ --blue-7: #096dd9;
+ --blue-8: #0050b3;
+ --blue-9: #003a8c;
+ --blue-10: #002766;
+
+ --purple-1: #f9f0ff;
+ --purple-2: #efdbff;
+ --purple-3: #d3adf7;
+ --purple-4: #b37feb;
+ --purple-5: #9254de;
+ --purple-6: #722ed1;
+ --purple-7: #531dab;
+ --purple-8: #391085;
+ --purple-9: #22075e;
+ --purple-10: #120338;
+
+ --cyan-1: #e6fffb;
+ --cyan-2: #b5f5ec;
+ --cyan-3: #87e8de;
+ --cyan-4: #5cdbd3;
+ --cyan-5: #36cfc9;
+ --cyan-6: #13c2c2;
+ --cyan-7: #08979c;
+ --cyan-8: #006d75;
+ --cyan-9: #00474f;
+ --cyan-10: #002329;
+
+ --green-1: #f6ffed;
+ --green-2: #d9f7be;
+ --green-3: #b7eb8f;
+ --green-4: #95de64;
+ --green-5: #73d13d;
+ --green-6: #52c41a;
+ --green-7: #389e0d;
+ --green-8: #237804;
+ --green-9: #135200;
+ --green-10: #092b00;
+
+ --pink-1: #fff0f6;
+ --pink-2: #ffd6e7;
+ --pink-3: #ffadd2;
+ --pink-4: #ff85c0;
+ --pink-5: #f759ab;
+ --pink-6: #eb2f96;
+ --pink-7: #c41d7f;
+ --pink-8: #9e1068;
+ --pink-9: #780650;
+ --pink-10: #520339;
+
+ --red-1: #fff1f0;
+ --red-2: #ffccc7;
+ --red-3: #ffa39e;
+ --red-4: #ff7875;
+ --red-5: #ff4d4f;
+ --red-6: #f5222d;
+ --red-7: #cf1322;
+ --red-8: #a8071a;
+ --red-9: #820014;
+ --red-10: #5c0011;
+
+ --orange-1: #fff7e6;
+ --orange-2: #ffe7ba;
+ --orange-3: #ffd591;
+ --orange-4: #ffc069;
+ --orange-5: #ffa940;
+ --orange-6: #fa8c16;
+ --orange-7: #d46b08;
+ --orange-8: #ad4e00;
+ --orange-9: #873800;
+ --orange-10: #612500;
+
+ --gold-1: #fffbe6;
+ --gold-2: #fff1b8;
+ --gold-3: #ffe58f;
+ --gold-4: #ffd666;
+ --gold-5: #ffc53d;
+ --gold-6: #faad14;
+ --gold-7: #d48806;
+ --gold-8: #ad6800;
+ --gold-9: #874d00;
+ --gold-10: #613400;
+
+ --primary-1: var(--blue-1);
+ --primary-2: var(--blue-2);
+ --primary-3: var(--blue-3);
+ --primary-4: var(--blue-4);
+ --primary-5: var(--blue-5);
+ --primary-6: var(--blue-6);
+ --primary-7: var(--blue-7);
+ --primary-8: var(--blue-8);
+ --primary-9: var(--blue-9);
+ --primary-10: var(--blue-10);
+
+ --primary-color: var(--primary-6);
+ --primary-color-hover: var(--primary-5);
+ --primary-color-active: var(--primary-7);
+ --primary-color-outline: var(--primary-2);
+
+ --info-color: var(--primary-color);
+
+ --success-color: var(--green-6);
+ --success-color-hover: var(--green-5);
+ --success-color-active: var(--green-7);
+ --success-color-outline: var(--green-2);
+
+ --warning-color: var(--gold-6);
+ --warning-color-hover: var(--gold-5);
+ --warning-color-active: var(--gold-7);
+ --warning-color-outline: var(--gold-2);
+
+ --error-color: var(--red-5);
+ --error-color-hover: var(--red-4);
+ --error-color-active: var(--red-7);
+ --error-color-outline: var(--red-2);
+
+ --highlight-color: var(--red-5);
+ --processing-color: var(--blue-6);
+
+ --body-background: #fff;
+ --component-background: #fff;
+ --popover-background: @component-background;
+ --popover-customize-border-color: @border-color-split;
+
+ --text-color: fade(@black, 85%);
+ --text-color-secondary: fade(@black, 45%);
+ --text-color-inverse: @white;
+ --icon-color-hover: fade(@black, 75%);
+ --heading-color: fade(@black, 85%);
+
+ --item-hover-bg: #f5f5f5;
+
+ // Border color
+ --border-color-base: hsv(0, 0, 85%);
+ --border-color-split: hsv(0, 0, 94%);
+
+ //
+ --background-color-light: hsv(0, 0, 98%);
+ --background-color-base: hsv(0, 0, 96%);
+
+ // Disabled states
+ --disabled-color: fade(#000, 25%);
+ --disabled-bg: @background-color-base;
+ --disabled-color-dark: fade(#fff, 35%);
+
+ // Shadow
+ --shadow-color: rgba(0, 0, 0, 0.15);
+ --shadow-color-inverse: @component-background;
+ --box-shadow-base: @shadow-2;
+ --shadow-1-up: 0 -6px 16px -8px rgba(0, 0, 0, 0.08),
+ 0 -9px 28px 0 rgba(0, 0, 0, 0.05), 0 -12px 48px 16px rgba(0, 0, 0, 0.03);
+ --shadow-1-down: 0 6px 16px -8px rgba(0, 0, 0, 0.08),
+ 0 9px 28px 0 rgba(0, 0, 0, 0.05), 0 12px 48px 16px rgba(0, 0, 0, 0.03);
+ --shadow-1-left: -6px 0 16px -8px rgba(0, 0, 0, 0.08),
+ -9px 0 28px 0 rgba(0, 0, 0, 0.05), -12px 0 48px 16px rgba(0, 0, 0, 0.03);
+ --shadow-1-right: 6px 0 16px -8px rgba(0, 0, 0, 0.08),
+ 9px 0 28px 0 rgba(0, 0, 0, 0.05), 12px 0 48px 16px rgba(0, 0, 0, 0.03);
+ --shadow-2: 0 3px 6px -4px rgba(0, 0, 0, 0.12),
+ 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
+
+ // Buttons
+ --btn-shadow: 0 2px 0 rgba(0, 0, 0, 0.015);
+ --btn-primary-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);
+ --btn-text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);
+ --btn-default-bg: @component-background;
+ --btn-default-ghost-color: @component-background;
+ --btn-default-ghost-border: @component-background;
+ --btn-text-hover-bg: rgba(0, 0, 0, 0.018);
+ --btn-text-active-bg: rgba(0, 0, 0, 0.028);
+
+ // Checkbox
+ --checkbox-check-bg: @checkbox-check-color;
+
+ // Descriptions
+ --descriptions-bg: #fafafa;
+
+ // Divider
+ --divider-color: rgba(0, 0, 0, 6%);
+
+ // Dropdown
+ --dropdown-menu-submenu-disabled-bg: @component-background;
+
+ // Radio
+ --radio-dot-disabled-color: fade(@black, 20%);
+ --radio-solid-checked-color: @component-background;
+
+ // Radio buttons
+ --radio-disabled-button-checked-bg: @disabled-active-bg;
+ --radio-disabled-button-checked-color: @disabled-color;
+
+ // Layout
+ --layout-body-background: #f0f2f5;
+ --layout-header-background: #001529;
+ --layout-trigger-background: #002140;
+
+ // Dropdown
+ --dropdown-menu-bg: @component-background;
+
+ // Input
+ --input-placeholder-color: hsv(0, 0, 75%);
+ --input-icon-color: @input-color;
+ --input-bg: @component-background;
+ --input-number-handler-active-bg: #f4f4f4;
+ --input-icon-hover-color: fade(@black, 85%);
+
+ // Mentions
+ --mentions-dropdown-bg: @component-background;
+
+ // Select
+ --select-dropdown-bg: @component-background;
+ --select-background: @component-background;
+ --select-clear-background: @select-background;
+ --select-selection-item-bg: @background-color-base;
+ --select-selection-item-border-color: @border-color-split;
+ --select-multiple-disabled-background: @input-disabled-bg;
+ --select-multiple-item-disabled-color: #bfbfbf;
+ --select-multiple-item-disabled-border-color: @select-border-color;
+
+ // Cascader
+ --cascader-bg: @component-background;
+ --cascader-menu-bg: @component-background;
+ --cascader-menu-border-color-split: @border-color-split;
+
+ // Tooltip
+ --tooltip-bg: rgba(0, 0, 0, 0.75);
+
+ // Popover
+ --popover-bg: @component-background;
+
+ // Modal
+ --modal-header-bg: @component-background;
+ --modal-header-border-color-split: @border-color-split;
+ --modal-content-bg: @component-background;
+ --modal-footer-border-color-split: @border-color-split;
+
+ // Progress
+ --progress-steps-item-bg: #f3f3f3;
+
+ // Menu
+ --menu-popup-bg: @component-background;
+ --menu-dark-bg: @layout-header-background;
+ --menu-dark-inline-submenu-bg: #000c17;
+
+ // Table
+ --table-header-bg: @background-color-light;
+ --table-header-sort-bg: @background-color-base;
+ --table-body-sort-bg: #fafafa;
+ --table-row-hover-bg: @background-color-light;
+ --table-expanded-row-bg: #fbfbfb;
+ --table-header-cell-split-color: rgba(0, 0, 0, 0.06);
+ --table-header-sort-active-bg: rgba(0, 0, 0, 0.04);
+ --table-fixed-header-sort-active-bg: hsv(0, 0, 96%);
+ --table-header-filter-active-bg: rgba(0, 0, 0, 0.04);
+ --table-filter-btns-bg: inherit;
+ --table-filter-dropdown-bg: @component-background;
+ --table-expand-icon-bg: @component-background;
+
+ // TimePicker
+ --picker-bg: @component-background;
+ --picker-basic-cell-disabled-bg: @disabled-bg;
+ --picker-border-color: @border-color-split;
+
+ // Calendar
+ --calendar-bg: @component-background;
+ --calendar-input-bg: @input-bg;
+ --calendar-border-color: @border-color-inverse;
+ --calendar-full-bg: @calendar-bg;
+
+ // Badge
+ --badge-text-color: @component-background;
+
+ // Rate
+ --rate-star-bg: @border-color-split;
+
+ // Card
+ --card-actions-background: @component-background;
+ --card-skeleton-bg: #cfd8dc;
+ --card-shadow: 0 1px 2px -2px rgba(0, 0, 0, 0.16),
+ 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09);
+
+ // Comment
+ --comment-bg: inherit;
+ --comment-author-time-color: #ccc;
+ --comment-action-hover-color: #595959;
+
+ // BackTop
+ --back-top-bg: @text-color-secondary;
+ --back-top-hover-bg: @text-color;
+
+ // Avatar
+ --avatar-bg: #ccc;
+
+ // Switch
+ --switch-bg: @component-background;
+
+ // Pagination
+ --pagination-item-bg: @component-background;
+ --pagination-item-bg-active: @component-background;
+ --pagination-item-link-bg: @component-background;
+ --pagination-item-disabled-color-active: @white;
+ --pagination-item-disabled-bg-active: @disabled-active-bg;
+ --pagination-item-input-bg: @component-background;
+
+ // PageHeader
+ --page-header-back-color: #000;
+ --page-header-ghost-bg: inherit;
+
+ // Slider
+ --slider-rail-background-color: @background-color-base;
+ --slider-rail-background-color-hover: #e1e1e1;
+ --slider-dot-border-color: @border-color-split;
+ --slider-dot-border-color-active: @primary-4;
+
+ // Tree
+ --tree-bg: @component-background;
+
+ // Skeleton
+ --skeleton-to-color: shade(@skeleton-color, 5%);
+
+ // Transfer
+ --transfer-item-hover-bg: @item-hover-bg;
+
+ // Message
+ --message-notice-content-bg: @component-background;
+
+ // List
+ --list-customize-card-bg: @component-background;
+
+ // Drawer
+ --drawer-bg: @component-background;
+
+ // Timeline
+ --timeline-color: @border-color-split;
+ --timeline-dot-color: @primary-color;
+
+ // Steps
+ --steps-nav-arrow-color: fade(@black, 25%);
+ --steps-background: @component-background;
+
+ // Notification
+ --notification-bg: @component-background;
+
+ // Image
+ --image-preview-operation-disabled-color: rgba(255, 255, 255, 0.45);
+
+ //
+ --gradient-min: fade(#cfd8dc, 20%);
+ --gradient-max: fade(#cfd8dc, 40%);
+
+ // 滚动条
+ --scrollbar-thumb-color: #cfcfcf;
+ --scrollbar-thumb-hover-color: #b6b6b6;
+ --scrollbar-track-color: transparent;
+
+ // 侧栏
+ --sidebar-background: @layout-sider-background;
+ --sidebar-light-background: @component-background;
+ --sidebar-light-shadow: 1px 3px 3px rgba(0, 21, 41, 0.08);
+ --sidebar-dark-shadow: 0 4px 4px rgba(0, 0, 0, 0.35);
+ --sidebar-scrollbar-thumb-color: tint(#001529, 30%);
+ --sidebar-scrollbar-thumb-hover-color: tint(#001529, 40%);
+ --sidebar-scrollbar-track-color: transparent;
+ --sidebar-light-scrollbar-thumb-color: @scrollbar-thumb-color;
+ --sidebar-light-scrollbar-thumb-hover-color: @scrollbar-thumb-hover-color;
+ --sidebar-light-scrollbar-track-color: transparent;
+
+ // 顶栏
+ --header-background: @layout-sider-background;
+ --header-light-background: @component-background;
+ --header-light-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
+ --header-dark-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
+ --header-tool-hover-bg: rgba(0, 0, 0, 0.025);
+ --header-dark-tool-hover-bg: rgba(255, 255, 255, 0.05);
+
+ // logo
+ --logo-light-shadow: 1px 2px 3px rgba(0, 21, 41, 0.08);
+ --logo-dark-shadow: 0 3px 4px rgba(0, 0, 0, 0.35);
+}
diff --git a/guns-front-project/src/components/layout/style/themes/dynamic.less b/guns-front-project/src/components/layout/style/themes/dynamic.less
new file mode 100644
index 00000000..987783d0
--- /dev/null
+++ b/guns-front-project/src/components/layout/style/themes/dynamic.less
@@ -0,0 +1,4 @@
+/** 动态主题 */
+@import './default.less';
+@import './dynamic-default.less';
+@import './dynamic-dark.less';
diff --git a/guns-front-project/src/components/layout/util.js b/guns-front-project/src/components/layout/util.js
new file mode 100644
index 00000000..2475e8a2
--- /dev/null
+++ b/guns-front-project/src/components/layout/util.js
@@ -0,0 +1,456 @@
+import { isExternalLink, eachTreeData } from '@/utils/common/menu-util'
+import { message } from 'ant-design-vue';
+import debounce from 'lodash-es/debounce';
+import { inject, computed, unref, onBeforeUnmount } from 'vue';
+
+/**
+ * 色弱模式 class
+ */
+export const WEAK_CLASS = 'guns-admin-weak';
+
+/**
+ * 关闭布局响应式后 body 限制最小宽度的 class
+ */
+export const BODY_LIMIT_CLASS = 'guns-body-limit-width';
+
+/**
+ * 布局禁用过渡动画 class
+ */
+export const DISABLES_CLASS = 'guns-transition-disabled';
+
+
+/**
+ * 获取菜单包含所有父级
+ */
+export function getMatchedMenus(
+ path,
+ menus,
+ parents
+ ) {
+ if (!parents) {
+ parents = [];
+ }
+ for (let i = 0; i < menus.length; i++) {
+ const m = menus[i];
+ if (m.path === path) {
+ return parents.concat([m]);
+ } else if (m.children?.length) {
+ const result = getMatchedMenus(path, m.children, parents.concat([m]));
+ if (result) {
+ return result;
+ }
+ }
+ }
+ }
+
+ /**
+ * provide key
+ */
+export const PROVIDE_KEY = 'GunsGlobalConfig';
+
+/**
+ * layout provide key
+ */
+export const LAYOUT_KEY = 'GunsLayoutState';
+
+/**
+ * 获取屏幕宽度
+ */
+export function screenWidth() {
+ return document.documentElement.clientWidth || document.body.clientWidth;
+}
+
+/**
+ * 获取屏幕高度
+ */
+export function screenHeight() {
+ return document.documentElement.clientHeight || document.body.clientHeight;
+}
+
+/**
+ * 获取内容区域宽度
+ */
+export function contentWidth() {
+ return (
+ document.querySelector('.guns-admin-content-view')?.clientWidth ??
+ screenWidth()
+ );
+}
+
+/**
+ * 获取内容区域高度
+ */
+export function contentHeight() {
+ return (
+ document.querySelector('.guns-admin-content-view')?.clientHeight ??
+ screenHeight()
+ );
+}
+
+/**
+ * 处理树形数据
+ * @param data 需要处理的数据
+ * @param formatter 处理器
+ * @param childrenField children 字段名
+ */
+export function formatTreeData(
+ data,
+ formatter,
+ childrenField = 'children',
+ resultChildrenField = 'children',
+ parent
+ ) {
+ const result = [];
+ data?.forEach((d, i) => {
+ const item = formatter(d, i, parent);
+ if (item) {
+ if (d[childrenField]?.length) {
+ item[resultChildrenField] = formatTreeData(
+ d[childrenField],
+ formatter,
+ childrenField,
+ resultChildrenField,
+ item
+ );
+ }
+ result.push(item);
+ }
+ });
+ return result;
+}
+
+/**
+ * 获取路由对应的菜单数据
+ * @param path 路由地址
+ * @param fullPath 路由完整地址
+ * @param meta 路由元数据
+ * @param menus 菜单数据
+ */
+export function getRouteMatched(
+ path,
+ fullPath,
+ meta,
+ menus
+) {
+ // 菜单层级选中
+ const { active, activeOther, title, icon } = (() => {
+ if (meta?.active) {
+ return {
+ active: meta?.active,
+ activeOther: true,
+ icon: getMenuIcon(path, fullPath, menus),
+ title: getMenuTitle(path, fullPath, menus)
+ };
+ }
+ const temp = findMenuByPath(fullPath, menus);
+ if (temp) {
+ return {
+ active: fullPath,
+ activeOther: false,
+ icon: temp.meta?.icon,
+ title: temp.meta?.title
+ };
+ }
+ return {
+ active: path,
+ activeOther: false,
+ icon: getMenuIcon(path, fullPath, menus),
+ title: getMenuTitle(path, fullPath, menus)
+ };
+ })();
+ const matched = getMatchedMenus(active, menus);
+ return { active, matched, activeOther, title: title ?? meta.title, icon: icon ?? meta.icon };
+}
+
+/**
+ * 获取菜单标题
+ * @param path 路由地址
+ * @param fullPath 路由完整地址
+ * @param menus 菜单数据
+ */
+export function getMenuTitle(
+ path,
+ fullPath,
+ menus
+) {
+ return getRouteMenu(path, fullPath, menus)?.meta?.title;
+}
+
+/**
+ * 获取菜单图标
+ * @param path 路由地址
+ * @param fullPath 路由完整地址
+ * @param menus 菜单数据
+ */
+export function getMenuIcon(
+ path,
+ fullPath,
+ menus
+) {
+ return getRouteMenu(path, fullPath, menus)?.meta?.icon;
+}
+
+/**
+ * 获取路由对应的菜单
+ * @param path 路由地址
+ * @param fullPath 路由完整地址
+ * @param menus 菜单数据
+ */
+export function getRouteMenu(
+ path,
+ fullPath,
+ menus
+) {
+ const temp = findMenuByPath(fullPath, menus);
+ if (temp) {
+ return temp;
+ }
+ return findMenuByPath(path, menus);
+}
+
+/**
+ * 获取面包屑导航数据
+ * @param isHome 是否是主页
+ * @param homePath 主页地址
+ * @param homeTitle 主页名称
+ * @param matched 匹配的菜单层级
+ * @param activeOther 是否是选中其它的菜单
+ * @param routeI18n 菜单标题国际化处理
+ * @param path 当前路由地址
+ * @param fullPath 当前路由完整地址
+ * @param meta 当前路由元数据
+ * @param menus 菜单数据
+ */
+export function getMatchedLevels(
+ isHome,
+ homePath,
+ homeTitle,
+ matched,
+ activeOther,
+ routeI18n,
+ path,
+ fullPath,
+ meta,
+ menus,
+ tabs
+) {
+ const levels = [];
+ if (!isHome) {
+ levels.push({
+ home: true,
+ path: homePath,
+ fullPath: homePath,
+ title: homeTitle
+ });
+ }
+ matched?.forEach((m) => {
+ if (m.meta && m.meta.title && m.meta.breadcrumb !== false) {
+ const t = findTabByPath(m.path, tabs);
+ levels.push({
+ path: m.path,
+ fullPath: m.path,
+ title: routeI18n(m.path) || t?.title || m.meta.title
+ });
+ }
+ });
+ if (
+ activeOther &&
+ (!levels.length || path !== levels[levels.length - 1].path) &&
+ meta.title
+ ) {
+ const t = findTabByPath(fullPath, tabs);
+ const m = findMenuByPath(meta.routePath, menus);
+ levels.push({
+ path: path,
+ fullPath: fullPath,
+ title: routeI18n(path) || t?.title || m?.meta?.title || meta.title
+ });
+ }
+ return levels;
+}
+
+/**
+ * 获取路由对应的组件名称
+ * @param matched 路由匹配数据
+ */
+export function getMatchedComponents(matched) {
+ const components = [];
+ matched.forEach((m) => {
+ if (m.components?.default?.name) {
+ components.push(m.components.default.name);
+ }
+ });
+ return components;
+}
+
+/**
+ * 获取 path 对应的菜单数据
+ * @param path 菜单地址
+ * @param menus 全部菜单数据
+ */
+export function findMenuByPath(path, menus) {
+ if (path == null || menus == null) {
+ return;
+ }
+ let data;
+ eachTreeData(menus, (d) => {
+ if (path === d.path) {
+ data = d;
+ return false;
+ }
+ });
+ return data;
+}
+
+/**
+ * 判断路由是否是主页
+ * @param route 路由信息
+ * @param homePath 主页地址
+ */
+export function isHomeRoute(
+ route,
+ homePath,
+ layoutPath
+) {
+ const { path, matched } = route;
+ if (homePath === path) {
+ return true;
+ }
+ return !!(
+ matched[0] &&
+ (!matched[0].path || matched[0].path === layoutPath) &&
+ matched[0].redirect === path
+ );
+}
+
+/**
+ * 获取 path 对应的页签数据
+ * @param path 路由地址
+ * @param tabs 全部页签数据
+ */
+export function findTabByPath(path, tabs) {
+ if (path == null || tabs == null) {
+ return;
+ }
+ for (let i = 0; i < tabs.length; i++) {
+ if (path === tabs[i].key || path === tabs[i].fullPath) {
+ return tabs[i];
+ }
+ }
+}
+
+/**
+ * 菜单标题国际化方法
+ */
+export function menuTitleI18n({
+ path,
+ locale,
+ i18n,
+ menu,
+ menus
+}) {
+ if (i18n && path) {
+ const key = routeI18nKey(path);
+ if (!menu) {
+ menu = findMenuByPath(path, menus);
+ }
+ return i18n(path, key, menu, locale);
+ }
+}
+
+/**
+ * 获取路由地址对应的 i18n key
+ * @param path 路由地址
+ */
+export function routeI18nKey(path) {
+ if (isExternalLink(path)) {
+ return path.replace(/\.(\w)/g, (_$0, $1) => $1.toUpperCase());
+ } else if (!path || path === '/') {
+ return;
+ }
+ const k = path.startsWith('/') ? path.substring(1) : path;
+ return k
+ .replace(/-(\w)/g, (_$0, $1) => $1.toUpperCase())
+ .replace(/_(\w)/g, (_$0, $1) => $1.toUpperCase())
+ .replace(/\//g, '.');
+}
+
+/**
+ * 绑定窗口事件监听
+ */
+export function useWindowListener({
+ onResize,
+ onEscKeydown
+}) {
+ // 窗口大小改变监听器
+ const onResizeListener = debounce(() => {
+ onResize();
+ }, 500);
+
+ // 键盘事件监听器
+ const onKeydownListener = (e) => {
+ if (e.keyCode === 27) {
+ onEscKeydown(e);
+ }
+ };
+
+ window.addEventListener('resize', onResizeListener);
+ window.addEventListener('keydown', onKeydownListener);
+
+ onBeforeUnmount(() => {
+ window.removeEventListener('resize', onResizeListener);
+ window.removeEventListener('keydown', onKeydownListener);
+ });
+}
+
+
+/**
+ * 获取布局状态
+ */
+export function useLayoutState(d) {
+ return inject(LAYOUT_KEY, d);
+}
+
+/**
+ * 获取是否开启布局响应
+ */
+export function useResponsive(props) {
+ const state = useLayoutState();
+ return computed(() => {
+ return props.responsive ?? unref(state)?.styleResponsive ?? true;
+ });
+}
+
+/**
+ * 带遮罩层的加载框
+ */
+export function messageLoading(
+ content,
+ duration,
+ onClose
+) {
+ const classes = ['guns-message-loading'];
+ const option = {};
+ if (typeof content === 'object' && content !== null) {
+ Object.assign(option, content);
+ if ((content).mask) {
+ classes.push('guns-message-mask');
+ }
+ if ((content).center) {
+ classes.push('guns-message-center');
+ }
+ if ((content).class) {
+ classes.push((content).class);
+ }
+ } else {
+ option.content = content;
+ if (typeof duration === 'function') {
+ option.onClose = duration;
+ } else {
+ option.duration = duration;
+ option.onClose = onClose;
+ }
+ }
+ option.class = classes.join(' ');
+ return message.loading(option);
+}
\ No newline at end of file
diff --git a/guns-front-project/src/config/setting.js b/guns-front-project/src/config/setting.js
new file mode 100644
index 00000000..c298b837
--- /dev/null
+++ b/guns-front-project/src/config/setting.js
@@ -0,0 +1,105 @@
+// 是否使用验证码
+export const CAPTCHA_FLAG = false;
+
+// 是否开启单点登录
+export const SSO_FLAG = false;
+
+// 是否使用多租户
+export const SAAS_FLAG = true;
+
+// 是否显示修改主题
+export const SHOW_THEME = true;
+
+// 是否显示修改多语言
+export const SHOW_I18n = true;
+
+// 是否使用图形验证码
+export const DRAW_CAPTCHA_FLAG = false;
+// SQL监控地址
+export const SQL_MONITOR_URL = 'http://localhost:8080/druid';
+
+// 接口地址前缀
+export const API_BASE_PREFIX = import.meta.env.VITE_API_PREFIX;
+
+// 项目名称
+export const PROJECT_NAME = import.meta.env.VITE_APP_NAME;
+
+// 单点服务器
+export const SSO_HOST = import.meta.env.VITE_APP_SSO_HOST;
+
+// 单点客户端id标识
+export const SSO_CLIENT_ID = import.meta.env.VITE_APP_SSO_ID;
+
+// 单点客户端id标识
+export const BACKEND_HOST = import.meta.env.VITE_APP_BACKEND_HOST;
+
+// context-path
+export const BASE_URL = import.meta.env.BASE_URL;
+
+// 不显示侧栏的路由
+export const HIDE_SIDEBARS = [];
+
+// 不显示页脚的路由
+export const HIDE_FOOTERS = [''];
+
+// 页签同路由不同参数可重复打开的路由
+export const REPEATABLE_TABS = ['/system/user-info'];
+
+// 不需要登录的路由
+export const WHITE_LIST = ['/login', '/forget', '/sso', '/tokenLogin'];
+
+// 开启 KeepAlive 后仍然不需要缓存的路由地址
+export const KEEP_ALIVE_EXCLUDES = [];
+
+// 直接指定菜单数据
+export const USER_MENUS = undefined;
+
+// 首页名称, 为空则取第一个菜单的名称
+export const HOME_TITLE = undefined;
+
+// 首页路径, 为空则取第一个菜单的地址
+export const HOME_PATH = undefined;
+
+// 外层布局的路由地址
+export const LAYOUT_PATH = '/';
+
+// 刷新路由的路由地址
+export const REDIRECT_PATH = '/redirect';
+
+// 开启页签栏是否缓存组件
+//export const TAB_KEEP_ALIVE = !import.meta.env.DEV;
+export const TAB_KEEP_ALIVE = true;
+
+// token 传递的 header 名称
+export const TOKEN_HEADER_NAME = 'Authorization';
+
+// token 存储的名称
+export const TOKEN_STORE_NAME = 'access_token';
+
+// 主题配置存储的名称
+export const THEME_STORE_NAME = 'theme';
+
+// i18n 缓存的名称
+export const I18N_CACHE_NAME = 'i18n-lang';
+
+// 是否开启国际化功能
+export const I18N_ENABLE = false;
+
+// 消息类型常量
+export const WEBSOCKET_MESSAGE_TYPE = {
+ // 服务端发过来的消息类型
+ server: {
+ // 系统通知消息类型
+ SYS_NOTICE_MSG_TYPE: 'SYS_NOTICE'
+ },
+ // 发送给服务器的消息类型
+ client: {
+ // 创建websocket连接时候的鉴权,发送token
+ USER_CONNECTION_AUTHENTICATION: '200000'
+ }
+};
+
+// 登录接口-是否需要rsa加密
+export const IS_NEED_RSA = false;
+// 是否显示新的流程设计
+export const SHOW_NEW_FLOW_DESIGN = false;
\ No newline at end of file
diff --git a/guns-front-project/src/homeLayout/index.vue b/guns-front-project/src/homeLayout/index.vue
new file mode 100644
index 00000000..4a69db8b
--- /dev/null
+++ b/guns-front-project/src/homeLayout/index.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/i18n/index.js b/guns-front-project/src/i18n/index.js
new file mode 100644
index 00000000..7af0dbd9
--- /dev/null
+++ b/guns-front-project/src/i18n/index.js
@@ -0,0 +1,20 @@
+/**
+ * 国际化配置
+ */
+import { createI18n } from 'vue-i18n';
+import { I18N_CACHE_NAME } from '@/config/setting';
+import zh_CN from './lang/zh_CN';
+import zh_TW from './lang/zh_TW';
+import en from './lang/en';
+
+const messages = { zh_CN, zh_TW, en };
+
+const i18n = createI18n({
+ messages,
+ legacy: false,
+ silentTranslationWarn: true,
+ // 默认语言
+ locale: localStorage.getItem(I18N_CACHE_NAME) || 'zh_CN'
+});
+
+export default i18n;
diff --git a/guns-front-project/src/i18n/lang/en/index.js b/guns-front-project/src/i18n/lang/en/index.js
new file mode 100644
index 00000000..743cea1a
--- /dev/null
+++ b/guns-front-project/src/i18n/lang/en/index.js
@@ -0,0 +1,14 @@
+/**
+ * 英语
+ */
+import route from './route';
+import layout from './layout';
+import login from './login';
+import list from './list';
+
+export default {
+ route,
+ layout,
+ login,
+ list
+};
diff --git a/guns-front-project/src/i18n/lang/en/layout.js b/guns-front-project/src/i18n/lang/en/layout.js
new file mode 100644
index 00000000..0618d8c1
--- /dev/null
+++ b/guns-front-project/src/i18n/lang/en/layout.js
@@ -0,0 +1,78 @@
+/* 主框架 */
+export default {
+ home: 'Home',
+ header: {
+ profile: 'Profile',
+ userinfo: 'UserInfo',
+ password: 'Password',
+ logout: 'SignOut'
+ },
+ footer: {
+ website: 'Website',
+ document: 'Document',
+ authorization: 'Authorization',
+ copyright: 'Copyright © 2021 Wuhan EClouds Technology Co., Ltd'
+ },
+ logout: {
+ title: 'Confirm',
+ message: 'Are you sure you want to log out?'
+ },
+ setting: {
+ title: 'Theme Setting',
+ sideStyles: {
+ dark: 'Dark Sidebar',
+ light: 'Light Sidebar'
+ },
+ headStyles: {
+ light: 'Light Header',
+ dark: 'Dark Header',
+ primary: 'Primary Header'
+ },
+ layoutStyles: {
+ side: 'Side Menu Layout',
+ top: 'Top Menu Layout',
+ mix: 'Mix Menu Layout'
+ },
+ colors: {
+ default: 'Daybreak Blue',
+ dust: 'Dust Blue',
+ sunset: 'Sunset Orange',
+ volcano: 'Volcano',
+ purple: 'Golden Purple',
+ cyan: 'Cyan',
+ green: 'Polar Green',
+ geekblue: 'Geek Blue'
+ },
+ darkMode: 'Dark Mode',
+ layoutStyle: 'Navigation Mode',
+ sideMenuStyle: 'Sidebar Double Menu',
+ bodyFull: 'Body Fixed Width',
+ other: 'Other Setting',
+ fixedHeader: 'Fixed Header',
+ fixedSidebar: 'Fixed Sidebar',
+ fixedBody: 'Fixed Body',
+ logoAutoSize: 'Logo In Header',
+ styleResponsive: 'Responsive',
+ colorfulIcon: 'Colorful Icon',
+ sideUniqueOpen: 'Menu Unique Open',
+ weakMode: 'Weak Mode',
+ showFooter: 'Show Footer',
+ showTabs: 'Show Tabs',
+ tabStyle: 'Tab Style',
+ tabStyles: {
+ default: 'Default',
+ dot: 'Dot',
+ card: 'Card'
+ },
+ transitionName: 'Transition',
+ transitions: {
+ slideRight: 'Slide Right',
+ slideBottom: 'Slide Bottom',
+ zoomIn: 'Zoom In',
+ zoomOut: 'Zoom Out',
+ fade: 'Fade'
+ },
+ reset: 'Reset',
+ tips: 'It will remember your configuration the next time you open it.'
+ }
+};
diff --git a/guns-front-project/src/i18n/lang/en/list.js b/guns-front-project/src/i18n/lang/en/list.js
new file mode 100644
index 00000000..f8094520
--- /dev/null
+++ b/guns-front-project/src/i18n/lang/en/list.js
@@ -0,0 +1,17 @@
+/* 列表页面 */
+export default {
+ // 基础列表
+ basic: {
+ table: {
+ avatar: 'Avatar',
+ username: 'Username',
+ nickname: 'Nickname',
+ organizationName: 'Organization',
+ phone: 'Phone',
+ sexName: 'Sex',
+ createTime: 'CreateTime',
+ status: 'Status',
+ action: 'Action'
+ }
+ }
+};
diff --git a/guns-front-project/src/i18n/lang/en/login.js b/guns-front-project/src/i18n/lang/en/login.js
new file mode 100644
index 00000000..860f1a4a
--- /dev/null
+++ b/guns-front-project/src/i18n/lang/en/login.js
@@ -0,0 +1,11 @@
+/* 登录界面 */
+export default {
+ title: 'User Login',
+ username: 'please input username',
+ password: 'please input password',
+ code: 'please input code',
+ remember: 'remember',
+ forget: 'forget',
+ login: 'login',
+ loading: 'loading'
+};
diff --git a/guns-front-project/src/i18n/lang/en/route.js b/guns-front-project/src/i18n/lang/en/route.js
new file mode 100644
index 00000000..c03e374e
--- /dev/null
+++ b/guns-front-project/src/i18n/lang/en/route.js
@@ -0,0 +1,100 @@
+/* 菜单路由 */
+export default {
+ login: { _name: 'Login' },
+ forget: { _name: 'Forget' },
+ dashboard: {
+ _name: 'Dashboard',
+ workplace: { _name: 'Workplace' },
+ analysis: { _name: 'Analysis' },
+ monitor: { _name: 'Monitor' }
+ },
+ system: {
+ _name: 'System',
+ user: {
+ _name: 'User',
+ details: { _name: '' }
+ },
+ role: { _name: 'Role' },
+ menu: { _name: 'Menu' },
+ dictionary: { _name: 'Dictionary' },
+ organization: { _name: 'Organization' },
+ loginRecord: { _name: 'LoginRecord' },
+ operationRecord: { _name: 'OperationRecord' },
+ file: { _name: 'File' },
+ userInfo: { _name: '' }
+ },
+ form: {
+ _name: 'Form',
+ basic: { _name: 'Basic Form' },
+ advanced: { _name: 'Advanced Form' },
+ step: { _name: 'Step Form' }
+ },
+ list: {
+ _name: 'List',
+ basic: {
+ _name: 'Basic List',
+ add: { _name: 'UserAdd' },
+ edit: { _name: 'UserEdit' },
+ details: {
+ ':id': { _name: '' }
+ }
+ },
+ advanced: { _name: 'Advanced List' },
+ card: {
+ _name: 'Card List',
+ project: { _name: 'Project' },
+ application: { _name: 'Application' },
+ article: { _name: 'Article' }
+ }
+ },
+ result: {
+ _name: 'Result',
+ success: { _name: 'Success' },
+ fail: { _name: 'Fail' }
+ },
+ exception: {
+ _name: 'Exception',
+ 403: { _name: '403' },
+ 404: { _name: '404' },
+ 500: { _name: '500' }
+ },
+ user: {
+ _name: 'User',
+ profile: { _name: 'Profile' },
+ message: { _name: 'Message' }
+ },
+ extension: {
+ _name: 'Extension',
+ tag: { _name: 'Tags' },
+ dialog: { _name: 'DragDialog' },
+ file: { _name: 'FileList' },
+ upload: { _name: 'ImageUpload' },
+ dragsort: { _name: 'DragSort' },
+ colorPicker: { _name: 'ColorPicker' },
+ regions: { _name: 'CitySelect' },
+ printer: { _name: 'Printer' },
+ excel: { _name: 'Excel' },
+ countUp: { _name: 'CountUp' },
+ tableSelect: { _name: 'TableSelect' },
+ player: { _name: 'Player' },
+ map: { _name: 'Map' },
+ qrCode: { _name: 'QRCode' },
+ barCode: { _name: 'BarCode' },
+ editor: { _name: 'Editor' },
+ markdown: { _name: 'Markdown' },
+ dashboard: { _name: 'Dashboard' },
+ tour: { _name: 'Tour' },
+ watermark: { _name: 'Watermark' },
+ split: { _name: 'SplitPanel' }
+ },
+ example: {
+ _name: 'Example',
+ table: { _name: 'ProTable' },
+ menuBadge: { _name: 'MenuBadge' },
+ eleadmin: { _name: 'IFrame' },
+ eleadminDoc: { _name: 'IFrame2' },
+ document: { _name: 'Document' },
+ choose: { _name: 'Choose' }
+ },
+ 'https://eleadminCom/goods/9': { _name: 'Authorization' }
+};
diff --git a/guns-front-project/src/i18n/lang/zh_CN/index.js b/guns-front-project/src/i18n/lang/zh_CN/index.js
new file mode 100644
index 00000000..282e79eb
--- /dev/null
+++ b/guns-front-project/src/i18n/lang/zh_CN/index.js
@@ -0,0 +1,14 @@
+/**
+ * 简体中文
+ */
+import route from './route';
+import layout from './layout';
+import login from './login';
+import list from './list';
+
+export default {
+ route,
+ layout,
+ login,
+ list
+};
diff --git a/guns-front-project/src/i18n/lang/zh_CN/layout.js b/guns-front-project/src/i18n/lang/zh_CN/layout.js
new file mode 100644
index 00000000..4933797f
--- /dev/null
+++ b/guns-front-project/src/i18n/lang/zh_CN/layout.js
@@ -0,0 +1,78 @@
+/* 主框架 */
+export default {
+ home: '主页',
+ header: {
+ profile: '个人中心',
+ userinfo: '个人信息',
+ password: '修改密码',
+ logout: '退出登录'
+ },
+ footer: {
+ website: '官网',
+ document: '文档',
+ authorization: '授权',
+ copyright: 'Copyright © 2022 javaguns.com'
+ },
+ logout: {
+ title: '提示',
+ message: '确定要退出登录吗?'
+ },
+ setting: {
+ title: '整体风格设置',
+ sideStyles: {
+ dark: '暗色侧边栏',
+ light: '亮色侧边栏'
+ },
+ headStyles: {
+ light: '亮色顶栏',
+ dark: '暗色顶栏',
+ primary: '主色顶栏'
+ },
+ layoutStyles: {
+ side: '左侧菜单布局',
+ top: '顶部菜单布局',
+ mix: '混合菜单布局'
+ },
+ colors: {
+ default: '拂晓蓝',
+ dust: '薄暮',
+ sunset: '日暮',
+ volcano: '火山',
+ purple: '酱紫',
+ cyan: '明青',
+ green: '极光绿',
+ geekblue: '极客蓝'
+ },
+ darkMode: '开启暗黑模式',
+ layoutStyle: '导航模式',
+ sideMenuStyle: '侧栏双排菜单',
+ bodyFull: '内容区域定宽',
+ other: '其它配置',
+ fixedHeader: '固定顶栏区域',
+ fixedSidebar: '固定侧栏区域',
+ fixedBody: '固定主体区域',
+ logoAutoSize: 'Logo置于顶栏',
+ styleResponsive: '移动端响应式',
+ colorfulIcon: '侧栏彩色图标',
+ sideUniqueOpen: '侧栏排他展开',
+ weakMode: '开启色弱模式',
+ showFooter: '开启全局页脚',
+ showTabs: '开启多页签栏',
+ tabStyle: '页签显示风格',
+ tabStyles: {
+ default: '默认',
+ dot: '圆点',
+ card: '卡片'
+ },
+ transitionName: '路由切换动画',
+ transitions: {
+ slideRight: '滑动消退',
+ slideBottom: '底部消退',
+ zoomIn: '放大渐变',
+ zoomOut: '缩小渐变',
+ fade: '淡入淡出'
+ },
+ reset: '重置',
+ tips: '该功能可实时预览各种布局效果, 修改后会缓存在本地, 下次打开会记忆主题配置.'
+ }
+};
diff --git a/guns-front-project/src/i18n/lang/zh_CN/list.js b/guns-front-project/src/i18n/lang/zh_CN/list.js
new file mode 100644
index 00000000..4011464e
--- /dev/null
+++ b/guns-front-project/src/i18n/lang/zh_CN/list.js
@@ -0,0 +1,17 @@
+/* 列表页面 */
+export default {
+ // 基础列表
+ basic: {
+ table: {
+ avatar: '头像',
+ username: '用户账号',
+ nickname: '用户名',
+ organizationName: '组织机构',
+ phone: '手机号',
+ sexName: '性别',
+ createTime: '创建时间',
+ status: '状态',
+ action: '操作'
+ }
+ }
+};
diff --git a/guns-front-project/src/i18n/lang/zh_CN/login.js b/guns-front-project/src/i18n/lang/zh_CN/login.js
new file mode 100644
index 00000000..d7d54cff
--- /dev/null
+++ b/guns-front-project/src/i18n/lang/zh_CN/login.js
@@ -0,0 +1,11 @@
+/* 登录界面 */
+export default {
+ title: '用户登录',
+ username: '请输入登录账号',
+ password: '请输入登录密码',
+ code: '请输入验证码',
+ remember: '记住密码',
+ forget: '忘记密码',
+ login: '登录',
+ loading: '登录中'
+};
diff --git a/guns-front-project/src/i18n/lang/zh_CN/route.js b/guns-front-project/src/i18n/lang/zh_CN/route.js
new file mode 100644
index 00000000..b411e2fa
--- /dev/null
+++ b/guns-front-project/src/i18n/lang/zh_CN/route.js
@@ -0,0 +1,101 @@
+/* 菜单路由 */
+export default {
+ login: { _name: '登录' },
+ forget: { _name: '忘记密码' },
+ dashboard: {
+ _name: '控制面板',
+ workplace: { _name: '工作台' },
+ analysis: { _name: '分析页' },
+ monitor: { _name: '监控页' }
+ },
+ system: {
+ _name: '系统用户',
+ user: {
+ _name: '用户管理',
+ add: { _name: '添加用户' },
+ edit: { _name: '修改用户' },
+ details: { _name: '' }
+ },
+ role: { _name: '角色管理' },
+ menu: { _name: '菜单管理' },
+ dictionary: { _name: '字典管理' },
+ organization: { _name: '机构管理' },
+ loginRecord: { _name: '登录日志' },
+ operationRecord: { _name: '操作日志' },
+ file: { _name: '文件管理' }
+ },
+ form: {
+ _name: '表单页面',
+ basic: { _name: '基础表单' },
+ advanced: { _name: '复杂表单' },
+ step: { _name: '分步表单' }
+ },
+ list: {
+ _name: '列表页面',
+ basic: {
+ _name: '基础列表',
+ add: { _name: '添加用户' },
+ edit: { _name: '修改用户' },
+ details: {
+ ':id': { _name: '' }
+ }
+ },
+ advanced: { _name: '复杂列表' },
+ card: {
+ _name: '卡片列表',
+ project: { _name: '项目列表' },
+ application: { _name: '应用列表' },
+ article: { _name: '文章列表' }
+ }
+ },
+ result: {
+ _name: '结果页面',
+ success: { _name: '成功页' },
+ fail: { _name: '失败页' }
+ },
+ exception: {
+ _name: '异常页面',
+ 403: { _name: '403' },
+ 404: { _name: '404' },
+ 500: { _name: '500' }
+ },
+ user: {
+ _name: '个人中心',
+ profile: { _name: '个人资料' },
+ message: { _name: '我的消息' }
+ },
+ extension: {
+ _name: '扩展组件',
+ tag: { _name: '标签组件' },
+ dialog: { _name: '拖拽弹窗' },
+ file: { _name: '文件列表' },
+ upload: { _name: '图片上传' },
+ dragsort: { _name: '拖拽排序' },
+ colorPicker: { _name: '颜色选择' },
+ regions: { _name: '城市选择' },
+ printer: { _name: '打印插件' },
+ excel: { _name: 'excel插件' },
+ countUp: { _name: '滚动数字' },
+ tableSelect: { _name: '表格下拉' },
+ player: { _name: '视频播放' },
+ map: { _name: '地图组件' },
+ qrCode: { _name: '二维码' },
+ barCode: { _name: '条形码' },
+ editor: { _name: '富文本框' },
+ markdown: { _name: 'markdown' },
+ dashboard: { _name: '仪表盘' },
+ tour: { _name: '引导组件' },
+ watermark: { _name: '水印组件' },
+ split: { _name: '分割面板' }
+ },
+ example: {
+ _name: '常用实例',
+ table: { _name: '表格实例' },
+ menuBadge: { _name: '菜单徽章' },
+ eleadmin: { _name: '内嵌页面' },
+ eleadminDoc: { _name: '内嵌文档' },
+ document: { _name: '案卷调整' },
+ choose: { _name: '批量选择' }
+ },
+ 'https://eleadminCom/goods/9': { _name: '获取授权' }
+};
diff --git a/guns-front-project/src/i18n/lang/zh_TW/index.js b/guns-front-project/src/i18n/lang/zh_TW/index.js
new file mode 100644
index 00000000..50057e35
--- /dev/null
+++ b/guns-front-project/src/i18n/lang/zh_TW/index.js
@@ -0,0 +1,14 @@
+/**
+ * 繁体中文
+ */
+import route from './route';
+import layout from './layout';
+import login from './login';
+import list from './list';
+
+export default {
+ route,
+ layout,
+ login,
+ list
+};
diff --git a/guns-front-project/src/i18n/lang/zh_TW/layout.js b/guns-front-project/src/i18n/lang/zh_TW/layout.js
new file mode 100644
index 00000000..71480640
--- /dev/null
+++ b/guns-front-project/src/i18n/lang/zh_TW/layout.js
@@ -0,0 +1,78 @@
+/* 主框架 */
+export default {
+ home: '主頁',
+ header: {
+ profile: '個人中心',
+ userinfo: '個人信息',
+ password: '修改密碼',
+ logout: '安全登出'
+ },
+ footer: {
+ website: '官網',
+ document: '檔案',
+ authorization: '授權',
+ copyright: 'Copyright © 2022 javaguns.com'
+ },
+ logout: {
+ title: '詢問',
+ message: '確定要登出嗎?'
+ },
+ setting: {
+ title: '整體風格設定',
+ sideStyles: {
+ dark: '暗色側邊欄',
+ light: '亮色側邊欄'
+ },
+ headStyles: {
+ light: '亮色頂欄',
+ dark: '暗色頂欄',
+ primary: '主色頂欄'
+ },
+ layoutStyles: {
+ side: '左側選單佈局',
+ top: '頂部選單佈局',
+ mix: '混合選單佈局'
+ },
+ colors: {
+ default: '拂曉藍',
+ dust: '薄暮',
+ sunset: '日暮',
+ volcano: '火山',
+ purple: '醬紫',
+ cyan: '明青',
+ green: '極光綠',
+ geekblue: '極客藍'
+ },
+ darkMode: '開啟暗黑模式',
+ layoutStyle: '導航模式',
+ sideMenuStyle: '側欄雙排選單',
+ bodyFull: '內容區域定寬',
+ other: '其它配寘',
+ fixedHeader: '固定頂欄區域',
+ fixedSidebar: '固定側欄區域',
+ fixedBody: '固定主體區域',
+ logoAutoSize: 'Logo置於頂欄',
+ styleResponsive: '移動端響應式',
+ colorfulIcon: '側欄彩色圖標',
+ sideUniqueOpen: '側欄排他展開',
+ weakMode: '開啟色弱模式',
+ showFooter: '開啟全域頁腳',
+ showTabs: '開啟多頁簽欄',
+ tabStyle: '頁簽顯示風格',
+ tabStyles: {
+ default: '默認',
+ dot: '圓點',
+ card: '卡片'
+ },
+ transitionName: '路由切換動畫',
+ transitions: {
+ slideRight: '滑動消退',
+ slideBottom: '底部消退',
+ zoomIn: '放大漸變',
+ zoomOut: '縮小漸變',
+ fade: '淡入淡出'
+ },
+ reset: '重置',
+ tips: '該功能可實时預覽各種佈局效果,修改後會緩存在本地,下次打開會記憶主題配寘.'
+ }
+};
diff --git a/guns-front-project/src/i18n/lang/zh_TW/list.js b/guns-front-project/src/i18n/lang/zh_TW/list.js
new file mode 100644
index 00000000..f24c25fd
--- /dev/null
+++ b/guns-front-project/src/i18n/lang/zh_TW/list.js
@@ -0,0 +1,17 @@
+/* 列表页面 */
+export default {
+ // 基础列表
+ basic: {
+ table: {
+ avatar: '頭像',
+ username: '用戶賬號',
+ nickname: '用戶名',
+ organizationName: '組織機構',
+ phone: '手機號',
+ sexName: '性別',
+ createTime: '創建時間',
+ status: '狀態',
+ action: '操作'
+ }
+ }
+};
diff --git a/guns-front-project/src/i18n/lang/zh_TW/login.js b/guns-front-project/src/i18n/lang/zh_TW/login.js
new file mode 100644
index 00000000..5cd7b85a
--- /dev/null
+++ b/guns-front-project/src/i18n/lang/zh_TW/login.js
@@ -0,0 +1,11 @@
+/* 登录界面 */
+export default {
+ title: '用戶登錄',
+ username: '請輸入登入帳號',
+ password: '請輸入登入密碼',
+ code: '請輸入驗證碼',
+ remember: '記住密碼',
+ forget: '忘記密碼',
+ login: '登入',
+ loading: '登入中'
+};
diff --git a/guns-front-project/src/i18n/lang/zh_TW/route.js b/guns-front-project/src/i18n/lang/zh_TW/route.js
new file mode 100644
index 00000000..b37a600f
--- /dev/null
+++ b/guns-front-project/src/i18n/lang/zh_TW/route.js
@@ -0,0 +1,101 @@
+/* 菜单路由 */
+export default {
+ login: { _name: '登入' },
+ forget: { _name: '忘記密碼' },
+ dashboard: {
+ _name: 'Dashboard',
+ workplace: { _name: '工作臺' },
+ analysis: { _name: '分析頁' },
+ monitor: { _name: '監控頁' }
+ },
+ system: {
+ _name: '系統管理',
+ user: {
+ _name: '用戶管理',
+ add: { _name: '添加用戶' },
+ edit: { _name: '編輯用戶' },
+ details: { _name: '' }
+ },
+ role: { _name: '角色管理' },
+ menu: { _name: '選單管理' },
+ dictionary: { _name: '字典管理' },
+ organization: { _name: '機构管理' },
+ loginRecord: { _name: '登入日誌' },
+ operationRecord: { _name: '操作日誌' },
+ file: { _name: '檔案管理' }
+ },
+ form: {
+ _name: '表單頁面',
+ basic: { _name: '基礎表單' },
+ advanced: { _name: '複雜表單' },
+ step: { _name: '分步表單' }
+ },
+ list: {
+ _name: '清單頁面',
+ basic: {
+ _name: '基礎清單',
+ add: { _name: '添加用戶' },
+ edit: { _name: '編輯用戶' },
+ details: {
+ ':id': { _name: '' }
+ }
+ },
+ advanced: { _name: '複雜清單' },
+ card: {
+ _name: '卡片清單',
+ project: { _name: '項目清單' },
+ application: { _name: '應用清單' },
+ article: { _name: '文章清單' }
+ }
+ },
+ result: {
+ _name: '結果頁面',
+ success: { _name: '成功頁' },
+ fail: { _name: '失敗頁' }
+ },
+ exception: {
+ _name: '异常頁面',
+ 403: { _name: '403' },
+ 404: { _name: '404' },
+ 500: { _name: '500' }
+ },
+ user: {
+ _name: '個人中心',
+ profile: { _name: '個人資料' },
+ message: { _name: '我的消息' }
+ },
+ extension: {
+ _name: '擴展組件',
+ tag: { _name: '標籤組件' },
+ dialog: { _name: '拖拽彈窗' },
+ file: { _name: '檔案清單' },
+ upload: { _name: '圖片上傳' },
+ dragsort: { _name: '拖拽排序' },
+ colorPicker: { _name: '顏色選擇' },
+ regions: { _name: '城市選擇' },
+ printer: { _name: '列印挿件' },
+ excel: { _name: 'excel挿件' },
+ countUp: { _name: '滾動數字' },
+ tableSelect: { _name: '表格下拉' },
+ player: { _name: '視頻播放' },
+ map: { _name: '地圖組件' },
+ qrCode: { _name: '二維碼' },
+ barCode: { _name: '條形碼' },
+ editor: { _name: '富文本框' },
+ markdown: { _name: 'markdown' },
+ dashboard: { _name: '儀錶盤' },
+ tour: { _name: '引導組件' },
+ watermark: { _name: '水印組件' },
+ split: { _name: '水印组件' }
+ },
+ example: {
+ _name: '常用實例',
+ table: { _name: '表格實例' },
+ menuBadge: { _name: '選單徽章' },
+ eleadmin: { _name: '內嵌頁面' },
+ eleadminDoc: { _name: '内嵌文檔' },
+ document: { _name: '案卷調整' },
+ choose: { _name: '批量選擇' }
+ },
+ 'https://eleadminCom/goods/9': { _name: '獲取授權' }
+};
diff --git a/guns-front-project/src/i18n/use-locale.js b/guns-front-project/src/i18n/use-locale.js
new file mode 100644
index 00000000..6401b4ac
--- /dev/null
+++ b/guns-front-project/src/i18n/use-locale.js
@@ -0,0 +1,36 @@
+/**
+ * AntDesignVue、Dayjs 国际化配置
+ */
+import { ref, watch } from 'vue';
+import { useI18n } from 'vue-i18n';
+// AntDesignVue
+import zh_CN from 'ant-design-vue/es/locale/zh_CN';
+import zh_TW from 'ant-design-vue/es/locale/zh_TW';
+import en from 'ant-design-vue/es/locale/en_US';
+//
+import gunsZh_CN from './lang/zh_CN';
+import gunsZh_TW from './lang/zh_TW';
+import gunsEn from './lang/en';
+// Dayjs
+import dayjs from 'dayjs';
+import 'dayjs/locale/zh-cn';
+import 'dayjs/locale/zh-tw';
+const antLocales = { zh_CN, zh_TW, en };
+const eleLocales = { zh_CN: gunsZh_CN, zh_TW: gunsZh_TW, en: gunsEn };
+
+export function useLocale() {
+ const { locale } = useI18n();
+ const antLocale = ref();
+ const eleLocale = ref();
+
+ watch(
+ locale,
+ () => {
+ antLocale.value = antLocales[locale.value];
+ eleLocale.value = eleLocales[locale.value];
+ dayjs.locale(locale.value.toLowerCase().replace(/_/g, '-'));
+ },
+ { immediate: true }
+ );
+ return { antLocale, eleLocale };
+}
diff --git a/guns-front-project/src/layout/api/LayoutApi.js b/guns-front-project/src/layout/api/LayoutApi.js
new file mode 100644
index 00000000..9df775be
--- /dev/null
+++ b/guns-front-project/src/layout/api/LayoutApi.js
@@ -0,0 +1,23 @@
+import request from '@/utils/request/request';
+
+/**
+ * 获取当前登录的用户信息、菜单、权限、角色
+ */
+export async function getUserInfo() {
+ const res = await request.get('/userIndexInfo');
+ if (res.data.code === '00000' && res.data.data) {
+ return res.data.data;
+ }
+ return Promise.reject(new Error(res.data.message));
+}
+
+/**
+ * 修改当前登录的用户密码
+ */
+export async function updatePassword(data) {
+ const res = await request.post('/sysUser/updatePassword', data);
+ if (res.data.code === '00000') {
+ return res.data.message ?? '修改成功';
+ }
+ return Promise.reject(new Error(res.data.message));
+}
diff --git a/guns-front-project/src/layout/api/NoticeApi.js b/guns-front-project/src/layout/api/NoticeApi.js
new file mode 100644
index 00000000..412926ef
--- /dev/null
+++ b/guns-front-project/src/layout/api/NoticeApi.js
@@ -0,0 +1,90 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 系统通知管理
+ *
+ * @author fengshuonan
+ * @date 2021/6/12 17:51
+ */
+export class NoticeApi {
+ /**
+ * 获取通知列表
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 16:07
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/sysMessage/page', params);
+ }
+
+ /**
+ * 获取当前用户未读消息
+ *
+ * @author fengshuonan
+ * @date 2021/6/12 18:20
+ */
+ static getUnReadMessages() {
+ return Request.getAndLoadData('/sysMessage/unReadMessageList');
+ }
+
+ /**
+ * 将当前用户未读消息标记未已读
+ *
+ * @author fengshuonan
+ * @date 2021/6/12 18:20
+ */
+ static setTotalRead() {
+ return Request.post('/sysMessage/setTotalRead');
+ }
+
+ /**
+ * 批量标记消息状态为已读
+ *
+ * @param {List} param.messageIdList 消息id集合
+ * @author fengshuonan
+ * @date 2021/6/12 18:20
+ */
+ static setRead(param) {
+ return Request.post('/sysMessage/setRead', param);
+ }
+
+ /**
+ * 删除通知
+ *
+ * @author fengshuonan
+ * @date 2021/6/14 21:17
+ */
+ static deleteNotice(param) {
+ return Request.post('/sysNotice/delete', param);
+ }
+
+ /**
+ * 全部标记未已读状态
+ *
+ * @author fengshuonan
+ * @date 2021/6/15 23:09
+ */
+ static setAlreadyReadState() {
+ return Request.get('/sysMessage/allMessageReadFlag');
+ }
+
+ /**
+ * 删除我的消息
+ *
+ * @author fengshuonan
+ * @date 2021/6/15 23:13
+ */
+ static deleteMessage(params) {
+ return Request.post('/sysMessage/delete', params);
+ }
+
+ /**
+ * 查看消息详情
+ *
+ * @author fengshuonan
+ * @date 2021/6/15 23:13
+ */
+ static messageDetail(params) {
+ return Request.getAndLoadData('/sysMessage/detail', params);
+ }
+}
diff --git a/guns-front-project/src/layout/components/app-switch-modal.vue b/guns-front-project/src/layout/components/app-switch-modal.vue
new file mode 100644
index 00000000..6af569aa
--- /dev/null
+++ b/guns-front-project/src/layout/components/app-switch-modal.vue
@@ -0,0 +1,176 @@
+
+
+
+
+
![]()
+
+
{{ appItem.appName }}
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/layout/components/header-notice.vue b/guns-front-project/src/layout/components/header-notice.vue
new file mode 100644
index 00000000..8821fa86
--- /dev/null
+++ b/guns-front-project/src/layout/components/header-notice.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/layout/components/header-tools.vue b/guns-front-project/src/layout/components/header-tools.vue
new file mode 100644
index 00000000..5ebf531b
--- /dev/null
+++ b/guns-front-project/src/layout/components/header-tools.vue
@@ -0,0 +1,209 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/layout/components/i18n-icon.vue b/guns-front-project/src/layout/components/i18n-icon.vue
new file mode 100644
index 00000000..2577401c
--- /dev/null
+++ b/guns-front-project/src/layout/components/i18n-icon.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+ English
+ 简体中文
+ 繁體中文
+
+
+
+
+
+
diff --git a/guns-front-project/src/layout/components/menu-title.vue b/guns-front-project/src/layout/components/menu-title.vue
new file mode 100644
index 00000000..b0258ba9
--- /dev/null
+++ b/guns-front-project/src/layout/components/menu-title.vue
@@ -0,0 +1,18 @@
+
+ {{ item.meta.title }}
+
+
+
+
diff --git a/guns-front-project/src/layout/components/page-footer.vue b/guns-front-project/src/layout/components/page-footer.vue
new file mode 100644
index 00000000..40bcb9df
--- /dev/null
+++ b/guns-front-project/src/layout/components/page-footer.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
diff --git a/guns-front-project/src/layout/components/password-modal.vue b/guns-front-project/src/layout/components/password-modal.vue
new file mode 100644
index 00000000..b83d0c69
--- /dev/null
+++ b/guns-front-project/src/layout/components/password-modal.vue
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/layout/components/setting-drawer.vue b/guns-front-project/src/layout/components/setting-drawer.vue
new file mode 100644
index 00000000..10885ee7
--- /dev/null
+++ b/guns-front-project/src/layout/components/setting-drawer.vue
@@ -0,0 +1,391 @@
+
+
+
+
+
{{ t('layout.setting.title') }}
+
+
+
+
+
+
+
+ {{ t('layout.setting.layoutStyle') }}
+
+
+
+
+ {{ t('layout.setting.other') }}
+
+
+
+
+ {{ t('layout.setting.showFooter') }}
+
+
+
+
+
+
{{ t('layout.setting.weakMode') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('layout.setting.reset') }}
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/layout/index.vue b/guns-front-project/src/layout/index.vue
new file mode 100644
index 00000000..b2a12fd8
--- /dev/null
+++ b/guns-front-project/src/layout/index.vue
@@ -0,0 +1,342 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/layout/menu-icons.js b/guns-front-project/src/layout/menu-icons.js
new file mode 100644
index 00000000..c3a45e47
--- /dev/null
+++ b/guns-front-project/src/layout/menu-icons.js
@@ -0,0 +1,48 @@
+/** 菜单用到的图标 */
+export {
+ HomeOutlined,
+ SettingOutlined,
+ TeamOutlined,
+ DesktopOutlined,
+ FileTextOutlined,
+ TableOutlined,
+ AppstoreOutlined,
+ CheckCircleOutlined,
+ ExclamationCircleOutlined,
+ UserOutlined,
+ TagOutlined,
+ IdcardOutlined,
+ BarChartOutlined,
+ AuditOutlined,
+ PicLeftOutlined,
+ CloseCircleOutlined,
+ QuestionCircleOutlined,
+ SoundOutlined,
+ ApartmentOutlined,
+ DashboardOutlined,
+ OneToOneOutlined,
+ DragOutlined,
+ InteractionOutlined,
+ BankOutlined,
+ BlockOutlined,
+ CheckSquareOutlined,
+ ProfileOutlined,
+ WarningOutlined,
+ FolderOutlined,
+ YoutubeOutlined,
+ ControlOutlined,
+ EllipsisOutlined,
+ CalendarOutlined,
+ AppstoreAddOutlined,
+ FileSearchOutlined,
+ EnvironmentOutlined,
+ CompassOutlined,
+ FontSizeOutlined,
+ SketchOutlined,
+ BgColorsOutlined,
+ PrinterOutlined,
+ QrcodeOutlined,
+ BarcodeOutlined,
+ PictureOutlined,
+ LinkOutlined
+} from '@ant-design/icons-vue';
diff --git a/guns-front-project/src/main.js b/guns-front-project/src/main.js
new file mode 100644
index 00000000..3e67649f
--- /dev/null
+++ b/guns-front-project/src/main.js
@@ -0,0 +1,27 @@
+import { createApp } from 'vue';
+import store from './store';
+import i18n from './i18n';
+import App from './App.vue';
+import router from './router';
+import './styles/index.less';
+import Antd from 'ant-design-vue';
+import './assets/iconfont/iconfont';
+import VXETable from 'vxe-table';
+import 'vxe-table/lib/style.css'
+import permission from './utils/permission';
+import * as antIcons from '@ant-design/icons-vue';
+const app = createApp(App);
+
+app.use(store);
+app.use(i18n);
+app.use(router);
+app.use(permission);
+app.use(VXETable);
+
+app.use(Antd).mount('#app');
+
+// 注册图标组件到全局
+Object.keys(antIcons).forEach(key => {
+ app.component(key, antIcons[key]);
+});
+app.config.globalProperties.$antIcons = antIcons;
diff --git a/guns-front-project/src/router/index.js b/guns-front-project/src/router/index.js
new file mode 100644
index 00000000..b4cfb202
--- /dev/null
+++ b/guns-front-project/src/router/index.js
@@ -0,0 +1,131 @@
+/**
+ * 路由配置
+ */
+import NProgress from 'nprogress';
+import { createRouter, createWebHistory } from 'vue-router';
+import { WHITE_LIST, REDIRECT_PATH, SSO_FLAG, BASE_URL } from '@/config/setting';
+import { useUserStore } from '@/store/modules/user';
+import { getToken } from '@/utils/token-util';
+import { findTree } from '@/utils/common/util';
+import { routes, getMenuRoutes } from './routes';
+import { SsoUtil } from '@/utils/common/sso-util';
+import { formatMenus, toTreeData, eachTreeData } from '@/utils/common/menu-util';
+import { useSystemStore } from '@/store/modules/system';
+import { SysConfigApi } from '@/views/system/backend/sys-config/api/SysConfigApi';
+
+NProgress.configure({
+ speed: 200,
+ minimum: 0.02,
+ trickleSpeed: 200,
+ showSpinner: false
+});
+
+const router = createRouter({
+ routes,
+ history: createWebHistory(BASE_URL),
+ scrollBehavior() {
+ return { top: 0 };
+ }
+});
+
+/**
+ * 路由守卫
+ */
+router.beforeEach(async (to, from) => {
+ // 网站顶部小进度条开启
+ if (!from.path.includes(REDIRECT_PATH)) {
+ NProgress.start();
+ }
+
+ // 当前用户没有登录,没有token
+ if (!getToken()) {
+ // 当前路径不存在白名单内
+ if (!WHITE_LIST.includes(to.path)) {
+ // 当前路径不在白名单,如果开启了sso,并且未携带有errorCode(单点返回来的),跳转到单点detection
+ if (SSO_FLAG && !to.query.errorCode && !to.query.token) {
+ SsoUtil.redirectDetection();
+ } else {
+ // 没开启sso,直接跳转到登录界面
+ return {
+ path: '/login',
+ query: to.path === '/' ? {} : { from: to.path }
+ };
+ }
+ }
+ }
+
+ // 可以获取到token,代表用户已经登录了
+ else {
+ // 校验系统是否初始化过,如果没有初始化过,则进入初始化界面初始化一些后台需要的参数
+ const systemStore = useSystemStore();
+
+ if (systemStore.alreadyInitConfig === null || !systemStore.alreadyInitConfig) {
+ // 获取是否系统初始化过配置
+ let alreadyInit = await SysConfigApi.getInitConfigFlag();
+
+ // 更新store中存储的标识
+ systemStore.updateInitFlag(alreadyInit);
+
+ // 如果没有初始化系统配置,并且当前跳转的界面不是init界面,则跳转到init界面
+ if (!alreadyInit && to.path !== '/init') {
+ return { path: '/init' };
+ }
+ }
+
+ // 注册动态路由
+ const userStore = useUserStore();
+ if (!userStore.menus) {
+ const { needMenus, noNeedMenus, homePath } = await userStore.fetchUserInfo(to.path);
+ // 不需要左侧菜单
+ if (noNeedMenus) {
+ router.addRoute(getMenuRoutes(noNeedMenus, homePath, false));
+ }
+ // 需要左侧菜单
+ if (needMenus) {
+ router.addRoute(getMenuRoutes(needMenus, homePath));
+ return { ...to, replace: true };
+ }
+ } else {
+ let currentApp = {};
+ userStore.appList.forEach(item => {
+ let currentRou = findTree(item.menuList, to.path, 'path');
+ if (currentRou && currentRou.length) {
+ currentApp = item;
+ }
+ });
+ // 切换应用
+ if (!(currentApp && currentApp.appId && currentApp.appId == userStore.activeApp?.appId)) {
+ await SysConfigApi.updateUserOrgOrApp({ newAppId: currentApp.appId });
+ userStore.setActiveApp(currentApp);
+ }
+ const { menus } = formatMenus(
+ toTreeData({
+ data: currentApp.menuList?.map(d => {
+ return {
+ ...d,
+ path: d.menuType == 40 ? 'http://' + location.host + d.path : d.path
+ };
+ }),
+ idField: 'menuId',
+ parentIdField: 'menuParentId'
+ })
+ );
+ eachTreeData(menus, d => {
+ if (d.redirect && d.redirect.indexOf('http:') != '-1') {
+ d.path = d.redirect;
+ }
+ });
+ userStore.setMenus(menus);
+ }
+ }
+});
+
+router.afterEach(to => {
+ if (!to.path.includes(REDIRECT_PATH) && NProgress.isStarted()) {
+ setTimeout(() => {
+ NProgress.done(true);
+ }, 200);
+ }
+});
+
+export default router;
diff --git a/guns-front-project/src/router/routes.js b/guns-front-project/src/router/routes.js
new file mode 100644
index 00000000..24237c20
--- /dev/null
+++ b/guns-front-project/src/router/routes.js
@@ -0,0 +1,82 @@
+import { menuToRoutes, eachTreeData } from '@/utils/common/menu-util';
+import { HOME_PATH, LAYOUT_PATH, REDIRECT_PATH } from '@/config/setting';
+import GunsLayout from '@/layout/index.vue';
+import RedirectLayout from '@/components/RedirectLayout';
+const modules = import.meta.glob('/src/views/**/**.vue');
+
+/**
+ * 静态路由
+ */
+export const routes = [
+ {
+ path: '/login',
+ component: () => import('@/views/login/login/index.vue'),
+ meta: { title: '登录' }
+ },
+ {
+ path: '/forget',
+ component: () => import('@/views/forget/index.vue'),
+ meta: { title: '忘记密码' }
+ },
+ {
+ path: '/sso',
+ component: () => import('@/views/login/sso.vue'),
+ meta: { title: '单点登录' }
+ },
+ {
+ path: '/init',
+ component: () => import('@/views/init/index.vue'),
+ meta: { title: '初始化系统配置' }
+ },
+ {
+ path: '/tokenLogin',
+ component: () => import('@/views/login/token.vue'),
+ meta: { title: 'token登录' }
+ },
+ // 404
+ {
+ path: '/:path(.*)*',
+ component: () => import('@/components/Exception/404/index.vue')
+ }
+];
+
+/**
+ * 动态路由
+ * @param menus 菜单数据
+ * @param homePath 主页地址
+ * @param isNeedMenuTree 是否需要左侧菜单
+ */
+export function getMenuRoutes(menus, homePath, isNeedMenuTree = true) {
+ const routes = [
+ // 用于刷新的路由
+ {
+ path: REDIRECT_PATH + '/:path(.*)',
+ component: RedirectLayout,
+ meta: { hideFooter: true }
+ }
+ ];
+ // 路由铺平处理
+ eachTreeData(menuToRoutes(menus, getComponent), (route) => {
+ routes.push({ ...route, children: void 0 });
+ });
+ return {
+ path: LAYOUT_PATH,
+ component: isNeedMenuTree ? GunsLayout : null,
+ redirect: HOME_PATH ?? homePath,
+ children: routes
+ };
+}
+
+/**
+ * 解析路由组件
+ * @param component 组件名称
+ */
+export function getComponent(component) {
+ if (component) {
+ const module = modules[`/src/views/${component}.vue`];
+ if (!module) {
+ return modules[`/src/views/${component}/index.vue`];
+ }
+ return module;
+ }
+}
diff --git a/guns-front-project/src/store/index.js b/guns-front-project/src/store/index.js
new file mode 100644
index 00000000..bf43b30e
--- /dev/null
+++ b/guns-front-project/src/store/index.js
@@ -0,0 +1,6 @@
+/**
+ * pinia
+ */
+import { createPinia } from 'pinia';
+
+export default createPinia();
diff --git a/guns-front-project/src/store/modules/notice.js b/guns-front-project/src/store/modules/notice.js
new file mode 100644
index 00000000..e97d6333
--- /dev/null
+++ b/guns-front-project/src/store/modules/notice.js
@@ -0,0 +1,59 @@
+/**
+ * 存放当前用户未读消息
+ */
+import { defineStore } from 'pinia';
+
+export const useNoticeStore = defineStore({
+ id: 'notice',
+ state: () => ({
+ // 用户未读消息列表
+ unReadNoticeList: [],
+ isMore: false,
+ }),
+ getters: {},
+ actions: {
+ /**
+ * 设置是否点击更多
+ * @param {*} value
+ */
+ setIsMore(value) {
+ this.isMore = value;
+ },
+ /**
+ * 添加未读的系统消息
+ *
+ * @author fengshuonan
+ * @date 2021/6/12 19:20
+ */
+ addNotice(notice) {
+ let obj = {
+ readFlag: 0,
+ ...notice,
+ }
+ this.unReadNoticeList.unshift(obj);
+ },
+
+ /**
+ * 设置未读消息
+ *
+ * @author fengshuonan
+ * @date 2021/6/12 19:20
+ */
+ setNotice(noticeList) {
+ this.unReadNoticeList = noticeList;
+ },
+
+ /**
+ * 删除消息
+ *
+ * @author fengshuonan
+ * @date 2021/6/12 19:20
+ */
+ removeMessage(messageId) {
+ this.unReadNoticeList.splice(
+ this.unReadNoticeList.findIndex(item => item.messageId === messageId),
+ 1
+ );
+ }
+ }
+});
diff --git a/guns-front-project/src/store/modules/system.js b/guns-front-project/src/store/modules/system.js
new file mode 100644
index 00000000..5a335219
--- /dev/null
+++ b/guns-front-project/src/store/modules/system.js
@@ -0,0 +1,86 @@
+/**
+ * 系统参数相关store
+ */
+import { defineStore } from 'pinia';
+import { ThemeApi } from '@/views/system/backend/theme/manager/api/ThemeApi';
+import { LoginApi } from '@/views/login/login/api/LoginApi';
+
+export const useSystemStore = defineStore({
+ id: 'system',
+ state: () => ({
+ // 当前系统是否已经初始化过配置
+ alreadyInitConfig: null,
+ // 后台管理系统左上角Logo
+ gunsMgrLogo: null,
+ // 后台管理系统名称
+ gunsMgrName: import.meta.env.VITE_APP_NAME,
+ // 系统名称副标题
+ gunsSubTitle: import.meta.env.VITE_APP_NAME,
+ // 备案编号
+ gunsMgrBeiNo: null,
+ // 备案跳转url
+ gunsMgrBeiUrl: 'https://beian.miit.gov.cn/',
+ // favicon图标地址
+ gunsMgrFavicon: null,
+ // 页脚文字
+ gunsMgrFooterText: null,
+ // 登录页面背景图片
+ gunsMgrLoginBackgroundImg: null,
+ //api基础路径
+ baseUrl: '',
+ }),
+ getters: {},
+ actions: {
+ /**
+ * 更新初始化状态
+ *
+ * @param {Boolean} initFlag 是否初始化了系统
+ * @author fengshuonan
+ * @date 2021/6/12 19:20
+ */
+ updateInitFlag(initFlag) {
+ this.alreadyInitConfig = initFlag;
+ },
+
+ /**
+ * 更新初始化状态
+ *
+ * @author fengshuonan
+ * @date 2021/6/12 19:20
+ */
+ loadThemeInfo() {
+ return new Promise(resolve => {
+ if (this.gunsMgrLogo != null) {
+ resolve(Object.assign({}, this.$state));
+ } else {
+ ThemeApi.getCurrentThemeInfo().then(result => {
+ this.gunsMgrLogo = result.gunsMgrLogo;
+ this.gunsMgrName = result.gunsMgrName;
+ this.gunsSubTitle = result.otherConfigs?.gunsSubTitle;
+ this.gunsMgrBeiNo = result.gunsMgrBeiNo;
+ this.gunsMgrBeiUrl = result.gunsMgrBeiUrl;
+ this.gunsMgrFavicon = result.gunsMgrFavicon;
+ this.gunsMgrFooterText = result.gunsMgrFooterText;
+ this.gunsMgrLoginBackgroundImg = result.gunsMgrLoginBackgroundImg;
+ resolve(result);
+ });
+ }
+ });
+ },
+
+ /**
+ * 设置基础url
+ *
+ * @author fengshuonan
+ * @date 2022/3/4 10:37
+ */
+ loadBaseUrl() {
+ return new Promise(resolve => {
+ LoginApi.getBackendDeployUrl().then(result => {
+ this.baseUrl = result;
+ resolve(result);
+ });
+ });
+ },
+ }
+});
diff --git a/guns-front-project/src/store/modules/theme.js b/guns-front-project/src/store/modules/theme.js
new file mode 100644
index 00000000..2f1d84cd
--- /dev/null
+++ b/guns-front-project/src/store/modules/theme.js
@@ -0,0 +1,500 @@
+/**
+ * 主题状态管理
+ */
+import { defineStore } from 'pinia';
+import { changeColor } from '@/utils/common/theme-util';
+import {
+ screenWidth,
+ screenHeight,
+ contentWidth,
+ contentHeight,
+ WEAK_CLASS,
+ BODY_LIMIT_CLASS,
+ DISABLES_CLASS
+} from '@/components/layout/util';
+import { TAB_KEEP_ALIVE, KEEP_ALIVE_EXCLUDES, THEME_STORE_NAME } from '@/config/setting';
+
+/**
+ * state 默认值
+ */
+const DEFAULT_STATE = Object.freeze({
+ // 页签数据
+ tabs: [],
+ // 是否折叠侧栏
+ collapse: localStorage.getItem('collapse') !== 'false',
+ // 是否开启页脚
+ showFooter: false,
+ // 顶栏风格: light(亮色), dark(暗色), primary(主色)
+ headStyle: 'light',
+ // 侧栏风格: light(亮色), dark(暗色)
+ sideStyle: 'dark',
+ // 布局风格: side(默认), mix(混合导航)
+ layoutStyle: 'mix',
+ // 侧栏菜单风格: default(默认), mix(双排侧栏)
+ sideMenuStyle: 'default',
+ // 是否固定主体
+ fixedBody: true,
+ // 侧栏是否只保持一个子菜单展开
+ sideUniqueOpen: false,
+ // 是否是色弱模式
+ weakMode: false,
+ // 主题色
+ color: null,
+ // 主页的组件名称
+ homeComponents: [],
+ // 刷新路由时的参数
+ routeReload: null,
+ // 是否开启响应式
+ styleResponsive: true
+});
+// 延时操作定时器
+let disableTransitionTimer, updateContentSizeTimer;
+
+/**
+ * 读取缓存配置
+ */
+function getCacheSetting() {
+ try {
+ const value = localStorage.getItem(THEME_STORE_NAME);
+ if (value) {
+ const cache = JSON.parse(value);
+ if (typeof cache === 'object') {
+ return cache;
+ }
+ }
+ } catch (e) {
+ console.error(e);
+ }
+ return {};
+}
+
+/**
+ * 缓存配置
+ */
+function cacheSetting(key, value) {
+ const cache = getCacheSetting();
+ if (cache[key] !== value) {
+ cache[key] = value;
+ localStorage.setItem(THEME_STORE_NAME, JSON.stringify(cache));
+ }
+}
+
+/**
+ * 开关响应式布局
+ */
+function changeStyleResponsive(styleResponsive) {
+ if (styleResponsive) {
+ document.body.classList.remove(BODY_LIMIT_CLASS);
+ } else {
+ document.body.classList.add(BODY_LIMIT_CLASS);
+ }
+}
+
+/**
+ * 切换色弱模式
+ */
+function changeWeakMode(weakMode) {
+ if (weakMode) {
+ document.body.classList.add(WEAK_CLASS);
+ } else {
+ document.body.classList.remove(WEAK_CLASS);
+ }
+}
+
+/**
+ * 切换主题
+ */
+function changeTheme(value, dark) {
+ return new Promise((resolve, reject) => {
+ try {
+ changeColor(value, dark);
+ resolve();
+ } catch (e) {
+ reject(e);
+ }
+ });
+}
+
+/**
+ * 切换布局时禁用过渡动画
+ */
+function disableTransition() {
+ disableTransitionTimer && clearTimeout(disableTransitionTimer);
+ document.body.classList.add(DISABLES_CLASS);
+ disableTransitionTimer = setTimeout(() => {
+ document.body.classList.remove(DISABLES_CLASS);
+ }, 100);
+}
+
+export const useThemeStore = defineStore({
+ id: 'theme',
+ state: () => {
+ const state = { ...DEFAULT_STATE };
+ // 读取本地缓存
+ const cache = getCacheSetting();
+ Object.keys(state).forEach(key => {
+ if (typeof cache[key] !== 'undefined') {
+ state[key] = cache[key];
+ }
+ });
+ return state;
+ },
+ getters: {
+ // 需要 keep-alive 的组件
+ keepAliveInclude() {
+ if (!TAB_KEEP_ALIVE) {
+ return [];
+ }
+ const components = new Set();
+ const { reloadPath, reloadHome } = this.routeReload || {};
+ this.tabs?.forEach(t => {
+ const isAlive = t.meta?.keepAlive !== false;
+ const isExclude = KEEP_ALIVE_EXCLUDES.includes(t.path);
+ const isReload = reloadPath && reloadPath === t.fullPath;
+ if (isAlive && !isExclude && !isReload && t.components) {
+ t.components.forEach(c => {
+ if (typeof c === 'string' && c) {
+ components.add(c);
+ }
+ });
+ }
+ });
+ if (!reloadHome) {
+ this.homeComponents?.forEach(c => {
+ if (typeof c === 'string' && c) {
+ components.add(c);
+ }
+ });
+ }
+ return Array.from(components);
+ }
+ },
+ actions: {
+ setTabs(value) {
+ this.tabs = value;
+ },
+ setCollapse(value) {
+ this.collapse = value;
+ localStorage.setItem('collapse', value);
+ this.delayUpdateContentSize(800);
+ },
+ setShowFooter(value) {
+ this.showFooter = value;
+ cacheSetting('showFooter', value);
+ this.delayUpdateContentSize();
+ },
+ setHeadStyle(value) {
+ this.headStyle = value;
+ cacheSetting('headStyle', value);
+ },
+ setSideStyle(value) {
+ this.sideStyle = value;
+ cacheSetting('sideStyle', value);
+ },
+ setLayoutStyle(value) {
+ disableTransition();
+ this.layoutStyle = value;
+ cacheSetting('layoutStyle', value);
+ this.delayUpdateContentSize();
+ },
+ setSideMenuStyle(value) {
+ disableTransition();
+ this.sideMenuStyle = value;
+ cacheSetting('sideMenuStyle', value);
+ this.delayUpdateContentSize();
+ },
+ setFixedBody(value) {
+ disableTransition();
+ this.fixedBody = value;
+ cacheSetting('fixedBody', value);
+ },
+ setSideUniqueOpen(value) {
+ this.sideUniqueOpen = value;
+ cacheSetting('sideUniqueOpen', value);
+ },
+ setStyleResponsive(value) {
+ changeStyleResponsive(value);
+ this.styleResponsive = value;
+ cacheSetting('styleResponsive', value);
+ },
+ /**
+ * 切换色弱模式
+ * @param value 是否是色弱模式
+ */
+ setWeakMode(value) {
+ return new Promise(resolve => {
+ changeWeakMode(value);
+ this.weakMode = value;
+ cacheSetting('weakMode', value);
+ resolve();
+ });
+ },
+ /**
+ * 切换主题色
+ * @param value 主题色
+ */
+ setColor(value) {
+ return new Promise((resolve, reject) => {
+ changeTheme(value, false)
+ .then(() => {
+ this.color = value;
+ cacheSetting('color', value);
+ resolve();
+ })
+ .catch(e => {
+ reject(e);
+ });
+ });
+ },
+ /**
+ * 设置主页路由对应的组件名称
+ * @param components 组件名称
+ */
+ setHomeComponents(components) {
+ this.homeComponents = components;
+ },
+ /**
+ * 设置刷新路由信息
+ * @param option 路由刷新参数
+ */
+ setRouteReload(option) {
+ this.routeReload = option;
+ },
+ /**
+ * 更新屏幕尺寸
+ */
+ updateScreenSize() {
+ this.screenWidth = screenWidth();
+ this.screenHeight = screenHeight();
+ this.updateContentSize();
+ },
+ /**
+ * 更新内容区域尺寸
+ */
+ updateContentSize() {
+ this.contentWidth = contentWidth();
+ this.contentHeight = contentHeight();
+ },
+ /**
+ * 延时更新内容区域尺寸
+ * @param delay 延迟时间
+ */
+ delayUpdateContentSize(delay) {
+ updateContentSizeTimer && clearTimeout(updateContentSizeTimer);
+ updateContentSizeTimer = setTimeout(() => {
+ this.updateContentSize();
+ }, delay ?? 100);
+ },
+ /**
+ * 重置设置
+ */
+ resetSetting() {
+ return new Promise((resolve, reject) => {
+ disableTransition();
+ this.showFooter = DEFAULT_STATE.showFooter;
+ this.headStyle = DEFAULT_STATE.headStyle;
+ this.sideStyle = DEFAULT_STATE.sideStyle;
+ this.layoutStyle = DEFAULT_STATE.layoutStyle;
+ this.sideMenuStyle = DEFAULT_STATE.sideMenuStyle;
+ this.fixedBody = DEFAULT_STATE.fixedBody;
+ this.sideUniqueOpen = DEFAULT_STATE.sideUniqueOpen;
+ this.styleResponsive = DEFAULT_STATE.styleResponsive;
+ this.weakMode = DEFAULT_STATE.weakMode;
+ this.color = DEFAULT_STATE.color;
+ localStorage.removeItem(THEME_STORE_NAME);
+ Promise.all([changeStyleResponsive(this.styleResponsive), changeWeakMode(this.weakMode), changeTheme(this.color, false)])
+ .then(() => {
+ resolve();
+ })
+ .catch(e => {
+ reject(e);
+ });
+ });
+ },
+ /**
+ * 恢复主题
+ */
+ recoverTheme() {
+ // 关闭响应式布局
+ if (!this.styleResponsive) {
+ changeStyleResponsive(false);
+ }
+ // 恢复色弱模式
+ if (this.weakMode) {
+ changeWeakMode(true);
+ }
+ // 恢复主题色
+ if (this.color || false) {
+ changeTheme(this.color, false).catch(e => {
+ console.error(e);
+ });
+ }
+ },
+ /**
+ * 添加页签或更新相同 key 的页签数据
+ * @param data 页签数据
+ */
+ tabAdd(data) {
+ if (Array.isArray(data)) {
+ data.forEach(d => {
+ this.tabAdd(d);
+ });
+ return;
+ }
+ const i = this.tabs.findIndex(d => d.key === data.key);
+ if (i === -1) {
+ this.setTabs(this.tabs.concat([data]));
+ } else if (data.fullPath !== this.tabs[i].fullPath) {
+ this.setTabs(
+ this.tabs
+ .slice(0, i)
+ .concat([data])
+ .concat(this.tabs.slice(i + 1))
+ );
+ }
+ },
+ /**
+ * 关闭页签
+ * @param key 页签 key
+ */
+ async tabRemove({ key, active }) {
+ const i = this.tabs.findIndex(t => t.key === key || t.fullPath === key);
+ if (i === -1) {
+ return {};
+ }
+ const t = this.tabs[i];
+ if (!t.closable) {
+ return Promise.reject();
+ }
+ const path = this.tabs[i - 1]?.fullPath;
+ this.setTabs(this.tabs.filter((_d, j) => j !== i));
+ return t.key === active ? { path, home: !path } : {};
+ },
+ /**
+ * 关闭左侧页签
+ */
+ async tabRemoveLeft({ key, active }) {
+ let index = -1; // 选中页签的 index
+ for (let i = 0; i < this.tabs.length; i++) {
+ if (this.tabs[i].key === active) {
+ index = i;
+ }
+ if (this.tabs[i].key === key) {
+ if (i === 0) {
+ break;
+ }
+ const temp = this.tabs.filter((d, j) => !d.closable && j < i);
+ if (temp.length === i + 1) {
+ break;
+ }
+ const path = index === -1 ? 0 : this.tabs[i].fullPath;
+ this.setTabs(temp.concat(this.tabs.slice(i)));
+ return { path };
+ }
+ }
+ return Promise.reject();
+ },
+ /**
+ * 关闭右侧页签
+ */
+ async tabRemoveRight({ key, active }) {
+ if (this.tabs.length) {
+ let index = -1; // 选中页签的 index
+ for (let i = 0; i < this.tabs.length; i++) {
+ if (this.tabs[i].key === active) {
+ index = i;
+ }
+ if (this.tabs[i].key === key) {
+ if (i === this.tabs.length - 1) {
+ return Promise.reject();
+ }
+ const temp = this.tabs.filter((d, j) => !d.closable && j > i);
+ if (temp.length === this.tabs.length - i - 1) {
+ return Promise.reject();
+ }
+ const path = index === -1 ? this.tabs[i].fullPath : 0;
+ this.setTabs(this.tabs.slice(0, i + 1).concat(this.tabs.filter((d, j) => !d.closable && j > i)));
+ return { path };
+ }
+ }
+ // 主页时关闭全部
+ const temp = this.tabs.filter(d => !d.closable);
+ if (temp.length !== this.tabs.length) {
+ this.setTabs(temp);
+ return { home: index !== -1 };
+ }
+ }
+ return Promise.reject();
+ },
+ /**
+ * 关闭其它页签
+ */
+ async tabRemoveOther({ key, active }) {
+ let index = -1; // 选中页签的 index
+ let path; // 关闭后跳转的 path
+ const temp = this.tabs.filter((d, i) => {
+ if (d.key === active) {
+ index = i;
+ }
+ if (d.key === key) {
+ path = d.fullPath;
+ }
+ return !d.closable || d.key === key;
+ });
+ if (temp.length === this.tabs.length) {
+ return Promise.reject();
+ }
+ this.setTabs(temp);
+ if (index === -1) {
+ return {};
+ }
+ return key === active ? {} : { path, home: !path };
+ },
+ /**
+ * 关闭全部页签
+ * @param active 选中页签的 key
+ */
+ async tabRemoveAll(active) {
+ const t = this.tabs.find(d => d.key === active);
+ const home = typeof t !== 'undefined' && t.closable === true; // 是否跳转主页
+ const temp = this.tabs.filter(d => !d.closable);
+ if (temp.length === this.tabs.length) {
+ return Promise.reject();
+ }
+ this.setTabs(temp);
+ return { home };
+ },
+ /**
+ * 修改页签
+ * @param data 页签数据
+ */
+ tabSetItem(data) {
+ let i = -1;
+ if (data.key) {
+ i = this.tabs.findIndex(d => d.key === data.key);
+ } else if (data.fullPath) {
+ i = this.tabs.findIndex(d => d.fullPath === data.fullPath);
+ } else if (data.path) {
+ i = this.tabs.findIndex(d => d.path === data.path);
+ }
+ if (i !== -1) {
+ const item = { ...this.tabs[i] };
+ if (data.title) {
+ item.title = data.title;
+ }
+ if (typeof data.closable === 'boolean') {
+ item.closable = data.closable;
+ }
+ if (data.components) {
+ item.components = data.components;
+ }
+ this.setTabs(
+ this.tabs
+ .slice(0, i)
+ .concat([item])
+ .concat(this.tabs.slice(i + 1))
+ );
+ }
+ }
+ }
+});
diff --git a/guns-front-project/src/store/modules/user.js b/guns-front-project/src/store/modules/user.js
new file mode 100644
index 00000000..e17e2551
--- /dev/null
+++ b/guns-front-project/src/store/modules/user.js
@@ -0,0 +1,137 @@
+/**
+ * 登录用户 store
+ */
+import { defineStore } from 'pinia';
+import { formatMenus, toTreeData, eachTreeData } from '@/utils/common/menu-util';
+import { findTree } from '@/utils/common/util';
+import { getUserInfo } from '@/layout/api/LayoutApi';
+import { SysConfigApi } from '@/views/system/backend/sys-config/api/SysConfigApi';
+
+export const useUserStore = defineStore({
+ id: 'user',
+ state: () => ({
+ // 当前登录用户的信息
+ info: null,
+ // 当前登录用户的菜单
+ menus: null,
+ // 当前登录用户的权限
+ authorities: [],
+ // 当前激活应用
+ activeApp: null,
+ // 应用菜单列表
+ appList: []
+ }),
+ getters: {},
+ actions: {
+ /**
+ * 请求用户信息、权限、角色、菜单
+ */
+ async fetchUserInfo(path) {
+ // 调用获取用户信息接口
+ const result = await getUserInfo().catch(() => undefined);
+ if (!result) {
+ return {};
+ }
+ // 用户信息
+ this.info = result;
+ // 用户权限编码集合
+ this.authorities = result.permissionCodeList ?? [];
+ // 应用菜单列表
+ this.appList = result.userAppInfoList;
+ // 当前激活的应用
+ let activeApp = result.userAppInfoList?.filter(m => m.currentSelectFlag)[0];
+ // 如果sessionStorage中存在激活应用
+ if (sessionStorage.getItem('ACTIVE_APP')) {
+ let currentApp = {};
+ // 获取当前路由所在的应用
+ this.appList &&
+ this.appList.forEach(item => {
+ let currentRou = findTree(item.menuList, path, 'path');
+ if (currentRou && currentRou.length) {
+ currentApp = item;
+ activeApp = item;
+ }
+ });
+ // 如果当前路由不存在当前应用下,切换应用
+ if (!(currentApp && currentApp.appId && currentApp.appId == activeApp.appId)) {
+ await SysConfigApi.updateUserOrgOrApp({ newAppId: currentApp.appId });
+ this.setActiveApp(currentApp);
+ }
+ } else {
+ // 当前激活应用
+ this.setActiveApp(activeApp);
+ }
+
+ // 当前应用的菜单和首页
+ const { menus, homePath } = formatMenus(
+ toTreeData({
+ data: activeApp.menuList?.map(d => {
+ return {
+ ...d,
+ path: d.menuType == 40 ? 'http://' + location.host + d.path : d.path
+ };
+ }),
+ idField: 'menuId',
+ parentIdField: 'menuParentId'
+ })
+ );
+ eachTreeData(menus, d => {
+ if (d.redirect && d.redirect.indexOf('http:') != '-1') {
+ d.path = d.redirect
+ }
+ });
+ // 当前激活应用的菜单列表
+ this.menus = menus;
+ // 当前用户的所有菜单列表
+ let allMenuList = [];
+ result.userAppInfoList?.forEach(m => {
+ allMenuList.push(...m.menuList);
+ });
+ // 不需要左侧树的菜单列表
+ let noNeedLeftMenuList = [];
+ getNoNeedLeftTreeMenuList(allMenuList, noNeedLeftMenuList);
+ // 用户菜单, 过滤掉按钮类型并转为children形式
+ const needMenusData = formatMenus(allMenuList ?? []);
+ const needMenus = needMenusData.menus ?? [];
+ // 不需要左侧菜单列表
+ const noNeedMenusData = formatMenus(noNeedLeftMenuList ?? []);
+ const noNeedMenus = noNeedMenusData.menus ?? [];
+ return { needMenus, noNeedMenus, homePath };
+
+ // 获取不需要左侧树的菜单列表
+ function getNoNeedLeftTreeMenuList(arr, noNeedLeftMenuList) {
+ if (arr && arr.length) {
+ for (let i = arr.length - 1; i >= 0; i--) {
+ if (arr[i].menuType == 20) {
+ noNeedLeftMenuList.push(arr[i]);
+ arr.splice(i, 1);
+ } else if (arr[i].children && arr[i].children.length) {
+ getNoNeedLeftTreeMenuList(arr[i].children, noNeedLeftMenuList);
+ }
+ }
+ }
+ }
+ },
+ /**
+ * 更新用户信息
+ */
+ setInfo(value) {
+ this.info = value;
+ },
+ /**
+ * 更新当前激活应用
+ * @param {*} value
+ */
+ setActiveApp(value) {
+ sessionStorage.setItem('ACTIVE_APP', JSON.stringify(value));
+ this.activeApp = value;
+ },
+ /**
+ * 更新菜单
+ * @param {*} value
+ */
+ setMenus(value) {
+ this.menus = value;
+ }
+ }
+});
diff --git a/guns-front-project/src/styles/commonMenu.less b/guns-front-project/src/styles/commonMenu.less
new file mode 100644
index 00000000..adf91d3b
--- /dev/null
+++ b/guns-front-project/src/styles/commonMenu.less
@@ -0,0 +1,59 @@
+:deep(.ant-menu-inline) {
+ border-right: 0;
+}
+:deep(.ant-menu) {
+ --component-background: #fbfbfb;
+}
+:deep(.ant-menu-inline .ant-menu-item::after) {
+ border-right: 0;
+}
+:deep(.ant-menu-submenu-selected) {
+ color: #999;
+}
+:deep(.ant-menu-submenu-title) {
+ font-size: 14px;
+ padding-left: 10px !important;
+ color: #60666b;
+ &:hover {
+ color: #60666b;
+ }
+}
+:deep(.ant-menu-item-selected) {
+ color: #0f56d7 !important;
+ border-radius: 4px;
+ font-weight: 500 !important;
+ background: rgba(207, 221, 247, 0.35) !important;
+ .iconfont {
+ color: #0f56d7 !important;
+ }
+}
+:deep(.ant-menu-item:active) {
+ color: #0f56d7 !important;
+ border-radius: 4px;
+ font-weight: 500 !important;
+ background: rgba(207, 221, 247, 0.35) !important;
+ .iconfont {
+ color: #0f56d7 !important;
+ }
+}
+:deep(.ant-menu-item:hover) {
+ background: #f3f3f3;
+ border-radius: 4px;
+}
+:deep(.ant-menu-item) {
+ font-weight: 400;
+ color: #43505e;
+ padding-left: 20px !important;
+}
+:deep(.ant-menu-submenu) {
+ border-top: 1px solid #eee;
+}
+:deep(.ant-menu-submenu:first-child) {
+ border-top: 1px solid #fbfbfb;
+}
+:deep(.ant-menu-submenu-title:active) {
+ background: #fbfbfb !important;
+}
+:deep(.ant-menu-submenu-arrow) {
+ display: none;
+}
diff --git a/guns-front-project/src/styles/commonTree.less b/guns-front-project/src/styles/commonTree.less
new file mode 100644
index 00000000..fe3a3d05
--- /dev/null
+++ b/guns-front-project/src/styles/commonTree.less
@@ -0,0 +1,190 @@
+.left-header {
+ height: 30px;
+ line-height: 30px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ color: #505050;
+ font-size: 14px;
+ font-weight: 400;
+ margin-bottom: 16px;
+ .left-header-title {
+ color: #60666b;
+ font-size: 14px;
+ font-weight: 400;
+ }
+ .header-add {
+ font-size: 14px;
+ cursor: pointer;
+ padding: 5px;
+ &:hover {
+ background: #e9f3f8;
+ }
+ }
+}
+.search {
+ height: 36px;
+ border-radius: 5px;
+ margin-bottom: 16px;
+}
+.search-input {
+ border-radius: 4px;
+}
+.tree-content {
+ width: 100%;
+ height: calc(100% - 90px);
+ overflow: hidden;
+}
+:deep(.ant-spin-container) {
+ height: 100%;
+}
+.left-tree {
+ height: calc(100% - 10px) !important;
+ overflow-y: auto !important;
+ overflow-x: hidden !important;
+}
+::-webkit-scrollbar {
+ width: 12px !important;
+}
+.tree-edit,
+.not-tree-edit {
+ width: 100%;
+ display: inline-block;
+ position: relative;
+ .edit-title {
+ width: 100%;
+ display: inline-block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ .edit-icon {
+ display: none;
+ width: 40px;
+ position: absolute;
+ right: 10px;
+ }
+ &:hover {
+ .edit-icon {
+ display: inline-block;
+ }
+ .edit-title {
+ width: calc(100% - 50px);
+ }
+ }
+}
+.not-tree-edit:hover {
+ .edit-title {
+ width: 100%;
+ }
+}
+
+:deep(.ant-tree) {
+ background: #fbfbfb;
+}
+:deep(.ant-tree .ant-tree-node-content-wrapper) {
+ height: 38px !important;
+ line-height: 38px !important;
+ display: inherit !important;
+}
+:deep(.ant-tree-switcher) {
+ line-height: 38px !important;
+}
+:deep(.ant-tree-switcher .ant-tree-switcher-icon) {
+ font-size: 14px !important;
+}
+:deep(.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle) {
+ height: 38px !important;
+ line-height: 38px !important;
+ margin-right: 8px;
+}
+:deep(.ant-tree.ant-tree-directory .ant-tree-treenode-selected::before) {
+ border-radius: 4px;
+ background: rgba(207, 221, 247, 0.35) !important;
+}
+:deep(.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper.ant-tree-node-selected) {
+ color: #0f56d7;
+ font-weight: 500;
+ .ant-tree-iconEle {
+ .iconfont {
+ color: #0f56d7 !important;
+ }
+ }
+}
+:deep(.ant-tree.ant-tree-directory .ant-tree-treenode:hover::before) {
+ background: rgba(207, 221, 247, 0.35) !important;
+ border-radius: 4px;
+}
+:deep(.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-switcher) {
+ color: #000;
+ font-weight: 500;
+}
+:deep(.ant-tree-treenode:not(:last-child)) {
+ margin-bottom: 8px;
+}
+:deep(.ant-tree-indent-unit) {
+ width: 10px !important;
+}
+:deep(.ant-tree.ant-tree-directory .ant-tree-treenode::before) {
+ bottom: 0 !important;
+}
+:deep(.ant-tree .ant-tree-treenode) {
+ padding: 0 12px;
+}
+
+:deep(.guns-table-tool .guns-tool) {
+ display: none;
+}
+
+.img {
+ width: 24px;
+ height: 22px;
+ margin-top: -4px;
+}
+
+.svg-img {
+ width: 24px;
+ height: 22px;
+ margin-top: 8px;
+}
+
+:deep(.ant-tree.ant-tree-directory .ant-tree-treenode) {
+ height: 38px !important;
+ line-height: 38px !important;
+}
+
+:deep(.ant-tree.ant-tree-directory .ant-tree-treenode:hover) {
+ .tree-button {
+ display: inline;
+ display: flex;
+ top: 0;
+ }
+ .tree-button-first {
+ display: inline;
+ display: flex;
+ top: 0;
+ margin-right: 150px;
+ }
+}
+
+:deep(.ant-tree-node-content-wrapper) {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ padding: 0 0 0 4px;
+}
+:deep(.ant-tree-title) {
+ width: calc(100% - 32px);
+}
+.empty {
+ margin-top: 50%;
+}
+:deep(.ant-card-body) {
+ height: 100%;
+}
+:deep(.ant-spin-nested-loading) {
+ height: 100%;
+}
+:deep(.ant-spin-container) {
+ height: 100%;
+}
diff --git a/guns-front-project/src/styles/gunsLayout.less b/guns-front-project/src/styles/gunsLayout.less
new file mode 100644
index 00000000..0a6db8b1
--- /dev/null
+++ b/guns-front-project/src/styles/gunsLayout.less
@@ -0,0 +1,136 @@
+.guns-layout {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ flex: auto;
+ height: 100%;
+ min-height: 0px;
+}
+.guns-layout-sidebar {
+ padding: 0 12px 12px 12px;
+ background: #fbfbfb;
+ flex: 0 0 auto;
+ position: relative;
+ transition: width 0.2s;
+ min-width: 0;
+ width: 252px;
+ border-right: 1px solid #eee;
+ display: flex;
+ flex-direction: column;
+ box-sizing: border-box;
+ .sidebar-content {
+ width: 100%;
+ flex: auto;
+ height: 100%;
+ overflow-y: auto;
+ overflow-x: hidden;
+ }
+}
+.guns-layout-content {
+ min-width: 0px;
+ flex: auto;
+ display: flex;
+ flex-direction: column;
+ padding: 12px;
+ background: #fff;
+ overflow-y: auto;
+ box-sizing: border-box;
+ .guns-layout {
+ display: flex;
+ flex-direction: column;
+ flex: auto;
+ height: 100%;
+ min-height: 0px;
+ .guns-layout-content-header {
+ color: #1b2c45;
+ text-align: center;
+ font-size: 18px;
+ font-style: normal;
+ line-height: normal;
+ width: 100%;
+ align-items: center;
+ display: flex;
+ flex: 0 0 auto;
+ background: #fff;
+ justify-content: space-between;
+ height: 30px;
+ margin-bottom: 16px;
+ span {
+ font-weight: 600;
+ }
+ }
+ .guns-layout-content-application {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ flex: auto;
+ height: 100%;
+ min-height: 0px;
+ flex-direction: row;
+ box-sizing: border-box;
+ .content-mian {
+ flex: auto;
+ display: flex;
+ flex-direction: column;
+ overflow-y: auto;
+ .content-mian-header {
+ display: flex;
+ flex-direction: row;
+ .header-content {
+ display: flex;
+ width: 100%;
+ flex-direction: row;
+ align-items: center;
+ margin-bottom: 16px;
+ .search-input {
+ width: 324px;
+ border-radius: 4px;
+ }
+ .header-content-left {
+ display: flex;
+ flex-wrap: wrap;
+ width: 70%;
+ overflow: hidden;
+ }
+ .header-content-right {
+ width: 30%;
+ text-align: right;
+ }
+ }
+ }
+ .content-mian-body {
+ display: flex;
+ flex-direction: column;
+ flex: auto;
+ .table-content {
+ height: calc(100% - 10px);
+ }
+ }
+ }
+ }
+ }
+}
+.ant-btn {
+ height: 36px;
+ line-height: 18px;
+ font-size: 16px !important;
+ padding: 8px 16px !important;
+ font-weight: 500 !important;
+}
+.ant-btn-icon-only {
+ width: 36px;
+ padding: 0 !important;
+}
+.ant-btn-circle {
+ width: 36px;
+ padding: 0 !important;
+}
+.ant-btn-round {
+ padding: 8px 16px !important;
+}
+.search-icon {
+ color: #adb5b8;
+}
+.surely-table-header-cell {
+ --surely-table-background-color: #fff;
+}
diff --git a/guns-front-project/src/styles/index.less b/guns-front-project/src/styles/index.less
new file mode 100644
index 00000000..41b4e080
--- /dev/null
+++ b/guns-front-project/src/styles/index.less
@@ -0,0 +1,124 @@
+// ant全局样式
+@import 'ant-design-vue/dist/antd.less';
+@import '../components/layout/style/index.less';
+@import '../components/layout/style/themes/dynamic.less';
+@import './gunsLayout.less';
+@import './shortcut.less';
+@import '../assets/iconfont/iconfont.css';
+/** 全局样式 */
+@import 'ant-design-vue/es/message/style/index.less';
+
+/* 需要覆盖框架样式变量写最下面, 具体请到文档查看 */
+
+// 内容高度
+.guns-admin-content-view {
+ height: 100%;
+}
+
+// 默认样式
+.guns-body {
+ padding: 10px;
+ height: 100%;
+
+ .ant-row {
+ height: 100%;
+ overflow: hidden;
+
+ .ant-col {
+ height: 100%;
+ }
+ }
+}
+
+// 弹框设置
+.common-modal {
+ top: 20px;
+
+ .ant-modal-body {
+ max-height: calc(100vh - 180px);
+ overflow-y: auto;
+ overflow-x: hidden;
+ }
+}
+
+// 弹框设置
+.fix-modal {
+ top: 50px;
+ .ant-modal-body {
+ max-height: calc(100vh - 240px);
+ overflow-y: auto;
+ overflow-x: hidden;
+ }
+}
+
+// 覆盖默认antd vue菜单的font大小
+.ant-menu-item-icon {
+ font-size: 24px !important;
+}
+
+.ant-dropdown-menu-title-content {
+ display: flex;
+ align-items: center;
+}
+
+// a-spin组件高度
+.ant-spin-nested-loading {
+ height: 100%;
+}
+.ant-spin-container {
+ height: 100%;
+}
+.guns-admin-sidebar + .guns-admin-body {
+ overflow: hidden;
+}
+.ant-pagination-item {
+ border-radius: 5px;
+}
+
+// tab
+.ant-tabs-tab + .ant-tabs-tab {
+ margin: 0px !important;
+}
+
+.ant-tabs-tab {
+ padding: 12px 15px !important;
+}
+.guns-modal-movable .ant-modal-header {
+ cursor: move;
+}
+.ant-table-thead > tr > th {
+ background-color: #fff !important;
+}
+.ant-table-tbody > tr > td {
+ --border-color-split: #e8eced !important;
+}
+
+.search,
+.header-content {
+ .ant-input-affix-wrapper {
+ height: 36px;
+ }
+}
+
+.ant-menu-title-content {
+ display: flex;
+ align-items: center;
+}
+
+.ant-table.ant-table-small .ant-table-thead > tr {
+ height: 54px;
+}
+.ant-table
+ .ant-table-thead
+ > tr
+ > th:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan])::before {
+ width: 0px;
+}
+
+.ant-tag {
+ padding: 3px 10px !important;
+ border-radius: 5px !important;
+ min-width: 60px;
+ text-align: center;
+ border: 0 !important;
+}
diff --git a/guns-front-project/src/styles/shortcut.less b/guns-front-project/src/styles/shortcut.less
new file mode 100644
index 00000000..4280161c
--- /dev/null
+++ b/guns-front-project/src/styles/shortcut.less
@@ -0,0 +1,63 @@
+.bgColor {
+ background: #fff;
+}
+
+.box {
+ height: 100%;
+ width: 100%;
+ overflow: hidden;
+ border-radius: 5px;
+}
+
+.ten-height {
+ height: 100%;
+ box-sizing: border-box;
+ overflow: auto;
+}
+
+.bg-white {
+ background: #fff;
+ border-radius: 5px;
+}
+
+.padding10 {
+ padding: 10px;
+}
+
+.border-radius {
+ border-radius: 4px;
+}
+
+.box-shadow {
+ box-shadow: 0 0 6px hsla(0, 0%, 80%, 0.5);
+}
+
+.height100 {
+ height: 100%;
+}
+
+// 禁止内容选中
+.isSelected {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.f-s-20 {
+ font-size: 20px;
+}
+
+.f-s-24 {
+ font-size: 24px;
+}
+
+.p-t-12 {
+ padding-top: 12px;
+}
+.p-t-15 {
+ padding-top: 15px;
+}
+.flex {
+ display: flex;
+}
diff --git a/guns-front-project/src/utils/common/iframe-component.js b/guns-front-project/src/utils/common/iframe-component.js
new file mode 100644
index 00000000..86d2078f
--- /dev/null
+++ b/guns-front-project/src/utils/common/iframe-component.js
@@ -0,0 +1,100 @@
+import {
+ defineComponent,
+ h,
+ ref,
+ watch,
+ inject,
+ computed,
+ onMounted,
+ onActivated,
+ onDeactivated,
+ onBeforeUnmount,
+ nextTick
+} from 'vue';
+import { PROVIDE_KEY } from '@/components/layout/util'
+
+/**
+ * 创建 iframe 组件
+ * @param name 组件名称
+ * @param url 链接地址
+ */
+export function createIframeComponent(name, url) {
+ return defineComponent({
+ name,
+ setup() {
+ const config = useReceiver();
+
+ const rootRef = ref(null);
+
+ const iframeEl = ref(null);
+
+ const keepAlive = computed(() => config.keepAlive);
+
+ /* 创建自定义 iframe dom */
+ const createIframe = () => {
+ const el = document.createElement('iframe');
+ el.classList.add('guns-admin-iframe');
+ el.src = url;
+ const parentNode = rootRef.value?.parentNode;
+ if (parentNode) {
+ parentNode.insertBefore(el, rootRef.value);
+ iframeEl.value = el;
+ }
+ };
+
+ onMounted(() => {
+ if (keepAlive.value) {
+ createIframe();
+ }
+ });
+
+ onActivated(() => {
+ if (iframeEl.value) {
+ iframeEl.value.style.display = '';
+ }
+ });
+
+ onDeactivated(() => {
+ if (iframeEl.value) {
+ iframeEl.value.style.display = 'none';
+ }
+ });
+
+ onBeforeUnmount(() => {
+ if (iframeEl.value) {
+ iframeEl.value.parentNode?.removeChild(iframeEl.value);
+ iframeEl.value = null;
+ }
+ });
+
+ watch(keepAlive, (keepAlive) => {
+ if (keepAlive && !iframeEl.value) {
+ nextTick(() => {
+ createIframe();
+ });
+ }
+ });
+
+ return () => {
+ if (config.keepAlive || iframeEl.value) {
+ return h('div', {
+ ref: rootRef,
+ style: { display: 'none' }
+ });
+ }
+ return h('iframe', {
+ ref: rootRef,
+ src: url,
+ class: 'guns-admin-iframe'
+ });
+ };
+ }
+ });
+}
+
+/**
+ * 全局配置 hook
+ */
+export function useReceiver() {
+ return inject(PROVIDE_KEY, {});
+}
diff --git a/guns-front-project/src/utils/common/menu-util.js b/guns-front-project/src/utils/common/menu-util.js
new file mode 100644
index 00000000..2b2d3826
--- /dev/null
+++ b/guns-front-project/src/utils/common/menu-util.js
@@ -0,0 +1,253 @@
+import { createIframeComponent } from './iframe-component';
+import { formatTreeData } from '@/components/layout/util';
+/**
+ * 菜单数据转成路由数据
+ * @param menus 菜单数据
+ * @param getComponent 加载组件的方法
+ * @param added 已添加的路由
+ * @param redirectPath 刷新路由的地址
+ * @param redirectComponent 刷新路由的组件
+ * @param redirectPathMatch 刷新路由的匹配表达式
+ * @param parentPath 父级路由地址
+ */
+export function menuToRoutes(menus, getComponent, added, redirectPath, redirectComponent, redirectPathMatch, parentPath) {
+ if (!(menus == null ? void 0 : menus.length)) {
+ return;
+ }
+ const routes = [];
+ const addedRoutes = added ? [...added] : [];
+ menus.forEach(item => {
+ const route = menuToRoute(item, getComponent, addedRoutes, redirectPath, redirectComponent, redirectPathMatch);
+ if (route) {
+ routes.push(route);
+ }
+ });
+ if (routes.length && redirectPath && redirectComponent) {
+ const pathMatch = redirectPathMatch ?? '/:path(.*)';
+ const temp = {
+ path: (parentPath ?? '') + redirectPath + pathMatch,
+ meta: { hideFooter: true }
+ };
+ const route = menuToRoute(temp, () => redirectComponent, []);
+ if (route) {
+ routes.push(route);
+ }
+ }
+ return routes;
+}
+/**
+ * 菜单数据转成路由数据
+ * @param menu 菜单数据
+ * @param getComponent 加载组件的方法
+ * @param added 已添加的路由
+ * @param redirectPath 刷新路由的地址
+ * @param redirectComponent 刷新路由的组件
+ * @param redirectPathMatch 刷新路由的匹配表达式
+ */
+export function menuToRoute(menu, getComponent, added, redirectPath, redirectComponent, redirectPathMatch) {
+ const meta = { ...menu.meta };
+ const p = meta.routePath || menu.path;
+ let path = (p == null ? void 0 : p.includes('?')) ? p.substring(0, p.indexOf('?')) : p;
+ if (path && !isExternalLink(path) && !pathIsAdd(path, added)) {
+ const name = menu.name || camelCase(path);
+ let component;
+ if (menu.component && isExternalLink(menu.component)) {
+ component = createIframeComponent(name, menu.component);
+ meta.iframe = menu.component;
+ meta.hideFooter = true;
+ } else {
+ component = getComponent(menu.component, menu, name);
+ }
+ added.push({ path });
+ return {
+ name,
+ path,
+ meta,
+ component,
+ redirect: menu.redirect,
+ children: menuToRoutes(menu.children, getComponent, added, redirectPath, redirectComponent, redirectPathMatch, path)
+ };
+ }
+}
+
+export function pathIsAdd(path, data) {
+ let isAdd = false;
+ eachTreeData(data, item => {
+ if (path === item.path) {
+ isAdd = true;
+ return false;
+ }
+ });
+ return isAdd;
+}
+
+export function camelCase(str) {
+ const val = str.replace(/[-|/](\w)/g, (_, c) => (c ? c.toUpperCase() : ''));
+ return val.charAt(0).toUpperCase() + val.slice(1);
+}
+
+/**
+ * 格式化菜单数据
+ * @param data 数据
+ * @param childField 子级的字段名称
+ */
+export function formatMenus(data, childField = 'children') {
+ let homePath;
+ let homeTitle;
+ const menus = formatTreeData(
+ data,
+ item => {
+ var _a, _b;
+ const meta = typeof item.meta === 'string' ? JSON.parse(item.meta || '{}') : item.meta;
+ let path = (meta == null ? void 0 : meta.fullPath) || item.fullPath || item.path;
+ if (item.appDesignBusinessId && (!item.children || item.children.length == 0)) {
+ path = path + '?businessId=' + item.appDesignBusinessId;
+ }
+ const component = ((_a = item.component) == null ? void 0 : _a.startsWith('/')) ? item.component.substring(1) : item.component;
+ const menu = {
+ path,
+ component,
+ name: (meta == null ? void 0 : meta.name) || item.name,
+ redirect: item.redirect,
+ meta: {
+ title: item.title,
+ icon: item.icon,
+ color: item.color,
+ hide: item.hide,
+ active: item.active,
+ breadcrumb: item.breadcrumb,
+ hideFooter: item.hideFooter,
+ hideSidebar: item.hideSidebar,
+ tabUnique: item.tabUnique,
+ closable: item.closable,
+ keepAlive: item.keepAlive,
+ routePath: item.path,
+ ...meta
+ }
+ };
+ const children =
+ (_b = item[childField]) == null
+ ? void 0
+ : _b.filter(d => {
+ var _a2;
+ return !(((_a2 = d.meta) == null ? void 0 : _a2.hide) ?? d.hide);
+ });
+ if (!(children == null ? void 0 : children.length)) {
+ if (!homePath && path && !isExternalLink(path)) {
+ homePath = path;
+ homeTitle = menu.meta.title;
+ }
+ } else {
+ const childPath = children[0].path || children[0].fullPath;
+ if (childPath) {
+ if (!menu.redirect) {
+ menu.redirect = childPath;
+ }
+ if (!menu.path) {
+ menu.path = childPath.substring(0, childPath.lastIndexOf('/'));
+ }
+ }
+ }
+ if (!path) {
+ console.error('菜单 path 不能为空且要唯一: ', item);
+ return;
+ }
+ return menu;
+ },
+ childField
+ );
+ return { menus, homePath, homeTitle };
+}
+
+/**
+ * 判断是否是外链
+ * @param url 地址
+ */
+export function isExternalLink(url) {
+ return !!(url && (url.startsWith('http://') || url.startsWith('https://') || url.startsWith('//')));
+}
+
+/**
+ * 遍历 children 形式数据
+ * @param data 需要遍历的数据
+ * @param callback 回调
+ * @param childrenField children 字段名
+ */
+export function eachTreeData(data = [], callback, childrenField = 'children', parent) {
+ if (data) {
+ data.forEach((d, i) => {
+ if (callback && callback(d, i, parent) !== false && d[childrenField]?.length) {
+ eachTreeData(d[childrenField], callback, childrenField, d);
+ }
+ });
+ }
+}
+/**
+ * parentId 形式数据转 children 形式参数
+ * @param {*} option
+ * @returns
+ */
+export function toTreeData(option) {
+ const data = option.data;
+ const idField = option.idField || "id";
+ const parentIdField = option.parentIdField || "parentId";
+ const childrenField = option.childrenField || "children";
+ const parentIdIsNull = option.parentId == null;
+ const parentId = parentIdIsNull ? [] : option.parentId;
+ const addParentIds = option.addParentIds;
+ const parentIdsField = option.parentIdsField || "parentIds";
+ const parentIds = option.parentIds;
+ if (data == null) {
+ return [];
+ }
+ if (parentIdIsNull) {
+ data.forEach((d) => {
+ let flag = true;
+ for (let i = 0; i < data.length; i++) {
+ if (d[parentIdField] == data[i][idField]) {
+ flag = false;
+ break;
+ }
+ }
+ if (flag) {
+ parentId.push(d[parentIdField]);
+ }
+ });
+ }
+ const result = [];
+ data.forEach((d) => {
+ if (d[idField] == d[parentIdField]) {
+ throw new Error(
+ [
+ "data error: {",
+ idField + ": ",
+ JSON.stringify(d[idField]),
+ parentIdField + ": ",
+ JSON.stringify(d[parentIdField]),
+ "}"
+ ].join("")
+ );
+ }
+ if (Array.isArray(parentId) ? parentId.includes(d[parentIdField]) : d[parentIdField] == parentId) {
+ const r = { ...d };
+ const children = toTreeData({
+ data,
+ idField,
+ parentIdField,
+ childrenField,
+ parentId: d[idField],
+ addParentIds,
+ parentIdsField,
+ parentIds: (parentIds != null ? parentIds : []).concat([d[idField]])
+ });
+ if (children.length > 0) {
+ r[childrenField] = children;
+ }
+ if (addParentIds) {
+ r[parentIdsField] = parentIds != null ? parentIds : [];
+ }
+ result.push(r);
+ }
+ });
+ return result;
+}
diff --git a/guns-front-project/src/utils/common/sso-util.js b/guns-front-project/src/utils/common/sso-util.js
new file mode 100644
index 00000000..fe0d55e7
--- /dev/null
+++ b/guns-front-project/src/utils/common/sso-util.js
@@ -0,0 +1,64 @@
+import Request from '@/utils/request/request-util';
+import { SSO_CLIENT_ID, SSO_HOST } from '@/config/setting';
+
+/**
+ * 单点登录的相关业务逻辑
+ *
+ * @author fengshuonan
+ * @date 2021/5/25 20:45
+ */
+export class SsoUtil {
+ /**
+ * SSO探测,当检测当前系统并未登录时候,需要去sso服务端进行探测全局会话
+ *
+ * @author fengshuonan
+ * @date 2021/5/25 20:45
+ */
+ static redirectDetection() {
+ window.location.href = `${SSO_HOST}/sso/detection?clientId=${SSO_CLIENT_ID}&ssoCallback=${encodeURIComponent(window.location.href)}`;
+ }
+
+ /**
+ * 通过loginCode创建sso全局会话
+ *
+ * @author fengshuonan
+ * @date 2021/5/25 20:45
+ */
+ static activateByLoginCode(clientId, callBack, ssoLoginCode) {
+ window.location.href = `${SSO_HOST}/sso/activateByLoginCode?clientId=${clientId}&ssoCallback=${callBack}&ssoLoginCode=${ssoLoginCode}`;
+ }
+
+ /**
+ * 将单点token转化为系统可以识别的token
+ *
+ * @param token 单点返回的token
+ * @author fengshuonan
+ * @date 2021/5/26 9:34
+ */
+ static tokenExchange(token) {
+ return Request.postAndLoadData('/loginByCaToken', { token });
+ }
+
+ /**
+ * 获取url的参数
+ *
+ * @author fengshuonan
+ * @date 2021/5/26 11:02
+ */
+ static getUrlParam(name) {
+ let reg = `(^|&)${name}=([^&]*)(&|$)`;
+ let r = window.location.search.substr(1).match(reg);
+ if (r != null) return unescape(r[2]);
+ return null;
+ }
+
+ /**
+ * 单点登录退出
+ *
+ * @author fengshuonan
+ * @date 2021/5/26 11:43
+ */
+ static ssoLogoutRedirect() {
+ window.location.href = `${SSO_HOST}/sso/logout?clientId=${SSO_CLIENT_ID}`;
+ }
+}
diff --git a/guns-front-project/src/utils/common/theme-util.js b/guns-front-project/src/utils/common/theme-util.js
new file mode 100644
index 00000000..01d89051
--- /dev/null
+++ b/guns-front-project/src/utils/common/theme-util.js
@@ -0,0 +1,40 @@
+/** 主题切换方法 */
+import { generate } from '@ant-design/colors';
+
+/**
+ * 切换主题色
+ * @param color 颜色值
+ * @param dark 是否暗黑模式
+ */
+export function changeColor(color, dark, darkClass = 'guns-admin-theme-dark') {
+ const id = `guns-admin-theme-var`;
+ const elem = document.getElementById(id);
+ if (elem?.parentNode) {
+ elem.parentNode.removeChild(elem);
+ }
+ if (color) {
+ const colors = generate(color, dark ? { theme: 'dark' } : {});
+ const clazz = dark ? `.${darkClass}` : ':root';
+ const elem = document.createElement('style');
+ elem.id = id;
+ elem.setAttribute('type', 'text/css');
+ elem.innerHTML =
+ `${clazz}{` +
+ colors
+ .map((c, i) => {
+ return `--primary-${i + 1}:${c};`;
+ })
+ .concat([`--primary-color:${color};`])
+ .join('') +
+ '}';
+ document.head.appendChild(elem);
+ document.body.dataset.theme = color;
+ } else {
+ document.body.removeAttribute('data-theme');
+ }
+ if (dark) {
+ document.body.classList.add(darkClass);
+ } else {
+ document.body.classList.remove(darkClass);
+ }
+}
diff --git a/guns-front-project/src/utils/common/util.js b/guns-front-project/src/utils/common/util.js
new file mode 100644
index 00000000..09c25771
--- /dev/null
+++ b/guns-front-project/src/utils/common/util.js
@@ -0,0 +1,143 @@
+import JSEncrypt from 'jsencrypt';
+import { CommonHrApi } from '@/api/CommonHrApi';
+
+// 定义公钥
+const publicKey = `MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCochIaKWEh6IIK1pJQcJPsYhZ2AJmGNc12XeC2lsj3dHkMO9vGrXN4ZJiN3qNLlO3hERtY0UZdN8Uz18zoiL60XoOclMuuwf1TwiMA3/4Vy2NOaQdX/RgLQ8XiRobVPLMe/JTteZ6eoPrWVC5jf4kdWD7LWwgdWrnzGs/4UiWnsQIDAQAB`;
+
+//深度克隆
+export function deepClone(obj) {
+ let result;
+ if (Array.isArray(obj)) {
+ result = [];
+ } else if (typeof obj === 'object' && obj !== null) {
+ result = {};
+ } else {
+ return obj;
+ }
+ Object.keys(obj).forEach(key => {
+ if (typeof obj[key] === 'object' && obj[key] !== null) {
+ result[key] = deepClone(obj[key]);
+ } else {
+ result[key] = obj[key];
+ }
+ });
+ return result;
+}
+
+/**
+ * rsa加密
+ * @author: nxy
+ * @Date: 2022-10-16 21:53:44
+ */
+export function RsaEncry(data) {
+ // 使用 RSA 公钥加密 请求响应解密的key
+ const myEncrypt = new JSEncrypt();
+ myEncrypt.setPublicKey(publicKey);
+ const cryptRespKeyStr = myEncrypt.encrypt(data);
+ return cryptRespKeyStr;
+}
+
+/**
+ * 查找树
+ * @param {number} param
+ * @returns {number}
+ */
+export function findTree(treeData = [], search, matchKey = 'id', childrenKey = 'children') {
+ let result = [];
+ treeData.forEach(treeItem => {
+ let resultItem = {};
+ if (treeItem[childrenKey] && treeItem[childrenKey].length) {
+ resultItem[childrenKey] = findTree(treeItem[childrenKey], search, matchKey, childrenKey);
+ }
+ if (search === treeItem[matchKey]) {
+ resultItem = { ...treeItem };
+ }
+ if (resultItem[matchKey]) {
+ result.push(resultItem);
+ }
+ if (resultItem[childrenKey] && resultItem[childrenKey].length) {
+ resultItem = { ...treeItem, childrenKey: resultItem[childrenKey] };
+ result.push(resultItem);
+ }
+ });
+ return result;
+}
+
+//驼峰转下划线
+export function camelToUnderline(str) {
+ return str.replace(/([A-Z])/g, '_$1').toLowerCase();
+}
+
+//下划线转驼峰
+export function underlineToCamel(str) {
+ return str.replace(/\_(\w)/g, (all, letter) => letter.toUpperCase());
+}
+
+/**
+ * 下载文件
+ * @param fileName
+ * @param content
+ */
+export function downloadFile(fileName, content) {
+ if (!content) {
+ return;
+ }
+ if (!fileName) {
+ fileName = 'noname.json';
+ }
+ if (typeof content === 'object') {
+ content = JSON.stringify(content);
+ }
+ let blob = new Blob([content], { type: 'text/json' }),
+ e = document.createEvent('MouseEvents'),
+ a = document.createElement('a');
+ a.download = fileName;
+ a.href = window.URL.createObjectURL(blob);
+ a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');
+ e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
+ a.dispatchEvent(e);
+}
+
+/**
+ * 是否是移动端
+ * @returns
+ */
+export function isMobile() {
+ if (
+ window.navigator.userAgent.match(
+ /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
+ )
+ ) {
+ return true; // 移动端
+ } else {
+ return false; // PC端
+ }
+}
+
+/**
+ * 获取随机数
+ * @param {*} number
+ * @returns
+ */
+export function getRandomNumber(number) {
+ var characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
+ var result = '';
+ for (var i = 0; i < number; i++) {
+ var randomIndex = Math.floor(Math.random() * characters.length);
+ result += characters.charAt(randomIndex);
+ }
+ return result;
+}
+
+
+/**
+ * 生成key
+ * @param [formItem] 需要生成 key 的控件,可选,如果不传,默认返回一个唯一 key
+ */
+export async function getBusinessMaxSort(code) {
+ if (code) {
+ const res = await CommonHrApi.getBusinessMaxSort(code);
+ return Number(res);
+ }
+ return 1000;
+}
diff --git a/guns-front-project/src/utils/document-title-util.js b/guns-front-project/src/utils/document-title-util.js
new file mode 100644
index 00000000..ed93115c
--- /dev/null
+++ b/guns-front-project/src/utils/document-title-util.js
@@ -0,0 +1,67 @@
+import { watch } from 'vue';
+import { useRouter } from 'vue-router';
+import { useI18n } from 'vue-i18n';
+import {
+ routeI18nKey,
+ findTabByPath
+} from '@/components/layout/util';
+import { storeToRefs } from 'pinia';
+import { useThemeStore } from '@/store/modules/theme';
+import { PROJECT_NAME, REDIRECT_PATH, I18N_ENABLE } from '@/config/setting';
+
+/**
+ * 修改浏览器标题
+ * @param title 标题
+ */
+export function setDocumentTitle(title) {
+ const names = [];
+ if (title) {
+ names.push(title);
+ }
+ if (PROJECT_NAME) {
+ names.push(PROJECT_NAME);
+ }
+ document.title = names.join(' - ');
+}
+
+/**
+ * 路由切换更新浏览器标题
+ */
+export function useSetDocumentTitle() {
+ const { currentRoute } = useRouter();
+ const { t, locale } = useI18n();
+ const themeStore = useThemeStore();
+ const { tabs } = storeToRefs(themeStore);
+
+ const updateTitle = (route) => {
+ const { path, meta, fullPath } = route;
+ if (path.includes(REDIRECT_PATH)) {
+ return;
+ }
+ const pathKey = routeI18nKey(path);
+ if (!pathKey) {
+ return;
+ }
+ const tab = findTabByPath(fullPath, tabs.value);
+ const title = tab?.title || meta?.title;
+ if (!I18N_ENABLE) {
+ setDocumentTitle(title);
+ return;
+ }
+ const k = `route.${pathKey}._name`;
+ const v = t(k);
+ setDocumentTitle(v === k || !v ? title : v);
+ };
+
+ watch(
+ currentRoute,
+ (route) => {
+ updateTitle(route);
+ },
+ { immediate: true }
+ );
+
+ watch(locale, () => {
+ updateTitle(currentRoute.value);
+ });
+}
diff --git a/guns-front-project/src/utils/dynamic-theme.js b/guns-front-project/src/utils/dynamic-theme.js
new file mode 100644
index 00000000..9d1e5412
--- /dev/null
+++ b/guns-front-project/src/utils/dynamic-theme.js
@@ -0,0 +1,487 @@
+/** 支持换主题插件 */
+
+/**
+ * 需要修改的 less 变量
+ */
+const variables = {
+ // Blue
+ '@blue-1': 'var(--blue-1)',
+ '@blue-2': 'var(--blue-2)',
+ '@blue-3': 'var(--blue-3)',
+ '@blue-4': 'var(--blue-4)',
+ '@blue-5': 'var(--blue-5)',
+ '@blue-6': 'var(--blue-6)',
+ '@blue-7': 'var(--blue-7)',
+ '@blue-8': 'var(--blue-8)',
+ '@blue-9': 'var(--blue-9)',
+ '@blue-10': 'var(--blue-10)',
+ // Purple
+ '@purple-1': 'var(--purple-1)',
+ '@purple-2': 'var(--purple-2)',
+ '@purple-3': 'var(--purple-3)',
+ '@purple-4': 'var(--purple-4)',
+ '@purple-5': 'var(--purple-5)',
+ '@purple-6': 'var(--purple-6)',
+ '@purple-7': 'var(--purple-7)',
+ '@purple-8': 'var(--purple-8)',
+ '@purple-9': 'var(--purple-9)',
+ '@purple-10': 'var(--purple-10)',
+ // Cyan
+ '@cyan-1': 'var(--cyan-1)',
+ '@cyan-2': 'var(--cyan-2)',
+ '@cyan-3': 'var(--cyan-3)',
+ '@cyan-4': 'var(--cyan-4)',
+ '@cyan-5': 'var(--cyan-5)',
+ '@cyan-6': 'var(--cyan-6)',
+ '@cyan-7': 'var(--cyan-7)',
+ '@cyan-8': 'var(--cyan-8)',
+ '@cyan-9': 'var(--cyan-9)',
+ '@cyan-10': 'var(--cyan-10)',
+ // Green
+ '@green-1': 'var(--green-1)',
+ '@green-2': 'var(--green-2)',
+ '@green-3': 'var(--green-3)',
+ '@green-4': 'var(--green-4)',
+ '@green-5': 'var(--green-5)',
+ '@green-6': 'var(--green-6)',
+ '@green-7': 'var(--green-7)',
+ '@green-8': 'var(--green-8)',
+ '@green-9': 'var(--green-9)',
+ '@green-10': 'var(--green-10)',
+ // Pink
+ '@pink-1': 'var(--pink-1)',
+ '@pink-2': 'var(--pink-2)',
+ '@pink-3': 'var(--pink-3)',
+ '@pink-4': 'var(--pink-4)',
+ '@pink-5': 'var(--pink-5)',
+ '@pink-6': 'var(--pink-6)',
+ '@pink-7': 'var(--pink-7)',
+ '@pink-8': 'var(--pink-8)',
+ '@pink-9': 'var(--pink-9)',
+ '@pink-10': 'var(--pink-10)',
+ // Red
+ '@red-1': 'var(--red-1)',
+ '@red-2': 'var(--red-2)',
+ '@red-3': 'var(--red-3)',
+ '@red-4': 'var(--red-4)',
+ '@red-5': 'var(--red-5)',
+ '@red-6': 'var(--red-6)',
+ '@red-7': 'var(--red-7)',
+ '@red-8': 'var(--red-8)',
+ '@red-9': 'var(--red-9)',
+ '@red-10': 'var(--red-10)',
+ // Orange
+ '@orange-1': 'var(--orange-1)',
+ '@orange-2': 'var(--orange-2)',
+ '@orange-3': 'var(--orange-3)',
+ '@orange-4': 'var(--orange-4)',
+ '@orange-5': 'var(--orange-5)',
+ '@orange-6': 'var(--orange-6)',
+ '@orange-7': 'var(--orange-7)',
+ '@orange-8': 'var(--orange-8)',
+ '@orange-9': 'var(--orange-9)',
+ '@orange-10': 'var(--orange-10)',
+ // Gold
+ '@gold-1': 'var(--gold-1)',
+ '@gold-2': 'var(--gold-2)',
+ '@gold-3': 'var(--gold-3)',
+ '@gold-4': 'var(--gold-4)',
+ '@gold-5': 'var(--gold-5)',
+ '@gold-6': 'var(--gold-6)',
+ '@gold-7': 'var(--gold-7)',
+ '@gold-8': 'var(--gold-8)',
+ '@gold-9': 'var(--gold-9)',
+ '@gold-10': 'var(--gold-10)',
+ // Color used by default to control hover and active backgrounds
+ '@primary-1': 'var(--primary-1)',
+ '@primary-2': 'var(--primary-2)',
+ '@primary-3': 'var(--primary-3)',
+ '@primary-4': 'var(--primary-4)',
+ '@primary-5': 'var(--primary-5)',
+ '@primary-6': 'var(--primary-6)',
+ '@primary-7': 'var(--primary-7)',
+ '@primary-8': 'var(--primary-8)',
+ '@primary-9': 'var(--primary-9)',
+ '@primary-10': 'var(--primary-10)',
+ // Colors
+ '@primary-color': 'var(--primary-color)',
+ '@primary-color-hover': 'var(--primary-color-hover)',
+ '@primary-color-active': 'var(--primary-color-active)',
+ '@primary-color-outline': 'var(--primary-color-outline)',
+ //
+ '@info-color': 'var(--info-color)',
+ '@info-color-deprecated-bg': 'var(--primary-1)',
+ '@info-color-deprecated-border': 'var(--primary-3)',
+ //
+ '@success-color': 'var(--success-color)',
+ '@success-color-hover': 'var(--success-color-hover)',
+ '@success-color-active': 'var(--success-color-active)',
+ '@success-color-outline': 'var(--success-color-outline)',
+ '@success-color-deprecated-bg': 'var(--green-1)',
+ '@success-color-deprecated-border': 'var(--green-3)',
+ //
+ '@warning-color': 'var(--warning-color)',
+ '@warning-color-hover': 'var(--warning-color-hover)',
+ '@warning-color-active': 'var(--warning-color-active)',
+ '@warning-color-outline': 'var(--warning-color-outline)',
+ '@warning-color-deprecated-bg': 'var(--gold-1)',
+ '@warning-color-deprecated-border': 'var(--gold-3)',
+ //
+ '@error-color': 'var(--error-color)',
+ '@error-color-hover': 'var(--error-color-hover)',
+ '@error-color-active': 'var(--error-color-active)',
+ '@error-color-outline': 'var(--error-color-outline)',
+ '@error-color-deprecated-bg': 'var(--red-1)',
+ '@error-color-deprecated-border': 'var(--red-3)',
+ //
+ '@highlight-color': 'var(--highlight-color)',
+ '@processing-color': 'var(--processing-color)',
+ // Background color
+ '@body-background': 'var(--body-background)',
+ '@component-background': 'var(--component-background)',
+ // Popover
+ '@popover-background': 'var(--popover-background)',
+ '@popover-customize-border-color': 'var(--popover-customize-border-color)',
+ // Text Color
+ '@text-color': 'var(--text-color)',
+ '@text-color-secondary': 'var(--text-color-secondary)',
+ '@text-color-inverse': 'var(--text-color-inverse)',
+ '@icon-color-hover': 'var(--icon-color-hover)',
+ '@heading-color': 'var(--heading-color)',
+ // The background colors for active and hover states for things like
+ '@item-hover-bg': 'var(--item-hover-bg)',
+ // LINK
+ '@link-hover-color': '@primary-5',
+ '@link-active-color': '@primary-7',
+ // Border color
+ '@border-color-base': 'var(--border-color-base)',
+ '@border-color-split': 'var(--border-color-split)',
+ //
+ '@background-color-light': 'var(--background-color-light)',
+ '@background-color-base': 'var(--background-color-base)',
+ // Disabled states
+ '@disabled-color': 'var(--disabled-color)',
+ '@disabled-bg': 'var(--disabled-bg)',
+ '@disabled-color-dark': 'var(--disabled-color-dark)',
+ // Shadow
+ '@shadow-color': 'var(--shadow-color)',
+ '@shadow-color-inverse': 'var(--shadow-color-inverse)',
+ '@box-shadow-base': 'var(--box-shadow-base)',
+ '@shadow-1-up': 'var(--shadow-1-up)',
+ '@shadow-1-down': 'var(--shadow-1-down)',
+ '@shadow-1-left': 'var(--shadow-1-left)',
+ '@shadow-1-right': 'var(--shadow-1-right)',
+ '@shadow-2': 'var(--shadow-2)',
+ // Buttons
+ '@btn-shadow': 'var(--btn-shadow)',
+ '@btn-primary-shadow': 'var(--btn-primary-shadow)',
+ '@btn-text-shadow': 'var(--btn-text-shadow)',
+ //
+ '@btn-default-bg': 'var(--btn-default-bg)',
+ '@btn-danger-bg': '@error-color',
+ '@btn-danger-border': '@error-color',
+ //
+ '@btn-default-ghost-color': 'var(--btn-default-ghost-color)',
+ '@btn-default-ghost-border': 'var(--btn-default-ghost-border)',
+ //
+ '@btn-text-hover-bg': 'var(--btn-text-hover-bg)',
+ // Checkbox
+ '@checkbox-check-bg': 'var(--checkbox-check-bg)',
+ // Descriptions
+ '@descriptions-bg': 'var(--descriptions-bg)',
+ // Divider
+ '@divider-color': 'var(--divider-color)',
+ // Dropdown
+ '@dropdown-menu-submenu-disabled-bg':
+ 'var(--dropdown-menu-submenu-disabled-bg)',
+ // Radio
+ '@radio-dot-disabled-color': 'var(--radio-dot-disabled-color)',
+ '@radio-solid-checked-color': 'var(--radio-solid-checked-color)',
+ // Radio buttons
+ '@radio-disabled-button-checked-bg':
+ 'var(--radio-disabled-button-checked-bg)',
+ '@radio-disabled-button-checked-color':
+ 'var(--radio-disabled-button-checked-color)',
+ // Layout
+ '@layout-body-background': 'var(--layout-body-background)',
+ '@layout-header-background': 'var(--layout-header-background)',
+ '@layout-trigger-background': 'var(--layout-trigger-background)',
+ // Dropdown
+ '@dropdown-menu-bg': 'var(--dropdown-menu-bg)',
+ // Input
+ '@input-placeholder-color': 'var(--input-placeholder-color)',
+ '@input-icon-color': 'var(--input-icon-color)',
+ '@input-bg': 'var(--input-bg)',
+ '@input-number-handler-active-bg': 'var(--input-number-handler-active-bg)',
+ '@input-icon-hover-color': 'var(--input-icon-hover-color)',
+ // Mentions
+ '@mentions-dropdown-bg': 'var(--mentions-dropdown-bg)',
+ // Select
+ '@select-dropdown-bg': 'var(--select-dropdown-bg)',
+ '@select-background': 'var(--select-background)',
+ '@select-clear-background': 'var(--select-clear-background)',
+ '@select-selection-item-bg': 'var(--select-selection-item-bg)',
+ '@select-selection-item-border-color':
+ 'var(--select-selection-item-border-color)',
+ '@select-multiple-disabled-background':
+ 'var(--select-multiple-disabled-background)',
+ '@select-multiple-item-disabled-color':
+ 'var(--select-multiple-item-disabled-color)',
+ '@select-multiple-item-disabled-border-color':
+ 'var(--select-multiple-item-disabled-border-color)',
+ // Cascader
+ '@cascader-bg': 'var(--cascader-bg)',
+ '@cascader-menu-bg': 'var(--cascader-menu-bg)',
+ '@cascader-menu-border-color-split':
+ 'var(--cascader-menu-border-color-split)',
+ // Tooltip
+ '@tooltip-bg': 'var(--tooltip-bg)',
+ // Popover
+ '@popover-bg': 'var(--popover-bg)',
+ // Modal
+ '@modal-header-bg': 'var(--modal-header-bg)',
+ '@modal-header-border-color-split': 'var(--modal-header-border-color-split)',
+ '@modal-content-bg': 'var(--modal-content-bg)',
+ '@modal-footer-border-color-split': 'var(--modal-footer-border-color-split)',
+ // Progress
+ '@progress-steps-item-bg': 'var(--progress-steps-item-bg)',
+ // Menu
+ '@menu-popup-bg': 'var(--menu-popup-bg)',
+ '@menu-dark-bg': 'var(--menu-dark-bg)',
+ '@menu-dark-inline-submenu-bg': 'var(--menu-dark-inline-submenu-bg)',
+ // Table
+ '@table-header-bg': 'var(--table-header-bg)',
+ '@table-header-sort-bg': 'var(--table-header-sort-bg)',
+ '@table-body-sort-bg': 'var(--table-body-sort-bg)',
+ '@table-row-hover-bg': 'var(--table-row-hover-bg)',
+ '@table-selected-row-hover-bg': '@primary-1',
+ '@table-expanded-row-bg': 'var(--table-expanded-row-bg)',
+ '@table-header-cell-split-color': 'var(--table-header-cell-split-color)',
+ '@table-header-sort-active-bg': 'var(--table-header-sort-active-bg)',
+ '@table-header-filter-active-bg': 'var(--table-header-filter-active-bg)',
+ '@table-filter-btns-bg': 'var(--table-filter-btns-bg)',
+ '@table-filter-dropdown-bg': 'var(--table-filter-dropdown-bg)',
+ '@table-expand-icon-bg': 'var(--table-expand-icon-bg)',
+ // TimePicker
+ '@picker-bg': 'var(--picker-bg)',
+ '@picker-basic-cell-hover-with-range-color': 'var(--primary-2)',
+ '@picker-basic-cell-disabled-bg': 'var(--picker-basic-cell-disabled-bg)',
+ '@picker-border-color': 'var(--picker-border-color)',
+ '@picker-date-hover-range-border-color': 'var(--primary-4)',
+ // Calendar
+ '@calendar-bg': 'var(--calendar-bg)',
+ '@calendar-input-bg': 'var(--calendar-input-bg)',
+ '@calendar-border-color': 'var(--calendar-border-color)',
+ '@calendar-column-active-bg': '@calendar-item-active-bg',
+ '@calendar-full-bg': 'var(--calendar-full-bg)',
+ // Badge
+ '@badge-text-color': '@white',
+ // Rate
+ '@rate-star-bg': 'var(--rate-star-bg)',
+ // Card
+ '@card-actions-background': 'var(--card-actions-background)',
+ '@card-skeleton-bg': 'var(--card-skeleton-bg)',
+ '@card-shadow': 'var(--card-shadow)',
+ // Comment
+ '@comment-bg': 'var(--comment-bg)',
+ '@comment-author-time-color': 'var(--comment-author-time-color)',
+ '@comment-action-hover-color': 'var(--comment-action-hover-color)',
+ // BackTop
+ '@back-top-bg': 'var(--back-top-bg)',
+ '@back-top-hover-bg': 'var(--back-top-hover-bg)',
+ // Avatar
+ '@avatar-bg': 'var(--avatar-bg)',
+ // Switch
+ '@switch-bg': 'var(--switch-bg)',
+ // Pagination
+ '@pagination-item-bg': 'var(--pagination-item-bg)',
+ '@pagination-item-bg-active': 'var(--pagination-item-bg-active)',
+ '@pagination-item-link-bg': 'var(--pagination-item-link-bg)',
+ '@pagination-item-disabled-color-active':
+ 'var(--pagination-item-disabled-color-active)',
+ '@pagination-item-disabled-bg-active':
+ 'var(--pagination-item-disabled-bg-active)',
+ '@pagination-item-input-bg': 'var(--pagination-item-input-bg)',
+ // PageHeader
+ '@page-header-back-color': 'var(--page-header-back-color)',
+ '@page-header-ghost-bg': 'var(--page-header-ghost-bg)',
+ // Slider
+ '@slider-rail-background-color': 'var(--slider-rail-background-color)',
+ '@slider-rail-background-color-hover':
+ 'var(--slider-rail-background-color-hover)',
+ '@slider-handle-color-focus': '@primary-5',
+ '@slider-handle-color-focus-shadow': 'var(--primary-2)',
+ '@slider-dot-border-color': 'var(--slider-dot-border-color)',
+ '@slider-dot-border-color-active': 'var(--slider-dot-border-color)',
+ // Tree
+ '@tree-bg': 'var(--tree-bg)',
+ // Skeleton
+ '@skeleton-to-color': 'var(--skeleton-to-color)',
+ // Transfer
+ '@transfer-item-hover-bg': 'var(--transfer-item-hover-bg)',
+ '@transfer-item-selected-hover-bg': '@primary-1',
+ // Message
+ '@message-notice-content-bg': 'var(--message-notice-content-bg)',
+ // Alert
+ '@alert-success-border-color': '@green-3',
+ '@alert-success-bg-color': '@green-1',
+ '@alert-success-icon-color': '@success-color',
+ '@alert-info-border-color': '@primary-3',
+ '@alert-info-bg-color': '@primary-1',
+ '@alert-info-icon-color': '@primary-color',
+ '@alert-warning-border-color': '@gold-3',
+ '@alert-warning-bg-color': '@gold-1',
+ '@alert-warning-icon-color': '@warning-color',
+ '@alert-error-border-color': '@red-3',
+ '@alert-error-bg-color': '@red-1',
+ '@alert-error-icon-color': '@error-color',
+ // List
+ '@list-customize-card-bg': 'var(--list-customize-card-bg)',
+ // Drawer
+ '@drawer-bg': 'var(--drawer-bg)',
+ // Timeline
+ '@timeline-color': 'var(--timeline-color)',
+ '@timeline-dot-color': 'var(--timeline-dot-color)',
+ // Image
+ '@image-preview-operation-disabled-color':
+ 'var(--image-preview-operation-disabled-color)',
+ // Steps
+ '@steps-nav-arrow-color': 'var(--steps-nav-arrow-color)',
+ '@steps-background': 'var(--steps-background)',
+ // Notification
+ '@notification-bg': 'var(--notification-bg)',
+ //
+ '@gradient-min': 'var(--gradient-min)',
+ '@gradient-max': 'var(--gradient-max)',
+ // 滚动条
+ '@scrollbar-thumb-color': 'var(--scrollbar-thumb-color)',
+ '@scrollbar-thumb-hover-color': 'var(--scrollbar-thumb-hover-color)',
+ '@scrollbar-track-color': 'var(--scrollbar-track-color)',
+ // 侧栏
+ '@sidebar-background': 'var(--sidebar-background)',
+ '@sidebar-light-background': 'var(--sidebar-light-background)',
+ '@sidebar-light-shadow': 'var(--sidebar-light-shadow)',
+ '@sidebar-dark-shadow': 'var(--sidebar-dark-shadow)',
+ '@sidebar-scrollbar-thumb-color': 'var(--sidebar-scrollbar-thumb-color)',
+ '@sidebar-scrollbar-thumb-hover-color':
+ 'var(--sidebar-scrollbar-thumb-hover-color)',
+ '@sidebar-scrollbar-track-color': 'var(--sidebar-scrollbar-track-color)',
+ '@sidebar-light-scrollbar-thumb-color':
+ 'var(--sidebar-light-scrollbar-thumb-color)',
+ '@sidebar-light-scrollbar-thumb-hover-color':
+ 'var(--sidebar-light-scrollbar-thumb-hover-color)',
+ '@sidebar-light-scrollbar-track-color':
+ 'var(--sidebar-light-scrollbar-track-color)',
+ // 顶栏
+ '@header-background': 'var(--header-background)',
+ '@header-light-background': 'var(--header-light-background)',
+ '@header-light-shadow': 'var(--header-light-shadow)',
+ '@header-dark-shadow': 'var(--header-dark-shadow)',
+ '@header-tool-hover-bg': 'var(--header-tool-hover-bg)',
+ '@header-dark-tool-hover-bg': 'var(--header-dark-tool-hover-bg)',
+ // logo
+ '@logo-light-shadow': 'var(--logo-light-shadow)',
+ '@logo-dark-shadow': 'var(--logo-dark-shadow)'
+};
+
+/**
+ * 需要替换的内容
+ */
+const replaces = {
+ // style/color/colorPalette.less
+ 'this.colorPalette = function(color, index) {': `this.colorPalette = function(color, index) {
+ if(color.indexOf('var(--') === 0) {
+ if(color === 'var(--primary-color)' || color === 'var(--info-color)') {
+ return 'var(--primary-' + index + ')';
+ }
+ if(color === 'var(--error-color)' || color === 'var(--highlight-color)') {
+ return 'var(--red-' + index + ')';
+ }
+ if(color === 'var(--warning-color)') {
+ return 'var(--gold-' + index + ')';
+ }
+ if(color === 'var(--success-color)') {
+ return 'var(--green-' + index + ')';
+ }
+ return color.replace(')', '-unknown)');
+ }`,
+ // input/style/mixin.less
+ 'fade(@borderColor, @outline-fade)':
+ 'replace(~"@{borderColor}", "-color", "-color-outline")',
+ // notification/style/index-pure.less
+ 'shade(@text-color-secondary, 40%)': '@text-color',
+ // popover/style/index-pure.less
+ "box-shadow: ~'0 0 8px @{shadow-color} \\9';": '',
+ // switch/style/index-pure.less
+ 'box-shadow: 0 0 0 2px fade(@disabled-color, 10%)':
+ 'box-shadow: 0 0 0 2px var(--primary-2)',
+ // button/style/mixin.less
+ 'fadein(@btn-text-hover-bg, 1%)': 'var(--btn-text-active-bg)',
+ // table\style\index-pure.less
+ 'darken(@shadow-color, 5%)': '@shadow-color',
+ 'lighten(@table-border-color, 80%)': '@component-background',
+ // date-picker/style/panel.less
+ 'fade(@text-color-inverse, 50%)': 'fade(@white, 50%)',
+ // tabs\style\position.less
+ 'fade(@shadow-color, 8%)': '@shadow-color'
+};
+
+/**
+ * 修改 less 变量的预处理器
+ */
+class AntdLessPreProcessor {
+ variables;
+ replaces;
+
+ constructor(
+ variables,
+ replaces
+ ) {
+ this.variables = variables || {};
+ this.replaces = replaces || {};
+ }
+
+ process(src) {
+ let result = src;
+ Object.keys(this.variables).forEach((key) => {
+ const value = this.variables[key];
+ if (typeof value === 'string') {
+ result = result.replace(
+ new RegExp(key + ':[^;]*;', 'g'),
+ key + ': ' + this.variables[key] + ';'
+ );
+ }
+ });
+ Object.keys(this.replaces).forEach((key) => {
+ const value = this.replaces[key];
+ if (typeof value === 'string') {
+ result = result.split(key).join(value);
+ }
+ });
+ return result;
+ }
+}
+
+/**
+ * 转换 antd 变量的 less 插件
+ */
+class DynamicAntdLess {
+ options;
+
+ constructor(options) {
+ this.options = {
+ variables: { ...variables, ...options?.variables },
+ replaces: { ...replaces, ...options?.replaces }
+ };
+ }
+
+ install(_less, manager, _functions) {
+ // 添加预处理器
+ manager.addPreProcessor(
+ new AntdLessPreProcessor(this.options.variables, this.options.replaces),
+ 2000
+ );
+ }
+}
+
+export { DynamicAntdLess };
diff --git a/guns-front-project/src/utils/page-tab-util.js b/guns-front-project/src/utils/page-tab-util.js
new file mode 100644
index 00000000..88910569
--- /dev/null
+++ b/guns-front-project/src/utils/page-tab-util.js
@@ -0,0 +1,249 @@
+/**
+ * 页签操作封装
+ */
+import { unref } from 'vue';
+import { message } from 'ant-design-vue/es';
+import router from '@/router';
+import { useThemeStore } from '@/store/modules/theme';
+import { removeToken } from '@/utils/token-util';
+import { setDocumentTitle } from '@/utils/document-title-util';
+import {
+ HOME_PATH,
+ LAYOUT_PATH,
+ REDIRECT_PATH,
+ REPEATABLE_TABS
+} from '@/config/setting';
+const HOME_ROUTE = HOME_PATH || LAYOUT_PATH;
+const BASE_URL = import.meta.env.BASE_URL;
+
+/**
+ * 刷新当前路由
+ */
+export function reloadPageTab(option) {
+ if (!option) {
+ // 刷新当前路由
+ const { path, fullPath, query } = unref(router.currentRoute);
+ if (path.includes(REDIRECT_PATH)) {
+ return;
+ }
+ const isHome = isHomeRoute(unref(router.currentRoute));
+ setRouteReload({
+ reloadHome: isHome,
+ reloadPath: isHome ? void 0 : fullPath
+ });
+ router.replace({
+ path: REDIRECT_PATH + path,
+ query
+ });
+ } else {
+ // 刷新指定页签
+ const { fullPath, isHome } = option;
+ setRouteReload({
+ reloadHome: isHome,
+ reloadPath: isHome ? void 0 : fullPath
+ });
+ router.replace(REDIRECT_PATH + fullPath);
+ }
+}
+
+/**
+ * 关闭当前页签
+ */
+export function finishPageTab() {
+ const key = getRouteTabKey();
+ removePageTab({ key, active: key });
+}
+
+/**
+ * 关闭页签
+ */
+export function removePageTab(option) {
+ useThemeStore()
+ .tabRemove(option)
+ .then(({ path, home }) => {
+ if (path) {
+ router.push(path);
+ } else if (home) {
+ router.push(HOME_ROUTE);
+ }
+ })
+ .catch(() => {
+ message.error('当前页签不可关闭');
+ });
+}
+
+/**
+ * 关闭左侧页签
+ */
+export function removeLeftPageTab(option) {
+ useThemeStore()
+ .tabRemoveLeft(option)
+ .then(({ path }) => {
+ if (path) {
+ router.push(path);
+ }
+ })
+ .catch(() => {
+ message.error('左侧没有可关闭的页签');
+ });
+}
+
+/**
+ * 关闭右侧页签
+ */
+export function removeRightPageTab(option) {
+ useThemeStore()
+ .tabRemoveRight(option)
+ .then(({ path, home }) => {
+ if (path) {
+ router.push(path);
+ } else if (home) {
+ router.push(HOME_ROUTE);
+ }
+ })
+ .catch(() => {
+ message.error('右侧没有可关闭的页签');
+ });
+}
+
+/**
+ * 关闭其它页签
+ */
+export function removeOtherPageTab(option) {
+ useThemeStore()
+ .tabRemoveOther(option)
+ .then(({ path, home }) => {
+ if (path) {
+ router.push(path);
+ } else if (home) {
+ router.push(HOME_ROUTE);
+ }
+ })
+ .catch(() => {
+ message.error('没有可关闭的页签');
+ });
+}
+
+/**
+ * 关闭全部页签
+ * @param active 当前选中页签
+ */
+export function removeAllPageTab(active) {
+ useThemeStore()
+ .tabRemoveAll(active)
+ .then(({ home }) => {
+ if (home) {
+ router.push(HOME_ROUTE);
+ }
+ })
+ .catch(() => {
+ message.error('没有可关闭的页签');
+ });
+}
+
+/**
+ * 登录成功后清空页签
+ */
+export function cleanPageTabs() {
+ useThemeStore().setTabs([]);
+}
+
+/**
+ * 添加页签
+ * @param data 页签数据
+ */
+export function addPageTab(data) {
+ useThemeStore().tabAdd(data);
+}
+
+/**
+ * 修改页签
+ * @param data 页签数据
+ */
+export function setPageTab(data) {
+ useThemeStore().tabSetItem(data);
+}
+
+/**
+ * 更新页签数据
+ * @param data 页签数据
+ */
+export function setPageTabs(data) {
+ useThemeStore().setTabs(data);
+}
+
+/**
+ * 修改页签标题
+ * @param title 标题
+ */
+export function setPageTabTitle(title) {
+ setPageTab({ key: getRouteTabKey(), title });
+ setDocumentTitle(title);
+}
+
+/**
+ * 获取当前路由对应的页签 key
+ */
+export function getRouteTabKey() {
+ const { path, fullPath, meta } = unref(router.currentRoute);
+ const isUnique = meta.tabUnique === false || REPEATABLE_TABS.includes(path);
+ return isUnique ? fullPath : path;
+}
+
+/**
+ * 设置主页的组件名称
+ * @param components 组件名称
+ */
+export function setHomeComponents(components) {
+ useThemeStore().setHomeComponents(components);
+}
+
+/**
+ * 设置路由刷新信息
+ * @param option 路由刷新参数
+ */
+export function setRouteReload(option) {
+ return useThemeStore().setRouteReload(option);
+}
+
+/**
+ * 判断路由是否是主页
+ * @param route 路由信息
+ */
+export function isHomeRoute(route) {
+ const { path, matched } = route;
+ if (HOME_ROUTE === path) {
+ return true;
+ }
+ return (
+ matched[0] &&
+ matched[0].path === LAYOUT_PATH &&
+ matched[0].redirect === path
+ );
+}
+
+/**
+ * 登录成功后跳转首页
+ * @param from 登录前的地址
+ */
+export function goHomeRoute(from) {
+ router.replace(from || HOME_ROUTE);
+}
+
+/**
+ * 退出登录
+ * @param route 是否使用路由跳转
+ * @param from 登录后跳转的地址
+ */
+export function logout(route, from) {
+ removeToken();
+ if (route) {
+ router.push({
+ path: '/login',
+ query: from ? { from } : void 0
+ });
+ } else {
+ // 这样跳转避免再次登录重复注册动态路由
+ location.replace(BASE_URL + 'login' + (from ? '?from=' + from : ''));
+ }
+}
diff --git a/guns-front-project/src/utils/permission.js b/guns-front-project/src/utils/permission.js
new file mode 100644
index 00000000..93f8be71
--- /dev/null
+++ b/guns-front-project/src/utils/permission.js
@@ -0,0 +1,94 @@
+/**
+ * 按钮级权限控制
+ */
+import { useUserStore } from '@/store/modules/user';
+
+/* 判断数组是否有某些值 */
+function arrayHas(array, value) {
+ if (!value) {
+ return true;
+ }
+ if (!array) {
+ return false;
+ }
+ if (Array.isArray(value)) {
+ for (let i = 0; i < value.length; i++) {
+ if (array.indexOf(value[i]) === -1) {
+ return false;
+ }
+ }
+ return true;
+ }
+ return array.indexOf(value) !== -1;
+}
+
+/* 判断数组是否有任意值 */
+function arrayHasAny(array, value) {
+ if (!value) {
+ return true;
+ }
+ if (!array) {
+ return false;
+ }
+ if (Array.isArray(value)) {
+ for (let i = 0; i < value.length; i++) {
+ if (array.indexOf(value[i]) !== -1) {
+ return true;
+ }
+ }
+ return false;
+ }
+ return array.indexOf(value) !== -1;
+}
+
+/**
+ * 是否有某些权限
+ * @param value 权限字符或字符数组
+ */
+export function hasPermission(value) {
+ const userStore = useUserStore();
+ return arrayHas(userStore?.authorities, value);
+}
+
+/**
+ * 是否有任意权限
+ * @param value 权限字符或字符数组
+ */
+export function hasAnyPermission(value) {
+ const userStore = useUserStore();
+ return arrayHasAny(userStore?.authorities, value);
+}
+
+export default {
+ install(app) {
+ // 添加自定义指令
+ app.directive('role', {
+ mounted: (el, binding) => {
+ if (!hasRole(binding.value)) {
+ el.parentNode?.removeChild(el);
+ }
+ }
+ });
+ app.directive('any-role', {
+ mounted: (el, binding) => {
+ if (!hasAnyRole(binding.value)) {
+ el.parentNode?.removeChild(el);
+ }
+ }
+ });
+ app.directive('permission', {
+ mounted: (el, binding) => {
+ if (!hasPermission(binding.value)) {
+ el.parentNode?.removeChild(el);
+ }
+ }
+ });
+ app.directive('any-permission', {
+ mounted: (el, binding) => {
+ if (!hasAnyPermission(binding.value)) {
+ el.parentNode?.removeChild(el);
+ }
+ }
+ });
+ }
+};
diff --git a/guns-front-project/src/utils/request/request-util.js b/guns-front-project/src/utils/request/request-util.js
new file mode 100644
index 00000000..615a0718
--- /dev/null
+++ b/guns-front-project/src/utils/request/request-util.js
@@ -0,0 +1,105 @@
+/**
+ * 通用请求工具类封装
+ *
+ * @author fengshuonan
+ * @date 2022/4/8 10:47
+ */
+import request from '@/utils/request/request';
+import axios from 'axios';
+import { getToken } from '@/utils/token-util';
+
+export default class RequestUtil {
+ /**
+ * get请求
+ *
+ * @author fengshuonan
+ * @date 2022/4/8 10:50
+ */
+ static async get(url, params) {
+ if (params === undefined) {
+ params = {};
+ }
+ let result = await request.get(url, { params });
+ return result.data;
+ }
+
+ /**
+ * get请求并获取数据
+ *
+ * @author fengshuonan
+ * @date 2022/4/8 10:50
+ */
+ static async getAndLoadData(url, params) {
+ let result = await this.get(url, params);
+ return result.data;
+ }
+
+ /**
+ * post请求
+ *
+ * @author fengshuonan
+ * @date 2022/4/8 10:50
+ */
+ static async post(url, params) {
+ if (params === undefined) {
+ params = {};
+ }
+ let result = await request.post(url, params);
+ return result.data;
+ }
+
+ /**
+ * post请求并获取数据
+ *
+ * @author fengshuonan
+ * @date 2022/4/8 10:50
+ */
+ static async postAndLoadData(url, params) {
+ let result = await this.post(url, params);
+ return result.data;
+ }
+
+ /**
+ * 封装downLoad请求
+ *
+ * @author fengshuonan
+ * @date 2021/4/2 16:13
+ */
+ static downLoad(url, params) {
+ if (params === undefined) {
+ params = {};
+ }
+ let paramUrl = '?';
+ for (let field in params) {
+ if (params[field]) {
+ paramUrl = paramUrl + field + '=' + params[field] + '&';
+ }
+ }
+ paramUrl = paramUrl.substring(0, paramUrl.length - 1);
+
+ if (!paramUrl) {
+ paramUrl = `?token=${getToken()}`;
+ } else {
+ if (!paramUrl.includes('&token=')) {
+ paramUrl = `${paramUrl}&token=${getToken()}`;
+ }
+ }
+ window.location.href = `${url}${paramUrl}`;
+ }
+
+ // post下载文件封装
+ static reqDown(url, params) {
+ return axios({
+ method: 'post',
+ responseType: 'blob',
+ url: url,
+ data: params,
+ headers: {
+ "Authorization": getToken()
+ }
+ }).then(res => {
+ return res
+ }).catch(error => {
+ });
+ }
+}
diff --git a/guns-front-project/src/utils/request/request.js b/guns-front-project/src/utils/request/request.js
new file mode 100644
index 00000000..a7845e7a
--- /dev/null
+++ b/guns-front-project/src/utils/request/request.js
@@ -0,0 +1,82 @@
+/**
+ * axios 实例
+ */
+import axios from 'axios';
+import { unref } from 'vue';
+import router from '@/router';
+import { Modal, message } from 'ant-design-vue/es';
+import { API_BASE_PREFIX, TOKEN_HEADER_NAME } from '@/config/setting';
+import { getToken, setToken } from '../token-util';
+import { logout } from '../page-tab-util';
+
+const service = axios.create({
+ baseURL: API_BASE_PREFIX
+});
+
+/**
+ * 添加请求拦截器
+ */
+service.interceptors.request.use(
+ (config) => {
+ // 添加 token 到 header
+ const token = getToken();
+ if (token && config.headers) {
+ config.headers[TOKEN_HEADER_NAME] = token;
+ }
+ return config;
+ },
+ (error) => {
+ return Promise.reject(error);
+ }
+);
+
+/**
+ * 添加响应拦截器
+ */
+service.interceptors.response.use(
+ res => {
+ // 请求成功,token自动续期
+ if (res.data?.code === '00000') {
+ const token = res.headers[TOKEN_HEADER_NAME.toLowerCase()];
+ if (token) {
+ setToken(token, true);
+ }
+ return res;
+ }
+
+ // 处理响应错误,请求异常自动提示错误信息,如果是B0301就跳转到登录界面
+ return processErrorResponse(res);
+ },
+ error => {
+ // 处理响应错误
+ return processErrorResponse(error.response);
+ }
+);
+
+/**
+ * 处理错误响应
+ */
+const processErrorResponse = function (response) {
+ // 如果是非B0301,则提示错误信息
+ if (response.data.code !== 'B0301') {
+ message.error(response.data.message);
+ } else {
+ // 如果是B0301,则跳转登录界面
+ const currentPath = unref(router.currentRoute).path;
+ if (currentPath === '/') {
+ logout(true);
+ } else {
+ Modal.destroyAll();
+ Modal.info({
+ title: '系统提示',
+ content: '登录状态已过期, 请退出重新登录!',
+ okText: '重新登录',
+ onOk: () => {
+ logout(false, currentPath);
+ }
+ });
+ }
+ }
+ return Promise.reject(response.data);
+};
+export default service;
diff --git a/guns-front-project/src/utils/resolvers.js b/guns-front-project/src/utils/resolvers.js
new file mode 100644
index 00000000..0c121063
--- /dev/null
+++ b/guns-front-project/src/utils/resolvers.js
@@ -0,0 +1,308 @@
+/**
+ * AntDesignVue 所有组件名称
+ */
+const antComponents = [
+ 'Affix',
+ 'Alert',
+ 'Anchor',
+ 'AnchorLink',
+ 'AutoComplete',
+ 'AutoCompleteOptGroup',
+ 'AutoCompleteOption',
+ 'Avatar',
+ 'AvatarGroup',
+ 'BackTop',
+ 'Badge',
+ 'BadgeRibbon',
+ 'Breadcrumb',
+ 'BreadcrumbItem',
+ 'BreadcrumbSeparator',
+ 'Button',
+ 'ButtonGroup',
+ 'Calendar',
+ 'Card',
+ 'CardGrid',
+ 'CardMeta',
+ 'Carousel',
+ 'Cascader',
+ 'CheckableTag',
+ 'Checkbox',
+ 'CheckboxGroup',
+ 'Col',
+ 'Collapse',
+ 'CollapsePanel',
+ 'Comment',
+ 'ConfigProvider',
+ 'DatePicker',
+ 'Descriptions',
+ 'DescriptionsItem',
+ 'DirectoryTree',
+ 'Divider',
+ 'Drawer',
+ 'Dropdown',
+ 'DropdownButton',
+ 'Empty',
+ 'Form',
+ 'FormItem',
+ 'FormItemRest',
+ 'Image',
+ 'ImagePreviewGroup',
+ 'Input',
+ 'InputGroup',
+ 'InputNumber',
+ 'InputPassword',
+ 'InputSearch',
+ 'Layout',
+ 'LayoutContent',
+ 'LayoutFooter',
+ 'LayoutHeader',
+ 'LayoutSider',
+ 'List',
+ 'ListItem',
+ 'ListItemMeta',
+ 'LocaleProvider',
+ 'Mentions',
+ 'MentionsOption',
+ 'Menu',
+ 'MenuDivider',
+ 'MenuItem',
+ 'MenuItemGroup',
+ 'Modal',
+ 'MonthPicker',
+ 'PageHeader',
+ 'Pagination',
+ 'Popconfirm',
+ 'Popover',
+ 'Progress',
+ 'QuarterPicker',
+ 'Radio',
+ 'RadioButton',
+ 'RadioGroup',
+ 'RangePicker',
+ 'Rate',
+ 'Result',
+ 'Row',
+ 'Select',
+ 'SelectOptGroup',
+ 'SelectOption',
+ 'Skeleton',
+ 'SkeletonAvatar',
+ 'SkeletonButton',
+ 'SkeletonImage',
+ 'SkeletonInput',
+ 'Slider',
+ 'Space',
+ 'Spin',
+ 'Statistic',
+ 'StatisticCountdown',
+ 'Step',
+ 'Steps',
+ 'SubMenu',
+ 'Switch',
+ 'TabPane',
+ 'Table',
+ 'TableColumn',
+ 'TableColumnGroup',
+ 'TableSummary',
+ 'TableSummaryCell',
+ 'TableSummaryRow',
+ 'Tabs',
+ 'Tag',
+ 'Textarea',
+ 'TimePicker',
+ 'TimeRangePicker',
+ 'Timeline',
+ 'TimelineItem',
+ 'Tooltip',
+ 'Transfer',
+ 'Tree',
+ 'TreeNode',
+ 'TreeSelect',
+ 'TreeSelectNode',
+ 'Typography',
+ 'TypographyLink',
+ 'TypographyParagraph',
+ 'TypographyText',
+ 'TypographyTitle',
+ 'Upload',
+ 'UploadDragger',
+ 'WeekPicker'
+];
+
+/**
+ * AntDesignVue 需要特殊处理样式依赖的组件名称
+ */
+const matchComponents = [
+ {
+ pattern: /^Avatar/,
+ styleDir: 'avatar'
+ },
+ {
+ pattern: /^AutoComplete/,
+ styleDir: 'auto-complete'
+ },
+ {
+ pattern: /^Anchor/,
+ styleDir: 'anchor'
+ },
+ {
+ pattern: /^Badge/,
+ styleDir: 'badge'
+ },
+ {
+ pattern: /^Breadcrumb/,
+ styleDir: 'breadcrumb'
+ },
+ {
+ pattern: /^Button/,
+ styleDir: 'button'
+ },
+ {
+ pattern: /^Checkbox/,
+ styleDir: 'checkbox'
+ },
+ {
+ pattern: /^Card/,
+ styleDir: 'card'
+ },
+ {
+ pattern: /^Collapse/,
+ styleDir: 'collapse'
+ },
+ {
+ pattern: /^Descriptions/,
+ styleDir: 'descriptions'
+ },
+ {
+ pattern: /^RangePicker|^WeekPicker|^MonthPicker|^QuarterPicker/,
+ styleDir: 'date-picker'
+ },
+ {
+ pattern: /^TimeRangePicker/,
+ styleDir: 'time-picker'
+ },
+ {
+ pattern: /^Dropdown/,
+ styleDir: 'dropdown'
+ },
+ {
+ pattern: /^Form/,
+ styleDir: 'form'
+ },
+ {
+ pattern: /^InputNumber/,
+ styleDir: 'input-number'
+ },
+ {
+ pattern: /^Input|^Textarea/,
+ styleDir: 'input'
+ },
+ {
+ pattern: /^Statistic/,
+ styleDir: 'statistic'
+ },
+ {
+ pattern: /^CheckableTag/,
+ styleDir: 'tag'
+ },
+ {
+ pattern: /^Layout/,
+ styleDir: 'layout'
+ },
+ {
+ pattern: /^Menu|^SubMenu/,
+ styleDir: 'menu'
+ },
+ {
+ pattern: /^Table/,
+ styleDir: 'table'
+ },
+ {
+ pattern: /^Radio/,
+ styleDir: 'radio'
+ },
+ {
+ pattern: /^Image/,
+ styleDir: 'image'
+ },
+ {
+ pattern: /^List/,
+ styleDir: 'list'
+ },
+ {
+ pattern: /^Tab/,
+ styleDir: 'tabs'
+ },
+ {
+ pattern: /^Mentions/,
+ styleDir: 'mentions'
+ },
+ {
+ pattern: /^Step/,
+ styleDir: 'steps'
+ },
+ {
+ pattern: /^Skeleton/,
+ styleDir: 'skeleton'
+ },
+ {
+ pattern: /^Select/,
+ styleDir: 'select'
+ },
+ {
+ pattern: /^TreeSelect/,
+ styleDir: 'tree-select'
+ },
+ {
+ pattern: /^Tree|^DirectoryTree/,
+ styleDir: 'tree'
+ },
+ {
+ pattern: /^Typography/,
+ styleDir: 'typography'
+ },
+ {
+ pattern: /^Timeline/,
+ styleDir: 'timeline'
+ },
+ {
+ pattern: /^Upload/,
+ styleDir: 'upload'
+ }
+];
+
+/**
+ * AntDesignVue 全部样式依赖
+ */
+export const antStyleDeps = Array.from(
+ new Set(
+ antComponents.map(name => {
+ for (let i = 0; i < matchComponents.length; i++) {
+ if (name.match(matchComponents[i].pattern)) {
+ return matchComponents[i].styleDir;
+ }
+ }
+ return kebabCase(name);
+ })
+ )
+).map(name => {
+ return `ant-design-vue/es/${name}/style`;
+});
+
+/**
+ * 全部的样式依赖
+ */
+export const styleDeps = antStyleDeps;
+
+/**
+ * 驼峰转中划线
+ * @param value
+ */
+function kebabCase(value) {
+ return value
+ .replace(/([A-Z])/g, ' $1')
+ .trim()
+ .split(' ')
+ .join('-')
+ .toLowerCase();
+}
diff --git a/guns-front-project/src/utils/token-util.js b/guns-front-project/src/utils/token-util.js
new file mode 100644
index 00000000..c6949cbb
--- /dev/null
+++ b/guns-front-project/src/utils/token-util.js
@@ -0,0 +1,40 @@
+/**
+ * token 操作封装
+ */
+import { TOKEN_STORE_NAME } from '@/config/setting';
+
+/**
+ * 获取缓存的 token
+ */
+export function getToken() {
+ const token = localStorage.getItem(TOKEN_STORE_NAME);
+ if (!token) {
+ return sessionStorage.getItem(TOKEN_STORE_NAME);
+ }
+ return token;
+}
+
+/**
+ * 缓存 token
+ * @param token token
+ * @param remember 是否永久存储
+ */
+export function setToken(token, remember) {
+ removeToken();
+ if (token) {
+ if (remember) {
+ localStorage.setItem(TOKEN_STORE_NAME, token);
+ } else {
+ sessionStorage.setItem(TOKEN_STORE_NAME, token);
+ }
+ }
+}
+
+/**
+ * 移除 token
+ */
+export function removeToken() {
+ localStorage.removeItem(TOKEN_STORE_NAME);
+ sessionStorage.removeItem(TOKEN_STORE_NAME);
+ sessionStorage.removeItem('ACTIVE_APP');
+}
diff --git a/guns-front-project/src/views/forget/index.vue b/guns-front-project/src/views/forget/index.vue
new file mode 100644
index 00000000..bbee190c
--- /dev/null
+++ b/guns-front-project/src/views/forget/index.vue
@@ -0,0 +1,327 @@
+
+
+
+ 忘记密码
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 返回登录
+
+
+ 修改密码
+
+
+
copyright © 2022 javaguns.com all rights reserved.
+
+
+
+
+ 立即发送
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/index/api/HomeApi.js b/guns-front-project/src/views/index/api/HomeApi.js
new file mode 100644
index 00000000..45ef539f
--- /dev/null
+++ b/guns-front-project/src/views/index/api/HomeApi.js
@@ -0,0 +1,39 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 个人信息api
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 15:03
+ */
+export class HomeApi {
+ /**
+ * 获取最近操作记录
+ *
+ * @author fengshuonan
+ * @date 2022/2/11 10:18
+ */
+ static getRecentLogs(params) {
+ return Request.getAndLoadData('/homePage/getRecentLogs', params);
+ }
+
+
+ /**
+ * 获取用户常用功能
+ * @param params
+ * @returns {Promise<*>}
+ */
+ static getUserAppList(params) {
+ return Request.getAndLoadData('/portalUserApp/getUserAppList', params);
+ }
+
+ /**
+ * 更新用户的常用功能
+ * @param params
+ * @returns {Promise<*>}
+ */
+ static updateUserAppList(params) {
+ return Request.post('/portalUserApp/updateUserAppList', params);
+ }
+
+}
diff --git a/guns-front-project/src/views/index/api/MyNoticeApi.js b/guns-front-project/src/views/index/api/MyNoticeApi.js
new file mode 100644
index 00000000..9d690906
--- /dev/null
+++ b/guns-front-project/src/views/index/api/MyNoticeApi.js
@@ -0,0 +1,59 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -我的通知公告api
+ *
+ */
+export class MyNoticeApi {
+ /**
+ * 分页
+ * @param {*} params
+ * @returns
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/sysMessage/page', params);
+ }
+
+ /**
+ * 清空我的消息
+ * @param {*} params
+ * @returns
+ */
+ static cleanMyMessage(params) {
+ return Request.post('/sysMessage/cleanMyMessage', params);
+ }
+
+ /**
+ * 详情
+ * @param {*} params
+ * @returns
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/sysMessage/detail', params);
+ }
+
+ /**
+ * 删除单个
+ * @param {*} params
+ * @returns
+ */
+ static delete(params) {
+ return Request.post('/sysMessage/delete', params);
+ }
+ /**
+ * 设为已读消息
+ * @param {*} params
+ * @returns
+ */
+ static setRead(params) {
+ return Request.post('/sysMessage/setRead', params);
+ }
+ /**
+ * 全部已读
+ * @param {*} params
+ * @returns
+ */
+ static setTotalRead(params) {
+ return Request.post('/sysMessage/setTotalRead', params);
+ }
+}
\ No newline at end of file
diff --git a/guns-front-project/src/views/index/api/OrgApi.js b/guns-front-project/src/views/index/api/OrgApi.js
new file mode 100644
index 00000000..f618e322
--- /dev/null
+++ b/guns-front-project/src/views/index/api/OrgApi.js
@@ -0,0 +1,20 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 个人信息api
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 15:03
+ */
+export class OrgApi {
+ /**
+ * 首页企业概况统计
+ *
+ * @author fengshuonan
+ * @date 2022/2/11 10:18
+ */
+ static orgInfoStat(params) {
+ return Request.getAndLoadData('/org/statInfo', params);
+ }
+
+}
diff --git a/guns-front-project/src/views/index/api/PersonInfoApi.js b/guns-front-project/src/views/index/api/PersonInfoApi.js
new file mode 100644
index 00000000..5dbb7b06
--- /dev/null
+++ b/guns-front-project/src/views/index/api/PersonInfoApi.js
@@ -0,0 +1,74 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 个人信息api
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 15:03
+ */
+export class PersonInfoApi {
+ /**
+ * 获取当前用户信息
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 15:04
+ */
+ static getCurrentLoginUserInfo(params) {
+ return Request.getAndLoadData('/sysUser/detail', params);
+ }
+
+ /**
+ * 更新当前用户信息
+ *
+ * @param {String} params.account 账号
+ * @param {String} params.birthday 生日
+ * @param {String} params.email 邮箱
+ * @param {String} params.phone 电话
+ * @param {String} params.realName 真实姓名
+ * @param {String} params.sex 性别
+ * @param {String} params.userId 用户id
+ * @author fengshuonan
+ * @date 2021/4/13 16:16
+ */
+ static updateUserInfo(params) {
+ return Request.post('/sysUser/updateInfo', params);
+ }
+
+
+ /**
+ * 获取个人信息详情
+ * @param params
+ * @returns {Promise<*>}
+ */
+ static getUserInfo(params) {
+ return Request.getAndLoadData('/personalInfo/getUserInfo', params);
+ }
+
+ /**
+ * 修改密码
+ * @param params
+ * @returns {Promise<*>}
+ */
+ static updatePassword(params) {
+ return Request.post('/personalInfo/updatePassword', params);
+ }
+
+ /**
+ * 修改头像
+ * @param params
+ * @returns {Promise<*>}
+ */
+ static updateAvatar(params) {
+ return Request.post('/personalInfo/updateAvatar', params);
+ }
+
+ /**
+ * 修改基本信息
+ * @param params
+ * @returns {Promise<*>}
+ */
+ static updateInfo(params) {
+ return Request.post('/personalInfo/updateInfo', params);
+ }
+
+}
diff --git a/guns-front-project/src/views/index/components/common-functions.vue b/guns-front-project/src/views/index/components/common-functions.vue
new file mode 100644
index 00000000..5650f8ef
--- /dev/null
+++ b/guns-front-project/src/views/index/components/common-functions.vue
@@ -0,0 +1,437 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.menuName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 已选:
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/index/components/company-overview.vue b/guns-front-project/src/views/index/components/company-overview.vue
new file mode 100644
index 00000000..d0a67a27
--- /dev/null
+++ b/guns-front-project/src/views/index/components/company-overview.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
组织机构:{{ orgInfo.organizationNum }}
+
+
+
+
+
+
+ 人员总数:{{ orgInfo.enterprisePersonNum }}
+
+
+
+
+
+
+
职位总数:{{ orgInfo.positionNum }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/index/components/operation-records.vue b/guns-front-project/src/views/index/components/operation-records.vue
new file mode 100644
index 00000000..b66287e7
--- /dev/null
+++ b/guns-front-project/src/views/index/components/operation-records.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.createTime }}
+ {{ item.logName + '-' + item.logContent }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/index/components/switch-company.vue b/guns-front-project/src/views/index/components/switch-company.vue
new file mode 100644
index 00000000..ed27eac4
--- /dev/null
+++ b/guns-front-project/src/views/index/components/switch-company.vue
@@ -0,0 +1,86 @@
+
+
+ 当前用户任职信息列表:
+
+
+ {{ item.companyName }}/{{ item.deptName }}/{{ item.positionName }}
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/index/components/userinfo.vue b/guns-front-project/src/views/index/components/userinfo.vue
new file mode 100644
index 00000000..83bbab37
--- /dev/null
+++ b/guns-front-project/src/views/index/components/userinfo.vue
@@ -0,0 +1,168 @@
+
+
+
+
+
+
+
+
+
+ 姓名:{{ userDetail.realName }}
+
+
+ 账号:{{ userDetail.account }}
+
+
+
公司:{{ userCurrentSelectCompanyInfo.companyName }}
+
切换当前公司
+
+
+ 邮箱:{{ userDetail.email }}
+
+
+ 电话:{{ userDetail.phone }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/index/form/my-notice.vue b/guns-front-project/src/views/index/form/my-notice.vue
new file mode 100644
index 00000000..642d869c
--- /dev/null
+++ b/guns-front-project/src/views/index/form/my-notice.vue
@@ -0,0 +1,271 @@
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/index/form/notice-detail.vue b/guns-front-project/src/views/index/form/notice-detail.vue
new file mode 100644
index 00000000..97dcf635
--- /dev/null
+++ b/guns-front-project/src/views/index/form/notice-detail.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 高
+ 中
+ 低
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/index/form/update-avatar.vue b/guns-front-project/src/views/index/form/update-avatar.vue
new file mode 100644
index 00000000..a28788ff
--- /dev/null
+++ b/guns-front-project/src/views/index/form/update-avatar.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/index/form/update-password.vue b/guns-front-project/src/views/index/form/update-password.vue
new file mode 100644
index 00000000..20ae1632
--- /dev/null
+++ b/guns-front-project/src/views/index/form/update-password.vue
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/index/form/update-user-info.vue b/guns-front-project/src/views/index/form/update-user-info.vue
new file mode 100644
index 00000000..9877b7b2
--- /dev/null
+++ b/guns-front-project/src/views/index/form/update-user-info.vue
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/index/index.vue b/guns-front-project/src/views/index/index.vue
new file mode 100644
index 00000000..24a9e4ab
--- /dev/null
+++ b/guns-front-project/src/views/index/index.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/index/personal.vue b/guns-front-project/src/views/index/personal.vue
new file mode 100644
index 00000000..8b03bb4b
--- /dev/null
+++ b/guns-front-project/src/views/index/personal.vue
@@ -0,0 +1,185 @@
+
+
+
+
+
+
+
+ {{ userInfo.realName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/init/index.vue b/guns-front-project/src/views/init/index.vue
new file mode 100644
index 00000000..1ef08076
--- /dev/null
+++ b/guns-front-project/src/views/init/index.vue
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
首次安装程序
+
+
+ {{ configList.description }}
+
+
{{ conItem.title }}
+
{{ conItem.description }}
+
+
+
+
+ {{ item.configName }}
+
+
+
+
+ {{ item.configDescription }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/login/login/api/LoginApi.js b/guns-front-project/src/views/login/login/api/LoginApi.js
new file mode 100644
index 00000000..57e9f12a
--- /dev/null
+++ b/guns-front-project/src/views/login/login/api/LoginApi.js
@@ -0,0 +1,73 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 登录退出接口
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 14:34
+ */
+export class LoginApi {
+ /**
+ * 登录接口
+ *
+ * @param {string} params.account 账号
+ * @param {string} params.password 密码
+ * @param {string} params.rememberMe 记住密码,true-记住,false-不记住
+ * @param {string} params.tenantCode 租户编码
+ * @author fengshuonan
+ * @date 2021/4/1 14:34
+ */
+ static login(params) {
+ return Request.post('/loginApi', params);
+ }
+
+ /**
+ * 单点登录,获取单点登录的loginCode
+ *
+ * @param {string} params.account 账号
+ * @param {string} params.password 密码
+ * @author fengshuonan
+ * @since 2023/11/6 18:58
+ */
+ static getLoginCode(params) {
+ return Request.post('/sso/getLoginCode', params);
+ }
+
+ /**
+ * 获取图片验证码以及验证信息接口
+ *
+ */
+ static getVerifyInfo() {
+ return Request.get('/dragCaptcha');
+ }
+
+ /**
+ * 退出接口
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 14:45
+ */
+ static logout() {
+ return Request.get('/logoutAction');
+ }
+
+ /**
+ * 获取api基础路径
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 14:45
+ */
+ static getBackendDeployUrl(params) {
+ return Request.get('/sysConfig/getBackendDeployUrl', params);
+ }
+
+ /**
+ * 获取图形验证码
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 14:45
+ */
+ static async getCaptcha(params) {
+ return await Request.get('/captcha', params);
+ }
+}
diff --git a/guns-front-project/src/views/login/login/api/SysTenantApi.js b/guns-front-project/src/views/login/login/api/SysTenantApi.js
new file mode 100644
index 00000000..d0a8ac32
--- /dev/null
+++ b/guns-front-project/src/views/login/login/api/SysTenantApi.js
@@ -0,0 +1,69 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 租户表api
+ *
+ * @author fengshuonan
+ * @date 2021/05/27 18:10
+ */
+export class SysTenantApi {
+ /**
+ * 新增
+ *
+ * @author fengshuonan
+ * @date 2021/05/27 18:10
+ */
+ static add(params) {
+ return Request.post('/sysTenant/register', params);
+ }
+
+ /**
+ * 修改
+ *
+ * @author fengshuonan
+ * @date 2021/05/27 18:10
+ */
+ static edit(params) {
+ return Request.post('/sysTenant/edit', params);
+ }
+
+ /**
+ * 删除
+ *
+ * @author fengshuonan
+ * @date 2021/05/27 18:10
+ */
+ static delete(params) {
+ return Request.post('/sysTenant/delete', params);
+ }
+
+ /**
+ * 获取租户下拉列表
+ *
+ * @author fengshuonan
+ * @date 2021/05/27 18:10
+ */
+ static async dropDownList() {
+ return await Request.getAndLoadData('/tenant/tenantDropdown');
+ }
+
+ /**
+ * 发送邮箱验证码
+ *
+ * @author fengshuonan
+ * @date 2021/05/27 18:10
+ */
+ static async sendEmail(params) {
+ return await Request.post('/tenant/sendEmail', params);
+ }
+
+ /**
+ * 提交租户注册信息
+ *
+ * @author fengshuonan
+ * @date 2021/05/27 18:10
+ */
+ static async submitTenantReg(params) {
+ return await Request.post('/tenant/submitTenantReg', params);
+ }
+}
diff --git a/guns-front-project/src/views/login/login/index.vue b/guns-front-project/src/views/login/login/index.vue
new file mode 100644
index 00000000..7c8f4d1f
--- /dev/null
+++ b/guns-front-project/src/views/login/login/index.vue
@@ -0,0 +1,472 @@
+
+
+
+
+
{{ themeInfo.gunsMgrName }}
+ {{ themeInfo.gunsSubTitle }}
+
+
+
{{ t('login.title') }}
+
+
+ 密码登录
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ loading ? t('login.loading') : t('login.login') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/login/sso.vue b/guns-front-project/src/views/login/sso.vue
new file mode 100644
index 00000000..9412c217
--- /dev/null
+++ b/guns-front-project/src/views/login/sso.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
diff --git a/guns-front-project/src/views/login/token.vue b/guns-front-project/src/views/login/token.vue
new file mode 100644
index 00000000..8253cc05
--- /dev/null
+++ b/guns-front-project/src/views/login/token.vue
@@ -0,0 +1,37 @@
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/auth/app/api/AppApi.js b/guns-front-project/src/views/system/auth/app/api/AppApi.js
new file mode 100644
index 00000000..8521ca7f
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/app/api/AppApi.js
@@ -0,0 +1,74 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -应用api
+ *
+ */
+export class AppApi {
+ /**
+ * 分页
+ * @param {*} params
+ * @returns
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/sysApp/page', params);
+ }
+
+ /**
+ * 添加
+ * @param {*} params
+ * @returns
+ */
+ static add(params) {
+ return Request.post('/sysApp/add', params);
+ }
+ /**
+ * 编辑
+ * @param {*} params
+ * @returns
+ */
+ static edit(params) {
+ return Request.post('/sysApp/edit', params);
+ }
+ /**
+ * 删除单个
+ * @param {*} params
+ * @returns
+ */
+ static delete(params) {
+ return Request.post('/sysApp/delete', params);
+ }
+ /**
+ * 删除批量
+ * @param {*} params
+ * @returns
+ */
+ static batchDelete(params) {
+ return Request.post('/sysApp/batchDelete', params);
+ }
+ /**
+ * 详情
+ * @param {*} params
+ * @returns
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/sysApp/detail', params);
+ }
+ /**
+ * 列表
+ * @param {*} params
+ * @returns
+ */
+ static list(params) {
+ return Request.getAndLoadData('/sysApp/list', params);
+ }
+
+ /**
+ * 修改应用状态
+ * @param {*} params
+ * @returns
+ */
+ static updateStatus(params) {
+ return Request.post('/sysApp/updateStatus', params);
+ }
+}
\ No newline at end of file
diff --git a/guns-front-project/src/views/system/auth/app/components/app-add-edit.vue b/guns-front-project/src/views/system/auth/app/components/app-add-edit.vue
new file mode 100644
index 00000000..aa7ca2db
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/app/components/app-add-edit.vue
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/auth/app/components/app-form.vue b/guns-front-project/src/views/system/auth/app/components/app-form.vue
new file mode 100644
index 00000000..86614e41
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/app/components/app-form.vue
@@ -0,0 +1,166 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ handleFileChange(info, 'iconList')"
+ :showUploadList="{
+ showDownloadIcon: true
+ }"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+ 启用
+ 禁用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/auth/app/index.vue b/guns-front-project/src/views/system/auth/app/index.vue
new file mode 100644
index 00000000..6c5c8053
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/app/index.vue
@@ -0,0 +1,293 @@
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/auth/menu/api/MenuApi.js b/guns-front-project/src/views/system/auth/menu/api/MenuApi.js
new file mode 100644
index 00000000..e0b90969
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/menu/api/MenuApi.js
@@ -0,0 +1,116 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 - 菜单api
+ *
+ */
+export class MenuApi {
+ /**
+ * 添加菜单
+ * @param {*} params
+ * @returns
+ */
+ static add(params) {
+ return Request.post('/sysMenu/add', params);
+ }
+ /**
+ * 编辑菜单
+ * @param {*} params
+ * @returns
+ */
+ static edit(params) {
+ return Request.post('/sysMenu/edit', params);
+ }
+ /**
+ * 删除菜单
+ * @param {*} params
+ * @returns
+ */
+ static delete(params) {
+ return Request.post('/sysMenu/delete', params);
+ }
+ /**
+ * 详情
+ * @param {*} params
+ * @returns
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/sysMenu/detail', params);
+ }
+ /**
+ * 获取菜单管理界面的每个应用组下的菜单信息
+ * @param {*} params
+ * @returns
+ */
+ static getAppMenuGroupDetail(params) {
+ return Request.getAndLoadData('/sysMenu/getAppMenuGroupDetail', params);
+ }
+ /**
+ * 调整菜单上下级机构和菜单的顺序
+ * @param {*} params
+ * @returns
+ */
+ static updateMenuTree(params) {
+ return Request.post('/sysMenu/updateMenuTree', params);
+ }
+
+
+ /** 菜单下的功能接口 */
+
+ /**
+ * 添加菜单功能
+ * @param {*} params
+ * @returns
+ */
+ static optionAdd(params) {
+ return Request.post('/sysMenuOptions/add', params);
+ }
+ /**
+ * 编辑菜单功能
+ * @param {*} params
+ * @returns
+ */
+ static optionEdit(params) {
+ return Request.post('/sysMenuOptions/edit', params);
+ }
+ /**
+ * 删除菜单功能
+ * @param {*} params
+ * @returns
+ */
+ static optionDelete(params) {
+ return Request.post('/sysMenuOptions/delete', params);
+ }
+ /**
+ * 分页查询-菜单功能
+ * @param {*} params
+ * @returns
+ */
+ static optionPage(params) {
+ return Request.getAndLoadData('/sysMenuOptions/page', params);
+ }
+ /**
+ * 列表查询-菜单功能
+ * @param {*} params
+ * @returns
+ */
+ static optionList(params) {
+ return Request.getAndLoadData('/sysMenuOptions/list', params);
+ }
+ /**
+ * 获取拼音
+ * @param {*} params
+ * @returns
+ */
+ static getPinyin(params) {
+ return Request.getAndLoadData('/common/getPinyin', params);
+ }
+ /**
+ * 获取所有业务列表
+ * @param {*} params
+ * @returns
+ */
+ static getProjectBusinessList(params) {
+ return Request.getAndLoadData('/sysMenu/getProjectBusinessList', params);
+ }
+}
\ No newline at end of file
diff --git a/guns-front-project/src/views/system/auth/menu/components/menu-add-edit.vue b/guns-front-project/src/views/system/auth/menu/components/menu-add-edit.vue
new file mode 100644
index 00000000..6ea1a8c9
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/menu/components/menu-add-edit.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/auth/menu/components/menu-form.vue b/guns-front-project/src/views/system/auth/menu/components/menu-form.vue
new file mode 100644
index 00000000..0dce405c
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/menu/components/menu-form.vue
@@ -0,0 +1,281 @@
+
+
+
+
+
+
+
+
![]()
+
{{ appItem.appName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ typeItem.name }}
+
+
+ 后台菜单:后台管理系统菜单,页面左侧是菜单。
+ 纯前端路由界面:无菜单的纯净版界面,前端完全自定义的界面。
+ 内部链接:后台管理系统,点击菜单直接在内部打开链接。
+ 外部链接:点击菜单后跳转到新的浏览器tab标签页打开。
+ 应用设计:绑定应用设计的业务展示
+
+
+
+
+
+
+
+ Vue前端组件配置
+
+
+
+
+ 路由地址:
+
+ 路由地址就是浏览器访问的URL地址
+
+
+
+
+
+
+
+
+
+ 链接地址:
+
+ 链接地址请以:http://开头
+
+
+
+
+
+
+
+
+
+ 组件代码路径:
+
+ 组件代码路径为views目录下的组件路径
+
+
+
+
+
+
+
+
+
+ 链接地址:
+
+ 链接地址请以:http://开头
+
+
+
+
+
+
+
+
+
+ 是否显示:
+
+ 不显示在左侧菜单上
+
+
+
+
+
+
+
+
+
+ 激活地址:
+
+ 打开本界面时激活的菜单路由,这里需要填写需要激活的菜单的路由地址
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/auth/menu/components/use-stand.vue b/guns-front-project/src/views/system/auth/menu/components/use-stand.vue
new file mode 100644
index 00000000..b3ee8ae6
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/menu/components/use-stand.vue
@@ -0,0 +1,239 @@
+
+
+
+
+ 当前菜单:{{ props.data.menuName }}
+
+
+
+
+
+
+
+
+ 重置
+
+
新建
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/auth/menu/index.vue b/guns-front-project/src/views/system/auth/menu/index.vue
new file mode 100644
index 00000000..f7337a1f
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/menu/index.vue
@@ -0,0 +1,656 @@
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/auth/permission/api/PermissionApi.js b/guns-front-project/src/views/system/auth/permission/api/PermissionApi.js
new file mode 100644
index 00000000..65c909f6
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/permission/api/PermissionApi.js
@@ -0,0 +1,70 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 - 权限api
+ *
+ */
+export class PermissionApi {
+ /**
+ * 获取角色绑定的权限列表
+ * @param {*} params
+ * @returns
+ */
+ static getRoleBindPermission(params) {
+ return Request.getAndLoadData('/permission/getRoleBindPermission', params);
+ }
+
+ /**
+ * 获取所有角色列表
+ * @param {*} params
+ * @returns
+ */
+ static getRoleList(params) {
+ return Request.getAndLoadData('/permission/getRoleList', params);
+ }
+
+ /**
+ * 更新角色绑定权限
+ * @param {*} params
+ * @returns
+ */
+ static updateRoleBindPermission(params) {
+ return Request.post('/permission/updateRoleBindPermission', params);
+ }
+
+ /**
+ * 获取角色的数据权限详情
+ * @param {*} params
+ * @returns
+ */
+ static getRoleBindDataScope(params) {
+ return Request.getAndLoadData('/permission/getRoleBindDataScope', params);
+ }
+
+ /**
+ * 角色绑定数据权限的配置
+ * @param {*} params
+ * @returns
+ */
+ static updateRoleBindDataScope(params) {
+ return Request.post('/permission/updateRoleBindDataScope', params);
+ }
+
+ /**
+ * 获取角色的权限限制列表
+ * @param {*} params
+ * @returns
+ */
+ static getRoleLimit(params) {
+ return Request.getAndLoadData('/roleLimit/getRoleLimit', params);
+ }
+
+ /**
+ * 绑定角色权限的限制列表
+ * @param {*} params
+ * @returns
+ */
+ static bindRoleLimit(params) {
+ return Request.post('/roleLimit/bindRoleLimit', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/auth/permission/index.vue b/guns-front-project/src/views/system/auth/permission/index.vue
new file mode 100644
index 00000000..9a1beddf
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/permission/index.vue
@@ -0,0 +1,851 @@
+
+
+
+
+
+
+
+
+ {{ roleItem.roleName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
应用:{{ perItem.nodeName }}
+
perItemChange(el, perItem)">全选
+
+
+
+
+
+
+ {{ record.nodeName }}
+
+
+
+
+ {{ chlItem.nodeName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 仅本人数据
+ 本部门数据
+ 本部门及以下部门
+ 本公司及以下数据
+ 指定部门
+ 全部数据
+
+
+
+
+
+
+
+ 保存
+
+
+
+
+
+
+
+
+
+
应用:{{ perItem.nodeName }}
+
perItemChange(el, perItem)">全选
+
+
+
+
+
+
+ {{ record.nodeName }}
+
+
+
+
+ {{ chlItem.nodeName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/auth/resource/api/ResourceApi.js b/guns-front-project/src/views/system/auth/resource/api/ResourceApi.js
new file mode 100644
index 00000000..c4121f87
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/resource/api/ResourceApi.js
@@ -0,0 +1,16 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 - 资源api
+ *
+ */
+export class ResourceApi {
+ /**
+ * 获取资源列表
+ * @param {*} params
+ * @returns
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/resource/pageList', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/auth/resource/index.vue b/guns-front-project/src/views/system/auth/resource/index.vue
new file mode 100644
index 00000000..dfe0a065
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/resource/index.vue
@@ -0,0 +1,191 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/auth/role/api/RoleApi.js b/guns-front-project/src/views/system/auth/role/api/RoleApi.js
new file mode 100644
index 00000000..d4e05fa0
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/role/api/RoleApi.js
@@ -0,0 +1,57 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -角色api
+ *
+ */
+export class RoleApi {
+ /**
+ * 分页
+ * @param {*} params
+ * @returns
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/sysRole/page', params);
+ }
+
+ /**
+ * 添加
+ * @param {*} params
+ * @returns
+ */
+ static add(params) {
+ return Request.post('/sysRole/add', params);
+ }
+ /**
+ * 编辑
+ * @param {*} params
+ * @returns
+ */
+ static edit(params) {
+ return Request.post('/sysRole/edit', params);
+ }
+ /**
+ * 删除单个
+ * @param {*} params
+ * @returns
+ */
+ static delete(params) {
+ return Request.post('/sysRole/delete', params);
+ }
+ /**
+ * 删除批量
+ * @param {*} params
+ * @returns
+ */
+ static batchDelete(params) {
+ return Request.post('/sysRole/batchDelete', params);
+ }
+ /**
+ * 详情
+ * @param {*} params
+ * @returns
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/sysRole/detail', params);
+ }
+}
\ No newline at end of file
diff --git a/guns-front-project/src/views/system/auth/role/components/role-add-edit.vue b/guns-front-project/src/views/system/auth/role/components/role-add-edit.vue
new file mode 100644
index 00000000..360d2123
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/role/components/role-add-edit.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/auth/role/components/role-form.vue b/guns-front-project/src/views/system/auth/role/components/role-form.vue
new file mode 100644
index 00000000..e0bb7a69
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/role/components/role-form.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 启用
+ 禁用
+
+
+
+
+
+
+ 系统角色
+ 业务角色
+ 公司角色
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/auth/role/index.vue b/guns-front-project/src/views/system/auth/role/index.vue
new file mode 100644
index 00000000..4e7b8bdb
--- /dev/null
+++ b/guns-front-project/src/views/system/auth/role/index.vue
@@ -0,0 +1,262 @@
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/datasource/api/DataSourceApi.js b/guns-front-project/src/views/system/backend/datasource/api/DataSourceApi.js
new file mode 100644
index 00000000..74be5f53
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/datasource/api/DataSourceApi.js
@@ -0,0 +1,62 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 数据源操作api
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 15:10
+ */
+export class DataSourceApi {
+ /**
+ * 获取数据源信息列表
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 16:07
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/databaseInfo/page', params);
+ }
+
+ /**
+ * 新增数据源
+ *
+ * @param {string} params.dbName 数据源名称
+ * @param {string} params.jdbcDriver jdbc驱动
+ * @param {string} params.jdbcUrl jdbc url
+ * @param {string} params.password jdbc密码
+ * @param {string} params.remark 备注
+ * @param {string} params.username jdbc账号
+ * @author fengshuonan
+ * @date 2021/4/12 22:25
+ */
+ static add(params) {
+ return Request.post('/databaseInfo/add', params);
+ }
+
+ /**
+ * 编辑数据源
+ *
+ * @param {string} params.dbName 数据源名称
+ * @param {string} params.jdbcDriver jdbc驱动
+ * @param {string} params.jdbcUrl jdbc url
+ * @param {string} params.password jdbc密码
+ * @param {string} params.remark 备注
+ * @param {string} params.username jdbc账号
+ * @author fengshuonan
+ * @date 2021/4/12 22:25
+ */
+ static edit(params) {
+ return Request.post('/databaseInfo/edit', params);
+ }
+
+ /**
+ * 删除数据源
+ *
+ * @param {string} params.dbId 数据源id
+ * @author fengshuonan
+ * @date 2021/4/13 15:12
+ */
+ static delete(params) {
+ return Request.post('/databaseInfo/delete', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/datasource/components/datasource-add-edit.vue b/guns-front-project/src/views/system/backend/datasource/components/datasource-add-edit.vue
new file mode 100644
index 00000000..944515fc
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/datasource/components/datasource-add-edit.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/datasource/components/datasource-form.vue b/guns-front-project/src/views/system/backend/datasource/components/datasource-form.vue
new file mode 100644
index 00000000..8fcf6c07
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/datasource/components/datasource-form.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+ Mysql
+ Oracle
+ Sql Server
+ Postgre SQL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ url.title }}
+ {{ url.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/datasource/index.vue b/guns-front-project/src/views/system/backend/datasource/index.vue
new file mode 100644
index 00000000..d25a107f
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/datasource/index.vue
@@ -0,0 +1,234 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 正常
+
+
+ {{ record.errorDescription }}
+ 连接错误
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/dict/api/SysDictApi.js b/guns-front-project/src/views/system/backend/dict/api/SysDictApi.js
new file mode 100644
index 00000000..a4bc8830
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/dict/api/SysDictApi.js
@@ -0,0 +1,72 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -字典api
+ *
+ */
+export class SysDictApi {
+ /**
+ * 添加
+ * @param {*} params
+ * @returns
+ */
+ static add(params) {
+ return Request.post('/dict/add', params);
+ }
+ /**
+ * 编辑
+ * @param {*} params
+ * @returns
+ */
+ static edit(params) {
+ return Request.post('/dict/edit', params);
+ }
+ /**
+ * 删除单个
+ * @param {*} params
+ * @returns
+ */
+ static delete(params) {
+ return Request.post('/dict/delete', params);
+ }
+ /**
+ * 删除批量
+ * @param {*} params
+ * @returns
+ */
+ static batchDelete(params) {
+ return Request.post('/dict/batchDelete', params);
+ }
+ /**
+ * 详情
+ * @param {*} params
+ * @returns
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/dict/detail', params);
+ }
+ /**
+ * 树形列表
+ * @param {*} params
+ * @returns
+ */
+ static tree(params) {
+ return Request.getAndLoadData('/dict/getDictTreeList', params);
+ }
+ /**
+ * 列表
+ * @param {*} params
+ * @returns
+ */
+ static list(params) {
+ return Request.getAndLoadData('/dict/list', params);
+ }
+ /**
+ * 更新整个字典树结构,用来更新上下级结构和顺序
+ * @param {*} params
+ * @returns
+ */
+ static updateDictTree(params) {
+ return Request.post('/dict/updateDictTree', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/dict/api/SysDictTypeApi.js b/guns-front-project/src/views/system/backend/dict/api/SysDictTypeApi.js
new file mode 100644
index 00000000..3eefaf6d
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/dict/api/SysDictTypeApi.js
@@ -0,0 +1,48 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -字典类型api
+ *
+ */
+export class SysDictTypeApi {
+ /**
+ * 添加
+ * @param {*} params
+ * @returns
+ */
+ static add(params) {
+ return Request.post('/dictType/add', params);
+ }
+ /**
+ * 编辑
+ * @param {*} params
+ * @returns
+ */
+ static edit(params) {
+ return Request.post('/dictType/edit', params);
+ }
+ /**
+ * 删除单个
+ * @param {*} params
+ * @returns
+ */
+ static delete(params) {
+ return Request.post('/dictType/delete', params);
+ }
+ /**
+ * 详情
+ * @param {*} params
+ * @returns
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/dictType/detail', params);
+ }
+ /**
+ * 列表
+ * @param {*} params
+ * @returns
+ */
+ static list(params) {
+ return Request.getAndLoadData('/dictType/list', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/dict/components/dict-type/dict-type-add-edit.vue b/guns-front-project/src/views/system/backend/dict/components/dict-type/dict-type-add-edit.vue
new file mode 100644
index 00000000..ba6b0f26
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/dict/components/dict-type/dict-type-add-edit.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/dict/components/dict-type/dict-type-form.vue b/guns-front-project/src/views/system/backend/dict/components/dict-type/dict-type-form.vue
new file mode 100644
index 00000000..59f5a5cc
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/dict/components/dict-type/dict-type-form.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 系统类型
+ 业务类型
+
+
+
+
+
+
+ 启用
+ 禁用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/dict/components/dict-type/dict-type.vue b/guns-front-project/src/views/system/backend/dict/components/dict-type/dict-type.vue
new file mode 100644
index 00000000..24bafe73
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/dict/components/dict-type/dict-type.vue
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ data.dictTypeName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/dict/components/dict/dict-add-edit.vue b/guns-front-project/src/views/system/backend/dict/components/dict/dict-add-edit.vue
new file mode 100644
index 00000000..cf09f47c
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/dict/components/dict/dict-add-edit.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/dict/components/dict/dict-form.vue b/guns-front-project/src/views/system/backend/dict/components/dict/dict-form.vue
new file mode 100644
index 00000000..42435307
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/dict/components/dict/dict-form.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 启用
+ 禁用
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/dict/components/update-structure.vue b/guns-front-project/src/views/system/backend/dict/components/update-structure.vue
new file mode 100644
index 00000000..5425c2f3
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/dict/components/update-structure.vue
@@ -0,0 +1,217 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/dict/index.vue b/guns-front-project/src/views/system/backend/dict/index.vue
new file mode 100644
index 00000000..44ce0b6f
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/dict/index.vue
@@ -0,0 +1,295 @@
+
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/file/api/FileApi.js b/guns-front-project/src/views/system/backend/file/api/FileApi.js
new file mode 100644
index 00000000..bc01be2d
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/file/api/FileApi.js
@@ -0,0 +1,115 @@
+import Request from '@/utils/request/request-util';
+import { API_BASE_PREFIX } from '@/config/setting';
+
+/**
+ * 文件上传的url
+ */
+export const FileUploadUrl = '/sysFileInfo/upload';
+
+/**
+ * 文件相关api
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 15:10
+ */
+export class FileApi {
+ /**
+ * 获取文件列表,用在文件选择组件
+ *
+ * @author fengshuonan
+ * @date 2022/5/8 20:36
+ */
+ static findSelectPageList(params) {
+ return Request.getAndLoadData('/sysFileInfo/fileInfoListPage', params);
+ }
+
+ /**
+ * 获取文件列表
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 16:07
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/sysFileInfo/fileInfoListPage', params);
+ }
+
+ /**
+ * 通用文件上传
+ *
+ * 使用示例:
+ * let formData = new FormData();
+ * formData.append('file', file);
+ * FileApi.commonUpload('Y', formData);
+ *
+ * @param {String} secretFlag 是否是机密文件,Y-是机密文件,N-非机密文件
+ * @param {Object} formData FormData的实例对象,需要在formData中添加file属性
+ * @author fengshuonan
+ * @date 2021/4/1 14:34
+ */
+ static commonUpload(secretFlag, formData) {
+ // 添加secretFlag属性
+ formData.append('secretFlag', secretFlag);
+ return Request.post(FileUploadUrl, formData);
+ }
+
+ /**
+ * 删除文件
+ *
+ * @param {string} params.fileCode 文件编码
+ * @author fengshuonan
+ * @date 2021/4/12 22:02
+ */
+ static delete(params) {
+ return Request.post('/sysFileInfo/deleteReally', params);
+ }
+
+ /**
+ * 下载文件
+ *
+ * @param {string} params.fileId 文件id
+ * @param {string} params.secretFlag 是否是私有文件
+ * @param {string} params.token 用户的token
+ * @author fengshuonan
+ * @date 2021/4/12 22:08
+ */
+ static download(params) {
+ if (params.secretFlag === 'Y') {
+ window.location.href = `${API_BASE_PREFIX}/sysFileInfo/privateDownload?fileId=${params.fileId}&token=${params.token}`;
+ } else {
+ window.location.href = `${API_BASE_PREFIX}/sysFileInfo/publicDownload?fileId=${params.fileId}&token=${params.token}`;
+ }
+ }
+
+ /**
+ * 文件详情
+ *
+ * @param {string} params.fileId 文件id
+ * @author fengshuonan
+ * @date 2021/4/12 22:25
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/sysFileInfo/detail', params);
+ }
+
+ /**
+ * 获取antdv格式的文件详情
+ *
+ * @param {string} params.fileId 文件id
+ * @author fengshuonan
+ * @date 2021/4/12 22:25
+ */
+ static getAntdVInfo(params) {
+ return Request.getAndLoadData('/sysFileInfo/getAntdVInfo', params);
+ }
+
+ /**
+ * 获取antdv格式的文件详情列表
+ *
+ * @param {string} params.fileId 文件id
+ * @author fengshuonan
+ * @date 2021/4/12 22:25
+ */
+ static getAntdVInfoBatch(params) {
+ return Request.post('/sysFileInfo/getAntdVInfoBatch', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/file/components/file-detail.vue b/guns-front-project/src/views/system/backend/file/components/file-detail.vue
new file mode 100644
index 00000000..b5bb466a
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/file/components/file-detail.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/file/index.vue b/guns-front-project/src/views/system/backend/file/index.vue
new file mode 100644
index 00000000..37aec89c
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/file/index.vue
@@ -0,0 +1,365 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ record.fileOriginName }}
+
+
+
+
+
+
+
+ 阿里云
+ 腾讯云
+ minio
+ 本地
+ 数据库
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/log/business-log/components/detail.vue b/guns-front-project/src/views/system/backend/log/business-log/components/detail.vue
new file mode 100644
index 00000000..66b6fbdc
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/log/business-log/components/detail.vue
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/log/business-log/components/list.vue b/guns-front-project/src/views/system/backend/log/business-log/components/list.vue
new file mode 100644
index 00000000..1240869d
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/log/business-log/components/list.vue
@@ -0,0 +1,245 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ record.logTypeCode }}
+
+
+
+
+ {{ record.logTitle }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/log/business-log/index.vue b/guns-front-project/src/views/system/backend/log/business-log/index.vue
new file mode 100644
index 00000000..c1197e6e
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/log/business-log/index.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/log/index.vue b/guns-front-project/src/views/system/backend/log/index.vue
new file mode 100644
index 00000000..4d5a5b3a
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/log/index.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/log/login-log/api/LoginLogApi.js b/guns-front-project/src/views/system/backend/log/login-log/api/LoginLogApi.js
new file mode 100644
index 00000000..8d7b20fb
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/log/login-log/api/LoginLogApi.js
@@ -0,0 +1,29 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 登录日志相关api
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 15:10
+ */
+export class LoginLogApi {
+ /**
+ * 清空全部登录日志
+ *
+ * @author luojie
+ * @date 2021/4/13 09:52
+ */
+ static deleteAll() {
+ return Request.get('/loginLog/deleteAll');
+ }
+
+ /**
+ * 获取登录日志列表
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 16:07
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/loginLog/page', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/log/login-log/index.vue b/guns-front-project/src/views/system/backend/log/login-log/index.vue
new file mode 100644
index 00000000..0200d2e8
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/log/login-log/index.vue
@@ -0,0 +1,184 @@
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/log/operate-log/api/OperateLogApi.js b/guns-front-project/src/views/system/backend/log/operate-log/api/OperateLogApi.js
new file mode 100644
index 00000000..a12c7c06
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/log/operate-log/api/OperateLogApi.js
@@ -0,0 +1,43 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 操作日志相关的api
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 15:10
+ */
+export class OperateLogApi {
+ /**
+ * 获取操作日志列表
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 16:07
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/logManager/page', params);
+ }
+
+ /**
+ * 批量删除日志
+ *
+ * @param {string} params.beginDate 开始日期
+ * @param {string} params.endDate 结束日期
+ * @param {string} params.appName 服务名称
+ * @author fengshuonan
+ * @date 2021/4/12 22:02
+ */
+ static delete(params) {
+ return Request.post('/logManager/delete', params);
+ }
+
+ /**
+ * 查看日志详情
+ *
+ * @param {string} params.logId 日志id
+ * @author fengshuonan
+ * @date 2021/4/13 10:37
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/logManager/detail', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/log/operate-log/components/operate-log-detail.vue b/guns-front-project/src/views/system/backend/log/operate-log/components/operate-log-detail.vue
new file mode 100644
index 00000000..aa8ccad7
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/log/operate-log/components/operate-log-detail.vue
@@ -0,0 +1,82 @@
+
+
+
+ {{ form.appName }}
+ {{ form.logName }}
+ {{ form.logContent }}
+ {{ form.requestUrl }}
+ {{ form.httpMethod }}
+ {{ form.serverIp }}
+ {{ form.clientIp }}
+ {{ form.userIdWrapper }}
+ {{ form.userCurrentOrgIdWrapper }}
+ {{ form.clientBrowser }}
+ {{ form.clientOs }}
+
+
+
+
+ {{ form.requestParams }}
+
+
+ {{ form.requestResult }}
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/log/operate-log/index.vue b/guns-front-project/src/views/system/backend/log/operate-log/index.vue
new file mode 100644
index 00000000..9f2df14c
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/log/operate-log/index.vue
@@ -0,0 +1,252 @@
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/monitor/api/MonitorApi.js b/guns-front-project/src/views/system/backend/monitor/api/MonitorApi.js
new file mode 100644
index 00000000..471dac6d
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/monitor/api/MonitorApi.js
@@ -0,0 +1,19 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 监控数据的api
+ *
+ * @author fengshuonan
+ * @date 2021/4/15 11:41
+ */
+export class MonitorApi {
+ /**
+ * 获取监控数据
+ *
+ * @author fengshuonan
+ * @date 2021/4/15 11:43
+ */
+ static getSystemInfo(params) {
+ return Request.getAndLoadData('/getSystemInfo', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/monitor/index.vue b/guns-front-project/src/views/system/backend/monitor/index.vue
new file mode 100644
index 00000000..5688222a
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/monitor/index.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/monitor/server.vue b/guns-front-project/src/views/system/backend/monitor/server.vue
new file mode 100644
index 00000000..bf68d892
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/monitor/server.vue
@@ -0,0 +1,199 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ data.systemInfo.jvm.name }}
+ {{ data.systemInfo.jvm.version }}
+ {{ data.systemInfo.jvm.startTime }}
+ {{ data.systemInfo.jvm.runTime }}
+ {{ data.systemInfo.jvm.home }}
+ {{ data.systemInfo.sys.userDir }}
+
+
+
+
+
+
+
+
+ {{ data.systemInfo.sys.computerName }}
+ {{ data.systemInfo.sys.osName }}
+ {{ data.systemInfo.sys.computerIp }}
+ {{ data.systemInfo.sys.osArch }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/notice/api/NoticeApi.js b/guns-front-project/src/views/system/backend/notice/api/NoticeApi.js
new file mode 100644
index 00000000..7988d6a6
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/notice/api/NoticeApi.js
@@ -0,0 +1,83 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -通知公告api
+ *
+ */
+export class NoticeApi {
+ /**
+ * 分页
+ * @param {*} params
+ * @returns
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/sysNotice/page', params);
+ }
+
+ /**
+ * 添加
+ * @param {*} params
+ * @returns
+ */
+ static add(params) {
+ return Request.post('/sysNotice/add', params);
+ }
+
+ /**
+ * 详情
+ * @param {*} params
+ * @returns
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/sysNotice/detail', params);
+ }
+
+ /**
+ * 编辑
+ * @param {*} params
+ * @returns
+ */
+ static edit(params) {
+ return Request.post('/sysNotice/edit', params);
+ }
+ /**
+ * 删除单个
+ * @param {*} params
+ * @returns
+ */
+ static delete(params) {
+ return Request.post('/sysNotice/delete', params);
+ }
+ /**
+ * 删除批量
+ * @param {*} params
+ * @returns
+ */
+ static batchDelete(params) {
+ return Request.post('/sysNotice/batchDelete', params);
+ }
+ /**
+ * 详情
+ * @param {*} params
+ * @returns
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/sysNotice/detail', params);
+ }
+ /**
+ * 撤回通知
+ * @param {*} params
+ * @returns
+ */
+ static retractNotice(params) {
+ return Request.post('/sysNotice/retractNotice', params);
+ }
+ /**
+ * 发送通知
+ * @param {*} params
+ * @returns
+ */
+ static publishNotice(params) {
+ return Request.post('/sysNotice/publishNotice', params);
+ }
+}
\ No newline at end of file
diff --git a/guns-front-project/src/views/system/backend/notice/components/notice-add-edit.vue b/guns-front-project/src/views/system/backend/notice/components/notice-add-edit.vue
new file mode 100644
index 00000000..36526695
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/notice/components/notice-add-edit.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/notice/components/notice-form.vue b/guns-front-project/src/views/system/backend/notice/components/notice-form.vue
new file mode 100644
index 00000000..ca8677a3
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/notice/components/notice-form.vue
@@ -0,0 +1,238 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 高
+ 中
+ 低
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/notice/index.vue b/guns-front-project/src/views/system/backend/notice/index.vue
new file mode 100644
index 00000000..845730de
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/notice/index.vue
@@ -0,0 +1,303 @@
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/online/api/OnlineApi.js b/guns-front-project/src/views/system/backend/online/api/OnlineApi.js
new file mode 100644
index 00000000..d49fbdb8
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/online/api/OnlineApi.js
@@ -0,0 +1,25 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -在线用户api
+ *
+ */
+export class OnlineApi {
+ /**
+ * 列表
+ * @param {*} params
+ * @returns
+ */
+ static getOnlineUserList(params) {
+ return Request.getAndLoadData('/getOnlineUserList', params);
+ }
+
+ /**
+ * 踢下线
+ * @param {*} params
+ * @returns
+ */
+ static offlineUser(params) {
+ return Request.post('/offlineUser', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/online/index.vue b/guns-front-project/src/views/system/backend/online/index.vue
new file mode 100644
index 00000000..f14187d0
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/online/index.vue
@@ -0,0 +1,186 @@
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/security/api/SecurityApi.js b/guns-front-project/src/views/system/backend/security/api/SecurityApi.js
new file mode 100644
index 00000000..191d3391
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/security/api/SecurityApi.js
@@ -0,0 +1,25 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -安全策略api
+ *
+ */
+export class SecurityApi {
+ /**
+ * 获取安全策略配置
+ * @param {*} params
+ * @returns
+ */
+ static getOnlineUserList(params) {
+ return Request.getAndLoadData('/security/getSecurityStrategy', params);
+ }
+
+ /**
+ * 更新安全策略配置
+ * @param {*} params
+ * @returns
+ */
+ static offlineUser(params) {
+ return Request.post('/security/updateSecurityStrategy', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/security/index.vue b/guns-front-project/src/views/system/backend/security/index.vue
new file mode 100644
index 00000000..f1c5853e
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/security/index.vue
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+ 密码策略
+
+
+
+ 密码失效策略
+
+
+ 天
+
+
+
+
+ 密码口令策略
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/sys-config/api/SysConfigApi.js b/guns-front-project/src/views/system/backend/sys-config/api/SysConfigApi.js
new file mode 100644
index 00000000..7fccc244
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/sys-config/api/SysConfigApi.js
@@ -0,0 +1,97 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -配置管理api
+ *
+ */
+export class SysConfigApi {
+ /**
+ * 添加
+ * @param {*} params
+ * @returns
+ */
+ static add(params) {
+ return Request.post('/sysConfig/add', params);
+ }
+ /**
+ * 编辑
+ * @param {*} params
+ * @returns
+ */
+ static edit(params) {
+ return Request.post('/sysConfig/edit', params);
+ }
+ /**
+ * 删除单个
+ * @param {*} params
+ * @returns
+ */
+ static delete(params) {
+ return Request.post('/sysConfig/delete', params);
+ }
+ /**
+ * 删除批量
+ * @param {*} params
+ * @returns
+ */
+ static batchDelete(params) {
+ return Request.post('/sysConfig/batchDelete', params);
+ }
+ /**
+ * 详情
+ * @param {*} params
+ * @returns
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/sysConfig/detail', params);
+ }
+ /**
+ * 分页列表
+ * @param {*} params
+ * @returns
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/sysConfig/page', params);
+ }
+
+ /**
+ * 获取系统配置是否已经初始化
+ *
+ * @return {boolean} true-已经初始化,false-未初始化
+ * @author fengshuonan
+ * @date 2021/4/9 13:24
+ */
+ static async getInitConfigFlag() {
+ return await Request.getAndLoadData('/sysConfig/getInitConfigFlag');
+ }
+
+ /**
+ * 获取需要初始化的配置列表
+ *
+ * @author fengshuonan
+ * @date 2021/4/9 13:24
+ */
+ static async getInitConfigList() {
+ return await Request.getAndLoadData('/sysConfig/getInitConfigList');
+ }
+
+ /**
+ * 初始化系统配置参数
+ *
+ * @author fengshuonan
+ * @date 2021/7/9 11:04
+ */
+ static async initConfig(params) {
+ return await Request.post('/sysConfig/initConfig', params);
+ }
+
+ /**
+ * 更新当前应用
+ *
+ * @author fengshuonan
+ * @date 2021/7/9 11:04
+ */
+ static async updateUserOrgOrApp(params) {
+ return await Request.post('/updateUserOrgOrApp', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/sys-config/api/SysConfigTypeApi.js b/guns-front-project/src/views/system/backend/sys-config/api/SysConfigTypeApi.js
new file mode 100644
index 00000000..877b30ce
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/sys-config/api/SysConfigTypeApi.js
@@ -0,0 +1,48 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -配置类型api
+ *
+ */
+export class SysConfigTypeApi {
+ /**
+ * 添加
+ * @param {*} params
+ * @returns
+ */
+ static add(params) {
+ return Request.post('/sysConfigType/add', params);
+ }
+ /**
+ * 编辑
+ * @param {*} params
+ * @returns
+ */
+ static edit(params) {
+ return Request.post('/sysConfigType/edit', params);
+ }
+ /**
+ * 删除单个
+ * @param {*} params
+ * @returns
+ */
+ static delete(params) {
+ return Request.post('/sysConfigType/delete', params);
+ }
+ /**
+ * 详情
+ * @param {*} params
+ * @returns
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/sysConfigType/detail', params);
+ }
+ /**
+ * 列表
+ * @param {*} params
+ * @returns
+ */
+ static list(params) {
+ return Request.getAndLoadData('/sysConfigType/list', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/sys-config/components/config-type/config-type-add-edit.vue b/guns-front-project/src/views/system/backend/sys-config/components/config-type/config-type-add-edit.vue
new file mode 100644
index 00000000..e9e12c96
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/sys-config/components/config-type/config-type-add-edit.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/sys-config/components/config-type/config-type-form.vue b/guns-front-project/src/views/system/backend/sys-config/components/config-type/config-type-form.vue
new file mode 100644
index 00000000..2b9bc7cc
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/sys-config/components/config-type/config-type-form.vue
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/sys-config/components/config-type/config-type.vue b/guns-front-project/src/views/system/backend/sys-config/components/config-type/config-type.vue
new file mode 100644
index 00000000..936b3ce1
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/sys-config/components/config-type/config-type.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ data.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/sys-config/components/config/config-add-edit.vue b/guns-front-project/src/views/system/backend/sys-config/components/config/config-add-edit.vue
new file mode 100644
index 00000000..dbc5acad
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/sys-config/components/config/config-add-edit.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/sys-config/components/config/config-form.vue b/guns-front-project/src/views/system/backend/sys-config/components/config/config-form.vue
new file mode 100644
index 00000000..32abb160
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/sys-config/components/config/config-form.vue
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/sys-config/index.vue b/guns-front-project/src/views/system/backend/sys-config/index.vue
new file mode 100644
index 00000000..ea2eea7b
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/sys-config/index.vue
@@ -0,0 +1,270 @@
+
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/theme/attr/api/ThemeTemplateFieldApi.js b/guns-front-project/src/views/system/backend/theme/attr/api/ThemeTemplateFieldApi.js
new file mode 100644
index 00000000..a7029513
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/attr/api/ThemeTemplateFieldApi.js
@@ -0,0 +1,89 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 主题模板属性api
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 11:19:37
+ */
+export class ThemeTemplateFieldApi {
+ /**
+ * 获取字段列表
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 16:07
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/sysThemeTemplateField/findPage', params);
+ }
+
+ /**
+ * 增加主题模板属性
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 11:21:42
+ */
+ static add(params) {
+ return Request.post('/sysThemeTemplateField/add', params);
+ }
+
+ /**
+ * 删除主题模板属性
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 11:22:55
+ */
+ static del(params) {
+ return Request.post('/sysThemeTemplateField/del', params);
+ }
+
+ /**
+ * 编辑主题模板属性
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 11:24:57
+ */
+ static edit(params) {
+ return Request.post('/sysThemeTemplateField/edit', params);
+ }
+
+ /**
+ * 查看主题模板属性详情
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 11:33:37
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/sysThemeTemplateField/detail', params);
+ }
+
+ /**
+ * 查询系统主题模板属性列表
+ *
+ * @author fengshuonan
+ * @date 2021/12/27 10:13:22
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/sysThemeTemplateField/findPage', params);
+ }
+
+ /**
+ * 查询系统主题模板属性已有关系列表
+ *
+ * @author fengshuonan
+ * @date 2021/12/27 10:14:18
+ */
+ static findRelList(params) {
+ return Request.getAndLoadData('/sysThemeTemplateField/findRelList', params);
+ }
+
+ /**
+ * 查询系统主题模板属性未有关系列表
+ *
+ * @author fengshuonan
+ * @date 2021/12/27 10:15:16
+ */
+ static findNotRelList(params) {
+ return Request.getAndLoadData('/sysThemeTemplateField/findNotRelList', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/theme/attr/components/attr-add-edit.vue b/guns-front-project/src/views/system/backend/theme/attr/components/attr-add-edit.vue
new file mode 100644
index 00000000..a472cf31
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/attr/components/attr-add-edit.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/theme/attr/components/attr-form.vue b/guns-front-project/src/views/system/backend/theme/attr/components/attr-form.vue
new file mode 100644
index 00000000..fae2fa29
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/attr/components/attr-form.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 字符类型
+ 文件类型
+
+
+
+
+
+
+ 必填
+ 非必填
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/theme/attr/index.vue b/guns-front-project/src/views/system/backend/theme/attr/index.vue
new file mode 100644
index 00000000..f314bc4b
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/attr/index.vue
@@ -0,0 +1,233 @@
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/theme/index.vue b/guns-front-project/src/views/system/backend/theme/index.vue
new file mode 100644
index 00000000..f0408ddd
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/index.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/theme/manager/api/ThemeApi.js b/guns-front-project/src/views/system/backend/theme/manager/api/ThemeApi.js
new file mode 100644
index 00000000..070e0206
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/manager/api/ThemeApi.js
@@ -0,0 +1,89 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 主题api
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 13:42:14
+ */
+export class ThemeApi {
+ /**
+ * 获取主题列表
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 16:07
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/sysTheme/findPage', params);
+ }
+
+ /**
+ * 添加主题
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 13:44:51
+ */
+ static add(params) {
+ return Request.post('/sysTheme/add', params);
+ }
+
+ /**
+ * 删除主题
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 13:46:32
+ */
+ static del(params) {
+ return Request.post('/sysTheme/del', params);
+ }
+
+ /**
+ * 修改主题
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 13:47:43
+ */
+ static edit(params) {
+ return Request.post('/sysTheme/edit', params);
+ }
+
+ /**
+ * 查询主题
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 13:49:15
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/sysTheme/findPage', params);
+ }
+
+ /**
+ * 查询主题详情
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 13:50:38
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/sysTheme/detail', params);
+ }
+
+ /**
+ * 修改主题启用状态
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 13:51:25
+ */
+ static updateThemeStatus(params) {
+ return Request.post('/sysTheme/updateStatus', params);
+ }
+
+ /**
+ * 获取当前主题
+ *
+ * @author fengshuonan
+ * @date 2022/1/12 11:52
+ */
+ static getCurrentThemeInfo(params) {
+ return Request.getAndLoadData('/theme/currentThemeInfo', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/theme/manager/components/manager-add-edit.vue b/guns-front-project/src/views/system/backend/theme/manager/components/manager-add-edit.vue
new file mode 100644
index 00000000..845fd9fe
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/manager/components/manager-add-edit.vue
@@ -0,0 +1,221 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/theme/manager/components/manager-form.vue b/guns-front-project/src/views/system/backend/theme/manager/components/manager-form.vue
new file mode 100644
index 00000000..2bd052a0
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/manager/components/manager-form.vue
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 上传图片
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/theme/manager/index.vue b/guns-front-project/src/views/system/backend/theme/manager/index.vue
new file mode 100644
index 00000000..96f1335d
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/manager/index.vue
@@ -0,0 +1,233 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ record.themeName }}
+
+
+
+
+
+ editStatus(checked, record)" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/theme/template/api/ThemeTemplateApi.js b/guns-front-project/src/views/system/backend/theme/template/api/ThemeTemplateApi.js
new file mode 100644
index 00000000..3c7477cc
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/template/api/ThemeTemplateApi.js
@@ -0,0 +1,89 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 主题模板api
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 11:36:02
+ */
+export class ThemeTemplateApi {
+ /**
+ * 获取操作日志列表
+ *
+ * @author fengshuonan
+ * @date 2021/4/1 16:07
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/sysThemeTemplate/findPage', params);
+ }
+
+ /**
+ * 增加主题模板
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 11:38:37
+ */
+ static add(params) {
+ return Request.post('/sysThemeTemplate/add', params);
+ }
+
+ /**
+ * 编辑主题模板
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 11:38:53
+ */
+ static edit(params) {
+ return Request.post('/sysThemeTemplate/edit', params);
+ }
+
+ /**
+ * 删除主题模板
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 11:40:30
+ */
+ static del(params) {
+ return Request.post('/sysThemeTemplate/del', params);
+ }
+
+ /**
+ * 查询主题模板
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 11:45:45
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/sysThemeTemplate/findPage', params);
+ }
+
+ /**
+ * 查询主题模板列表
+ *
+ * @author fengshuonan
+ * @date 2021/12/29 09:15:48
+ */
+ static findList(params) {
+ return Request.getAndLoadData('/sysThemeTemplate/findList', params);
+ }
+
+ /**
+ * 修改主题模板状态
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 11:49:24
+ */
+ static updateTemplateStatus(params) {
+ return Request.post('/sysThemeTemplate/updateStatus', params);
+ }
+
+ /**
+ * 查询主题模板详情
+ *
+ * @author fengshuonan
+ * @date 2021/12/20 11:53:17
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/sysThemeTemplate/detail', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/theme/template/api/ThemeTemplateRelApi.js b/guns-front-project/src/views/system/backend/theme/template/api/ThemeTemplateRelApi.js
new file mode 100644
index 00000000..88cd6d30
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/template/api/ThemeTemplateRelApi.js
@@ -0,0 +1,29 @@
+import Request from "@/utils/request/request-util";
+
+/**
+ * 主题模板属性关系api
+ *
+ * @author fengshuonan
+ * @date 2021/12/27 10:18:08
+ */
+export class ThemeTemplateRelApi {
+ /**
+ * 增加系统主题属性关系
+ *
+ * @author fengshuonan
+ * @date 2021/12/27 10:19:44
+ */
+ static add(params) {
+ return Request.post("/sysThemeTemplateRel/add", params);
+ }
+
+ /**
+ * 删除系统主题属性关系
+ *
+ * @author fengshuonan
+ * @date 2021/12/27 10:20:54
+ */
+ static del(params) {
+ return Request.post("/sysThemeTemplateRel/del", params);
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/theme/template/components/config-data.vue b/guns-front-project/src/views/system/backend/theme/template/components/config-data.vue
new file mode 100644
index 00000000..fe172b64
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/template/components/config-data.vue
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/theme/template/components/tamplate-detail.vue b/guns-front-project/src/views/system/backend/theme/template/components/tamplate-detail.vue
new file mode 100644
index 00000000..ac6b9d90
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/template/components/tamplate-detail.vue
@@ -0,0 +1,172 @@
+
+
+
+
+
+
+
+
+
+
+ {{ form[item.value] == 1 ? '系统类型' : '业务类型' }}
+ {{ form[item.value] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/theme/template/components/template-add-edit.vue b/guns-front-project/src/views/system/backend/theme/template/components/template-add-edit.vue
new file mode 100644
index 00000000..c702f317
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/template/components/template-add-edit.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/theme/template/components/template-config.vue b/guns-front-project/src/views/system/backend/theme/template/components/template-config.vue
new file mode 100644
index 00000000..fe245207
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/template/components/template-config.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/theme/template/components/template-form.vue b/guns-front-project/src/views/system/backend/theme/template/components/template-form.vue
new file mode 100644
index 00000000..a5cee015
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/template/components/template-form.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 系统类型
+ 业务类型
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/theme/template/index.vue b/guns-front-project/src/views/system/backend/theme/template/index.vue
new file mode 100644
index 00000000..fb92d6fe
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/theme/template/index.vue
@@ -0,0 +1,280 @@
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/timer/api/SysTimerApi.js b/guns-front-project/src/views/system/backend/timer/api/SysTimerApi.js
new file mode 100644
index 00000000..969c43c0
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/timer/api/SysTimerApi.js
@@ -0,0 +1,89 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 - 定时任务api
+ *
+ * @author luojie
+ * @date 2021/4/13 09:52
+ */
+export class SysTimerApi {
+ /**
+ * 获取定时任务列表
+ *
+ * @author fengshuonan
+ * @date 2021/4/12 22:25
+ */
+ static findTimerPage(params) {
+ return Request.getAndLoadData('/sysTimers/page', params);
+ }
+
+ /**
+ * 新增
+ *
+ * @author luojie
+ * @date 2021/4/13 09:52
+ */
+ static add(params) {
+ return Request.post('/sysTimers/add', params);
+ }
+
+ /**
+ * 查看定时任务详情
+ *
+ * @author luojie
+ * @date 2021/4/13 09:52
+ */
+ static detail(params) {
+ return Request.post('/sysTimers/detail', params);
+ }
+
+ /**
+ * 编辑
+ *
+ * @author luojie
+ * @date 2021/4/13 09:52
+ */
+ static edit(params) {
+ return Request.post('/sysTimers/edit', params);
+ }
+
+ /**
+ * 停止任务
+ *
+ * @author luojie
+ * @date 2021/4/13 09:52
+ */
+ static stop(params) {
+ return Request.post('/sysTimers/stop', params);
+ }
+
+ /**
+ * 启动任务
+ *
+ * @author luojie
+ * @date 2021/4/13 09:52
+ */
+ static start(params) {
+ return Request.post('/sysTimers/start', params);
+ }
+
+ /**
+ * 删除单个任务
+ *
+ * @author luojie
+ * @date 2021/4/13 09:52
+ */
+ static delete(params) {
+ return Request.post('/sysTimers/delete', params);
+ }
+
+ /**
+ * 获取定时任务执行类列表
+ *
+ * @author luojie
+ * @date 2021/4/13 09:52
+ */
+ static getActionClasses() {
+ return Request.postAndLoadData('/sysTimers/getActionClasses');
+ }
+}
diff --git a/guns-front-project/src/views/system/backend/timer/components/timer-add-edit.vue b/guns-front-project/src/views/system/backend/timer/components/timer-add-edit.vue
new file mode 100644
index 00000000..7da0d91c
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/timer/components/timer-add-edit.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/timer/components/timer-form.vue b/guns-front-project/src/views/system/backend/timer/components/timer-form.vue
new file mode 100644
index 00000000..a31fc861
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/timer/components/timer-form.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/backend/timer/index.vue b/guns-front-project/src/views/system/backend/timer/index.vue
new file mode 100644
index 00000000..862f86a7
--- /dev/null
+++ b/guns-front-project/src/views/system/backend/timer/index.vue
@@ -0,0 +1,258 @@
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/empower/api/EmpowerApi.js b/guns-front-project/src/views/system/structure/empower/api/EmpowerApi.js
new file mode 100644
index 00000000..f9187a89
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/empower/api/EmpowerApi.js
@@ -0,0 +1,79 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -授权api
+ *
+ */
+export class EmpowerApi {
+ /**
+ * 获取用户的角色授权信息列表
+ * @param {*} params
+ * @returns
+ */
+ static getUserAssignList(params) {
+ return Request.get('/sysRoleAssign/getUserAssignList', params);
+ }
+
+ /**
+ * 绑定或取消绑定角色
+ * @param {*} params
+ * @returns
+ */
+ static changeRoleSelect(params) {
+ return Request.post('/sysRoleAssign/changeRoleSelect', params);
+ }
+
+ /**
+ * 修改用户针对某个公司的是否启用状态
+ * @param {*} params
+ * @returns
+ */
+ static changeStatus(params) {
+ return Request.post('/sysRoleAssign/changeStatus', params);
+ }
+
+ /**
+ * 删除用户机构的绑定
+ * @param {*} params
+ * @returns
+ */
+ static removeUserOrgBind(params) {
+ return Request.post('/sysRoleAssign/removeUserOrgBind', params);
+ }
+
+ /**
+ * 添加用户机构的绑定
+ * @param {*} params
+ * @returns
+ */
+ static addUserOrgBind(params) {
+ return Request.post('/sysRoleAssign/addUserOrgBind', params);
+ }
+
+ /**
+ * 删除全部机构绑定
+ * @param {*} params
+ * @returns
+ */
+ static deleteAllOrgBind(params) {
+ return Request.post('/sysRoleAssign/deleteAllOrgBind', params);
+ }
+
+ /**
+ * 禁用全部组织机构
+ * @param {*} params
+ * @returns
+ */
+ static disableAllOrg(params) {
+ return Request.post('/sysRoleAssign/disableAllOrg', params);
+ }
+
+ /**
+ * 同步到其他公司绑定信息
+ * @param {*} params
+ * @returns
+ */
+ static syncOtherOrgStatusAndBusinessRole(params) {
+ return Request.post('/sysRoleAssign/syncOtherOrgStatusAndBusinessRole', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/structure/empower/components/add-org.vue b/guns-front-project/src/views/system/structure/empower/components/add-org.vue
new file mode 100644
index 00000000..0fc3d2d1
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/empower/components/add-org.vue
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/empower/index.vue b/guns-front-project/src/views/system/structure/empower/index.vue
new file mode 100644
index 00000000..40dcebc7
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/empower/index.vue
@@ -0,0 +1,384 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 用户状态:
+
+
+
+ 工号:
+ {{ uItem.employeeNumber }}
+
+
+ 电话:
+ {{ uItem.phone }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 同步到其他公司
+
+
+
+ 启用本机构:
+
+
+
+
{{ rITem.roleName }}
+ (系统角色)
+ (业务角色)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/organization/api/ApproverUserApi.js b/guns-front-project/src/views/system/structure/organization/api/ApproverUserApi.js
new file mode 100644
index 00000000..15746325
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/organization/api/ApproverUserApi.js
@@ -0,0 +1,40 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -审批人api
+ *
+ */
+export class ApproverUserApi {
+ /**
+ * 更新组织机构绑定审批人
+ * @param {*} params
+ * @returns
+ */
+ static bindUserList(params) {
+ return Request.post('/hrOrgApprover/bindUserList', params);
+ }
+ /**
+ * 删除审批人的绑定
+ * @param {*} params
+ * @returns
+ */
+ static delete(params) {
+ return Request.post('/hrOrgApprover/delete', params);
+ }
+ /**
+ * 获取组织机构审批人类型列表
+ * @param {*} params
+ * @returns
+ */
+ static getApproverTypeList(params) {
+ return Request.getAndLoadData('/hrOrgApprover/getApproverTypeList', params);
+ }
+ /**
+ * 获取组织机构审批人绑定列表
+ * @param {*} params
+ * @returns
+ */
+ static getBindingList(params) {
+ return Request.get('/hrOrgApprover/getBindingList', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/structure/organization/api/OrgApi.js b/guns-front-project/src/views/system/structure/organization/api/OrgApi.js
new file mode 100644
index 00000000..729dbc0f
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/organization/api/OrgApi.js
@@ -0,0 +1,101 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -组织机构api
+ *
+ */
+export class OrgApi {
+ /**
+ * 组织机构树
+ * @param {*} params
+ * @returns
+ */
+ static tree(params) {
+ return Request.post('/common/org/tree', params);
+ }
+ /**
+ * 分页
+ * @param {*} params
+ * @returns
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/hrOrganization/page', params);
+ }
+
+ /**
+ * 添加
+ * @param {*} params
+ * @returns
+ */
+ static add(params) {
+ return Request.post('/hrOrganization/add', params);
+ }
+ /**
+ * 编辑
+ * @param {*} params
+ * @returns
+ */
+ static edit(params) {
+ return Request.post('/hrOrganization/edit', params);
+ }
+ /**
+ * 删除单个
+ * @param {*} params
+ * @returns
+ */
+ static delete(params) {
+ return Request.post('/hrOrganization/delete', params);
+ }
+ /**
+ * 删除批量
+ * @param {*} params
+ * @returns
+ */
+ static batchDelete(params) {
+ return Request.post('/hrOrganization/batchDelete', params);
+ }
+ /**
+ * 详情
+ * @param {*} params
+ * @returns
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/hrOrganization/detail', params);
+ }
+
+ /**
+ * 组织机构导出业务
+ * @param {*} params
+ * @returns
+ */
+ static exportOrg(params) {
+ return Request.downLoad('/api/org/exportOrg', params);
+ }
+
+ /**
+ * 获取机构的导入模板
+ * @param {*} params
+ * @returns
+ */
+ static getExcelTemplate(params) {
+ return Request.downLoad('/api/orgImport/getExcelTemplate', params);
+ }
+
+ /**
+ * 导入组织机构并获取预览数据
+ * @param {*} params
+ * @returns
+ */
+ static uploadAndGetPreviewData(params) {
+ return Request.post('/orgImport/uploadAndGetPreviewData', params);
+ }
+
+ /**
+ * 确认导入组织机构
+ * @param {*} params
+ * @returns
+ */
+ static ensureImport(params) {
+ return Request.post('/orgImport/ensureImport', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/structure/organization/components/import-export-org.vue b/guns-front-project/src/views/system/structure/organization/components/import-export-org.vue
new file mode 100644
index 00000000..980aca2f
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/organization/components/import-export-org.vue
@@ -0,0 +1,480 @@
+
+
+
+
+
+
+
+
+
+ {{ iItem.name }}
+
+
+
+
+
+
+
导出机构筛选
+
+
+
+
+
+
+
+
+
+
+ 立即导出
+
+
+
+
+
+
+
+导入成功后,您需要选择这批导入机构的所属机构。
+如果是新增的机构,并且父级为空,则会将这批机构自动挂载到指定机构上。
+如果是修改的机构,导入程序只能修改组织机构名称、简称、编码、排序、状态、类型、税号、备注、对外主数据id。
+如确认数据没问题,请点击确认导入。
+
+
+
+
+
+ 确认导入
+
+
+
+
+
+
+ {{ record.operateType.value }}
+ {{ record.operateType.value }}
+ {{ record.operateType.value }}
+
+
+ {{ record[column.dataIndex].value }}
+
+ {{ record[column.dataIndex].errorMessage }}
+ {{ record[column.dataIndex].value }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/organization/components/org-add-edit.vue b/guns-front-project/src/views/system/structure/organization/components/org-add-edit.vue
new file mode 100644
index 00000000..c18b084e
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/organization/components/org-add-edit.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/organization/components/org-detail.vue b/guns-front-project/src/views/system/structure/organization/components/org-detail.vue
new file mode 100644
index 00000000..babf295e
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/organization/components/org-detail.vue
@@ -0,0 +1,203 @@
+
+
+
+
+ {{ form.orgName }}
+ ({{ form.orgShortName }})
+
+
+
+
+
+
+
+
+
+
+ {{ form[item.value] == 1 ? '公司' : '部门' }}
+ {{ form[item.value] == 1 ? '启用' : '禁用' }}
+ {{ form[item.value] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/organization/components/org-form.vue b/guns-front-project/src/views/system/structure/organization/components/org-form.vue
new file mode 100644
index 00000000..825bfbec
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/organization/components/org-form.vue
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 公司
+ 部门
+
+
+
+
+
+
+ 启用
+ 禁用
+
+
+
+
+ 其他信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/organization/components/set-approver.vue b/guns-front-project/src/views/system/structure/organization/components/set-approver.vue
new file mode 100644
index 00000000..c47bc927
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/organization/components/set-approver.vue
@@ -0,0 +1,235 @@
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/organization/index.vue b/guns-front-project/src/views/system/structure/organization/index.vue
new file mode 100644
index 00000000..e28655da
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/organization/index.vue
@@ -0,0 +1,410 @@
+
+
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/position/api/PositionApi.js b/guns-front-project/src/views/system/structure/position/api/PositionApi.js
new file mode 100644
index 00000000..8d28dba0
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/position/api/PositionApi.js
@@ -0,0 +1,57 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -职位api
+ *
+ */
+export class PositionApi {
+ /**
+ * 分页
+ * @param {*} params
+ * @returns
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/hrPosition/page', params);
+ }
+
+ /**
+ * 添加
+ * @param {*} params
+ * @returns
+ */
+ static add(params) {
+ return Request.post('/hrPosition/add', params);
+ }
+ /**
+ * 编辑
+ * @param {*} params
+ * @returns
+ */
+ static edit(params) {
+ return Request.post('/hrPosition/edit', params);
+ }
+ /**
+ * 删除单个
+ * @param {*} params
+ * @returns
+ */
+ static delete(params) {
+ return Request.post('/hrPosition/delete', params);
+ }
+ /**
+ * 删除批量
+ * @param {*} params
+ * @returns
+ */
+ static batchDelete(params) {
+ return Request.post('/hrPosition/batchDelete', params);
+ }
+ /**
+ * 详情
+ * @param {*} params
+ * @returns
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/hrPosition/detail', params);
+ }
+}
\ No newline at end of file
diff --git a/guns-front-project/src/views/system/structure/position/components/position-add-edit.vue b/guns-front-project/src/views/system/structure/position/components/position-add-edit.vue
new file mode 100644
index 00000000..1f4191ba
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/position/components/position-add-edit.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/position/components/position-form.vue b/guns-front-project/src/views/system/structure/position/components/position-form.vue
new file mode 100644
index 00000000..8f585ef6
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/position/components/position-form.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/position/index.vue b/guns-front-project/src/views/system/structure/position/index.vue
new file mode 100644
index 00000000..ce406472
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/position/index.vue
@@ -0,0 +1,251 @@
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/user/api/UsersApi.js b/guns-front-project/src/views/system/structure/user/api/UsersApi.js
new file mode 100644
index 00000000..a6590672
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/user/api/UsersApi.js
@@ -0,0 +1,136 @@
+import Request from '@/utils/request/request-util';
+
+/**
+ * 后台管理 -人员api
+ *
+ */
+export class UsersApi {
+ /**
+ * 分页
+ * @param {*} params
+ * @returns
+ */
+ static findPage(params) {
+ return Request.getAndLoadData('/sysUser/page', params);
+ }
+
+ /**
+ * 添加
+ * @param {*} params
+ * @returns
+ */
+ static add(params) {
+ return Request.post('/sysUser/add', params);
+ }
+ /**
+ * 编辑
+ * @param {*} params
+ * @returns
+ */
+ static edit(params) {
+ return Request.post('/sysUser/edit', params);
+ }
+ /**
+ * 删除单个
+ * @param {*} params
+ * @returns
+ */
+ static delete(params) {
+ return Request.post('/sysUser/delete', params);
+ }
+ /**
+ * 删除批量
+ * @param {*} params
+ * @returns
+ */
+ static batchDelete(params) {
+ return Request.post('/sysUser/batchDelete', params);
+ }
+ /**
+ * 详情
+ * @param {*} params
+ * @returns
+ */
+ static detail(params) {
+ return Request.getAndLoadData('/sysUser/detail', params);
+ }
+ /**
+ * 列表
+ * @param {*} params
+ * @returns
+ */
+ static list(params) {
+ return Request.getAndLoadData('/sysUser/list', params);
+ }
+ /**
+ * 重置密码
+ * @param {*} params
+ * @returns
+ */
+ static resetPassword(params) {
+ return Request.post('/sysUser/resetPassword', params);
+ }
+
+ /**
+ * 修改用户状态
+ * @param {*} params
+ * @returns
+ */
+ static updateStatus(params) {
+ return Request.post('/sysUser/updateStatus', params);
+ }
+
+ /**
+ * 绑定用户角色
+ * @param {*} params
+ * @returns
+ */
+ static bindRoles(params) {
+ return Request.post('/sysUser/bindRoles', params);
+ }
+
+ /**
+ * 角色列表
+ * @param {*} params
+ * @returns
+ */
+ static roleList(params) {
+ return Request.getAndLoadData('/sysRole/list', params);
+ }
+
+ /**
+ * 用户导出业务
+ * @param {*} params
+ * @returns
+ */
+ static ExportUser(params) {
+ return Request.downLoad('/api/user/ExportUser', params);
+ }
+
+ /**
+ * 下载导入的Excel模板
+ * @param {*} params
+ * @returns
+ */
+ static getExcelTemplate(params) {
+ return Request.downLoad('/api/userImport/getExcelTemplate', params);
+ }
+
+ /**
+ * 上传excel获取导入预览数据
+ * @param {*} params
+ * @returns
+ */
+ static uploadAndGetPreviewData(params) {
+ return Request.post('/userImport/uploadAndGetPreviewData', params);
+ }
+
+ /**
+ * 确认导入Excel数据
+ * @param {*} params
+ * @returns
+ */
+ static ensureImport(params) {
+ return Request.post('/userImport/ensureImport', params);
+ }
+}
diff --git a/guns-front-project/src/views/system/structure/user/components/allocation-role.vue b/guns-front-project/src/views/system/structure/user/components/allocation-role.vue
new file mode 100644
index 00000000..d493edc7
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/user/components/allocation-role.vue
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+ {{ roItem.roleName }} (系统角色)
+ {{ roItem.roleName }} (业务角色)
+
+ {{ roItem.roleName }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/user/components/import-export-user.vue b/guns-front-project/src/views/system/structure/user/components/import-export-user.vue
new file mode 100644
index 00000000..c375156f
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/user/components/import-export-user.vue
@@ -0,0 +1,570 @@
+
+
+
+
+
+
+
+
+
+ {{ iItem.name }}
+
+
+
+
+
+
+
上传Excel
+
+
+ 上传文件
+
+
+
+
+
+
+
导出用户筛选
+
+
+
+
+
+
+
+
+
+
+ 立即导出
+
+
+
+
+
+
+
+导入成功后,您需要选择这批导入用户的所属机构。
+如果是新增的人员,可以批量设置所属机构,在批量设置后也可以进行手动单个处理所属机构,直接在表格中操作即可。
+如果是修改的人员,默认设置的所属机构不会覆盖该用户已有的机构。
+如确认数据没问题,请点击确认导入。
+
+
+
+
+
+
+
+
+ 确认导入
+
+
+
+
+
+
+ {{ record.operateType.value }}
+ {{ record.operateType.value }}
+ {{ record.operateType.value }}
+
+
+ {{ record[column.dataIndex].value }}
+
+ {{ record[column.dataIndex].errorMessage }}
+ {{ record[column.dataIndex].value }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/user/components/user-add-edit.vue b/guns-front-project/src/views/system/structure/user/components/user-add-edit.vue
new file mode 100644
index 00000000..861a2ebb
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/user/components/user-add-edit.vue
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/user/components/user-detail.vue b/guns-front-project/src/views/system/structure/user/components/user-detail.vue
new file mode 100644
index 00000000..1c5c6603
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/user/components/user-detail.vue
@@ -0,0 +1,421 @@
+
+
+
+
+
![]()
+

+
{{ form.realName }}
+
+
+
+
+
+
+
+
+
+
+ {{ form[item.value] == 'Y' ? '是' : '否' }}
+ {{ form[item.value] == 1 ? '启用' : '禁用' }}
+ {{ form[item.value] == 'M' ? '男' : form[item.value] == 'Y' ? '否' : '' }}
+ {{ form[item.value] }}
+
+
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+ 启用
+ 禁用
+
+
+
+
+
+
+
+
+
+
+ {{
+ roItem.roleName
+ }}
+
+
+
+
+
+
+
+
+
+
+ {{ getTypeName(record.certificateType) }}
+
+
+ {{ record[column.dataIndex] ? record[column.dataIndex].substr(0, 10) : '' }}
+
+
+ {{ record[column.dataIndex] ? record[column.dataIndex].substr(0, 10) : '长期' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/user/components/user-form.vue b/guns-front-project/src/views/system/structure/user/components/user-form.vue
new file mode 100644
index 00000000..66a687e4
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/user/components/user-form.vue
@@ -0,0 +1,496 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 男
+ 女
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+
+
+
+ 启用
+ 禁用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 组织机构信息
+
+
+ 添加机构
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 证书信息
+
+
+ 添加证书
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 上传文件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/user/index.vue b/guns-front-project/src/views/system/structure/user/index.vue
new file mode 100644
index 00000000..56d38f19
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/user/index.vue
@@ -0,0 +1,443 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ record.realName }}
+
+
+
+ {{ record?.userOrgDTO?.companyName ? record?.userOrgDTO?.companyName : '' }}
+
+
+
+ {{ record?.userOrgDTO?.deptName ? record?.userOrgDTO?.deptName : '' }}
+
+
+
+ {{ record?.userOrgDTO?.positionName ? record?.userOrgDTO?.positionName : '' }}
+
+
+
+ 男
+ 女
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
(columns = val)"
+ :fieldBusinessCode="fieldBusinessCode"
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/src/views/system/structure/user/org-tree.vue b/guns-front-project/src/views/system/structure/user/org-tree.vue
new file mode 100644
index 00000000..e1289b89
--- /dev/null
+++ b/guns-front-project/src/views/system/structure/user/org-tree.vue
@@ -0,0 +1,242 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ data.orgName }}
+
+
+
+
+
+
+
+
+
+ {{ data.orgName }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/guns-front-project/vite.config.js b/guns-front-project/vite.config.js
new file mode 100644
index 00000000..c2b9aa17
--- /dev/null
+++ b/guns-front-project/vite.config.js
@@ -0,0 +1,99 @@
+import { fileURLToPath, URL } from 'node:url';
+import { defineConfig, loadEnv } from 'vite';
+import vue from '@vitejs/plugin-vue';
+import vueJsx from '@vitejs/plugin-vue-jsx';
+import legacy from '@vitejs/plugin-legacy';
+import ViteCompression from 'vite-plugin-compression';
+import ViteComponents from 'unplugin-vue-components/vite';
+import { VxeTableResolve } from 'vite-plugin-style-import';
+import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers';
+import { DynamicAntdLess } from './src/utils/dynamic-theme';
+import { styleDeps } from './src/utils/resolvers';
+
+export default defineConfig(({ mode, command }) => {
+ const isBuild = command === 'build';
+ const env = loadEnv(mode, process.cwd());
+ // 在这里增加 base 写子路径,注意这里前后都要有斜杠
+ return {
+ base: '/',
+ server: {
+ host: '0.0.0.0',
+ port: 9000,
+ proxy: {
+ '/api': {
+ target: env.VITE_API_URL,
+ changeOrigin: true,
+ ws: true,
+ rewrite: path => path.replace(/^\/api/, '')
+ }
+ }
+ },
+ plugins: [
+ vue(),
+ vueJsx(),
+ // 组件按需引入
+ ViteComponents({
+ dts: false,
+ resolvers: [
+ AntDesignVueResolver({
+ importStyle: 'less'
+ }),
+ VxeTableResolve({
+ importStyle: true
+ })
+ ]
+ }),
+ // gzip 压缩
+ ViteCompression({
+ disable: !isBuild,
+ threshold: 10240,
+ algorithm: 'gzip',
+ ext: '.gz'
+ }),
+ // 兼容低版本浏览器
+ legacy({
+ targets: ['Chrome 63'],
+ modernPolyfills: true
+ })
+ ],
+ css: {
+ preprocessorOptions: {
+ less: {
+ javascriptEnabled: true,
+ plugins: [new DynamicAntdLess()]
+ }
+ }
+ },
+ resolve: {
+ alias: {
+ '@': fileURLToPath(new URL('./src', import.meta.url)),
+ 'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js'
+ }
+ },
+ optimizeDeps: {
+ include: [
+ ...styleDeps,
+ 'lodash-es',
+ 'cropperjs',
+ 'tinymce/tinymce',
+ 'ant-design-vue',
+ 'ant-design-vue/es',
+ '@ant-design/icons-vue',
+ 'vuedraggable',
+ 'dayjs',
+ 'echarts/core',
+ 'echarts/charts',
+ 'echarts/renderers',
+ 'echarts/components',
+ 'vue-echarts',
+ 'xlsx'
+ ]
+ },
+ esbuild: {
+ charset: 'ascii'
+ },
+ build: {
+ target: 'chrome63'
+ }
+ };
+});
diff --git a/guns-front-project/vitest.config.js b/guns-front-project/vitest.config.js
new file mode 100644
index 00000000..10067d57
--- /dev/null
+++ b/guns-front-project/vitest.config.js
@@ -0,0 +1,14 @@
+import { fileURLToPath } from 'node:url'
+import { mergeConfig, defineConfig, configDefaults } from 'vitest/config'
+import viteConfig from './vite.config'
+
+export default mergeConfig(
+ viteConfig,
+ defineConfig({
+ test: {
+ environment: 'jsdom',
+ exclude: [...configDefaults.exclude, 'e2e/*'],
+ root: fileURLToPath(new URL('./', import.meta.url))
+ }
+ })
+)
diff --git a/guns-front-project/yarn.lock b/guns-front-project/yarn.lock
new file mode 100644
index 00000000..f597d9a2
--- /dev/null
+++ b/guns-front-project/yarn.lock
@@ -0,0 +1,4515 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@aashutoshrathi/word-wrap@^1.2.3":
+ version "1.2.6"
+ resolved "https://registry.npmmirror.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
+ integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
+
+"@ampproject/remapping@^2.2.0":
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
+ integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@ant-design/colors@^6.0.0":
+ version "6.0.0"
+ resolved "https://registry.npmmirror.com/@ant-design/colors/-/colors-6.0.0.tgz#9b9366257cffcc47db42b9d0203bb592c13c0298"
+ integrity sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==
+ dependencies:
+ "@ctrl/tinycolor" "^3.4.0"
+
+"@ant-design/icons-svg@^4.2.1":
+ version "4.4.2"
+ resolved "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz#ed2be7fb4d82ac7e1d45a54a5b06d6cecf8be6f6"
+ integrity sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==
+
+"@ant-design/icons-vue@^6.1.0":
+ version "6.1.0"
+ resolved "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz#f9324fdc0eb4cea943cf626d2bf3db9a4ff4c074"
+ integrity sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==
+ dependencies:
+ "@ant-design/colors" "^6.0.0"
+ "@ant-design/icons-svg" "^4.2.1"
+
+"@ant-design/icons-vue@^7.0.1":
+ version "7.0.1"
+ resolved "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz#83de301771fadd03f3890e627314102405c31c22"
+ integrity sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==
+ dependencies:
+ "@ant-design/colors" "^6.0.0"
+ "@ant-design/icons-svg" "^4.2.1"
+
+"@antfu/utils@^0.7.2":
+ version "0.7.7"
+ resolved "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.7.tgz#26ea493a831b4f3a85475e7157be02fb4eab51fb"
+ integrity sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==
+
+"@babel/code-frame@^7.23.5":
+ version "7.23.5"
+ resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244"
+ integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==
+ dependencies:
+ "@babel/highlight" "^7.23.4"
+ chalk "^2.4.2"
+
+"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5":
+ version "7.23.5"
+ resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98"
+ integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==
+
+"@babel/core@^7.22.9", "@babel/core@^7.23.3":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b"
+ integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==
+ dependencies:
+ "@ampproject/remapping" "^2.2.0"
+ "@babel/code-frame" "^7.23.5"
+ "@babel/generator" "^7.23.6"
+ "@babel/helper-compilation-targets" "^7.23.6"
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helpers" "^7.24.0"
+ "@babel/parser" "^7.24.0"
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.0"
+ "@babel/types" "^7.24.0"
+ convert-source-map "^2.0.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.3"
+ semver "^6.3.1"
+
+"@babel/generator@^7.23.6":
+ version "7.23.6"
+ resolved "https://registry.npmmirror.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e"
+ integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==
+ dependencies:
+ "@babel/types" "^7.23.6"
+ "@jridgewell/gen-mapping" "^0.3.2"
+ "@jridgewell/trace-mapping" "^0.3.17"
+ jsesc "^2.5.1"
+
+"@babel/helper-annotate-as-pure@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882"
+ integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15":
+ version "7.22.15"
+ resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956"
+ integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==
+ dependencies:
+ "@babel/types" "^7.22.15"
+
+"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6":
+ version "7.23.6"
+ resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991"
+ integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==
+ dependencies:
+ "@babel/compat-data" "^7.23.5"
+ "@babel/helper-validator-option" "^7.23.5"
+ browserslist "^4.22.2"
+ lru-cache "^5.1.1"
+ semver "^6.3.1"
+
+"@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz#fc7554141bdbfa2d17f7b4b80153b9b090e5d158"
+ integrity sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-function-name" "^7.23.0"
+ "@babel/helper-member-expression-to-functions" "^7.23.0"
+ "@babel/helper-optimise-call-expression" "^7.22.5"
+ "@babel/helper-replace-supers" "^7.22.20"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ semver "^6.3.1"
+
+"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5":
+ version "7.22.15"
+ resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1"
+ integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ regexpu-core "^5.3.1"
+ semver "^6.3.1"
+
+"@babel/helper-define-polyfill-provider@^0.5.0":
+ version "0.5.0"
+ resolved "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b"
+ integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==
+ dependencies:
+ "@babel/helper-compilation-targets" "^7.22.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ debug "^4.1.1"
+ lodash.debounce "^4.0.8"
+ resolve "^1.14.2"
+
+"@babel/helper-environment-visitor@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
+ integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
+
+"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
+ integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
+ dependencies:
+ "@babel/template" "^7.22.15"
+ "@babel/types" "^7.23.0"
+
+"@babel/helper-hoist-variables@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
+ integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366"
+ integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==
+ dependencies:
+ "@babel/types" "^7.23.0"
+
+"@babel/helper-module-imports@^7.22.15":
+ version "7.22.15"
+ resolved "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0"
+ integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==
+ dependencies:
+ "@babel/types" "^7.22.15"
+
+"@babel/helper-module-transforms@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1"
+ integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-module-imports" "^7.22.15"
+ "@babel/helper-simple-access" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ "@babel/helper-validator-identifier" "^7.22.20"
+
+"@babel/helper-optimise-call-expression@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e"
+ integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a"
+ integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==
+
+"@babel/helper-remap-async-to-generator@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0"
+ integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-wrap-function" "^7.22.20"
+
+"@babel/helper-replace-supers@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793"
+ integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-member-expression-to-functions" "^7.22.15"
+ "@babel/helper-optimise-call-expression" "^7.22.5"
+
+"@babel/helper-simple-access@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de"
+ integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847"
+ integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-split-export-declaration@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
+ integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-string-parser@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83"
+ integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==
+
+"@babel/helper-validator-identifier@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
+ integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
+
+"@babel/helper-validator-option@^7.23.5":
+ version "7.23.5"
+ resolved "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307"
+ integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==
+
+"@babel/helper-wrap-function@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569"
+ integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==
+ dependencies:
+ "@babel/helper-function-name" "^7.22.5"
+ "@babel/template" "^7.22.15"
+ "@babel/types" "^7.22.19"
+
+"@babel/helpers@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b"
+ integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==
+ dependencies:
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.0"
+ "@babel/types" "^7.24.0"
+
+"@babel/highlight@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b"
+ integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.22.20"
+ chalk "^2.4.2"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.23.0", "@babel/parser@^7.23.6", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac"
+ integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==
+
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a"
+ integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d"
+ integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+ "@babel/plugin-transform-optional-chaining" "^7.23.3"
+
+"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7":
+ version "7.23.7"
+ resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b"
+ integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2":
+ version "7.21.0-placeholder-for-preset-env.2"
+ resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703"
+ integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==
+
+"@babel/plugin-syntax-async-generators@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.12.13":
+ version "7.12.13"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
+ integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.12.13"
+
+"@babel/plugin-syntax-class-static-block@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
+ integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-dynamic-import@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
+ integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-export-namespace-from@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
+ integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.3"
+
+"@babel/plugin-syntax-import-assertions@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc"
+ integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-syntax-import-attributes@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06"
+ integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-syntax-import-meta@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
+ integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-json-strings@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-jsx@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473"
+ integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+ integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+ integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-private-property-in-object@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"
+ integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-top-level-await@^7.14.5":
+ version "7.14.5"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
+ integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.14.5"
+
+"@babel/plugin-syntax-typescript@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f"
+ integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-syntax-unicode-sets-regex@^7.18.6":
+ version "7.18.6"
+ resolved "https://registry.npmmirror.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357"
+ integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.18.6"
+ "@babel/helper-plugin-utils" "^7.18.6"
+
+"@babel/plugin-transform-arrow-functions@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b"
+ integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-async-generator-functions@^7.23.9":
+ version "7.23.9"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce"
+ integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-remap-async-to-generator" "^7.22.20"
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+
+"@babel/plugin-transform-async-to-generator@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa"
+ integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-remap-async-to-generator" "^7.22.20"
+
+"@babel/plugin-transform-block-scoped-functions@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77"
+ integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-block-scoping@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5"
+ integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-class-properties@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48"
+ integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-class-static-block@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5"
+ integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-class-static-block" "^7.14.5"
+
+"@babel/plugin-transform-classes@^7.23.8":
+ version "7.23.8"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92"
+ integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-compilation-targets" "^7.23.6"
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-function-name" "^7.23.0"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-replace-supers" "^7.22.20"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ globals "^11.1.0"
+
+"@babel/plugin-transform-computed-properties@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474"
+ integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/template" "^7.22.15"
+
+"@babel/plugin-transform-destructuring@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311"
+ integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-dotall-regex@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50"
+ integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-duplicate-keys@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce"
+ integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-dynamic-import@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143"
+ integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+
+"@babel/plugin-transform-exponentiation-operator@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18"
+ integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-export-namespace-from@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191"
+ integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+
+"@babel/plugin-transform-for-of@^7.23.6":
+ version "7.23.6"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e"
+ integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+
+"@babel/plugin-transform-function-name@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc"
+ integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==
+ dependencies:
+ "@babel/helper-compilation-targets" "^7.22.15"
+ "@babel/helper-function-name" "^7.23.0"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-json-strings@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d"
+ integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+
+"@babel/plugin-transform-literals@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4"
+ integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-logical-assignment-operators@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5"
+ integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+
+"@babel/plugin-transform-member-expression-literals@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc"
+ integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-modules-amd@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d"
+ integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-modules-commonjs@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4"
+ integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-simple-access" "^7.22.5"
+
+"@babel/plugin-transform-modules-systemjs@^7.23.9":
+ version "7.23.9"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be"
+ integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==
+ dependencies:
+ "@babel/helper-hoist-variables" "^7.22.5"
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-validator-identifier" "^7.22.20"
+
+"@babel/plugin-transform-modules-umd@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9"
+ integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==
+ dependencies:
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f"
+ integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-new-target@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980"
+ integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e"
+ integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+
+"@babel/plugin-transform-numeric-separator@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29"
+ integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+
+"@babel/plugin-transform-object-rest-spread@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz#7b836ad0088fdded2420ce96d4e1d3ed78b71df1"
+ integrity sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==
+ dependencies:
+ "@babel/compat-data" "^7.23.5"
+ "@babel/helper-compilation-targets" "^7.23.6"
+ "@babel/helper-plugin-utils" "^7.24.0"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-transform-parameters" "^7.23.3"
+
+"@babel/plugin-transform-object-super@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd"
+ integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-replace-supers" "^7.22.20"
+
+"@babel/plugin-transform-optional-catch-binding@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017"
+ integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+
+"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017"
+ integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
+"@babel/plugin-transform-parameters@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af"
+ integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-private-methods@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4"
+ integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-private-property-in-object@^7.23.4":
+ version "7.23.4"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5"
+ integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-create-class-features-plugin" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+
+"@babel/plugin-transform-property-literals@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875"
+ integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-regenerator@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c"
+ integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ regenerator-transform "^0.15.2"
+
+"@babel/plugin-transform-reserved-words@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8"
+ integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-shorthand-properties@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210"
+ integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-spread@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c"
+ integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
+
+"@babel/plugin-transform-sticky-regex@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04"
+ integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-template-literals@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07"
+ integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-typeof-symbol@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4"
+ integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-typescript@^7.23.3":
+ version "7.23.6"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz#aa36a94e5da8d94339ae3a4e22d40ed287feb34c"
+ integrity sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.22.5"
+ "@babel/helper-create-class-features-plugin" "^7.23.6"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-typescript" "^7.23.3"
+
+"@babel/plugin-transform-unicode-escapes@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925"
+ integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-unicode-property-regex@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad"
+ integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-unicode-regex@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc"
+ integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/plugin-transform-unicode-sets-regex@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e"
+ integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+
+"@babel/preset-env@^7.22.9":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.24.0.tgz#11536a7f4b977294f0bdfad780f01a8ac8e183fc"
+ integrity sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==
+ dependencies:
+ "@babel/compat-data" "^7.23.5"
+ "@babel/helper-compilation-targets" "^7.23.6"
+ "@babel/helper-plugin-utils" "^7.24.0"
+ "@babel/helper-validator-option" "^7.23.5"
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3"
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3"
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7"
+ "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2"
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/plugin-syntax-class-properties" "^7.12.13"
+ "@babel/plugin-syntax-class-static-block" "^7.14.5"
+ "@babel/plugin-syntax-dynamic-import" "^7.8.3"
+ "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
+ "@babel/plugin-syntax-import-assertions" "^7.23.3"
+ "@babel/plugin-syntax-import-attributes" "^7.23.3"
+ "@babel/plugin-syntax-import-meta" "^7.10.4"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.10.4"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+ "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
+ "@babel/plugin-syntax-top-level-await" "^7.14.5"
+ "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
+ "@babel/plugin-transform-arrow-functions" "^7.23.3"
+ "@babel/plugin-transform-async-generator-functions" "^7.23.9"
+ "@babel/plugin-transform-async-to-generator" "^7.23.3"
+ "@babel/plugin-transform-block-scoped-functions" "^7.23.3"
+ "@babel/plugin-transform-block-scoping" "^7.23.4"
+ "@babel/plugin-transform-class-properties" "^7.23.3"
+ "@babel/plugin-transform-class-static-block" "^7.23.4"
+ "@babel/plugin-transform-classes" "^7.23.8"
+ "@babel/plugin-transform-computed-properties" "^7.23.3"
+ "@babel/plugin-transform-destructuring" "^7.23.3"
+ "@babel/plugin-transform-dotall-regex" "^7.23.3"
+ "@babel/plugin-transform-duplicate-keys" "^7.23.3"
+ "@babel/plugin-transform-dynamic-import" "^7.23.4"
+ "@babel/plugin-transform-exponentiation-operator" "^7.23.3"
+ "@babel/plugin-transform-export-namespace-from" "^7.23.4"
+ "@babel/plugin-transform-for-of" "^7.23.6"
+ "@babel/plugin-transform-function-name" "^7.23.3"
+ "@babel/plugin-transform-json-strings" "^7.23.4"
+ "@babel/plugin-transform-literals" "^7.23.3"
+ "@babel/plugin-transform-logical-assignment-operators" "^7.23.4"
+ "@babel/plugin-transform-member-expression-literals" "^7.23.3"
+ "@babel/plugin-transform-modules-amd" "^7.23.3"
+ "@babel/plugin-transform-modules-commonjs" "^7.23.3"
+ "@babel/plugin-transform-modules-systemjs" "^7.23.9"
+ "@babel/plugin-transform-modules-umd" "^7.23.3"
+ "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5"
+ "@babel/plugin-transform-new-target" "^7.23.3"
+ "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4"
+ "@babel/plugin-transform-numeric-separator" "^7.23.4"
+ "@babel/plugin-transform-object-rest-spread" "^7.24.0"
+ "@babel/plugin-transform-object-super" "^7.23.3"
+ "@babel/plugin-transform-optional-catch-binding" "^7.23.4"
+ "@babel/plugin-transform-optional-chaining" "^7.23.4"
+ "@babel/plugin-transform-parameters" "^7.23.3"
+ "@babel/plugin-transform-private-methods" "^7.23.3"
+ "@babel/plugin-transform-private-property-in-object" "^7.23.4"
+ "@babel/plugin-transform-property-literals" "^7.23.3"
+ "@babel/plugin-transform-regenerator" "^7.23.3"
+ "@babel/plugin-transform-reserved-words" "^7.23.3"
+ "@babel/plugin-transform-shorthand-properties" "^7.23.3"
+ "@babel/plugin-transform-spread" "^7.23.3"
+ "@babel/plugin-transform-sticky-regex" "^7.23.3"
+ "@babel/plugin-transform-template-literals" "^7.23.3"
+ "@babel/plugin-transform-typeof-symbol" "^7.23.3"
+ "@babel/plugin-transform-unicode-escapes" "^7.23.3"
+ "@babel/plugin-transform-unicode-property-regex" "^7.23.3"
+ "@babel/plugin-transform-unicode-regex" "^7.23.3"
+ "@babel/plugin-transform-unicode-sets-regex" "^7.23.3"
+ "@babel/preset-modules" "0.1.6-no-external-plugins"
+ babel-plugin-polyfill-corejs2 "^0.4.8"
+ babel-plugin-polyfill-corejs3 "^0.9.0"
+ babel-plugin-polyfill-regenerator "^0.5.5"
+ core-js-compat "^3.31.0"
+ semver "^6.3.1"
+
+"@babel/preset-modules@0.1.6-no-external-plugins":
+ version "0.1.6-no-external-plugins"
+ resolved "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a"
+ integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/types" "^7.4.4"
+ esutils "^2.0.2"
+
+"@babel/regjsgen@^0.8.0":
+ version "0.8.0"
+ resolved "https://registry.npmmirror.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
+ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
+
+"@babel/runtime@^7.10.5", "@babel/runtime@^7.8.4":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e"
+ integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
+"@babel/template@^7.22.15", "@babel/template@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50"
+ integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==
+ dependencies:
+ "@babel/code-frame" "^7.23.5"
+ "@babel/parser" "^7.24.0"
+ "@babel/types" "^7.24.0"
+
+"@babel/traverse@^7.23.7", "@babel/traverse@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e"
+ integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==
+ dependencies:
+ "@babel/code-frame" "^7.23.5"
+ "@babel/generator" "^7.23.6"
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-function-name" "^7.23.0"
+ "@babel/helper-hoist-variables" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ "@babel/parser" "^7.24.0"
+ "@babel/types" "^7.24.0"
+ debug "^4.3.1"
+ globals "^11.1.0"
+
+"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.4.4":
+ version "7.24.0"
+ resolved "https://registry.npmmirror.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf"
+ integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==
+ dependencies:
+ "@babel/helper-string-parser" "^7.23.4"
+ "@babel/helper-validator-identifier" "^7.22.20"
+ to-fast-properties "^2.0.0"
+
+"@ctrl/tinycolor@^3.4.0":
+ version "3.6.1"
+ resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz#b6c75a56a1947cc916ea058772d666a2c8932f31"
+ integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==
+
+"@esbuild/aix-ppc64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f"
+ integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==
+
+"@esbuild/android-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622"
+ integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==
+
+"@esbuild/android-arm64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4"
+ integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==
+
+"@esbuild/android-arm@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682"
+ integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==
+
+"@esbuild/android-arm@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824"
+ integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==
+
+"@esbuild/android-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2"
+ integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==
+
+"@esbuild/android-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d"
+ integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==
+
+"@esbuild/darwin-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1"
+ integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==
+
+"@esbuild/darwin-arm64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e"
+ integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==
+
+"@esbuild/darwin-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d"
+ integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==
+
+"@esbuild/darwin-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd"
+ integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==
+
+"@esbuild/freebsd-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54"
+ integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==
+
+"@esbuild/freebsd-arm64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487"
+ integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==
+
+"@esbuild/freebsd-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e"
+ integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==
+
+"@esbuild/freebsd-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c"
+ integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==
+
+"@esbuild/linux-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0"
+ integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==
+
+"@esbuild/linux-arm64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b"
+ integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==
+
+"@esbuild/linux-arm@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0"
+ integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==
+
+"@esbuild/linux-arm@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef"
+ integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==
+
+"@esbuild/linux-ia32@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7"
+ integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==
+
+"@esbuild/linux-ia32@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601"
+ integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==
+
+"@esbuild/linux-loong64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d"
+ integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==
+
+"@esbuild/linux-loong64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299"
+ integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==
+
+"@esbuild/linux-mips64el@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231"
+ integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==
+
+"@esbuild/linux-mips64el@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec"
+ integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==
+
+"@esbuild/linux-ppc64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb"
+ integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==
+
+"@esbuild/linux-ppc64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8"
+ integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==
+
+"@esbuild/linux-riscv64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6"
+ integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==
+
+"@esbuild/linux-riscv64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf"
+ integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==
+
+"@esbuild/linux-s390x@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071"
+ integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==
+
+"@esbuild/linux-s390x@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8"
+ integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==
+
+"@esbuild/linux-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338"
+ integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==
+
+"@esbuild/linux-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78"
+ integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==
+
+"@esbuild/netbsd-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1"
+ integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==
+
+"@esbuild/netbsd-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b"
+ integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==
+
+"@esbuild/openbsd-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae"
+ integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==
+
+"@esbuild/openbsd-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0"
+ integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==
+
+"@esbuild/sunos-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d"
+ integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==
+
+"@esbuild/sunos-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30"
+ integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==
+
+"@esbuild/win32-arm64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9"
+ integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==
+
+"@esbuild/win32-arm64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae"
+ integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==
+
+"@esbuild/win32-ia32@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102"
+ integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==
+
+"@esbuild/win32-ia32@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67"
+ integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==
+
+"@esbuild/win32-x64@0.18.20":
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d"
+ integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==
+
+"@esbuild/win32-x64@0.19.12":
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae"
+ integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==
+
+"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
+ version "4.4.0"
+ resolved "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
+ integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
+ dependencies:
+ eslint-visitor-keys "^3.3.0"
+
+"@eslint-community/regexpp@^4.6.1":
+ version "4.10.0"
+ resolved "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63"
+ integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
+
+"@eslint/eslintrc@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
+ integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.6.0"
+ globals "^13.19.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
+"@eslint/js@8.57.0":
+ version "8.57.0"
+ resolved "https://registry.npmmirror.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f"
+ integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
+
+"@humanwhocodes/config-array@^0.11.14":
+ version "0.11.14"
+ resolved "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
+ integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
+ dependencies:
+ "@humanwhocodes/object-schema" "^2.0.2"
+ debug "^4.3.1"
+ minimatch "^3.0.5"
+
+"@humanwhocodes/module-importer@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/object-schema@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917"
+ integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==
+
+"@intlify/core-base@9.10.1":
+ version "9.10.1"
+ resolved "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.10.1.tgz#e61d507d35beb0c69f9c94566313f9520c25a84a"
+ integrity sha512-0+Wtjj04GIyglh5KKiNjRwgjpHrhqqGZhaKY/QVjjogWKZq5WHROrTi84pNVsRN18QynyPmjtsVUWqFKPQ45xQ==
+ dependencies:
+ "@intlify/message-compiler" "9.10.1"
+ "@intlify/shared" "9.10.1"
+
+"@intlify/message-compiler@9.10.1":
+ version "9.10.1"
+ resolved "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.10.1.tgz#d70c9ec211dab67d50a42ad1fb782c0e02f89c42"
+ integrity sha512-b68UTmRhgZfswJZI7VAgW6BXZK5JOpoi5swMLGr4j6ss2XbFY13kiw+Hu+xYAfulMPSapcHzdWHnq21VGnMCnA==
+ dependencies:
+ "@intlify/shared" "9.10.1"
+ source-map-js "^1.0.2"
+
+"@intlify/shared@9.10.1":
+ version "9.10.1"
+ resolved "https://registry.npmmirror.com/@intlify/shared/-/shared-9.10.1.tgz#024ad6dd4ee9581962437570b3dc25516c82f4e9"
+ integrity sha512-liyH3UMoglHBUn70iCYcy9CQlInx/lp50W2aeSxqqrvmG+LDj/Jj7tBJhBoQL4fECkldGhbmW0g2ommHfL6Wmw==
+
+"@isaacs/cliui@^8.0.2":
+ version "8.0.2"
+ resolved "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+ integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+ dependencies:
+ string-width "^5.1.2"
+ string-width-cjs "npm:string-width@^4.2.0"
+ strip-ansi "^7.0.1"
+ strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+ wrap-ansi "^8.1.0"
+ wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+
+"@jest/schemas@^29.6.3":
+ version "29.6.3"
+ resolved "https://registry.npmmirror.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
+ integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==
+ dependencies:
+ "@sinclair/typebox" "^0.27.8"
+
+"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5":
+ version "0.3.5"
+ resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
+ integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
+ dependencies:
+ "@jridgewell/set-array" "^1.2.1"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/resolve-uri@^3.1.0":
+ version "3.1.2"
+ resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
+ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/set-array@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
+ integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
+
+"@jridgewell/source-map@^0.3.3":
+ version "0.3.5"
+ resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91"
+ integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.0"
+ "@jridgewell/trace-mapping" "^0.3.9"
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15":
+ version "1.4.15"
+ resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.9":
+ version "0.3.25"
+ resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
+ integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
+ version "1.2.8"
+ resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@one-ini/wasm@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.npmmirror.com/@one-ini/wasm/-/wasm-0.1.1.tgz#6013659736c9dbfccc96e8a9c2b3de317df39323"
+ integrity sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==
+
+"@pkgjs/parseargs@^0.11.0":
+ version "0.11.0"
+ resolved "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+ integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+
+"@pkgr/core@^0.1.0":
+ version "0.1.1"
+ resolved "https://registry.npmmirror.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31"
+ integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==
+
+"@rollup/pluginutils@^4.1.2":
+ version "4.2.1"
+ resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d"
+ integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==
+ dependencies:
+ estree-walker "^2.0.1"
+ picomatch "^2.2.2"
+
+"@rollup/pluginutils@^5.0.2":
+ version "5.1.0"
+ resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0"
+ integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==
+ dependencies:
+ "@types/estree" "^1.0.0"
+ estree-walker "^2.0.2"
+ picomatch "^2.3.1"
+
+"@rollup/rollup-android-arm-eabi@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.1.tgz#11aaa02a933864b87f0b31cf2b755734e1f22787"
+ integrity sha512-iU2Sya8hNn1LhsYyf0N+L4Gf9Qc+9eBTJJJsaOGUp+7x4n2M9dxTt8UvhJl3oeftSjblSlpCfvjA/IfP3g5VjQ==
+
+"@rollup/rollup-android-arm64@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.1.tgz#b1e606fb4b46b38dc32bf010d513449462d669e9"
+ integrity sha512-wlzcWiH2Ir7rdMELxFE5vuM7D6TsOcJ2Yw0c3vaBR3VOsJFVTx9xvwnAvhgU5Ii8Gd6+I11qNHwndDscIm0HXg==
+
+"@rollup/rollup-darwin-arm64@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.1.tgz#dc21df1be9402671a8b6b15a93dd5953c68ec114"
+ integrity sha512-YRXa1+aZIFN5BaImK+84B3uNK8C6+ynKLPgvn29X9s0LTVCByp54TB7tdSMHDR7GTV39bz1lOmlLDuedgTwwHg==
+
+"@rollup/rollup-darwin-x64@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.1.tgz#397dcc4427d774f29b9954676893574ac563bf0b"
+ integrity sha512-opjWJ4MevxeA8FhlngQWPBOvVWYNPFkq6/25rGgG+KOy0r8clYwL1CFd+PGwRqqMFVQ4/Qd3sQu5t7ucP7C/Uw==
+
+"@rollup/rollup-linux-arm-gnueabihf@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.1.tgz#d851fd49d617e7792e7cde8e5a95ca51ea520fe5"
+ integrity sha512-uBkwaI+gBUlIe+EfbNnY5xNyXuhZbDSx2nzzW8tRMjUmpScd6lCQYKY2V9BATHtv5Ef2OBq6SChEP8h+/cxifQ==
+
+"@rollup/rollup-linux-arm64-gnu@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.1.tgz#e41a271ae51f79ffee6fb2b5597cc81b4ef66ad9"
+ integrity sha512-0bK9aG1kIg0Su7OcFTlexkVeNZ5IzEsnz1ept87a0TUgZ6HplSgkJAnFpEVRW7GRcikT4GlPV0pbtVedOaXHQQ==
+
+"@rollup/rollup-linux-arm64-musl@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.1.tgz#d3b4cd6ef18d0aa7103129755e0c535701624fac"
+ integrity sha512-qB6AFRXuP8bdkBI4D7UPUbE7OQf7u5OL+R94JE42Z2Qjmyj74FtDdLGeriRyBDhm4rQSvqAGCGC01b8Fu2LthQ==
+
+"@rollup/rollup-linux-riscv64-gnu@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.1.tgz#215101b2bb768cce2f2227145b8dd5c3c716c259"
+ integrity sha512-sHig3LaGlpNgDj5o8uPEoGs98RII8HpNIqFtAI8/pYABO8i0nb1QzT0JDoXF/pxzqO+FkxvwkHZo9k0NJYDedg==
+
+"@rollup/rollup-linux-x64-gnu@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.1.tgz#34a12fa305e167105eab70dbf577cd41e5199709"
+ integrity sha512-nD3YcUv6jBJbBNFvSbp0IV66+ba/1teuBcu+fBBPZ33sidxitc6ErhON3JNavaH8HlswhWMC3s5rgZpM4MtPqQ==
+
+"@rollup/rollup-linux-x64-musl@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.1.tgz#3f000b5a92a32b844e385e1166979c87882930a3"
+ integrity sha512-7/XVZqgBby2qp/cO0TQ8uJK+9xnSdJ9ct6gSDdEr4MfABrjTyrW6Bau7HQ73a2a5tPB7hno49A0y1jhWGDN9OQ==
+
+"@rollup/rollup-win32-arm64-msvc@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.1.tgz#27977d91f5059645ebb3b7fbf4429982de2278d3"
+ integrity sha512-CYc64bnICG42UPL7TrhIwsJW4QcKkIt9gGlj21gq3VV0LL6XNb1yAdHVp1pIi9gkts9gGcT3OfUYHjGP7ETAiw==
+
+"@rollup/rollup-win32-ia32-msvc@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.1.tgz#0d252acd5af0274209c74374867ee8b949843d75"
+ integrity sha512-LN+vnlZ9g0qlHGlS920GR4zFCqAwbv2lULrR29yGaWP9u7wF5L7GqWu9Ah6/kFZPXPUkpdZwd//TNR+9XC9hvA==
+
+"@rollup/rollup-win32-x64-msvc@4.12.1":
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.1.tgz#cd8d175e001c212d5ac71c7827ef1d5c5e14494c"
+ integrity sha512-n+vkrSyphvmU0qkQ6QBNXCGr2mKjhP08mPRM/Xp5Ck2FV4NrHU+y6axzDeixUrCBHVUS51TZhjqrKBBsHLKb2Q==
+
+"@rushstack/eslint-patch@^1.3.3":
+ version "1.7.2"
+ resolved "https://registry.npmmirror.com/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz#2d4260033e199b3032a08b41348ac10de21c47e9"
+ integrity sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==
+
+"@simonwep/pickr@~1.8.0":
+ version "1.8.2"
+ resolved "https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.8.2.tgz#96dc86675940d7cad63d69c22083dd1cbb9797cb"
+ integrity sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==
+ dependencies:
+ core-js "^3.15.1"
+ nanopop "^2.1.0"
+
+"@sinclair/typebox@^0.27.8":
+ version "0.27.8"
+ resolved "https://registry.npmmirror.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
+ integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
+
+"@tootallnate/once@2":
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
+ integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
+
+"@types/chai-subset@^1.3.3":
+ version "1.3.5"
+ resolved "https://registry.npmmirror.com/@types/chai-subset/-/chai-subset-1.3.5.tgz#3fc044451f26985f45625230a7f22284808b0a9a"
+ integrity sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==
+ dependencies:
+ "@types/chai" "*"
+
+"@types/chai@*", "@types/chai@^4.3.5":
+ version "4.3.12"
+ resolved "https://registry.npmmirror.com/@types/chai/-/chai-4.3.12.tgz#b192fe1c553b54f45d20543adc2ab88455a07d5e"
+ integrity sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw==
+
+"@types/estree@1.0.5", "@types/estree@^1.0.0":
+ version "1.0.5"
+ resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
+ integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
+
+"@types/node@*":
+ version "20.11.25"
+ resolved "https://registry.npmmirror.com/@types/node/-/node-20.11.25.tgz#0f50d62f274e54dd7a49f7704cc16bfbcccaf49f"
+ integrity sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==
+ dependencies:
+ undici-types "~5.26.4"
+
+"@ungap/structured-clone@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
+ integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
+
+"@vitejs/plugin-legacy@^4.0.2":
+ version "4.1.1"
+ resolved "https://registry.npmmirror.com/@vitejs/plugin-legacy/-/plugin-legacy-4.1.1.tgz#27aad7ab082d2d554cf48a8e4f1c0ae9f3eca522"
+ integrity sha512-um3gbVouD2Q/g19C0qpDfHwveXDCAHzs8OC3e9g6aXpKoD1H14himgs7wkMnhAynBJy7QqUoZNAXDuqN8zLR2g==
+ dependencies:
+ "@babel/core" "^7.22.9"
+ "@babel/preset-env" "^7.22.9"
+ browserslist "^4.21.9"
+ core-js "^3.31.1"
+ magic-string "^0.30.1"
+ regenerator-runtime "^0.13.11"
+ systemjs "^6.14.1"
+
+"@vitejs/plugin-vue-jsx@^3.0.2":
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.1.0.tgz#9953fd9456539e1f0f253bf0fcd1289e66c67cd1"
+ integrity sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==
+ dependencies:
+ "@babel/core" "^7.23.3"
+ "@babel/plugin-transform-typescript" "^7.23.3"
+ "@vue/babel-plugin-jsx" "^1.1.5"
+
+"@vitejs/plugin-vue@^4.4.0":
+ version "4.6.2"
+ resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz#057d2ded94c4e71b94e9814f92dcd9306317aa46"
+ integrity sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==
+
+"@vitest/expect@0.34.6":
+ version "0.34.6"
+ resolved "https://registry.npmmirror.com/@vitest/expect/-/expect-0.34.6.tgz#608a7b7a9aa3de0919db99b4cc087340a03ea77e"
+ integrity sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==
+ dependencies:
+ "@vitest/spy" "0.34.6"
+ "@vitest/utils" "0.34.6"
+ chai "^4.3.10"
+
+"@vitest/runner@0.34.6":
+ version "0.34.6"
+ resolved "https://registry.npmmirror.com/@vitest/runner/-/runner-0.34.6.tgz#6f43ca241fc96b2edf230db58bcde5b974b8dcaf"
+ integrity sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==
+ dependencies:
+ "@vitest/utils" "0.34.6"
+ p-limit "^4.0.0"
+ pathe "^1.1.1"
+
+"@vitest/snapshot@0.34.6":
+ version "0.34.6"
+ resolved "https://registry.npmmirror.com/@vitest/snapshot/-/snapshot-0.34.6.tgz#b4528cf683b60a3e8071cacbcb97d18b9d5e1d8b"
+ integrity sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==
+ dependencies:
+ magic-string "^0.30.1"
+ pathe "^1.1.1"
+ pretty-format "^29.5.0"
+
+"@vitest/spy@0.34.6":
+ version "0.34.6"
+ resolved "https://registry.npmmirror.com/@vitest/spy/-/spy-0.34.6.tgz#b5e8642a84aad12896c915bce9b3cc8cdaf821df"
+ integrity sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==
+ dependencies:
+ tinyspy "^2.1.1"
+
+"@vitest/utils@0.34.6":
+ version "0.34.6"
+ resolved "https://registry.npmmirror.com/@vitest/utils/-/utils-0.34.6.tgz#38a0a7eedddb8e7291af09a2409cb8a189516968"
+ integrity sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==
+ dependencies:
+ diff-sequences "^29.4.3"
+ loupe "^2.3.6"
+ pretty-format "^29.5.0"
+
+"@vue/babel-helper-vue-transform-on@1.2.1":
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.1.tgz#3a48da809025b9a0eb4f4b3030e0d316c40fac0a"
+ integrity sha512-jtEXim+pfyHWwvheYwUwSXm43KwQo8nhOBDyjrUITV6X2tB7lJm6n/+4sqR8137UVZZul5hBzWHdZ2uStYpyRQ==
+
+"@vue/babel-plugin-jsx@^1.1.5":
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.1.tgz#786c5395605a1d2463d6b10d8a7f3abdc01d25ce"
+ integrity sha512-Yy9qGktktXhB39QE99So/BO2Uwm/ZG+gpL9vMg51ijRRbINvgbuhyJEi4WYmGRMx/MSTfK0xjgZ3/MyY+iLCEg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/plugin-syntax-jsx" "^7.23.3"
+ "@babel/template" "^7.22.15"
+ "@babel/traverse" "^7.23.7"
+ "@babel/types" "^7.23.6"
+ "@vue/babel-helper-vue-transform-on" "1.2.1"
+ "@vue/babel-plugin-resolve-type" "1.2.1"
+ camelcase "^6.3.0"
+ html-tags "^3.3.1"
+ svg-tags "^1.0.0"
+
+"@vue/babel-plugin-resolve-type@1.2.1":
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.1.tgz#874fb3e02d033b3dd2e0fc883a3d1ceef0bdf39b"
+ integrity sha512-IOtnI7pHunUzHS/y+EG/yPABIAp0VN8QhQ0UCS09jeMVxgAnI9qdOzO85RXdQGxq+aWCdv8/+k3W0aYO6j/8fQ==
+ dependencies:
+ "@babel/code-frame" "^7.23.5"
+ "@babel/helper-module-imports" "^7.22.15"
+ "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/parser" "^7.23.6"
+ "@vue/compiler-sfc" "^3.4.15"
+
+"@vue/compiler-core@3.3.8":
+ version "3.3.8"
+ resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.8.tgz#301bb60d0245265a88ed5b30e200fbf223acb313"
+ integrity sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==
+ dependencies:
+ "@babel/parser" "^7.23.0"
+ "@vue/shared" "3.3.8"
+ estree-walker "^2.0.2"
+ source-map-js "^1.0.2"
+
+"@vue/compiler-core@3.4.21":
+ version "3.4.21"
+ resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.21.tgz#868b7085378fc24e58c9aed14c8d62110a62be1a"
+ integrity sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==
+ dependencies:
+ "@babel/parser" "^7.23.9"
+ "@vue/shared" "3.4.21"
+ entities "^4.5.0"
+ estree-walker "^2.0.2"
+ source-map-js "^1.0.2"
+
+"@vue/compiler-dom@3.3.8":
+ version "3.3.8"
+ resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz#09d832514b9b8d9415a3816b065d69dbefcc7e9b"
+ integrity sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==
+ dependencies:
+ "@vue/compiler-core" "3.3.8"
+ "@vue/shared" "3.3.8"
+
+"@vue/compiler-dom@3.4.21":
+ version "3.4.21"
+ resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz#0077c355e2008207283a5a87d510330d22546803"
+ integrity sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==
+ dependencies:
+ "@vue/compiler-core" "3.4.21"
+ "@vue/shared" "3.4.21"
+
+"@vue/compiler-sfc@3.3.8":
+ version "3.3.8"
+ resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz#40b18e48aa00260950964d1d72157668521be0e1"
+ integrity sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==
+ dependencies:
+ "@babel/parser" "^7.23.0"
+ "@vue/compiler-core" "3.3.8"
+ "@vue/compiler-dom" "3.3.8"
+ "@vue/compiler-ssr" "3.3.8"
+ "@vue/reactivity-transform" "3.3.8"
+ "@vue/shared" "3.3.8"
+ estree-walker "^2.0.2"
+ magic-string "^0.30.5"
+ postcss "^8.4.31"
+ source-map-js "^1.0.2"
+
+"@vue/compiler-sfc@^3.4.15":
+ version "3.4.21"
+ resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz#4af920dc31ab99e1ff5d152b5fe0ad12181145b2"
+ integrity sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==
+ dependencies:
+ "@babel/parser" "^7.23.9"
+ "@vue/compiler-core" "3.4.21"
+ "@vue/compiler-dom" "3.4.21"
+ "@vue/compiler-ssr" "3.4.21"
+ "@vue/shared" "3.4.21"
+ estree-walker "^2.0.2"
+ magic-string "^0.30.7"
+ postcss "^8.4.35"
+ source-map-js "^1.0.2"
+
+"@vue/compiler-ssr@3.3.8":
+ version "3.3.8"
+ resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz#136eed54411e4694815d961048a237191063fbce"
+ integrity sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==
+ dependencies:
+ "@vue/compiler-dom" "3.3.8"
+ "@vue/shared" "3.3.8"
+
+"@vue/compiler-ssr@3.4.21":
+ version "3.4.21"
+ resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz#b84ae64fb9c265df21fc67f7624587673d324fef"
+ integrity sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==
+ dependencies:
+ "@vue/compiler-dom" "3.4.21"
+ "@vue/shared" "3.4.21"
+
+"@vue/devtools-api@^6.5.0", "@vue/devtools-api@^6.5.1":
+ version "6.6.1"
+ resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.1.tgz#7c14346383751d9f6ad4bea0963245b30220ef83"
+ integrity sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==
+
+"@vue/eslint-config-prettier@^8.0.0":
+ version "8.0.0"
+ resolved "https://registry.npmmirror.com/@vue/eslint-config-prettier/-/eslint-config-prettier-8.0.0.tgz#de5cb77ed483b43683d17a788808a0fa4e7bd07e"
+ integrity sha512-55dPqtC4PM/yBjhAr+yEw6+7KzzdkBuLmnhBrDfp4I48+wy+Giqqj9yUr5T2uD/BkBROjjmqnLZmXRdOx/VtQg==
+ dependencies:
+ eslint-config-prettier "^8.8.0"
+ eslint-plugin-prettier "^5.0.0"
+
+"@vue/reactivity-transform@3.3.8":
+ version "3.3.8"
+ resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz#6d07649013b0be5c670f0ab6cc7ddd3150ad03f2"
+ integrity sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==
+ dependencies:
+ "@babel/parser" "^7.23.0"
+ "@vue/compiler-core" "3.3.8"
+ "@vue/shared" "3.3.8"
+ estree-walker "^2.0.2"
+ magic-string "^0.30.5"
+
+"@vue/reactivity@3.3.8":
+ version "3.3.8"
+ resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.8.tgz#cce8a03a3fd3539c3eeda53e277ba365d160dd4d"
+ integrity sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==
+ dependencies:
+ "@vue/shared" "3.3.8"
+
+"@vue/runtime-core@3.3.8":
+ version "3.3.8"
+ resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.8.tgz#fba5a632cbf2b5d29e171489570149cb6975dcdb"
+ integrity sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==
+ dependencies:
+ "@vue/reactivity" "3.3.8"
+ "@vue/shared" "3.3.8"
+
+"@vue/runtime-dom@3.3.8":
+ version "3.3.8"
+ resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz#e2d7aa795cf50914dda9a951887765a594b38af4"
+ integrity sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==
+ dependencies:
+ "@vue/runtime-core" "3.3.8"
+ "@vue/shared" "3.3.8"
+ csstype "^3.1.2"
+
+"@vue/server-renderer@3.3.8":
+ version "3.3.8"
+ resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.8.tgz#9b1779010e75783edeed8fcfb97d9c95fc3ac5d2"
+ integrity sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==
+ dependencies:
+ "@vue/compiler-ssr" "3.3.8"
+ "@vue/shared" "3.3.8"
+
+"@vue/shared@3.3.8":
+ version "3.3.8"
+ resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.8.tgz#f044942142e1d3a395f24132e6203a784838542d"
+ integrity sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==
+
+"@vue/shared@3.4.21":
+ version "3.4.21"
+ resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.21.tgz#de526a9059d0a599f0b429af7037cd0c3ed7d5a1"
+ integrity sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==
+
+"@vue/test-utils@^2.4.1":
+ version "2.4.4"
+ resolved "https://registry.npmmirror.com/@vue/test-utils/-/test-utils-2.4.4.tgz#36ba31f90332fb25a5ab2e553652c21d33057094"
+ integrity sha512-8jkRxz8pNhClAf4Co4ZrpAoFISdvT3nuSkUlY6Ys6rmTpw3DMWG/X3mw3gQ7QJzgCZO9f+zuE2kW57fi09MW7Q==
+ dependencies:
+ js-beautify "^1.14.9"
+ vue-component-type-helpers "^1.8.21"
+
+abab@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
+ integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
+
+abbrev@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf"
+ integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==
+
+acorn-jsx@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+acorn-walk@^8.2.0:
+ version "8.3.2"
+ resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa"
+ integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==
+
+acorn@^8.10.0, acorn@^8.11.3, acorn@^8.8.2, acorn@^8.9.0:
+ version "8.11.3"
+ resolved "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
+ integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
+
+adler-32@~1.3.0:
+ version "1.3.1"
+ resolved "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz#1dbf0b36dda0012189a32b3679061932df1821e2"
+ integrity sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==
+
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+ dependencies:
+ debug "4"
+
+ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-regex@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+ integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+ansi-styles@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
+ integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
+
+ansi-styles@^6.1.0:
+ version "6.2.1"
+ resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
+ integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
+ant-design-vue@^3.2.17:
+ version "3.2.20"
+ resolved "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-3.2.20.tgz#552f5f08e2acbcc10bd4089145d4cc2b15d4cfec"
+ integrity sha512-YWpMfGaGoRastIXEYfCoJiaRiDHk4chqtYhlKQM5GqPt6NfvrM1Vg2e60yHtjxlZjed91wCMm0rAmyUr7Hwzdg==
+ dependencies:
+ "@ant-design/colors" "^6.0.0"
+ "@ant-design/icons-vue" "^6.1.0"
+ "@babel/runtime" "^7.10.5"
+ "@ctrl/tinycolor" "^3.4.0"
+ "@simonwep/pickr" "~1.8.0"
+ array-tree-filter "^2.1.0"
+ async-validator "^4.0.0"
+ dayjs "^1.10.5"
+ dom-align "^1.12.1"
+ dom-scroll-into-view "^2.0.0"
+ lodash "^4.17.21"
+ lodash-es "^4.17.15"
+ resize-observer-polyfill "^1.5.1"
+ scroll-into-view-if-needed "^2.2.25"
+ shallow-equal "^1.0.0"
+ vue-types "^3.0.0"
+ warning "^4.0.0"
+
+anymatch@~3.1.2:
+ version "3.1.3"
+ resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+array-tree-filter@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190"
+ integrity sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==
+
+assertion-error@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
+ integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
+
+async-validator@^4.0.0:
+ version "4.2.5"
+ resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339"
+ integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+axios@^1.6.0:
+ version "1.6.7"
+ resolved "https://registry.npmmirror.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7"
+ integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==
+ dependencies:
+ follow-redirects "^1.15.4"
+ form-data "^4.0.0"
+ proxy-from-env "^1.1.0"
+
+babel-plugin-polyfill-corejs2@^0.4.8:
+ version "0.4.8"
+ resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269"
+ integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==
+ dependencies:
+ "@babel/compat-data" "^7.22.6"
+ "@babel/helper-define-polyfill-provider" "^0.5.0"
+ semver "^6.3.1"
+
+babel-plugin-polyfill-corejs3@^0.9.0:
+ version "0.9.0"
+ resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81"
+ integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==
+ dependencies:
+ "@babel/helper-define-polyfill-provider" "^0.5.0"
+ core-js-compat "^3.34.0"
+
+babel-plugin-polyfill-regenerator@^0.5.5:
+ version "0.5.5"
+ resolved "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a"
+ integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==
+ dependencies:
+ "@babel/helper-define-polyfill-provider" "^0.5.0"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+binary-extensions@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+ integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+boolbase@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+ integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ dependencies:
+ balanced-match "^1.0.0"
+
+braces@^3.0.2, braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+browserslist@^4.21.9, browserslist@^4.22.2, browserslist@^4.22.3:
+ version "4.23.0"
+ resolved "https://registry.npmmirror.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab"
+ integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==
+ dependencies:
+ caniuse-lite "^1.0.30001587"
+ electron-to-chromium "^1.4.668"
+ node-releases "^2.0.14"
+ update-browserslist-db "^1.0.13"
+
+buffer-from@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+ integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+cac@^6.7.14:
+ version "6.7.14"
+ resolved "https://registry.npmmirror.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959"
+ integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camel-case@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
+ integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
+ dependencies:
+ pascal-case "^3.1.2"
+ tslib "^2.0.3"
+
+camelcase@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
+ integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+
+caniuse-lite@^1.0.30001587:
+ version "1.0.30001596"
+ resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001596.tgz#da06b79c3d9c3d9958eb307aa832ac68ead79bee"
+ integrity sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ==
+
+capital-case@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669"
+ integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+ upper-case-first "^2.0.2"
+
+cfb@~1.2.1:
+ version "1.2.2"
+ resolved "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz#94e687628c700e5155436dac05f74e08df23bc44"
+ integrity sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==
+ dependencies:
+ adler-32 "~1.3.0"
+ crc-32 "~1.2.0"
+
+chai@^4.3.10:
+ version "4.4.1"
+ resolved "https://registry.npmmirror.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1"
+ integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==
+ dependencies:
+ assertion-error "^1.1.0"
+ check-error "^1.0.3"
+ deep-eql "^4.1.3"
+ get-func-name "^2.0.2"
+ loupe "^2.3.6"
+ pathval "^1.1.1"
+ type-detect "^4.0.8"
+
+chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.0.0, chalk@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+change-case@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.npmmirror.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12"
+ integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==
+ dependencies:
+ camel-case "^4.1.2"
+ capital-case "^1.0.4"
+ constant-case "^3.0.4"
+ dot-case "^3.0.4"
+ header-case "^2.0.4"
+ no-case "^3.0.4"
+ param-case "^3.0.4"
+ pascal-case "^3.1.2"
+ path-case "^3.0.4"
+ sentence-case "^3.0.4"
+ snake-case "^3.0.4"
+ tslib "^2.0.3"
+
+check-error@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694"
+ integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==
+ dependencies:
+ get-func-name "^2.0.2"
+
+chokidar@^3.5.3, chokidar@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
+ integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+clipboard@^2.0.6:
+ version "2.0.11"
+ resolved "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.11.tgz#62180360b97dd668b6b3a84ec226975762a70be5"
+ integrity sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==
+ dependencies:
+ good-listener "^1.2.2"
+ select "^1.1.2"
+ tiny-emitter "^2.0.0"
+
+codepage@~1.15.0:
+ version "1.15.0"
+ resolved "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz#2e00519024b39424ec66eeb3ec07227e692618ab"
+ integrity sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+combined-stream@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@^10.0.0:
+ version "10.0.1"
+ resolved "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
+ integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
+
+commander@^2.20.0:
+ version "2.20.3"
+ resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+ integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+compute-scroll-into-view@^1.0.20:
+ version "1.0.20"
+ resolved "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43"
+ integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+config-chain@^1.1.13:
+ version "1.1.13"
+ resolved "https://registry.npmmirror.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4"
+ integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==
+ dependencies:
+ ini "^1.3.4"
+ proto-list "~1.2.1"
+
+consola@3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/consola/-/consola-3.2.0.tgz#347ad19c297a7dbd3ae97c648abefc107a08098f"
+ integrity sha512-NLgzNbAYHKIeCi+wrymxkwZX42jAMBDB/8gtR+JCgHzegj92hXNoLmYrfA78mfmvopmg/z0PNgYyFAwY5emnZg==
+
+console@^0.7.2:
+ version "0.7.2"
+ resolved "https://registry.npmmirror.com/console/-/console-0.7.2.tgz#f9a4331249291591b7bf9bffa8e205356f20a9f0"
+ integrity sha512-+JSDwGunA4MTEgAV/4VBKwUHonP8CzJ/6GIuwPi6acKFqFfHUdSGCm89ZxZ5FfGWdZfkdgAroy5bJ5FSeN/t4g==
+
+constant-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.npmmirror.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1"
+ integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+ upper-case "^2.0.2"
+
+convert-source-map@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
+ integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
+
+copy-anything@^2.0.1:
+ version "2.0.6"
+ resolved "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480"
+ integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==
+ dependencies:
+ is-what "^3.14.1"
+
+core-js-compat@^3.31.0, core-js-compat@^3.34.0:
+ version "3.36.0"
+ resolved "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.36.0.tgz#087679119bc2fdbdefad0d45d8e5d307d45ba190"
+ integrity sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==
+ dependencies:
+ browserslist "^4.22.3"
+
+core-js@^3.15.1, core-js@^3.31.1:
+ version "3.36.0"
+ resolved "https://registry.npmmirror.com/core-js/-/core-js-3.36.0.tgz#e752fa0b0b462a0787d56e9d73f80b0f7c0dde68"
+ integrity sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==
+
+crc-32@~1.2.0, crc-32@~1.2.1:
+ version "1.2.2"
+ resolved "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff"
+ integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==
+
+cropperjs@^1.5.12:
+ version "1.6.1"
+ resolved "https://registry.npmmirror.com/cropperjs/-/cropperjs-1.6.1.tgz#fd132021d93b824b1b0f2c2c3b763419fb792d89"
+ integrity sha512-F4wsi+XkDHCOMrHMYjrTEE4QBOrsHHN5/2VsVAaRq8P7E5z7xQpT75S+f/9WikmBEailas3+yo+6zPIomW+NOA==
+
+cross-spawn@^7.0.0, cross-spawn@^7.0.2:
+ version "7.0.3"
+ resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+cssesc@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
+ integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
+
+cssstyle@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a"
+ integrity sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==
+ dependencies:
+ rrweb-cssom "^0.6.0"
+
+csstype@^3.1.2:
+ version "3.1.3"
+ resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
+ integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
+
+data-urls@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/data-urls/-/data-urls-4.0.0.tgz#333a454eca6f9a5b7b0f1013ff89074c3f522dd4"
+ integrity sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==
+ dependencies:
+ abab "^2.0.6"
+ whatwg-mimetype "^3.0.0"
+ whatwg-url "^12.0.0"
+
+dayjs@^1.10.5, dayjs@^1.11.10:
+ version "1.11.10"
+ resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0"
+ integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==
+
+debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
+ version "4.3.4"
+ resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
+decimal.js@^10.4.3:
+ version "10.4.3"
+ resolved "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
+ integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
+
+deep-eql@^4.1.3:
+ version "4.1.3"
+ resolved "https://registry.npmmirror.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d"
+ integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==
+ dependencies:
+ type-detect "^4.0.0"
+
+deep-is@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+ integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+delegate@^3.1.2:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166"
+ integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
+
+diff-sequences@^29.4.3:
+ version "29.6.3"
+ resolved "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"
+ integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+dom-align@^1.12.1:
+ version "1.12.4"
+ resolved "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.4.tgz#3503992eb2a7cfcb2ed3b2a6d21e0b9c00d54511"
+ integrity sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==
+
+dom-scroll-into-view@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz#0decc8522801fd8d3f1c6ba355a74d382c5f989b"
+ integrity sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==
+
+dom-zindex@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/dom-zindex/-/dom-zindex-1.0.1.tgz#98df1d916f390f009bb0ec03b96df820e7c7073a"
+ integrity sha512-M/MERVDZ8hguvjl6MAlLWSLYLS7PzEyXaTb5gEeJ+SF+e9iUC0sdvlzqe91MMDHBoy+nqw7wKcUOrDSyvMCrRg==
+
+domexception@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673"
+ integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==
+ dependencies:
+ webidl-conversions "^7.0.0"
+
+dot-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
+ integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+
+eastasianwidth@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+ integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
+echarts@^5.4.2:
+ version "5.5.0"
+ resolved "https://registry.npmmirror.com/echarts/-/echarts-5.5.0.tgz#c13945a7f3acdd67c134d8a9ac67e917830113ac"
+ integrity sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==
+ dependencies:
+ tslib "2.3.0"
+ zrender "5.5.0"
+
+editorconfig@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/editorconfig/-/editorconfig-1.0.4.tgz#040c9a8e9a6c5288388b87c2db07028aa89f53a3"
+ integrity sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==
+ dependencies:
+ "@one-ini/wasm" "0.1.1"
+ commander "^10.0.0"
+ minimatch "9.0.1"
+ semver "^7.5.3"
+
+electron-to-chromium@^1.4.668:
+ version "1.4.698"
+ resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.698.tgz#0b3992ad3b572b646ce3f22e0145eab4abc559a7"
+ integrity sha512-f9iZD1t3CLy1AS6vzM5EKGa6p9pRcOeEFXRFbaG2Ta+Oe7MkfRQ3fsvPYidzHe1h4i0JvIvpcY55C+B6BZNGtQ==
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+ version "9.2.2"
+ resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+ integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+entities@^4.4.0, entities@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
+ integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
+
+errno@^0.1.1:
+ version "0.1.8"
+ resolved "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
+ integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
+ dependencies:
+ prr "~1.0.1"
+
+es-module-lexer@^0.9.3:
+ version "0.9.3"
+ resolved "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19"
+ integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==
+
+esbuild@^0.18.10:
+ version "0.18.20"
+ resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6"
+ integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==
+ optionalDependencies:
+ "@esbuild/android-arm" "0.18.20"
+ "@esbuild/android-arm64" "0.18.20"
+ "@esbuild/android-x64" "0.18.20"
+ "@esbuild/darwin-arm64" "0.18.20"
+ "@esbuild/darwin-x64" "0.18.20"
+ "@esbuild/freebsd-arm64" "0.18.20"
+ "@esbuild/freebsd-x64" "0.18.20"
+ "@esbuild/linux-arm" "0.18.20"
+ "@esbuild/linux-arm64" "0.18.20"
+ "@esbuild/linux-ia32" "0.18.20"
+ "@esbuild/linux-loong64" "0.18.20"
+ "@esbuild/linux-mips64el" "0.18.20"
+ "@esbuild/linux-ppc64" "0.18.20"
+ "@esbuild/linux-riscv64" "0.18.20"
+ "@esbuild/linux-s390x" "0.18.20"
+ "@esbuild/linux-x64" "0.18.20"
+ "@esbuild/netbsd-x64" "0.18.20"
+ "@esbuild/openbsd-x64" "0.18.20"
+ "@esbuild/sunos-x64" "0.18.20"
+ "@esbuild/win32-arm64" "0.18.20"
+ "@esbuild/win32-ia32" "0.18.20"
+ "@esbuild/win32-x64" "0.18.20"
+
+esbuild@^0.19.3:
+ version "0.19.12"
+ resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04"
+ integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==
+ optionalDependencies:
+ "@esbuild/aix-ppc64" "0.19.12"
+ "@esbuild/android-arm" "0.19.12"
+ "@esbuild/android-arm64" "0.19.12"
+ "@esbuild/android-x64" "0.19.12"
+ "@esbuild/darwin-arm64" "0.19.12"
+ "@esbuild/darwin-x64" "0.19.12"
+ "@esbuild/freebsd-arm64" "0.19.12"
+ "@esbuild/freebsd-x64" "0.19.12"
+ "@esbuild/linux-arm" "0.19.12"
+ "@esbuild/linux-arm64" "0.19.12"
+ "@esbuild/linux-ia32" "0.19.12"
+ "@esbuild/linux-loong64" "0.19.12"
+ "@esbuild/linux-mips64el" "0.19.12"
+ "@esbuild/linux-ppc64" "0.19.12"
+ "@esbuild/linux-riscv64" "0.19.12"
+ "@esbuild/linux-s390x" "0.19.12"
+ "@esbuild/linux-x64" "0.19.12"
+ "@esbuild/netbsd-x64" "0.19.12"
+ "@esbuild/openbsd-x64" "0.19.12"
+ "@esbuild/sunos-x64" "0.19.12"
+ "@esbuild/win32-arm64" "0.19.12"
+ "@esbuild/win32-ia32" "0.19.12"
+ "@esbuild/win32-x64" "0.19.12"
+
+escalade@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
+ integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+eslint-config-prettier@^8.8.0:
+ version "8.10.0"
+ resolved "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11"
+ integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==
+
+eslint-plugin-prettier@^5.0.0:
+ version "5.1.3"
+ resolved "https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1"
+ integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==
+ dependencies:
+ prettier-linter-helpers "^1.0.0"
+ synckit "^0.8.6"
+
+eslint-plugin-vue@^9.17.0:
+ version "9.22.0"
+ resolved "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-9.22.0.tgz#e8a625adb0b6ce3b65635dd74fec8345146f8e26"
+ integrity sha512-7wCXv5zuVnBtZE/74z4yZ0CM8AjH6bk4MQGm7hZjUC2DBppKU5ioeOk5LGSg/s9a1ZJnIsdPLJpXnu1Rc+cVHg==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.4.0"
+ natural-compare "^1.4.0"
+ nth-check "^2.1.1"
+ postcss-selector-parser "^6.0.15"
+ semver "^7.6.0"
+ vue-eslint-parser "^9.4.2"
+ xml-name-validator "^4.0.0"
+
+eslint-scope@^7.1.1, eslint-scope@^7.2.2:
+ version "7.2.2"
+ resolved "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
+ integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
+eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+ version "3.4.3"
+ resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
+
+eslint@^8.49.0:
+ version "8.57.0"
+ resolved "https://registry.npmmirror.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
+ integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@eslint-community/regexpp" "^4.6.1"
+ "@eslint/eslintrc" "^2.1.4"
+ "@eslint/js" "8.57.0"
+ "@humanwhocodes/config-array" "^0.11.14"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ "@nodelib/fs.walk" "^1.2.8"
+ "@ungap/structured-clone" "^1.2.0"
+ ajv "^6.12.4"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
+ doctrine "^3.0.0"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^7.2.2"
+ eslint-visitor-keys "^3.4.3"
+ espree "^9.6.1"
+ esquery "^1.4.2"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ find-up "^5.0.0"
+ glob-parent "^6.0.2"
+ globals "^13.19.0"
+ graphemer "^1.4.0"
+ ignore "^5.2.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ is-path-inside "^3.0.3"
+ js-yaml "^4.1.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.1.2"
+ natural-compare "^1.4.0"
+ optionator "^0.9.3"
+ strip-ansi "^6.0.1"
+ text-table "^0.2.0"
+
+espree@^9.3.1, espree@^9.6.0, espree@^9.6.1:
+ version "9.6.1"
+ resolved "https://registry.npmmirror.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
+ integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
+ dependencies:
+ acorn "^8.9.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^3.4.1"
+
+esquery@^1.4.0, esquery@^1.4.2:
+ version "1.5.0"
+ resolved "https://registry.npmmirror.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
+ integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^5.1.0, estraverse@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+estree-walker@^2.0.1, estree-walker@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
+ integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-diff@^1.1.2:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0"
+ integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==
+
+fast-glob@^3.2.12:
+ version "3.3.2"
+ resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
+ integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fastq@^1.6.0:
+ version "1.17.1"
+ resolved "https://registry.npmmirror.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47"
+ integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==
+ dependencies:
+ reusify "^1.0.4"
+
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+flat-cache@^3.0.4:
+ version "3.2.0"
+ resolved "https://registry.npmmirror.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee"
+ integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
+ dependencies:
+ flatted "^3.2.9"
+ keyv "^4.5.3"
+ rimraf "^3.0.2"
+
+flatted@^3.2.9:
+ version "3.3.1"
+ resolved "https://registry.npmmirror.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
+ integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
+
+follow-redirects@^1.15.4:
+ version "1.15.5"
+ resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020"
+ integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==
+
+foreground-child@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
+ integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
+ dependencies:
+ cross-spawn "^7.0.0"
+ signal-exit "^4.0.1"
+
+form-data@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+frac@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz#3d74f7f6478c88a1b5020306d747dc6313c74d0b"
+ integrity sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==
+
+fs-extra@^10.0.0:
+ version "10.1.0"
+ resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
+ integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@~2.3.2, fsevents@~2.3.3:
+ version "2.3.3"
+ resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+function-bind@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
+
+gensync@^1.0.0-beta.2:
+ version "1.0.0-beta.2"
+ resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+get-func-name@^2.0.1, get-func-name@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41"
+ integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==
+
+glob-parent@^5.1.2, glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
+glob@^10.3.3:
+ version "10.3.10"
+ resolved "https://registry.npmmirror.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
+ integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
+ dependencies:
+ foreground-child "^3.1.0"
+ jackspeak "^2.3.5"
+ minimatch "^9.0.1"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+ path-scurry "^1.10.1"
+
+glob@^7.1.3:
+ version "7.2.3"
+ resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.1.1"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^13.19.0:
+ version "13.24.0"
+ resolved "https://registry.npmmirror.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
+ integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
+ dependencies:
+ type-fest "^0.20.2"
+
+good-listener@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50"
+ integrity sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==
+ dependencies:
+ delegate "^3.1.2"
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
+ version "4.2.11"
+ resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+graphemer@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
+ integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+hasown@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa"
+ integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==
+ dependencies:
+ function-bind "^1.1.2"
+
+header-case@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.npmmirror.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063"
+ integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==
+ dependencies:
+ capital-case "^1.0.4"
+ tslib "^2.0.3"
+
+html-encoding-sniffer@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9"
+ integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==
+ dependencies:
+ whatwg-encoding "^2.0.0"
+
+html-tags@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.npmmirror.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce"
+ integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==
+
+http-proxy-agent@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
+ integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
+ dependencies:
+ "@tootallnate/once" "2"
+ agent-base "6"
+ debug "4"
+
+https-proxy-agent@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+ integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+ dependencies:
+ agent-base "6"
+ debug "4"
+
+iconv-lite@0.6.3, iconv-lite@^0.6.3:
+ version "0.6.3"
+ resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+ integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
+ignore@^5.2.0:
+ version "5.3.1"
+ resolved "https://registry.npmmirror.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
+ integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
+
+image-size@~0.5.0:
+ version "0.5.5"
+ resolved "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
+ integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==
+
+import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2:
+ version "2.0.4"
+ resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+ini@^1.3.4:
+ version "1.3.8"
+ resolved "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+ integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-core-module@^2.13.0:
+ version "2.13.1"
+ resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
+ integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
+ dependencies:
+ hasown "^2.0.0"
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
+ version "4.0.3"
+ resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-path-inside@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
+is-plain-object@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b"
+ integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==
+
+is-potential-custom-element-name@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
+ integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
+
+is-what@^3.14.1:
+ version "3.14.1"
+ resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1"
+ integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+jackspeak@^2.3.5:
+ version "2.3.6"
+ resolved "https://registry.npmmirror.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
+ integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==
+ dependencies:
+ "@isaacs/cliui" "^8.0.2"
+ optionalDependencies:
+ "@pkgjs/parseargs" "^0.11.0"
+
+js-beautify@^1.14.9:
+ version "1.15.1"
+ resolved "https://registry.npmmirror.com/js-beautify/-/js-beautify-1.15.1.tgz#4695afb508c324e1084ee0b952a102023fc65b64"
+ integrity sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==
+ dependencies:
+ config-chain "^1.1.13"
+ editorconfig "^1.0.4"
+ glob "^10.3.3"
+ js-cookie "^3.0.5"
+ nopt "^7.2.0"
+
+js-cookie@^3.0.5:
+ version "3.0.5"
+ resolved "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc"
+ integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
+jsdom@^22.1.0:
+ version "22.1.0"
+ resolved "https://registry.npmmirror.com/jsdom/-/jsdom-22.1.0.tgz#0fca6d1a37fbeb7f4aac93d1090d782c56b611c8"
+ integrity sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==
+ dependencies:
+ abab "^2.0.6"
+ cssstyle "^3.0.0"
+ data-urls "^4.0.0"
+ decimal.js "^10.4.3"
+ domexception "^4.0.0"
+ form-data "^4.0.0"
+ html-encoding-sniffer "^3.0.0"
+ http-proxy-agent "^5.0.0"
+ https-proxy-agent "^5.0.1"
+ is-potential-custom-element-name "^1.0.1"
+ nwsapi "^2.2.4"
+ parse5 "^7.1.2"
+ rrweb-cssom "^0.6.0"
+ saxes "^6.0.0"
+ symbol-tree "^3.2.4"
+ tough-cookie "^4.1.2"
+ w3c-xmlserializer "^4.0.0"
+ webidl-conversions "^7.0.0"
+ whatwg-encoding "^2.0.0"
+ whatwg-mimetype "^3.0.0"
+ whatwg-url "^12.0.1"
+ ws "^8.13.0"
+ xml-name-validator "^4.0.0"
+
+jsencrypt@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.npmmirror.com/jsencrypt/-/jsencrypt-3.3.2.tgz#b0f1a2278810c7ba1cb8957af11195354622df7c"
+ integrity sha512-arQR1R1ESGdAxY7ZheWr12wCaF2yF47v5qpB76TtV64H1pyGudk9Hvw8Y9tb/FiTIaaTRUyaSnm5T/Y53Ghm/A==
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==
+
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+
+json5@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
+ integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+jsonc-parser@^3.2.0:
+ version "3.2.1"
+ resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a"
+ integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==
+
+jsonfile@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+ integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ dependencies:
+ universalify "^2.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+keyv@^4.5.3:
+ version "4.5.4"
+ resolved "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
+less@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.npmmirror.com/less/-/less-4.2.0.tgz#cbefbfaa14a4cd388e2099b2b51f956e1465c450"
+ integrity sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==
+ dependencies:
+ copy-anything "^2.0.1"
+ parse-node-version "^1.0.1"
+ tslib "^2.3.0"
+ optionalDependencies:
+ errno "^0.1.1"
+ graceful-fs "^4.1.2"
+ image-size "~0.5.0"
+ make-dir "^2.1.0"
+ mime "^1.4.1"
+ needle "^3.1.0"
+ source-map "~0.6.0"
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+local-pkg@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963"
+ integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash-es@^4.17.15, lodash-es@^4.17.21:
+ version "4.17.21"
+ resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
+ integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+
+lodash.debounce@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+ integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
+
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+lodash@^4.17.21:
+ version "4.17.21"
+ resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+loose-envify@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+loupe@^2.3.6:
+ version "2.3.7"
+ resolved "https://registry.npmmirror.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697"
+ integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==
+ dependencies:
+ get-func-name "^2.0.1"
+
+lower-case@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
+ integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
+ dependencies:
+ tslib "^2.0.3"
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+"lru-cache@^9.1.1 || ^10.0.0":
+ version "10.2.0"
+ resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3"
+ integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==
+
+magic-string@^0.25.7:
+ version "0.25.9"
+ resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
+ integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
+ dependencies:
+ sourcemap-codec "^1.4.8"
+
+magic-string@^0.30.0, magic-string@^0.30.1, magic-string@^0.30.5, magic-string@^0.30.7:
+ version "0.30.8"
+ resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613"
+ integrity sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==
+ dependencies:
+ "@jridgewell/sourcemap-codec" "^1.4.15"
+
+make-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
+merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^4.0.4:
+ version "4.0.5"
+ resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+ integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+ dependencies:
+ braces "^3.0.2"
+ picomatch "^2.3.1"
+
+mime-db@1.52.0:
+ version "1.52.0"
+ resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12:
+ version "2.1.35"
+ resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
+mime@^1.4.1:
+ version "1.6.0"
+ resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+minimatch@9.0.1:
+ version "9.0.1"
+ resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253"
+ integrity sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^7.4.2:
+ version "7.4.6"
+ resolved "https://registry.npmmirror.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb"
+ integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimatch@^9.0.1:
+ version "9.0.3"
+ resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
+ version "7.0.4"
+ resolved "https://registry.npmmirror.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
+ integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
+
+mlly@^1.2.0, mlly@^1.4.0:
+ version "1.6.1"
+ resolved "https://registry.npmmirror.com/mlly/-/mlly-1.6.1.tgz#0983067dc3366d6314fc5e12712884e6978d028f"
+ integrity sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==
+ dependencies:
+ acorn "^8.11.3"
+ pathe "^1.1.2"
+ pkg-types "^1.0.3"
+ ufo "^1.3.2"
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+nanoid@^3.3.7:
+ version "3.3.7"
+ resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
+ integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
+
+nanopop@^2.1.0:
+ version "2.4.2"
+ resolved "https://registry.npmmirror.com/nanopop/-/nanopop-2.4.2.tgz#b55482135be7e64f2d0f5aa8ef51a58104ac7b13"
+ integrity sha512-NzOgmMQ+elxxHeIha+OG/Pv3Oc3p4RU2aBhwWwAqDpXrdTbtRylbRLQztLy8dMMwfl6pclznBdfUhccEn9ZIzw==
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+
+needle@^3.1.0:
+ version "3.3.1"
+ resolved "https://registry.npmmirror.com/needle/-/needle-3.3.1.tgz#63f75aec580c2e77e209f3f324e2cdf3d29bd049"
+ integrity sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==
+ dependencies:
+ iconv-lite "^0.6.3"
+ sax "^1.2.4"
+
+no-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
+ integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
+ dependencies:
+ lower-case "^2.0.2"
+ tslib "^2.0.3"
+
+node-releases@^2.0.14:
+ version "2.0.14"
+ resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
+ integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
+
+nopt@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.npmmirror.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7"
+ integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==
+ dependencies:
+ abbrev "^2.0.0"
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+nprogress@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1"
+ integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==
+
+nth-check@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
+ integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
+ dependencies:
+ boolbase "^1.0.0"
+
+nwsapi@^2.2.4:
+ version "2.2.7"
+ resolved "https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30"
+ integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==
+
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
+optionator@^0.9.3:
+ version "0.9.3"
+ resolved "https://registry.npmmirror.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
+ integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
+ dependencies:
+ "@aashutoshrathi/word-wrap" "^1.2.3"
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-limit@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644"
+ integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==
+ dependencies:
+ yocto-queue "^1.0.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
+param-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
+ integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
+ dependencies:
+ dot-case "^3.0.4"
+ tslib "^2.0.3"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-node-version@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
+ integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
+
+parse5@^7.1.2:
+ version "7.1.2"
+ resolved "https://registry.npmmirror.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32"
+ integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
+ dependencies:
+ entities "^4.4.0"
+
+pascal-case@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb"
+ integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+
+path-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.npmmirror.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f"
+ integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==
+ dependencies:
+ dot-case "^3.0.4"
+ tslib "^2.0.3"
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-scurry@^1.10.1:
+ version "1.10.1"
+ resolved "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698"
+ integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
+ dependencies:
+ lru-cache "^9.1.1 || ^10.0.0"
+ minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
+pathe@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmmirror.com/pathe/-/pathe-0.2.0.tgz#30fd7bbe0a0d91f0e60bae621f5d19e9e225c339"
+ integrity sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==
+
+pathe@^1.1.0, pathe@^1.1.1, pathe@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec"
+ integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==
+
+pathval@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmmirror.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d"
+ integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==
+
+picocolors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+ integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pinia@^2.1.7:
+ version "2.1.7"
+ resolved "https://registry.npmmirror.com/pinia/-/pinia-2.1.7.tgz#4cf5420d9324ca00b7b4984d3fbf693222115bbc"
+ integrity sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==
+ dependencies:
+ "@vue/devtools-api" "^6.5.0"
+ vue-demi ">=0.14.5"
+
+pkg-types@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868"
+ integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==
+ dependencies:
+ jsonc-parser "^3.2.0"
+ mlly "^1.2.0"
+ pathe "^1.1.0"
+
+postcss-selector-parser@^6.0.15:
+ version "6.0.15"
+ resolved "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535"
+ integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==
+ dependencies:
+ cssesc "^3.0.0"
+ util-deprecate "^1.0.2"
+
+postcss@^8.4.27, postcss@^8.4.31, postcss@^8.4.35:
+ version "8.4.35"
+ resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7"
+ integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==
+ dependencies:
+ nanoid "^3.3.7"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+prettier-linter-helpers@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
+ integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
+ dependencies:
+ fast-diff "^1.1.2"
+
+prettier@^3.0.3:
+ version "3.2.5"
+ resolved "https://registry.npmmirror.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368"
+ integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==
+
+pretty-format@^29.5.0:
+ version "29.7.0"
+ resolved "https://registry.npmmirror.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812"
+ integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==
+ dependencies:
+ "@jest/schemas" "^29.6.3"
+ ansi-styles "^5.0.0"
+ react-is "^18.0.0"
+
+proto-list@~1.2.1:
+ version "1.2.4"
+ resolved "https://registry.npmmirror.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
+ integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==
+
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==
+
+psl@^1.1.33:
+ version "1.9.0"
+ resolved "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
+ integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
+
+punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+querystringify@^2.1.1:
+ version "2.2.0"
+ resolved "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
+ integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+react-is@^18.0.0:
+ version "18.2.0"
+ resolved "https://registry.npmmirror.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
+ integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+regenerate-unicode-properties@^10.1.0:
+ version "10.1.1"
+ resolved "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480"
+ integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==
+ dependencies:
+ regenerate "^1.4.2"
+
+regenerate@^1.4.2:
+ version "1.4.2"
+ resolved "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
+ integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
+
+regenerator-runtime@^0.13.11:
+ version "0.13.11"
+ resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
+ integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
+
+regenerator-runtime@^0.14.0:
+ version "0.14.1"
+ resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
+ integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
+
+regenerator-transform@^0.15.2:
+ version "0.15.2"
+ resolved "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4"
+ integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==
+ dependencies:
+ "@babel/runtime" "^7.8.4"
+
+regexpu-core@^5.3.1:
+ version "5.3.2"
+ resolved "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b"
+ integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==
+ dependencies:
+ "@babel/regjsgen" "^0.8.0"
+ regenerate "^1.4.2"
+ regenerate-unicode-properties "^10.1.0"
+ regjsparser "^0.9.1"
+ unicode-match-property-ecmascript "^2.0.0"
+ unicode-match-property-value-ecmascript "^2.1.0"
+
+regjsparser@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709"
+ integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==
+ dependencies:
+ jsesc "~0.5.0"
+
+requires-port@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+
+resize-detector@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.npmmirror.com/resize-detector/-/resize-detector-0.3.0.tgz#fe495112e184695500a8f51e0389f15774cb1cfc"
+ integrity sha512-R/tCuvuOHQ8o2boRP6vgx8hXCCy87H1eY9V5imBYeVNyNVpuL9ciReSccLj2gDcax9+2weXy3bc8Vv+NRXeEvQ==
+
+resize-observer-polyfill@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
+ integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve@^1.14.2, resolve@^1.22.1:
+ version "1.22.8"
+ resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
+ integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
+ dependencies:
+ is-core-module "^2.13.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+rollup@^3.27.1:
+ version "3.29.4"
+ resolved "https://registry.npmmirror.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981"
+ integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+rollup@^4.2.0:
+ version "4.12.1"
+ resolved "https://registry.npmmirror.com/rollup/-/rollup-4.12.1.tgz#0659cb02551cde4c5b210e9bd3af050b5b5b415d"
+ integrity sha512-ggqQKvx/PsB0FaWXhIvVkSWh7a/PCLQAsMjBc+nA2M8Rv2/HG0X6zvixAB7KyZBRtifBUhy5k8voQX/mRnABPg==
+ dependencies:
+ "@types/estree" "1.0.5"
+ optionalDependencies:
+ "@rollup/rollup-android-arm-eabi" "4.12.1"
+ "@rollup/rollup-android-arm64" "4.12.1"
+ "@rollup/rollup-darwin-arm64" "4.12.1"
+ "@rollup/rollup-darwin-x64" "4.12.1"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.12.1"
+ "@rollup/rollup-linux-arm64-gnu" "4.12.1"
+ "@rollup/rollup-linux-arm64-musl" "4.12.1"
+ "@rollup/rollup-linux-riscv64-gnu" "4.12.1"
+ "@rollup/rollup-linux-x64-gnu" "4.12.1"
+ "@rollup/rollup-linux-x64-musl" "4.12.1"
+ "@rollup/rollup-win32-arm64-msvc" "4.12.1"
+ "@rollup/rollup-win32-ia32-msvc" "4.12.1"
+ "@rollup/rollup-win32-x64-msvc" "4.12.1"
+ fsevents "~2.3.2"
+
+rrweb-cssom@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.npmmirror.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1"
+ integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+"safer-buffer@>= 2.1.2 < 3.0.0":
+ version "2.1.2"
+ resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sax@^1.2.4:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0"
+ integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==
+
+saxes@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmmirror.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5"
+ integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==
+ dependencies:
+ xmlchars "^2.2.0"
+
+scroll-into-view-if-needed@^2.2.25:
+ version "2.2.31"
+ resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz#d3c482959dc483e37962d1521254e3295d0d1587"
+ integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==
+ dependencies:
+ compute-scroll-into-view "^1.0.20"
+
+select@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.npmmirror.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
+ integrity sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==
+
+semver@^5.6.0:
+ version "5.7.2"
+ resolved "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
+ integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
+
+semver@^6.3.1:
+ version "6.3.1"
+ resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^7.3.6, semver@^7.5.3, semver@^7.6.0:
+ version "7.6.0"
+ resolved "https://registry.npmmirror.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
+ integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
+ dependencies:
+ lru-cache "^6.0.0"
+
+sentence-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.npmmirror.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f"
+ integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+ upper-case-first "^2.0.2"
+
+shallow-equal@^1.0.0:
+ version "1.2.1"
+ resolved "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da"
+ integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+siginfo@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30"
+ integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==
+
+signal-exit@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
+ integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
+snake-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.npmmirror.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c"
+ integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==
+ dependencies:
+ dot-case "^3.0.4"
+ tslib "^2.0.3"
+
+sortablejs@1.14.0:
+ version "1.14.0"
+ resolved "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.14.0.tgz#6d2e17ccbdb25f464734df621d4f35d4ab35b3d8"
+ integrity sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==
+
+source-map-js@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+ integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
+source-map-support@~0.5.20:
+ version "0.5.21"
+ resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+ integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map@^0.6.0, source-map@~0.6.0:
+ version "0.6.1"
+ resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+sourcemap-codec@^1.4.8:
+ version "1.4.8"
+ resolved "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
+ integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
+
+ssf@~0.11.2:
+ version "0.11.2"
+ resolved "https://registry.npmmirror.com/ssf/-/ssf-0.11.2.tgz#0b99698b237548d088fc43cdf2b70c1a7512c06c"
+ integrity sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==
+ dependencies:
+ frac "~1.1.2"
+
+stackback@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.npmmirror.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b"
+ integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==
+
+std-env@^3.3.3:
+ version "3.7.0"
+ resolved "https://registry.npmmirror.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2"
+ integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==
+
+"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0:
+ name string-width-cjs
+ version "4.2.3"
+ resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^5.0.1, string-width@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
+ integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+ dependencies:
+ eastasianwidth "^0.2.0"
+ emoji-regex "^9.2.2"
+ strip-ansi "^7.0.1"
+
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ name strip-ansi-cjs
+ version "6.0.1"
+ resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^7.0.1:
+ version "7.1.0"
+ resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+ integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+ dependencies:
+ ansi-regex "^6.0.1"
+
+strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+strip-literal@^1.0.1:
+ version "1.3.0"
+ resolved "https://registry.npmmirror.com/strip-literal/-/strip-literal-1.3.0.tgz#db3942c2ec1699e6836ad230090b84bb458e3a07"
+ integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==
+ dependencies:
+ acorn "^8.10.0"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+svg-tags@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
+ integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==
+
+symbol-tree@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
+synckit@^0.8.6:
+ version "0.8.8"
+ resolved "https://registry.npmmirror.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7"
+ integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==
+ dependencies:
+ "@pkgr/core" "^0.1.0"
+ tslib "^2.6.2"
+
+systemjs@^6.14.1:
+ version "6.14.3"
+ resolved "https://registry.npmmirror.com/systemjs/-/systemjs-6.14.3.tgz#c1d6e4ff5f9ff7106e5bb3d451360b1a066bde8a"
+ integrity sha512-hQv45irdhXudAOr8r6SVSpJSGtogdGZUbJBRKCE5nsIS7tsxxvnIHqT4IOPWj+P+HcSzeWzHlGCGpmhPDIKe+w==
+
+terser@^5.16.9:
+ version "5.29.1"
+ resolved "https://registry.npmmirror.com/terser/-/terser-5.29.1.tgz#44e58045b70c09792ba14bfb7b4e14ca8755b9fa"
+ integrity sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==
+ dependencies:
+ "@jridgewell/source-map" "^0.3.3"
+ acorn "^8.8.2"
+ commander "^2.20.0"
+ source-map-support "~0.5.20"
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+
+tiny-emitter@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
+ integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
+
+tinybench@^2.5.0:
+ version "2.6.0"
+ resolved "https://registry.npmmirror.com/tinybench/-/tinybench-2.6.0.tgz#1423284ee22de07c91b3752c048d2764714b341b"
+ integrity sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==
+
+tinymce@^5.10.7:
+ version "5.10.9"
+ resolved "https://registry.npmmirror.com/tinymce/-/tinymce-5.10.9.tgz#1dfacb3231c71a688d90ff44a0b3f2e91b3b9edf"
+ integrity sha512-5bkrors87X9LhYX2xq8GgPHrIgJYHl87YNs+kBcjQ5I3CiUgzo/vFcGvT3MZQ9QHsEeYMhYO6a5CLGGffR8hMg==
+
+tinypool@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.npmmirror.com/tinypool/-/tinypool-0.7.0.tgz#88053cc99b4a594382af23190c609d93fddf8021"
+ integrity sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==
+
+tinyspy@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.npmmirror.com/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1"
+ integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+tough-cookie@^4.1.2:
+ version "4.1.3"
+ resolved "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf"
+ integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==
+ dependencies:
+ psl "^1.1.33"
+ punycode "^2.1.1"
+ universalify "^0.2.0"
+ url-parse "^1.5.3"
+
+tr46@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.npmmirror.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469"
+ integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==
+ dependencies:
+ punycode "^2.3.0"
+
+tslib@2.3.0:
+ version "2.3.0"
+ resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e"
+ integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
+
+tslib@^2.0.3, tslib@^2.3.0, tslib@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
+ integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+type-detect@^4.0.0, type-detect@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
+ integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.npmmirror.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
+ufo@^1.3.2:
+ version "1.4.0"
+ resolved "https://registry.npmmirror.com/ufo/-/ufo-1.4.0.tgz#39845b31be81b4f319ab1d99fd20c56cac528d32"
+ integrity sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==
+
+undici-types@~5.26.4:
+ version "5.26.5"
+ resolved "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+ integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
+unicode-canonical-property-names-ecmascript@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
+ integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==
+
+unicode-match-property-ecmascript@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3"
+ integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==
+ dependencies:
+ unicode-canonical-property-names-ecmascript "^2.0.0"
+ unicode-property-aliases-ecmascript "^2.0.0"
+
+unicode-match-property-value-ecmascript@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0"
+ integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==
+
+unicode-property-aliases-ecmascript@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd"
+ integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==
+
+universalify@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmmirror.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0"
+ integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==
+
+universalify@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
+ integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
+
+unplugin-vue-components@^0.24.1:
+ version "0.24.1"
+ resolved "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.24.1.tgz#b5c3419c30a603dd795e3a0d63c4c12f4a5d8274"
+ integrity sha512-T3A8HkZoIE1Cja95xNqolwza0yD5IVlgZZ1PVAGvVCx8xthmjsv38xWRCtHtwl+rvZyL9uif42SRkDGw9aCfMA==
+ dependencies:
+ "@antfu/utils" "^0.7.2"
+ "@rollup/pluginutils" "^5.0.2"
+ chokidar "^3.5.3"
+ debug "^4.3.4"
+ fast-glob "^3.2.12"
+ local-pkg "^0.4.3"
+ magic-string "^0.30.0"
+ minimatch "^7.4.2"
+ resolve "^1.22.1"
+ unplugin "^1.1.0"
+
+unplugin@^1.1.0:
+ version "1.8.3"
+ resolved "https://registry.npmmirror.com/unplugin/-/unplugin-1.8.3.tgz#49788aea83c61fdea69aca9923b99a4b41927de3"
+ integrity sha512-ZlLteXGDcyJgsbN2g4sZ3Dw6fpX1O5rjgeaA5MmQhhA2YxnTxsh43f8nDQgFOzcir0iv8GYMjtCV8MtyNnrhEg==
+ dependencies:
+ acorn "^8.11.3"
+ chokidar "^3.6.0"
+ webpack-sources "^3.2.3"
+ webpack-virtual-modules "^0.6.1"
+
+update-browserslist-db@^1.0.13:
+ version "1.0.13"
+ resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
+ integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==
+ dependencies:
+ escalade "^3.1.1"
+ picocolors "^1.0.0"
+
+upper-case-first@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324"
+ integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==
+ dependencies:
+ tslib "^2.0.3"
+
+upper-case@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a"
+ integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==
+ dependencies:
+ tslib "^2.0.3"
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+url-parse@^1.5.3:
+ version "1.5.10"
+ resolved "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
+ integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
+ dependencies:
+ querystringify "^2.1.1"
+ requires-port "^1.0.0"
+
+util-deprecate@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+vite-node@0.34.6:
+ version "0.34.6"
+ resolved "https://registry.npmmirror.com/vite-node/-/vite-node-0.34.6.tgz#34d19795de1498562bf21541a58edcd106328a17"
+ integrity sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==
+ dependencies:
+ cac "^6.7.14"
+ debug "^4.3.4"
+ mlly "^1.4.0"
+ pathe "^1.1.1"
+ picocolors "^1.0.0"
+ vite "^3.0.0 || ^4.0.0 || ^5.0.0-0"
+
+vite-plugin-compression@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.npmmirror.com/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz#a75b0d8f48357ebb377b65016da9f20885ef39b6"
+ integrity sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==
+ dependencies:
+ chalk "^4.1.2"
+ debug "^4.3.3"
+ fs-extra "^10.0.0"
+
+vite-plugin-style-import@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/vite-plugin-style-import/-/vite-plugin-style-import-2.0.0.tgz#edafd9fbb09e8bb5ae67dee8f601afbe386a9969"
+ integrity sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==
+ dependencies:
+ "@rollup/pluginutils" "^4.1.2"
+ change-case "^4.1.2"
+ console "^0.7.2"
+ es-module-lexer "^0.9.3"
+ fs-extra "^10.0.0"
+ magic-string "^0.25.7"
+ pathe "^0.2.0"
+
+"vite@^3.0.0 || ^4.0.0 || ^5.0.0-0", "vite@^3.1.0 || ^4.0.0 || ^5.0.0-0":
+ version "5.1.5"
+ resolved "https://registry.npmmirror.com/vite/-/vite-5.1.5.tgz#bdbc2b15e8000d9cc5172f059201178f9c9de5fb"
+ integrity sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==
+ dependencies:
+ esbuild "^0.19.3"
+ postcss "^8.4.35"
+ rollup "^4.2.0"
+ optionalDependencies:
+ fsevents "~2.3.3"
+
+vite@^4.4.11:
+ version "4.5.2"
+ resolved "https://registry.npmmirror.com/vite/-/vite-4.5.2.tgz#d6ea8610e099851dad8c7371599969e0f8b97e82"
+ integrity sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==
+ dependencies:
+ esbuild "^0.18.10"
+ postcss "^8.4.27"
+ rollup "^3.27.1"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+vitest@^0.34.6:
+ version "0.34.6"
+ resolved "https://registry.npmmirror.com/vitest/-/vitest-0.34.6.tgz#44880feeeef493c04b7f795ed268f24a543250d7"
+ integrity sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==
+ dependencies:
+ "@types/chai" "^4.3.5"
+ "@types/chai-subset" "^1.3.3"
+ "@types/node" "*"
+ "@vitest/expect" "0.34.6"
+ "@vitest/runner" "0.34.6"
+ "@vitest/snapshot" "0.34.6"
+ "@vitest/spy" "0.34.6"
+ "@vitest/utils" "0.34.6"
+ acorn "^8.9.0"
+ acorn-walk "^8.2.0"
+ cac "^6.7.14"
+ chai "^4.3.10"
+ debug "^4.3.4"
+ local-pkg "^0.4.3"
+ magic-string "^0.30.1"
+ pathe "^1.1.1"
+ picocolors "^1.0.0"
+ std-env "^3.3.3"
+ strip-literal "^1.0.1"
+ tinybench "^2.5.0"
+ tinypool "^0.7.0"
+ vite "^3.1.0 || ^4.0.0 || ^5.0.0-0"
+ vite-node "0.34.6"
+ why-is-node-running "^2.2.2"
+
+vue-clipboard3@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/vue-clipboard3/-/vue-clipboard3-2.0.0.tgz#79b026c765c0f6a5cde18a477c2dbfc7d3b9f178"
+ integrity sha512-Q9S7dzWGax7LN5iiSPcu/K1GGm2gcBBlYwmMsUc5/16N6w90cbKow3FnPmPs95sungns4yvd9/+JhbAznECS2A==
+ dependencies:
+ clipboard "^2.0.6"
+
+vue-component-type-helpers@^1.8.21:
+ version "1.8.27"
+ resolved "https://registry.npmmirror.com/vue-component-type-helpers/-/vue-component-type-helpers-1.8.27.tgz#e816c82dcffac8bca58833c120ba395c325dfa68"
+ integrity sha512-0vOfAtI67UjeO1G6UiX5Kd76CqaQ67wrRZiOe7UAb9Jm6GzlUr/fC7CV90XfwapJRjpCMaZFhv1V0ajWRmE9Dg==
+
+vue-demi@>=0.14.5:
+ version "0.14.7"
+ resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.7.tgz#8317536b3ef74c5b09f268f7782e70194567d8f2"
+ integrity sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==
+
+vue-demi@^0.13.11:
+ version "0.13.11"
+ resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz#7d90369bdae8974d87b1973564ad390182410d99"
+ integrity sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==
+
+vue-echarts@^6.5.4:
+ version "6.6.9"
+ resolved "https://registry.npmmirror.com/vue-echarts/-/vue-echarts-6.6.9.tgz#151372ecd086db985dafeeebd3ea83c8d4d2846b"
+ integrity sha512-mojIq3ZvsjabeVmDthhAUDV8Kgf2Rr/X4lV4da7gEFd1fP05gcSJ0j7wa7HQkW5LlFmF2gdCJ8p4Chas6NNIQQ==
+ dependencies:
+ resize-detector "^0.3.0"
+ vue-demi "^0.13.11"
+
+vue-eslint-parser@^9.1.1, vue-eslint-parser@^9.4.2:
+ version "9.4.2"
+ resolved "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz#02ffcce82042b082292f2d1672514615f0d95b6d"
+ integrity sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==
+ dependencies:
+ debug "^4.3.4"
+ eslint-scope "^7.1.1"
+ eslint-visitor-keys "^3.3.0"
+ espree "^9.3.1"
+ esquery "^1.4.0"
+ lodash "^4.17.21"
+ semver "^7.3.6"
+
+vue-i18n@^9.1.9:
+ version "9.10.1"
+ resolved "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.10.1.tgz#b3244233da31a55a07a2ae72cdddab7296bca814"
+ integrity sha512-37HVJQZ/pZaRXGzFmmMomM1u1k7kndv3xCBPYHKEVfv5W3UVK67U/TpBug71ILYLNmjHLHdvTUPRF81pFT5fFg==
+ dependencies:
+ "@intlify/core-base" "9.10.1"
+ "@intlify/shared" "9.10.1"
+ "@vue/devtools-api" "^6.5.0"
+
+vue-router@^4.2.5:
+ version "4.3.0"
+ resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.3.0.tgz#d5913f27bf68a0a178ee798c3c88be471811a235"
+ integrity sha512-dqUcs8tUeG+ssgWhcPbjHvazML16Oga5w34uCUmsk7i0BcnskoLGwjpa15fqMr2Fa5JgVBrdL2MEgqz6XZ/6IQ==
+ dependencies:
+ "@vue/devtools-api" "^6.5.1"
+
+vue-types@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.npmmirror.com/vue-types/-/vue-types-3.0.2.tgz#ec16e05d412c038262fc1efa4ceb9647e7fb601d"
+ integrity sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==
+ dependencies:
+ is-plain-object "3.0.1"
+
+vue@^3.3.4:
+ version "3.3.8"
+ resolved "https://registry.npmmirror.com/vue/-/vue-3.3.8.tgz#532ff071af24f6a69e5ecc53a66858a9ee874ffc"
+ integrity sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==
+ dependencies:
+ "@vue/compiler-dom" "3.3.8"
+ "@vue/compiler-sfc" "3.3.8"
+ "@vue/runtime-dom" "3.3.8"
+ "@vue/server-renderer" "3.3.8"
+ "@vue/shared" "3.3.8"
+
+vuedraggable@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmmirror.com/vuedraggable/-/vuedraggable-4.1.0.tgz#edece68adb8a4d9e06accff9dfc9040e66852270"
+ integrity sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==
+ dependencies:
+ sortablejs "1.14.0"
+
+vxe-table@^4.4.2:
+ version "4.5.20"
+ resolved "https://registry.npmmirror.com/vxe-table/-/vxe-table-4.5.20.tgz#9e6299a8e905954c7edeb4052feb6c590ddaccec"
+ integrity sha512-UC+z1ED3QE6Be/UN0390hSXMAseXg+com3fkX9q3tjfsCGFx7CjN9tLstuNtecn+ElkPGHqzRGtA3N5FTSv5Vw==
+ dependencies:
+ dom-zindex "^1.0.1"
+ xe-utils "^3.5.20"
+
+w3c-xmlserializer@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073"
+ integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==
+ dependencies:
+ xml-name-validator "^4.0.0"
+
+warning@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
+ integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
+ dependencies:
+ loose-envify "^1.0.0"
+
+webidl-conversions@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
+ integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
+
+webpack-sources@^3.2.3:
+ version "3.2.3"
+ resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
+ integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
+
+webpack-virtual-modules@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz#ac6fdb9c5adb8caecd82ec241c9631b7a3681b6f"
+ integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==
+
+whatwg-encoding@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53"
+ integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==
+ dependencies:
+ iconv-lite "0.6.3"
+
+whatwg-mimetype@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7"
+ integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==
+
+whatwg-url@^12.0.0, whatwg-url@^12.0.1:
+ version "12.0.1"
+ resolved "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-12.0.1.tgz#fd7bcc71192e7c3a2a97b9a8d6b094853ed8773c"
+ integrity sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==
+ dependencies:
+ tr46 "^4.1.1"
+ webidl-conversions "^7.0.0"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+why-is-node-running@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.npmmirror.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e"
+ integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==
+ dependencies:
+ siginfo "^2.0.0"
+ stackback "0.0.2"
+
+wmf@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz#7d19d621071a08c2bdc6b7e688a9c435298cc2da"
+ integrity sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==
+
+word@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.npmmirror.com/word/-/word-0.3.0.tgz#8542157e4f8e849f4a363a288992d47612db9961"
+ integrity sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==
+
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrap-ansi@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
+ integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+ dependencies:
+ ansi-styles "^6.1.0"
+ string-width "^5.0.1"
+ strip-ansi "^7.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+ws@^8.13.0:
+ version "8.16.0"
+ resolved "https://registry.npmmirror.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4"
+ integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==
+
+xe-utils@^3.5.14, xe-utils@^3.5.20:
+ version "3.5.22"
+ resolved "https://registry.npmmirror.com/xe-utils/-/xe-utils-3.5.22.tgz#b153881aeaaa07248f81511ab9e06b1e78b44fa6"
+ integrity sha512-rhWuM2fVXsdrqUtyjRAsYTDLvVzYSSZqg/uCRyDqcw96AweB1AWsnTJZyl9g68ejnP0xhxfSoNBSrIcOeX1yxA==
+
+xlsx@^0.18.5:
+ version "0.18.5"
+ resolved "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz#16711b9113c848076b8a177022799ad356eba7d0"
+ integrity sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==
+ dependencies:
+ adler-32 "~1.3.0"
+ cfb "~1.2.1"
+ codepage "~1.15.0"
+ crc-32 "~1.2.1"
+ ssf "~0.11.2"
+ wmf "~1.0.1"
+ word "~0.3.0"
+
+xml-name-validator@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835"
+ integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==
+
+xmlchars@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
+ integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
+
+yocto-queue@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251"
+ integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==
+
+zrender@5.5.0:
+ version "5.5.0"
+ resolved "https://registry.npmmirror.com/zrender/-/zrender-5.5.0.tgz#54d0d6c4eda81a96d9f60a9cd74dc48ea026bc1e"
+ integrity sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==
+ dependencies:
+ tslib "2.3.0"