Compare commits

...

84 Commits

Author SHA1 Message Date
xuyuxiang
673b39802e 【更新】3.5.2版本发布 2025-09-26 15:06:37 +08:00
xuyuxiang
e40f180f37 【更新】优化两个页面并同步到master 2025-09-25 21:26:53 +08:00
俞宝山
4223210823 【更新】追加数据建模配置属性 2025-09-25 13:26:08 +08:00
俞宝山
bb18a12449 【更新】开源版前端界面调整 2025-09-25 13:25:20 +08:00
俞宝山
ed12a4b945 【更新】注册smsDao,避免sms4j报错,感谢 @刘客青 提交的pr 2025-09-25 13:22:46 +08:00
xuyuxiang
0f4dcafb30 【更新】更新版本文字 2025-09-23 21:50:55 +08:00
xuyuxiang
38c43c05f7 【更新】优化代码 2025-09-23 20:35:26 +08:00
这么难演
88fcd4ee84 【更新】增加数据集插件放行路径 2025-09-22 23:43:23 +08:00
这么难演
b378cfa914 【更新】① 权限资源调整为缓存方式;② 环境监测器,用于后续区分单体与Cloud 2025-09-22 23:35:18 +08:00
xuyuxiang
baa900f408 【更新】优化B、C端登录界面,登录框垂直居中,确保在大小屏幕小都有不错的展示效果 2025-09-22 23:10:57 +08:00
xuyuxiang
72437608e7 【更新】完善三方应用 2025-09-22 22:35:25 +08:00
xuyuxiang
f470684719 【更新】SysRelationApi增加一个接口 2025-09-22 20:55:50 +08:00
xuyuxiang
6735460216 【更新】代码规范优化 2025-09-21 14:53:35 +08:00
xuyuxiang
4c6711acea 【更新】biz机构列表选择器修复 2025-09-21 14:29:41 +08:00
xuyuxiang
6a61cd33d0 【更新】优化biz模块导包 2025-09-21 14:06:04 +08:00
xuyuxiang
c4df65f41a 【更新】BIZ模块增加用户组选择器功能,sys组织选择器优化 2025-09-21 14:03:00 +08:00
xuyuxiang
8d680f1f27 【更新】BIZ模块增加用户组选择器功能,与sys保持一致 2025-09-21 13:50:38 +08:00
xuyuxiang
862142a668 【更新】优化列表 2025-09-20 15:46:19 +08:00
xuyuxiang
8243f015be 【更新】优化表格列的宽度改为自适应 2025-09-19 22:23:48 +08:00
xuyuxiang
42663fd094 【更新】优化row的gutter 2025-09-19 22:00:37 +08:00
xuyuxiang
d765722ce7 【更新】优化一个按钮文字 2025-09-19 21:53:56 +08:00
xuyuxiang
87cfd5b6bd 【更新】bizIndex控制器新增获取通知公告分页接口 2025-09-19 00:23:37 +08:00
xuyuxiang
890456efa3 【更新】底座增加山信通登录支持 2025-09-18 22:15:10 +08:00
xuyuxiang
96e496009c 【优化】优化登录页面以及账户绑定等页面在小屏幕下的展示效果 2025-09-18 00:28:52 +08:00
xuyuxiang
3744162982 【优化】优化操作栏目取消固定宽度,自适应,优化其他一些问题 2025-09-18 00:08:09 +08:00
xuyuxiang
f8df4d7e8f 【优化】优化剩余页面在小屏幕下的展示效果 2025-09-17 23:22:57 +08:00
xuyuxiang
a47d5379bc 【优化】继续优化其他页面在小屏幕下的表现(待完善表单部分) 2025-09-17 17:03:05 +08:00
xuyuxiang
870117f946 【优化】优化系统配置页面在小屏幕下的表现 2025-09-17 15:35:36 +08:00
xuyuxiang
9ca83ba733 【优化】继续优化其他页面在小屏幕下的表现 2025-09-17 11:58:55 +08:00
xuyuxiang
677d994ec5 【优化】优化前端组件中,组织、用户、职位、角色、用户组等五个选择器在小屏幕下的表现 2025-09-16 22:12:31 +08:00
xuyuxiang
92748d1737 【优化】优化前端业务模块下组织、用户、职位、用户组四个页面在小屏幕下的表现 2025-09-16 21:24:54 +08:00
xuyuxiang
deec47da72 【优化】优化前端业务模块下组织、用户、职位、用户组四个页面在小屏幕下的表现 2025-09-16 20:36:58 +08:00
xuyuxiang
f22390ab55 【优化】优化抽屉模式下,抽屉的宽度在小屏幕下展示为100%,其他情况下为传入的原始宽度 2025-09-16 00:50:28 +08:00
xuyuxiang
9b733d6746 【优化】优化前端系统模块下组织、用户、职位、用户组四个页面在小屏幕下的表现 2025-09-16 00:33:50 +08:00
xuyuxiang
b0b2d67fce 【更新】头像剪裁组件增加默认剪裁宽度和高度属性 2025-09-14 21:29:41 +08:00
xuyuxiang
f4d875ae3c 【更新】底座增加动态口令登录,完善单点登录客户端用于未来无缝接入统一认证平台,优化诸多代码,更新sql 2025-09-14 00:20:56 +08:00
longbin
8111719330 【新增】xn-upload组件新增禁用状态,支持外层组件设置禁用状态 2025-09-12 17:52:14 +08:00
xuyuxiang
76ec2a7c79 【修复】修复多个根节点组织机构情况下tree接口排序不一致的问题 2025-09-07 22:23:33 +08:00
俞宝山
64d121f702 【更新】底座加入插件支持项 2025-08-08 19:42:16 +08:00
这么难演
3685f6e328 【更新】可视化大屏、数据集 无登录路由配置 2025-08-07 21:44:34 +08:00
俞宝山
d4661600f1 【新增】文件接口新增插件所需 2025-08-06 02:30:14 +08:00
xuyuxiang
66db17b796 【更新】AuthApi优化一些接口 2025-08-02 23:15:27 +08:00
xuyuxiang
e19c7baded 【更新】AuthApi增加获取验证码开关接口方便其他模块调用 2025-08-02 23:09:14 +08:00
xuyuxiang
eda0205461 【更新】AuthApi增加校验验证码接口方便其他模块调用 2025-08-02 22:58:36 +08:00
xuyuxiang
ad80b8508c 【更新】AuthApi增加一些登录接口方便其他模块调用 2025-08-02 22:20:36 +08:00
xuyuxiang
f5278a8df8 【优化】优化 #ICLS9F index.vue.btl代码生成后查询栏展开后两行会挨一起的问题,感谢 youngbo 提出的建议 2025-07-30 20:30:24 +08:00
xuyuxiang
4c88225f35 【更新】优化判断注册的用户邮箱和手机号是否需要绑定的方法 2025-07-30 20:25:35 +08:00
xuyuxiang
c7fc575242 【更新】AuthApi新增两个接口用于其他模块调用B端和C端登录 2025-07-28 22:15:19 +08:00
俞宝山
953b12c83b 【补充】替换editor编辑器后漏改的内容补充 2025-07-28 12:03:39 +08:00
俞宝山
638436afbc 【更新】替换富文本编辑器、屏幕放大缩小警告修复 2025-07-28 00:58:19 +08:00
xuyuxiang
6684bedacf 【优化】优化通知公告前端命名规范问题 2025-07-25 22:50:20 +08:00
xuyuxiang
53807cb63f 【优化】优化用户组前端命名规范问题 2025-07-25 22:48:34 +08:00
俞宝山
715451de5d 【修复】修复开源版登录界面验证码设置开启后不显示问题 2025-07-22 22:37:32 +08:00
xuyuxiang
79233da6f2 【升级】 升级SaToken版本到1.44.0 2025-07-18 00:34:29 +08:00
俞宝山
6d78e12894 【更新】文件上传后不让其每次回到首页、C端界面鼠标瞄准后颜色变淡修复 2025-07-08 01:08:28 +08:00
xuyuxiang
280ff4dcfe 【修复】 修复 #ICILAV 验证码判断显示的问题 2025-07-07 22:56:57 +08:00
xuyuxiang
614eed74d2 【更新】放开client注册或登录时获取验证码等相关接口,优化参数判空提示语统一为参数名字 2025-07-03 23:27:06 +08:00
俞宝山
62b555efaa 【底座】授权权限扫描不到中文名称无法授权情况增强 2025-06-28 00:58:24 +08:00
xuyuxiang
e676057770 【修复】修复 #ICGT0C mysql脚本缺少引号,serviceImpl中存在重复方法 queryEntity的bug 2025-06-26 22:32:07 +08:00
俞宝山
1c5532a0fe 【更新】antdv自行修复的bug无需我们做补丁 2025-06-23 22:37:33 +08:00
xuyuxiang
c964ce0508 【更新】修复SysRelationApiProvider根据角色或组下查找不到人的bug 2025-06-18 16:06:05 +08:00
俞宝山
c844d8635f 【更新】升级v3.5.1版本-sql更新 2025-06-16 14:05:44 +08:00
俞宝山
3cc77afdb1 【更新】升级v3.5.1版本-sql更新 2025-06-16 13:39:13 +08:00
俞宝山
349423170b 【更新】升级v3.5.1版本 2025-06-16 00:36:22 +08:00
俞宝山
06008bf1d2 【更新】升级v3.5.1版本 2025-06-15 23:39:47 +08:00
xuyuxiang
b712f1c2c4 【更新】补充一个漏同步的类 2025-06-15 23:29:51 +08:00
xuyuxiang
b7f164082b 【更新】更新并升级v3.5.1版本 2025-06-15 23:22:02 +08:00
chinaraind
3a5ecac001 【更新】启动配置调整 2025-06-09 09:02:14 +08:00
dongxiayu
14a17ec977 【底座】启动配置增加应用名称,底座增加traceId机制; 2025-06-08 23:58:19 +08:00
dongxiayu
936ce722e8 【底座】启动配置增加应用名称,底座增加traceId机制; 2025-06-08 23:16:32 +08:00
bubu
a4d45fab44 【更新】使用router-link代替a标签跳转,支持hash和history路由模式 2025-05-27 03:33:17 +00:00
wangxu
b8f9513d9f Merge branch 'dev' of https://gitee.com/qian521/snowy into dev 2025-05-26 17:29:28 +08:00
wangxu
f40a5bffe6 AuthEmailFormatUtl重命名为AuthEmailFormatUtil 2025-05-26 17:28:38 +08:00
俞宝山
d7280733f3 【更新】产品readme更新 2025-05-22 13:35:41 +00:00
俞宝山
1e5cca0ea7 【更新】删除几个无用的文件 2025-05-22 13:35:41 +00:00
xuyuxiang
5b9915320a 【更新】修复sql中code重复问题 2025-05-22 13:35:41 +00:00
bubu
471a9adde4 【更新】Jackson配置类重命名 2025-05-22 13:35:41 +00:00
bubu
82b591cb79 【更新】配置数据库连接池心跳检测 2025-05-22 13:35:41 +00:00
bubu
2ccf80efbb 【更新】验证码校验逻辑 2025-05-22 13:35:41 +00:00
小诺
dc5d8a5747
!260 【更新】修复新增资源时code为空的问题
Merge pull request !260 from 小诺/dev
2025-05-15 18:29:47 +00:00
xuyuxiang
a29112f699 【更新】修复新增资源时code为空的问题 2025-05-15 18:24:13 +00:00
xuyuxiang
8cc151014d 【更新】修复新增资源时code为空的问题 2025-05-15 22:51:12 +08:00
xuyuxiang
36358d3c0c 【更新】修复若干问题 2025-05-15 22:25:47 +08:00
xuyuxiang
f79114167e 【企业版】修复若干问题 2025-05-15 22:24:06 +08:00
373 changed files with 14003 additions and 15756 deletions

View File

@ -16,6 +16,9 @@ Snowy谐音“小诺”恰应小诺团队名称意思为”下雪的、纯
<p align="center">
<p align="center">
<a href="https://gitcode.com/xiaonuobase/Snowy">
<img src="https://gitcode.com/xiaonuobase/Snowy/star/badge.svg" alt="bootstrap">
</a>
<a href="https://gitee.com/xiaonuobase/snowy">
<img src="https://gitee.com/xiaonuobase/snowy/badge/star.svg?theme=dark" alt="Gitee star">
</a>
@ -235,7 +238,9 @@ snowy
QQ技术群732230670已满、685395081
微信技术群因群达到200人以上需加微信拉群
微信技术群:
因群达到200人以上需加微信拉群禁止群内艾特群主及管理员私信提问技术问题无时间精力回答免开尊口请群内互动互助才是建群的意义否则我认为你没有加群的必要
<table>
<tr>

38
pom.xml
View File

@ -252,39 +252,67 @@
<version>0.16.4</version>
</dependency>
<!-- zxing -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.5.3</version>
</dependency>
<!-- bouncycastle -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version>
</dependency>
<!-- bouncycastle -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.70</version>
</dependency>
<!-- sa-token-core -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-core</artifactId>
<version>1.37.0</version>
<version>1.44.0</version>
</dependency>
<!-- sa-token -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot3-starter</artifactId>
<version>1.37.0</version>
<version>1.44.0</version>
</dependency>
<!-- sa-token 整合 redis 使用jackson序列化方式 -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-redis-jackson</artifactId>
<version>1.37.0</version>
<version>1.44.0</version>
</dependency>
<!-- Sa-Token插件权限缓存与业务缓存分离 -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-alone-redis</artifactId>
<version>1.37.0</version>
<version>1.44.0</version>
</dependency>
<!-- Sa-Token 插件整合SSO -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-sso</artifactId>
<version>1.37.0</version>
<version>1.44.0</version>
</dependency>
<!-- Sa-Token 插件:整合 Forest 请求工具 -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-forest</artifactId>
<version>1.44.0</version>
</dependency>
<!-- JustAuth 第三方登录 -->

View File

@ -24,12 +24,14 @@
"@chenfengyuan/vue-qrcode": "2.0.0",
"@highlightjs/vue-plugin": "2.1.0",
"@kangc/v-md-editor": "2.3.18",
"@tinymce/tinymce-vue": "5.1.1",
"@microsoft/fetch-event-source": "2.0.1",
"@wangeditor/editor": "5.1.23",
"@wangeditor/editor-for-vue": "5.1.12",
"@vue-office/docx": "1.6.2",
"@vue-office/excel": "1.7.11",
"@vue-office/pdf": "2.0.2",
"ant-design-vue": "4.2.6",
"axios": "1.7.7",
"codemirror": "5.65.19",
"cropperjs": "1.6.2",
"dayjs": "1.11.13",
"echarts": "5.5.1",
@ -42,6 +44,7 @@
"js-pinyin": "0.2.7",
"lodash-es": "4.17.21",
"nprogress": "0.2.0",
"path-to-regexp": "8.2.0",
"pinia": "2.2.2",
"screenfull": "6.0.2",
"qs": "6.13.0",
@ -52,6 +55,7 @@
"vue": "3.5.13",
"vue-cropper": "1.1.4",
"vue-i18n": "10.0.0",
"vue-pdf-embed": "2.1.2",
"vue-router": "4.4.5",
"vue3-colorpicker": "2.3.0",
"vue3-tree-org": "4.2.2",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 243 KiB

After

Width:  |  Height:  |  Size: 644 KiB

View File

@ -1,419 +0,0 @@
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\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",
"Image description": "\u56fe\u7247\u63cf\u8ff0",
"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",
"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",
"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",
"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\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",
"Spell check": "\u62fc\u5199\u68c0\u67e5",
"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",
"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",
"permanent pen": "\u8bb0\u53f7\u7b14",
"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 Properties": "\u6c38\u4e45\u7b14\u5c5e\u6027",
"Permanent pen properties...": "\u6c38\u4e45\u7b14\u5c5e\u6027...",
"Font": "\u5b57\u4f53",
"Size": "\u5b57\u53f7",
"More...": "\u66f4\u591a...",
"Spellcheck Language": "\u62fc\u5199\u68c0\u67e5\u8bed\u8a00",
"Select...": "\u9009\u62e9...",
"Preferences": "\u9996\u9009\u9879",
"Yes": "\u662f",
"No": "\u5426",
"Keyboard Navigation": "\u952e\u76d8\u6307\u5f15",
"Version": "\u7248\u672c",
"Anchor": "\u951a\u70b9",
"Special character": "\u7279\u6b8a\u7b26\u53f7",
"Code sample": "\u4ee3\u7801\u793a\u4f8b",
"Color": "\u989c\u8272",
"Emoticons": "\u8868\u60c5",
"Document properties": "\u6587\u6863\u5c5e\u6027",
"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",
"Spellcheck": "\u62fc\u5199\u68c0\u67e5",
"Caption": "\u6807\u9898",
"Insert template": "\u63d2\u5165\u6a21\u677f"
});

View File

@ -1,72 +0,0 @@
/**
* 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;
}

View File

@ -1,7 +0,0 @@
/**
* 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}

View File

@ -1,67 +0,0 @@
/**
* 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;
}

View File

@ -1,7 +0,0 @@
/**
* 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}

View File

@ -1,72 +0,0 @@
/**
* 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;
}

View File

@ -1,7 +0,0 @@
/**
* 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}

View File

@ -1,68 +0,0 @@
/**
* 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;
}

View File

@ -1,7 +0,0 @@
/**
* 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}

View File

@ -1,714 +0,0 @@
/**
* 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: 10000;
}
.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;
}

View File

@ -1,726 +0,0 @@
/**
* 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: 10000;
}
.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: '-';
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,29 +0,0 @@
/**
* 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;
}

View File

@ -1,7 +0,0 @@
/**
* 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}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,673 +0,0 @@
/**
* 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%;
}
}

File diff suppressed because one or more lines are too long

View File

@ -1,37 +0,0 @@
/**
* 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%;
left: 0;
margin: 0;
overflow: hidden;
-ms-scroll-chaining: none;
overscroll-behavior: none;
padding: 0;
position: fixed;
top: 0;
touch-action: pinch-zoom;
width: 100%;
}
.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
display: none;
}
.tox.tox-tinymce.tox-fullscreen {
background-color: transparent;
z-index: 1200;
}
.tox-shadowhost.tox-fullscreen {
z-index: 1200;
}
.tox-fullscreen .tox.tox-tinymce-aux,
.tox-fullscreen ~ .tox.tox-tinymce-aux {
z-index: 1201;
}

View File

@ -1,7 +0,0 @@
/**
* 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%;left:0;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;position:fixed;top:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox.tox-tinymce.tox-fullscreen{background-color:transparent;z-index:1200}.tox-shadowhost.tox-fullscreen{z-index:1200}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}

View File

@ -1,732 +0,0 @@
/**
* 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: 10000;
}
.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;
}

View File

@ -1,726 +0,0 @@
/**
* 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: 10000;
}
.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: '-';
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,29 +0,0 @@
/**
* 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;
}

View File

@ -1,7 +0,0 @@
/**
* 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}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,673 +0,0 @@
/**
* 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%;
}
}

File diff suppressed because one or more lines are too long

View File

@ -1,37 +0,0 @@
/**
* 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%;
left: 0;
margin: 0;
overflow: hidden;
-ms-scroll-chaining: none;
overscroll-behavior: none;
padding: 0;
position: fixed;
top: 0;
touch-action: pinch-zoom;
width: 100%;
}
.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
display: none;
}
.tox.tox-tinymce.tox-fullscreen {
background-color: transparent;
z-index: 1200;
}
.tox-shadowhost.tox-fullscreen {
z-index: 1200;
}
.tox-fullscreen .tox.tox-tinymce-aux,
.tox-fullscreen ~ .tox.tox-tinymce-aux {
z-index: 1201;
}

View File

@ -1,7 +0,0 @@
/**
* 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%;left:0;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;position:fixed;top:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox.tox-tinymce.tox-fullscreen{background-color:transparent;z-index:1200}.tox-shadowhost.tox-fullscreen{z-index:1200}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}

View File

@ -0,0 +1,58 @@
/**
* Copyright [2022] [https://www.xiaonuo.vip]
* Snowy采用APACHE LICENSE 2.0开源协议您在使用过程中需要注意以下几点
* 1.请不要删除和修改根目录下的LICENSE文件
* 2.请不要删除和修改Snowy源码头部的版权声明
* 3.本项目代码可免费商业使用商业使用请保留源码和相关描述文件的项目出处作者声明等
* 4.分发源码时候请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
import { baseRequest } from '@/utils/request'
import tool from '@/utils/tool'
const request = (url, ...arg) => baseRequest(`/auth/c/` + url, ...arg)
/**
* 登录
*
* @author yubaoshan
* @date 2025-05-31 23:55:10
*/
export default {
// C端获取图片验证码
clientGetPicCaptcha(data) {
return request('getPicCaptcha', data, 'get')
},
// C端获取手机验证码
clientGetPhoneValidCode(data) {
return request('getPhoneValidCode', data, 'get')
},
// C端获取邮箱验证码
clientGetEmailValidCode(data) {
return request('getEmailValidCode', data, 'get')
},
// C端账号密码登录
clientLogin(data) {
return request('doLogin', data, 'post', false)
},
// C端手机验证码登录
clientLoginByPhone(data) {
return request('doLoginByPhone', data, 'post', false)
},
// C端邮箱验证码登录
clientLoginByEmail(data) {
return request('doLoginByEmail', data, 'post', false)
},
// 退出
clientLogout(data) {
return request('doLogout', data, 'get')
},
// 获取用户信息
clientGetLoginUser(data) {
return request('getLoginUser', data, 'get')
},
// C端注册
clientRegister(data) {
return request('register', data, 'post')
}
}

View File

@ -26,6 +26,10 @@ export default {
getPhoneValidCode(data) {
return request('getPhoneValidCode', data, 'get')
},
// B端获取邮箱验证码
getEmailValidCode(data) {
return request('getEmailValidCode', data, 'get')
},
// B端账号密码登录
login(data) {
return request('doLogin', data, 'post', false)
@ -34,6 +38,10 @@ export default {
loginByPhone(data) {
return request('doLoginByPhone', data, 'post', false)
},
// B端邮箱验证码登录
loginByEmail(data) {
return request('doLoginByEmail', data, 'post', false)
},
// 退出
logout(data) {
return request('doLogout', data, 'get')
@ -41,5 +49,17 @@ export default {
// 获取用户信息
getLoginUser(data) {
return request('getLoginUser', data, 'get')
},
// 注册用户
register(data) {
return request('register', data)
},
// B端动态口令登录
loginByOtp(data) {
return request('doLoginByOtp', data, 'post', false)
},
// B端判断是否登录
isLogin(data) {
return request('isLogin', data, 'get')
}
}

View File

@ -10,7 +10,7 @@
*/
import { baseRequest } from '@/utils/request'
const request = (url, ...arg) => baseRequest(`/auth/third/` + url, ...arg)
const request = (url, ...arg) => baseRequest(`/auth/sso/b/` + url, ...arg)
/**
* 三方登录
*
@ -18,12 +18,13 @@ const request = (url, ...arg) => baseRequest(`/auth/third/` + url, ...arg)
* @date 2022-09-22 22:33:20
*/
export default {
// 第三方登录页面渲染
thirdRender(data) {
return request('render', data, 'get')
// B端获取认证中心地址
getSsoAuthUrl(data) {
return request('getSsoAuthUrl', data, 'get')
},
// 第三方登录授权回调
thirdCallback(data) {
return request('callback', data, 'get')
// B端根据ticket执行单点登录
doLoginByTicket(data) {
return request('doLoginByTicket', data)
}
}

View File

@ -29,5 +29,9 @@ export default {
// 第三方登录授权回调
thirdCallback(data) {
return request('callback', data, 'get')
},
// 第三方登录绑定账号
thirdBindAccount(data) {
return request('bindAccount', data)
}
}

View File

@ -10,35 +10,35 @@ const request = (url, ...arg) => baseRequest(`/biz/group/` + url, ...arg)
**/
export default {
// 获取用户组分页
bizGroupPage(data) {
groupPage(data) {
return request('page', data, 'get')
},
// 提交用户组表单 edit为true时为编辑默认为新增
bizGroupSubmitForm(data, edit = false) {
groupSubmitForm(data, edit = false) {
return request(edit ? 'edit' : 'add', data)
},
// 删除用户组
bizGroupDelete(data) {
groupDelete(data) {
return request('delete', data)
},
// 获取用户组详情
bizGroupDetail(data) {
groupDetail(data) {
return request('detail', data, 'get')
},
// 获取用户组下的用户
bizGroupOwnUser(data) {
groupOwnUser(data) {
return request('ownUser', data, 'get')
},
// 获取机构树
bizGroupOrgTreeSelector(data) {
groupOrgTreeSelector(data) {
return request('orgTreeSelector', data, 'get')
},
// 获取用户选择器
bizGroupUserSelector(data) {
groupUserSelector(data) {
return request('userSelector', data, 'get')
},
// 给用户组授权用户
bizGroupGrantUser(data) {
groupGrantUser(data) {
return request('grantUser', data)
}
}

View File

@ -13,6 +13,10 @@ export default {
bizIndexSlideshowList(data) {
return request('slideshow/list', data, 'get')
},
// 获取通知公告分页
bizIndexNoticePage(data) {
return request('notice/page', data, 'get')
},
// 获取通知公告列表
bizIndexNoticeList(data) {
return request('notice/list', data, 'get')

View File

@ -10,27 +10,27 @@ const request = (url, ...arg) => baseRequest(`/biz/notice/` + url, ...arg)
**/
export default {
// 获取通知公告分页
bizNoticePage(data) {
noticePage(data) {
return request('page', data, 'get')
},
// 提交通知公告表单 edit为true时为编辑默认为新增
bizNoticeSubmitForm(data, edit = false) {
noticeSubmitForm(data, edit = false) {
return request(edit ? 'edit' : 'add', data)
},
// 删除通知公告
bizNoticeDelete(data) {
noticeDelete(data) {
return request('delete', data)
},
// 获取通知公告详情
bizNoticeDetail(data) {
noticeDetail(data) {
return request('detail', data, 'get')
},
// 禁用通知公告
bizNoticeDisableStatus(data) {
noticeDisableStatus(data) {
return request('disableStatus', data)
},
// 启用通知公告
bizNoticeEnableStatus(data) {
noticeEnableStatus(data) {
return request('enableStatus', data)
}
}

View File

@ -0,0 +1,37 @@
/**
* Copyright [2022] [https://www.xiaonuo.vip]
* Snowy采用APACHE LICENSE 2.0开源协议您在使用过程中需要注意以下几点
* 1.请不要删除和修改根目录下的LICENSE文件
* 2.请不要删除和修改Snowy源码头部的版权声明
* 3.本项目代码可免费商业使用商业使用请保留源码和相关描述文件的项目出处作者声明等
* 4.分发源码时候请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
import { baseRequest } from '@/utils/request'
const request = (url, ...arg) => baseRequest(`/client/user/` + url, ...arg)
/**
* 前台用户接口api
*
* @author yubaoshan
* @date 2025-06-01 22:26:20
*/
export default {
// 获取用户分页
userPage(data) {
return request('page', data, 'get')
},
// 提交表单 edit为true时为编辑默认为新增
submitForm(data, edit = false) {
return request(edit ? 'edit' : 'add', data)
},
// 删除用户
userDelete(data) {
return request('delete', data)
},
// 获取用户详情
userDetail(data) {
return request('detail', data, 'get')
}
}

View File

@ -0,0 +1,113 @@
/**
* Copyright [2022] [https://www.xiaonuo.vip]
* Snowy采用APACHE LICENSE 2.0开源协议您在使用过程中需要注意以下几点
* 1.请不要删除和修改根目录下的LICENSE文件
* 2.请不要删除和修改Snowy源码头部的版权声明
* 3.本项目代码可免费商业使用商业使用请保留源码和相关描述文件的项目出处作者声明等
* 4.分发源码时候请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
import { baseRequest } from '@/utils/request'
const request = (url, ...arg) => baseRequest(`/client/userCenter/` + url, ...arg)
/**
* C端用户个人控制器
*
* @author xuyuxiang
* @date 2022-04-22 09:34:00
*/
export default {
// 获取图片验证码
clientUserGetPicCaptcha(data) {
return request('getPicCaptcha', data, 'get')
},
// 找回密码获取手机验证码
clientUserFindPasswordGetPhoneValidCode(data) {
return request('findPasswordGetPhoneValidCode', data, 'get')
},
// 找回密码获取邮箱验证码
clientUserFindPasswordGetEmailValidCode(data) {
return request('findPasswordGetEmailValidCode', data, 'get')
},
// 通过手机号找回用户密码
clientUserFindPasswordByPhone(data) {
return request('findPasswordByPhone', data)
},
// 通过邮箱找回用户密码
clientUserFindPasswordByEmail(data) {
return request('findPasswordByEmail', data)
},
// 修改密码获取手机验证码
clientUserUpdatePasswordGetPhoneValidCode(data) {
return request('updatePasswordGetPhoneValidCode', data, 'get')
},
// 修改密码获取邮箱验证码
clientUserUpdatePasswordGetEmailValidCode(data) {
return request('updatePasswordGetEmailValidCode', data, 'get')
},
// 通过验证旧密码修改用户密码
clientUserUpdatePasswordByOld(data) {
return request('updatePasswordByOld', data)
},
// 通过验证手机号修改用户密码
clientUserUpdatePasswordByPhone(data) {
return request('updatePasswordByPhone', data)
},
// 通过验证邮箱修改用户密码
clientUserUpdatePasswordByEmail(data) {
return request('updatePasswordByEmail', data)
},
// 绑定手机号获取手机验证码
clientUserBindPhoneGetPhoneValidCode(data) {
return request('bindPhoneGetPhoneValidCode', data, 'get')
},
// 修改绑定手机号获取手机验证码
clientUserUpdateBindPhoneGetPhoneValidCode(data) {
return request('updateBindPhoneGetPhoneValidCode', data, 'get')
},
// 绑定手机号
clientUserBindPhone(data) {
return request('bindPhone', data)
},
// 绑定邮箱获取邮箱验证码
clientUserBindEmailGetEmailValidCode(data) {
return request('bindEmailGetEmailValidCode', data, 'get')
},
// 修改绑定邮箱获取邮箱验证码
clientUserUpdateBindEmailGetEmailValidCode(data) {
return request('updateBindEmailGetEmailValidCode', data, 'get')
},
// 绑定邮箱
clientUserBindEmail(data) {
return request('bindEmail', data)
},
// 修改用户头像
clientUserUpdateAvatar(data) {
return request('updateAvatar', data)
},
// 修改用户签名图片
clientUserUpdateSignature(data) {
return request('updateSignature', data)
},
// 编辑个人信息
clientUserUpdateUserInfo(data) {
return request('updateUserInfo', data)
},
// 根据id获取头像
clientUserGetAvatarById(data) {
return request('getAvatarById', data, 'get')
},
// 判断当前用户是否需要绑定手机号
clientUserIsUserNeedBindPhone(data) {
return request('isUserNeedBindPhone', data, 'get')
},
// 判断当前用户是否需要绑定邮箱
clientUserIsUserNeedBindEmail(data) {
return request('isUserNeedBindEmail', data, 'get')
},
// 判断当前用户密码是否过期
clientUserIsUserPasswordExpired(data) {
return request('isUserPasswordExpired', data, 'get')
}
}

View File

@ -0,0 +1,28 @@
import { baseRequest } from '@/utils/request'
const request = (url, ...arg) => baseRequest(`/dev/weakPassword/` + url, ...arg)
/**
* 弱密码库Api接口管理器
*
* @author yubaoshan
* @date 2025/05/31 01:45
**/
export default {
// 获取弱密码库分页
weakPasswordPage(data) {
return request('page', data, 'get')
},
// 提交弱密码库表单 edit为true时为编辑默认为新增
weakPasswordSubmitForm(data, edit = false) {
return request(edit ? 'edit' : 'add', data)
},
// 删除弱密码库
weakPasswordDelete(data) {
return request('delete', data)
},
// 获取弱密码库详情
weakPasswordDetail(data) {
return request('detail', data, 'get')
}
}

View File

@ -10,35 +10,35 @@ const request = (url, ...arg) => baseRequest(`/sys/group/` + url, ...arg)
**/
export default {
// 获取用户组分页
sysGroupPage(data) {
groupPage(data) {
return request('page', data, 'get')
},
// 提交用户组表单 edit为true时为编辑默认为新增
sysGroupSubmitForm(data, edit = false) {
groupSubmitForm(data, edit = false) {
return request(edit ? 'edit' : 'add', data)
},
// 删除用户组
sysGroupDelete(data) {
groupDelete(data) {
return request('delete', data)
},
// 获取用户组详情
sysGroupDetail(data) {
groupDetail(data) {
return request('detail', data, 'get')
},
// 获取用户组下的用户
sysGroupOwnUser(data) {
groupOwnUser(data) {
return request('ownUser', data, 'get')
},
// 获取机构树
sysGroupOrgTreeSelector(data) {
groupOrgTreeSelector(data) {
return request('orgTreeSelector', data, 'get')
},
// 获取用户选择器
sysGroupUserSelector(data) {
groupUserSelector(data) {
return request('userSelector', data, 'get')
},
// 给用户组授权用户
sysGroupGrantUser(data) {
groupGrantUser(data) {
return request('grantUser', data)
}
}

View File

@ -59,24 +59,18 @@ export default {
return request('updatePasswordByEmail', data)
},
// 绑定手机号获取手机验证码
userBindPhoneGetPhoneValidCode(data) {
return request('bindPhoneGetPhoneValidCode', data)
userBindPhoneGetPhoneValidCode(data, phone) {
// 如果有手机号,则修改获取、否则首次绑定
return request(phone ? 'updateBindPhoneGetPhoneValidCode' : 'bindPhoneGetPhoneValidCode', data, 'get')
},
// 修改绑定手机号获取手机验证码
userUpdateBindPhoneGetPhoneValidCode(data) {
return request('updateBindPhoneGetPhoneValidCode', data)
},
// 修改绑定手机号获取手机验证码
// 绑定手机号
userBindPhone(data) {
return request('bindPhone', data)
},
// 绑定邮箱获取邮箱验证码
userBindEmailGetEmailValidCode(data) {
return request('bindEmailGetEmailValidCode', data)
},
// 修改绑定邮箱获取邮箱验证码
userUpdateBindEmailGetEmailValidCode(data) {
return request('updateBindEmailGetEmailValidCode', data)
userBindEmailGetEmailValidCode(data, email) {
// 如果有邮箱号,则修改获取、否则首次绑定
return request(email ? 'updateBindEmailGetEmailValidCode' : 'bindEmailGetEmailValidCode', data, 'get')
},
// 绑定邮箱
userBindEmail(data) {
@ -161,5 +155,21 @@ export default {
// 获取修改密码验证方式及配置
userGetUpdatePasswordValidConfig(data) {
return request('getUpdatePasswordValidConfig', data, 'get')
}
},
// 获取动态口令绑定状态
userCenterGetOtpInfoBindStatus(data) {
return request('getOtpInfoBindStatus', data, 'get')
},
// 获取动态口令信息
userCenterGetOtpInfo(data) {
return request('getOtpInfo', data, 'get')
},
// 绑定动态口令
userCenterBindOtp(data) {
return request('bindOtp', data)
},
// 解绑动态口令
userCenterUnBindOtp(data) {
return request('unBindOtp', data)
},
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 993 KiB

View File

@ -85,7 +85,15 @@
circle: {
type: Boolean,
default: () => false
}
},
autoCropWidth: {
type: Number,
default: () => 100
},
autoCropHeight: {
type: Number,
default: () => 100
},
})
const emit = defineEmits({ successful: null })
const visible = ref(false)
@ -99,8 +107,8 @@
original: false,
canMoveBox: true,
autoCrop: true,
autoCropWidth: 200,
autoCropHeight: 200,
autoCropWidth: props.autoCropWidth,
autoCropHeight: props.autoCropHeight,
centerBox: false,
high: false,
cropData: {},

View File

@ -1,15 +0,0 @@
## 富文本
### 说明
这个组件将在3.2版本移除请及时更新使用xn-editor
> 更新提示
>
> 1、将<editor /> 改为 <xn-editor />
>
> 2、v-model绑定改为v-model:value
>
> 3、整体写法为<xn-editor v-model:value="formData.字段名" />
>
> 4、移除业务内跟此组件无关的其他代码即可

View File

@ -1,104 +0,0 @@
<template>
<Editor v-model="contentValue" :init="init" :disabled="disabled" :placeholder="placeholder" @onClick="onClick" />
</template>
<script setup name="Editor">
import Editor from '@tinymce/tinymce-vue'
import tinymce from 'tinymce/tinymce'
import 'tinymce/themes/silver'
import 'tinymce/icons/default'
import 'tinymce/models/dom'
//
import 'tinymce/plugins/code' //
import 'tinymce/plugins/image' //
import 'tinymce/plugins/link' //
import 'tinymce/plugins/preview' //
import 'tinymce/plugins/table' //
import 'tinymce/plugins/lists' //
import 'tinymce/plugins/advlist' //
const emit = defineEmits(['update:modelValue', 'onClick'])
const props = defineProps({
modelValue: {
type: String,
default: ''
},
placeholder: {
type: String,
default: ''
},
height: {
type: Number,
default: 300
},
disabled: {
type: Boolean,
default: false
},
plugins: {
type: [String, Array],
default: 'code image link preview table lists advlist'
},
toolbar: {
type: [String, Array],
default:
'undo redo | forecolor backcolor bold italic underline strikethrough link | blocks fontfamily fontsize | \
alignleft aligncenter alignright alignjustify outdent indent lineheight | bullist numlist | \
image table preview | code selectall'
},
fileUploadFunction: {
type: Function,
default: undefined
}
})
const init = ref({
language_url: '/tinymce/langs/zh_CN.js',
language: 'zh_CN',
skin_url: '/tinymce/skins/ui/oxide',
content_css: '/tinymce/skins/content/default/content.css',
menubar: false,
statusbar: true,
plugins: props.plugins,
toolbar: props.toolbar,
fontsize_formats: '12px 14px 16px 18px 20px 22px 24px 28px 32px 36px 48px 56px 72px',
height: props.height,
placeholder: props.placeholder,
branding: false,
resize: true,
elementpath: true,
content_style: '',
images_upload_handler(blobInfo, progress) {
return new Promise((resolve, reject) => {
const param = new FormData()
param.append('file', blobInfo.blob(), blobInfo.filename())
props
.fileUploadFunction(param)
.then((data) => {
return resolve(data)
})
.catch((err) => {
return reject('err:' + err)
})
})
},
setup: (editor) => {
editor.on('init', () => {
// getBody().style.fontSize = '14px'
})
}
})
const contentValue = ref()
watch(props, (newValue) => {
contentValue.value = newValue.modelValue
emit('update:modelValue', newValue.modelValue)
})
watch(contentValue, (newValue) => {
emit('update:modelValue', newValue)
})
const onClick = (e) => {
emit('onClick', e, tinymce)
}
onMounted(() => {
tinymce.init({})
})
</script>

View File

@ -108,8 +108,7 @@
},
{
title: '是否已读',
dataIndex: 'read',
width: 120
dataIndex: 'read'
}
]
//

View File

@ -57,8 +57,7 @@
{
title: '时间',
dataIndex: 'createTime',
align: 'right',
width: '150px'
align: 'right'
}
]
const title = ref('通知公告')

View File

@ -1,7 +1,7 @@
<template>
<a-card :title="title" :bordered="false" :loading="apiLoading">
<a-row>
<a-col :span="6">
<a-col :xs="12" :sm="12" :md="12" :lg="6" :xl="6">
<a-statistic :value="dataSource.userCount">
<template #title>
<user-outlined style="color: #1890ff" />
@ -9,7 +9,7 @@
</template>
</a-statistic>
</a-col>
<a-col :span="6">
<a-col :xs="12" :sm="12" :md="12" :lg="6" :xl="6">
<a-statistic :value="dataSource.orgCount">
<template #title>
<cluster-outlined style="color: rgba(229, 159, 18, 0.35)" />
@ -17,7 +17,7 @@
</template>
</a-statistic>
</a-col>
<a-col :span="6">
<a-col :xs="12" :sm="12" :md="12" :lg="6" :xl="6">
<a-statistic :value="dataSource.positionCount">
<template #title>
<apartment-outlined style="color: rgba(245, 6, 6, 0.2)" />
@ -25,7 +25,7 @@
</template>
</a-statistic>
</a-col>
<a-col :span="6">
<a-col :xs="12" :sm="12" :md="12" :lg="6" :xl="6">
<a-statistic :value="dataSource.roleCount">
<template #title>
<deployment-unit-outlined style="color: #09c755" />

View File

@ -12,7 +12,7 @@
</a-statistic>
</a-col>
-->
<a-col :span="5">
<a-col :xs="12" :sm="12" :md="12" :lg="4" :xl="4">
<a-statistic :value="dataSource.sysDictCount">
<template #title>
<read-outlined style="color: #4b4b4b" />
@ -20,7 +20,7 @@
</template>
</a-statistic>
</a-col>
<a-col :span="5">
<a-col :xs="12" :sm="12" :md="12" :lg="4" :xl="4">
<a-statistic :value="dataSource.bizDictCount">
<template #title>
<read-outlined style="color: #353779" />
@ -28,7 +28,7 @@
</template>
</a-statistic>
</a-col>
<a-col :span="5">
<a-col :xs="12" :sm="12" :md="12" :lg="4" :xl="4">
<a-statistic :value="dataSource.backUserSessionCount">
<template #title>
<usergroup-delete-outlined style="color: #3ceecd" />
@ -36,7 +36,7 @@
</template>
</a-statistic>
</a-col>
<a-col :span="5">
<a-col :xs="12" :sm="12" :md="12" :lg="4" :xl="4">
<a-statistic :value="dataSource.clientUserSessionCount">
<template #title>
<UserSwitchOutlined style="color: rgba(229, 159, 18, 0.35)" />
@ -44,7 +44,7 @@
</template>
</a-statistic>
</a-col>
<a-col :span="4">
<a-col :xs="12" :sm="12" :md="12" :lg="4" :xl="4">
<a-statistic :value="dataSource.thirdUserCount">
<template #title>
<team-outlined style="color: #1890ff" />

View File

@ -2,7 +2,7 @@
<a-card :bordered="false">
<div class="xn-card-line">
<div class="xn-flex">
<a-avatar class="xn-wh60" :src="userInfo.avatar" :size="{ xs: 24, sm: 32, md: 40, lg: 64, xl: 80, xxl: 100 }" />
<a-avatar class="xn-wh60" :src="userInfo.avatar" :size="{ xs: 80, sm: 80, md: 80, lg: 80, xl: 80 }" />
<div class="snowy-index-card-left-one-username">
<span>{{ userInfo.name }}</span>
<span>{{ userInfo.orgName }} | {{ userInfo.positionName }}</span>

View File

@ -23,8 +23,8 @@
</a-col>
<a-col :span="11">
<div class="table-operator xn-mb10">
<a-form ref="searchFormRef" name="advanced_search" class="ant-advanced-search-form" :model="searchFormState">
<a-row :gutter="24">
<a-form ref="searchFormRef" :model="searchFormState">
<a-row :gutter="10">
<a-col :span="12">
<a-form-item name="searchKey">
<a-input v-model:value="searchFormState.searchKey" placeholder="请输入机构名" />
@ -32,7 +32,7 @@
</a-col>
<a-col :span="12">
<a-button type="primary" class="primarySele" @click="loadData()"> 查询 </a-button>
<a-button class="snowy-button-left" @click="() => reset()"> 重置 </a-button>
<a-button @click="() => reset()"> 重置 </a-button>
</a-col>
</a-row>
</a-form>
@ -115,8 +115,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '机构名',
@ -133,8 +132,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '机构名',

View File

@ -23,8 +23,8 @@
</a-col>
<a-col :span="11">
<div class="table-operator xn-mb10">
<a-form ref="searchFormRef" name="advanced_search" class="ant-advanced-search-form" :model="searchFormState">
<a-row :gutter="24">
<a-form ref="searchFormRef" :model="searchFormState">
<a-row :gutter="10">
<a-col :span="12">
<a-form-item name="searchKey">
<a-input v-model:value="searchFormState.searchKey" placeholder="请输入职位名" />
@ -32,7 +32,7 @@
</a-col>
<a-col :span="12">
<a-button type="primary" class="primarySele" @click="loadData()"> 查询 </a-button>
<a-button class="snowy-button-left" @click="() => reset()"> 重置 </a-button>
<a-button @click="() => reset()"> 重置 </a-button>
</a-col>
</a-row>
</a-form>
@ -115,8 +115,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '职位名',
@ -133,8 +132,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '职位名',

View File

@ -23,8 +23,8 @@
</a-col>
<a-col :span="11">
<div class="table-operator xn-mb10">
<a-form ref="searchFormRef" name="advanced_search" class="ant-advanced-search-form" :model="searchFormState">
<a-row :gutter="24">
<a-form ref="searchFormRef" :model="searchFormState">
<a-row :gutter="10">
<a-col :span="12">
<a-form-item name="searchKey">
<a-input v-model:value="searchFormState.searchKey" placeholder="请输入角色名" />
@ -32,7 +32,7 @@
</a-col>
<a-col :span="12">
<a-button type="primary" class="primarySele" @click="loadData()"> 查询 </a-button>
<a-button class="snowy-button-left" @click="() => reset()"> 重置 </a-button>
<a-button @click="() => reset()"> 重置 </a-button>
</a-col>
</a-row>
</a-form>
@ -115,8 +115,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '角色名',
@ -133,8 +132,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '角色名',

View File

@ -23,8 +23,8 @@
</a-col>
<a-col :span="11">
<div class="table-operator xn-mb10">
<a-form ref="searchFormRef" name="advanced_search" class="ant-advanced-search-form" :model="searchFormState">
<a-row :gutter="24">
<a-form ref="searchFormRef" :model="searchFormState">
<a-row :gutter="10">
<a-col :span="12">
<a-form-item name="searchKey">
<a-input v-model:value="searchFormState.searchKey" placeholder="请输入用户名" />
@ -32,7 +32,7 @@
</a-col>
<a-col :span="12">
<a-button type="primary" class="primarySele" @click="loadData()"> 查询 </a-button>
<a-button class="snowy-button-left" @click="reset()"> 重置 </a-button>
<a-button @click="reset()"> 重置 </a-button>
</a-col>
</a-row>
</a-form>
@ -118,13 +118,11 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '头像',
dataIndex: 'avatar',
width: 50
dataIndex: 'avatar'
},
{
title: '用户名',
@ -141,8 +139,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '用户名',

View File

@ -1,24 +1,22 @@
<template>
<Editor v-model="contentValue" :init="init" :disabled="disabled" :placeholder="placeholder" @onClick="onClick" />
<div style="border: 1px solid #ccc">
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig" :mode="mode" />
<Editor
:style="{ height: props.height, overflowY: 'hidden' }"
v-model="contentValue"
:defaultConfig="editorConfig"
:mode="mode"
@onCreated="handleCreated"
/>
</div>
</template>
<script setup name="Editor">
<script setup name="XnEditor">
import '@wangeditor/editor/dist/css/style.css' // css
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
import fileApi from '@/api/dev/fileApi'
import Editor from '@tinymce/tinymce-vue'
import tinymce from 'tinymce/tinymce'
import 'tinymce/themes/silver'
import 'tinymce/icons/default'
import 'tinymce/models/dom'
//
import 'tinymce/plugins/code' //
import 'tinymce/plugins/image' //
import 'tinymce/plugins/link' //
import 'tinymce/plugins/preview' //
import 'tinymce/plugins/table' //
import 'tinymce/plugins/lists' //
import 'tinymce/plugins/advlist' //
const emit = defineEmits(['update:value', 'onClick', 'onChange'])
const emit = defineEmits(['update:value'])
const props = defineProps({
value: {
type: [String, Array],
@ -27,78 +25,76 @@
},
placeholder: {
type: String,
default: ''
default: '请输入内容...'
},
height: {
type: Number,
default: 300
type: String,
default: '500px'
},
disabled: {
type: Boolean,
default: false
},
plugins: {
type: [String, Array],
default: 'code image link preview table lists advlist'
},
toolbar: {
type: [String, Array],
default:
'undo redo | forecolor backcolor bold italic underline strikethrough link | blocks fontfamily fontsize | \
alignleft aligncenter alignright alignjustify outdent indent lineheight | bullist numlist | \
image table preview | code selectall'
mode: {
type: String,
default: 'default' // 'default' 'simple'
},
fileUploadFunction: {
type: Function,
default: undefined
}
})
const contentValue = ref()
const init = ref({
language_url: '/tinymce/langs/zh_CN.js',
language: 'zh_CN',
skin_url: '/tinymce/skins/ui/oxide',
content_css: '/tinymce/skins/content/default/content.css',
menubar: false,
statusbar: true,
plugins: props.plugins,
toolbar: props.toolbar,
fontsize_formats: '12px 14px 16px 18px 20px 22px 24px 28px 32px 36px 48px 56px 72px',
height: props.height,
placeholder: props.placeholder,
branding: false,
resize: true,
elementpath: true,
content_style: '',
selector: '#textarea1',
skin: 'oxide-dark',
images_upload_handler(blobInfo, progress) {
return new Promise((resolve, reject) => {
const param = new FormData()
param.append('file', blobInfo.blob(), blobInfo.filename())
//
if (props.fileUploadFunction) {
props
.fileUploadFunction(param)
.then((data) => {
return resolve(data)
// shallowRef
const editorRef = shallowRef()
const toolbarConfig = {}
const editorConfig = {
MENU_CONF: {
placeholder: props.placeholder,
uploadImage: {
//
async customUpload(file, insertFn) {
const param = new FormData()
param.append('file', file)
//
if (props.fileUploadFunction) {
props
.fileUploadFunction(param)
.then((data) => {
insertFn(data) // insertFn(url, alt, href)
})
.catch((err) => {
console.error('err:' + err)
})
} else {
fileApi.fileUploadDynamicReturnUrl(param).then((data) => {
insertFn(data) // insertFn(url, alt, href)
})
.catch((err) => {
return reject('err:' + err)
})
} else {
fileApi.fileUploadDynamicReturnUrl(param).then((data) => {
return resolve(data)
})
}
}
})
},
setup: (editor) => {
editor.on('init', () => {
// getBody().style.fontSize = '14px'
})
},
uploadVideo: {
//
async customUpload(file, insertFn) {
const param = new FormData()
param.append('file', file)
//
if (props.fileUploadFunction) {
props
.fileUploadFunction(param)
.then((data) => {
insertFn(data) // insertFn(url, poster)
})
.catch((err) => {
console.error('err:' + err)
})
} else {
fileApi.fileUploadDynamicReturnUrl(param).then((data) => {
insertFn(data) // insertFn(url, poster)
})
}
}
}
}
})
}
// HTML
const contentValue = ref('')
//
watch(
() => props.value,
@ -111,15 +107,17 @@
watch(contentValue, (newValue) => {
emit('update:value', newValue)
})
const onClick = (e) => {
emit('onClick', e, tinymce)
// editor
const handleCreated = (editor) => {
editorRef.value = editor
}
onMounted(() => {
tinymce.init({})
//
onBeforeUnmount(() => {
const editor = editorRef.value
if (editor == null) return
editor.destroy()
})
</script>
<style lang="less">
.tox-toolbar__primary {
border-bottom: 1px solid rgb(5 5 5 / 0%) !important;
}
</style>
<style scoped lang="less"></style>

View File

@ -9,26 +9,28 @@
返回
</a-button>
</a-space>
<a-card :bordered="false" :body-style="{ padding: '0px' }">
<a-card :bordered="false" :body-style="{ padding: 0 }">
<a-spin :spinning="loading">
<vue-office-docx
v-if="fileType === 'doc' || fileType === 'docx'"
:src="props.src"
:src="props.src + '&token=' + tool.data.get('TOKEN')"
class="xn-ht82"
@rendered="renderedHandler"
/>
<vue-office-excel
v-else-if="fileType === 'xls' || fileType === 'xlsx'"
:src="props.src"
:src="props.src + '&token=' + tool.data.get('TOKEN')"
class="xn-ht82"
@rendered="renderedHandler"
@error="errorHandler"
/>
<vue-office-pdf
<vue-pdf-embed
v-else-if="fileType === 'pdf'"
:src="props.src"
annotation-layer
text-layer
:source="props.src + '&token=' + tool.data.get('TOKEN')"
@rendered="renderedHandler"
@error="errorHandler"
@renderingFailed="errorHandler"
/>
<img
v-else-if="
@ -40,7 +42,7 @@
fileType === 'ico' ||
fileType === 'svg'
"
:src="props.src"
:src="props.src + '&token=' + tool.data.get('TOKEN')"
class="xn-mwh"
/>
<a-result v-else status="warning" title="不支持预览的文件类型" />
@ -50,6 +52,7 @@
</template>
<script setup>
import tool from '@/utils/tool'
import { message } from 'ant-design-vue'
//VueOfficeDocx
import VueOfficeDocx from '@vue-office/docx'
@ -59,8 +62,11 @@
import VueOfficeExcel from '@vue-office/excel'
//
import '@vue-office/excel/lib/index.css'
//VueOfficePdf
import VueOfficePdf from '@vue-office/pdf'
//Pdf
// https://github.com/hrynko/vue-pdf-embed
import VuePdfEmbed from 'vue-pdf-embed'
import 'vue-pdf-embed/dist/styles/annotationLayer.css'
import 'vue-pdf-embed/dist/styles/textLayer.css'
const loading = ref(false)
const emit = defineEmits({ goBack: null })

View File

@ -10,7 +10,14 @@
<slot :name="slotKey" />
</template>
</a-modal>
<a-drawer v-else :open="visible" v-bind="$attrs" @close="cancel" :footer-style="{ textAlign: 'right' }">
<a-drawer
v-else
:open="visible"
v-bind="$attrs"
@close="cancel"
:footer-style="{ textAlign: 'right' }"
:width="drawerWidth"
>
<template v-for="slotKey in slotKeys" #[slotKey]>
<slot :name="slotKey" />
</template>
@ -18,9 +25,10 @@
</template>
<script setup>
import { useSlots } from 'vue'
import { useSlots, computed, useAttrs, onMounted, onUnmounted } from 'vue'
import { globalStore } from '@/store'
const slots = useSlots()
const attrs = useAttrs()
const store = globalStore()
const props = defineProps({
visible: {
@ -42,10 +50,30 @@
const isModal = computed(() => {
return FormContainerTypeEnum.MODAL === formStyle.value
})
//
const isSmallScreen = ref(window.innerWidth <= 768)
const drawerWidth = computed(() => {
return isSmallScreen.value ? '100%' : attrs.width // 100%使
})
const emit = defineEmits(['close'])
const cancel = () => {
emit('close')
}
//
const handleResize = () => {
isSmallScreen.value = window.innerWidth <= 768
}
onMounted(() => {
window.addEventListener('resize', handleResize)
})
onUnmounted(() => {
window.removeEventListener('resize', handleResize)
})
</script>
<script>
//
@ -53,3 +81,13 @@
inheritAttrs: false
}
</script>
<style scoped>
/* 确保小屏幕下抽屉不会有额外的边距或滚动条 */
@media (max-width: 576px) {
:deep(.ant-drawer-content-wrapper) {
width: 100% !important;
max-width: 100% !important;
}
}
</style>

View File

@ -26,18 +26,22 @@
@cancel="handleClose"
>
<a-row :gutter="10">
<a-col :span="14">
<a-col :xs="24" :sm="24" :md="24" :lg="14" :xl="14">
<div class="table-operator xn-mb10">
<a-form ref="searchFormRef" name="advanced_search" class="ant-advanced-search-form" :model="searchFormState">
<a-row :gutter="24">
<a-col :span="12">
<a-form ref="searchFormRef" :model="searchFormState">
<a-row :gutter="10">
<a-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
<a-form-item name="searchKey">
<a-input v-model:value="searchFormState.searchKey" placeholder="请输入名称" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-button type="primary" class="xn-mr-10" @click="loadData()"> 查询 </a-button>
<a-button @click="reset()"> 重置 </a-button>
<a-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
<a-form-item>
<a-space>
<a-button type="primary" class="xn-mr-10" @click="loadData()"> 查询 </a-button>
<a-button @click="reset()"> 重置 </a-button>
</a-space>
</a-form-item>
</a-col>
</a-row>
</a-form>
@ -58,7 +62,7 @@
</a-table>
</div>
</a-col>
<a-col :span="10">
<a-col :xs="24" :sm="24" :md="24" :lg="10" :xl="10">
<div class="selector-table">
<a-table
ref="selectedTable"
@ -68,6 +72,7 @@
:expand-row-by-click="true"
:loading="selectedTableListLoading"
bordered
>
<template #title>
<span>已选择: {{ selectedData.length }}</span>
@ -156,8 +161,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '名称',
@ -170,8 +174,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '名称',
@ -476,9 +479,6 @@
max-height: 500px;
overflow: auto;
}
.ant-form-item {
margin-bottom: 0 !important;
}
.selector-table {
overflow: auto;
max-height: 450px;

View File

@ -28,7 +28,7 @@
@cancel="handleClose"
>
<a-row :gutter="10">
<a-col :span="7">
<a-col :xs="0" :sm="0" :md="0" :lg="7" :xl="7">
<a-card size="small" :loading="cardLoading" class="selectorTreeDiv">
<a-tree
v-if="treeData"
@ -40,18 +40,41 @@
</a-tree>
</a-card>
</a-col>
<a-col :span="11">
<a-col :xs="24" :sm="24" :md="24" :lg="11" :xl="11">
<div class="table-operator xn-mb10">
<a-form ref="searchFormRef" name="advanced_search" class="ant-advanced-search-form" :model="searchFormState">
<a-row :gutter="24">
<a-col :span="12">
<a-form ref="searchFormRef" :model="searchFormState">
<a-row :gutter="10">
<a-col :xs="24" :sm="8" :md="8" :lg="0" :xl="0">
<a-form-item label="上级组织:" name="parentId">
<a-tree-select
v-model:value="searchFormState.parentId"
class="xn-wd"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
placeholder="请选择上级组织"
allow-clear
:tree-data="treeData"
:field-names="{
children: 'children',
label: 'name',
value: 'id'
}"
selectable="false"
tree-line
/>
</a-form-item>
</a-col>
<a-col :xs="24" :sm="8" :md="8" :lg="0" :xl="0">
<a-form-item name="searchKey">
<a-input v-model:value="searchFormState.searchKey" placeholder="请输入机构名" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-button type="primary" class="xn-mr-10" @click="loadData()"> 查询 </a-button>
<a-button @click="reset()"> 重置 </a-button>
<a-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
<a-form-item>
<a-space>
<a-button type="primary" class="xn-mr-10" @click="loadData()"> 查询 </a-button>
<a-button @click="reset()"> 重置 </a-button>
</a-space>
</a-form-item>
</a-col>
</a-row>
</a-form>
@ -66,6 +89,7 @@
:loading="pageLoading"
bordered
:pagination="false"
:scroll="{ x: 'max-content' }"
>
<template #title>
<span>待选择列表 {{ tableRecordNum }} </span>
@ -95,7 +119,7 @@
</div>
</div>
</a-col>
<a-col :span="6">
<a-col :xs="24" :sm="24" :md="24" :lg="6" :xl="6">
<div class="selector-table">
<a-table
ref="selectedTable"
@ -136,8 +160,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '名称',
@ -154,8 +177,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '名称',
@ -437,7 +459,7 @@
}
//
const reset = () => {
delete searchFormState.value.searchKey
searchFormRef.value.resetFields()
loadData()
}
const handleClose = () => {
@ -576,9 +598,6 @@
max-height: 500px;
overflow: auto;
}
.ant-form-item {
margin-bottom: 0 !important;
}
.selector-table {
overflow: auto;
max-height: 450px;

View File

@ -28,7 +28,7 @@
@cancel="handleClose"
>
<a-row :gutter="10">
<a-col :span="7">
<a-col :xs="0" :sm="0" :md="0" :lg="7" :xl="7">
<a-card size="small" :loading="cardLoading" class="selectorTreeDiv">
<a-tree
v-if="treeData"
@ -40,18 +40,41 @@
</a-tree>
</a-card>
</a-col>
<a-col :span="11">
<a-col :xs="24" :sm="24" :md="24" :lg="11" :xl="11">
<div class="table-operator xn-mb10">
<a-form ref="searchFormRef" name="advanced_search" class="ant-advanced-search-form" :model="searchFormState">
<a-row :gutter="24">
<a-col :span="12">
<a-form ref="searchFormRef" :model="searchFormState">
<a-row :gutter="10">
<a-col :xs="24" :sm="8" :md="8" :lg="0" :xl="0">
<a-form-item label="组织:" name="orgId">
<a-tree-select
v-model:value="searchFormState.orgId"
class="xn-wd"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
placeholder="请选择组织"
allow-clear
:tree-data="treeData"
:field-names="{
children: 'children',
label: 'name',
value: 'id'
}"
selectable="false"
tree-line
/>
</a-form-item>
</a-col>
<a-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
<a-form-item name="searchKey">
<a-input v-model:value="searchFormState.searchKey" placeholder="请输入职位名" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-button type="primary" class="xn-mr-10" @click="loadData()"> 查询 </a-button>
<a-button @click="reset()"> 重置 </a-button>
<a-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
<a-form-item>
<a-space>
<a-button type="primary" class="xn-mr-10" @click="loadData()"> 查询 </a-button>
<a-button @click="reset()"> 重置 </a-button>
</a-space>
</a-form-item>
</a-col>
</a-row>
</a-form>
@ -66,6 +89,7 @@
:loading="pageLoading"
bordered
:pagination="false"
:scroll="{ x: 'max-content' }"
>
<template #title>
<span>待选择列表 {{ tableRecordNum }} </span>
@ -95,7 +119,7 @@
</div>
</div>
</a-col>
<a-col :span="6">
<a-col :xs="24" :sm="24" :md="24" :lg="6" :xl="6">
<div class="selector-table">
<a-table
ref="selectedTable"
@ -136,8 +160,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '名称',
@ -154,8 +177,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '名称',
@ -433,7 +455,7 @@
}
//
const reset = () => {
delete searchFormState.value.searchKey
searchFormRef.value.resetFields()
loadData()
}
const handleClose = () => {
@ -572,9 +594,6 @@
max-height: 500px;
overflow: auto;
}
.ant-form-item {
margin-bottom: 0 !important;
}
.selector-table {
overflow: auto;
max-height: 450px;

View File

@ -28,7 +28,7 @@
@cancel="handleClose"
>
<a-row :gutter="10">
<a-col :span="7">
<a-col :xs="0" :sm="0" :md="0" :lg="7" :xl="7">
<a-card size="small" :loading="cardLoading" class="selectorTreeDiv">
<a-tree
v-if="treeData"
@ -40,18 +40,42 @@
</a-tree>
</a-card>
</a-col>
<a-col :span="11">
<a-col :xs="24" :sm="24" :md="24" :lg="11" :xl="11">
<div class="table-operator xn-mb10">
<a-form ref="searchFormRef" name="advanced_search" class="ant-advanced-search-form" :model="searchFormState">
<a-row :gutter="24">
<a-col :span="12">
<a-form-item name="searchKey">
<a-input v-model:value="searchFormState.searchKey" placeholder="请输入职位名" />
<a-form ref="searchFormRef" :model="searchFormState">
<a-row :gutter="10">
<a-col :xs="24" :sm="8" :md="8" :lg="0" :xl="0">
<a-form-item label="组织:" name="categoryOrOrgId">
<a-tree-select
v-model:value="searchFormState.categoryOrOrgId"
class="xn-wd"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
placeholder="请选择组织"
allow-clear
:tree-data="treeData"
:field-names="{
children: 'children',
label: 'name',
value: 'id'
}"
selectable="false"
tree-line
@change="onCategoryOrOrgIdSelect"
/>
</a-form-item>
</a-col>
<a-col :span="12">
<a-button type="primary" class="xn-mr-10" @click="loadData()"> 查询 </a-button>
<a-button @click="reset()"> 重置 </a-button>
<a-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
<a-form-item name="searchKey">
<a-input v-model:value="searchFormState.searchKey" placeholder="请输入角色名" />
</a-form-item>
</a-col>
<a-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
<a-form-item>
<a-space>
<a-button type="primary" class="xn-mr-10" @click="loadData()"> 查询 </a-button>
<a-button @click="reset()"> 重置 </a-button>
</a-space>
</a-form-item>
</a-col>
</a-row>
</a-form>
@ -66,6 +90,7 @@
:loading="pageLoading"
bordered
:pagination="false"
:scroll="{ x: 'max-content' }"
>
<template #title>
<span>待选择列表 {{ tableRecordNum }} </span>
@ -95,7 +120,7 @@
</div>
</div>
</a-col>
<a-col :span="6">
<a-col :xs="24" :sm="24" :md="24" :lg="6" :xl="6">
<div class="selector-table">
<a-table
ref="selectedTable"
@ -136,8 +161,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '名称',
@ -154,8 +178,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '名称',
@ -216,7 +239,7 @@
const slots = useSlots()
// treeNode title,key,children
const treeFieldNames = { children: 'children', title: 'name', key: 'id' }
//
//
const treeData = ref()
// id
const defaultExpandedKeys = ref([])
@ -436,6 +459,17 @@
}
loadData()
}
//
const onCategoryOrOrgIdSelect = (selectedId) => {
searchFormState.value.current = 0
if (selectedId === 'GLOBAL') {
searchFormState.value.category = selectedId
delete searchFormState.value.orgId
} else {
searchFormState.value.orgId = selectedId
delete searchFormState.value.category
}
}
const dataArray = ref([])
//
const handleOk = () => {
@ -461,7 +495,10 @@
}
//
const reset = () => {
delete searchFormState.value.searchKey
searchFormRef.value.resetFields()
delete searchFormState.value.categoryOrOrgId
delete searchFormState.value.orgId
delete searchFormState.value.category
loadData()
}
const handleClose = () => {
@ -600,9 +637,6 @@
max-height: 500px;
overflow: auto;
}
.ant-form-item {
margin-bottom: 0 !important;
}
.selector-table {
overflow: auto;
max-height: 450px;

View File

@ -1,8 +1,8 @@
<template>
<xn-form-container :visible="visible" :width="700" title="电子签名" @close="handleClear" @ok="handleOk">
<a-row :gutter="5">
<a-col :span="15">
<div class="xn-bdr236">
<a-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
<div class="imgBox">
<vue-esign
ref="esignRef"
v-model:bgColor="bgColor"
@ -15,31 +15,36 @@
/>
</div>
</a-col>
<a-col :span="9">
<div class="xn-h90wat">
<img :src="resultImg" class="xn-bdr236 xn-h90w100" />
<a-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
<div class="imgBox">
<img v-if="resultImg" :src="resultImg"/>
<a-empty v-else />
</div>
</a-col>
</a-row>
<div class="xn-mt10">
<a-space>
<a-form>
<a-row :gutter="16">
<a-col :span="12">
<a-form-item label="画笔粗细:">
<a-input-number v-model:value="lineWidth" :min="1" :max="20" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item>
<div class="xn-pr50">是否裁剪<a-checkbox v-model:checked="isCrop"></a-checkbox></div>
</a-form-item>
</a-col>
</a-row>
</a-form>
<a-button type="primary" @click="handleGenerate">预览</a-button>
<a-button @click="handleReset">清屏</a-button>
</a-space>
<a-form>
<a-row :gutter="16">
<a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<a-form-item label="画笔粗细:">
<a-input-number v-model:value="lineWidth" :min="1" :max="20" />
</a-form-item>
</a-col>
<a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<a-form-item label="是否裁剪:">
<a-checkbox v-model:checked="isCrop"></a-checkbox>
</a-form-item>
</a-col>
<a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<a-form-item>
<a-space>
<a-button type="primary" @click="handleGenerate">预览</a-button>
<a-button @click="handleReset">清屏</a-button>
</a-space>
</a-form-item>
</a-col>
</a-row>
</a-form>
</div>
<template #footer>
<a-button class="xn-mr8" @click="handleClear">取消</a-button>
@ -99,24 +104,17 @@
</script>
<style scoped>
.xn-h90w100 {
height: 90px;
.imgBox {
height: 160px;
width: 100%;
border: 1px solid rgb(236 236 236);
margin-top: 10px;
}
.imgBox img {
height: 160px;
width: 100%;
}
.xn-mt10 {
margin-top: 10px;
}
.xn-h90wat {
height: 90px;
width: auto;
}
.xn-bdr236 {
border: 1px solid rgb(236 236 236);
}
.ant-form-item {
margin-bottom: 0px !important;
}
.xn-pr50 {
padding-right: 50px;
}
</style>

View File

@ -11,6 +11,7 @@
@change="handleChange"
:showUploadList="props.showUploadList"
:accept="accept"
:disabled="props.disabled"
>
<a-button>
<upload-outlined />
@ -32,6 +33,7 @@
:progress="progress"
:showUploadList="props.showUploadList"
:accept="accept"
:disabled="props.disabled"
>
<div class="clearfix" v-if="fileList.length < props.uploadNumber">
<plus-outlined />
@ -53,6 +55,7 @@
:progress="progress"
:showUploadList="props.showUploadList"
:accept="accept"
:disabled="props.disabled"
>
<div class="clearfix" v-if="fileList.length < props.uploadNumber">
<plus-outlined />
@ -89,6 +92,7 @@
:progress="progress"
:showUploadList="props.showUploadList"
:accept="accept"
:disabled="props.disabled"
>
<p class="ant-upload-drag-icon">
<inbox-outlined />
@ -189,7 +193,13 @@
type: [String, Array],
default: undefined,
required: false
}
},
//
disabled: {
type: Boolean,
default: false,
required: false
},
})
const action =
props.uploadResultType === 'id'

View File

@ -35,7 +35,7 @@
@cancel="handleClose"
>
<a-row :gutter="10">
<a-col :span="7">
<a-col :xs="0" :sm="0" :md="0" :lg="7" :xl="7">
<a-card size="small" :loading="cardLoading" class="selectorTreeDiv">
<a-tree
v-if="treeData"
@ -47,18 +47,41 @@
</a-tree>
</a-card>
</a-col>
<a-col :span="11">
<a-col :xs="24" :sm="24" :md="24" :lg="11" :xl="11">
<div class="table-operator xn-mb10">
<a-form ref="searchFormRef" name="advanced_search" class="ant-advanced-search-form" :model="searchFormState">
<a-row :gutter="24">
<a-col :span="12">
<a-form ref="searchFormRef" :model="searchFormState">
<a-row :gutter="10">
<a-col :xs="24" :sm="8" :md="8" :lg="0" :xl="0">
<a-form-item label="组织:" name="orgId">
<a-tree-select
v-model:value="searchFormState.orgId"
class="xn-wd"
:dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
placeholder="请选择组织"
allow-clear
:tree-data="treeData"
:field-names="{
children: 'children',
label: 'name',
value: 'id'
}"
selectable="false"
tree-line
/>
</a-form-item>
</a-col>
<a-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
<a-form-item name="searchKey">
<a-input v-model:value="searchFormState.searchKey" placeholder="请输入用户名" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-button type="primary" class="xn-mr-10" @click="loadData()"> 查询 </a-button>
<a-button @click="reset()"> 重置 </a-button>
<a-col :xs="24" :sm="8" :md="8" :lg="8" :xl="8">
<a-form-item>
<a-space>
<a-button type="primary" class="xn-mr-10" @click="loadData()"> 查询 </a-button>
<a-button @click="reset()"> 重置 </a-button>
</a-space>
</a-form-item>
</a-col>
</a-row>
</a-form>
@ -73,6 +96,7 @@
:loading="pageLoading"
bordered
:pagination="false"
:scroll="{ x: 'max-content' }"
>
<template #title>
<span>待选择列表 {{ tableRecordNum }} </span>
@ -105,7 +129,7 @@
</div>
</div>
</a-col>
<a-col :span="6">
<a-col :xs="24" :sm="24" :md="24" :lg="6" :xl="6">
<div class="user-table">
<a-table
ref="selectedTable"
@ -146,13 +170,11 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '头像',
dataIndex: 'avatar',
width: 50
dataIndex: 'avatar'
},
{
title: '用户名',
@ -169,8 +191,7 @@
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: 50
align: 'center'
},
{
title: '用户名',
@ -441,7 +462,7 @@
}
//
const reset = () => {
delete searchFormState.value.searchKey
searchFormRef.value.resetFields()
loadData()
}
const handleClose = () => {
@ -580,9 +601,6 @@
max-height: 500px;
overflow: auto;
}
.ant-form-item {
margin-bottom: 0 !important;
}
.user-table {
overflow: auto;
max-height: 450px;

View File

@ -75,9 +75,15 @@ const DEFAULT_CONFIG = {
// 默认整体主题
SNOWY_THEME: 'dark',
// 整体表单风格
// 整体表单风格 modal|drawer
SNOWY_FORM_STYLE: 'drawer',
// 前后台登录链接是否展示
FRONT_BACK_LOGIN_URL_SHOW: true,
// 三方登录是否展示
THREE_LOGIN_SHOW: true,
// 系统基础配置,这些是数据库中保存起来的
SYS_BASE_CONFIG: {
// 默认logo
@ -87,15 +93,15 @@ const DEFAULT_CONFIG = {
// 系统名称
SNOWY_SYS_NAME: 'Snowy',
// 版本
SNOWY_SYS_VERSION: '2.0',
SNOWY_SYS_VERSION: '3.0',
// 版权
SNOWY_SYS_COPYRIGHT: 'Snowy ©2022 Created by xiaonuo.vip',
// 版权跳转URL
SNOWY_SYS_COPYRIGHT_URL: 'https://www.xiaonuo.vip',
// 默认文件存储
SNOWY_SYS_DEFAULT_FILE_ENGINE: 'LOCAL',
// 是否开启验证码
SNOWY_SYS_DEFAULT_CAPTCHA_OPEN: 'false',
// 是否开启B端验证码
SNOWY_SYS_DEFAULT_CAPTCHA_OPEN_FLAG_FOR_B: 'false',
// 默认重置密码
SNOWY_SYS_DEFAULT_PASSWORD: '123456'
}

View File

@ -0,0 +1,178 @@
<script setup name="bindEmail">
import { ref, reactive } from 'vue'
import userCenterApi from '@/api/sys/userCenterApi'
import { message, Modal, Form, Input, Button } from 'ant-design-vue'
import { required, rules } from '@/utils/formRules'
const visible = ref(false)
const loading = ref(false)
const captchaLoading = ref(false)
const captchaImage = ref('')
const captchaReqNo = ref('')
const messageCodeReqNo = ref('')
let state = ref({
time: 60,
sendBtn: false
})
const formRef = ref()
const formState = reactive({
email: '',
validCode: '',
emailValidCode: '',
validCodeReqNo: ''
})
//
const checkNeedBindEmail = () => {
userCenterApi.userCenterIsUserNeedBindEmail().then((data) => {
if (data) {
visible.value = true
getCaptcha()
}
})
}
//
const getCaptcha = () => {
captchaLoading.value = true
try {
userCenterApi.userGetPicCaptcha().then((data) => {
captchaImage.value = data.validCodeBase64
captchaReqNo.value = data.validCodeReqNo
})
} finally {
captchaLoading.value = false
}
}
//
const getEmailValidCode = async () => {
try {
if (!formState.email) {
message.error('请输入邮箱号')
return
}
if (!formState.validCode) {
message.error('请输入图片验证码')
return
}
const hide = message.loading('验证码发送中..', 0)
userCenterApi
.userBindEmailGetEmailValidCode({
email: formState.email,
validCode: formState.validCode,
validCodeReqNo: captchaReqNo.value
})
.then((data) => {
//
state.value.sendBtn = true
const interval = window.setInterval(() => {
if (state.value.time-- <= 0) {
state.value.time = 60
state.value.sendBtn = false
window.clearInterval(interval)
}
}, 1000)
messageCodeReqNo.value = data
message.success('验证码已发送到邮箱')
})
.catch(() => {
//
formState.validCode = ''
formState.validCodeReqNo = ''
messageCodeReqNo.value = ''
getCaptcha()
})
.finally(() => {
setTimeout(hide, 100)
})
} catch (error) {
getCaptcha()
}
}
//
const handleSubmit = async () => {
try {
await formRef.value.validate()
loading.value = true
userCenterApi
.userBindEmail({
email: formState.email,
validCode: formState.emailValidCode,
validCodeReqNo: messageCodeReqNo.value
})
.then(() => {
message.success('绑定成功')
visible.value = false
})
.catch(() => {
formState.emailValidCode = ''
messageCodeReqNo.value = ''
})
} catch (error) {
console.error(error)
} finally {
loading.value = false
}
}
//
const formRules = {
email: [required('请输入邮箱号'), rules.email],
validCode: required('请输入图片验证码'),
emailValidCode: [{ required: true, message: '请输入邮箱验证码', trigger: 'blur' }]
}
defineExpose({
checkNeedBindEmail
})
</script>
<template>
<Modal v-model:open="visible" title="绑定邮箱号" :maskClosable="false" :closable="false" :width="400">
<Form ref="formRef" :model="formState" :rules="formRules" layout="vertical">
<Form.Item name="email">
<Input v-model:value="formState.email" placeholder="请输入邮箱号" />
</Form.Item>
<Form.Item name="validCode">
<a-row :gutter="8">
<a-col :span="16">
<Input v-model:value="formState.validCode" placeholder="请输入图片验证码" />
</a-col>
<a-col :span="8">
<img v-if="captchaImage" :src="captchaImage" class="captcha-image" @click="getCaptcha" />
</a-col>
</a-row>
</Form.Item>
<Form.Item name="emailValidCode">
<a-row :gutter="8">
<a-col :span="16">
<Input v-model:value="formState.emailValidCode" placeholder="请输入邮箱验证码" />
</a-col>
<a-col :span="8">
<Button :loading="captchaLoading" @click="getEmailValidCode" style="width: 100%" :disabled="state.sendBtn">
{{ (!state.sendBtn && '获取验证码') || state.time + ' s' }}
</Button>
</a-col>
</a-row>
</Form.Item>
</Form>
<template #footer>
<Button type="primary" :loading="loading" @click="handleSubmit">确定</Button>
</template>
</Modal>
</template>
<style scoped lang="less">
.captcha-wrapper {
display: flex;
align-items: center;
gap: 8px;
.captcha-image {
height: 32px;
cursor: pointer;
}
}
</style>

View File

@ -0,0 +1,178 @@
<script setup name="bindPhone">
import { ref, reactive } from 'vue'
import userCenterApi from '@/api/sys/userCenterApi'
import { message, Modal, Form, Input, Button } from 'ant-design-vue'
import { required, rules } from '@/utils/formRules'
const visible = ref(false)
const loading = ref(false)
const captchaLoading = ref(false)
const captchaImage = ref('')
const captchaReqNo = ref('')
const messageCodeReqNo = ref('')
let state = ref({
time: 60,
sendBtn: false
})
const formRef = ref()
const formState = reactive({
phone: '',
validCode: '',
phoneValidCode: '',
validCodeReqNo: ''
})
//
const checkNeedBindPhone = () => {
userCenterApi.userCenterIsUserNeedBindPhone().then((data) => {
if (data) {
visible.value = true
getCaptcha()
}
})
}
//
const getCaptcha = () => {
captchaLoading.value = true
try {
userCenterApi.userGetPicCaptcha().then((data) => {
captchaImage.value = data.validCodeBase64
captchaReqNo.value = data.validCodeReqNo
})
} finally {
captchaLoading.value = false
}
}
//
const getPhoneValidCode = async () => {
try {
if (!formState.phone) {
message.error('请输入手机号')
return
}
if (!formState.validCode) {
message.error('请输入图片验证码')
return
}
const hide = message.loading('验证码发送中..', 0)
userCenterApi
.userBindPhoneGetPhoneValidCode({
phone: formState.phone,
validCode: formState.validCode,
validCodeReqNo: captchaReqNo.value
})
.then((data) => {
//
state.value.sendBtn = true
const interval = window.setInterval(() => {
if (state.value.time-- <= 0) {
state.value.time = 60
state.value.sendBtn = false
window.clearInterval(interval)
}
}, 1000)
messageCodeReqNo.value = data
message.success('验证码已发送到手机')
})
.catch(() => {
//
formState.validCode = ''
formState.validCodeReqNo = ''
messageCodeReqNo.value = ''
getCaptcha()
})
.finally(() => {
setTimeout(hide, 100)
})
} catch (error) {
getCaptcha()
}
}
//
const handleSubmit = async () => {
try {
await formRef.value.validate()
loading.value = true
userCenterApi
.userBindPhone({
phone: formState.phone,
validCode: formState.phoneValidCode,
validCodeReqNo: messageCodeReqNo.value
})
.then(() => {
message.success('绑定成功')
visible.value = false
})
.catch(() => {
formState.phoneValidCode = ''
messageCodeReqNo.value = ''
})
} catch (error) {
console.error(error)
} finally {
loading.value = false
}
}
//
const formRules = {
phone: [required('请输入手机号'), rules.phone],
validCode: required('请输入图片验证码'),
phoneValidCode: [{ required: true, message: '请输入短信验证码', trigger: 'blur' }]
}
defineExpose({
checkNeedBindPhone
})
</script>
<template>
<Modal v-model:open="visible" title="绑定手机号" :maskClosable="false" :closable="false" :width="400">
<Form ref="formRef" :model="formState" :rules="formRules" layout="vertical">
<Form.Item name="phone">
<Input v-model:value="formState.phone" placeholder="请输入手机号" />
</Form.Item>
<Form.Item name="validCode">
<a-row :gutter="8">
<a-col :span="16">
<Input v-model:value="formState.validCode" placeholder="请输入图片验证码" />
</a-col>
<a-col :span="8">
<img v-if="captchaImage" :src="captchaImage" class="captcha-image" @click="getCaptcha" />
</a-col>
</a-row>
</Form.Item>
<Form.Item name="phoneValidCode">
<a-row :gutter="8">
<a-col :span="16">
<Input v-model:value="formState.phoneValidCode" placeholder="请输入短信验证码" />
</a-col>
<a-col :span="8">
<Button :loading="captchaLoading" @click="getPhoneValidCode" style="width: 100%" :disabled="state.sendBtn">
{{ (!state.sendBtn && '获取验证码') || state.time + ' s' }}
</Button>
</a-col>
</a-row>
</Form.Item>
</Form>
<template #footer>
<Button type="primary" :loading="loading" @click="handleSubmit">确定</Button>
</template>
</Modal>
</template>
<style scoped lang="less">
.captcha-wrapper {
display: flex;
align-items: center;
gap: 8px;
.captcha-image {
height: 32px;
cursor: pointer;
}
}
</style>

View File

@ -170,8 +170,7 @@
},
{
title: '是否已读',
dataIndex: 'read',
width: 120
dataIndex: 'read'
}
]
//

View File

@ -10,7 +10,7 @@
:width="600"
destroyOnClose
dialogClass="searchModal"
:bodyStyle="{ maxHeight: '520px', overflow: 'auto', padding: '14px' }"
:bodyStyle="{ overflow: 'auto', padding: '14px' }"
@close="searchPanelClose"
>
<div
@ -307,7 +307,7 @@
}
}
.search-card {
height: 380px;
height: 580px;
overflow: hidden;
overflow-y: scroll;
}

View File

@ -56,58 +56,77 @@
@change="changeTopHeaderThemeColorSpread"
/>
</div>
<a-divider />
<a-form ref="formRef" class="text-right">
<a-form-item label="模块坞" v-if="!moduleUnfoldDisabled">
<a-switch
:checked="moduleUnfoldOpen"
@change="toggleState('moduleUnfoldOpen')"
:disabled="moduleUnfoldDisabled"
/>
</a-form-item>
<a-form-item label="固定宽度" v-if="layout == layoutEnum.TOP">
<a-switch :checked="fixedWidth" @change="toggleState('fixedWidth')" />
</a-form-item>
<a-form-item label="面包屑">
<a-switch :checked="breadcrumbOpen" @change="toggleState('breadcrumbOpen')" />
</a-form-item>
<a-form-item label="多标签">
<a-switch :checked="layoutTagsOpen" @change="toggleState('layoutTagsOpen')" />
</a-form-item>
<a-form-item label="折叠菜单" v-if="!menuIsCollapseDisabled">
<a-switch
:checked="menuIsCollapse"
@change="toggleState('menuIsCollapse')"
:disabled="menuIsCollapseDisabled"
/>
</a-form-item>
<a-form-item label="菜单排他展开" v-if="!sideUniqueOpenDisabled">
<a-switch
:checked="sideUniqueOpen"
@change="toggleState('sideUniqueOpen')"
:disabled="sideUniqueOpenDisabled"
/>
</a-form-item>
<a-form-item label="登录用户水印">
<a-switch :checked="loginUserWatermarkOpen" @change="toggleState('loginUserWatermarkOpen')" />
</a-form-item>
<a-form-item label="页脚版权信息">
<a-switch :checked="footerCopyrightOpen" @change="toggleState('footerCopyrightOpen')" />
</a-form-item>
<a-form-item label="圆角风格">
<a-switch :checked="roundedCornerStyleOpen" @change="toggleState('roundedCornerStyleOpen')" />
</a-form-item>
<a-form-item label="表单风格">
<a-select
:value="formStyle"
class="!w-[80px]"
size="small"
:options="xnFormStyleOptions"
@change="formStyleChange"
/>
</a-form-item>
</a-form>
<div class="mb-4 layout-slide" v-if="!moduleUnfoldDisabled">
<h4 class="setting-item-title">模块坞</h4>
<a-switch
:checked="moduleUnfoldOpen"
@change="toggleState('moduleUnfoldOpen')"
:disabled="moduleUnfoldDisabled"
/>
</div>
<div class="mb-4 layout-slide" v-if="layout === layoutEnum.TOP">
<h4 class="setting-item-title">固定宽度</h4>
<a-switch :checked="fixedWidth"
@change="toggleState('fixedWidth')"
/>
</div>
<div class="mb-4 layout-slide">
<h4 class="setting-item-title">面包屑</h4>
<a-switch :checked="breadcrumbOpen"
@change="toggleState('breadcrumbOpen')"
/>
</div>
<div class="mb-4 layout-slide">
<h4 class="setting-item-title">多标签</h4>
<a-switch :checked="layoutTagsOpen"
@change="toggleState('layoutTagsOpen')"
/>
</div>
<div class="mb-4 layout-slide" v-if="!menuIsCollapseDisabled">
<h4 class="setting-item-title">折叠菜单</h4>
<a-switch
:checked="menuIsCollapse"
@change="toggleState('menuIsCollapse')"
:disabled="menuIsCollapseDisabled"
/>
</div>
<div class="mb-4 layout-slide" v-if="!sideUniqueOpenDisabled">
<h4 class="setting-item-title">菜单排他展开</h4>
<a-switch
:checked="sideUniqueOpen"
@change="toggleState('sideUniqueOpen')"
:disabled="sideUniqueOpenDisabled"
/>
</div>
<div class="mb-4 layout-slide">
<h4 class="setting-item-title">登录用户水印</h4>
<a-switch :checked="loginUserWatermarkOpen"
@change="toggleState('loginUserWatermarkOpen')"
/>
</div>
<div class="mb-4 layout-slide">
<h4 class="setting-item-title">页脚版权信息</h4>
<a-switch :checked="footerCopyrightOpen"
@change="toggleState('footerCopyrightOpen')"
/>
</div>
<div class="mb-4 layout-slide">
<h4 class="setting-item-title">圆角风格</h4>
<a-switch :checked="roundedCornerStyleOpen"
@change="toggleState('roundedCornerStyleOpen')"
/>
</div>
<div class="mb-4 layout-slide">
<h4 class="setting-item-title">表单风格</h4>
<a-select
:value="formStyle"
class="!w-[80px]"
size="small"
:options="xnFormStyleOptions"
@change="formStyleChange"
/>
</div>
<a-alert
message="以上配置可实时预览,开发者可在 config/index.js 中配置默认值,不建议在生产环境下开放布局设置"
type="warning"

View File

@ -1,20 +1,22 @@
<template>
<div v-drag class="mobile-nav-button" draggable="false" @click="showMobileNav($event)">
<appstore-outlined class="xn-appout-line" />
</div>
<a-drawer v-model:open="visible" :width="210" :closable="false" placement="left">
<header class="snowy-header-logo mobile-nav">
<div class="snowy-header-left">
<div class="logo-bar">
<img class="logo" :src="sysBaseConfig.SNOWY_SYS_LOGO" />
<span>{{ sysBaseConfig.SNOWY_SYS_NAME }}</span>
<div>
<div v-drag class="mobile-nav-button" draggable="false" @click="showMobileNav($event)">
<appstore-outlined class="xn-appout-line" />
</div>
<a-drawer v-model:open="visible" :width="210" :closable="false" placement="left">
<header class="snowy-header-logo mobile-nav">
<div class="snowy-header-left">
<div class="logo-bar">
<img class="logo" :src="sysBaseConfig.SNOWY_SYS_LOGO" />
<span>{{ sysBaseConfig.SNOWY_SYS_NAME }}</span>
</div>
</div>
</div>
</header>
<a-menu class="xn-inline-line" mode="inline" @select="onSelect">
<NavMenu :nav-menus="menu"></NavMenu>
</a-menu>
</a-drawer>
</header>
<a-menu class="xn-inline-line" mode="inline" @select="onSelect">
<NavMenu :nav-menus="menu"></NavMenu>
</a-menu>
</a-drawer>
</div>
</template>
<script setup>
import NavMenu from './NavMenu.vue'

View File

@ -19,6 +19,7 @@
@onOpenChange="onOpenChange"
@switchModule="switchModule"
@menuIsCollapseClick="menuIsCollapseClick"
@displayLayoutChange="exitMaximize"
/>
<!-- 双排菜单布局 -->
<DoubleRowMenu
@ -43,6 +44,7 @@
@onSelect="onSelect"
@switchModule="switchModule"
@showMenu="showMenu"
@displayLayoutChange="exitMaximize"
/>
<!-- 顶部菜单布局 -->
<TopMenu
@ -63,12 +65,15 @@
@switchModule="switchModule"
@onOpenChange="onOpenChange"
@onSelect="onSelect"
@displayLayoutChange="exitMaximize"
/>
<!-- 退出最大化 -->
<div class="main-maximize-exit" @click="exitMaximize">
<fullscreen-exit-outlined class="xn-color-fff" />
</div>
<bind-phone ref="bindPhoneRef" />
<bind-email ref="bindEmailRef" />
</template>
<script setup>
@ -85,6 +90,8 @@
import { NextLoading } from '@/utils/loading'
import { useMenuStore } from '@/store/menu'
import { getLocalHash, checkHash } from '@/utils/version'
import BindPhone from '@/layout/components/bindPhone.vue'
import BindEmail from '@/layout/components/bindEmail.vue'
const store = globalStore()
const kStore = keepAliveStore()
@ -101,6 +108,8 @@
const doublerowSelectedKey = ref([])
const layoutSiderDowbleMenu = ref(true)
const menuList = ref([])
const bindPhoneRef = ref()
const bindEmailRef = ref()
// computed - start
const layout = computed(() => {
return store.layout
@ -240,7 +249,7 @@
onMounted(() => {
// loading
NextLoading.done()
showThis()
// showThis()
onLayoutResize()
window.addEventListener('resize', onLayoutResize)
window.addEventListener('resize', getNav)
@ -250,6 +259,8 @@
updateVersion()
nextTick(() => {
getNav()
bindPhoneRef.value.checkNeedBindPhone()
bindEmailRef.value.checkNeedBindEmail()
})
})
onBeforeUnmount(() => {

View File

@ -7,6 +7,7 @@
collapsible
:theme="sideTheme"
width="210"
v-show="displayLayout"
>
<header id="snowyHeaderLogo" class="snowy-header-logo">
<div class="snowy-header-left">
@ -19,8 +20,8 @@
<div :class="menuIsCollapse ? 'admin-ui-side isCollapse' : 'admin-ui-side'">
<div class="admin-ui-side-scroll">
<a-menu
v-bind:openKeys="openKeys"
v-bind:selectedKeys="selectedKeys"
:openKeys="openKeys"
:selectedKeys="selectedKeys"
:theme="sideTheme"
mode="inline"
@select="onSelect"
@ -32,10 +33,10 @@
</div>
</a-layout-sider>
<!-- 手机端情况下的左侧菜单 -->
<Side-m v-if="isMobile" />
<Side-m v-if="isMobile" v-show="displayLayout" />
<!-- 右侧布局 -->
<a-layout>
<div id="snowyHeader" class="snowy-header">
<div id="snowyHeader" class="snowy-header" v-show="displayLayout">
<div class="snowy-header-left xn-pl0">
<div v-if="!isMobile" class="panel-item hidden-sm-and-down" @click="menuIsCollapseClick">
<MenuUnfoldOutlined v-if="menuIsCollapse" />
@ -47,10 +48,12 @@
<user-bar />
</div>
</div>
<Breadcrumb v-if="!isMobile && breadcrumbOpen" />
<Breadcrumb v-if="!isMobile && breadcrumbOpen" v-show="displayLayout" />
<!-- 多标签 -->
<Tags v-if="!isMobile && layoutTagsOpen" />
<a-layout-content class="main-content-wrapper">
<Tags v-if="!isMobile && layoutTagsOpen" v-show="displayLayout" />
<a-layout-content
:class="displayLayout ? 'main-content-wrapper' : 'main-content-wrapper main-content-wrapper-max'"
>
<div id="admin-ui-main" class="admin-ui-main">
<router-view v-slot="{ Component }">
<keep-alive :include="kStore.keepLiveRoute">
@ -72,8 +75,6 @@
<script setup>
import { useRoute } from 'vue-router'
import { MenuUnfoldOutlined, MenuFoldOutlined } from '@ant-design/icons-vue'
const route = useRoute()
import UserBar from '@/layout/components/userbar.vue'
import Tags from '@/layout/components/tags.vue'
import SideM from '@/layout/components/sideM.vue'
@ -97,8 +98,39 @@
footerCopyrightOpen: { type: Boolean }, //
moduleMenuShow: { type: Boolean }
})
const emit = defineEmits(['onSelect', 'onOpenChange', 'switchModule', 'menuIsCollapseClick'])
const emit = defineEmits(['onSelect', 'onOpenChange', 'switchModule', 'menuIsCollapseClick', 'displayLayoutChange'])
const displayLayout = ref(true)
const route = useRoute()
watch(route, () => {
nextTick(() => {
displayLayout.value = displayLayoutResult()
})
if (displayLayout.value) {
emit('displayLayoutChange')
}
})
onMounted(() => {
nextTick(() => {
displayLayout.value = displayLayoutResult()
})
})
const displayLayoutResult = () => {
// route.meta.keepLivekeepLiveRoute
if (route.meta.keepLive === true) {
props.kStore.pushKeepLive(route.name)
} else {
props.kStore.removeKeepLive(route.name)
}
if (
route.meta.displayLayout === undefined ||
route.meta.displayLayout === null ||
route.meta.displayLayout === 'null'
) {
return true
} else {
return route.meta.displayLayout
}
}
const onSelect = (obj) => {
emit('onSelect', obj)
}
@ -152,4 +184,7 @@
.xn-mg050 {
margin: 0px 150px;
}
.main-content-wrapper-max {
padding: 0;
}
</style>

View File

@ -1,6 +1,6 @@
<template>
<a-layout>
<a-layout-sider v-if="!isMobile" width="80" :theme="sideTheme" :trigger="null" collapsible>
<a-layout-sider v-if="!isMobile" width="80" :theme="sideTheme" :trigger="null" collapsible v-show="displayLayout">
<header id="snowyHeaderLogo" class="snowy-header-logo">
<div class="snowy-header-left">
<div class="logo-bar">
@ -43,9 +43,9 @@
</a-menu>
</a-layout-sider>
<!-- 手机端情况下的左侧菜单 -->
<Side-m v-if="isMobile" />
<Side-m v-if="isMobile" v-show="displayLayout" />
<a-layout>
<div id="snowyHeader" class="snowy-header">
<div id="snowyHeader" class="snowy-header" v-show="displayLayout">
<div class="snowy-header-left xn-pl0">
<moduleMenu v-if="moduleMenuShow" @switchModule="switchModule" />
</div>
@ -54,9 +54,10 @@
</div>
</div>
<a-layout>
<div v-show="displayLayout"></div>
<a-layout-sider
v-if="!isMobile"
v-show="layoutSiderDowbleMenu"
v-show="displayLayout && layoutSiderDowbleMenu"
:collapsed="menuIsCollapse"
:trigger="null"
width="170"
@ -75,10 +76,10 @@
</a-menu>
</a-layout-sider>
<a-layout-content>
<breadcrumb v-if="!isMobile && breadcrumbOpen" />
<breadcrumb v-if="!isMobile && breadcrumbOpen" v-show="displayLayout" />
<!-- 多标签 -->
<Tags v-if="!isMobile && layoutTagsOpen" />
<div class="main-content-wrapper">
<Tags v-if="!isMobile && layoutTagsOpen" v-show="displayLayout" />
<div :class="displayLayout ? 'main-content-wrapper' : 'main-content-wrapper main-content-wrapper-max'">
<div id="admin-ui-main" class="admin-ui-main">
<router-view v-slot="{ Component }">
<keep-alive :include="kStore.keepLiveRoute">
@ -101,8 +102,6 @@
<script setup>
import { useRoute } from 'vue-router'
const route = useRoute()
import UserBar from '@/layout/components/userbar.vue'
import Tags from '@/layout/components/tags.vue'
import SideM from '@/layout/components/sideM.vue'
@ -130,8 +129,39 @@
moduleMenuShow: { type: Boolean },
secondMenuSideTheme: {}
})
const emit = defineEmits(['onSelect', 'switchModule', 'showMenu'])
const emit = defineEmits(['onSelect', 'switchModule', 'showMenu', 'displayLayoutChange'])
const displayLayout = ref(true)
const route = useRoute()
watch(route, () => {
nextTick(() => {
displayLayout.value = displayLayoutResult()
})
if (displayLayout.value) {
emit('displayLayoutChange')
}
})
onMounted(() => {
nextTick(() => {
displayLayout.value = displayLayoutResult()
})
})
const displayLayoutResult = () => {
// route.meta.keepLivekeepLiveRoute
if (route.meta.keepLive === true) {
props.kStore.pushKeepLive(route.name)
} else {
props.kStore.removeKeepLive(route.name)
}
if (
route.meta.displayLayout === undefined ||
route.meta.displayLayout === null ||
route.meta.displayLayout === 'null'
) {
return true
} else {
return route.meta.displayLayout
}
}
const onSelect = (obj) => {
emit('onSelect', obj)
}
@ -182,4 +212,7 @@
.xn-mg050 {
margin: 0px 150px;
}
.main-content-wrapper-max {
padding: 0;
}
</style>

View File

@ -1,7 +1,7 @@
<template>
<a-layout>
<a-layout class="layout">
<div id="snowyHeader" class="snowy-header top-snowy-header xn-pd050">
<div id="snowyHeader" class="snowy-header top-snowy-header xn-pd050" v-show="displayLayout">
<div class="snowy-header-left xn-pl0">
<header id="snowyHeaderLogo" class="snowy-header-logo">
<div class="snowy-header-left">
@ -32,11 +32,13 @@
</div>
</div>
<!-- 手机端情况下的左侧菜单 -->
<Side-m v-if="isMobile" />
<breadcrumb v-if="!isMobile && breadcrumbOpen" />
<Side-m v-if="isMobile" v-show="displayLayout" />
<breadcrumb v-if="!isMobile && breadcrumbOpen" v-show="displayLayout" />
<!-- 多标签 -->
<Tags v-if="!isMobile && layoutTagsOpen" />
<a-layout-content class="main-content-wrapper">
<Tags v-if="!isMobile && layoutTagsOpen" v-show="displayLayout" />
<a-layout-content
:class="displayLayout ? 'main-content-wrapper' : 'main-content-wrapper main-content-wrapper-max'"
>
<div id="admin-ui-main" class="admin-ui-main">
<router-view v-slot="{ Component }">
<keep-alive :include="kStore.keepLiveRoute">
@ -57,7 +59,6 @@
<script setup>
import { useRoute } from 'vue-router'
const route = useRoute()
import UserBar from '@/layout/components/userbar.vue'
import Tags from '@/layout/components/tags.vue'
import SideM from '@/layout/components/sideM.vue'
@ -82,8 +83,39 @@
kStore: { type: Object }, //
footerCopyrightOpen: { type: Boolean } //
})
const emit = defineEmits(['onSelect', 'switchModule', 'onOpenChange'])
const emit = defineEmits(['onSelect', 'switchModule', 'onOpenChange', 'displayLayoutChange'])
const displayLayout = ref(true)
const route = useRoute()
watch(route, () => {
nextTick(() => {
displayLayout.value = displayLayoutResult()
})
if (displayLayout.value) {
emit('displayLayoutChange')
}
})
onMounted(() => {
nextTick(() => {
displayLayout.value = displayLayoutResult()
})
})
const displayLayoutResult = () => {
// route.meta.keepLivekeepLiveRoute
if (route.meta.keepLive === true) {
props.kStore.pushKeepLive(route.name)
} else {
props.kStore.removeKeepLive(route.name)
}
if (
route.meta.displayLayout === undefined ||
route.meta.displayLayout === null ||
route.meta.displayLayout === 'null'
) {
return true
} else {
return route.meta.displayLayout
}
}
const onSelect = (obj) => {
emit('onSelect', obj)
}
@ -135,4 +167,7 @@
.xn-mg050 {
margin: 0px 150px;
}
.main-content-wrapper-max {
padding: 0;
}
</style>

View File

@ -38,24 +38,42 @@ export default {
accountError: 'Please input a user account',
PWPlaceholder: 'Please input a password',
PWError: 'Please input a password',
validLaceholder: 'Please input a valid',
validPlaceholder: 'Please input a valid',
validError: 'Please input a valid',
accountPassword: 'Account Password',
phoneSms: 'Phone SMS',
phoneLogin: 'Phone Login',
emailLogin: 'Email Login',
otpLogin: 'OTP Login',
thirdLogin: 'Third Login',
bindAccount: 'Bind Account',
phonePlaceholder: 'Please input a phone',
phoneInputNumberPlaceholder: 'Please input a phone 11-digit',
smsCodePlaceholder: 'Please input a SMS code',
getSmsCode: 'SMS code',
getEmailCode: 'EMAIL CODE',
machineValidation: 'Machine Validation',
sendingSmsMessage: 'Sending SMS Message',
newPwdPlaceholder: 'Please input a new password',
backLogin: 'Back Login',
restPassword: 'Rest Password',
emailPlaceholder: 'Please input a email',
emailPlaceholder: 'Please input a correct email',
emailCodePlaceholder: 'Please input a Email code',
emailValidPlaceholder: 'Please input a email',
otpCodePlaceholder: 'Please input a OTP code',
restPhoneType: 'For phone rest',
restEmailType: 'For email rest'
restEmailType: 'For email rest',
register: 'Register',
userRegister: 'User Register',
notAccountPleaseRegister: 'Not Account? Register!',
haveAccountPleaseLogin: 'Have Account? Go Login!',
enterAgainPassword: 'Please re-enter your password',
enteredPasswordsDiffer: 'Entered passwords differ',
paramError: 'Param Error',
thirdLoginError: 'Third Login Error',
frontLogin: 'Front Login',
},
user: {
userOrg: 'User Org',
userStatus: 'User Status',
resetPassword: 'Reset Password',
role: 'Role',
@ -66,7 +84,8 @@ export default {
exportUserInfo: 'Export UserInfo',
placeholderNameAndSearchKey: 'Please enter your name or keyword',
placeholderUserStatus: 'Please select status',
popconfirmDeleteUser: 'Are you sure you want to delete it',
popconfirmResatUserPwd: 'Are you sure you want to reset'
placeholderUserOrg: 'Please select org',
popConfirmDeleteUser: 'Are you sure you want to delete it',
popConfirmResatUserPwd: 'Are you sure you want to reset'
}
}

View File

@ -40,24 +40,42 @@ export default {
accountError: '请输入账号',
PWPlaceholder: '请输入密码',
PWError: '请输入密码',
validLaceholder: '请输入验证码',
validPlaceholder: '请输入验证码',
validError: '请输入验证码',
accountPassword: '账号密码',
phoneSms: '手机号登录',
phoneLogin: '手机号登录',
emailLogin: '邮箱登录',
otpLogin: '动态口令登录',
thirdLogin: '三方登录',
bindAccount: '绑定账号',
phonePlaceholder: '请输入手机号',
phoneInputNumberPlaceholder: '请输入11位手机号',
smsCodePlaceholder: '请输入短信验证码',
getSmsCode: '获取验证码',
getEmailCode: '获取验证码',
machineValidation: '机器验证',
sendingSmsMessage: '短信发送中',
newPwdPlaceholder: '请输入新密码',
backLogin: '返回登录',
restPassword: '重置密码',
emailPlaceholder: '请输入邮箱',
emailPlaceholder: '请输入邮箱',
emailCodePlaceholder: '请输入邮件验证码',
emailValidPlaceholder: '请输入正确的邮箱号',
otpCodePlaceholder: '请输入动态口令',
restPhoneType: '手机号找回',
restEmailType: '邮箱找回'
restEmailType: '邮箱找回',
register: '注册',
userRegister: '用户注册',
notAccountPleaseRegister: '没有账号?前往注册!',
haveAccountPleaseLogin: '已有账号?去登录!',
enterAgainPassword: '请再次输入密码',
enteredPasswordsDiffer: '两次输入密码不一致',
paramError: '参数错误',
thirdLoginError: '登录失败',
frontLogin: '前台登录',
},
user: {
userOrg: '所属组织',
userStatus: '用户状态',
resetPassword: '重置密码',
role: '角色',
@ -66,9 +84,10 @@ export default {
grantResource: '授权资源',
grantPermission: '授权权限',
exportUserInfo: '导出信息',
placeholderUserOrg: '请选择所属组织',
placeholderNameAndSearchKey: '请输入姓名或关键词',
placeholderUserStatus: '请选择状态',
popconfirmDeleteUser: '确定要删除吗?',
popconfirmResatUserPwd: '确定要重置吗?'
placeholderUserStatus: '请选择用户状态',
popConfirmDeleteUser: '确定要删除吗?',
popConfirmResatUserPwd: '确定要重置吗?'
}
}

View File

@ -0,0 +1,84 @@
/**
* Copyright [2022] [https://www.xiaonuo.vip]
* Snowy采用APACHE LICENSE 2.0开源协议您在使用过程中需要注意以下几点
* 1.请不要删除和修改根目录下的LICENSE文件
* 2.请不要删除和修改Snowy源码头部的版权声明
* 3.本项目代码可免费商业使用商业使用请保留源码和相关描述文件的项目出处作者声明等
* 4.分发源码时候请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
// 导入扩展路由
import clientExpRouter from '@/router/clientExpRouter'
import tool from '@/utils/tool'
const ClientLogin = () => import('@/views/auth/client/login/login.vue')
const ClientFindPwd = () => import('@/views/auth/client/findPwd/index.vue')
const ClientRegister = () => import('@/views/auth/client/register/index.vue')
const ClientFrontIndex = () => import('@/views/front/index.vue')
// 前台基础路由
const routes = [
{
path: '/front/client/login',
component: ClientLogin,
meta: {
title: '前台登录'
}
},
{
path: '/front/client/findPwd',
component: ClientFindPwd,
meta: {
title: '找回密码'
}
},
{
path: '/front/client/register',
component: ClientRegister,
meta: {
title: '用户注册'
}
},
{
path: '/front/client/index',
component: ClientFrontIndex,
meta: {
title: '个人主页'
}
}
]
// 开放路由列表
const clientOpenRouter = ['/front/client/login', '/front/client/findPwd', '/front/client/register']
/**
* 验证C端路由访问权限
* @param {string} path - 路由路径
* @returns {Object} - 返回验证结果包含是否通过验证和重定向路径
*/
export const validateClientAccess = (path) => {
// 如果不是C端路由直接返回true
if (!path.includes('/front/client/')) {
return { valid: true }
}
// 如果是开放路由,直接通过
if (clientOpenRouter.includes(path)) {
return { valid: true }
}
// 检查是否有客户端token
const clientToken = tool.data.get('CLIENT_TOKEN')
if (!clientToken) {
return {
valid: false,
redirectPath: '/front/client/login'
}
}
return { valid: true }
}
const exportRoutes = [...routes, ...clientExpRouter]
export default exportRoutes

View File

@ -0,0 +1,16 @@
/**
* Copyright [2022] [https://www.xiaonuo.vip]
* Snowy采用APACHE LICENSE 2.0开源协议您在使用过程中需要注意以下几点
* 1.请不要删除和修改根目录下的LICENSE文件
* 2.请不要删除和修改Snowy源码头部的版权声明
* 3.本项目代码可免费商业使用商业使用请保留源码和相关描述文件的项目出处作者声明等
* 4.分发源码时候请注明软件出处 https://www.xiaonuo.vip
* 5.不可二次分发开源参与同类竞品如有想法可联系团队xiaonuobase@qq.com商议合作
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
// 前台扩展路由
const routes = [
// 前台其他的做到这里但是不建议做很多用户在这里的业务最好是分两个前端一个B一个C用户的业务单独写个小程序也是比较合理。
]
export default routes

View File

@ -12,6 +12,7 @@ import { createRouter, createWebHistory } from 'vue-router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import systemRouter from './systemRouter'
import clientBaseRouter, { validateClientAccess } from './clientBaseRouter'
import { afterEach, beforeEach } from './scrollBehavior'
import whiteListRouters from './whiteList'
import userRoutes from '@/config/route'
@ -22,6 +23,7 @@ import { NextLoading } from '@/utils/loading'
import { useMenuStore } from '@/store/menu'
import { useUserStore } from '@/store/user'
import { useDictStore } from '@/store/dict'
import { pathToRegexp } from 'path-to-regexp'
// 进度条配置
NProgress.configure({ showSpinner: false, speed: 500 })
@ -35,7 +37,7 @@ const routes_404 = [
}
]
// 系统路由
const routes = [...systemRouter, ...whiteListRouters, ...routes_404]
const routes = [...systemRouter, ...whiteListRouters, ...clientBaseRouter, ...routes_404]
const router = createRouter({
history: createWebHistory(),
@ -50,7 +52,14 @@ const isGetRouter = ref(false)
// 白名单校验
const exportWhiteListFromRouter = (router) => {
const res = []
for (const item of router) res.push(item.path)
for (const item of router) {
// 生成路由的路径正则表达式(解构出正则表达式对象)
const { regexp } = pathToRegexp(item.path)
res.push({
path: item.path,
regex: regexp // 使用解构后的正则表达式
})
}
return res
}
const whiteList = exportWhiteListFromRouter(whiteListRouters)
@ -65,11 +74,16 @@ router.beforeEach(async (to, from, next) => {
: `${sysBaseConfig.SNOWY_SYS_NAME}`
// 过滤白名单
if (whiteList.includes(to.path)) {
if (whiteList.some(currentRoute => currentRoute.regex.test(to.path))) {
next()
// NProgress.done()
return false
}
// C端检验逻辑
if (to.path.includes('/front/client/')) {
return validateClientAccess(to.path).valid ? next() : next({ path: validateClientAccess(to.path).redirectPath })
}
if (!isGetRouter.value) {
// 初始化菜单加载,代码位置不能变动
const menuStore = useMenuStore()

View File

@ -13,10 +13,11 @@ import tool from '@/utils/tool'
import routerUtil from '@/utils/routerUtil'
const Layout = () => import('@/layout/index.vue')
const Sso = () => import('@/views/auth/sso/index.vue')
const Login = () => import('@/views/auth/login/login.vue')
const Findpwd = () => import('@/views/auth/findPwd/index.vue')
const FindPwd = () => import('@/views/auth/findPwd/index.vue')
const Callback = () => import('@/views/auth/login/callback.vue')
const Register = () => import('@/views/auth/login/register.vue')
// 系统路由
const routes = [
{
@ -26,6 +27,13 @@ const routes = [
redirect: tool.data.get('MENU') ? routerUtil.getIndexMenu(tool.data.get('MENU')).path : config.DASHBOARD_URL,
children: []
},
{
path: '/sso',
component: Sso,
meta: {
title: '单点登录'
}
},
{
path: '/login',
component: Login,
@ -33,20 +41,27 @@ const routes = [
title: '登录'
}
},
{
path: '/register',
component: Register,
meta: {
title: '注册'
}
},
{
path: '/findpwd',
component: Findpwd,
component: FindPwd,
meta: {
title: '找回密码'
}
},
{
path: '/callback',
path: '/callback/:platform',
component: Callback,
meta: {
title: '三方登录'
title: '三方登录回调'
}
}
},
]
export default routes

View File

@ -9,11 +9,17 @@
* 6.若您的项目无法满足以上几点需要更多功能代码获取Snowy商业授权许可请在官网购买授权地址为 https://www.xiaonuo.vip
*/
const constRouters = [
{
path: '/sso'
},
{
path: '/findpwd'
},
{
path: '/callback'
path: '/register'
},
{
path: '/callback/:platform'
},
{
path: '/other',

View File

@ -486,10 +486,6 @@ body,
.snowy-theme-dark .odd {
background-color: #1d1d1d
}
// 解决浏览器F12爆红aria-hidden问题
.ant-modal div[aria-hidden="true"] {
display: none !important
}
// 以下是重写表单设计器的样式
.list-main {

View File

@ -96,14 +96,14 @@ tool.dictTypeData = (dictValue, value) => {
}
const tree = dictTypeTree.find((item) => item.dictValue === dictValue)
if (!tree) {
return '无此字典'
return ''
}
const children = tree.children
if (!tree.children) {
return '无此字典'
return ''
}
const dict = children.find((item) => item.dictValue === value)
return dict ? dict.dictLabel : '无此字典项'
return dict ? dict.dictLabel : ''
}
// 获取某个code下字典的列表多用于字典下拉框

View File

@ -0,0 +1,175 @@
<template>
<a-form ref="emailResetFormRef" :model="emailFormData" :rules="formRules">
<a-form-item name="email">
<a-input v-model:value="emailFormData.email" placeholder="请输入邮箱号" size="large">
<template #prefix>
<mail-outlined class="xn-color-00025" />
</template>
</a-input>
</a-form-item>
<a-form-item name="emailValidCode">
<a-row :gutter="8">
<a-col :span="16">
<a-input v-model:value="emailFormData.emailValidCode" placeholder="请输入邮件验证码" size="large">
<template #prefix>
<mail-outlined class="xn-color-00025" />
</template>
</a-input>
</a-col>
<a-col :span="8">
<a-button size="large" class="xn-wd" @click="getEmailValidCode" :disabled="state.smsSendBtn">
{{ (!state.smsSendBtn && '获取验证码') || state.time + ' s' }}
</a-button>
</a-col>
</a-row>
</a-form-item>
<a-form-item name="newPassword">
<a-input-password v-model:value="emailFormData.newPassword" placeholder="请输入新密码" size="large">
<template #prefix>
<LockOutlined class="xn-color-00025" />
</template>
</a-input-password>
</a-form-item>
<a-form-item>
<a-row :gutter="8">
<a-col :span="8">
<a-button class="xn-wd" round size="large" href="/front/client/login">返回登录</a-button>
</a-col>
<a-col :span="16">
<a-button type="primary" class="xn-wd" :loading="isFind" round size="large" @click="submitReset">
重置密码
</a-button>
</a-col>
</a-row>
</a-form-item>
</a-form>
<a-modal v-model:open="visible" :width="400" title="机器验证" @cancel="handleCancel" @ok="handleOk">
<a-form ref="emailLoginFormModalRef" :model="emailFormModalData" :rules="formModalRules">
<a-form-item name="validCode">
<a-row :gutter="8">
<a-col :span="16">
<a-input v-model:value="emailFormModalData.validCode" placeholder="请输入验证码" size="large">
<template #prefix>
<verified-outlined class="xn-color-00025" />
</template>
</a-input>
</a-col>
<a-col :span="8">
<img :src="validCodeBase64" class="xn-findform-line" @click="getPhonePicCaptcha" />
</a-col>
</a-row>
</a-form-item>
</a-form>
</a-modal>
</template>
<script setup name="emailFindForm">
import { message } from 'ant-design-vue'
import router from '@/router'
import { required, rules } from '@/utils/formRules'
import clientUserCenterApi from '@/api/client/clientUserCenterApi'
import smCrypto from '@/utils/smCrypto'
const emailResetFormRef = ref()
const emailFormData = ref({})
const isFind = ref(false)
let state = ref({
time: 60,
smsSendBtn: false
})
let formRules = ref({})
const emailValidCodeReqNo = ref('')
//
const getEmailValidCode = () => {
formRules.value.email = [required('请输入邮箱号'), rules.email]
delete formRules.value.emailValidCode
delete formRules.value.newPassword
emailResetFormRef.value.validate().then(() => {
//
visible.value = true
//
getPhonePicCaptcha()
})
}
//
const submitReset = () => {
formRules.value.email = [required('请输入邮箱号'), rules.email]
formRules.value.emailValidCode = [required('请输入邮箱验证码'), rules.number]
formRules.value.newPassword = [required('请输入新密码')]
emailResetFormRef.value
.validate()
.then(() => {
emailFormData.value.validCode = emailFormData.value.emailValidCode
emailFormData.value.validCodeReqNo = emailValidCodeReqNo.value
emailFormData.value.newPassword = smCrypto.doSm2Encrypt(emailFormData.value.newPassword)
isFind.value = true
clientUserCenterApi
.clientUserFindPasswordByEmail(emailFormData.value)
.then(() => {
router.replace({
path: '/'
})
message.success('找回成功')
})
.finally(() => {
isFind.value = false
})
})
.catch(() => {})
}
//
const visible = ref(false)
const emailLoginFormModalRef = ref()
const emailFormModalData = ref({})
const validCodeBase64 = ref('')
const formModalRules = {
validCode: [required(), rules.lettersNum]
}
const getPhonePicCaptcha = () => {
clientUserCenterApi.clientUserGetPicCaptcha().then((data) => {
validCodeBase64.value = data.validCodeBase64
emailFormModalData.value.validCodeReqNo = data.validCodeReqNo
})
}
const handleCancel = () => {
visible.value = false
}
const handleOk = () => {
//
emailLoginFormModalRef.value.validate().then(() => {
visible.value = false
//
emailFormModalData.value.email = emailFormData.value.email
//
state.value.smsSendBtn = true
const interval = window.setInterval(() => {
if (state.value.time-- <= 0) {
state.value.time = 60
state.value.smsSendBtn = false
window.clearInterval(interval)
}
}, 1000)
const hide = message.loading('验证码发送中..', 0)
clientUserCenterApi
.clientUserFindPasswordGetEmailValidCode(emailFormModalData.value)
.then((data) => {
emailValidCodeReqNo.value = data
visible.value = false
setTimeout(hide, 500)
})
.catch(() => {
setTimeout(hide, 100)
clearInterval(interval)
state.value.smsSendBtn = false
})
.finally(() => {
emailFormModalData.value.validCode = ''
})
})
}
</script>

View File

@ -0,0 +1,37 @@
<template>
<div class="login-wrapper">
<div class="login_main">
<div class="login-form">
<a-card>
<div class="login-header">
<h2>忘记密码</h2>
</div>
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="userPhone" tab="手机号找回">
<phone-find-form />
</a-tab-pane>
<a-tab-pane key="userEmail" tab="邮箱找回" force-render>
<email-find-form />
</a-tab-pane>
</a-tabs>
</a-card>
</div>
</div>
</div>
</template>
<script setup>
import PhoneFindForm from './phoneFindForm.vue'
import EmailFindForm from './emailFindForm.vue'
import { globalStore } from '@/store'
const store = globalStore()
const activeKey = ref('userPhone')
const sysBaseConfig = computed(() => {
return store.sysBaseConfig
})
</script>
<style lang="less" scoped>
@import '../login/login';
</style>

View File

@ -0,0 +1,175 @@
<template>
<a-form ref="phoneLoginFormRef" :model="phoneFormData" :rules="formRules">
<a-form-item name="phone">
<a-input v-model:value="phoneFormData.phone" placeholder="请输入手机号" size="large">
<template #prefix>
<mobile-outlined class="xn-color-00025" />
</template>
</a-input>
</a-form-item>
<a-form-item name="phoneValidCode">
<a-row :gutter="8">
<a-col :span="16">
<a-input v-model:value="phoneFormData.phoneValidCode" placeholder="请输入短信验证码" size="large">
<template #prefix>
<mail-outlined class="xn-color-00025" />
</template>
</a-input>
</a-col>
<a-col :span="8">
<a-button size="large" class="xn-wd" @click="getPhoneValidCode" :disabled="state.smsSendBtn">{{
(!state.smsSendBtn && '获取验证码') || state.time + ' s'
}}</a-button>
</a-col>
</a-row>
</a-form-item>
<a-form-item name="newPassword">
<a-input-password v-model:value="phoneFormData.newPassword" placeholder="请输入新密码" size="large">
<template #prefix>
<LockOutlined class="xn-color-00025" />
</template>
</a-input-password>
</a-form-item>
<a-form-item>
<a-row :gutter="8">
<a-col :span="8">
<a-button class="xn-wd" round size="large" href="/front/client/login">返回登录</a-button>
</a-col>
<a-col :span="16">
<a-button type="primary" class="xn-wd" :loading="isFind" round size="large" @click="submitReset">
重置密码
</a-button>
</a-col>
</a-row>
</a-form-item>
</a-form>
<a-modal v-model:open="visible" :width="400" title="机器验证" @cancel="handleCancel" @ok="handleOk">
<a-form ref="phoneLoginFormModalRef" :model="phoneFormModalData" :rules="formModalRules">
<a-form-item name="validCode">
<a-row :gutter="8">
<a-col :span="17">
<a-input v-model:value="phoneFormModalData.validCode" placeholder="机器验证" size="large">
<template #prefix>
<verified-outlined class="xn-color-00025" />
</template>
</a-input>
</a-col>
<a-col :span="7">
<img :src="validCodeBase64" class="xn-findform-line" @click="getPhonePicCaptcha" />
</a-col>
</a-row>
</a-form-item>
</a-form>
</a-modal>
</template>
<script setup name="phoneFindForm">
import { message } from 'ant-design-vue'
import router from '@/router'
import { required, rules } from '@/utils/formRules'
import clientUserCenterApi from '@/api/client/clientUserCenterApi'
import smCrypto from '@/utils/smCrypto'
const phoneLoginFormRef = ref()
const phoneFormData = ref({})
const isFind = ref(false)
let state = ref({
time: 60,
smsSendBtn: false
})
let formRules = ref({})
const phoneValidCodeReqNo = ref('')
//
const getPhoneValidCode = () => {
formRules.value.phone = [required('请输入手机号'), rules.phone]
delete formRules.value.phoneValidCode
delete formRules.value.newPassword
phoneLoginFormRef.value.validate().then(() => {
//
visible.value = true
//
getPhonePicCaptcha()
})
}
//
const submitReset = () => {
formRules.value.phone = [required('请输入手机号'), rules.phone]
formRules.value.phoneValidCode = [required('请输入验证码'), rules.number]
formRules.value.newPassword = [required('请输入新密码')]
phoneLoginFormRef.value
.validate()
.then(() => {
phoneFormData.value.validCode = phoneFormData.value.phoneValidCode
phoneFormData.value.validCodeReqNo = phoneValidCodeReqNo.value
phoneFormData.value.newPassword = smCrypto.doSm2Encrypt(phoneFormData.value.newPassword)
isFind.value = true
clientUserCenterApi
.clientUserFindPasswordByPhone(phoneFormData.value)
.then(() => {
router.replace({
path: '/'
})
message.success('找回成功')
})
.finally(() => {
isFind.value = false
})
})
.catch(() => {})
}
//
const visible = ref(false)
const phoneLoginFormModalRef = ref()
const phoneFormModalData = ref({})
const validCodeBase64 = ref('')
const formModalRules = {
validCode: [required(), rules.lettersNum]
}
const getPhonePicCaptcha = () => {
clientUserCenterApi.clientUserGetPicCaptcha().then((data) => {
validCodeBase64.value = data.validCodeBase64
phoneFormModalData.value.validCodeReqNo = data.validCodeReqNo
})
}
const handleCancel = () => {
visible.value = false
}
const handleOk = () => {
//
phoneLoginFormModalRef.value.validate().then(() => {
visible.value = false
//
phoneFormModalData.value.phone = phoneFormData.value.phone
//
state.value.smsSendBtn = true
const interval = window.setInterval(() => {
if (state.value.time-- <= 0) {
state.value.time = 60
state.value.smsSendBtn = false
window.clearInterval(interval)
}
}, 1000)
const hide = message.loading('验证码发送中..', 0)
clientUserCenterApi
.clientUserFindPasswordGetPhoneValidCode(phoneFormModalData.value)
.then((data) => {
phoneValidCodeReqNo.value = data
visible.value = false
setTimeout(hide, 500)
})
.catch(() => {
setTimeout(hide, 100)
clearInterval(interval)
state.value.smsSendBtn = false
})
.finally(() => {
phoneFormModalData.value.validCode = ''
})
})
}
</script>

View File

@ -0,0 +1,152 @@
<template>
<a-form ref="emailLoginFormRef" :model="emailFormData" :rules="formRules">
<a-form-item name="email">
<a-input v-model:value="emailFormData.email" placeholder="请输入邮箱号" size="large">
<template #prefix>
<mail-outlined class="text-black text-opacity-25" />
</template>
</a-input>
</a-form-item>
<a-form-item name="emailValidCode">
<a-row :gutter="8">
<a-col :span="16">
<a-input v-model:value="emailFormData.emailValidCode" placeholder="请输入验证码" size="large">
<template #prefix>
<mail-outlined class="text-black text-opacity-25" />
</template>
</a-input>
</a-col>
<a-col :span="8">
<a-button size="large" class="xn-wd" @click="getEmailValidCode" :disabled="state.smsSendBtn">
{{ (!state.smsSendBtn && '获取验证码') || state.time + ' s' }}
</a-button>
</a-col>
</a-row>
</a-form-item>
<a-form-item>
<a-button type="primary" class="xn-wd" :loading="loading" round size="large" @click="submitLogin">
登录
</a-button>
</a-form-item>
</a-form>
<a-modal v-model:open="visible" :width="400" title="机器验证" @cancel="handleCancel" @ok="handleOk">
<a-form ref="emailLoginFormModalRef" :model="emailFormModalData" :rules="formModalRules">
<a-form-item name="validCode">
<a-row :gutter="8">
<a-col :span="17">
<a-input v-model:value="emailFormModalData.validCode" placeholder="请输入验证码" size="large">
<template #prefix>
<verified-outlined class="text-black text-opacity-25" />
</template>
</a-input>
</a-col>
<a-col :span="7">
<img :src="validCodeBase64" class="xn-findform-line" @click="getEmailPicCaptcha" />
</a-col>
</a-row>
</a-form-item>
</a-form>
</a-modal>
</template>
<script setup name="emailLoginForm">
import { message } from 'ant-design-vue'
import { required, rules } from '@/utils/formRules'
import clientLoginApi from '@/api/auth/client/clientLoginApi'
import { afterLogin } from './util'
const emailLoginFormRef = ref()
const emailFormData = ref({})
const loading = ref(false)
let state = ref({
time: 60,
smsSendBtn: false
})
let formRules = ref({})
const emailValidCodeReqNo = ref('')
//
const getEmailValidCode = () => {
formRules.value.email = [required('请输入正确的邮箱号'), rules.email]
delete formRules.value.emailValidCode
emailLoginFormRef.value.validate().then(() => {
//
visible.value = true
//
getEmailPicCaptcha()
})
}
//
const submitLogin = async () => {
formRules.value.email = [required('请输入正确的邮箱号'), rules.email]
formRules.value.emailValidCode = [required('请输入邮箱验证码'), rules.number]
const validate = await emailLoginFormRef.value.validate().catch(() => {})
if (!validate) return false
emailFormData.value.validCode = emailFormData.value.emailValidCode
// delete emailFormData.value.emailValidCode
emailFormData.value.validCodeReqNo = emailValidCodeReqNo.value
loading.value = true
clientLoginApi
.clientLoginByEmail(emailFormData.value)
.then((token) => {
afterLogin(token)
})
.finally(() => {
loading.value = false
})
}
//
const visible = ref(false)
const emailLoginFormModalRef = ref()
const emailFormModalData = ref({})
const validCodeBase64 = ref('')
const validCodeReqNo = ref('')
const formModalRules = {
validCode: [required('请输入图形验证码'), rules.lettersNum]
}
const getEmailPicCaptcha = () => {
clientLoginApi.clientGetPicCaptcha().then((data) => {
validCodeBase64.value = data.validCodeBase64
emailFormModalData.value.validCodeReqNo = data.validCodeReqNo
})
}
const handleCancel = () => {
visible.value = false
}
const handleOk = () => {
//
emailLoginFormModalRef.value.validate().then(() => {
visible.value = false
//
emailFormModalData.value.email = emailFormData.value.email
//
state.value.smsSendBtn = true
const interval = window.setInterval(() => {
if (state.value.time-- <= 0) {
state.value.time = 60
state.value.smsSendBtn = false
window.clearInterval(interval)
}
}, 1000)
const hide = message.loading('验证码发送中..', 0)
clientLoginApi
.clientGetEmailValidCode(emailFormModalData.value)
.then((data) => {
emailValidCodeReqNo.value = data
visible.value = false
setTimeout(hide, 500)
emailFormModalData.value.validCode = ''
})
.catch(() => {
setTimeout(hide, 100)
clearInterval(interval)
state.value.smsSendBtn = false
})
})
}
</script>

View File

@ -0,0 +1,59 @@
.login-wrapper {
width: 100vw;
height: 100vh;
overflow: hidden;
background: linear-gradient(135deg, #1677ff 0%, #a64fff 100%);
display: flex;
justify-content: center;
}
.login_main {
width: 100%;
max-width: 450px;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.login-form {
width: 100%;
background: rgba(255, 255, 255, 0.95);
border-radius: 6px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.login-header {
text-align: center;
}
.login-header h2 {
font-size: 28px;
font-weight: 600;
color: #1a1a1a;
margin: 0;
}
.xn-color-0d84ff {
transition: color 0.3s ease;
}
.xn-color-0d84ff:hover {
color: var(--primary-1);
}
:deep(.ant-tabs-tab) {
font-size: 16px;
padding: 12px 0;
}
:deep(.ant-input-affix-wrapper) {
border-radius: 6px;
height: 45px;
}
:deep(.ant-btn) {
height: 45px;
border-radius: 6px;
font-weight: 500;
}
:deep(.ant-card) {
background: transparent;
border: none;
box-shadow: none;
}
:deep(.ant-card-body) {
padding: 24px 32px;
}

Some files were not shown because too many files have changed in this diff Show More